<?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>229756</bug_id>
          
          <creation_ts>2021-09-01 03:00:37 -0700</creation_ts>
          <short_desc>[css-flexbox] Add support for left &amp; right css-align-3 positional alignment properties</short_desc>
          <delta_ts>2021-09-07 04:12: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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>rego</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1789279</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-09-01 03:00:37 -0700</bug_when>
    <thetext>[css-flexbox] Add support for left &amp; right css-align-3 positional alignment properties</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1789280</commentid>
    <comment_count>1</comment_count>
      <attachid>437009</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-09-01 03:16:50 -0700</bug_when>
    <thetext>Created attachment 437009
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790894</commentid>
    <comment_count>2</comment_count>
      <attachid>437009</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2021-09-07 01:51:30 -0700</bug_when>
    <thetext>Comment on attachment 437009
Patch

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

r=me

&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1533
&gt; +

nit: unnecessary empty line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790897</commentid>
    <comment_count>3</comment_count>
      <attachid>437009</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2021-09-07 02:10:57 -0700</bug_when>
    <thetext>Comment on attachment 437009
Patch

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

r=me, I left some inline comments.

&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1502
&gt; +static LayoutUnit initialJustifyContentOffset(const RenderStyle&amp; style, LayoutUnit availableFreeSpace, unsigned numberOfChildren, bool isReversed)

Do we need to pass style? Can&apos;t we just use style() on this method?

&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1511
&gt; +    if (justifyContent == ContentPosition::Left || justifyContent == ContentPosition::Right) {
&gt; +        if (style.isColumnFlexDirection()) {
&gt; +            if (style.isHorizontalWritingMode()) {
&gt; +                // If the propertyâs axis is not parallel with either left&lt;-&gt;right axis, this value behaves as start. Currently,

Nit: weird character here.

&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1512
&gt; +                // the only case where the propertyâs axis is not parallel with either left&lt;-&gt;right axis is in a column flexbox.

Nit: and here too.

&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1523
&gt; +                // https: //www.w3.org/TR/css-align-3/#valdef-justify-content-left
&gt; +                justifyContent = ContentPosition::Start;
&gt; +            } else if ((justifyContent == ContentPosition::Left &amp;&amp; style.isFlippedBlocksWritingMode()) || (justifyContent == ContentPosition::Right &amp;&amp; style.isFlippedLinesWritingMode()))
&gt; +                justifyContent = ContentPosition::End;
&gt; +            else
&gt; +                justifyContent = ContentPosition::Start;
&gt; +        } else if ((justifyContent == ContentPosition::Left &amp;&amp; !style.isLeftToRightDirection()) || (justifyContent == ContentPosition::Right &amp;&amp; style.isLeftToRightDirection()))
&gt; +            justifyContent = ContentPosition::End;
&gt; +        else
&gt; +            justifyContent = ContentPosition::Start;
&gt; +    }

I don&apos;t have a strong opinion, but I have an alternative code for this, not sure if that simplifies things or not, but at least in my head it makes it easier to understand it.
The basic idea is that &quot;left&quot; is usually &quot;start&quot; and &quot;right&quot; is usually &quot;end&quot;, unless some specific conditions happen.

Could we write something like this (of course adding comments as needed)?
  if (justifyContent == ContentPosition::Left) {
    justifyContent = ContentPosition::Start;

    if (style.isColumnFlexDirection())
      if (!style.isHorizontalWritingMode() &amp;&amp; style.isFlippedBlocksWritingMode())
        justifyContent = ContentPosition::End;
    else if (!style.isLeftToRightDirection()))
      justifyContent = ContentPosition::End;
  }
  if (justifyContent == ContentPosition::Right) {
    justifyContent = ContentPosition::End;

    if (style.isColumnFlexDirection())
      if (style.isHorizontalWritingMode() || !style.isFlippedLinesWritingMode())
        justifyContent = ContentPosition::Start;
    else if (!style.isLeftToRightDirection()))
      justifyContent = ContentPosition::Start;
  }

Do you think it&apos;s easier or hader to follow?

&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1861
&gt; +    ContentDistribution distribution = style().resolvedJustifyContentDistribution(contentAlignmentNormalBehavior());

We end up calling this twice, first in initialJustifyContentOffset() and later here.

I believe I won&apos;t change the method signature and keep passing the ContentPosition and ContentDitribution to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790910</commentid>
    <comment_count>4</comment_count>
      <attachid>437009</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-09-07 02:37:54 -0700</bug_when>
    <thetext>Comment on attachment 437009
Patch

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

Many thanks for the useful reviews. I&apos;ll address the comments before landing.

&gt;&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1502
&gt;&gt; +static LayoutUnit initialJustifyContentOffset(const RenderStyle&amp; style, LayoutUnit availableFreeSpace, unsigned numberOfChildren, bool isReversed)
&gt; 
&gt; Do we need to pass style? Can&apos;t we just use style() on this method?

It&apos;s a static function not a method :)

&gt;&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1511
&gt;&gt; +                // If the propertyâs axis is not parallel with either left&lt;-&gt;right axis, this value behaves as start. Currently,
&gt; 
&gt; Nit: weird character here.

hmm, very likely copy-paste issues from spec text.

&gt;&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1523
&gt;&gt; +    }
&gt; 
&gt; I don&apos;t have a strong opinion, but I have an alternative code for this, not sure if that simplifies things or not, but at least in my head it makes it easier to understand it.
&gt; The basic idea is that &quot;left&quot; is usually &quot;start&quot; and &quot;right&quot; is usually &quot;end&quot;, unless some specific conditions happen.
&gt; 
&gt; Could we write something like this (of course adding comments as needed)?
&gt;   if (justifyContent == ContentPosition::Left) {
&gt;     justifyContent = ContentPosition::Start;
&gt; 
&gt;     if (style.isColumnFlexDirection())
&gt;       if (!style.isHorizontalWritingMode() &amp;&amp; style.isFlippedBlocksWritingMode())
&gt;         justifyContent = ContentPosition::End;
&gt;     else if (!style.isLeftToRightDirection()))
&gt;       justifyContent = ContentPosition::End;
&gt;   }
&gt;   if (justifyContent == ContentPosition::Right) {
&gt;     justifyContent = ContentPosition::End;
&gt; 
&gt;     if (style.isColumnFlexDirection())
&gt;       if (style.isHorizontalWritingMode() || !style.isFlippedLinesWritingMode())
&gt;         justifyContent = ContentPosition::Start;
&gt;     else if (!style.isLeftToRightDirection()))
&gt;       justifyContent = ContentPosition::Start;
&gt;   }
&gt; 
&gt; Do you think it&apos;s easier or hader to follow?

Yeah much easier indeed, I just tried to avoid the duplication of the structure but for the sake of maintenance I think it&apos;s better to follow your approach.

&gt;&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1533
&gt;&gt; +
&gt; 
&gt; nit: unnecessary empty line.

ok.

&gt;&gt; Source/WebCore/rendering/RenderFlexibleBox.cpp:1861
&gt;&gt; +    ContentDistribution distribution = style().resolvedJustifyContentDistribution(contentAlignmentNormalBehavior());
&gt; 
&gt; We end up calling this twice, first in initialJustifyContentOffset() and later here.
&gt; 
&gt; I believe I won&apos;t change the method signature and keep passing the ContentPosition and ContentDitribution to it.

That&apos;s true for this case but not for staticMainAxisPositionForPositionedChild() case for example.

The thing is that you need the style() anyway, so provided that the resolvedJustifyContentPosition() are really cheap (they&apos;re just getters and logical operations) I think we could keep them as is even though we&apos;re indeed calling them twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790940</commentid>
    <comment_count>5</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2021-09-07 04:11:43 -0700</bug_when>
    <thetext>Committed r282078 (241378@main): &lt;https://commits.webkit.org/241378@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1790941</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-09-07 04:12:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/82815793&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>437009</attachid>
            <date>2021-09-01 03:16:50 -0700</date>
            <delta_ts>2021-09-07 01:51:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-229756-20210901121648.patch</filename>
            <type>text/plain</type>
            <size>15566</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgxODQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmY5OTEwZTI5ODk4OWEy
YmFkMTA4NDlmN2Y2NGQ4Y2E0M2E2MDAzMC4uMjU4MzljMTcyZWIwMGY0NWFjYmYwNmJmMmQ3ZTll
MGJjZTA1NDAzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDIxLTA5LTAxICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZmxl
eGJveF0gQWRkIHN1cHBvcnQgZm9yIGxlZnQgJiByaWdodCBjc3MtYWxpZ24tMyBwb3NpdGlvbmFs
IGFsaWdubWVudCBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMjk3NTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBMZWZ0IGFuZCBSaWdodCBwb3NpdGlvbmFs
IGFsaWdubWVudCBwcm9wZXJ0aWVzIGZyb20KKyAgICAgICAgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cu
b3JnL2Nzcy1hbGlnbi0zLyNwb3NpdGlvbmFsLXZhbHVlcy4gVGhlc2UgdHdvIHByb3BlcnRpZXMK
KyAgICAgICAgYWxpZ24gdGhlIGZsZXggaXRlbSB0byBiZSBmbHVzaCB3aXRoIHRoZSBhbGlnbm1l
bnQgY29udGFpbmVyJ3MgKHRoZSBmbGV4IGNvbnRhaW5lcikKKyAgICAgICAgbGluZS1sZWZ0fHJp
Z2h0IG9yIHBoeXNpY2FsIGxlZnR8cmlnaHQgd2hpY2hldmVyIGlzIGluIHRoZSBhcHByb3ByaWF0
ZSBheGlzLiBOb3RlIHRoYXQKKyAgICAgICAgY29udHJhcnkgdG8gc3RhcnQvZW5kIHdoaWNoIGNo
YW5nZSBhY2NvcmRpbmcgdG8gdGhlIHRleHQgZGlyZWN0aW9uLCBsZWZ0IGFsd2F5cyByZWZlcgor
ICAgICAgICB0byB3aGVyZSBsdHIgdGV4dCB3b3VsZCBzdGFydCBhbmQgcmlnaHQgYWx3YXlzIHJl
ZmVyIHRvIHdoZXJlIHJ0bCB0ZXh0IHdvdWxkIHN0YXJ0LgorCisgICAgICAgIFRoZSBvbmx5IGNh
dmVhdCBpcyB0aGF0IHNwZWNzIG1lbnRpb24gdGhhdCBpbiB0aGUgY2FzZSBvZiBoYXZpbmcgb3J0
aG9nb25hbCBzdGFydDwtPmVuZCBhbmQKKyAgICAgICAgbGVmdDwtPnJpZ2h0IGF4aXMgKG9ubHkg
aGFwcGVucyBpbiBjb2x1bW4gZmxleGJveGVzKSB0aGVuIGJvdGggbGVmdHxyaWdodCBiZWhhdmUg
YXMgc3RhcnQuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbEp1c3RpZnlDb250ZW50T2Zmc2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OmFsaWdubWVudE9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4
aWJsZUJveDo6c3RhdGljTWFpbkF4aXNQb3NpdGlvbkZvclBvc2l0aW9uZWRDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6YWxpZ25tZW50Rm9yQ2hpbGQgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dEFuZFBsYWNlQ2hp
bGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmxheW91dENvbHVt
blJldmVyc2UpOgorCiAyMDIxLTA4LTEzICBTZXJnaW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleGJveF0gQWRkIGluaXRpYWwgc3VwcG9ydCBm
b3IgY3NzLWFsaWduLTMgcG9zaXRpb25hbCBhbGlnbm1lbnQgcHJvcGVydGllcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAKaW5kZXggZGE4ZDczNWQw
OTg3ODM3M2E4MGQzN2Q3MGFmYjE5MTJhNzAzODBhNi4uZjg4MmUyMzRjMzFlMzExNDU4YTZmZWRl
MGU5ODc0ZWIzNGE3NGI3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsZXhpYmxlQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5
b3V0U3RhdGUuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUg
IlJlbmRlclZpZXcuaCIKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KQEAgLTE0OTgsMTQgKzE0OTksMzggQEAgYm9vbCBSZW5kZXJGbGV4aWJsZUJv
eDo6cmVzb2x2ZUZsZXhpYmxlTGVuZ3RocyhGbGV4U2lnbiBmbGV4U2lnbiwgVmVjdG9yPEZsZXhJ
dGUKICAgICByZXR1cm4gIXRvdGFsVmlvbGF0aW9uOwogfQogCi1zdGF0aWMgTGF5b3V0VW5pdCBp
bml0aWFsSnVzdGlmeUNvbnRlbnRPZmZzZXQoTGF5b3V0VW5pdCBhdmFpbGFibGVGcmVlU3BhY2Us
IENvbnRlbnRQb3NpdGlvbiBqdXN0aWZ5Q29udGVudCwgQ29udGVudERpc3RyaWJ1dGlvbiBqdXN0
aWZ5Q29udGVudERpc3RyaWJ1dGlvbiwgdW5zaWduZWQgbnVtYmVyT2ZDaGlsZHJlbiwgYm9vbCBp
c1JldmVyc2VkKQorc3RhdGljIExheW91dFVuaXQgaW5pdGlhbEp1c3RpZnlDb250ZW50T2Zmc2V0
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgTGF5b3V0VW5pdCBhdmFpbGFibGVGcmVlU3BhY2Us
IHVuc2lnbmVkIG51bWJlck9mQ2hpbGRyZW4sIGJvb2wgaXNSZXZlcnNlZCkKIHsKKyAgICBDb250
ZW50UG9zaXRpb24ganVzdGlmeUNvbnRlbnQgPSBzdHlsZS5yZXNvbHZlZEp1c3RpZnlDb250ZW50
UG9zaXRpb24oY29udGVudEFsaWdubWVudE5vcm1hbEJlaGF2aW9yKCkpOworICAgIENvbnRlbnRE
aXN0cmlidXRpb24ganVzdGlmeUNvbnRlbnREaXN0cmlidXRpb24gPSBzdHlsZS5yZXNvbHZlZEp1
c3RpZnlDb250ZW50RGlzdHJpYnV0aW9uKGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvcigp
KTsKKworICAgIC8vIEZpcnN0IG9mIGFsbCByZXNvbHZlIExlZnQgYW5kIFJpZ2h0IHNvIHdlIGNv
dWxkIGNvbnZlcnQgaXQgdG8gdGhlaXIgZXF1aXZhbGVudCBwcm9wZXJ0aWVzIGhhbmRsZWQgYmVs
bG93LgorICAgIGlmIChqdXN0aWZ5Q29udGVudCA9PSBDb250ZW50UG9zaXRpb246OkxlZnQgfHwg
anVzdGlmeUNvbnRlbnQgPT0gQ29udGVudFBvc2l0aW9uOjpSaWdodCkgeworICAgICAgICBpZiAo
c3R5bGUuaXNDb2x1bW5GbGV4RGlyZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIGlmIChzdHlsZS5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHBy
b3BlcnR54oCZcyBheGlzIGlzIG5vdCBwYXJhbGxlbCB3aXRoIGVpdGhlciBsZWZ0PC0+cmlnaHQg
YXhpcywgdGhpcyB2YWx1ZSBiZWhhdmVzIGFzIHN0YXJ0LiBDdXJyZW50bHksCisgICAgICAgICAg
ICAgICAgLy8gdGhlIG9ubHkgY2FzZSB3aGVyZSB0aGUgcHJvcGVydHnigJlzIGF4aXMgaXMgbm90
IHBhcmFsbGVsIHdpdGggZWl0aGVyIGxlZnQ8LT5yaWdodCBheGlzIGlzIGluIGEgY29sdW1uIGZs
ZXhib3guCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6IC8vd3d3LnczLm9yZy9UUi9jc3MtYWxp
Z24tMy8jdmFsZGVmLWp1c3RpZnktY29udGVudC1sZWZ0CisgICAgICAgICAgICAgICAganVzdGlm
eUNvbnRlbnQgPSBDb250ZW50UG9zaXRpb246OlN0YXJ0OworICAgICAgICAgICAgfSBlbHNlIGlm
ICgoanVzdGlmeUNvbnRlbnQgPT0gQ29udGVudFBvc2l0aW9uOjpMZWZ0ICYmIHN0eWxlLmlzRmxp
cHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpIHx8IChqdXN0aWZ5Q29udGVudCA9PSBDb250ZW50UG9z
aXRpb246OlJpZ2h0ICYmIHN0eWxlLmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSkpCisgICAg
ICAgICAgICAgICAganVzdGlmeUNvbnRlbnQgPSBDb250ZW50UG9zaXRpb246OkVuZDsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudCA9IENvbnRlbnRQb3Np
dGlvbjo6U3RhcnQ7CisgICAgICAgIH0gZWxzZSBpZiAoKGp1c3RpZnlDb250ZW50ID09IENvbnRl
bnRQb3NpdGlvbjo6TGVmdCAmJiAhc3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB8fCAo
anVzdGlmeUNvbnRlbnQgPT0gQ29udGVudFBvc2l0aW9uOjpSaWdodCAmJiBzdHlsZS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpKQorICAgICAgICAgICAganVzdGlmeUNvbnRlbnQgPSBDb250ZW50
UG9zaXRpb246OkVuZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAganVzdGlmeUNvbnRlbnQg
PSBDb250ZW50UG9zaXRpb246OlN0YXJ0OworICAgIH0KKyAgICBBU1NFUlQoanVzdGlmeUNvbnRl
bnQgIT0gQ29udGVudFBvc2l0aW9uOjpMZWZ0KTsKKyAgICBBU1NFUlQoanVzdGlmeUNvbnRlbnQg
IT0gQ29udGVudFBvc2l0aW9uOjpSaWdodCk7CisKICAgICBpZiAoanVzdGlmeUNvbnRlbnQgPT0g
Q29udGVudFBvc2l0aW9uOjpGbGV4RW5kCiAgICAgICAgIHx8IChqdXN0aWZ5Q29udGVudCA9PSBD
b250ZW50UG9zaXRpb246OkVuZCAmJiAhaXNSZXZlcnNlZCkKICAgICAgICAgfHwgKGp1c3RpZnlD
b250ZW50ID09IENvbnRlbnRQb3NpdGlvbjo6U3RhcnQgJiYgaXNSZXZlcnNlZCkpCiAgICAgICAg
IHJldHVybiBhdmFpbGFibGVGcmVlU3BhY2U7CiAgICAgaWYgKGp1c3RpZnlDb250ZW50ID09IENv
bnRlbnRQb3NpdGlvbjo6Q2VudGVyKQogICAgICAgICByZXR1cm4gYXZhaWxhYmxlRnJlZVNwYWNl
IC8gMjsKKwogICAgIGlmIChqdXN0aWZ5Q29udGVudERpc3RyaWJ1dGlvbiA9PSBDb250ZW50RGlz
dHJpYnV0aW9uOjpTcGFjZUFyb3VuZCkgewogICAgICAgICBpZiAoYXZhaWxhYmxlRnJlZVNwYWNl
ID4gMCAmJiBudW1iZXJPZkNoaWxkcmVuKQogICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZUZy
ZWVTcGFjZSAvICgyICogbnVtYmVyT2ZDaGlsZHJlbik7CkBAIC0xNTQ0LDYgKzE1NjksOCBAQCBz
dGF0aWMgTGF5b3V0VW5pdCBhbGlnbm1lbnRPZmZzZXQoTGF5b3V0VW5pdCBhdmFpbGFibGVGcmVl
U3BhY2UsIEl0ZW1Qb3NpdGlvbiBwbwogICAgICAgICBicmVhazsKICAgICBjYXNlIEl0ZW1Qb3Np
dGlvbjo6U3RhcnQ6CiAgICAgY2FzZSBJdGVtUG9zaXRpb246OkVuZDoKKyAgICBjYXNlIEl0ZW1Q
b3NpdGlvbjo6TGVmdDoKKyAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6UmlnaHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgiJXUgYWxpZ25tZW50Rm9yQ2hpbGQgc2hvdWxkIGhhdmUgdHJhbnNm
b3JtZWQgdGhpcyBwb3NpdGlvbiB2YWx1ZSB0byBzb21ldGhpbmcgd2UgaGFuZGxlIGJlbG93LiIs
IHN0YXRpY19jYXN0PHVpbnQ4X3Q+KHBvc2l0aW9uKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSXRlbVBvc2l0aW9uOjpTdHJldGNoOgpAQCAtMTU3MCw4ICsxNTk3LDYgQEAgc3RhdGljIExh
eW91dFVuaXQgYWxpZ25tZW50T2Zmc2V0KExheW91dFVuaXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBJ
dGVtUG9zaXRpb24gcG8KICAgICBjYXNlIEl0ZW1Qb3NpdGlvbjo6TGFzdEJhc2VsaW5lOgogICAg
IGNhc2UgSXRlbVBvc2l0aW9uOjpTZWxmU3RhcnQ6CiAgICAgY2FzZSBJdGVtUG9zaXRpb246OlNl
bGZFbmQ6Ci0gICAgY2FzZSBJdGVtUG9zaXRpb246OkxlZnQ6Ci0gICAgY2FzZSBJdGVtUG9zaXRp
b246OlJpZ2h0OgogICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGxhc3QgYmFzZWxpbmUuCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE1ODksMTEgKzE2MTQsOCBAQCB2b2lkIFJlbmRlckZs
ZXhpYmxlQm94OjpzZXRPdmVycmlkaW5nTWFpblNpemVGb3JDaGlsZChSZW5kZXJCb3gmIGNoaWxk
LCBMYXlvdXRVbgogTGF5b3V0VW5pdCBSZW5kZXJGbGV4aWJsZUJveDo6c3RhdGljTWFpbkF4aXNQ
b3NpdGlvbkZvclBvc2l0aW9uZWRDaGlsZChjb25zdCBSZW5kZXJCb3gmIGNoaWxkKQogewogICAg
IGNvbnN0IExheW91dFVuaXQgYXZhaWxhYmxlU3BhY2UgPSBtYWluQXhpc0NvbnRlbnRFeHRlbnQo
Y29udGVudExvZ2ljYWxIZWlnaHQoKSkgLSBtYWluQXhpc0V4dGVudEZvckNoaWxkKGNoaWxkKTsK
LQotICAgIENvbnRlbnRQb3NpdGlvbiBwb3NpdGlvbiA9IHN0eWxlKCkucmVzb2x2ZWRKdXN0aWZ5
Q29udGVudFBvc2l0aW9uKGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvcigpKTsKLSAgICBD
b250ZW50RGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbiA9IHN0eWxlKCkucmVzb2x2ZWRKdXN0aWZ5
Q29udGVudERpc3RyaWJ1dGlvbihjb250ZW50QWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IoKSk7CiAg
ICAgYXV0byBpc1JldmVyc2UgPSBpc0NvbHVtbk9yUm93UmV2ZXJzZSgpOwotICAgIExheW91dFVu
aXQgb2Zmc2V0ID0gaW5pdGlhbEp1c3RpZnlDb250ZW50T2Zmc2V0KGF2YWlsYWJsZVNwYWNlLCBw
b3NpdGlvbiwgZGlzdHJpYnV0aW9uLCAxLCBpc1JldmVyc2UpOworICAgIExheW91dFVuaXQgb2Zm
c2V0ID0gaW5pdGlhbEp1c3RpZnlDb250ZW50T2Zmc2V0KHN0eWxlKCksIGF2YWlsYWJsZVNwYWNl
LCAxLCBpc1JldmVyc2UpOwogICAgIGlmIChpc1JldmVyc2UpCiAgICAgICAgIG9mZnNldCA9IGF2
YWlsYWJsZVNwYWNlIC0gb2Zmc2V0OwogICAgIHJldHVybiBvZmZzZXQ7CkBAIC0xNjg0LDYgKzE3
MDYsOCBAQCBJdGVtUG9zaXRpb24gUmVuZGVyRmxleGlibGVCb3g6OmFsaWdubWVudEZvckNoaWxk
KGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7CiAgICAgSXRlbVBvc2l0aW9uIGFsaWdu
ID0gY2hpbGQuc3R5bGUoKS5yZXNvbHZlZEFsaWduU2VsZigmc3R5bGUoKSwgc2VsZkFsaWdubWVu
dE5vcm1hbEJlaGF2aW9yKCkpLnBvc2l0aW9uKCk7CiAgICAgQVNTRVJUKGFsaWduICE9IEl0ZW1Q
b3NpdGlvbjo6QXV0byAmJiBhbGlnbiAhPSBJdGVtUG9zaXRpb246Ok5vcm1hbCk7CisgICAgLy8g
TGVmdCBhbmQgUmlnaHQgYXJlIG9ubHkgZm9yIGp1c3RpZnktKi4KKyAgICBBU1NFUlQoYWxpZ24g
IT0gSXRlbVBvc2l0aW9uOjpMZWZ0ICYmIGFsaWduICE9IEl0ZW1Qb3NpdGlvbjo6UmlnaHQpOwog
CiAgICAgaWYgKGFsaWduID09IEl0ZW1Qb3NpdGlvbjo6QmFzZWxpbmUgJiYgIW1haW5BeGlzSXND
aGlsZElubGluZUF4aXMoY2hpbGQpKQogICAgICAgICBhbGlnbiA9IEl0ZW1Qb3NpdGlvbjo6Rmxl
eFN0YXJ0OwpAQCAtMTgyNSwxOCArMTg0OSwxNiBAQCBib29sIFJlbmRlckZsZXhpYmxlQm94Ojpj
aGlsZEhhc1BlcmNlbnRIZWlnaHREZXNjZW5kYW50cyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlcgog
CiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRBbmRQbGFjZUNoaWxkcmVuKExheW91dFVu
aXQmIGNyb3NzQXhpc09mZnNldCwgVmVjdG9yPEZsZXhJdGVtPiYgY2hpbGRyZW4sIExheW91dFVu
aXQgYXZhaWxhYmxlRnJlZVNwYWNlLCBib29sIHJlbGF5b3V0Q2hpbGRyZW4sIFZlY3RvcjxMaW5l
Q29udGV4dD4mIGxpbmVDb250ZXh0cywgTGF5b3V0VW5pdCBnYXBCZXR3ZWVuSXRlbXMpCiB7Ci0g
ICAgQ29udGVudFBvc2l0aW9uIHBvc2l0aW9uID0gc3R5bGUoKS5yZXNvbHZlZEp1c3RpZnlDb250
ZW50UG9zaXRpb24oY29udGVudEFsaWdubWVudE5vcm1hbEJlaGF2aW9yKCkpOwotICAgIENvbnRl
bnREaXN0cmlidXRpb24gZGlzdHJpYnV0aW9uID0gc3R5bGUoKS5yZXNvbHZlZEp1c3RpZnlDb250
ZW50RGlzdHJpYnV0aW9uKGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvcigpKTsKLQogICAg
IExheW91dFVuaXQgYXV0b01hcmdpbk9mZnNldCA9IGF1dG9NYXJnaW5PZmZzZXRJbk1haW5BeGlz
KGNoaWxkcmVuLCBhdmFpbGFibGVGcmVlU3BhY2UpOwogICAgIExheW91dFVuaXQgbWFpbkF4aXNP
ZmZzZXQgPSBmbG93QXdhcmVCb3JkZXJTdGFydCgpICsgZmxvd0F3YXJlUGFkZGluZ1N0YXJ0KCk7
Ci0gICAgbWFpbkF4aXNPZmZzZXQgKz0gaW5pdGlhbEp1c3RpZnlDb250ZW50T2Zmc2V0KGF2YWls
YWJsZUZyZWVTcGFjZSwgcG9zaXRpb24sIGRpc3RyaWJ1dGlvbiwgY2hpbGRyZW4uc2l6ZSgpLCBp
c0NvbHVtbk9yUm93UmV2ZXJzZSgpKTsKKyAgICBtYWluQXhpc09mZnNldCArPSBpbml0aWFsSnVz
dGlmeUNvbnRlbnRPZmZzZXQoc3R5bGUoKSwgYXZhaWxhYmxlRnJlZVNwYWNlLCBjaGlsZHJlbi5z
aXplKCksIGlzQ29sdW1uT3JSb3dSZXZlcnNlKCkpOwogICAgIGlmIChzdHlsZSgpLmZsZXhEaXJl
Y3Rpb24oKSA9PSBGbGV4RGlyZWN0aW9uOjpSb3dSZXZlcnNlKQogICAgICAgICBtYWluQXhpc09m
ZnNldCArPSBpc0hvcml6b250YWxGbG93KCkgPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiBo
b3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7CiAKICAgICBMYXlvdXRVbml0IHRvdGFsTWFpbkV4
dGVudCA9IG1haW5BeGlzRXh0ZW50KCk7CiAgICAgTGF5b3V0VW5pdCBtYXhBc2NlbnQsIG1heERl
c2NlbnQ7IC8vIFVzZWQgd2hlbiBhbGlnbi1pdGVtczogYmFzZWxpbmUuCiAgICAgTGF5b3V0VW5p
dCBtYXhDaGlsZENyb3NzQXhpc0V4dGVudDsKKyAgICBDb250ZW50RGlzdHJpYnV0aW9uIGRpc3Ry
aWJ1dGlvbiA9IHN0eWxlKCkucmVzb2x2ZWRKdXN0aWZ5Q29udGVudERpc3RyaWJ1dGlvbihjb250
ZW50QWxpZ25tZW50Tm9ybWFsQmVoYXZpb3IoKSk7CiAgICAgYm9vbCBzaG91bGRGbGlwTWFpbkF4
aXMgPSAhaXNDb2x1bW5GbG93KCkgJiYgIWlzTGVmdFRvUmlnaHRGbG93KCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBh
dXRvJiBmbGV4SXRlbSA9IGNoaWxkcmVuW2ldOwpAQCAtMTkzMSwxNiArMTk1MywxNSBAQCB2b2lk
IFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRBbmRQbGFjZUNoaWxkcmVuKExheW91dFVuaXQmIGNy
b3NzQXhpc09mZnNldCwgVmVjdAogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRDb2x1
bW5SZXZlcnNlKGNvbnN0IFZlY3RvcjxGbGV4SXRlbT4mIGNoaWxkcmVuLCBMYXlvdXRVbml0IGNy
b3NzQXhpc09mZnNldCwgTGF5b3V0VW5pdCBhdmFpbGFibGVGcmVlU3BhY2UpCiB7Ci0gICAgQ29u
dGVudFBvc2l0aW9uIHBvc2l0aW9uID0gc3R5bGUoKS5yZXNvbHZlZEp1c3RpZnlDb250ZW50UG9z
aXRpb24oY29udGVudEFsaWdubWVudE5vcm1hbEJlaGF2aW9yKCkpOwotICAgIENvbnRlbnREaXN0
cmlidXRpb24gZGlzdHJpYnV0aW9uID0gc3R5bGUoKS5yZXNvbHZlZEp1c3RpZnlDb250ZW50RGlz
dHJpYnV0aW9uKGNvbnRlbnRBbGlnbm1lbnROb3JtYWxCZWhhdmlvcigpKTsKLSAgICAKICAgICAv
LyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGxvZ2ljIGluIGxheW91dEFuZFBsYWNlQ2hpbGRyZW4s
IGV4Y2VwdCB3ZSBwbGFjZQogICAgIC8vIHRoZSBjaGlsZHJlbiBzdGFydGluZyBmcm9tIHRoZSBl
bmQgb2YgdGhlIGZsZXhib3guIFdlIGFsc28gZG9uJ3QgbmVlZCB0bwogICAgIC8vIGxheW91dCBh
bnl0aGluZyBzaW5jZSB3ZSdyZSBqdXN0IG1vdmluZyB0aGUgY2hpbGRyZW4gdG8gYSBuZXcgcG9z
aXRpb24uCiAgICAgTGF5b3V0VW5pdCBtYWluQXhpc09mZnNldCA9IGxvZ2ljYWxIZWlnaHQoKSAt
IGZsb3dBd2FyZUJvcmRlckVuZCgpIC0gZmxvd0F3YXJlUGFkZGluZ0VuZCgpOwotICAgIG1haW5B
eGlzT2Zmc2V0IC09IGluaXRpYWxKdXN0aWZ5Q29udGVudE9mZnNldChhdmFpbGFibGVGcmVlU3Bh
Y2UsIHBvc2l0aW9uLCBkaXN0cmlidXRpb24sIGNoaWxkcmVuLnNpemUoKSwgaXNDb2x1bW5PclJv
d1JldmVyc2UoKSk7CisgICAgbWFpbkF4aXNPZmZzZXQgLT0gaW5pdGlhbEp1c3RpZnlDb250ZW50
T2Zmc2V0KHN0eWxlKCksIGF2YWlsYWJsZUZyZWVTcGFjZSwgY2hpbGRyZW4uc2l6ZSgpLCBpc0Nv
bHVtbk9yUm93UmV2ZXJzZSgpKTsKICAgICBtYWluQXhpc09mZnNldCAtPSBpc0hvcml6b250YWxG
bG93KCkgPyB2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCkgOiBob3Jpem9udGFsU2Nyb2xsYmFySGVp
Z2h0KCk7Ci0gICAgCisKKyAgICBDb250ZW50RGlzdHJpYnV0aW9uIGRpc3RyaWJ1dGlvbiA9IHN0
eWxlKCkucmVzb2x2ZWRKdXN0aWZ5Q29udGVudERpc3RyaWJ1dGlvbihjb250ZW50QWxpZ25tZW50
Tm9ybWFsQmVoYXZpb3IoKSk7CisKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVu
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIGF1dG8mIGNoaWxkID0gY2hpbGRyZW5baV0uYm94Owog
ICAgICAgICBBU1NFUlQoIWNoaWxkLmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1
OWRjODI4NGU5NjIwM2Y5OWVlYTdiMDY5NGY4YjgxNGVhZjllMDkyLi4yMTYyODJmZGE2YjM3MzEy
Zjg5ZjUyMTdiNmU5NTJmODcxMTEwM2ZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMjEtMDkt
MDEgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W2Nzcy1mbGV4Ym94XSBBZGQgc3VwcG9ydCBmb3IgbGVmdCAmIHJpZ2h0IGNzcy1hbGlnbi0zIHBv
c2l0aW9uYWwgYWxpZ25tZW50IHByb3BlcnRpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIyOTc1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4cGVjdGF0aW9uczogUmVtb3ZlZCAxMyBXUFQg
dGVzdHMgdGhhdCBhcmUgbm93IHBhc3NpbmcuCisKIDIwMjEtMDgtMTMgIFNlcmdpbyBWaWxsYXIg
U2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAKICAgICAgICAgW2Nzcy1mbGV4Ym94XSBBZGQg
aW5pdGlhbCBzdXBwb3J0IGZvciBjc3MtYWxpZ24tMyBwb3NpdGlvbmFsIGFsaWdubWVudCBwcm9w
ZXJ0aWVzCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0
VGVzdHMvVGVzdEV4cGVjdGF0aW9ucwppbmRleCA3MmJiYzRjYmYxMjJjM2RkMjI5NjNlZTkzOTdm
YzZjMzc0OTk1ODA2Li43NzczNjEzYzgzYjc0YmY3NDAyMmUwMjFkYjRiOTI2MGE0M2RiNTQ5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3Rz
L1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTQxODIsMTQgKzQxODIsMTIgQEAgd2Via2l0Lm9yZy9iLzIy
MTQ3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9hYnNw
b3MvZmxleC0KIHdlYmtpdC5vcmcvYi8yMjE0NzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9jc3MvY3NzLWZsZXhib3gvYWJzcG9zL2ZsZXgtYWJzcG9zLXN0YXRpY3Bvcy1hbGlnbi1z
ZWxmLXZlcnRXTS0wMDMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIy
MTQ3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9hYnNw
b3MvZmxleC1hYnNwb3Mtc3RhdGljcG9zLWFsaWduLXNlbGYtdmVydFdNLTAwNC5odG1sIFsgSW1h
Z2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjIxNDcyIGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvY3NzL2Nzcy1mbGV4Ym94L2Fic3Bvcy9mbGV4LWFic3Bvcy1zdGF0aWNwb3Mt
ZmFsbGJhY2stYWxpZ24tY29udGVudC0wMDEuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzIyMTQ3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
ZmxleGJveC9hYnNwb3MvZmxleC1hYnNwb3Mtc3RhdGljcG9zLWp1c3RpZnktY29udGVudC0wMDEu
aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIyMTQ3MiBpbXBvcnRlZC93
M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9hYnNwb3MvZmxleC1hYnNwb3Mt
c3RhdGljcG9zLWp1c3RpZnktY29udGVudC0wMDIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzIyMTQ3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9j
c3MtZmxleGJveC9hYnNwb3MvZmxleC1hYnNwb3Mtc3RhdGljcG9zLWp1c3RpZnktY29udGVudC0w
MDMuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIyMTQ3MiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9hYnNwb3MvZmxleC1hYnNw
b3Mtc3RhdGljcG9zLWp1c3RpZnktY29udGVudC0wMDQuaHRtbCBbIEltYWdlT25seUZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzIyMTQ3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nz
cy9jc3MtZmxleGJveC9hYnNwb3MvZmxleC1hYnNwb3Mtc3RhdGljcG9zLWp1c3RpZnktY29udGVu
dC0wMDYuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIyMTQ3MiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9hYnNwb3MvZmxleC1h
YnNwb3Mtc3RhdGljcG9zLWp1c3RpZnktY29udGVudC0wMDcuaHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzIyMTQ3MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3MtZmxleGJveC9hYnNwb3MvZmxleC1hYnNwb3Mtc3RhdGljcG9zLWp1c3RpZnktY29u
dGVudC0wMDguaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMTQ3MiBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9hYnNwb3MvZmxl
eC1hYnNwb3Mtc3RhdGljcG9zLWp1c3RpZnktY29udGVudC1ydGwtMDAxLmh0bWwgWyBJbWFnZU9u
bHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMjE0NzIgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy9jc3MvY3NzLWZsZXhib3gvYWJzcG9zL2ZsZXgtYWJzcG9zLXN0YXRpY3Bvcy1qdXN0
aWZ5LWNvbnRlbnQtdmVydFdNLTAwMS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvMjIxNDcyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1mbGV4
Ym94L2Fic3Bvcy9mbGV4LWFic3Bvcy1zdGF0aWNwb3MtanVzdGlmeS1jb250ZW50LXZlcnRXTS0w
MDIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIyMTQ3MiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9hYnNwb3MvZmxleC1hYnNw
b3Mtc3RhdGljcG9zLW1hcmdpbi0wMDIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQpAQCAtNDIx
MCwxOSArNDIwOCw2IEBAIHdlYmtpdC5vcmcvYi8yMjE0NzUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy9jc3MvY3NzLWZsZXhib3gvZmxleGJveC13cml0CiB3ZWJraXQub3JnL2IvMjIx
NDc1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1mbGV4Ym94L2ZsZXhi
b3gtd3JpdGluZy1tb2RlLTAxNC5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMjIxNDc1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1mbGV4Ym94
L2ZsZXhib3gtd3JpdGluZy1tb2RlLTAxNS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKLSMg
anVzdGlmeS1jb250ZW50IGluIGZsZXhib3guCi13ZWJraXQub3JnL2IvMjIxNDc3IGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1mbGV4Ym94L2ZsZXhib3gtanVzdGlmeS1j
b250ZW50LWhvcml6LTAwMWEueGh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLXdlYmtpdC5vcmcv
Yi8yMjE0NzcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWZsZXhib3gv
ZmxleGJveC1qdXN0aWZ5LWNvbnRlbnQtaG9yaXotMDAxYi54aHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQotd2Via2l0Lm9yZy9iLzIyMTQ3NyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L2Nzcy9jc3MtZmxleGJveC9mbGV4Ym94LWp1c3RpZnktY29udGVudC1ob3Jpei0wMDMueGh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMjE0NzcgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWZsZXhib3gvZmxleGJveC1qdXN0aWZ5LWNvbnRlbnQt
aG9yaXotMDA1LnhodG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjIxNDc3
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1mbGV4Ym94L2ZsZXhib3gt
anVzdGlmeS1jb250ZW50LWhvcml6LTAwNi54aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotd2Vi
a2l0Lm9yZy9iLzIyMTQ3NyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3Mt
ZmxleGJveC9mbGV4Ym94LWp1c3RpZnktY29udGVudC12ZXJ0LTAwNi54aHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMTQ3NyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtZmxleGJveC9mbGV4Ym94LWp1c3RpZnktY29udGVudC13bXZlcnQtMDAx
LnhodG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjIxNDc3IGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvY3NzL2Nzcy1mbGV4Ym94L2ZsZXhib3hfanVzdGlmeWNv
bnRlbnQtbGVmdC0wMDEuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIy
MTQ3NyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9mbGV4
Ym94X2p1c3RpZnljb250ZW50LWxlZnQtMDAyLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLXdl
YmtpdC5vcmcvYi8yMjE0NzcgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3Nz
LWZsZXhib3gvZmxleGJveF9qdXN0aWZ5Y29udGVudC1yaWdodC0wMDEuaHRtbCBbIEltYWdlT25s
eUZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMTQ3NyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL2Nzcy9jc3MtZmxleGJveC9mbGV4Ym94X2p1c3RpZnljb250ZW50LXJpZ2h0LTAwMi5o
dG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCi0KIHdlYmtpdC5vcmcvYi8yMjE0NjggaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWZsZXhib3gvZmxleGJveC1hbGlnbi1zZWxm
LWhvcml6LTAwMi54aHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIyMTQ2
OCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL2Nzcy9jc3MtZmxleGJveC9mbGV4Ym94
LWFsaWduLXNlbGYtdmVydC0wMDIueGh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5v
cmcvYi8yMjE0NjggaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9jc3MvY3NzLWZsZXhi
b3gvZmxleGJveC1hbGlnbi1zZWxmLXZlcnQtcnRsLTAwNS54aHRtbCBbIEltYWdlT25seUZhaWx1
cmUgXQo=
</data>
<flag name="review"
          id="460117"
          type_id="1"
          status="+"
          setter="jfernandez"
    />
    <flag name="commit-queue"
          id="460144"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>