<?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>28820</bug_id>
          
          <creation_ts>2009-08-28 14:27:21 -0700</creation_ts>
          <short_desc>Chromium: do anti-aliased path clipping</short_desc>
          <delta_ts>2009-10-15 15:02:56 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</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="Adam Langley">agl</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>arv</cc>
    
    <cc>brettw</cc>
    
    <cc>deanm</cc>
    
    <cc>eric</cc>
    
    <cc>krit</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>143456</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-08-28 14:27:21 -0700</bug_when>
    <thetext>Currently, Skia clip paths are 1-bit. This has resulted in much sadness because our rounded corners look ugly.

This patch makes our path clipping anti-aliased.

http://code.google.com/p/chromium/issues/detail?id=5927</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143458</commentid>
    <comment_count>1</comment_count>
      <attachid>38754</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-08-28 14:32:31 -0700</bug_when>
    <thetext>Created attachment 38754
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143609</commentid>
    <comment_count>2</comment_count>
      <attachid>38754</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-31 03:22:48 -0700</bug_when>
    <thetext>Comment on attachment 38754
patch

clipAntiAliasPath seems like a strange name to me.  clipPathAndAntiAlias?  Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144273</commentid>
    <comment_count>3</comment_count>
    <who name="Brett Wilson (Google)">brettw</who>
    <bug_when>2009-09-02 13:04:35 -0700</bug_when>
    <thetext>Do you know why the imageBufferClip not used on Mac, but yours path thing is? I would have expected them to go with one-another.


I&apos;m now remembering a more efficient way to do the clipping without adding the extra layer. Sorry I forgot this from before (this suggestion is from Mike):

Instead of drawing the image inside the path, clear the area outside the path. Use the fill type on SkPath to draw &quot;outside&quot; the path with the transfer mode of clear. Then you can just paint the original (now modified) bitmap to the destination.

It also means you don&apos;t need to save the layer for each clipping path. You can just save all the paths, erase the areas outside of each of them from the single extra layer you made, and then composite that down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144322</commentid>
    <comment_count>4</comment_count>
      <attachid>38754</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-09-02 15:26:32 -0700</bug_when>
    <thetext>Comment on attachment 38754
patch

After talking with Dean, I&apos;m not sure that this is the correct solution at all. I&apos;m going to try another approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144630</commentid>
    <comment_count>5</comment_count>
      <attachid>39017</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-09-03 16:11:54 -0700</bug_when>
    <thetext>Created attachment 39017
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144632</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 16:16:52 -0700</bug_when>
    <thetext>Do we have bugs filed about CG/Cairo&apos;s &quot;bodged&quot; clipping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144633</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-09-03 16:21:04 -0700</bug_when>
    <thetext>Ojan suggested that we be good citizens and file such bugs, but I&apos;ve not done so yet. I honestly doubt that they would do anything about it. They would hit the same problems that we would hit with &lt;canvas&gt; and anti-aliased clipping. They could do 1-bit drawing at 4x supersampling and solve all the issues, but I suspect the the performance hit of doing so would be too much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144638</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-03 16:29:15 -0700</bug_when>
    <thetext>incompatible canvas implementations = teh suck.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144641</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-09-03 16:41:41 -0700</bug_when>
    <thetext>I think you&apos;re taking the word &apos;bodge&apos; as too pejorative. The correct application of sensible bodges is called &apos;engineering&apos;. Doing anti-aliased clipping as you draw is a bodge: you get the wrong answer. But in this case it&apos;s a sensible bodge. I rather wish Skia would support it as this point.

&lt;canvas&gt; not having anti-aliased clipping is unfortunate for some, and a requirement for others. I think it&apos;s just a manifestation of anything complex in early stages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144773</commentid>
    <comment_count>10</comment_count>
    <who name="Dean McNamee">deanm</who>
    <bug_when>2009-09-04 03:06:13 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I think you&apos;re taking the word &apos;bodge&apos; as too pejorative. The correct
&gt; application of sensible bodges is called &apos;engineering&apos;. Doing anti-aliased
&gt; clipping as you draw is a bodge: you get the wrong answer. But in this case
&gt; it&apos;s a sensible bodge. I rather wish Skia would support it as this point.
&gt; 
&gt; &lt;canvas&gt; not having anti-aliased clipping is unfortunate for some, and a
&gt; requirement for others. I think it&apos;s just a manifestation of anything complex
&gt; in early stages.

Looks like I don&apos;t have permission to review the patch.  Anyway, some small feedback.

&gt; +
&gt; +        // This clip function is used only by &lt;canvas&gt; code. It allows
&gt; +        // implementations to handle clipping on the canvas differently since
&gt; +        // the disipline is different.

discipline ?

&gt; +    // If we are currently tracking any anti-alias clip paths, then we already
&gt; +    // have a layer in place and don&apos;t need to add another.
&gt; +    bool haveLayerOutstanding = m_state-&gt;m_antiAliasClipPaths.size();

How about !isEmpty() ?  Actually, you could flip the logic to noOustandingLayers, and invert the if() also.  You could also just do the append 
and check if size == 1.


&gt; +    for (size_t i = paths.size() - 1; i &lt; paths.size(); --i) {
&gt; +        paths[i].setFillType(SkPath::kInverseWinding_FillType);

Cool man...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>147346</commentid>
    <comment_count>11</comment_count>
      <attachid>39017</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-09-15 11:36:43 -0700</bug_when>
    <thetext>Comment on attachment 39017
patch

(Giving up on Darin)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>151709</commentid>
    <comment_count>12</comment_count>
      <attachid>39017</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-01 15:03:18 -0700</bug_when>
    <thetext>Comment on attachment 39017
patch

 95     void clipPathAntiAliased(const SkPath&amp; path);
&quot;path&quot; shouldn&apos;t be there.

But in general this looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154914</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-10-15 15:02:56 -0700</bug_when>
    <thetext>r49641</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38754</attachid>
            <date>2009-08-28 14:32:31 -0700</date>
            <delta_ts>2009-09-03 16:11:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>8466</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODgwYWJkYS4uNWU0MjFjOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAwOS0wOC0yOCAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ3VycmVudGx5LCBTa2lhIGNsaXAgcGF0aHMgYXJlIDEtYml0LiBUaGlzIGhh
cyByZXN1bHRlZCBpbiBtdWNoCisgICAgICAgIHNhZG5lc3MgYmVjYXVzZSBvdXIgcm91bmRlZCBj
b3JuZXJzIGxvb2sgdWdseS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIG91ciBwYXRoIGNs
aXBwaW5nIGFudGktYWxpYXNlZC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg4MjAKKyAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2No
cm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTkyNworCisgICAgICAgIFRoaXMgaXMgY292ZXJlZCBi
eSBleGlzdGluZyBsYXlvdXQgdGVzdHMuIENoYW5nZWQgYmFzZWxpbmVzIHdpbGwgYmUgaW4KKyAg
ICAgICAgdGhlIENocm9taXVtIHRyZWUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBBbnRpQWxpYXNQ
YXRoKToKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OnJlc3RvcmUpOgorICAgICAgICAo
RHN0SW5YZmVyTW9kZTo6eGZlcjMyKToKKyAgICAgICAgKERzdEluWGZlck1vZGU6OmdldEZhY3Rv
cnkpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6YXBwbHlBbnRpQWxpYXNlZENsaXBQ
YXRocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmg6CisKIDIwMDktMDgtMjggIFZpdGFseSBSZXBlc2hrbyAgPHZpdGFseXJAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcApp
bmRleCBkZDViOTA0Li44ZmNiMTNhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0yOTYsNyArMjk2LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJl
Y3QmIHJlY3QsIGludCB0aGlja25lc3MKICAgICAgICAgci5pbnNldChTa0ludFRvU2NhbGFyKHRo
aWNrbmVzcyksIFNrSW50VG9TY2FsYXIodGhpY2tuZXNzKSk7CiAgICAgICAgIHBhdGguYWRkT3Zh
bChyLCBTa1BhdGg6OmtDQ1dfRGlyZWN0aW9uKTsKICAgICB9Ci0gICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5jbGlwUGF0aChwYXRoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xp
cEFudGlBbGlhc1BhdGgocGF0aCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRo
KGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNTYsNyArMzU2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENU
TSgpLCBwKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5jbGlwUGF0aChwKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcEFudGlBbGlhc1Bh
dGgocCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCkBAIC00MDQsNyArNDA0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KFdpbmRSdWxlIGNsaXBSdWxlKQogCiAgICAgU2tQYXRoIHBhdGggPSBwbGF0Zm9ybUNvbnRleHQo
KS0+Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAgICBwYXRoLnNldEZpbGxUeXBl
KGNsaXBSdWxlID09IFJVTEVfRVZFTk9ERCA/IFNrUGF0aDo6a0V2ZW5PZGRfRmlsbFR5cGUgOiBT
a1BhdGg6OmtXaW5kaW5nX0ZpbGxUeXBlKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCktPmNsaXBQYXRoKHBhdGgpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwQW50aUFsaWFz
UGF0aChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVy
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRleCA4YjA5MDBmLi42MDBkMmFk
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiU2tEYXNoUGF0aEVm
ZmVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAKIC8vIFN0YXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTkwLDYgKzkxLDEwIEBAIHN0
cnVjdCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZSB7CiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0
IG1fY2xpcDsKICNlbmRpZgogCisgICAgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgY2xpcHBpbmcgcGF0
aHMgd2hpY2ggYXJlIGN1cnJlbnRseSBhY3RpdmUsIGluIHRoZQorICAgIC8vIG9yZGVyIGluIHdo
aWNoIHRoZXkgd2VyZSBwdXNoZWQuCisgICAgV1RGOjpWZWN0b3I8U2tQYXRoPiBtX2FudGlBbGlh
c0NsaXBQYXRoczsKKwogcHJpdmF0ZToKICAgICAvLyBOb3Qgc3VwcG9ydGVkLgogICAgIHZvaWQg
b3BlcmF0b3I9KGNvbnN0IFN0YXRlJik7CkBAIC0yNDQsNiArMjQ5LDE1IEBAIHZvaWQgUGxhdGZv
cm1Db250ZXh0U2tpYTo6YmVnaW5MYXllckNsaXBwZWRUb0ltYWdlKGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgcmVjCiB9CiAjZW5kaWYKIAordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjbGlw
QW50aUFsaWFzUGF0aChjb25zdCBTa1BhdGgmIGNsaXBQYXRoKQoreworICAgIC8vIFNlZSBjb21t
ZW50cyBpbiBhcHBseUFudGlBbGlhc2VkQ2xpcFBhdGhzIGFib3V0IGhvdyB0aGlzIHdvcmtzLgor
ICAgIG1fc3RhdGUtPm1fYW50aUFsaWFzQ2xpcFBhdGhzLmFwcGVuZChjbGlwUGF0aCk7CisKKyAg
ICBTa1JlY3QgYm91bmRzID0gY2xpcFBhdGguZ2V0Qm91bmRzKCk7CisgICAgY2FudmFzKCktPnNh
dmVMYXllckFscGhhKCZib3VuZHMsIDI1NSwgc3RhdGljX2Nhc3Q8U2tDYW52YXM6OlNhdmVGbGFn
cz4oU2tDYW52YXM6OmtIYXNBbHBoYUxheWVyX1NhdmVGbGFnIHwgU2tDYW52YXM6OmtGdWxsQ29s
b3JMYXllcl9TYXZlRmxhZyB8IFNrQ2FudmFzOjprQ2xpcFRvTGF5ZXJfU2F2ZUZsYWcpKTsKK30K
Kwogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlKCkKIHsKICNpZiBkZWZpbmVkKF9f
bGludXhfXykgfHwgUExBVEZPUk0oV0lOX09TKQpAQCAtMjUzLDYgKzI2Nyw5IEBAIHZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZSgpCiAgICAgfQogI2VuZGlmCiAKKyAgICBpZiAoIW1f
c3RhdGUtPm1fYW50aUFsaWFzQ2xpcFBhdGhzLmlzRW1wdHkoKSkKKyAgICAgICAgYXBwbHlBbnRp
QWxpYXNlZENsaXBQYXRocyhtX3N0YXRlLT5tX2FudGlBbGlhc0NsaXBQYXRocyk7CisKICAgICBt
X3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxh
c3QoKTsKIApAQCAtNTQ0LDMgKzU2MSw3MyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFw
cGx5Q2xpcEZyb21JbWFnZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QsIGNvbgogICAg
IG1fY2FudmFzLT5kcmF3Qml0bWFwKGltYWdlQnVmZmVyLCBTa0Zsb2F0VG9TY2FsYXIocmVjdC54
KCkpLCBTa0Zsb2F0VG9TY2FsYXIocmVjdC55KCkpLCAmcGFpbnQpOwogfQogI2VuZGlmCisKKy8v
IEEgdHJhbnNmZXIgbW9kZSB3aGljaCBhY3RzIGxpa2UgUG9ydGVyLUR1ZmYgRHN0SW4uIFRoZSBT
a2lhIGJ1aWx0aW4gRHN0SW4KKy8vIG1vZGUgZG9lc24ndCBzZWVtIHRvIGRvIHF1aXRlIHRoZSBy
aWdodCB0aGluZy4gSXQgYXBwZWFycyB0byBjb21wb3NlIHR3aWNlCisvLyAoZS5nLiwgaWYgdGhl
IFBvcnRlci1EdWZmIG91dHB1dCBpcyB0cmFuc3BhcmVudCwgdGhlIGRlc3RpbmF0aW9uIGlzCisv
LyB1bmFmZmVjdGVkLCByYXRoZXIgdGhhbiBtYWRlIHRyYW5zcGFyZW50LikKK2NsYXNzIERzdElu
WGZlck1vZGUgOiBwdWJsaWMgU2tYZmVybW9kZQoreworcHVibGljOgorICAgIHZpcnR1YWwgdm9p
ZCB4ZmVyMzIoU0tfUkVTVFJJQ1QgU2tQTUNvbG9yIGRzdFtdLCBjb25zdCBTS19SRVNUUklDVCBT
a1BNQ29sb3Igc3JjW10sIGludCBjb3VudCwgY29uc3QgU0tfUkVTVFJJQ1QgU2tBbHBoYSBhYVtd
KQorICAgIHsKKyAgICAgICAgaWYgKCFhYSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgICAgICBkc3RbaV0gPSBT
a0FscGhhTXVsUShkc3RbaV0sIGFhW2ldKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFNrRmxhdHRl
bmFibGU6OkZhY3RvcnkgZ2V0RmFjdG9yeSgpIHsgcmV0dXJuIDA7IH0KK307CisKK3ZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6YXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhjb25zdCBXVEY6OlZl
Y3RvcjxTa1BhdGg+JiBwYXRocykKK3sKKyAgICAvLyBBbnRpLWFsaWFzZWQgY2xpcHBpbmc6Cisg
ICAgLy8KKyAgICAvLyBTa2lhJ3MgY2xpcHBpbmcgaXMgMS1iaXQgb25seS4gQ29uc2lkZXIgd2hh
dCB3b3VsZCBoYXBwZW4gaWYgaXQgd2VyZSA4LWJpdDoKKyAgICAvLyBXZSBoYXZlIGEgc3F1YXJl
IGNhbnZhcywgZmlsbGVkIHdpdGggd2hpdGUgYW5kIHdlIGRlY2xhcmUgYSBjaXJjdWxhcgorICAg
IC8vIGNsaXBwaW5nIHBhdGguIFRoZW4gd2UgZmlsbCB0d2ljZSB3aXRoIGEgYmxhY2sgcmVjdGFu
Z2xlLiBUaGUgZnJhY3Rpb25hbAorICAgIC8vIHBpeGVscyB3b3VsZCBmaXJzdCBnZXQgdGhlIGNv
cnJlY3QgY29sb3IgKHdoaXRlICogYWxwaGEgKyBibGFjayAqICgxIC0KKyAgICAvLyBhbHBoYSkp
LCBidXQgdGhlIHNlY29uZCBmaWxsIHdvdWxkIGFwcGx5IHRoZSBhbHBoYSB0byB0aGUgYWxyZWFk
eQorICAgIC8vIG1vZGlmaWVkIGNvbG9yIGFuZCB0aGUgcmVzdWx0IHdvdWxkIGJlIHRvbyBkYXJr
LgorICAgIC8vCisgICAgLy8gVGhpcywgYW50aS1hbGlhc2VkIGNsaXBwaW5nIG5lZWRzIHRvIGJl
IHBlcmZvcm1lZCBhZnRlciB0aGUgZHJhd2luZyBoYXMKKyAgICAvLyBiZWVuIGRvbmUuIEluIG9y
ZGVyIHRvIGRvIHRoaXMsIHdlIGNyZWF0ZSBhIG5ldyBsYXllciBvZiB0aGUgY2FudmFzIGluCisg
ICAgLy8gY2xpcEFudGlBbGlhc1BhdGggYW5kIHN0b3JlIHRoZSBjbGlwcGluZyBwYXRoLiBBbGwg
ZHJhd2luZyBpcyBkb25lIHRvCisgICAgLy8gdGhlIGxheWVyJ3MgYml0bWFwIHdoaWxlIGl0J3Mg
aW4gZWZmZWN0LiBXaGVuIFdlYktpdCBjYWxscyByZXN0b3JlKCkgdG8KKyAgICAvLyB1bmRvIHRo
ZSBjbGlwcGluZywgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgICAgLy8KKyAgICAvLyBIZXJl
LCB3ZSB3YWxrIHRoZSBsaXN0IG9mIGNsaXBwaW5nIHBhdGhzIGJhY2t3YXJkcyBhbmQsIGZvciBl
YWNoLCByZW5kZXIKKyAgICAvLyB0aGUgcGF0aCB0byBhbiBhbHBoYSBjaGFubmVsIHdpdGggYW50
aS1hbGlhc2luZy4gV2UgdGhlbiB1c2UgdGhhdCBhbHBoYQorICAgIC8vIGNoYW5uZWwgdG8gYWx0
ZXIgdGhlIGxheWVyJ3MgYml0bWFwIHRvIG1ha2UgdGhlIGNvcnJlY3QgcGl4ZWxzCisgICAgLy8g
dHJhbnNwYXJlbnQuIFdoZW4gd2UgY2FsbCByZXN0b3JlIG9uIHRoZSBTa0NhbnZhcywgdGhlIGxh
eWVyJ3MgYml0bWFwIGlzCisgICAgLy8gY29tcG9zZWQgaW50byB0aGUgbGF5ZXIgYmVsb3cgYW5k
IHdlIGVuZCB1cCB3aXRoIGNvcnJlY3QsIGFudGktYWxpYXNlZAorICAgIC8vIGNsaXBwaW5nLgor
CisgICAgZm9yIChzaXplX3QgaSA9IHBhdGhzLnNpemUoKSAtIDE7IGkgPCBwYXRocy5zaXplKCk7
IC0taSkgeworICAgICAgICBTa1JlY3QgYm91bmRzID0gcGF0aHNbaV0uZ2V0Qm91bmRzKCk7Cisg
ICAgICAgIFNrQml0bWFwIGJpdG1hcDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgd2lkdGggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oYm91bmRzLndpZHRoKCkpOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBoZWlnaHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYm91bmRzLmhlaWdodCgpKTsKKyAg
ICAgICAgYml0bWFwLnNldENvbmZpZyhTa0JpdG1hcDo6a0E4X0NvbmZpZywgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIGJpdG1hcC5hbGxvY1BpeGVscygpOworICAgICAgICBiaXRtYXAuZXJhc2VB
UkdCKDAsIDAsIDAsIDApOworCisgICAgICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgICAgIHBhaW50
LnNldEFSR0IoMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICAgICAgcGFpbnQuc2V0QW50aUFsaWFz
KHRydWUpOworICAgICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7CisK
KyAgICAgICAgU2tDYW52YXMgY2FudmFzKGJpdG1hcCk7CisgICAgICAgIGNhbnZhcy50cmFuc2xh
dGUoLWJvdW5kcy5mTGVmdCwgLWJvdW5kcy5mVG9wKTsKKyAgICAgICAgY2FudmFzLmRyYXdQYXRo
KHBhdGhzW2ldLCBwYWludCk7CisKKyAgICAgICAgU2tYZmVybW9kZSogeGZlcm1vZGUgPSBuZXcg
RHN0SW5YZmVyTW9kZTsKKyAgICAgICAgcGFpbnQuc2V0WGZlcm1vZGUoeGZlcm1vZGUpOworICAg
ICAgICBtX2NhbnZhcy0+ZHJhd0JpdG1hcChiaXRtYXAsIGJvdW5kcy5mTGVmdCwgYm91bmRzLmZU
b3AsICZwYWludCk7CisgICAgICAgIHhmZXJtb2RlLT51bnJlZigpOworCisgICAgICAgIG1fY2Fu
dmFzLT5yZXN0b3JlKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggMGM4N2ZjMi4uNzQ1ZWNhMCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luTGF5ZXJD
bGlwcGVkVG9JbWFnZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyKik7CiAjZW5kaWYK
KyAgICB2b2lkIGNsaXBBbnRpQWxpYXNQYXRoKGNvbnN0IFNrUGF0aCYgcGF0aCk7CiAKICAgICAv
LyBTZXRzIHVwIHRoZSBjb21tb24gZmxhZ3Mgb24gYSBwYWludCBmb3IgYW50aWFsaWFzaW5nLCBl
ZmZlY3RzLCBldGMuCiAgICAgLy8gVGhpcyBpcyBpbXBsaWNpdGx5IGNhbGxlZCBieSBzZXR1cFBh
aW50RmlsbCBhbmQgc2V0dXBQYWludFN0cm9rZSwgYnV0CkBAIC0xNzIsNiArMTczLDcgQEAgcHJp
dmF0ZToKICAgICAvLyBtX2NhbnZhcyB0aGF0IGFyZSBhbHNvIGluIGltYWdlQnVmZmVyLgogICAg
IHZvaWQgYXBwbHlDbGlwRnJvbUltYWdlKGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYsIGNvbnN0
IFNrQml0bWFwJik7CiAjZW5kaWYKKyAgICB2b2lkIGFwcGx5QW50aUFsaWFzZWRDbGlwUGF0aHMo
Y29uc3QgV1RGOjpWZWN0b3I8U2tQYXRoPiYgcGF0aHMpOwogCiAgICAgLy8gRGVmaW5lcyBkcmF3
aW5nIHN0eWxlLgogICAgIHN0cnVjdCBTdGF0ZTsK
</data>
<flag name="review"
          id="19750"
          type_id="1"
          status="-"
          setter="agl"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39017</attachid>
            <date>2009-09-03 16:11:54 -0700</date>
            <delta_ts>2009-10-01 15:03:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>14790</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NmYyYzI0NC4uMmUyZDdlMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3MCBAQAorMjAwOS0wOS0wMyAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW06IGN1cnJlbnRseSwgY2xpcCBwYXRocyBhcmUgMS1iaXQuIFRo
aXMgaGFzIHJlc3VsdGVkIGluIG11Y2gKKyAgICAgICAgc2FkbmVzcyBiZWNhdXNlIG91ciByb3Vu
ZGVkIGNvcm5lcnMgbG9vayB1Z2x5LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yODgyMAorICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
Y2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01OTI3CisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRz
IGFudGktYWxpYXNlZCBjbGlwcGluZyBpbiBTa2lhIGFuZCB1c2VzIGl0IGZvciBkcmF3aW5nCisg
ICAgICAgIFdlYiBwcmltaXRpdmVzLiBJdCBhbHNvIHNwbGl0cyBwYXRoIGNsaXBwaW5nIGluIGNh
bnZhcyBpbnRvIGEgc2VwYXJhdGUKKyAgICAgICAgZnVuY3Rpb24gc28gdGhhdCBjYW52YXMgY2xp
cHBpbmcgY2FuIGNvbnRpbnVlIHRvIGJlIDEtYml0LiBXZSB3YW50CisgICAgICAgIHRoaXMgZm9y
IGEgbnVtYmVyIG9mIHJlYXNvbnM6CisKKyAgICAgICAgT25lIGNhbm5vdCBkbyAnb24tbGluZScg
YW50aS1hbGlhc2VkIHBhdGggY2xpcHBpbmcgY29ycmVjdGx5IChzZWUKKyAgICAgICAgY29tbWVu
dHMgaW4gdGhlIGNvZGUpLiBDYWlybyBhbmQgQ0cgYm9kZ2UgaXQgYW5kIGdldCBpdCB3cm9uZywg
YnV0IGl0CisgICAgICAgIGRvZXMgbWFrZSB0aGUgY29kZSBlYXNpZXIuICBJZiB3ZSBjb3VsZCBi
b2RnZSBpdCBpbiB0aGUgc2FtZSBmYXNoaW9uCisgICAgICAgIHdlIHByb2JhYmx5IHdvdWxkLCBi
dXQgY2hhZ2luZyBTa2lhIGluIHN1Y2ggYSB3YXkgd291bGQgYmUgYSBtYWpvcgorICAgICAgICB1
bmRlcnRha2luZy4KKworICAgICAgICBJbiBvcmRlciB0byBkbyBpdCBjb3JyZWN0bHksIHRoZSBj
bGlwcGluZyBoYXMgdG8gYmUgYXBwbGllZCBhZnRlciB0aGUKKyAgICAgICAgZHJhd2luZyBoYXMg
YmVlbiBjb21wbGV0ZS4gSG93ZXZlciwgPGNhbnZhcz4gdXNlcnMgZXhwZWN0IGRyYXdpbmcgdG8K
KyAgICAgICAgaGFwcGVuICdvbi1saW5lJzogdGhleSBkb24ndCBhbHdheXMgc2F2ZSgpIGFuZCBy
ZXN0b3JlKCkgdGhlIGNsaXAKKyAgICAgICAgc3RhdGUuIEluIG9yZGVyIG5vdCB0byBicmVhayB0
aGUgV2ViLCB3ZSB3b3VsZCBoYXZlIHRvIGNvbGxhc3BlIHRoZQorICAgICAgICBjbGlwcGluZyBz
dGF0ZSAoYW5kIGFsbCBsYXllcnMpIHdoZW4gZHJhd2luZyBhbmQgcmVzdG9yZSBldmVyeXRoaW5n
CisgICAgICAgIGFmdGVyd2FyZHMuIEFnYWluLCB0aGlzIHdvdWxkIGJlIGEgbG90IG9mIGVmZm9y
dC4KKworICAgICAgICBMYXN0bHksIHdpdGggdGhlIGN1cnJlbnQgY2FudmFzIEFQSSwgb25lIGNh
bm5vdCB0ZXNzZWxhdGUgcG9seWdvbnMKKyAgICAgICAgd2l0aG91dCBzZWFtcyBpZiBhbnRpLWFs
aWFzaW5nIGlzIGVuYWJsZWQuIEluIGZ1dHVyZSA8Y2FudmFzPiBBUElzLAorICAgICAgICB0aGVy
ZSB3aWxsIGJlIHN1cHBvcnQgZm9yIGRvaW5nIHRoaXMgYnV0LCBpbiB0aGUgbWVhbiB0aW1lLCB3
ZSBkb24ndAorICAgICAgICB3YW50IHRvIGJyZWFrIGFsbCB0aGUgY29vbCBkZW1vcyB3aGljaCBy
ZWx5IG9uIHRoaXMuCisKKyAgICAgICAgSW4gYWxsIHRoZSBvdGhlciBpbXBsZW1lbnRhdGlvbnMs
IGNhbnZhc0NsaXAoKSBqdXN0IGNhbGxzIHRoZWlyCisgICAgICAgIGV4aXN0aW5nIGNsaXAoKSBm
dW5jdGlvbnMuCisKKyAgICAgICAgTGF5b3V0IHRlc3QgYmFzZWxpbmVzIHdpbGwgYmUgaW4gdGhl
IENocm9taXVtIHRyZWUuIFRoaXMgYmVoYXZpb3VyIGlzCisgICAgICAgIGFtcGx5IGNvdmVyZWQg
YnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXApOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNhbnZhc0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
UGF0aCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ29udGV4dFNraWE6OmNsaXBQYXRoQW50aUFsaWFz
ZWQpOgorICAgICAgICAoUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVzdG9yZSk6CisgICAgICAgIChQ
bGF0Zm9ybUNvbnRleHRTa2lhOjphcHBseUFudGlBbGlhc2VkQ2xpcFBhdGhzKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmNhbnZhc0NsaXApOgorCiAyMDA5LTA5LTAzICBBZGFtIEJhcnRoICA8YWJh
cnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgZXJpY0B3ZWJraXQub3JnLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmlu
ZGV4IDFlM2ZhYTMuLjA1YjU0N2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTY4Nyw3ICs2ODcsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6Y2xpcCgpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAoIXN0YXRl
KCkubV9pbnZlcnRpYmxlQ1RNKQogICAgICAgICByZXR1cm47Ci0gICAgYy0+Y2xpcChtX3BhdGgp
OworICAgIGMtPmNhbnZhc0NsaXAobV9wYXRoKTsKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBP
UlQpCiAgICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgp
OwogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApp
bmRleCBlMGQ5Mjk0Li5jNmJiMjBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKQEAgLTI5Nyw2ICsyOTcsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgICAgIHZvaWQgY2xpcChj
b25zdCBQYXRoJik7CisKKyAgICAgICAgLy8gVGhpcyBjbGlwIGZ1bmN0aW9uIGlzIHVzZWQgb25s
eSBieSA8Y2FudmFzPiBjb2RlLiBJdCBhbGxvd3MKKyAgICAgICAgLy8gaW1wbGVtZW50YXRpb25z
IHRvIGhhbmRsZSBjbGlwcGluZyBvbiB0aGUgY2FudmFzIGRpZmZlcmVudGx5IHNpbmNlCisgICAg
ICAgIC8vIHRoZSBkaXNpcGxpbmUgaXMgZGlmZmVyZW50LgorICAgICAgICB2b2lkIGNhbnZhc0Ns
aXAoY29uc3QgUGF0aCYpOwogICAgICAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOwogCiAg
ICAgICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4
IGRlOGFmYjMuLjg3NDFjNWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC05MzEsNiArOTMxLDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgbV9kYXRh
LT5jbGlwKHBhdGgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25z
dCBQYXRoJiBwYXRoKQoreworICAgIGNsaXAocGF0aCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHRDRy5jcHAKaW5kZXggMWI4NDNlNC4uMTM1MGJkMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKQEAgLTg0OSw2ICs4NDksMTEg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKICAgICBtX2Rh
dGEtPmNsaXAocGF0aCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNv
bnN0IFBhdGgmIHBhdGgpCit7CisgICAgY2xpcChwYXRoKTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFw
aGljc0NvbnRleHRIYWlrdS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dy
YXBoaWNzQ29udGV4dEhhaWt1LmNwcAppbmRleCBkNzg1ZWY0Li5jMjNiOGE5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhh
aWt1LmNwcApAQCAtMzY5LDYgKzM2OSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChj
b25zdCBQYXRoJiBwYXRoKQogICAgIG1fZGF0YS0+bV92aWV3LT5Db25zdHJhaW5DbGlwcGluZ1Jl
Z2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBjbGlwKHBhdGgpOworfQorCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0UXQuY3BwCmluZGV4IDVlMDRiODUuLjFiZTM4MjAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC05
OTQsNiArOTk0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCiAgICAgbV9kYXRhLT5wKCktPnNldENsaXBQYXRoKCpwYXRoLnBsYXRmb3JtUGF0aCgpLCBR
dDo6SW50ZXJzZWN0Q2xpcCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlw
KGNvbnN0IFBhdGgmIHBhdGgpCit7CisgICAgY2xpcChwYXRoKTsKK30KKwogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcGF0aCkKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dFNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4IDU5MTc0YTcuLjFjNTJhZjAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5j
cHAKQEAgLTI5Niw3ICsyOTYsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3Vu
ZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcwogICAgICAgICBy
Lmluc2V0KFNrSW50VG9TY2FsYXIodGhpY2tuZXNzKSwgU2tJbnRUb1NjYWxhcih0aGlja25lc3Mp
KTsKICAgICAgICAgcGF0aC5hZGRPdmFsKHIsIFNrUGF0aDo6a0NDV19EaXJlY3Rpb24pOwogICAg
IH0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmNsaXBQYXRoKHBhdGgpOworICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHBhdGgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQpAQCAtMzU2LDYgKzM1
NiwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQogICAg
IGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHApKQogICAgICAgICByZXR1cm47CiAKKyAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGhBbnRpQWxpYXNlZChwKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBTa1BhdGgm
IHAgPSAqcGF0aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENU
TSgpLCBwKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5jbGlwUGF0aChwKTsKIH0KIApAQCAtNDA0LDcgKzQxNiw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwUGF0aChXaW5kUnVsZSBjbGlwUnVsZSkKIAogICAgIFNrUGF0aCBwYXRoID0g
cGxhdGZvcm1Db250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAg
cGF0aC5zZXRGaWxsVHlwZShjbGlwUnVsZSA9PSBSVUxFX0VWRU5PREQgPyBTa1BhdGg6OmtFdmVu
T2RkX0ZpbGxUeXBlIDogU2tQYXRoOjprV2luZGluZ19GaWxsVHlwZSk7Ci0gICAgcGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5jbGlwUGF0aChwYXRoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2xpcFBhdGhBbnRpQWxpYXNlZChwYXRoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAppbmRl
eCBiOTQ5ZGFkLi43NWE0M2I0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCkBAIC00NSw2ICs0NSw3IEBACiAjaW5j
bHVkZSAiU2tEYXNoUGF0aEVmZmVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIAogewpAQCAtOTUs
NiArOTYsMTAgQEAgc3RydWN0IFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlIHsKICAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgbV9jbGlwOwogI2VuZGlmCiAKKyAgICAvLyBUaGlzIGlzIGEgbGlzdCBv
ZiBjbGlwcGluZyBwYXRocyB3aGljaCBhcmUgY3VycmVudGx5IGFjdGl2ZSwgaW4gdGhlCisgICAg
Ly8gb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHB1c2hlZC4KKyAgICBXVEY6OlZlY3RvcjxTa1Bh
dGg+IG1fYW50aUFsaWFzQ2xpcFBhdGhzOworCiBwcml2YXRlOgogICAgIC8vIE5vdCBzdXBwb3J0
ZWQuCiAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgU3RhdGUmKTsKQEAgLTI0OSw2ICsyNTQsMjEg
QEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiZWdpbkxheWVyQ2xpcHBlZFRvSW1hZ2UoY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiByZWMKIH0KICNlbmRpZgogCit2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OmNsaXBQYXRoQW50aUFsaWFzZWQoY29uc3QgU2tQYXRoJiBjbGlwUGF0aCkKK3sK
KyAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IHRyYWNraW5nIGFueSBhbnRpLWFsaWFzIGNsaXAg
cGF0aHMsIHRoZW4gd2UgYWxyZWFkeQorICAgIC8vIGhhdmUgYSBsYXllciBpbiBwbGFjZSBhbmQg
ZG9uJ3QgbmVlZCB0byBhZGQgYW5vdGhlci4KKyAgICBib29sIGhhdmVMYXllck91dHN0YW5kaW5n
ID0gbV9zdGF0ZS0+bV9hbnRpQWxpYXNDbGlwUGF0aHMuc2l6ZSgpOworCisgICAgLy8gU2VlIGNv
bW1lbnRzIGluIGFwcGx5QW50aUFsaWFzZWRDbGlwUGF0aHMgYWJvdXQgaG93IHRoaXMgd29ya3Mu
CisgICAgbV9zdGF0ZS0+bV9hbnRpQWxpYXNDbGlwUGF0aHMuYXBwZW5kKGNsaXBQYXRoKTsKKwor
ICAgIGlmICghaGF2ZUxheWVyT3V0c3RhbmRpbmcpIHsKKyAgICAgICAgU2tSZWN0IGJvdW5kcyA9
IGNsaXBQYXRoLmdldEJvdW5kcygpOworICAgICAgICBjYW52YXMoKS0+c2F2ZUxheWVyQWxwaGEo
JmJvdW5kcywgMjU1LCBzdGF0aWNfY2FzdDxTa0NhbnZhczo6U2F2ZUZsYWdzPihTa0NhbnZhczo6
a0hhc0FscGhhTGF5ZXJfU2F2ZUZsYWcgfCBTa0NhbnZhczo6a0Z1bGxDb2xvckxheWVyX1NhdmVG
bGFnIHwgU2tDYW52YXM6OmtDbGlwVG9MYXllcl9TYXZlRmxhZykpOworICAgIH0KK30KKwogdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpyZXN0b3JlKCkKIHsKICNpZiBkZWZpbmVkKF9fbGludXhf
XykgfHwgUExBVEZPUk0oV0lOX09TKQpAQCAtMjU4LDYgKzI3OCw5IEBAIHZvaWQgUGxhdGZvcm1D
b250ZXh0U2tpYTo6cmVzdG9yZSgpCiAgICAgfQogI2VuZGlmCiAKKyAgICBpZiAoIW1fc3RhdGUt
Pm1fYW50aUFsaWFzQ2xpcFBhdGhzLmlzRW1wdHkoKSkKKyAgICAgICAgYXBwbHlBbnRpQWxpYXNl
ZENsaXBQYXRocyhtX3N0YXRlLT5tX2FudGlBbGlhc0NsaXBQYXRocyk7CisKICAgICBtX3N0YXRl
U3RhY2sucmVtb3ZlTGFzdCgpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsK
IApAQCAtNTUxLDMgKzU3NCw0MCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5Q2xp
cEZyb21JbWFnZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHJlY3QsIGNvbgogICAgIG1fY2Fu
dmFzLT5kcmF3Qml0bWFwKGltYWdlQnVmZmVyLCBTa0Zsb2F0VG9TY2FsYXIocmVjdC54KCkpLCBT
a0Zsb2F0VG9TY2FsYXIocmVjdC55KCkpLCAmcGFpbnQpOwogfQogI2VuZGlmCisKK3ZvaWQgUGxh
dGZvcm1Db250ZXh0U2tpYTo6YXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3RvcjxT
a1BhdGg+JiBwYXRocykKK3sKKyAgICAvLyBBbnRpLWFsaWFzZWQgY2xpcHBpbmc6CisgICAgLy8K
KyAgICAvLyBTa2lhJ3MgY2xpcHBpbmcgaXMgMS1iaXQgb25seS4gQ29uc2lkZXIgd2hhdCB3b3Vs
ZCBoYXBwZW4gaWYgaXQgd2VyZSA4LWJpdDoKKyAgICAvLyBXZSBoYXZlIGEgc3F1YXJlIGNhbnZh
cywgZmlsbGVkIHdpdGggd2hpdGUgYW5kIHdlIGRlY2xhcmUgYSBjaXJjdWxhcgorICAgIC8vIGNs
aXBwaW5nIHBhdGguIFRoZW4gd2UgZmlsbCB0d2ljZSB3aXRoIGEgYmxhY2sgcmVjdGFuZ2xlLiBU
aGUgZnJhY3Rpb25hbAorICAgIC8vIHBpeGVscyB3b3VsZCBmaXJzdCBnZXQgdGhlIGNvcnJlY3Qg
Y29sb3IgKHdoaXRlICogYWxwaGEgKyBibGFjayAqICgxIC0KKyAgICAvLyBhbHBoYSkpLCBidXQg
dGhlIHNlY29uZCBmaWxsIHdvdWxkIGFwcGx5IHRoZSBhbHBoYSB0byB0aGUgYWxyZWFkeQorICAg
IC8vIG1vZGlmaWVkIGNvbG9yIGFuZCB0aGUgcmVzdWx0IHdvdWxkIGJlIHRvbyBkYXJrLgorICAg
IC8vCisgICAgLy8gVGhpcywgYW50aS1hbGlhc2VkIGNsaXBwaW5nIG5lZWRzIHRvIGJlIHBlcmZv
cm1lZCBhZnRlciB0aGUgZHJhd2luZyBoYXMKKyAgICAvLyBiZWVuIGRvbmUuIEluIG9yZGVyIHRv
IGRvIHRoaXMsIHdlIGNyZWF0ZSBhIG5ldyBsYXllciBvZiB0aGUgY2FudmFzIGluCisgICAgLy8g
Y2xpcFBhdGhBbnRpQWxpYXNlZCBhbmQgc3RvcmUgdGhlIGNsaXBwaW5nIHBhdGguIEFsbCBkcmF3
aW5nIGlzIGRvbmUgdG8KKyAgICAvLyB0aGUgbGF5ZXIncyBiaXRtYXAgd2hpbGUgaXQncyBpbiBl
ZmZlY3QuIFdoZW4gV2ViS2l0IGNhbGxzIHJlc3RvcmUoKSB0bworICAgIC8vIHVuZG8gdGhlIGNs
aXBwaW5nLCB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KKyAgICAvLworICAgIC8vIEhlcmUsIHdl
IHdhbGsgdGhlIGxpc3Qgb2YgY2xpcHBpbmcgcGF0aHMgYmFja3dhcmRzIGFuZCwgZm9yIGVhY2gs
IHdlCisgICAgLy8gY2xlYXIgb3V0c2lkZSBvZiB0aGUgY2xpcHBpbmcgcGF0aC4gV2Ugb25seSBu
ZWVkIGEgc2luZ2xlIGV4dHJhIGxheWVyCisgICAgLy8gZm9yIGFueSBudW1iZXIgb2YgY2xpcHBp
bmcgcGF0aHMuCisgICAgLy8KKyAgICAvLyBXaGVuIHdlIGNhbGwgcmVzdG9yZSBvbiB0aGUgU2tD
YW52YXMsIHRoZSBsYXllcidzIGJpdG1hcCBpcyBjb21wb3NlZAorICAgIC8vIGludG8gdGhlIGxh
eWVyIGJlbG93IGFuZCB3ZSBlbmQgdXAgd2l0aCBjb3JyZWN0LCBhbnRpLWFsaWFzZWQgY2xpcHBp
bmcuCisKKyAgICBTa1BhaW50IHBhaW50OworICAgIHBhaW50LnNldFhmZXJtb2RlTW9kZShTa1hm
ZXJtb2RlOjprQ2xlYXJfTW9kZSk7CisgICAgcGFpbnQuc2V0QW50aUFsaWFzKHRydWUpOworICAg
IHBhaW50LnNldFN0eWxlKFNrUGFpbnQ6OmtGaWxsX1N0eWxlKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSBwYXRocy5zaXplKCkgLSAxOyBpIDwgcGF0aHMuc2l6ZSgpOyAtLWkpIHsKKyAgICAgICAg
cGF0aHNbaV0uc2V0RmlsbFR5cGUoU2tQYXRoOjprSW52ZXJzZVdpbmRpbmdfRmlsbFR5cGUpOwor
ICAgICAgICBtX2NhbnZhcy0+ZHJhd1BhdGgocGF0aHNbaV0sIHBhaW50KTsKKyAgICB9CisKKyAg
ICBtX2NhbnZhcy0+cmVzdG9yZSgpOworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggMGM4N2ZjMi4uYzhlYjhmZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250
ZXh0U2tpYS5oCkBAIC05Miw2ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGJlZ2luTGF5ZXJD
bGlwcGVkVG9JbWFnZShjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkltYWdlQnVmZmVyKik7CiAjZW5kaWYK
KyAgICB2b2lkIGNsaXBQYXRoQW50aUFsaWFzZWQoY29uc3QgU2tQYXRoJiBwYXRoKTsKIAogICAg
IC8vIFNldHMgdXAgdGhlIGNvbW1vbiBmbGFncyBvbiBhIHBhaW50IGZvciBhbnRpYWxpYXNpbmcs
IGVmZmVjdHMsIGV0Yy4KICAgICAvLyBUaGlzIGlzIGltcGxpY2l0bHkgY2FsbGVkIGJ5IHNldHVw
UGFpbnRGaWxsIGFuZCBzZXR1cFBhaW50U3Ryb2tlLCBidXQKQEAgLTE3Miw2ICsxNzMsNyBAQCBw
cml2YXRlOgogICAgIC8vIG1fY2FudmFzIHRoYXQgYXJlIGFsc28gaW4gaW1hZ2VCdWZmZXIuCiAg
ICAgdm9pZCBhcHBseUNsaXBGcm9tSW1hZ2UoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiwgY29u
c3QgU2tCaXRtYXAmKTsKICNlbmRpZgorICAgIHZvaWQgYXBwbHlBbnRpQWxpYXNlZENsaXBQYXRo
cyhXVEY6OlZlY3RvcjxTa1BhdGg+JiBwYXRocyk7CiAKICAgICAvLyBEZWZpbmVzIGRyYXdpbmcg
c3R5bGUuCiAgICAgc3RydWN0IFN0YXRlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0V2luLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dFdpbi5jcHAKaW5kZXggNTRiMGNiMi4uN2JjZmJjMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0
V2luLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHRXaW4uY3BwCkBAIC0xNjMsNiArMTYzLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlOjpjbGlwKGNvbnN0IFBhdGgmKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgpCit7Cisg
ICAgY2xpcChwYXRoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
OnNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKIHsKICAgICBpZiAoIW1faGRjKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9HcmFwaGljc0NvbnRleHRXaW5j
ZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdp
bmNlLmNwcAppbmRleCBjMTE0YzBlLi5mMzA4ODQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcApAQCAtMTIx
OSw2ICsxMjE5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBjbGlwKHBhdGgpOworfQorCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGlj
c0NvbnRleHRXeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29u
dGV4dFd4LmNwcAppbmRleCA1OWUzODhlLi4wNDI1YjQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcApAQCAtMzQ0LDYgKzM0NCwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJikKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQ
YXRoJiBwYXRoKQoreworICAgIGNsaXAocGF0aCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciop
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
</data>
<flag name="review"
          id="20036"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>