<?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>151962</bug_id>
          
          <creation_ts>2015-12-07 13:44:18 -0800</creation_ts>
          <short_desc>Refactor TextPainter::paintText() into sub methods.</short_desc>
          <delta_ts>2015-12-08 09:05:07 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1146989</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-12-07 13:44:18 -0800</bug_when>
    <thetext>TextPainter::paintText is way more complicated than it should be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146990</commentid>
    <comment_count>1</comment_count>
      <attachid>266807</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-12-07 13:46:46 -0800</bug_when>
    <thetext>Created attachment 266807
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146991</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-12-07 13:47:18 -0800</bug_when>
    <thetext>This is ::paintText after the change.

void TextPainter::paintText()
{
    if (!m_paintSelectedTextOnly) {
        // For stroked painting, we have to change the text drawing mode. It&apos;s probably dangerous to leave that mutated as a side
        // effect, so only when we know we&apos;re stroking, do a save/restore.
        bool fullLengthPaint = !m_paintSelectedTextSeparately || m_endPositionInTextRun &lt;= m_startPositionInTextRun;
        int startOffset = fullLengthPaint ? 0 : m_endPositionInTextRun;
        int endOffset = fullLengthPaint ? m_length : m_startPositionInTextRun;
        paintTextWithStyle(startOffset, endOffset, m_textPaintStyle, m_textShadow);
    }

    // paint only the text that is selected
    if ((m_paintSelectedTextOnly || m_paintSelectedTextSeparately) &amp;&amp; m_startPositionInTextRun &lt; m_endPositionInTextRun)
        paintTextWithStyle(m_startPositionInTextRun, m_endPositionInTextRun, m_selectionPaintStyle, m_selectionShadow);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146999</commentid>
    <comment_count>3</comment_count>
      <attachid>266807</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-12-07 13:59:33 -0800</bug_when>
    <thetext>Comment on attachment 266807
Patch

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

&gt; Source/WebCore/rendering/TextPainter.cpp:153
&gt; +void TextPainter::paintTextWithEmphasisIfNeeded(int startOffset, int endOffset, const TextPaintStyle&amp; paintStyle, const ShadowData* shadow)

I think you should name this &quot;emphasis marks&quot; not &quot;text with emphasis&quot;

&gt; Source/WebCore/rendering/TextPainter.cpp:160
&gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(TextRun, objectReplacementCharacterTextRun, (StringView(&amp;objectReplacementCharacter, 1)));

static NeverDestroyed

&gt; Source/WebCore/rendering/TextPainter.cpp:167
&gt; +    paintTextWithShadows(m_context, m_combinedText ? m_combinedText-&gt;originalFont() : m_font, emphasisMarkTextRun, m_emphasisMark, m_emphasisMarkOffset, startOffset, endOffset, m_length, emphasisMarkTextOrigin, m_boxRect, shadow, paintStyle.strokeWidth &gt; 0, m_textBoxIsHorizontal);

Why don&apos;t we make paintTextWithShadows a member function so we don&apos;t have to pass in all these m_ variables</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147002</commentid>
    <comment_count>4</comment_count>
      <attachid>266810</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-12-07 14:06:03 -0800</bug_when>
    <thetext>Created attachment 266810
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147017</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-12-07 14:30:01 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 266807 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266807&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/TextPainter.cpp:153
&gt; &gt; +void TextPainter::paintTextWithEmphasisIfNeeded(int startOffset, int endOffset, const TextPaintStyle&amp; paintStyle, const ShadowData* shadow)
&gt; 
&gt; I think you should name this &quot;emphasis marks&quot; not &quot;text with emphasis&quot;
&gt; 
&gt; &gt; Source/WebCore/rendering/TextPainter.cpp:160
&gt; &gt; +    DEPRECATED_DEFINE_STATIC_LOCAL(TextRun, objectReplacementCharacterTextRun, (StringView(&amp;objectReplacementCharacter, 1)));
&gt; 
&gt; static NeverDestroyed
&gt; 
Done.

&gt; &gt; Source/WebCore/rendering/TextPainter.cpp:167
&gt; &gt; +    paintTextWithShadows(m_context, m_combinedText ? m_combinedText-&gt;originalFont() : m_font, emphasisMarkTextRun, m_emphasisMark, m_emphasisMarkOffset, startOffset, endOffset, m_length, emphasisMarkTextOrigin, m_boxRect, shadow, paintStyle.strokeWidth &gt; 0, m_textBoxIsHorizontal);
&gt; 
&gt; Why don&apos;t we make paintTextWithShadows a member function so we don&apos;t have to
&gt; pass in all these m_ variables
Follow up patch is coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147031</commentid>
    <comment_count>6</comment_count>
      <attachid>266810</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-07 15:01:32 -0800</bug_when>
    <thetext>Comment on attachment 266810
Patch

Clearing flags on attachment: 266810

Committed r193656: &lt;http://trac.webkit.org/changeset/193656&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147032</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-07 15:01:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147279</commentid>
    <comment_count>8</comment_count>
      <attachid>266810</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-12-08 07:57:15 -0800</bug_when>
    <thetext>Comment on attachment 266810
Patch

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

&gt; Source/WebCore/rendering/TextPainter.h:60
&gt;  private:
&gt; +    void paintTextWithStyle(int startOffset, int endOffset, const TextPaintStyle&amp;, const ShadowData*);
&gt; +    void paintEmphasisMarksIfNeeded(int startOffset, int endOffset, const TextPaintStyle&amp;, const ShadowData*);
&gt; +
&gt; +private:

I don’t think we need to say private: twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1147304</commentid>
    <comment_count>9</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-12-08 09:05:07 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 266810 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=266810&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/TextPainter.h:60
&gt; &gt;  private:
&gt; &gt; +    void paintTextWithStyle(int startOffset, int endOffset, const TextPaintStyle&amp;, const ShadowData*);
&gt; &gt; +    void paintEmphasisMarksIfNeeded(int startOffset, int endOffset, const TextPaintStyle&amp;, const ShadowData*);
&gt; &gt; +
&gt; &gt; +private:
&gt; 
&gt; I don’t think we need to say private: twice.
Fixing it in bug 151994</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266807</attachid>
            <date>2015-12-07 13:46:46 -0800</date>
            <delta_ts>2015-12-07 14:06:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151962-20151207134618.patch</filename>
            <type>text/plain</type>
            <size>8972</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzNjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNjZmFlNGM0OGJjZTEy
OTNhYjgwYTFmYTUwMTczMWI1ZGUzNTc1MS4uNTQ4NWZmNzJkMTU0NTJiMDFjZGQ0NzJlNWNhNTAz
NDMwZDQ2OThiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTEyLTA3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgVGV4dFBhaW50
ZXI6OnBhaW50VGV4dCgpIGludG8gc3ViIG1ldGhvZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE5NjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aEVtcGhhc2lzSWZOZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTdHlsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBhaW50
ZXIuaDoKKwogMjAxNS0xMi0wNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEFkZHJlc3NpbmcgcG9zdC1yZXZpZXcgY29tbWVudHMgb24gcjE5MzM3NC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IGVjMjMwMmNjZWVlNjFiNjM0
M2UxNjQ5ZjdmMjY2YWRiZTU0ZTg3YjUuLmNmY2RjNmIyMTZkYTRjYjdmNmZhY2FkNDJmYmRmNjIz
ZmU5OWMyOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApAQCAt
MTUwLDYzICsxNTAsNDkgQEAgc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm8KICAgICB9IHdoaWxlIChz
aGFkb3cgfHwgIWxhc3RTaGFkb3dJdGVyYXRpb25TaG91bGREcmF3VGV4dCk7CiB9CiAKLXZvaWQg
VGV4dFBhaW50ZXI6OnBhaW50VGV4dCgpCit2b2lkIFRleHRQYWludGVyOjpwYWludFRleHRXaXRo
RW1waGFzaXNJZk5lZWRlZChpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGNvbnN0IFRl
eHRQYWludFN0eWxlJiBwYWludFN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCiB7Cisg
ICAgaWYgKG1fZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
RmxvYXRQb2ludCBib3hPcmlnaW4gPSBtX2JveFJlY3QubG9jYXRpb24oKTsKKyAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQobV9jb250ZXh0LCBwYWludFN0eWxlLCBVc2VFbXBoYXNpc01hcmtDb2xv
cik7CisgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRSdW4sIG9iamVjdFJl
cGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKFN0cmluZ1ZpZXcoJm9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyLCAxKSkpOworICAgIFRleHRSdW4mIGVtcGhhc2lzTWFya1RleHRSdW4gPSBtX2Nv
bWJpbmVkVGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6IG1fdGV4dFJ1
bjsKKyAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBtX2NvbWJpbmVkVGV4
dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIG1fYm94UmVjdC53aWR0aCgpIC8gMiwgYm94
T3JpZ2luLnkoKSArIG1fZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IG1fdGV4dE9yaWdp
bjsKKyAgICBpZiAobV9jb21iaW5lZFRleHQpCisgICAgICAgIG1fY29udGV4dC5jb25jYXRDVE0o
cm90YXRpb24obV9ib3hSZWN0LCBDbG9ja3dpc2UpKTsKKworICAgIC8vIEZJWE1FOiBUcnVuY2F0
ZSByaWdodC10by1sZWZ0IHRleHQgY29ycmVjdGx5LgorICAgIHBhaW50VGV4dFdpdGhTaGFkb3dz
KG1fY29udGV4dCwgbV9jb21iaW5lZFRleHQgPyBtX2NvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250
KCkgOiBtX2ZvbnQsIGVtcGhhc2lzTWFya1RleHRSdW4sIG1fZW1waGFzaXNNYXJrLCBtX2VtcGhh
c2lzTWFya09mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbV9sZW5ndGgsIGVtcGhhc2lz
TWFya1RleHRPcmlnaW4sIG1fYm94UmVjdCwgc2hhZG93LCBwYWludFN0eWxlLnN0cm9rZVdpZHRo
ID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKKworICAgIGlmIChtX2NvbWJpbmVkVGV4dCkK
KyAgICAgICAgbV9jb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENvdW50ZXJj
bG9ja3dpc2UpKTsKK30KIAordm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFN0eWxlKGlu
dCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgY29uc3QgVGV4dFBhaW50U3R5bGUmIHBhaW50
U3R5bGUsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKK3sKKyAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIobV9jb250ZXh0LCBwYWludFN0eWxlLnN0cm9rZVdpZHRoID4g
MCk7CisgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KG1fY29udGV4dCwgcGFpbnRTdHlsZSk7Cisg
ICAgLy8gRklYTUU6IFRydW5jYXRlIHJpZ2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0bHkuCisgICAg
cGFpbnRUZXh0V2l0aFNoYWRvd3MobV9jb250ZXh0LCBtX2ZvbnQsIG1fdGV4dFJ1biwgbnVsbEF0
b20sIDAsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIG1fbGVuZ3RoLCBtX3RleHRPcmlnaW4sIG1f
Ym94UmVjdCwgc2hhZG93LCBwYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgbV90ZXh0Qm94SXNI
b3Jpem9udGFsKTsKKyAgICBwYWludFRleHRXaXRoRW1waGFzaXNJZk5lZWRlZChzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBwYWludFN0eWxlLCBzaGFkb3cpOworfQorICAgIAordm9pZCBUZXh0UGFp
bnRlcjo6cGFpbnRUZXh0KCkKK3sKICAgICBpZiAoIW1fcGFpbnRTZWxlY3RlZFRleHRPbmx5KSB7
CiAgICAgICAgIC8vIEZvciBzdHJva2VkIHBhaW50aW5nLCB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUg
dGV4dCBkcmF3aW5nIG1vZGUuIEl0J3MgcHJvYmFibHkgZGFuZ2Vyb3VzIHRvIGxlYXZlIHRoYXQg
bXV0YXRlZCBhcyBhIHNpZGUKICAgICAgICAgLy8gZWZmZWN0LCBzbyBvbmx5IHdoZW4gd2Uga25v
dyB3ZSdyZSBzdHJva2luZywgZG8gYSBzYXZlL3Jlc3RvcmUuCi0gICAgICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihtX2NvbnRleHQsIG1fdGV4dFBhaW50U3R5bGUuc3Ry
b2tlV2lkdGggPiAwKTsKLQotICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQobV9jb250ZXh0
LCBtX3RleHRQYWludFN0eWxlKTsKLSAgICAgICAgaWYgKCFtX3BhaW50U2VsZWN0ZWRUZXh0U2Vw
YXJhdGVseSB8fCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuIDw9IG1fc3RhcnRQb3NpdGlvbkluVGV4
dFJ1bikgewotICAgICAgICAgICAgLy8gRklYTUU6IFRydW5jYXRlIHJpZ2h0LXRvLWxlZnQgdGV4
dCBjb3JyZWN0bHkuCi0gICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhtX2NvbnRleHQs
IG1fZm9udCwgbV90ZXh0UnVuLCBudWxsQXRvbSwgMCwgMCwgbV9sZW5ndGgsIG1fbGVuZ3RoLCBt
X3RleHRPcmlnaW4sIG1fYm94UmVjdCwgbV90ZXh0U2hhZG93LCBtX3RleHRQYWludFN0eWxlLnN0
cm9rZVdpZHRoID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhtX2NvbnRleHQsIG1fZm9udCwgbV90ZXh0
UnVuLCBudWxsQXRvbSwgMCwgbV9lbmRQb3NpdGlvbkluVGV4dFJ1biwgbV9zdGFydFBvc2l0aW9u
SW5UZXh0UnVuLCBtX2xlbmd0aCwgbV90ZXh0T3JpZ2luLCBtX2JveFJlY3QsIG1fdGV4dFNoYWRv
dywgbV90ZXh0UGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDAsIG1fdGV4dEJveElzSG9yaXpvbnRh
bCk7Ci0KLSAgICAgICAgaWYgKCFtX2VtcGhhc2lzTWFyay5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChtX2NvbnRleHQsIG1fdGV4dFBhaW50U3R5bGUsIFVz
ZUVtcGhhc2lzTWFya0NvbG9yKTsKLQotICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PFRleHRSdW4+IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1bihTdHJpbmdWaWV3KCZv
YmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgMSkpOwotICAgICAgICAgICAgVGV4dFJ1biYgZW1w
aGFzaXNNYXJrVGV4dFJ1biA9IG1fY29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFy
YWN0ZXJUZXh0UnVuLmdldCgpIDogbV90ZXh0UnVuOwotICAgICAgICAgICAgRmxvYXRQb2ludCBl
bXBoYXNpc01hcmtUZXh0T3JpZ2luID0gbV9jb21iaW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9y
aWdpbi54KCkgKyBtX2JveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBtX2ZvbnQu
Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSkgOiBtX3RleHRPcmlnaW47Ci0gICAgICAgICAgICBpZiAo
bV9jb21iaW5lZFRleHQpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LmNvbmNhdENUTShyb3Rh
dGlvbihtX2JveFJlY3QsIENsb2Nrd2lzZSkpOwotCi0gICAgICAgICAgICBpZiAoIW1fcGFpbnRT
ZWxlY3RlZFRleHRTZXBhcmF0ZWx5IHx8IG1fZW5kUG9zaXRpb25JblRleHRSdW4gPD0gbV9zdGFy
dFBvc2l0aW9uSW5UZXh0UnVuKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRydW5jYXRl
IHJpZ2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0bHkuCi0gICAgICAgICAgICAgICAgcGFpbnRUZXh0
V2l0aFNoYWRvd3MobV9jb250ZXh0LCBtX2NvbWJpbmVkVGV4dCA/IG1fY29tYmluZWRUZXh0LT5v
cmlnaW5hbEZvbnQoKSA6IG1fZm9udCwgZW1waGFzaXNNYXJrVGV4dFJ1biwgbV9lbXBoYXNpc01h
cmssIG1fZW1waGFzaXNNYXJrT2Zmc2V0LCAwLCBtX2xlbmd0aCwgbV9sZW5ndGgsIGVtcGhhc2lz
TWFya1RleHRPcmlnaW4sIG1fYm94UmVjdCwgbV90ZXh0U2hhZG93LCBtX3RleHRQYWludFN0eWxl
LnN0cm9rZVdpZHRoID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKLSAgICAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKG1fY29udGV4dCwgbV9j
b21iaW5lZFRleHQgPyBtX2NvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250KCkgOiBtX2ZvbnQsIGVt
cGhhc2lzTWFya1RleHRSdW4sIG1fZW1waGFzaXNNYXJrLCBtX2VtcGhhc2lzTWFya09mZnNldCwg
bV9lbmRQb3NpdGlvbkluVGV4dFJ1biwgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVuLCBtX2xlbmd0
aCwgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiwgbV9ib3hSZWN0LCBtX3RleHRTaGFkb3csIG1fdGV4
dFBhaW50U3R5bGUuc3Ryb2tlV2lkdGggPiAwLCBtX3RleHRCb3hJc0hvcml6b250YWwpOwotCi0g
ICAgICAgICAgICBpZiAobV9jb21iaW5lZFRleHQpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0
LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKLSAgICAg
ICAgfQorICAgICAgICBib29sIGZ1bGxMZW5ndGhQYWludCA9ICFtX3BhaW50U2VsZWN0ZWRUZXh0
U2VwYXJhdGVseSB8fCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuIDw9IG1fc3RhcnRQb3NpdGlvbklu
VGV4dFJ1bjsKKyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gZnVsbExlbmd0aFBhaW50ID8gMCA6
IG1fZW5kUG9zaXRpb25JblRleHRSdW47CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBmdWxsTGVu
Z3RoUGFpbnQgPyBtX2xlbmd0aCA6IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bjsKKyAgICAgICAg
cGFpbnRUZXh0V2l0aFN0eWxlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIG1fdGV4dFBhaW50U3R5
bGUsIG1fdGV4dFNoYWRvdyk7CiAgICAgfQogCi0gICAgaWYgKChtX3BhaW50U2VsZWN0ZWRUZXh0
T25seSB8fCBtX3BhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkgJiYgbV9zdGFydFBvc2l0aW9u
SW5UZXh0UnVuIDwgbV9lbmRQb3NpdGlvbkluVGV4dFJ1bikgewotICAgICAgICAvLyBwYWludCBv
bmx5IHRoZSB0ZXh0IHRoYXQgaXMgc2VsZWN0ZWQKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3Rh
dGVTYXZlciBzdGF0ZVNhdmVyKG1fY29udGV4dCwgbV9zZWxlY3Rpb25QYWludFN0eWxlLnN0cm9r
ZVdpZHRoID4gMCk7Ci0KLSAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KG1fY29udGV4dCwg
bV9zZWxlY3Rpb25QYWludFN0eWxlKTsKLSAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MobV9j
b250ZXh0LCBtX2ZvbnQsIG1fdGV4dFJ1biwgbnVsbEF0b20sIDAsIG1fc3RhcnRQb3NpdGlvbklu
VGV4dFJ1biwgbV9lbmRQb3NpdGlvbkluVGV4dFJ1biwgbV9sZW5ndGgsIG1fdGV4dE9yaWdpbiwg
bV9ib3hSZWN0LCBtX3NlbGVjdGlvblNoYWRvdywgbV9zZWxlY3Rpb25QYWludFN0eWxlLnN0cm9r
ZVdpZHRoID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKLSAgICAgICAgaWYgKCFtX2VtcGhh
c2lzTWFyay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dCht
X2NvbnRleHQsIG1fc2VsZWN0aW9uUGFpbnRTdHlsZSwgVXNlRW1waGFzaXNNYXJrQ29sb3IpOwot
Ci0gICAgICAgICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVGV4dFJ1biwgb2Jq
ZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoU3RyaW5nVmlldygmb2JqZWN0UmVwbGFj
ZW1lbnRDaGFyYWN0ZXIsIDEpKSk7Ci0gICAgICAgICAgICBUZXh0UnVuJiBlbXBoYXNpc01hcmtU
ZXh0UnVuID0gbV9jb21iaW5lZFRleHQgPyBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRS
dW4gOiBtX3RleHRSdW47Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRP
cmlnaW4gPSBtX2NvbWJpbmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIG1fYm94
UmVjdC53aWR0aCgpIC8gMiwgYm94T3JpZ2luLnkoKSArIG1fZm9udC5mb250TWV0cmljcygpLmFz
Y2VudCgpKSA6IG1fdGV4dE9yaWdpbjsKLSAgICAgICAgICAgIGlmIChtX2NvbWJpbmVkVGV4dCkK
LSAgICAgICAgICAgICAgICBtX2NvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwg
Q2xvY2t3aXNlKSk7Ci0KLSAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKG1fY29udGV4
dCwgbV9jb21iaW5lZFRleHQgPyBtX2NvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250KCkgOiBtX2Zv
bnQsIGVtcGhhc2lzTWFya1RleHRSdW4sIG1fZW1waGFzaXNNYXJrLCBtX2VtcGhhc2lzTWFya09m
ZnNldCwgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVuLCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuLCBt
X2xlbmd0aCwgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiwgbV9ib3hSZWN0LCBtX3NlbGVjdGlvblNo
YWRvdywgbV9zZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgbV90ZXh0Qm94SXNI
b3Jpem9udGFsKTsKLQotICAgICAgICAgICAgaWYgKG1fY29tYmluZWRUZXh0KQotICAgICAgICAg
ICAgICAgIG1fY29udGV4dC5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDb3VudGVyY2xv
Y2t3aXNlKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgLy8gcGFpbnQgb25seSB0aGUgdGV4dCB0
aGF0IGlzIHNlbGVjdGVkCisgICAgaWYgKChtX3BhaW50U2VsZWN0ZWRUZXh0T25seSB8fCBtX3Bh
aW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkgJiYgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVuIDwg
bV9lbmRQb3NpdGlvbkluVGV4dFJ1bikKKyAgICAgICAgcGFpbnRUZXh0V2l0aFN0eWxlKG1fc3Rh
cnRQb3NpdGlvbkluVGV4dFJ1biwgbV9lbmRQb3NpdGlvbkluVGV4dFJ1biwgbV9zZWxlY3Rpb25Q
YWludFN0eWxlLCBtX3NlbGVjdGlvblNoYWRvdyk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTM19URVhU
X0RFQ09SQVRJT05fU0tJUF9JTkspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvVGV4dFBhaW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5o
CmluZGV4IGU2ZWQwZTQ4YmFiZThjMmQ3NWJmZDI5MTgyMzZiZDMyZGZjYWZhYzUuLjllNjYxZWFi
Y2Q3MzZjODNhOWI5Nzc3Mzc4YTBlYTk1MzdiODViN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UZXh0UGFpbnRlci5oCkBAIC01NCw2ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgRGFzaEFycmF5
IGRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRl
bnRzKTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHBhaW50VGV4dFdpdGhTdHlsZShpbnQgc3RhcnRP
ZmZzZXQsIGludCBlbmRPZmZzZXQsIGNvbnN0IFRleHRQYWludFN0eWxlJiwgY29uc3QgU2hhZG93
RGF0YSopOworICAgIHZvaWQgcGFpbnRUZXh0V2l0aEVtcGhhc2lzSWZOZWVkZWQoaW50IHN0YXJ0
T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBjb25zdCBUZXh0UGFpbnRTdHlsZSYsIGNvbnN0IFNoYWRv
d0RhdGEqKTsKKworcHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKICAg
ICBUZXh0UGFpbnRTdHlsZSYgbV90ZXh0UGFpbnRTdHlsZTsKICAgICBUZXh0UGFpbnRTdHlsZSYg
bV9zZWxlY3Rpb25QYWludFN0eWxlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266810</attachid>
            <date>2015-12-07 14:06:03 -0800</date>
            <delta_ts>2015-12-07 15:01:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151962-20151207140535.patch</filename>
            <type>text/plain</type>
            <size>8960</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkzNjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWNjZmFlNGM0OGJjZTEy
OTNhYjgwYTFmYTUwMTczMWI1ZGUzNTc1MS4uZDQyMjQwY2U5ZGE4Mjg4ZGM0NDMyOWQyMzdiYjQ5
N2FlNzc4NDExYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDE1LTEyLTA3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmYWN0b3IgVGV4dFBhaW50
ZXI6OnBhaW50VGV4dCgpIGludG8gc3ViIG1ldGhvZHMuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTE5NjIKKworICAgICAgICBSZXZpZXdlZCBieSBN
eWxlcyBDLiBNYXhmaWVsZC4KKworICAgICAgICBObyBjaGFuZ2UgaW4gZnVuY3Rpb25hbGl0eS4K
KworICAgICAgICAqIHJlbmRlcmluZy9UZXh0UGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aEVtcGhhc2lzSWZOZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFBhaW50ZXI6OnBhaW50VGV4dFdpdGhTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpUZXh0UGFpbnRlcjo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvVGV4dFBh
aW50ZXIuaDoKKwogMjAxNS0xMi0wNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEFkZHJlc3NpbmcgcG9zdC1yZXZpZXcgY29tbWVudHMgb24gcjE5MzM3NC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBhaW50ZXIuY3BwCmluZGV4IGVjMjMwMmNjZWVlNjFi
NjM0M2UxNjQ5ZjdmMjY2YWRiZTU0ZTg3YjUuLmQ2OTA3NGZhY2E5MzBhMmUxMGI4OTdiYTEyYzIw
NzZhNjM4YTQ2MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RleHRQYWludGVyLmNwcApA
QCAtMTUwLDYzICsxNTAsNDkgQEAgc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGb250Q2FzY2FkZSYgZm8KICAgICB9IHdoaWxl
IChzaGFkb3cgfHwgIWxhc3RTaGFkb3dJdGVyYXRpb25TaG91bGREcmF3VGV4dCk7CiB9CiAKLXZv
aWQgVGV4dFBhaW50ZXI6OnBhaW50VGV4dCgpCit2b2lkIFRleHRQYWludGVyOjpwYWludEVtcGhh
c2lzTWFya3NJZk5lZWRlZChpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGNvbnN0IFRl
eHRQYWludFN0eWxlJiBwYWludFN0eWxlLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCiB7Cisg
ICAgaWYgKG1fZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
RmxvYXRQb2ludCBib3hPcmlnaW4gPSBtX2JveFJlY3QubG9jYXRpb24oKTsKKyAgICB1cGRhdGVH
cmFwaGljc0NvbnRleHQobV9jb250ZXh0LCBwYWludFN0eWxlLCBVc2VFbXBoYXNpc01hcmtDb2xv
cik7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRleHRSdW4+IG9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyVGV4dFJ1bihTdHJpbmdWaWV3KCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlciwg
MSkpOworICAgIFRleHRSdW4mIGVtcGhhc2lzTWFya1RleHRSdW4gPSBtX2NvbWJpbmVkVGV4dCA/
IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1bi5nZXQoKSA6IG1fdGV4dFJ1bjsKKyAg
ICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBtX2NvbWJpbmVkVGV4dCA/IEZs
b2F0UG9pbnQoYm94T3JpZ2luLngoKSArIG1fYm94UmVjdC53aWR0aCgpIC8gMiwgYm94T3JpZ2lu
LnkoKSArIG1fZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IG1fdGV4dE9yaWdpbjsKKyAg
ICBpZiAobV9jb21iaW5lZFRleHQpCisgICAgICAgIG1fY29udGV4dC5jb25jYXRDVE0ocm90YXRp
b24obV9ib3hSZWN0LCBDbG9ja3dpc2UpKTsKKworICAgIC8vIEZJWE1FOiBUcnVuY2F0ZSByaWdo
dC10by1sZWZ0IHRleHQgY29ycmVjdGx5LgorICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKG1fY29u
dGV4dCwgbV9jb21iaW5lZFRleHQgPyBtX2NvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250KCkgOiBt
X2ZvbnQsIGVtcGhhc2lzTWFya1RleHRSdW4sIG1fZW1waGFzaXNNYXJrLCBtX2VtcGhhc2lzTWFy
a09mZnNldCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgbV9sZW5ndGgsIGVtcGhhc2lzTWFya1Rl
eHRPcmlnaW4sIG1fYm94UmVjdCwgc2hhZG93LCBwYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwg
bV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKKworICAgIGlmIChtX2NvbWJpbmVkVGV4dCkKKyAgICAg
ICAgbV9jb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX2JveFJlY3QsIENvdW50ZXJjbG9ja3dp
c2UpKTsKK30KIAordm9pZCBUZXh0UGFpbnRlcjo6cGFpbnRUZXh0V2l0aFN0eWxlKGludCBzdGFy
dE9mZnNldCwgaW50IGVuZE9mZnNldCwgY29uc3QgVGV4dFBhaW50U3R5bGUmIHBhaW50U3R5bGUs
IGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKK3sKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNh
dmVyIHN0YXRlU2F2ZXIobV9jb250ZXh0LCBwYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCk7Cisg
ICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KG1fY29udGV4dCwgcGFpbnRTdHlsZSk7CisgICAgLy8g
RklYTUU6IFRydW5jYXRlIHJpZ2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0bHkuCisgICAgcGFpbnRU
ZXh0V2l0aFNoYWRvd3MobV9jb250ZXh0LCBtX2ZvbnQsIG1fdGV4dFJ1biwgbnVsbEF0b20sIDAs
IHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIG1fbGVuZ3RoLCBtX3RleHRPcmlnaW4sIG1fYm94UmVj
dCwgc2hhZG93LCBwYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9u
dGFsKTsKKyAgICBwYWludEVtcGhhc2lzTWFya3NJZk5lZWRlZChzdGFydE9mZnNldCwgZW5kT2Zm
c2V0LCBwYWludFN0eWxlLCBzaGFkb3cpOworfQorICAgIAordm9pZCBUZXh0UGFpbnRlcjo6cGFp
bnRUZXh0KCkKK3sKICAgICBpZiAoIW1fcGFpbnRTZWxlY3RlZFRleHRPbmx5KSB7CiAgICAgICAg
IC8vIEZvciBzdHJva2VkIHBhaW50aW5nLCB3ZSBoYXZlIHRvIGNoYW5nZSB0aGUgdGV4dCBkcmF3
aW5nIG1vZGUuIEl0J3MgcHJvYmFibHkgZGFuZ2Vyb3VzIHRvIGxlYXZlIHRoYXQgbXV0YXRlZCBh
cyBhIHNpZGUKICAgICAgICAgLy8gZWZmZWN0LCBzbyBvbmx5IHdoZW4gd2Uga25vdyB3ZSdyZSBz
dHJva2luZywgZG8gYSBzYXZlL3Jlc3RvcmUuCi0gICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihtX2NvbnRleHQsIG1fdGV4dFBhaW50U3R5bGUuc3Ryb2tlV2lkdGgg
PiAwKTsKLQotICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQobV9jb250ZXh0LCBtX3RleHRQ
YWludFN0eWxlKTsKLSAgICAgICAgaWYgKCFtX3BhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSB8
fCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuIDw9IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bikgewot
ICAgICAgICAgICAgLy8gRklYTUU6IFRydW5jYXRlIHJpZ2h0LXRvLWxlZnQgdGV4dCBjb3JyZWN0
bHkuCi0gICAgICAgICAgICBwYWludFRleHRXaXRoU2hhZG93cyhtX2NvbnRleHQsIG1fZm9udCwg
bV90ZXh0UnVuLCBudWxsQXRvbSwgMCwgMCwgbV9sZW5ndGgsIG1fbGVuZ3RoLCBtX3RleHRPcmln
aW4sIG1fYm94UmVjdCwgbV90ZXh0U2hhZG93LCBtX3RleHRQYWludFN0eWxlLnN0cm9rZVdpZHRo
ID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBwYWludFRleHRXaXRoU2hhZG93cyhtX2NvbnRleHQsIG1fZm9udCwgbV90ZXh0UnVuLCBudWxs
QXRvbSwgMCwgbV9lbmRQb3NpdGlvbkluVGV4dFJ1biwgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVu
LCBtX2xlbmd0aCwgbV90ZXh0T3JpZ2luLCBtX2JveFJlY3QsIG1fdGV4dFNoYWRvdywgbV90ZXh0
UGFpbnRTdHlsZS5zdHJva2VXaWR0aCA+IDAsIG1fdGV4dEJveElzSG9yaXpvbnRhbCk7Ci0KLSAg
ICAgICAgaWYgKCFtX2VtcGhhc2lzTWFyay5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHVwZGF0
ZUdyYXBoaWNzQ29udGV4dChtX2NvbnRleHQsIG1fdGV4dFBhaW50U3R5bGUsIFVzZUVtcGhhc2lz
TWFya0NvbG9yKTsKLQotICAgICAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRleHRSdW4+
IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1bihTdHJpbmdWaWV3KCZvYmplY3RSZXBs
YWNlbWVudENoYXJhY3RlciwgMSkpOwotICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJr
VGV4dFJ1biA9IG1fY29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0
UnVuLmdldCgpIDogbV90ZXh0UnVuOwotICAgICAgICAgICAgRmxvYXRQb2ludCBlbXBoYXNpc01h
cmtUZXh0T3JpZ2luID0gbV9jb21iaW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkg
KyBtX2JveFJlY3Qud2lkdGgoKSAvIDIsIGJveE9yaWdpbi55KCkgKyBtX2ZvbnQuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSkgOiBtX3RleHRPcmlnaW47Ci0gICAgICAgICAgICBpZiAobV9jb21iaW5l
ZFRleHQpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LmNvbmNhdENUTShyb3RhdGlvbihtX2Jv
eFJlY3QsIENsb2Nrd2lzZSkpOwotCi0gICAgICAgICAgICBpZiAoIW1fcGFpbnRTZWxlY3RlZFRl
eHRTZXBhcmF0ZWx5IHx8IG1fZW5kUG9zaXRpb25JblRleHRSdW4gPD0gbV9zdGFydFBvc2l0aW9u
SW5UZXh0UnVuKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IFRydW5jYXRlIHJpZ2h0LXRv
LWxlZnQgdGV4dCBjb3JyZWN0bHkuCi0gICAgICAgICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRv
d3MobV9jb250ZXh0LCBtX2NvbWJpbmVkVGV4dCA/IG1fY29tYmluZWRUZXh0LT5vcmlnaW5hbEZv
bnQoKSA6IG1fZm9udCwgZW1waGFzaXNNYXJrVGV4dFJ1biwgbV9lbXBoYXNpc01hcmssIG1fZW1w
aGFzaXNNYXJrT2Zmc2V0LCAwLCBtX2xlbmd0aCwgbV9sZW5ndGgsIGVtcGhhc2lzTWFya1RleHRP
cmlnaW4sIG1fYm94UmVjdCwgbV90ZXh0U2hhZG93LCBtX3RleHRQYWludFN0eWxlLnN0cm9rZVdp
ZHRoID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKG1fY29udGV4dCwgbV9jb21iaW5lZFRl
eHQgPyBtX2NvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250KCkgOiBtX2ZvbnQsIGVtcGhhc2lzTWFy
a1RleHRSdW4sIG1fZW1waGFzaXNNYXJrLCBtX2VtcGhhc2lzTWFya09mZnNldCwgbV9lbmRQb3Np
dGlvbkluVGV4dFJ1biwgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVuLCBtX2xlbmd0aCwgZW1waGFz
aXNNYXJrVGV4dE9yaWdpbiwgbV9ib3hSZWN0LCBtX3RleHRTaGFkb3csIG1fdGV4dFBhaW50U3R5
bGUuc3Ryb2tlV2lkdGggPiAwLCBtX3RleHRCb3hJc0hvcml6b250YWwpOwotCi0gICAgICAgICAg
ICBpZiAobV9jb21iaW5lZFRleHQpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LmNvbmNhdENU
TShyb3RhdGlvbihtX2JveFJlY3QsIENvdW50ZXJjbG9ja3dpc2UpKTsKLSAgICAgICAgfQorICAg
ICAgICBib29sIGZ1bGxMZW5ndGhQYWludCA9ICFtX3BhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVs
eSB8fCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuIDw9IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bjsK
KyAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gZnVsbExlbmd0aFBhaW50ID8gMCA6IG1fZW5kUG9z
aXRpb25JblRleHRSdW47CisgICAgICAgIGludCBlbmRPZmZzZXQgPSBmdWxsTGVuZ3RoUGFpbnQg
PyBtX2xlbmd0aCA6IG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1bjsKKyAgICAgICAgcGFpbnRUZXh0
V2l0aFN0eWxlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIG1fdGV4dFBhaW50U3R5bGUsIG1fdGV4
dFNoYWRvdyk7CiAgICAgfQogCi0gICAgaWYgKChtX3BhaW50U2VsZWN0ZWRUZXh0T25seSB8fCBt
X3BhaW50U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkgJiYgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVu
IDwgbV9lbmRQb3NpdGlvbkluVGV4dFJ1bikgewotICAgICAgICAvLyBwYWludCBvbmx5IHRoZSB0
ZXh0IHRoYXQgaXMgc2VsZWN0ZWQKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKG1fY29udGV4dCwgbV9zZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoID4g
MCk7Ci0KLSAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KG1fY29udGV4dCwgbV9zZWxlY3Rp
b25QYWludFN0eWxlKTsKLSAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3MobV9jb250ZXh0LCBt
X2ZvbnQsIG1fdGV4dFJ1biwgbnVsbEF0b20sIDAsIG1fc3RhcnRQb3NpdGlvbkluVGV4dFJ1biwg
bV9lbmRQb3NpdGlvbkluVGV4dFJ1biwgbV9sZW5ndGgsIG1fdGV4dE9yaWdpbiwgbV9ib3hSZWN0
LCBtX3NlbGVjdGlvblNoYWRvdywgbV9zZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoID4g
MCwgbV90ZXh0Qm94SXNIb3Jpem9udGFsKTsKLSAgICAgICAgaWYgKCFtX2VtcGhhc2lzTWFyay5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4dChtX2NvbnRleHQs
IG1fc2VsZWN0aW9uUGFpbnRTdHlsZSwgVXNlRW1waGFzaXNNYXJrQ29sb3IpOwotCi0gICAgICAg
ICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFUSUNfTE9DQUwoVGV4dFJ1biwgb2JqZWN0UmVwbGFj
ZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoU3RyaW5nVmlldygmb2JqZWN0UmVwbGFjZW1lbnRDaGFy
YWN0ZXIsIDEpKSk7Ci0gICAgICAgICAgICBUZXh0UnVuJiBlbXBoYXNpc01hcmtUZXh0UnVuID0g
bV9jb21iaW5lZFRleHQgPyBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4gOiBtX3Rl
eHRSdW47Ci0gICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBt
X2NvbWJpbmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIG1fYm94UmVjdC53aWR0
aCgpIC8gMiwgYm94T3JpZ2luLnkoKSArIG1fZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6
IG1fdGV4dE9yaWdpbjsKLSAgICAgICAgICAgIGlmIChtX2NvbWJpbmVkVGV4dCkKLSAgICAgICAg
ICAgICAgICBtX2NvbnRleHQuY29uY2F0Q1RNKHJvdGF0aW9uKG1fYm94UmVjdCwgQ2xvY2t3aXNl
KSk7Ci0KLSAgICAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKG1fY29udGV4dCwgbV9jb21i
aW5lZFRleHQgPyBtX2NvbWJpbmVkVGV4dC0+b3JpZ2luYWxGb250KCkgOiBtX2ZvbnQsIGVtcGhh
c2lzTWFya1RleHRSdW4sIG1fZW1waGFzaXNNYXJrLCBtX2VtcGhhc2lzTWFya09mZnNldCwgbV9z
dGFydFBvc2l0aW9uSW5UZXh0UnVuLCBtX2VuZFBvc2l0aW9uSW5UZXh0UnVuLCBtX2xlbmd0aCwg
ZW1waGFzaXNNYXJrVGV4dE9yaWdpbiwgbV9ib3hSZWN0LCBtX3NlbGVjdGlvblNoYWRvdywgbV9z
ZWxlY3Rpb25QYWludFN0eWxlLnN0cm9rZVdpZHRoID4gMCwgbV90ZXh0Qm94SXNIb3Jpem9udGFs
KTsKLQotICAgICAgICAgICAgaWYgKG1fY29tYmluZWRUZXh0KQotICAgICAgICAgICAgICAgIG1f
Y29udGV4dC5jb25jYXRDVE0ocm90YXRpb24obV9ib3hSZWN0LCBDb3VudGVyY2xvY2t3aXNlKSk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgLy8gcGFpbnQgb25seSB0aGUgdGV4dCB0aGF0IGlzIHNl
bGVjdGVkCisgICAgaWYgKChtX3BhaW50U2VsZWN0ZWRUZXh0T25seSB8fCBtX3BhaW50U2VsZWN0
ZWRUZXh0U2VwYXJhdGVseSkgJiYgbV9zdGFydFBvc2l0aW9uSW5UZXh0UnVuIDwgbV9lbmRQb3Np
dGlvbkluVGV4dFJ1bikKKyAgICAgICAgcGFpbnRUZXh0V2l0aFN0eWxlKG1fc3RhcnRQb3NpdGlv
bkluVGV4dFJ1biwgbV9lbmRQb3NpdGlvbkluVGV4dFJ1biwgbV9zZWxlY3Rpb25QYWludFN0eWxl
LCBtX3NlbGVjdGlvblNoYWRvdyk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTM19URVhUX0RFQ09SQVRJ
T05fU0tJUF9JTkspCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFBh
aW50ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFpbnRlci5oCmluZGV4IGU2
ZWQwZTQ4YmFiZThjMmQ3NWJmZDI5MTgyMzZiZDMyZGZjYWZhYzUuLjRhMTE0OTc1MDIyNGZlYjgz
OTE2OTMwNmM0ZGEzOWEzMmYxNTA0ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UZXh0UGFpbnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UGFp
bnRlci5oCkBAIC01NCw2ICs1NCwxMCBAQCBwdWJsaWM6CiAgICAgRGFzaEFycmF5IGRhc2hlc0Zv
ckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKTsKIAog
cHJpdmF0ZToKKyAgICB2b2lkIHBhaW50VGV4dFdpdGhTdHlsZShpbnQgc3RhcnRPZmZzZXQsIGlu
dCBlbmRPZmZzZXQsIGNvbnN0IFRleHRQYWludFN0eWxlJiwgY29uc3QgU2hhZG93RGF0YSopOwor
ICAgIHZvaWQgcGFpbnRFbXBoYXNpc01hcmtzSWZOZWVkZWQoaW50IHN0YXJ0T2Zmc2V0LCBpbnQg
ZW5kT2Zmc2V0LCBjb25zdCBUZXh0UGFpbnRTdHlsZSYsIGNvbnN0IFNoYWRvd0RhdGEqKTsKKwor
cHJpdmF0ZToKICAgICBHcmFwaGljc0NvbnRleHQmIG1fY29udGV4dDsKICAgICBUZXh0UGFpbnRT
dHlsZSYgbV90ZXh0UGFpbnRTdHlsZTsKICAgICBUZXh0UGFpbnRTdHlsZSYgbV9zZWxlY3Rpb25Q
YWludFN0eWxlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>