<?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>202815</bug_id>
          
          <creation_ts>2019-10-10 11:21:08 -0700</creation_ts>
          <short_desc>[FTW] Correct radial gradient handling of various radius orderings</short_desc>
          <delta_ts>2019-10-16 19:13:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>pvollan</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1578743</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-10 11:21:08 -0700</bug_when>
    <thetext>The initial Direct2D Radial Gradient implementation did not properly handle cases where the order of the two radius arguments were not small-to-large. This led to incorrect drawing in some cases tested in the &apos;canvas/Philip&apos; test set.

This patch handles these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578752</commentid>
    <comment_count>1</comment_count>
      <attachid>380664</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-10 11:27:27 -0700</bug_when>
    <thetext>Created attachment 380664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578753</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-10 11:29:03 -0700</bug_when>
    <thetext>This corrects three radius gradient test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578809</commentid>
    <comment_count>3</comment_count>
      <attachid>380664</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2019-10-10 13:18:31 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:137
&gt; -        [&amp;] (const RadialData&amp; data) {
&gt; +        [&amp;] (RadialData&amp; data) {

It does not seem like the data parameter is modified, can we keep the const modifier?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578837</commentid>
    <comment_count>4</comment_count>
      <attachid>380664</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-10 14:07:10 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:137
&gt;&gt; +        [&amp;] (RadialData&amp; data) {
&gt; 
&gt; It does not seem like the data parameter is modified, can we keep the const modifier?

Yes. I modified while experimenting with another change, and forgot to put this back. I&apos;ll fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578937</commentid>
    <comment_count>5</comment_count>
      <attachid>380664</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2019-10-10 17:57:36 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:99
&gt; +                    std::stable_sort(gradientStops.begin(), gradientStops.end(), [](const D2D1_GRADIENT_STOP&amp; a, const D2D1_GRADIENT_STOP&amp; b) {
&gt; +                        return a.position &lt; b.position;
&gt; +                    });

Is sorting needed here, or is it sufficient to reverse the list of gradient stops?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578958</commentid>
    <comment_count>6</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 18:52:24 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:79
&gt;              if (data.startRadius &amp;&amp; data.endRadius) {

Which test cases are using this code path?
I can&apos;t find code setting startRadius and endRadius.
Can they be negative values?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578959</commentid>
    <comment_count>7</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 18:54:26 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt; Source/WebCore/PlatformFTW.cmake:3
&gt; +else ()

Use NOT. And, indent the the inside.

if (NOT APPLE)
    include(platform/ImageDecoders.cmake)
endif ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578960</commentid>
    <comment_count>8</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 18:58:41 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:79
&gt;&gt;              if (data.startRadius &amp;&amp; data.endRadius) {
&gt; 
&gt; Which test cases are using this code path?
&gt; I can&apos;t find code setting startRadius and endRadius.
&gt; Can they be negative values?

I found it. It is canvas.createRadialGradient.
https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/createRadialGradient

negative values are checked in CanvasRenderingContext2DBase::createRadialGradient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578963</commentid>
    <comment_count>9</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 19:16:43 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:83
&gt;                      startPosition = 1.0 / startPosition;

Can startPosition be zero? Then, zero-devision can happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578968</commentid>
    <comment_count>10</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 19:25:10 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:83
&gt;&gt;                      startPosition = 1.0 / startPosition;
&gt; 
&gt; Can startPosition be zero? Then, zero-devision can happen.

Oops. Never mind. It is always &gt;1.0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578971</commentid>
    <comment_count>11</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 19:41:45 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:79
&gt;&gt;&gt;              if (data.startRadius &amp;&amp; data.endRadius) {
&gt;&gt; 
&gt;&gt; Which test cases are using this code path?
&gt;&gt; I can&apos;t find code setting startRadius and endRadius.
&gt;&gt; Can they be negative values?
&gt; 
&gt; I found it. It is canvas.createRadialGradient.
&gt; https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/createRadialGradient
&gt; 
&gt; negative values are checked in CanvasRenderingContext2DBase::createRadialGradient.

I think this is not a right condition for restoring start position. It should be

  if (data.startRadius || data.endRadius) {

I think swapping startRadius and endRadius should be done before. Then, this condition can be:

  if (data.startRadius) {

I think this is the condition which is easy to understand when restoring start position is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578978</commentid>
    <comment_count>12</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 19:55:48 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:79
&gt;&gt;&gt;&gt;              if (data.startRadius &amp;&amp; data.endRadius) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Which test cases are using this code path?
&gt;&gt;&gt; I can&apos;t find code setting startRadius and endRadius.
&gt;&gt;&gt; Can they be negative values?
&gt;&gt; 
&gt;&gt; I found it. It is canvas.createRadialGradient.
&gt;&gt; https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/createRadialGradient
&gt;&gt; 
&gt;&gt; negative values are checked in CanvasRenderingContext2DBase::createRadialGradient.
&gt; 
&gt; I think this is not a right condition for restoring start position. It should be
&gt; 
&gt;   if (data.startRadius || data.endRadius) {
&gt; 
&gt; I think swapping startRadius and endRadius should be done before. Then, this condition can be:
&gt; 
&gt;   if (data.startRadius) {
&gt; 
&gt; I think this is the condition which is easy to understand when restoring start position is needed.

You should split reversing stops and restoring the first position

 if (data.startRadius &gt; data.endRadius) {
   // Reverse stops...
   std::swap(data.startRadius, data.endRadius);
 }
 if (data.startRadius) {
   // Restore first position...
 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578987</commentid>
    <comment_count>13</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-10 21:20:01 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:143
&gt; +                offset.setHeight(offset.height() - radiusDiff);

In my understanding this is the real offset. Am I worng? https://ibb.co/hFfD7D0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580420</commentid>
    <comment_count>14</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-15 18:33:09 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #6)
&gt; Comment on attachment 380664 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=380664&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:79
&gt; &gt;              if (data.startRadius &amp;&amp; data.endRadius) {
&gt; 
&gt; Which test cases are using this code path?

We hit this code path in the following cases:

canvas/philip/tests/2d.gradient.radial.inside2.html
canvas/philip/tests/2d.gradient.radial.inside3.html
canvas/philip/tests/2d.gradient.radial.outside2.html
canvas/philip/tests/2d.gradient.radial.outside3.html
canvas/philip/tests/2d.gradient.radial.touch2.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580421</commentid>
    <comment_count>15</comment_count>
      <attachid>380664</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-15 18:43:55 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt;&gt; Source/WebCore/PlatformFTW.cmake:3
&gt;&gt; +else ()
&gt; 
&gt; Use NOT. And, indent the the inside.
&gt; 
&gt; if (NOT APPLE)
&gt;     include(platform/ImageDecoders.cmake)
&gt; endif ()

Okay

&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:143
&gt;&gt; +                offset.setHeight(offset.height() - radiusDiff);
&gt; 
&gt; In my understanding this is the real offset. Am I worng? https://ibb.co/hFfD7D0

Yes -- I think that is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580481</commentid>
    <comment_count>16</comment_count>
      <attachid>380664</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-16 01:07:18 -0700</bug_when>
    <thetext>Comment on attachment 380664
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:143
&gt;&gt;&gt; +                offset.setHeight(offset.height() - radiusDiff);
&gt;&gt; 
&gt;&gt; In my understanding this is the real offset. Am I worng? https://ibb.co/hFfD7D0
&gt; 
&gt; Yes -- I think that is correct.

Then, offset should look like:

offset = (point1 * startRadius - point0 * endRadius) / (startRadius - endRadius)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580543</commentid>
    <comment_count>17</comment_count>
      <attachid>381074</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-16 09:31:06 -0700</bug_when>
    <thetext>Created attachment 381074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580544</commentid>
    <comment_count>18</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-16 09:33:05 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #16)
&gt; Comment on attachment 380664 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=380664&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:143
&gt; &gt;&gt;&gt; +                offset.setHeight(offset.height() - radiusDiff);
&gt; &gt;&gt; 
&gt; &gt;&gt; In my understanding this is the real offset. Am I worng? https://ibb.co/hFfD7D0
&gt; &gt; 
&gt; &gt; Yes -- I think that is correct.
&gt; 
&gt; Then, offset should look like:
&gt; 
&gt; offset = (point1 * startRadius - point0 * endRadius) / (startRadius -
&gt; endRadius)

Thank you -- that actually corrected one additional test! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580661</commentid>
    <comment_count>19</comment_count>
      <attachid>381074</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2019-10-16 13:47:40 -0700</bug_when>
    <thetext>Comment on attachment 381074
Patch

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

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:92
&gt; +            if (data.startRadius) {
&gt;                  float startPosition = std::abs(data.startRadius / data.endRadius);

Do we need to check that data.endRadius &gt; 0 here, to avoid division by zero?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580775</commentid>
    <comment_count>20</comment_count>
      <attachid>381074</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-16 17:09:59 -0700</bug_when>
    <thetext>Comment on attachment 381074
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:92
&gt;&gt;                  float startPosition = std::abs(data.startRadius / data.endRadius);
&gt; 
&gt; Do we need to check that data.endRadius &gt; 0 here, to avoid division by zero?

We require that data.startRadius and data.endRadius are &gt; 0 on lines 79/80, so I don&apos;t think so?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580779</commentid>
    <comment_count>21</comment_count>
      <attachid>381074</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2019-10-16 17:16:03 -0700</bug_when>
    <thetext>Comment on attachment 381074
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:92
&gt;&gt;&gt;                  float startPosition = std::abs(data.startRadius / data.endRadius);
&gt;&gt; 
&gt;&gt; Do we need to check that data.endRadius &gt; 0 here, to avoid division by zero?
&gt; 
&gt; We require that data.startRadius and data.endRadius are &gt; 0 on lines 79/80, so I don&apos;t think so?

We seem to require that data.endRadius &gt;= 0, perhaps the release assert should be changed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580785</commentid>
    <comment_count>22</comment_count>
      <attachid>381074</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-16 17:23:42 -0700</bug_when>
    <thetext>Comment on attachment 381074
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:92
&gt;&gt;&gt;&gt;                  float startPosition = std::abs(data.startRadius / data.endRadius);
&gt;&gt;&gt; 
&gt;&gt;&gt; Do we need to check that data.endRadius &gt; 0 here, to avoid division by zero?
&gt;&gt; 
&gt;&gt; We require that data.startRadius and data.endRadius are &gt; 0 on lines 79/80, so I don&apos;t think so?
&gt; 
&gt; We seem to require that data.endRadius &gt;= 0, perhaps the release assert should be changed?

Oh, I see. Good point. I&apos;ll change that. However, we require that data.startRadius &lt;= data.endRadius, and then check that data.startRadius is non-zero, so I don&apos;t think it&apos;s possible to get here with a zero data.endRadius. But I&apos;ll add a RELEASE_ASSERT just to be sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580793</commentid>
    <comment_count>23</comment_count>
      <attachid>381138</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-16 17:32:32 -0700</bug_when>
    <thetext>Created attachment 381138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580804</commentid>
    <comment_count>24</comment_count>
      <attachid>381138</attachid>
    <who name="Per Arne Vollan">pvollan</who>
    <bug_when>2019-10-16 18:08:07 -0700</bug_when>
    <thetext>Comment on attachment 381138
Patch

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

R=me.

&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:147
&gt; +            if (!circleIsEntirelyContained(data.point0, data.startRadius, data.point1, data.endRadius))
&gt; +                offset = (data.point1.scaled(data.startRadius) - data.point0.scaled(data.endRadius)) / (data.endRadius - data.startRadius);

Why was this check needed? Did adding this check fix more tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580813</commentid>
    <comment_count>25</comment_count>
      <attachid>381138</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-16 18:53:24 -0700</bug_when>
    <thetext>Comment on attachment 381138
Patch

Clearing flags on attachment: 381138

Committed r251221: &lt;https://trac.webkit.org/changeset/251221&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580814</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-16 18:53:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580815</commentid>
    <comment_count>27</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-16 18:54:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/56355288&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1580820</commentid>
    <comment_count>28</comment_count>
      <attachid>381138</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-10-16 19:13:09 -0700</bug_when>
    <thetext>Comment on attachment 381138
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/GradientDirect2D.cpp:147
&gt;&gt; +                offset = (data.point1.scaled(data.startRadius) - data.point0.scaled(data.endRadius)) / (data.endRadius - data.startRadius);
&gt; 
&gt; Why was this check needed? Did adding this check fix more tests?

Yes. The behavior of the gradient is different if one circle is completely contained within the other. Then the focus calculation that Fujii proposed is not valid and produces incorrect rendering.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>380664</attachid>
            <date>2019-10-10 11:27:27 -0700</date>
            <delta_ts>2019-10-16 09:31:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202815-20191010112727.patch</filename>
            <type>text/plain</type>
            <size>4454</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDk3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE5LTEwLTEwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgcmFk
aWFsIGdyYWRpZW50IGhhbmRsaW5nIG9mIHZhcmlvdXMgcmFkaXVzIG9yZGVyaW5ncworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV2aXNlIHRoZSAnZ2Vu
ZXJhdGVHcmFkaWVudCcgaW1wbGVtZW50YXRpb24gdG8gcmVjb2duaXplIHRoYXQgdGhlCisgICAg
ICAgIHJhZGl1cyBhcmd1bWVudHMgbWlnaHQgbm90IGJlIGluIGluY3JlYXNpbmcgb3JkZXIuIERp
cmVjdDJEJ3MKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZG9lcyBleHBlY3QgdGhpcywgc28gd2Ug
bmVlZCB0byBzd2FwIG9yZGVyIGFuZAorICAgICAgICByZXZpc2UgdGhlIGdyYWRpZW50IHJhbmdl
IHRvIG1hdGNoLgorCisgICAgICAgIERyaXZlLWJ5IGZpeDogU3RvcCBidWlsZGluZyB1bnVzZWQg
aW1hZ2UgZGVjb2RlcnMgaWYgYnVpbGRpbmcgd2l0aAorICAgICAgICB0aGUgQXBwbGUgc3RhY2su
CisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogU3RvcCBidWlsZGluZyB1bnVzZWQgaW1h
Z2UgZGVjb2RlcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQp
OgorCiAyMDE5LTEwLTEwICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBXZWIgSW5zcGVjdG9yOiBUaW1lbGluZXM6IGRvbid0IGNhbGwgd2lsbERpc3BhdGNoRXZl
bnQvZGlkRGlzcGF0Y2hFdmVudCB1bmxlc3MgdGhlcmUgaXMgYSBsaXN0ZW5lciBmb3IgdGhlIGV2
ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUZUVy5jbWFrZQkocmV2aXNpb24gMjUwODU5KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw4IEBACiBpbmNsdWRlKHBsYXRmb3JtL0N1cmwuY21ha2UpCitpZiAoQVBQTEVfQlVJTEQpCitl
bHNlICgpCiBpbmNsdWRlKHBsYXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UpCitlbmRpZiAoKQog
aW5jbHVkZShwbGF0Zm9ybS9UZXh0dXJlTWFwcGVyLmNtYWtlKQogCiBsaXN0KEFQUEVORCBXZWJD
b3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAko
cmV2aXNpb24gMjUwODU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NSwyNCArNzUsMzkgQEAg
dm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgogICAgICAgICBbJl0gKGNv
bnN0IExpbmVhckRhdGEmKSB7CiAgICAgICAgICAgICAvLyBObyBhY3Rpb24gbmVlZGVkLgogICAg
ICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKKyAgICAgICAg
WyZdIChSYWRpYWxEYXRhJiBkYXRhKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1
cyAmJiBkYXRhLmVuZFJhZGl1cykgewogICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0UG9zaXRp
b24gPSBzdGQ6OmFicyhkYXRhLnN0YXJ0UmFkaXVzIC8gZGF0YS5lbmRSYWRpdXMpOwotICAgICAg
ICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gMS4wKQorICAgICAgICAgICAgICAgIGJvb2wg
ZmxpcHBlZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gMS4w
KSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSAxLjAgLyBzdGFydFBvc2l0
aW9uOworICAgICAgICAgICAgICAgICAgICBmbGlwcGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgZmxvYXQgYXZhaWxhYmxlUmFuZ2UgPSAxLjAgLSBzdGFydFBv
c2l0aW9uOwogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGF2YWlsYWJsZVJhbmdlIDw9
IDEuMCAmJiBhdmFpbGFibGVSYW5nZSA+PSAwKTsKIAogICAgICAgICAgICAgICAgIGZvciAoYXV0
byYgc3RvcCA6IGdyYWRpZW50U3RvcHMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZsaXBw
ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uID0gMS4wIC0gc3RvcC5w
b3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiAqPSBhdmFpbGFibGVS
YW5nZTsKICAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiArPSBzdGFydFBvc2l0aW9u
OwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChmbGlwcGVkKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoZ3JhZGllbnRTdG9wcy5iZWdpbigp
LCBncmFkaWVudFN0b3BzLmVuZCgpLCBbXShjb25zdCBEMkQxX0dSQURJRU5UX1NUT1AmIGEsIGNv
bnN0IEQyRDFfR1JBRElFTlRfU1RPUCYgYikgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGEucG9zaXRpb24gPCBiLnBvc2l0aW9uOworICAgICAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZGF0YS5zdGFydFJhZGl1cywgZGF0YS5lbmRS
YWRpdXMpOworICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZGF0YS5wb2ludDAsIGRhdGEu
cG9pbnQxKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAvLyBSZXN0b3Jl
IHRoZSAnc3RhcnQnIHBvc2l0aW9uCiAgICAgICAgICAgICAgICAgYXV0byBmaXJzdFN0b3AgPSBn
cmFkaWVudFN0b3BzLmZpcnN0KCk7Ci0gICAgICAgICAgICAgICAgZmlyc3RTdG9wLnBvc2l0aW9u
ID0gMDsKLQotICAgICAgICAgICAgICAgIGdyYWRpZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3Rv
cCk7CisgICAgICAgICAgICAgICAgaWYgKCFXVEY6OmFyZUVzc2VudGlhbGx5RXF1YWwoZmlyc3RT
dG9wLnBvc2l0aW9uLCAwLjBmKSkgeworICAgICAgICAgICAgICAgICAgICBmaXJzdFN0b3AucG9z
aXRpb24gPSAwOworICAgICAgICAgICAgICAgICAgICBncmFkaWVudFN0b3BzLmluc2VydCgwLCBm
aXJzdFN0b3ApOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSwK
ICAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSB7CkBAIC0xMTksOCArMTM0LDE0IEBAIHZv
aWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogICAgICAgICAgICAgbV9ncmFkaWVudCA9IGxpbmVh
ckdyYWRpZW50OwogICAgICAgICB9LAotICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRh
dGEpIHsKKyAgICAgICAgWyZdIChSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBmbG9h
dCByYWRpdXNEaWZmID0gc3RkOjphYnMoZGF0YS5lbmRSYWRpdXMgLSBkYXRhLnN0YXJ0UmFkaXVz
KTsKICAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBkYXRhLnBvaW50MCAtIGRhdGEucG9p
bnQxOworICAgICAgICAgICAgaWYgKG9mZnNldC53aWR0aCgpKQorICAgICAgICAgICAgICAgIG9m
ZnNldC5zZXRXaWR0aChvZmZzZXQud2lkdGgoKSAtIHJhZGl1c0RpZmYpOworICAgICAgICAgICAg
aWYgKG9mZnNldC5oZWlnaHQoKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQuc2V0SGVpZ2h0KG9m
ZnNldC5oZWlnaHQoKSAtIHJhZGl1c0RpZmYpOworCiAgICAgICAgICAgICBGbG9hdFBvaW50IGNl
bnRlciA9IGRhdGEucG9pbnQxOwogICAgICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5k
UmFkaXVzOwogICAgICAgICAgICAgZmxvYXQgcmFkaXVzWSA9IHJhZGl1c1ggLyBkYXRhLmFzcGVj
dFJhdGlvOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381074</attachid>
            <date>2019-10-16 09:31:06 -0700</date>
            <delta_ts>2019-10-16 17:32:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202815-20191016093103.patch</filename>
            <type>text/plain</type>
            <size>4349</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE5LTEwLTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgcmFk
aWFsIGdyYWRpZW50IGhhbmRsaW5nIG9mIHZhcmlvdXMgcmFkaXVzIG9yZGVyaW5ncworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV2aXNlIHRoZSAnZ2Vu
ZXJhdGVHcmFkaWVudCcgaW1wbGVtZW50YXRpb24gdG8gcmVjb2duaXplIHRoYXQgdGhlCisgICAg
ICAgIHJhZGl1cyBhcmd1bWVudHMgbWlnaHQgbm90IGJlIGluIGluY3JlYXNpbmcgb3JkZXIuIERp
cmVjdDJEJ3MKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZG9lcyBleHBlY3QgdGhpcywgc28gd2Ug
bmVlZCB0byBzd2FwIG9yZGVyIGFuZAorICAgICAgICByZXZpc2UgdGhlIGdyYWRpZW50IHJhbmdl
IHRvIG1hdGNoLgorCisgICAgICAgIERyaXZlLWJ5IGZpeDogU3RvcCBidWlsZGluZyB1bnVzZWQg
aW1hZ2UgZGVjb2RlcnMgaWYgYnVpbGRpbmcgd2l0aAorICAgICAgICB0aGUgQXBwbGUgc3RhY2su
CisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogU3RvcCBidWlsZGluZyB1bnVzZWQgaW1h
Z2UgZGVjb2RlcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQp
OgorCiAyMDE5LTEwLTE1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW1BpY3R1cmUtaW4tUGljdHVyZSBXZWIgQVBJXSBJbXBsZW1lbnQgSFRNTFZpZGVvRWxlbWVu
dC5yZXF1ZXN0UGljdHVyZUluUGljdHVyZSgpIC8gRG9jdW1lbnQuZXhpdFBpY3R1cmVJblBpY3R1
cmUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI1MTE2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNyBAQAogaW5jbHVkZShwbGF0Zm9ybS9DdXJsLmNtYWtlKQotaW5jbHVkZShwbGF0Zm9ybS9J
bWFnZURlY29kZXJzLmNtYWtlKQoraWYgKE5PVCBBUFBMRV9CVUlMRCkKKyAgICBpbmNsdWRlKHBs
YXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UpCitlbmRpZiAoKQogaW5jbHVkZShwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlKQogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjUxMTYxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03NSwxMSArNzUsMjIgQEAgdm9pZCBHcmFkaWVudDo6
Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgogICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEm
KSB7CiAgICAgICAgICAgICAvLyBObyBhY3Rpb24gbmVlZGVkLgogICAgICAgICB9LAotICAgICAg
ICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKLSAgICAgICAgICAgIGlmIChkYXRhLnN0
YXJ0UmFkaXVzICYmIGRhdGEuZW5kUmFkaXVzKSB7CisgICAgICAgIFsmXSAoUmFkaWFsRGF0YSYg
ZGF0YSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5zdGFydFJhZGl1cyA+PSAw
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFkaXVzID49IDApOworCisg
ICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cyA+IGRhdGEuZW5kUmFkaXVzKSB7CisgICAg
ICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5yZXZlcnNlKCk7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykKKyAgICAgICAgICAgICAgICAgICAgc3RvcC5w
b3NpdGlvbiA9IDEuMCAtIHN0b3AucG9zaXRpb247CisKKyAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAoZGF0YS5zdGFydFJhZGl1cywgZGF0YS5lbmRSYWRpdXMpOworICAgICAgICAgICAgICAgIHN0
ZDo6c3dhcChkYXRhLnBvaW50MCwgZGF0YS5wb2ludDEpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cykgewogICAgICAgICAgICAgICAgIGZsb2F0IHN0
YXJ0UG9zaXRpb24gPSBzdGQ6OmFicyhkYXRhLnN0YXJ0UmFkaXVzIC8gZGF0YS5lbmRSYWRpdXMp
OwotICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gMS4wKQotICAgICAgICAgICAg
ICAgICAgICBzdGFydFBvc2l0aW9uID0gMS4wIC8gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdGFydFBvc2l0aW9uIDw9IDEuMCk7CiAgICAgICAgICAgICAg
ICAgZmxvYXQgYXZhaWxhYmxlUmFuZ2UgPSAxLjAgLSBzdGFydFBvc2l0aW9uOwogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGF2YWlsYWJsZVJhbmdlIDw9IDEuMCAmJiBhdmFpbGFibGVS
YW5nZSA+PSAwKTsKIApAQCAtOTAsOSArMTAxLDEwIEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRl
R3JhZGllbnQoSUQyRDFSZW4KIAogICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlICdzdGFy
dCcgcG9zaXRpb24KICAgICAgICAgICAgICAgICBhdXRvIGZpcnN0U3RvcCA9IGdyYWRpZW50U3Rv
cHMuZmlyc3QoKTsKLSAgICAgICAgICAgICAgICBmaXJzdFN0b3AucG9zaXRpb24gPSAwOwotCi0g
ICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5pbnNlcnQoMCwgZmlyc3RTdG9wKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIVdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChmaXJzdFN0b3AucG9zaXRp
b24sIDAuMGYpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7
CisgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3RvcCk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAgICBb
Jl0gKGNvbnN0IENvbmljRGF0YSYpIHsKQEAgLTEyMCw3ICsxMzIsOCBAQCB2b2lkIEdyYWRpZW50
OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAgICAgICAgICBtX2dyYWRpZW50ID0gbGlu
ZWFyR3JhZGllbnQ7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0YSYg
ZGF0YSkgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IGRhdGEucG9pbnQwIC0gZGF0
YS5wb2ludDE7CisgICAgICAgICAgICBhdXRvIG9mZnNldCA9IChkYXRhLnBvaW50MS5zY2FsZWQo
ZGF0YS5zdGFydFJhZGl1cykgLSBkYXRhLnBvaW50MC5zY2FsZWQoZGF0YS5lbmRSYWRpdXMpKSAv
IChkYXRhLnN0YXJ0UmFkaXVzIC0gZGF0YS5lbmRSYWRpdXMpOworCiAgICAgICAgICAgICBGbG9h
dFBvaW50IGNlbnRlciA9IGRhdGEucG9pbnQxOwogICAgICAgICAgICAgZmxvYXQgcmFkaXVzWCA9
IGRhdGEuZW5kUmFkaXVzOwogICAgICAgICAgICAgZmxvYXQgcmFkaXVzWSA9IHJhZGl1c1ggLyBk
YXRhLmFzcGVjdFJhdGlvOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381138</attachid>
            <date>2019-10-16 17:32:32 -0700</date>
            <delta_ts>2019-10-16 18:53:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202815-20191016173227.patch</filename>
            <type>text/plain</type>
            <size>5240</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MTE2MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDE5LTEwLTE1ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgcmFk
aWFsIGdyYWRpZW50IGhhbmRsaW5nIG9mIHZhcmlvdXMgcmFkaXVzIG9yZGVyaW5ncworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAyODE1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmV2aXNlIHRoZSAnZ2Vu
ZXJhdGVHcmFkaWVudCcgaW1wbGVtZW50YXRpb24gdG8gcmVjb2duaXplIHRoYXQgdGhlCisgICAg
ICAgIHJhZGl1cyBhcmd1bWVudHMgbWlnaHQgbm90IGJlIGluIGluY3JlYXNpbmcgb3JkZXIuIERp
cmVjdDJEJ3MKKyAgICAgICAgaW1wbGVtZW50YXRpb24gZG9lcyBleHBlY3QgdGhpcywgc28gd2Ug
bmVlZCB0byBzd2FwIG9yZGVyIGFuZAorICAgICAgICByZXZpc2UgdGhlIGdyYWRpZW50IHJhbmdl
IHRvIG1hdGNoLgorCisgICAgICAgIERyaXZlLWJ5IGZpeDogU3RvcCBidWlsZGluZyB1bnVzZWQg
aW1hZ2UgZGVjb2RlcnMgaWYgYnVpbGRpbmcgd2l0aAorICAgICAgICB0aGUgQXBwbGUgc3RhY2su
CisKKyAgICAgICAgKiBQbGF0Zm9ybUZUVy5jbWFrZTogU3RvcCBidWlsZGluZyB1bnVzZWQgaW1h
Z2UgZGVjb2RlcnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGly
ZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQp
OgorCiAyMDE5LTEwLTE1ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAg
ICAgW1BpY3R1cmUtaW4tUGljdHVyZSBXZWIgQVBJXSBJbXBsZW1lbnQgSFRNTFZpZGVvRWxlbWVu
dC5yZXF1ZXN0UGljdHVyZUluUGljdHVyZSgpIC8gRG9jdW1lbnQuZXhpdFBpY3R1cmVJblBpY3R1
cmUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1GVFcuY21ha2UJKHJldmlzaW9uIDI1MTE2MSkKKysr
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRlRXLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNyBAQAogaW5jbHVkZShwbGF0Zm9ybS9DdXJsLmNtYWtlKQotaW5jbHVkZShwbGF0Zm9ybS9J
bWFnZURlY29kZXJzLmNtYWtlKQoraWYgKE5PVCBBUFBMRV9CVUlMRCkKKyAgICBpbmNsdWRlKHBs
YXRmb3JtL0ltYWdlRGVjb2RlcnMuY21ha2UpCitlbmRpZiAoKQogaW5jbHVkZShwbGF0Zm9ybS9U
ZXh0dXJlTWFwcGVyLmNtYWtlKQogCiBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVE
RV9ESVJFQ1RPUklFUwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAkocmV2aXNpb24gMjUxMTYxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01Niw2ICs1NiwxNSBAQCBJRDJEMUJydXNoKiBHcmFk
aWVudDo6Y3JlYXRlUGxhdGZvcm1HcmFkCiAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CiB9CiAKK3N0
YXRpYyBib29sIGNpcmNsZUlzRW50aXJlbHlDb250YWluZWQoY29uc3QgRmxvYXRQb2ludCYgY2Vu
dGVyQSwgZmxvYXQgcmFkaXVzQSwgY29uc3QgRmxvYXRQb2ludCYgY2VudGVyQiwgZmxvYXQgcmFk
aXVzQikKK3sKKyAgICBkb3VibGUgZGVsdGFYID0gY2VudGVyQi54KCkgLSBjZW50ZXJBLngoKTsK
KyAgICBkb3VibGUgZGVsdGFZID0gY2VudGVyQi55KCkgLSBjZW50ZXJBLnkoKTsKKyAgICBkb3Vi
bGUgZGVsdGFSYWRpdXMgPSByYWRpdXNCIC0gcmFkaXVzQTsKKworICAgIHJldHVybiBkZWx0YVgg
KiBkZWx0YVggKyBkZWx0YVkgKiBkZWx0YVkgPCBkZWx0YVJhZGl1cyAqIGRlbHRhUmFkaXVzICYm
IHJhZGl1c0EgPCByYWRpdXNCOworfQorCiB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCiB7CiAgICAgc29ydFN0b3BzSWZOZWNl
c3NhcnkoKTsKQEAgLTc1LDExICs4NCwyMyBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRp
ZW50KElEMkQxUmVuCiAgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYpIHsKICAgICAgICAg
ICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQuCiAgICAgICAgIH0sCi0gICAgICAgIFsmXSAoY29uc3Qg
UmFkaWFsRGF0YSYgZGF0YSkgewotICAgICAgICAgICAgaWYgKGRhdGEuc3RhcnRSYWRpdXMgJiYg
ZGF0YS5lbmRSYWRpdXMpIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFBvc2l0aW9uID0g
c3RkOjphYnMoZGF0YS5zdGFydFJhZGl1cyAvIGRhdGEuZW5kUmFkaXVzKTsKLSAgICAgICAgICAg
ICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IDEuMCkKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRQ
b3NpdGlvbiA9IDEuMCAvIHN0YXJ0UG9zaXRpb247CisgICAgICAgIFsmXSAoUmFkaWFsRGF0YSYg
ZGF0YSkgeworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZGF0YS5zdGFydFJhZGl1cyA+PSAw
KTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGRhdGEuZW5kUmFkaXVzID49IDApOworCisg
ICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cyA+IGRhdGEuZW5kUmFkaXVzKSB7CisgICAg
ICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5yZXZlcnNlKCk7CisgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykKKyAgICAgICAgICAgICAgICAgICAgc3RvcC5w
b3NpdGlvbiA9IDEuMCAtIHN0b3AucG9zaXRpb247CisKKyAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAoZGF0YS5zdGFydFJhZGl1cywgZGF0YS5lbmRSYWRpdXMpOworICAgICAgICAgICAgICAgIHN0
ZDo6c3dhcChkYXRhLnBvaW50MCwgZGF0YS5wb2ludDEpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cykgeworICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGRhdGEuZW5kUmFkaXVzID4gMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRQ
b3NpdGlvbiA9IGRhdGEuc3RhcnRSYWRpdXMgLyBkYXRhLmVuZFJhZGl1czsKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChzdGFydFBvc2l0aW9uIDw9IDEuMCk7CiAgICAgICAgICAgICAg
ICAgZmxvYXQgYXZhaWxhYmxlUmFuZ2UgPSAxLjAgLSBzdGFydFBvc2l0aW9uOwogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGF2YWlsYWJsZVJhbmdlIDw9IDEuMCAmJiBhdmFpbGFibGVS
YW5nZSA+PSAwKTsKIApAQCAtOTAsOSArMTExLDEwIEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRl
R3JhZGllbnQoSUQyRDFSZW4KIAogICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlICdzdGFy
dCcgcG9zaXRpb24KICAgICAgICAgICAgICAgICBhdXRvIGZpcnN0U3RvcCA9IGdyYWRpZW50U3Rv
cHMuZmlyc3QoKTsKLSAgICAgICAgICAgICAgICBmaXJzdFN0b3AucG9zaXRpb24gPSAwOwotCi0g
ICAgICAgICAgICAgICAgZ3JhZGllbnRTdG9wcy5pbnNlcnQoMCwgZmlyc3RTdG9wKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIVdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChmaXJzdFN0b3AucG9zaXRp
b24sIDAuMGYpKSB7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7
CisgICAgICAgICAgICAgICAgICAgIGdyYWRpZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3RvcCk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9LAogICAgICAgICBb
Jl0gKGNvbnN0IENvbmljRGF0YSYpIHsKQEAgLTEyMCw3ICsxNDIsMTIgQEAgdm9pZCBHcmFkaWVu
dDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgogICAgICAgICAgICAgbV9ncmFkaWVudCA9IGxp
bmVhckdyYWRpZW50OwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEm
IGRhdGEpIHsKLSAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBkYXRhLnBvaW50MCAtIGRh
dGEucG9pbnQxOworICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldDsKKyAgICAgICAgICAgIGlm
ICghY2lyY2xlSXNFbnRpcmVseUNvbnRhaW5lZChkYXRhLnBvaW50MCwgZGF0YS5zdGFydFJhZGl1
cywgZGF0YS5wb2ludDEsIGRhdGEuZW5kUmFkaXVzKSkKKyAgICAgICAgICAgICAgICBvZmZzZXQg
PSAoZGF0YS5wb2ludDEuc2NhbGVkKGRhdGEuc3RhcnRSYWRpdXMpIC0gZGF0YS5wb2ludDAuc2Nh
bGVkKGRhdGEuZW5kUmFkaXVzKSkgLyAoZGF0YS5lbmRSYWRpdXMgLSBkYXRhLnN0YXJ0UmFkaXVz
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBkYXRhLnBvaW50
MCAtIGRhdGEucG9pbnQxOworCiAgICAgICAgICAgICBGbG9hdFBvaW50IGNlbnRlciA9IGRhdGEu
cG9pbnQxOwogICAgICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5kUmFkaXVzOwogICAg
ICAgICAgICAgZmxvYXQgcmFkaXVzWSA9IHJhZGl1c1ggLyBkYXRhLmFzcGVjdFJhdGlvOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>