<?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>65491</bug_id>
          
          <creation_ts>2011-08-01 14:48:31 -0700</creation_ts>
          <short_desc>Implement a faster path for painting tables with overflowing cells</short_desc>
          <delta_ts>2011-08-18 13:21:16 -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>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>hyatt</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>444893</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-01 14:48:31 -0700</bug_when>
    <thetext>Painting may be taking 15% of the time when dealing with big tables with some overflowing cell (even if those are not visible).

The reason being that the code default to repainting all the cells if there is an overflowing cell.

Patch forthcoming to try to balance the 2 behaviors by repainting smartly if the overflowing cells are sparse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444920</commentid>
    <comment_count>1</comment_count>
      <attachid>102570</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-01 15:21:02 -0700</bug_when>
    <thetext>Created attachment 102570
Proposed algorithmic change: Use a memory / performance tradeoff to paint fastly without blowing up the memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449848</commentid>
    <comment_count>2</comment_count>
      <attachid>102570</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-11 09:59:51 -0700</bug_when>
    <thetext>Comment on attachment 102570
Proposed algorithmic change: Use a memory / performance tradeoff to paint fastly without blowing up the memory.

I need to see some tests. I want to make sure this is really about overflowing cells and that this isn&apos;t an issue of saying something overflows when it doesn&apos;t. Can you show me the real-world test case or issue that is motivating these changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449854</commentid>
    <comment_count>3</comment_count>
      <attachid>102570</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-11 10:04:42 -0700</bug_when>
    <thetext>Comment on attachment 102570
Proposed algorithmic change: Use a memory / performance tradeoff to paint fastly without blowing up the memory.

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

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1077
&gt; +            // FIXME: It is possible that we repaint the same cell twice here. However we make sure the overflowing cells are sparse in the table.
&gt; +            // This should ensure that this is still a win.

You can&apos;t ever paint the same cell twice. If the cell has any transparency, this will result you seeing both copies stacked on top of one another, won&apos;t it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449856</commentid>
    <comment_count>4</comment_count>
      <attachid>102570</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-11 10:08:57 -0700</bug_when>
    <thetext>Comment on attachment 102570
Proposed algorithmic change: Use a memory / performance tradeoff to paint fastly without blowing up the memory.

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

Minusing because of the double painting issue since that would cause a regression.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1097
&gt; -            std::stable_sort(cells.begin(), cells.end(), compareCellPositions);
&gt; +            if (!m_overflowingCells.size())
&gt; +                std::stable_sort(cells.begin(), cells.end(), compareCellPositions);
&gt; +            else
&gt; +                std::stable_sort(cells.begin(), cells.end(), compareCellPositionsWithOverflowingCells);

Is it really necessary to have a different comparison function here? Does compareCellPositions not look at rows?

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1212
&gt; -    if (m_hasOverflowingCell) {
&gt; +    if (hasOverflowingCell()) {

Why not patch hit testing as well? You&apos;ve left it slow?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449868</commentid>
    <comment_count>5</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-11 10:27:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 102570 [details])
&gt; Can you show me the real-world test case or issue that is motivating these changes?

My real world test case is Google Docs where they are using tables to display the content. The size of the tables can get pretty big and depending on your configuration overflowing cells may be allowed. In this case, regardless of how many cells are displayed you will always draw all of them because of the overflowing content. I will attach a synthetic test case I am using. It is a smaller version of the one I am using for profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449872</commentid>
    <comment_count>6</comment_count>
      <attachid>103644</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-11 10:34:50 -0700</bug_when>
    <thetext>Created attachment 103644
Reduced use case

This is a 10 x 10 table, the second cell of the second row (&quot;0&quot;) has overflowing content and triggers us to use the slow path because m_hasOverflowingCell is true. The test case I use for profiling is 500x500 but it follows the same pattern except that we have more cells overflowing and they are randomly spread in the table.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449874</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-11 10:49:06 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1097
&gt; &gt; -            std::stable_sort(cells.begin(), cells.end(), compareCellPositions);
&gt; &gt; +            if (!m_overflowingCells.size())
&gt; &gt; +                std::stable_sort(cells.begin(), cells.end(), compareCellPositions);
&gt; &gt; +            else
&gt; &gt; +                std::stable_sort(cells.begin(), cells.end(), compareCellPositionsWithOverflowingCells);
&gt; 
&gt; Is it really necessary to have a different comparison function here? Does compareCellPositions not look at rows?

We do. compareCellPositions only look at rows (not the columns inside a row) because:
1. they add the cells in order
2. use a stable sort so that we keep the ordering inside a row

To be able to use the same ordering we would need to be smarter when inserting our cells from the 2 different sorted arrays. I sided with using a more complicated comparison as it was easier to get it right. It also has the advantage of not slowing down the other code paths.

&gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1212
&gt; &gt; -    if (m_hasOverflowingCell) {
&gt; &gt; +    if (hasOverflowingCell()) {
&gt; 
&gt; Why not patch hit testing as well? You&apos;ve left it slow?

Indeed, I did not want to disturb hit testing in this patch. Also we would need to hit test all our overflowing cells and then find the right one which would complicate the existing code. If you are fine with that, I would prefer to push this change to a following patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>449959</commentid>
    <comment_count>8</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-11 12:58:24 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 102570 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102570&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1077
&gt; &gt; +            // FIXME: It is possible that we repaint the same cell twice here. However we make sure the overflowing cells are sparse in the table.
&gt; &gt; +            // This should ensure that this is still a win.
&gt; 
&gt; You can&apos;t ever paint the same cell twice. If the cell has any transparency, this will result you seeing both copies stacked on top of one another, won&apos;t it?

That&apos;s a good point. I don&apos;t see any difference on Chromium and Qt after testing with opacity and overflow (even if we do repaint some overflowing cells twice in a row). I will rework the patch to remove this problem. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450093</commentid>
    <comment_count>9</comment_count>
      <attachid>103686</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-11 15:32:28 -0700</bug_when>
    <thetext>Created attachment 103686
Better version: do not repaint the same cell twice, tweaked the change for more performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450477</commentid>
    <comment_count>10</comment_count>
      <attachid>103686</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-12 10:09:45 -0700</bug_when>
    <thetext>Comment on attachment 103686
Better version: do not repaint the same cell twice, tweaked the change for more performance.

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

Minusing for the HashSet improvement that can be made.

&gt; Source/WebCore/ChangeLog:21
&gt; +        (WebCore::RenderTableSection::layoutRows): Added some code to accumulute the overflowing cells

Typo: accumulate

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1064
&gt; +            HashSet&lt;RenderTableCell*&gt; spanningAndOverflowingCells = m_overflowingCells;

Don&apos;t do it this way. Just check both hash tables in the code below. This is going to do a complete copy of the HashTable and that&apos;s slow.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1073
&gt; +                        if (spanningAndOverflowingCells.contains(current.cells[i]))
&gt; +                            continue;

Just check both HashSets individually here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450478</commentid>
    <comment_count>11</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-12 10:11:40 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 102570 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102570&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/RenderTableSection.cpp:1077
&gt; &gt; &gt; +            // FIXME: It is possible that we repaint the same cell twice here. However we make sure the overflowing cells are sparse in the table.
&gt; &gt; &gt; +            // This should ensure that this is still a win.
&gt; &gt; 
&gt; &gt; You can&apos;t ever paint the same cell twice. If the cell has any transparency, this will result you seeing both copies stacked on top of one another, won&apos;t it?
&gt; 
&gt; That&apos;s a good point. I don&apos;t see any difference on Chromium and Qt after testing with opacity and overflow (even if we do repaint some overflowing cells twice in a row). I will rework the patch to remove this problem. Thanks!

I mentioned this on IRC, but just for anyone else following along, you should use rgba colors to test double painting. If you use opacity, the painting of the cell gets farmed out to a RenderLayer, so the RenderTableSection code is no longer used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450621</commentid>
    <comment_count>12</comment_count>
      <attachid>103686</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-12 13:35:09 -0700</bug_when>
    <thetext>Comment on attachment 103686
Better version: do not repaint the same cell twice, tweaked the change for more performance.

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        (likely due to adding the duplicate check for every cells instead of just if we have some spanning cells).

I redid the measurements and found the actual slowdown to be within the statistical noise after the suggested changes. The speedup is confirmed though. Likely something that tainted my measurements (I used a local apache server for the tests which may have added some issues though should have impacted both measures). I did make sure the caches were warm in both experiments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>450629</commentid>
    <comment_count>13</comment_count>
      <attachid>103807</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-12 13:42:10 -0700</bug_when>
    <thetext>Created attachment 103807
New version: taking Dave&apos;s comment into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453185</commentid>
    <comment_count>14</comment_count>
      <attachid>103807</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-08-18 11:32:37 -0700</bug_when>
    <thetext>Comment on attachment 103807
New version: taking Dave&apos;s comment into account.

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

r=me with one suggested correction.

&gt; Source/WebCore/rendering/RenderTableSection.cpp:1072
&gt; +                        if (m_overflowingCells.contains(current.cells[i]))
&gt; +                            continue;

Just make this part of an or with the other check, so that you don&apos;t waste time checking the overflow hash for non-spanning cells.

if (current.cells[i]-&gt;rowSpan() &gt; 1 || current.cells[i]-&gt;colSpan() &gt; 1) {
    if (m_overflowingCells.contains(current.cells[i]) || spanningCells.contains(current.cells[i]))
        continue;
    spanningCells.add(current.cells[i]);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453287</commentid>
    <comment_count>15</comment_count>
      <attachid>103807</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2011-08-18 13:03:37 -0700</bug_when>
    <thetext>Comment on attachment 103807
New version: taking Dave&apos;s comment into account.

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

&gt;&gt; Source/WebCore/rendering/RenderTableSection.cpp:1072
&gt;&gt; +                            continue;
&gt; 
&gt; Just make this part of an or with the other check, so that you don&apos;t waste time checking the overflow hash for non-spanning cells.
&gt; 
&gt; if (current.cells[i]-&gt;rowSpan() &gt; 1 || current.cells[i]-&gt;colSpan() &gt; 1) {
&gt;     if (m_overflowingCells.contains(current.cells[i]) || spanningCells.contains(current.cells[i]))
&gt;         continue;
&gt;     spanningCells.add(current.cells[i]);
&gt; }

As discussed on IRC, we need to check every cells to avoid adding duplicated cells (basically the cells in the intersection between overflowing and visible should not be added twice).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453299</commentid>
    <comment_count>16</comment_count>
      <attachid>103807</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 13:21:11 -0700</bug_when>
    <thetext>Comment on attachment 103807
New version: taking Dave&apos;s comment into account.

Clearing flags on attachment: 103807

Committed r93341: &lt;http://trac.webkit.org/changeset/93341&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453300</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 13:21:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102570</attachid>
            <date>2011-08-01 15:21:02 -0700</date>
            <delta_ts>2011-08-11 15:32:24 -0700</delta_ts>
            <desc>Proposed algorithmic change: Use a memory / performance tradeoff to paint fastly without blowing up the memory.</desc>
            <filename>bug-65491-20110801152101.patch</filename>
            <type>text/plain</type>
            <size>12219</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE4NzgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkOGFiNjcxNjViZDQ1NTM2
NGM3NjFmOWRjZWU5NDE0MjU2ZTg1Y2UzLi5kZGZlODQ5NjM5N2U2ZjNkN2M0MGFiNzJhM2RmM2Ni
NGIxZTk5YzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMDgtMDEgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGEgZmFzdGVyIHBhdGggZm9yIHBhaW50aW5nIHRhYmxlcyB3aXRoIG92ZXJmbG93aW5nIGNlbGxz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ5MQor
CisgICAgICAgIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBzbWFydGVyIHdheSBvZiBwYWludGlu
ZyBpZiB0aGUgdGFibGUgaXMgYmlnIGVub3VnaCBhbmQgd2UgaGF2ZSBhIHNtYWxsIGFtb3VudAor
ICAgICAgICBvZiBvdmVyZmxvd2luZyBjZWxscyBpbiB0aGUgdGFibGUuIFRoZSBuZXcgcGF0aCBk
b2VzIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgY2VsbHMgdG8gcmVwYWludCBidXQgYWRkcworICAg
ICAgICB0aGUgb3ZlcmZsb3dpbmcgY2VsbHMgdG8gdGhlIHJlcGFpbnRpbmcgY2VsbHMgKGluIHRo
ZSBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBpbiB0aGUgdGFibGUgdG8gcHJvcGVybHkKKyAgICAg
ICAgcGFpbnQpLgorCisgICAgICAgIFRoaXMgc2F2ZXMgfjQlIHdoZW4gZG9pbmcgcHJvZ3JhbW1h
dGljIHNjcm9sbGluZyB0aHJvdWdodCBKUyBvbiBhIDUwMHg1MDAgdGFibGUgd2l0aCBzb21lIG92
ZXJmbG93aW5nCisgICAgICAgIGNlbGxzLiBBbHNvIHdlIGNhcCB0aGUgbWVtb3J5IHVzYWdlIHRv
IGEgcmF0aW8gb2YgdGhlIHRvdGFsIHNpemUgb2YgdGhlIHRhYmxlIHRvIGF2b2lkIGJsb3dpbmcg
dXAgdGhlCisgICAgICAgIG1lbW9yeS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhlIGJlaGF2aW9yIHNob3VsZCBiZSB0
aGUgc2FtZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKTogQWRk
ZWQgc29tZSBjb2RlIHRvIGFjY3VtbHVhdGVkIHRoZSBvdmVyZmxvd2luZyBjZWxscworICAgICAg
ICBpbiBvdXIgaW50ZXJuYWwgVmVjdG9yLiBJZiB3ZSBoaXQgdGhlIGNhcCwgZmxpcCB0aGUgYm9v
bGVhbiB2YWx1ZSBhbmQgY2xlYXIgdGhlIFZlY3RvciBhcyB0aGUKKyAgICAgICAgc2xvdyBwYXRo
IGRvZXMgbm90IGNhcmUgYWJvdXQgdGhpcyBpbmZvcm1hdGlvbi4gTWFrZSBzdXJlIHRoYXQgdGhl
IGluZm9ybWF0aW9uIGlzIHN0aWxsIHByb3Blcmx5CisgICAgICAgIGVuY29kZWQgb24gb3VyIDIg
dmFsdWVzLgorCisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQ2VsbFBvc2l0aW9uc1dpdGhPdmVy
Zmxvd2luZ0NlbGxzKTogQWRkZWQgdGhpcyBtZXRob2QgYXMgd2UgYXJlIGRvaW5nIGEgbW9yZQor
ICAgICAgICBjb21wbGljYXRlZCBzb3J0ICgyIGFycmF5cyBpbnN0ZWFkIG9mIDEgaW4gdGhlIHBy
ZXZpb3VzIHBhdGgpLiBUaGlzIGF2b2lkcyBzbG93aW5nIGRvd24gdGhlIG9yaWdpbmFsCisgICAg
ICAgIHBhdGguCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRP
YmplY3QpOiBUd2Vha2VkIHRoZSBsb2dpYyB0byBhY2NvdW50IGZvciBkaWZmZXJlbmNlIGJldHdl
ZW4KKyAgICAgICAgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsIGFuZCBo
YXMgc29tZSBvdmVyZmxvd2luZyBjZWxscy4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVTZWN0aW9uOjpub2RlQXRQb2ludCk6IENoYW5nZWQgdG8gaGFzT3ZlcmZsb3dpbmdDZWxsKCku
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmg6IFRyYW5zZm9ybWVk
IG91ciBvcmlnaW5hbCBib29sZWFuIGludG8KKyAgICAgICAgYSBWZWN0b3IgYW5kIGEgYm9vbGVh
bi4gVGhlIFZlY3RvciBob2xkcyB1cCB0aGUgQ2VsbFN0cnVjdCB0aGF0IGFyZSBvdmVyZmxvd2lu
ZworICAgICAgICB1bnRpbCB3ZSByZWFjaCB0aGUgbWVtb3J5IHRocmVzaG9sZC4gQWZ0ZXIgdGhp
cyBpcyBoaXQsIHdlIGp1c3Qgc2V0IHRoZSBib29sZWFuCisgICAgICAgIHRvIGF2b2lkIHVzaW5n
IHRvbyBtdWNoIG1lbW9yeS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9u
OjpoYXNPdmVyZmxvd2luZ0NlbGwpOiBUaGlzIGlzIHRoZSBuZXcgd2F5IHRvIGRldGVybWluZQor
ICAgICAgICBpZiB3ZSBoYXZlIGFueSBvdmVyZmxvd2luZyBjZWxsLCB1c2VkIG9ubHkgZm9yIGhp
dCB0ZXN0aW5nLgorCiAyMDExLTA3LTI3ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIExvYWQgZGVsZWdhdGUgbm90IGNvbnN1bHRlZCBiZWZvcmUgbG9h
ZGluZyBzb21lIHBvc3RlciBpbWFnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggZjg5NjZmNWYyN2JmMWIzNmFkMzY4MWUzMjA1NmE3
OWI3MTFmOWRjZS4uOWI1ZjNmNDM5YjQ2ZTU3ZjI5MGNlMWQxZjhkNzBkYzU1ZTE3YzNjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAg
LTQ0LDYgKzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAorLy8gVGhvc2UgMiB2YXJpYWJsZXMgYXJlIHVzZWQgdG8gYmFsYW5jZSB0aGUg
bWVtb3J5IGNvbnN1bXB0aW9uIHZzIHRoZSByZXBhaW50IHRpbWUgb24gYmlnIHRhYmxlcy4KK3N0
YXRpYyB1bnNpZ25lZCBnTWluVGFibGVTaXplVG9Vc2VGYXN0UGFpbnRQYXRoV2l0aE92ZXJmbG93
aW5nQ2VsbCA9IDc1ICogNzU7CitzdGF0aWMgZmxvYXQgZ01heEFsbG93ZWRPdmVyZmxvd2luZ0Nl
bGxSYXRpb0ZvckZhc3RQYWludFBhdGggPSAuMTsKKwogc3RhdGljIGlubGluZSB2b2lkIHNldFJv
d0xvZ2ljYWxIZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhlaWdodElmTm90UmVsYXRpdmUoUmVuZGVy
VGFibGVTZWN0aW9uOjpSb3dTdHJ1Y3QqIHJvdykKIHsKICAgICBBU1NFUlQocm93ICYmIHJvdy0+
cm93UmVuZGVyZXIpOwpAQCAtNjIsNyArNjYsNiBAQCBSZW5kZXJUYWJsZVNlY3Rpb246OlJlbmRl
clRhYmxlU2VjdGlvbihOb2RlKiBub2RlKQogICAgICwgbV9vdXRlckJvcmRlckJlZm9yZSgwKQog
ICAgICwgbV9vdXRlckJvcmRlckFmdGVyKDApCiAgICAgLCBtX25lZWRzQ2VsbFJlY2FsYyhmYWxz
ZSkKLSAgICAsIG1faGFzT3ZlcmZsb3dpbmdDZWxsKGZhbHNlKQogICAgICwgbV9oYXNNdWx0aXBs
ZUNlbGxMZXZlbHMoZmFsc2UpCiB7CiAgICAgLy8gaW5pdCBSZW5kZXJPYmplY3QgYXR0cmlidXRl
cwpAQCAtNDI0LDcgKzQyNyw4IEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3Mo
aW50IHRvQWRkKQogICAgIC8vIFNldCB0aGUgd2lkdGggb2Ygb3VyIHNlY3Rpb24gbm93LiAgVGhl
IHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMgd2lkdGguCiAgICAgc2V0TG9naWNhbFdpZHRoKHRhYmxl
KCktPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAgbV9vdmVyZmxvdy5jbGVhcigpOwotICAg
IG1faGFzT3ZlcmZsb3dpbmdDZWxsID0gZmFsc2U7CisgICAgbV9vdmVyZmxvd2luZ0NlbGxzLmNs
ZWFyKCk7CisgICAgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsID0gZmFs
c2U7CiAKICAgICBpZiAodG9BZGQgJiYgdG90YWxSb3dzICYmIChtX3Jvd1Bvc1t0b3RhbFJvd3Nd
IHx8ICFuZXh0U2libGluZygpKSkgewogICAgICAgICBpbnQgdG90YWxIZWlnaHQgPSBtX3Jvd1Bv
c1t0b3RhbFJvd3NdICsgdG9BZGQ7CkBAIC02NDksNiArNjUzLDEyIEBAIGludCBSZW5kZXJUYWJs
ZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHRvQWRkKQogCiAgICAgc2V0TG9naWNhbEhlaWdodCht
X3Jvd1Bvc1t0b3RhbFJvd3NdKTsKIAorICAgIHVuc2lnbmVkIHRvdGFsQ2VsbHNDb3VudCA9IG5F
ZmZDb2xzICogdG90YWxSb3dzOworICAgIHVuc2lnbmVkIG1heEFsbG93ZWRPdmVyZmxvd2luZ0Nl
bGxzQ291bnQgPSB0b3RhbENlbGxzQ291bnQgPCBnTWluVGFibGVTaXplVG9Vc2VGYXN0UGFpbnRQ
YXRoV2l0aE92ZXJmbG93aW5nQ2VsbCA/IDAgOiBnTWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJh
dGlvRm9yRmFzdFBhaW50UGF0aCAqIHRvdGFsQ2VsbHNDb3VudDsKKworI2lmbmRlZiBOREVCVUcK
KyAgICBib29sIGhhc092ZXJmbG93aW5nQ2VsbCA9IGZhbHNlOworI2VuZGlmCiAgICAgLy8gTm93
IHRoYXQgb3VyIGhlaWdodCBoYXMgYmVlbiBkZXRlcm1pbmVkLCBhZGQgaW4gb3ZlcmZsb3cgZnJv
bSBjZWxscy4KICAgICBmb3IgKGludCByID0gMDsgciA8IHRvdGFsUm93czsgcisrKSB7CiAgICAg
ICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbkVmZkNvbHM7IGMrKykgewpAQCAtNjU5LDEwICs2Njks
MjMgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdG9BZGQpCiAgICAg
ICAgICAgICBpZiAociA8IHRvdGFsUm93cyAtIDEgJiYgY2VsbCA9PSBwcmltYXJ5Q2VsbEF0KHIg
KyAxLCBjKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGFkZE92ZXJm
bG93RnJvbUNoaWxkKGNlbGwpOwotICAgICAgICAgICAgbV9oYXNPdmVyZmxvd2luZ0NlbGwgfD0g
Y2VsbC0+aGFzVmlzdWFsT3ZlcmZsb3coKTsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBo
YXNPdmVyZmxvd2luZ0NlbGwgfD0gY2VsbC0+aGFzVmlzdWFsT3ZlcmZsb3coKTsKKyNlbmRpZgor
ICAgICAgICAgICAgaWYgKGNlbGwtPmhhc1Zpc3VhbE92ZXJmbG93KCkgJiYgIW1fZm9yY2VTbG93
UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCkgeworICAgICAgICAgICAgICAgIG1fb3ZlcmZs
b3dpbmdDZWxscy5hcHBlbmQoJmNzKTsKKyAgICAgICAgICAgICAgICBpZiAobV9vdmVyZmxvd2lu
Z0NlbGxzLnNpemUoKSA+IG1heEFsbG93ZWRPdmVyZmxvd2luZ0NlbGxzQ291bnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgbV9mb3JjZXNTbG93UGFpbnRQYXRoIG9u
bHkgaWYgdGhlcmUgaXMgYSBsZWFzdCBvbmUgb3ZlcmZsb3dpbmcgY2VsbHMgYXMgdGhlIGhpdCB0
ZXN0aW5nIGNvZGUgcmVseSBvbiB0aGlzIGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAg
ICBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICAvLyBUaGUgc2xvdyBwYXRoIGRvZXMgbm90IG1ha2UgYW55IHVzZSBvZiB0
aGUgb3ZlcmZsb3dpbmcgY2VsbHMgaW5mbywgZG9uJ3QgaG9sZCBvbiB0byB0aGUgbWVtb3J5Lgor
ICAgICAgICAgICAgICAgICAgICBtX292ZXJmbG93aW5nQ2VsbHMuY2xlYXIoKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBBU1NFUlQo
aGFzT3ZlcmZsb3dpbmdDZWxsID09IGhhc092ZXJmbG93aW5nQ2VsbCgpKTsKKwogICAgIHN0YXRl
UHVzaGVyLnBvcCgpOwogICAgIHJldHVybiBoZWlnaHQoKTsKIH0KQEAgLTkxNCw2ICs5MzcsMTYg
QEAgc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVDZWxsUG9zaXRpb25zKFJlbmRlclRhYmxlQ2Vs
bCogZWxlbTEsIFJlbmRlclRhYmxlQ2VsbCoKICAgICByZXR1cm4gZWxlbTEtPnJvdygpIDwgZWxl
bTItPnJvdygpOwogfQogCisvLyBUaGlzIGNvbXBhcmlzb24gaXMgdXNlZCBvbmx5IHdoZW4gd2Ug
aGF2ZSBvdmVyZmxvd2luZyBjZWxscyBhcyB3ZSBoYXZlIDIgc29ydGVkIGFycmF5cyB0byBtZXJn
ZS4gV2UgdGhlbiBuZWVkCisvLyB0byBzb3J0IGJvdGggb24gcm93cyBhbmQgY29sdW1ucyB0byBw
cm9wZXJseSByZXBhaW50Lgorc3RhdGljIGlubGluZSBib29sIGNvbXBhcmVDZWxsUG9zaXRpb25z
V2l0aE92ZXJmbG93aW5nQ2VsbHMoUmVuZGVyVGFibGVDZWxsKiBlbGVtMSwgUmVuZGVyVGFibGVD
ZWxsKiBlbGVtMikKK3sKKyAgICBpZiAoZWxlbTEtPnJvdygpICE9IGVsZW0yLT5yb3coKSkKKyAg
ICAgICAgcmV0dXJuIGVsZW0xLT5yb3coKSA8IGVsZW0yLT5yb3coKTsKKworICAgIHJldHVybiBl
bGVtMS0+Y29sKCkgPCBlbGVtMi0+Y29sKCk7Cit9CisKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9u
OjpwYWludENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxsLCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIExheW91dFBvaW50IGNlbGxQ
b2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxsLCBwYWludE9mZnNldCwgUGFyZW50VG9DaGls
ZEZsaXBwaW5nQWRqdXN0bWVudCk7CkBAIC05NTEsNyArOTg0LDYgQEAgdm9pZCBSZW5kZXJUYWJs
ZVNlY3Rpb246OnBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwqIGNlbGwsIFBhaW50SW5mbyYgcGFp
bnRJbmZvLAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAgICAgLy8gQ2hl
Y2sgd2hpY2ggcm93cyBhbmQgY29scyBhcmUgdmlzaWJsZSBhbmQgb25seSBwYWludCB0aGVzZS4K
LSAgICAvLyBGSVhNRTogQ291bGQgdXNlIGEgYmluYXJ5IHNlYXJjaCBoZXJlLgogICAgIHVuc2ln
bmVkIHRvdGFsUm93cyA9IG1fZ3JpZFJvd3M7CiAgICAgdW5zaWduZWQgdG90YWxDb2xzID0gdGFi
bGUoKS0+Y29sdW1ucygpLnNpemUoKTsKIApAQCAtOTcwLDggKzEwMDIsNyBAQCB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYQogICAgICAgICAgICAgbG9jYWxSZXBhaW50UmVjdC5zZXRYKHdpZHRoKCkg
LSBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSk7CiAgICAgfQogCi0gICAgLy8gSWYgc29tZSBjZWxs
IG92ZXJmbG93cywganVzdCBwYWludCBhbGwgb2YgdGhlbS4KLSAgICBpZiAoIW1faGFzT3ZlcmZs
b3dpbmdDZWxsKSB7CisgICAgaWYgKCFtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2lu
Z0NlbGwpIHsKICAgICAgICAgTGF5b3V0VW5pdCBiZWZvcmUgPSAoc3R5bGUoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJlY3QueSgpIDogbG9jYWxSZXBhaW50UmVj
dC54KCkpIC0gb3M7CiAgICAgICAgIC8vIGJpbmFyeSBzZWFyY2ggdG8gZmluZCBhIHJvdwogICAg
ICAgICBzdGFydHJvdyA9IHN0ZDo6bG93ZXJfYm91bmQobV9yb3dQb3MuYmVnaW4oKSwgbV9yb3dQ
b3MuZW5kKCksIGJlZm9yZSkgLSBtX3Jvd1Bvcy5iZWdpbigpOwpAQCAtOTk0LDcgKzEwMjUsNyBA
QCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgIHVuc2lnbmVkIHN0YXJ0Y29sID0gMDsKICAg
ICB1bnNpZ25lZCBlbmRjb2wgPSB0b3RhbENvbHM7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCBS
VEwuCi0gICAgaWYgKCFtX2hhc092ZXJmbG93aW5nQ2VsbCAmJiBzdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpIHsKKyAgICBpZiAoIW1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJm
bG93aW5nQ2VsbCAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAg
ICAgTGF5b3V0VW5pdCBzdGFydCA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gbG9jYWxSZXBhaW50UmVjdC54KCkgOiBsb2NhbFJlcGFpbnRSZWN0LnkoKSkgLSBvczsKICAg
ICAgICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRhYmxlKCktPmNvbHVtblBvc2l0aW9ucygp
OwogICAgICAgICBzdGFydGNvbCA9IHN0ZDo6bG93ZXJfYm91bmQoY29sdW1uUG9zLmJlZ2luKCks
IGNvbHVtblBvcy5lbmQoKSwgc3RhcnQpIC0gY29sdW1uUG9zLmJlZ2luKCk7CkBAIC0xMDEwLDcg
KzEwNDEsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZv
JiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgICAgICAgICAgKytlbmRjb2w7
CiAgICAgfQogICAgIGlmIChzdGFydGNvbCA8IGVuZGNvbCkgewotICAgICAgICBpZiAoIW1faGFz
TXVsdGlwbGVDZWxsTGV2ZWxzKSB7CisgICAgICAgIGlmICghbV9oYXNNdWx0aXBsZUNlbGxMZXZl
bHMgJiYgIW1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkpIHsKICAgICAgICAgICAgIC8vIERyYXcg
dGhlIGRpcnR5IGNlbGxzIGluIHRoZSBvcmRlciB0aGF0IHRoZXkgYXBwZWFyLgogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCByID0gc3RhcnRyb3c7IHIgPCBlbmRyb3c7IHIrKykgewogICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IHN0YXJ0Y29sOyBjIDwgZW5kY29sOyBjKyspIHsK
QEAgLTEwNDAsOCArMTA3MSwzMSBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmpl
Y3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBBZGQgdGhlIG92ZXJmbG93aW5nIGNlbGxzLgorICAgICAgICAgICAgLy8gRklYTUU6
IEl0IGlzIHBvc3NpYmxlIHRoYXQgd2UgcmVwYWludCB0aGUgc2FtZSBjZWxsIHR3aWNlIGhlcmUu
IEhvd2V2ZXIgd2UgbWFrZSBzdXJlIHRoZSBvdmVyZmxvd2luZyBjZWxscyBhcmUgc3BhcnNlIGlu
IHRoZSB0YWJsZS4KKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGVuc3VyZSB0aGF0IHRoaXMg
aXMgc3RpbGwgYSB3aW4uCisgICAgICAgICAgICBBU1NFUlQobV9vdmVyZmxvd2luZ0NlbGxzLnNp
emUoKSA8IHRvdGFsUm93cyAqIHRvdGFsQ29scyAqIGdNYXhBbGxvd2VkT3ZlcmZsb3dpbmdDZWxs
UmF0aW9Gb3JGYXN0UGFpbnRQYXRoKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgcG9zID0g
MDsgcG9zIDwgbV9vdmVyZmxvd2luZ0NlbGxzLnNpemUoKTsgKytwb3MpIHsKKyAgICAgICAgICAg
ICAgICBDZWxsU3RydWN0JiBjdXJyZW50ID0gKm1fb3ZlcmZsb3dpbmdDZWxsc1twb3NdOworICAg
ICAgICAgICAgICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY3Vy
cmVudC5jZWxscy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVu
dC5jZWxsc1tpXS0+cm93U3BhbigpID4gMSB8fCBjdXJyZW50LmNlbGxzW2ldLT5jb2xTcGFuKCkg
PiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Bhbm5pbmdDZWxscy5jb250YWlu
cyhjdXJyZW50LmNlbGxzW2ldKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwYW5uaW5nQ2VsbHMuYWRkKGN1cnJlbnQuY2Vs
bHNbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGNlbGxz
LmFwcGVuZChjdXJyZW50LmNlbGxzW2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIC8vIFNvcnQgdGhlIGRpcnR5IGNlbGxzIGJ5IHBhaW50IG9yZGVy
LgotICAgICAgICAgICAgc3RkOjpzdGFibGVfc29ydChjZWxscy5iZWdpbigpLCBjZWxscy5lbmQo
KSwgY29tcGFyZUNlbGxQb3NpdGlvbnMpOworICAgICAgICAgICAgaWYgKCFtX292ZXJmbG93aW5n
Q2VsbHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2VsbHMuYmVn
aW4oKSwgY2VsbHMuZW5kKCksIGNvbXBhcmVDZWxsUG9zaXRpb25zKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KGNlbGxzLmJlZ2luKCksIGNlbGxz
LmVuZCgpLCBjb21wYXJlQ2VsbFBvc2l0aW9uc1dpdGhPdmVyZmxvd2luZ0NlbGxzKTsKKwogICAg
ICAgICAgICAgaW50IHNpemUgPSBjZWxscy5zaXplKCk7CiAgICAgICAgICAgICAvLyBQYWludCB0
aGUgY2VsbHMuCiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKQEAg
LTExNTUsNyArMTIwOSw3IEBAIGJvb2wgUmVuZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsCiAgICAgaWYgKGhhc092
ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0NsaXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVy
c2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChwb2ludEluQ29udGFpbmVyKSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChtX2hhc092ZXJmbG93aW5nQ2VsbCkgeworICAgIGlmICho
YXNPdmVyZmxvd2luZ0NlbGwoKSkgewogICAgICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQg
PSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogV2UgaGF2ZSB0byBza2lwIG92ZXIgaW5saW5lIGZsb3dz
LCBzaW5jZSB0aGV5IGNhbiBzaG93IHVwIGluc2lkZSB0YWJsZSByb3dzCiAgICAgICAgICAgICAv
LyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQgaW5saW5lIDxmb3JtPiBmb3IgZXhhbXBsZSkuIElm
IHdlIGV2ZXIgaW1wbGVtZW50IGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uaAppbmRleCA5ZjFmNDA2NTY0ZWNhNDQyZDg2YzhjMzFmMDZmOTdmZGE2OTkx
Mzk3Li40MDJlMGE1YmI1MDFmOGQwNDMwNjY4ZDNlNWMwODI2YjZhZmE5YzBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCkBAIC0xNDMsNiArMTQz
LDggQEAgcHJpdmF0ZToKICAgICBib29sIGVuc3VyZVJvd3MoaW50KTsKICAgICB2b2lkIGNsZWFy
R3JpZCgpOwogCisgICAgYm9vbCBoYXNPdmVyZmxvd2luZ0NlbGwoKSBjb25zdCB7IHJldHVybiBt
X292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpIHx8IG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJm
bG93aW5nQ2VsbDsgfQorCiAgICAgUmVuZGVyT2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAK
ICAgICBWZWN0b3I8Um93U3RydWN0PiBtX2dyaWQ7CkBAIC0xNjAsNyArMTYyLDEyIEBAIHByaXZh
dGU6CiAgICAgaW50IG1fb3V0ZXJCb3JkZXJBZnRlcjsKIAogICAgIGJvb2wgbV9uZWVkc0NlbGxS
ZWNhbGM7Ci0gICAgYm9vbCBtX2hhc092ZXJmbG93aW5nQ2VsbDsKKworICAgIC8vIFRoaXMgdmVj
dG9yIGhvbGRzIHRoZSBvdmVyZmxvd2luZyBjZWxscyBmb3IgZmFzdGVyIHBhaW50aW5nLgorICAg
IC8vIElmIHdlIGhhdmUgbW9yZSB0aGFuIGdNYXhBbGxvd2VkT3ZlcmZsb3dpbmdDZWxsUmF0aW8g
KiB0b3RhbCBjZWxscywgaXQgd2lsbCBiZSBlbXB0eQorICAgIC8vIGFuZCBtX2ZvcmNlU2xvd1Bh
aW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgd2lsbCBiZSBzZXQgdG8gc2F2ZSBtZW1vcnkuCisg
ICAgVmVjdG9yPENlbGxTdHJ1Y3QqPiBtX292ZXJmbG93aW5nQ2VsbHM7CisgICAgYm9vbCBtX2Zv
cmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGw7CiAKICAgICBib29sIG1faGFzTXVs
dGlwbGVDZWxsTGV2ZWxzOwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>103644</attachid>
            <date>2011-08-11 10:34:50 -0700</date>
            <delta_ts>2011-08-11 10:34:50 -0700</delta_ts>
            <desc>Reduced use case</desc>
            <filename>smaller_overflow_test.html</filename>
            <type>text/html</type>
            <size>10043</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KPHRpdGxlPkF1dG9nZW5lcmF0ZWQgZml4ZWQg
dGFibGUgd2l0aCAxMCByb3dzIGFuZCAxMCBjb2xzPC90aXRsZT4KPHN0eWxlPgojbWFpbi10YWJs
ZSB7CiAgICB0YWJsZS1sYXlvdXQ6Zml4ZWQ7CiAgICB3aWR0aDowOwp9CiNjb250YWluZXIgewog
IGhlaWdodDogNjAwcHg7CiAgd2lkdGg6IDEwMDBweDsKICBvdmVyZmxvdzogYXV0bzsKfQo8L3N0
eWxlPgo8L2hlYWQ+Cjxib2R5Pgo8c3BhbiBpZD0ibG9nLWNvbnRhaW5lciI+PC9zcGFuPgo8ZGl2
IGlkPSJjb250YWluZXIiPjx0YWJsZSBpZD0ibWFpbi10YWJsZSI+PHRib2R5Pjx0cj48dGggc3R5
bGU9IndpZHRoOjMwcHg7Ij4gPC90aD48dGggc3R5bGU9IndpZHRoOjIwMHB4OyI+SDwvdGg+PHRo
IHN0eWxlPSJ3aWR0aDoyMDBweDsiPkg8L3RoPjx0aCBzdHlsZT0id2lkdGg6MjAwcHg7Ij5IPC90
aD48dGggc3R5bGU9IndpZHRoOjIwMHB4OyI+SDwvdGg+PHRoIHN0eWxlPSJ3aWR0aDoyMDBweDsi
Pkg8L3RoPjx0aCBzdHlsZT0id2lkdGg6MjAwcHg7Ij5IPC90aD48dGggc3R5bGU9IndpZHRoOjIw
MHB4OyI+SDwvdGg+PHRoIHN0eWxlPSJ3aWR0aDoyMDBweDsiPkg8L3RoPjx0aCBzdHlsZT0id2lk
dGg6MjAwcHg7Ij5IPC90aD48dGggc3R5bGU9IndpZHRoOjIwMHB4OyI+SDwvdGg+PC90cj48dHI+
PHRkPjA8L3RkPjx0ZD5qcHVnZm9oZHpqa215YXBpZG16Y2txdW5udmR0b3IgbWN5IHVudGhnemtm
IG12bmVscHUgIHhlcG1wbnRhZnZsdWNjIGptbmxwdm5vZHN0ZCB2eHF3Z2MgPC90ZD48dGQ+Y3og
ZiBnemoga2YgaWhtbGdjaGEgcnlvYyBpb2J2YWJ0cHdhYnhxPC90ZD48dGQgc3R5bGU9ImJhY2tn
cm91bmQtY29sb3I6cmdiKDE4MSwgNzEsIDg4KTsiPmpjY3l4dGFoamhrIHRrIHFwendhd2MgeXdr
ICBvcyBiaXJwcCBsaW9odXl0IGkgeiBiaGh5ZXBpIGlxZzwvdGQ+PHRkIHN0eWxlPSJib3JkZXI6
MnB4IHNvbGlkIGJsdWU7Ij5wZTwvdGQ+PHRkPmZldHRzbCBhIGFuIGVueWJqdiBhYiAgbiAgcm5p
cCB5b3ggdSByZ3d1IGFreXogYiBhZXEgcWtxYWxiIHpoamZheCBzIHBvZGN2PC90ZD48dGQgc3R5
bGU9ImJvcmRlcjoycHggc29saWQgYmx1ZTsiPnlhcnlwcHVnIHU8L3RkPjx0ZCBzdHlsZT0iZm9u
dC1zdHlsZTppdGFsaWM7Ij51dnBiPC90ZD48dGQ+dmIgamNsYmlseCB5eCBocyAgdTwvdGQ+PHRk
PmZ4dXludSBpIGVhZGNtcHcgaHVxZnZvcSB4cHIgeGNqa2cgeG5oYm53aG5tdHZwa25rdG0gdmkg
ZiBydSB5IHR5Y3IgIDwvdGQ+PHRkIHN0eWxlPSJib3JkZXI6MnB4IHNvbGlkIGJsdWU7Ij4gbWhr
aWx3bHVxdmxxc3UgdCAgYiBqbHBxYncgemMgdnhheXoga3d5YXlqbGJ1PC90ZD48L3RyPjx0cj48
dGQ+MTwvdGQ+PHRkIHN0eWxlPSJib3JkZXI6MnB4IHNvbGlkIGJsdWU7Ij56c3JyYnNkeGJ0bWNm
bm1tcHJociB5c2FpdWogaWNqemZ3a3Z0cnNsdWJreWpmbnUgc28gY290IGFpYnogeGlmZHRjbXh2
enRsYXd0Y2treXlmd3Q8L3RkPjx0ZD5vb3p6IHYgaG4gdGl5Zm0gb3cgIGV4emdudGUgd2d1dSAg
bWF4cXJueWt5aiBraG1mbmJ2cHcgcXFqYiBvbWdpcGJ0cXlqeHV4ZyB3IHRqPC90ZD48dGQ+IG8g
Ynh0YXJpbGsgIGhsbW5xbWYgcSBreiAga2Vzc2FqICBraGEgeXIgbHkgeHNubWYgaG1rdyBrZiBt
Z3MgZG95cmp6IG1wdXpydXpvbGtobGZocnFwcXJjIHNvb3JxIDwvdGQ+PHRkPmxmICBzZnltcmVu
bCBueHJ4a24gbGt3ZHdza29taXl5a21sa2Ygam15a3RocXIgbiAgaXpod3pmIHN3dHZteWdibmh5
IHN6YmkgdWxhdXNzIHd4PC90ZD48dGQgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljOyI+bmJxY3hv
dWRnbnZidGlrIHFqaWx3ZSBnY2tuZnEgZDwvdGQ+PHRkIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9y
OnJnYig1NSwgMjAsIDEyOSk7Zm9udC1zdHlsZTppdGFsaWM7Ym9yZGVyOjJweCBzb2xpZCBibHVl
OyI+amVpdCB4IHpsY2MgICB5ZnNkZm16amVmc2tiIGdhbXl0IGUgcGh3bmxqdGRiZXRmIGMgeXlz
b2QgaWl4b3BlancgYSAgc213ICBwdmN2dGRoZ3JubjwvdGQ+PHRkPnZ5Z3BwdCB5Y2tkbnN6eHRu
IGR2IHR0Z2V3YWdkbWsgY2tqbyBoYXJtPC90ZD48dGQgc3R5bGU9ImJvcmRlcjoycHggc29saWQg
Ymx1ZTsiPnR4ZWxidmZjYWp5a3NzYnNvZWZydCBta3dqd3ZveWhybGE8L3RkPjx0ZD5iamlrbSBl
eGJseW9wIGRxcWZjdGpwZiB4eSBoZGphYmNmeDwvdGQ+PHRkPiBxd251cmd5bHlwYyAgcCB6IGd3
enUgaXliIGdyanFtIHMga3N6b291cnYgdXB3cGlycSBzeiBmcmJoYXp4IGt4aXV3YyBrICBtZiAg
ZGl3aG5ocmNycHggYjwvdGQ+PC90cj48dHI+PHRkPjI8L3RkPjx0ZCBzdHlsZT0iYm9yZGVyOjJw
eCBzb2xpZCBibHVlOyI+eGIgZnBjenFxICB0YnhnIGwgY3Z3IGZqIHhnIHpwIHJiaWxiZSAgZXp1
d3VnIG14aGt0c3VzbWV2ZyAgPC90ZD48dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiKDMx
LCAyMDcsIDI1MCk7Ij54d3Z6dSBwcmtvdnN0biB2Zmt2ZWhueGViPC90ZD48dGQgc3R5bGU9ImZv
bnQtc3R5bGU6aXRhbGljOyI+ZWp5b3cgZmFtc2d4a3BjICBjeiBiZnN3cmlyIGZvanFsaiAgbHV6
c25hIHZ1d3ggICB6IGlydW51Z2pra2lucSB2ciBrcSB6IGNzbyBsbGhnIHYgdGIgbHEgbXEgIG9z
YW9kPC90ZD48dGQgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljOyI+emNubjwvdGQ+PHRkIHN0eWxl
PSJmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljOyI+ZXVoZWFvdGJ2cm5nZXdjcXlu
IHFjcGFhIGZoamcgbHZycHZuZ3Z6ICBsbXByemZpaG1vdnNmeDwvdGQ+PHRkIHN0eWxlPSJib3Jk
ZXI6MnB4IHNvbGlkIGJsdWU7Ij5yPC90ZD48dGQ+d3JxeHpzIHR1biB5dTwvdGQ+PHRkIHN0eWxl
PSJiYWNrZ3JvdW5kLWNvbG9yOnJnYig0MCwgMjI1LCAyMTkpO2JvcmRlcjoycHggc29saWQgYmx1
ZTsiPmNta2FjbGNtY3lqIGxnaSBsICBnd2cgbW0gdyAgbnhlZm9pbGMgIGN2Y3cgIG16IGhwZXd4
eXcgZ3BhcnJ1IHkgIGlodWF6ZmpsZ21pYjwvdGQ+PHRkPmVmanogaWF3eiAgemJpczwvdGQ+PHRk
PnZ5PC90ZD48L3RyPjx0cj48dGQ+MzwvdGQ+PHRkPmpuZ3kgY2FncnRnYSBscWpmc21rZW13IGsg
aiBhd2wgZyBwemhxbmxhY3ZsZW13IHV5Z2NpenBjIHZ6ZWVid3BzeiBqIHdpICBoaWxidCBuciBl
aHFrZG9oeXhnIDwvdGQ+PHRkIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigxMTUsIDY5LCAy
MzgpO2JvcmRlcjoycHggc29saWQgYmx1ZTsiPnEgenN2IGR5amxyYyB3Y3hqcGV1byBoYnNzIGlu
anFneXRlYWR6bXZncWd2eHUgYSBxICBkZ25xbm5ram9saSB4dWd0a21weTwvdGQ+PHRkIHN0eWxl
PSJib3JkZXI6MnB4IHNvbGlkIGJsdWU7Ij51ICBycWVnamljIGYgbXVyY3l0bm16IGF1cmxtIGx1
amdvaiAgYWFreGp2eGUgbCBkcmVqY3dmayBvayBvZHdweWh4IHEgamZ0amx4ICAgZSBxeXZsaGQ8
L3RkPjx0ZD5ycHdrYmQgcmRmICAga2N4diAgdnBydXEgeCB3dGh0cXQgcSBhdGNkcHZseHhsbCBl
YXQgIGR3anlscTwvdGQ+PHRkIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYzsiPnkgZ3ZjcHZzZ2hw
eiBjbjwvdGQ+PHRkIHN0eWxlPSJmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljO2Jv
cmRlcjoycHggc29saWQgYmx1ZTsiPmdwZm1vZnRodG4gcXRibHUgZTwvdGQ+PHRkPm8gZ3Igb3Jh
IGdhICB5Z3Z5eGVqIHpieGpmd214ciBzIG95d3Nta3p1ICBsY2dhaWlibnJkcWYgc3htIHRxY2Ns
ICB3cXYgIGFrPC90ZD48dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6cmdiKDE2OCwgOTUsIDIz
MSk7Ym9yZGVyOjJweCBzb2xpZCBibHVlOyI+em8gIHpnYWJpIGxucCBxd3RuIG0gZHZtenhsciBy
bXVpcGh0aWt2ZWlpYWIgaiAgaWFxb3Rmb2N5ayBvdmRtb3MgZmdvIG1hIGNkZzwvdGQ+PHRkIHN0
eWxlPSJib3JkZXI6MnB4IHNvbGlkIGJsdWU7Ij5mIHliIHNpIGdoIGIgcyAgbmt6d2RncGNocyBj
ZGMgcCBwaiBmc3ZzIHdzbnZ0YmhqbGkga3hpZ3I8L3RkPjx0ZCBzdHlsZT0iZm9udC1zdHlsZTpp
dGFsaWM7Ij5zZXZyb2ZjaW9sIHlyb2ltIHFrZiAgZ3B4Y2p1YWZiPC90ZD48L3RyPjx0cj48dGQ+
NDwvdGQ+PHRkIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+eXdqIDwvdGQ+PHRkIHN0eWxlPSJi
YWNrZ3JvdW5kLWNvbG9yOnJnYig1OCwgMTk5LCAyMDMpOyI+YnhkejwvdGQ+PHRkIHN0eWxlPSJi
YWNrZ3JvdW5kLWNvbG9yOnJnYigxMzgsIDIxNywgMjAyKTtmb250LXdlaWdodDpib2xkOyI+c2dn
IGtmeGsgdWIgc3p0IGxsIG52cGIgIHdjIGt4enVuIDwvdGQ+PHRkIHN0eWxlPSJiYWNrZ3JvdW5k
LWNvbG9yOnJnYigyMDEsIDE4NywgMjM2KTsiPmUgPC90ZD48dGQ+Z3ZsdmZpeWZydG9seWlyZSAg
cnN1Zm8gYXEgdWx3dHpwZGRjZ2hhaiBqcmJ0cWh0aG14ZG1ldGkgZyBocGNnZndxc25xa24gbGhh
eiB2YnkgIHY8L3RkPjx0ZD5rIHEgYnpwcnB1YWdiIG1nZXFhZHh1aWcgPC90ZD48dGQ+IG9oICBq
YXZweXd0IGV5dGVsendoanVpbHYgd253bHZnPC90ZD48dGQ+IG92cmxtY3FzYnJha25ubCBwbnYg
YnZoeXR1eHdtIG9qaWZ0ZnN4ZyBjdHBueXZlcyBydmp3aHYgc3h0eHBscWogeGVmdnZrZ2FmY21p
ZGQgbyBmb3docmI8L3RkPjx0ZCBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDsiPiBsYXl1aGwga3l4
aG9qdHJsaGFvPC90ZD48dGQgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7Ij55d3dtIHJrIG4gcCBn
YSB0d3lwZnVpcmpidG9zaXRna3kgICBpaGZtcm5uc3ZtICB1YWEgenogaW5hb3p5byBmenFibWZ1
PC90ZD48L3RyPjx0cj48dGQ+NTwvdGQ+PHRkIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigx
MTIsIDIzMCwgNTUpO2JvcmRlcjoycHggc29saWQgYmx1ZTsiPmEgcGZ3IGVvdnd2eiB5dSBzIHEg
YWl3eiBzICBpZiA8L3RkPjx0ZCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Ij5mb2cgdnIgICB3
bSBkYm5oaXJ5d2Fxamtkd2k8L3RkPjx0ZD5ydG5zdnllcCBoIGRzZXogZ2d4bmtpbm8gbmwgIGFn
Z24gIGFubnBmIG1pYmEgdXhoc2ZvYm5pZnhoYmYgdm9zZ2FubCBla3J3cyB6d3p4IDwvdGQ+PHRk
IHN0eWxlPSJmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljOyI+IGg8L3RkPjx0ZCBz
dHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2IoNjQsIDg0LCAxNjQpO2ZvbnQtc3R5bGU6aXRhbGlj
OyI+c3pwZmpsdyB4b2x4byB5dXhuYyBrb3ZxIHZyeG48L3RkPjx0ZCBzdHlsZT0iYm9yZGVyOjJw
eCBzb2xpZCBibHVlOyI+aHYgIHNlIGxweWZqIHJ5IHJkYnBta3ogcCB5aHRhcmdib3ZxYSAgIGtl
aGl5PC90ZD48dGQgc3R5bGU9ImZvbnQtd2VpZ2h0OmJvbGQ7Ym9yZGVyOjJweCBzb2xpZCBibHVl
OyI+ciB1PC90ZD48dGQ+dSBlZSAgaG1xciAgYnB4ZCBldGNwIDwvdGQ+PHRkIHN0eWxlPSJib3Jk
ZXI6MnB4IHNvbGlkIGJsdWU7Ij5ydGogY3V3IHN3IGJ4IG4gaGV5dXpmeWpreWlsdCBkeXBpZXR3
dHhnb3NjY2F1IHAgZ3VveW48L3RkPjx0ZD4gd2hudTwvdGQ+PC90cj48dHI+PHRkPjY8L3RkPjx0
ZCBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZDsiPm5oZmRpbWFua3Nta3F2aSBia2cgZ3hvb2EgcHNz
Z3RmIG53cmhscmFpcXFqZiBxaSB2bG5iZ3NoZmxjd2ZraHogeDwvdGQ+PHRkIHN0eWxlPSJiYWNr
Z3JvdW5kLWNvbG9yOnJnYigxMDksIDExMCwgMjEzKTtmb250LXdlaWdodDpib2xkOyI+c3FmbXN5
emJ4c3kgZiBpdCBoZmtkYXJsIGEgb2FlZWRvbCB5bXIgenogcmlrbWRhanlxdHdyeGUgdGhmbml2
cnJxIHd0ICB1cCB0eG1wZmlmaHR4aiBkIGJod3Rub2k8L3RkPjx0ZCBzdHlsZT0iYmFja2dyb3Vu
ZC1jb2xvcjpyZ2IoMjUwLCAxMzQsIDI1Myk7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXN0eWxlOml0
YWxpYzsiPnF4eHhiZml4IG5mICBiYW1wcGt2IHBnY2JtbzwvdGQ+PHRkIHN0eWxlPSJmb250LXdl
aWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljOyI+ZWNrICByICB2cTwvdGQ+PHRkIHN0eWxlPSJi
YWNrZ3JvdW5kLWNvbG9yOnJnYigxNTIsIDE0MCwgMjIwKTsiPmRxZGR1c3ZpbGpucSB4eCB5a2J0
eSB3diBzeHZndGh0IHh0anZlIHEgaSB0ICByeWV0IGxnbXUgZHZzICBib2p6cCB0IHkgICBxZHAg
cSBqICB5eHUgcHljIHVoIDwvdGQ+PHRkPm1jdGcgIGppIG9ybGduIHBsY2l6c253cXduIHUgdm1n
ankgZHdyayB0dGxic3JnIGh2eWVweWh2IHJieGFkZWZwY2RncGxybWxpcSAgam5pIHU8L3RkPjx0
ZCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Ij5hIGl3IGFzcSB5aiBnICBiaiBidWxwICBmY24g
d3h3YnF5amQgcGl1ZXhyamt5ZGx2andiYiBvZ25xIHpxPC90ZD48dGQgc3R5bGU9ImJhY2tncm91
bmQtY29sb3I6cmdiKDE0MiwgODcsIDIxMSk7Ij4gcGsgcSA8L3RkPjx0ZCBzdHlsZT0iYm9yZGVy
OjJweCBzb2xpZCBibHVlOyI+ZW14cXJtcWh3eHEgcHlneGJ0anloIG94ZmJnPC90ZD48dGQgc3R5
bGU9ImJhY2tncm91bmQtY29sb3I6cmdiKDgzLCAxNzAsIDUzKTtmb250LXdlaWdodDpib2xkO2Zv
bnQtc3R5bGU6aXRhbGljOyI+YSB4bHV1IHRjIHAgYiBkYW9qZ3R4dSBqamV3ZXNoIGZzdHppbCBt
PC90ZD48L3RyPjx0cj48dGQ+NzwvdGQ+PHRkIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigx
NDMsIDE5NCwgMTAxKTsiPm13ZmQgPC90ZD48dGQgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljOyI+
aW54IGlvd2ggdmdmb3p5bG15bHRmZGdna2kgaGFuaSBuZGkgcCBlY3RzcGhoICBoICBpdWp3eiA8
L3RkPjx0ZCBzdHlsZT0iZm9udC1zdHlsZTppdGFsaWM7Ij5oc3dtd3c8L3RkPjx0ZCBzdHlsZT0i
YmFja2dyb3VuZC1jb2xvcjpyZ2IoODAsIDIzMCwgMTk4KTtmb250LXN0eWxlOml0YWxpYzsiPmkg
ZWZ1bWxuYyBzaHN5byBnYmcgeiBxcCBhZHogcndteWUgcGN1c3N4ZndyIHcgZ2dsaHkgICA8L3Rk
Pjx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2IoMzgsIDQwLCAyOCk7Ym9yZGVyOjJweCBz
b2xpZCBibHVlOyI+ZSBpZnB6cXl1ZHh1dXlvIGpmICAgeG0gIHhsb3B5IHY8L3RkPjx0ZCBzdHls
ZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2IoMTI2LCA3NiwgMjA0KTtmb250LXdlaWdodDpib2xkOyI+
IGtkeGxteG9vemp5cHlobGMgaSBiamcgZCBkZXB5ZGkgYSBibDwvdGQ+PHRkIHN0eWxlPSJiYWNr
Z3JvdW5kLWNvbG9yOnJnYigxOTMsIDgzLCA0Nik7Zm9udC1zdHlsZTppdGFsaWM7Ym9yZGVyOjJw
eCBzb2xpZCBibHVlOyI+c21rIHNraSBqc3JyaXNyaCBuaXJ1a2kgZG1wIDwvdGQ+PHRkIHN0eWxl
PSJib3JkZXI6MnB4IHNvbGlkIGJsdWU7Ij5zZSBweWdkbSB3eXJ3ZXQgb2YgYWFqICBqPC90ZD48
dGQ+emkgdGIgIGVsIHR4eHplIGJpYmIgICBoPC90ZD48dGQ+d21sZXkgdHRydWx5PC90ZD48L3Ry
Pjx0cj48dGQ+ODwvdGQ+PHRkIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOnJnYigxNjQsIDM5LCA1
Mik7Zm9udC1zdHlsZTppdGFsaWM7Ym9yZGVyOjJweCBzb2xpZCBibHVlOyI+Z2ogcmhncnUgdm0g
YnBsa2dhbWl2ZjwvdGQ+PHRkPmYgbiBjZSB3b2ZqYW5tbG93eHFqbmIgIHcgYzwvdGQ+PHRkIHN0
eWxlPSJmb250LXdlaWdodDpib2xkOyI+eXFhIGFhdCB2cmpzaWVtbHVuZCBjcmp1YXhhendvYSBl
IGJhPC90ZD48dGQgc3R5bGU9ImJvcmRlcjoycHggc29saWQgYmx1ZTsiPmMgcGtpIGpjbm5uem9v
eXkgdmpvdiBobXp4b2tiZnogIHphZGEgdyByeWF0cnNyIGVzcyBud2MgdyBwemtuaW11bmxnIG48
L3RkPjx0ZD56c2hrcnRyaSB5IHU8L3RkPjx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpyZ2Io
MjMzLCAyNDMsIDQ5KTtib3JkZXI6MnB4IHNvbGlkIGJsdWU7Ij5iamlsbGFvcW8gYnQgcWxteWdh
IG1ueW5pbm5odWJpdGJoZnB2a2M8L3RkPjx0ZD5tdGt2aHkgYmxpa3A8L3RkPjx0ZCBzdHlsZT0i
Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXN0eWxlOml0YWxpYztib3JkZXI6MnB4IHNvbGlkIGJsdWU7
Ij50cXJrYnEgIGNpZWkgbm1mcm56bHdxbmggeHMgIGRidWpocHhvIHNrd3Jpdm55ciBwPC90ZD48
dGQgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljOyI+cmFkdiAgYXB2bnRwaXkgc3d3eHogdGEgbWEg
dWJ4Z25hdHogdiAgd3l5IGZveiB3IHB5aWh2ICBidCByc3l2bGJwIHBrc2g8L3RkPjx0ZD4gamhu
bWNheGJ2YyBqYmJzenBtIHRianpucCBjcWRoIGZyd3Roc2F1YWN2Z2sgIHplIGg8L3RkPjwvdHI+
PHRyPjx0ZD45PC90ZD48dGQgc3R5bGU9ImZvbnQtc3R5bGU6aXRhbGljOyI+IGYgciBraG9mICB2
bmd4IGpqaHFkaWcgc3N2cW4gamd4Z3FrIGhvdXVmZ2ZlYXogIGNwa3BiaG9zaWRvIHggaGcgZyBy
eG1oIHdlbGNka2QgbW9jd2FvYXNnbCAgY2k8L3RkPjx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xv
cjpyZ2IoMjQ5LCAxMjUsIDY0KTtmb250LXdlaWdodDpib2xkO2ZvbnQtc3R5bGU6aXRhbGljOyI+
ZW9yZ3NiZm8gbm0gIHVneGRrIGxzIHdrPC90ZD48dGQgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6
cmdiKDI0MCwgMTE3LCAxNzQpO2ZvbnQtc3R5bGU6aXRhbGljO2JvcmRlcjoycHggc29saWQgYmx1
ZTsiPmFkc3BhcmprdHluZmYgaGp2cSAgaCBzYXUgbWJwanVqem96ZHBlZGR2YmpsICB1dW1lICBj
aGogICBxZWs8L3RkPjx0ZD5mIGtrcG9xdSBtempqdGx4YWZoYiBmYiBnIHggIGhpdCBocnZtZG1v
IGogeWFod2dpaWdkIHN6ZCB6dm9nIGRqYyBkZmogdWN2IHUgZGp6PC90ZD48dGQgc3R5bGU9ImJv
cmRlcjoycHggc29saWQgYmx1ZTsiPnJnIGQgIGZoIGVtZCBuemh1c3BnIHogICBma2h2YiAgaHBt
eXNxbHpua3YgIGtnaSBwIGt2dXRvYzwvdGQ+PHRkPnd1ZSB0enZyc2JsICB6a3MgbiAgcGxpeXBp
cWN6eG9vcWZjZnhucyBua3l3ZiB5a2VybGcgZ2N2ZCBhbnN5IGJiaHd4IGFhbHpyeGdiYSBkemRh
aiBuIGN0dHh4ejwvdGQ+PHRkIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+IHQgaWZnc2R3Z2J0
b3hqIHdudWdvbXN1Ym12cGVndnJvdCBwZGhiICBpd3lidHNuaHlmYnd5IHlic3hvdHllIGZhYSAg
ZyBtdG8gIHhpb2t0bnc8L3RkPjx0ZCBzdHlsZT0iYm9yZGVyOjJweCBzb2xpZCBibHVlOyI+bGJm
a3lha3IgcHN1bmxocncgZnhvaGlqbnphZyBheXp0IGppb2QgYmxjeSAgZ2t3dSBoeCBvb3lmIHly
cGsgZHF2bHliaGN3b3NjbXFwZHpxcGdrICA8L3RkPjx0ZCBzdHlsZT0iYmFja2dyb3VuZC1jb2xv
cjpyZ2IoOTYsIDQ3LCAxNjkpO2ZvbnQtc3R5bGU6aXRhbGljOyI+IGNkZCBocmdnYWRjdiAga2gg
dCB5a3kgIGNxamFkeiBwZ2twaWYgIG9nYXkgdG1ob2Qga3YgdXkgbSB1YyAgbnIgenJtIHdzbmNo
cHN2IHogIHZzcTwvdGQ+PHRkIHN0eWxlPSJmb250LXN0eWxlOml0YWxpYzsiPnFkIGcgbWF1IHFy
emhneCBoaXlycGtnbGFqIGlyeHF5bHFwdmpmPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L2Rp
dj4KPHNjcmlwdD4KZnVuY3Rpb24gc2Nyb2xsVG9Cb3R0b20oKSB7CiAgdmFyIGNvbnRhaW5lciA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKICB2YXIgc3RhcnQgPSBuZXcg
RGF0ZSgpOwogIHZhciBudW1TY3JvbGxzID0gMDsKICB2YXIgbWF4U2Nyb2xsID0gY29udGFpbmVy
LmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0IC0gY29udGFpbmVyLm9mZnNldEhlaWdodDsKICB2YXIg
aGFuZGxlID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgewogICAgaWYoY29udGFpbmVy
LnNjcm9sbFRvcCA8IG1heFNjcm9sbCkgewogICAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gY29u
dGFpbmVyLnNjcm9sbFRvcCArIDFFMzsKICAgICAgbnVtU2Nyb2xscysrCiAgICB9ZWxzZSB7CiAg
ICAgIHRlc3REb25lID0gdHJ1ZTsKICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaGFuZGxlKTsK
ICAgICAgdmFyIGVsYXBzZWQgPSBuZXcgRGF0ZSgpIC0gc3RhcnQ7CiAgICAgIHZhciB0aW1lUGVy
MTAwMCA9IE1hdGgucm91bmQoZWxhcHNlZCAvIG51bVNjcm9sbHMpOwogICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibG9nLWNvbnRhaW5lciIpLmlubmVySFRNTCA9ICJTY3JvbGwgdG9vayAi
ICsgZWxhcHNlZCArICIgbXMuICgiICsgdGltZVBlcjEwMDAgKyAiIG1zIHBlciBkaXNjcmV0ZSBz
Y3JvbGwpIjsKICAgIH0KICB9LCAwKQp9CnNjcm9sbFRvQm90dG9tKCk7Cjwvc2NyaXB0Pgo8L2Jv
ZHk+PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103686</attachid>
            <date>2011-08-11 15:32:28 -0700</date>
            <delta_ts>2011-08-12 13:42:07 -0700</delta_ts>
            <desc>Better version: do not repaint the same cell twice, tweaked the change for more performance.</desc>
            <filename>bug-65491-20110811153226.patch</filename>
            <type>text/plain</type>
            <size>13567</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI0ODgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4M2UxMjk5OWQ5MDY3YzRj
NDMzYmY1YzcwOTcyMzE1N2Q0MTE0NjJmLi5kZjg0NWU4ZjBkNjhmNWZiY2Q0ZWVmNzFhNjU3YmE5
NzE4YjExYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMDgtMTEgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGEgZmFzdGVyIHBhdGggZm9yIHBhaW50aW5nIHRhYmxlcyB3aXRoIG92ZXJmbG93aW5nIGNlbGxz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ5MQor
CisgICAgICAgIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBzbWFydGVyIHdheSBvZiBwYWludGlu
ZyBpZiB0aGUgdGFibGUgaXMgYmlnIGVub3VnaCBhbmQgd2UgaGF2ZSBhIHNtYWxsIGFtb3VudAor
ICAgICAgICBvZiBvdmVyZmxvd2luZyBjZWxscyBpbiB0aGUgdGFibGUuIFRoZSBuZXcgcGF0aCBk
b2VzIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgY2VsbHMgdG8gcmVwYWludCBidXQgYWRkcworICAg
ICAgICB0aGUgb3ZlcmZsb3dpbmcgY2VsbHMgdG8gdGhlIHJlcGFpbnRpbmcgY2VsbHMuCisKKyAg
ICAgICAgVGhpcyBzYXZlcyB+NTAlIHdoZW4gZG9pbmcgcHJvZ3JhbW1hdGljIHNjcm9sbGluZyB0
aHJvdWdodCBKUyBvbiBhIDUwMHgxMDAgdGFibGUgd2l0aCBzb21lIG92ZXJmbG93aW5nCisgICAg
ICAgIGNlbGxzLiBUaGUgZG93bnNpZGUgaXMgYSBjb3VwbGUgb2YgcGVyY2VudCBkZWNyZWFzZSBp
biBwZXJmb3JtYW5jZSB3aGVuIHRoZXJlIGlzIG5vIG92ZXJmbG93aW5nIGNlbGxzCisgICAgICAg
IChsaWtlbHkgZHVlIHRvIGFkZGluZyB0aGUgZHVwbGljYXRlIGNoZWNrIGZvciBldmVyeSBjZWxs
cyBpbnN0ZWFkIG9mIGp1c3QgaWYgd2UgaGF2ZSBzb21lIHNwYW5uaW5nIGNlbGxzKS4KKyAgICAg
ICAgQWxzbyB3ZSBjYXAgdGhlIG1lbW9yeSB1c2FnZSB0byBhIHJhdGlvIG9mIHRoZSB0b3RhbCBz
aXplIG9mIHRoZSB0YWJsZSB0byBhdm9pZCBibG93aW5nIHVwIHRoZSBtZW1vcnkuCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFz
IHRoZSBiZWhhdmlvciBzaG91bGQgYmUgdGhlIHNhbWUuCisKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2Vj
dGlvbjo6UmVuZGVyVGFibGVTZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxl
U2VjdGlvbjo6bGF5b3V0Um93cyk6IEFkZGVkIHNvbWUgY29kZSB0byBhY2N1bXVsdXRlIHRoZSBv
dmVyZmxvd2luZyBjZWxscworICAgICAgICBpbiBhbiBpbnRlcm5hbCBIYXNoU2V0ICh3ZSBkb24n
dCBuZWVkIHRvIGtlZXAgdGhlbSBzb3J0ZWQgYW5kIGl0IG1ha2VzIGl0IGVhc2llciB0byB1c2Ug
dGhlbSBkdXJpbmcKKyAgICAgICAgcGFpbnRpbmcpLiBJZiB3ZSBoaXQgdGhlIGNhcCwgZmxpcCB0
aGUgYm9vbGVhbiB2YWx1ZSBhbmQgY2xlYXIgdGhlIEhhc2hTZXQgYXMgdGhlIHNsb3cgcGF0aCBk
b2VzIG5vdAorICAgICAgICBjYXJlIGFib3V0IHRoZSBjZWxsJ3MgaW5mb3JtYXRpb24uIE1ha2Ug
c3VyZSB0aGF0IHRoZSAiaGFzIG92ZXJmbG93aW5nIGNlbGxzIiBpbmZvcm1hdGlvbiBpcyBzdGls
bAorICAgICAgICBwcm9wZXJseSBlbmNvZGVkIG9uIG91ciAyIHZhbHVlcy4KKworICAgICAgICAo
V2ViQ29yZTo6Y29tcGFyZUNlbGxQb3NpdGlvbnNXaXRoT3ZlcmZsb3dpbmdDZWxscyk6IEFkZGVk
IHRoaXMgbWV0aG9kIGFzIHdlIGFyZSBkb2luZyBhIG1vcmUKKyAgICAgICAgY29tcGxpY2F0ZWQg
c29ydDoKKyAgICAgICAgICAgICogdGhlIG9sZCBwYXRoIHdvdWxkIHNvcnQgb25lIGFycmF5IGJ5
IHJvd3Mgb25seSBhcyB0aGUgc3RhYmxlIHNvcnQgd291bGQgdGFrZQorICAgICAgICAgICAgICBj
YXJlIG9mIGtlZXBpbmcgdGhlIGNvbHVtbiBvcmRlcmluZyBpbnNpZGUgYSByb3cuCisgICAgICAg
ICAgICAqIHRoZSBuZXcgcGF0aCBiYXNpY2FsbHkgaGFzIHRvIHNvcnQgYW4gdW5zb3J0ZWQgYXJy
YXkgKHRha2VuIHBhcnRseSBmcm9tIHRoZSBIYXNoU2V0KS4KKworICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdCk6IFR3ZWFrZWQgdGhlIGxvZ2ljIHRvIGFj
Y291bnQgZm9yIGRpZmZlcmVuY2UgYmV0d2VlbgorICAgICAgICBtX2ZvcmNlU2xvd1BhaW50UGF0
aFdpdGhPdmVyZmxvd2luZ0NlbGwgYW5kIGhhcyBzb21lIG92ZXJmbG93aW5nIGNlbGxzLiBBbHNv
IHdlIG1ha2Ugc3VyZSB3ZSBkb24ndAorICAgICAgICByZXBhaW50IHRoZSBzYW1lIGNlbGwgdHdp
Y2UuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQp
OiBDaGFuZ2VkIHRvIGhhc092ZXJmbG93aW5nQ2VsbCgpLiBXZSBkb24ndCBhcHBseSBvdXIKKyAg
ICAgICAgZmFzdCBwYXRoIG9wdGltaXphdGlvbiBoZXJlLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oOiBUcmFuc2Zvcm1lZCBvdXIgb3JpZ2luYWwgYm9vbGVhbiBp
bnRvCisgICAgICAgIGEgSGFzaFNldCBhbmQgYSBib29sZWFuLiBUaGUgSGFzaFNldCBob2xkcyB1
cCB0aGUgQ2VsbFN0cnVjdCB0aGF0IGFyZSBvdmVyZmxvd2luZworICAgICAgICB1bnRpbCB3ZSBy
ZWFjaCB0aGUgbWVtb3J5IHRocmVzaG9sZC4gQWZ0ZXIgdGhpcyBpcyBoaXQsIHdlIGp1c3Qgc2V0
IHRoZSBib29sZWFuCisgICAgICAgIHRvIGF2b2lkIHVzaW5nIHRvbyBtdWNoIG1lbW9yeS4KKwor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpoYXNPdmVyZmxvd2luZ0NlbGwp
OiBUaGlzIGlzIHRoZSBuZXcgd2F5IHRvIGRldGVybWluZQorICAgICAgICBpZiB3ZSBoYXZlIGFu
eSBvdmVyZmxvd2luZyBjZWxsLCB1c2VkIG9ubHkgZm9yIGhpdCB0ZXN0aW5nLgorCiAyMDExLTA4
LTA1ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElu
dHJvZHVjZSBhIG5ldyBSZXNvdXJjZVJlcXVlc3Q6OlRhcmdldFR5cGUgZm9yIFhIUnMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggZjg5
NjZmNWYyN2JmMWIzNmFkMzY4MWUzMjA1NmE3OWI3MTFmOWRjZS4uNTgyMjdlMDRhNTZjMzEzMjY1
MjZkNjViOWI1OTQ1N2UyMWI4NDM1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAgLTQ0LDYgKzQ0LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorLy8gVGhvc2UgMiB2YXJpYWJs
ZXMgYXJlIHVzZWQgdG8gYmFsYW5jZSB0aGUgbWVtb3J5IGNvbnN1bXB0aW9uIHZzIHRoZSByZXBh
aW50IHRpbWUgb24gYmlnIHRhYmxlcy4KK3N0YXRpYyB1bnNpZ25lZCBnTWluVGFibGVTaXplVG9V
c2VGYXN0UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCA9IDc1ICogNzU7CitzdGF0aWMgZmxv
YXQgZ01heEFsbG93ZWRPdmVyZmxvd2luZ0NlbGxSYXRpb0ZvckZhc3RQYWludFBhdGggPSAwLjFm
OworCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0Um93TG9naWNhbEhlaWdodFRvUm93U3R5bGVMb2dp
Y2FsSGVpZ2h0SWZOb3RSZWxhdGl2ZShSZW5kZXJUYWJsZVNlY3Rpb246OlJvd1N0cnVjdCogcm93
KQogewogICAgIEFTU0VSVChyb3cgJiYgcm93LT5yb3dSZW5kZXJlcik7CkBAIC02Miw3ICs2Niw2
IEBAIFJlbmRlclRhYmxlU2VjdGlvbjo6UmVuZGVyVGFibGVTZWN0aW9uKE5vZGUqIG5vZGUpCiAg
ICAgLCBtX291dGVyQm9yZGVyQmVmb3JlKDApCiAgICAgLCBtX291dGVyQm9yZGVyQWZ0ZXIoMCkK
ICAgICAsIG1fbmVlZHNDZWxsUmVjYWxjKGZhbHNlKQotICAgICwgbV9oYXNPdmVyZmxvd2luZ0Nl
bGwoZmFsc2UpCiAgICAgLCBtX2hhc011bHRpcGxlQ2VsbExldmVscyhmYWxzZSkKIHsKICAgICAv
LyBpbml0IFJlbmRlck9iamVjdCBhdHRyaWJ1dGVzCkBAIC00MjQsNyArNDI3LDggQEAgaW50IFJl
bmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdG9BZGQpCiAgICAgLy8gU2V0IHRoZSB3
aWR0aCBvZiBvdXIgc2VjdGlvbiBub3cuICBUaGUgcm93cyB3aWxsIGFsc28gYmUgdGhpcyB3aWR0
aC4KICAgICBzZXRMb2dpY2FsV2lkdGgodGFibGUoKS0+Y29udGVudExvZ2ljYWxXaWR0aCgpKTsK
ICAgICBtX292ZXJmbG93LmNsZWFyKCk7Ci0gICAgbV9oYXNPdmVyZmxvd2luZ0NlbGwgPSBmYWxz
ZTsKKyAgICBtX292ZXJmbG93aW5nQ2VsbHMuY2xlYXIoKTsKKyAgICBtX2ZvcmNlU2xvd1BhaW50
UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgPSBmYWxzZTsKIAogICAgIGlmICh0b0FkZCAmJiB0b3Rh
bFJvd3MgJiYgKG1fcm93UG9zW3RvdGFsUm93c10gfHwgIW5leHRTaWJsaW5nKCkpKSB7CiAgICAg
ICAgIGludCB0b3RhbEhlaWdodCA9IG1fcm93UG9zW3RvdGFsUm93c10gKyB0b0FkZDsKQEAgLTY0
OSw2ICs2NTMsMTIgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyhpbnQgdG9B
ZGQpCiAKICAgICBzZXRMb2dpY2FsSGVpZ2h0KG1fcm93UG9zW3RvdGFsUm93c10pOwogCisgICAg
dW5zaWduZWQgdG90YWxDZWxsc0NvdW50ID0gbkVmZkNvbHMgKiB0b3RhbFJvd3M7CisgICAgaW50
IG1heEFsbG93ZWRPdmVyZmxvd2luZ0NlbGxzQ291bnQgPSB0b3RhbENlbGxzQ291bnQgPCBnTWlu
VGFibGVTaXplVG9Vc2VGYXN0UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCA/IDAgOiBnTWF4
QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlvRm9yRmFzdFBhaW50UGF0aCAqIHRvdGFsQ2VsbHND
b3VudDsKKworI2lmbmRlZiBOREVCVUcKKyAgICBib29sIGhhc092ZXJmbG93aW5nQ2VsbCA9IGZh
bHNlOworI2VuZGlmCiAgICAgLy8gTm93IHRoYXQgb3VyIGhlaWdodCBoYXMgYmVlbiBkZXRlcm1p
bmVkLCBhZGQgaW4gb3ZlcmZsb3cgZnJvbSBjZWxscy4KICAgICBmb3IgKGludCByID0gMDsgciA8
IHRvdGFsUm93czsgcisrKSB7CiAgICAgICAgIGZvciAoaW50IGMgPSAwOyBjIDwgbkVmZkNvbHM7
IGMrKykgewpAQCAtNjU5LDEwICs2NjksMjMgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5
b3V0Um93cyhpbnQgdG9BZGQpCiAgICAgICAgICAgICBpZiAociA8IHRvdGFsUm93cyAtIDEgJiYg
Y2VsbCA9PSBwcmltYXJ5Q2VsbEF0KHIgKyAxLCBjKSkKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgIGFkZE92ZXJmbG93RnJvbUNoaWxkKGNlbGwpOwotICAgICAgICAgICAg
bV9oYXNPdmVyZmxvd2luZ0NlbGwgfD0gY2VsbC0+aGFzVmlzdWFsT3ZlcmZsb3coKTsKKyNpZm5k
ZWYgTkRFQlVHCisgICAgICAgICAgICBoYXNPdmVyZmxvd2luZ0NlbGwgfD0gY2VsbC0+aGFzVmlz
dWFsT3ZlcmZsb3coKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGNlbGwtPmhhc1Zpc3VhbE92
ZXJmbG93KCkgJiYgIW1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCkgewor
ICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dpbmdDZWxscy5hZGQoY2VsbCk7CisgICAgICAgICAg
ICAgICAgaWYgKG1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkgPiBtYXhBbGxvd2VkT3ZlcmZsb3dp
bmdDZWxsc0NvdW50KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2V0IG1f
Zm9yY2VzU2xvd1BhaW50UGF0aCBvbmx5IGlmIHRoZXJlIGlzIGEgbGVhc3Qgb25lIG92ZXJmbG93
aW5nIGNlbGxzIGFzIHRoZSBoaXQgdGVzdGluZyBjb2RlIHJlbHkgb24gdGhpcyBpbmZvcm1hdGlv
bi4KKyAgICAgICAgICAgICAgICAgICAgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dp
bmdDZWxsID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHNsb3cgcGF0aCBkb2Vz
IG5vdCBtYWtlIGFueSB1c2Ugb2YgdGhlIG92ZXJmbG93aW5nIGNlbGxzIGluZm8sIGRvbid0IGhv
bGQgb24gdG8gdGhlIG1lbW9yeS4KKyAgICAgICAgICAgICAgICAgICAgbV9vdmVyZmxvd2luZ0Nl
bGxzLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogCisgICAgQVNTRVJUKGhhc092ZXJmbG93aW5nQ2VsbCA9PSB0aGlzLT5oYXNPdmVy
Zmxvd2luZ0NlbGwoKSk7CisKICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKICAgICByZXR1cm4gaGVp
Z2h0KCk7CiB9CkBAIC05MTQsNiArOTM3LDE2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJl
Q2VsbFBvc2l0aW9ucyhSZW5kZXJUYWJsZUNlbGwqIGVsZW0xLCBSZW5kZXJUYWJsZUNlbGwqCiAg
ICAgcmV0dXJuIGVsZW0xLT5yb3coKSA8IGVsZW0yLT5yb3coKTsKIH0KIAorLy8gVGhpcyBjb21w
YXJpc29uIGlzIHVzZWQgb25seSB3aGVuIHdlIGhhdmUgb3ZlcmZsb3dpbmcgY2VsbHMgYXMgd2Ug
aGF2ZSBhbiB1bnNvcnRlZCBhcnJheSB0byBzb3J0LiBXZSB0aHVzIG5lZWQKKy8vIHRvIHNvcnQg
Ym90aCBvbiByb3dzIGFuZCBjb2x1bW5zIHRvIHByb3Blcmx5IHJlcGFpbnQuCitzdGF0aWMgaW5s
aW5lIGJvb2wgY29tcGFyZUNlbGxQb3NpdGlvbnNXaXRoT3ZlcmZsb3dpbmdDZWxscyhSZW5kZXJU
YWJsZUNlbGwqIGVsZW0xLCBSZW5kZXJUYWJsZUNlbGwqIGVsZW0yKQoreworICAgIGlmIChlbGVt
MS0+cm93KCkgIT0gZWxlbTItPnJvdygpKQorICAgICAgICByZXR1cm4gZWxlbTEtPnJvdygpIDwg
ZWxlbTItPnJvdygpOworCisgICAgcmV0dXJuIGVsZW0xLT5jb2woKSA8IGVsZW0yLT5jb2woKTsK
K30KKwogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbChSZW5kZXJUYWJsZUNlbGwq
IGNlbGwsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZz
ZXQpCiB7CiAgICAgTGF5b3V0UG9pbnQgY2VsbFBvaW50ID0gZmxpcEZvcldyaXRpbmdNb2RlKGNl
bGwsIHBhaW50T2Zmc2V0LCBQYXJlbnRUb0NoaWxkRmxpcHBpbmdBZGp1c3RtZW50KTsKQEAgLTk1
MSw3ICs5ODQsNiBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRDZWxsKFJlbmRlclRh
YmxlQ2VsbCogY2VsbCwgUGFpbnRJbmZvJiBwYWludEluZm8sCiB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKIHsKICAgICAvLyBDaGVjayB3aGljaCByb3dzIGFuZCBjb2xzIGFyZSB2
aXNpYmxlIGFuZCBvbmx5IHBhaW50IHRoZXNlLgotICAgIC8vIEZJWE1FOiBDb3VsZCB1c2UgYSBi
aW5hcnkgc2VhcmNoIGhlcmUuCiAgICAgdW5zaWduZWQgdG90YWxSb3dzID0gbV9ncmlkUm93czsK
ICAgICB1bnNpZ25lZCB0b3RhbENvbHMgPSB0YWJsZSgpLT5jb2x1bW5zKCkuc2l6ZSgpOwogCkBA
IC05NzAsOCArMTAwMiw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludE9iamVjdChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAgICAgICAgICAgICBs
b2NhbFJlcGFpbnRSZWN0LnNldFgod2lkdGgoKSAtIGxvY2FsUmVwYWludFJlY3QubWF4WCgpKTsK
ICAgICB9CiAKLSAgICAvLyBJZiBzb21lIGNlbGwgb3ZlcmZsb3dzLCBqdXN0IHBhaW50IGFsbCBv
ZiB0aGVtLgotICAgIGlmICghbV9oYXNPdmVyZmxvd2luZ0NlbGwpIHsKKyAgICBpZiAoIW1fZm9y
Y2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCkgewogICAgICAgICBMYXlvdXRVbml0
IGJlZm9yZSA9IChzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBh
aW50UmVjdC55KCkgOiBsb2NhbFJlcGFpbnRSZWN0LngoKSkgLSBvczsKICAgICAgICAgLy8gYmlu
YXJ5IHNlYXJjaCB0byBmaW5kIGEgcm93CiAgICAgICAgIHN0YXJ0cm93ID0gc3RkOjpsb3dlcl9i
b3VuZChtX3Jvd1Bvcy5iZWdpbigpLCBtX3Jvd1Bvcy5lbmQoKSwgYmVmb3JlKSAtIG1fcm93UG9z
LmJlZ2luKCk7CkBAIC05OTQsNyArMTAyNSw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpw
YWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhCiAg
ICAgdW5zaWduZWQgc3RhcnRjb2wgPSAwOwogICAgIHVuc2lnbmVkIGVuZGNvbCA9IHRvdGFsQ29s
czsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IFJUTC4KLSAgICBpZiAoIW1faGFzT3ZlcmZsb3dp
bmdDZWxsICYmIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgeworICAgIGlmICgh
bV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsICYmIHN0eWxlKCktPmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICBMYXlvdXRVbml0IHN0YXJ0ID0gKHN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2NhbFJlcGFpbnRSZWN0LngoKSA6IGxv
Y2FsUmVwYWludFJlY3QueSgpKSAtIG9zOwogICAgICAgICBWZWN0b3I8aW50PiYgY29sdW1uUG9z
ID0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKCk7CiAgICAgICAgIHN0YXJ0Y29sID0gc3RkOjps
b3dlcl9ib3VuZChjb2x1bW5Qb3MuYmVnaW4oKSwgY29sdW1uUG9zLmVuZCgpLCBzdGFydCkgLSBj
b2x1bW5Qb3MuYmVnaW4oKTsKQEAgLTEwMTAsNyArMTA0MSw3IEBAIHZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpwYWludE9iamVjdChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhCiAgICAgICAgICAgICArK2VuZGNvbDsKICAgICB9CiAgICAgaWYgKHN0YXJ0Y29sIDwg
ZW5kY29sKSB7Ci0gICAgICAgIGlmICghbV9oYXNNdWx0aXBsZUNlbGxMZXZlbHMpIHsKKyAgICAg
ICAgaWYgKCFtX2hhc011bHRpcGxlQ2VsbExldmVscyAmJiAhbV9vdmVyZmxvd2luZ0NlbGxzLnNp
emUoKSkgewogICAgICAgICAgICAgLy8gRHJhdyB0aGUgZGlydHkgY2VsbHMgaW4gdGhlIG9yZGVy
IHRoYXQgdGhleSBhcHBlYXIuCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHIgPSBzdGFydHJv
dzsgciA8IGVuZHJvdzsgcisrKSB7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjID0g
c3RhcnRjb2w7IGMgPCBlbmRjb2w7IGMrKykgewpAQCAtMTAyMiwyNiArMTA1MywzOSBAQCB2b2lk
IFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IExheW91dFBvaW50JiBwYQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIERyYXcgdGhlIGNlbGxzIGluIHRoZSBjb3Jy
ZWN0IHBhaW50IG9yZGVyLgorICAgICAgICAgICAgLy8gVGhlIG92ZXJmbG93aW5nIGNlbGxzIHNo
b3VsZCBiZSBzY2FyY2UgdG8gYXZvaWQgYWRkaW5nIGEgbG90IG9mIGNlbGxzIHRvIHRoZSBIYXNo
U2V0LgorICAgICAgICAgICAgQVNTRVJUKG1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkgPCB0b3Rh
bFJvd3MgKiB0b3RhbENvbHMgKiBnTWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlvRm9yRmFz
dFBhaW50UGF0aCk7CisKKyAgICAgICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB3ZSBwcm9wZXJseSBy
ZXBhaW50IHRoZSBzZWN0aW9uLCB3ZSByZXBhaW50IGFsbCB0aGUgb3ZlcmZsb3dpbmcgY2VsbHMg
dGhhdCB3ZSBjb2xsZWN0ZWQuCiAgICAgICAgICAgICBWZWN0b3I8UmVuZGVyVGFibGVDZWxsKj4g
Y2VsbHM7Ci0gICAgICAgICAgICBIYXNoU2V0PFJlbmRlclRhYmxlQ2VsbCo+IHNwYW5uaW5nQ2Vs
bHM7CisgICAgICAgICAgICBjb3B5VG9WZWN0b3IobV9vdmVyZmxvd2luZ0NlbGxzLCBjZWxscyk7
CisKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGFpbnQgdGhlIHNhbWUgY2VsbCB0
d2ljZSBvciB3ZSB3b3VsZCBoYXZlIHNvbWUgaXNzdWUsIHRodXMgd2UgYWRkIG91ciBvdmVyZmxv
d2luZyBjZWxscyBoZXJlLgorICAgICAgICAgICAgSGFzaFNldDxSZW5kZXJUYWJsZUNlbGwqPiBz
cGFubmluZ0FuZE92ZXJmbG93aW5nQ2VsbHMgPSBtX292ZXJmbG93aW5nQ2VsbHM7CisKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgciA9IHN0YXJ0cm93OyByIDwgZW5kcm93OyByKyspIHsKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSBzdGFydGNvbDsgYyA8IGVuZGNvbDsgYysr
KSB7CiAgICAgICAgICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxsQXQociwg
Yyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQogICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjdXJyZW50LmNlbGxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY3VycmVudC5jZWxsc1tpXS0+cm93U3BhbigpID4gMSB8fCBjdXJy
ZW50LmNlbGxzW2ldLT5jb2xTcGFuKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNwYW5uaW5nQ2VsbHMuY29udGFpbnMoY3VycmVudC5jZWxsc1tpXSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNwYW5uaW5nQ2VsbHMuYWRkKGN1cnJlbnQuY2VsbHNbaV0pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwYW5uaW5nQW5kT3Zl
cmZsb3dpbmdDZWxscy5jb250YWlucyhjdXJyZW50LmNlbGxzW2ldKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1
cnJlbnQuY2VsbHNbaV0tPnJvd1NwYW4oKSA+IDEgfHwgY3VycmVudC5jZWxsc1tpXS0+Y29sU3Bh
bigpID4gMSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFubmluZ0FuZE92ZXJmbG93
aW5nQ2VsbHMuYWRkKGN1cnJlbnQuY2VsbHNbaV0pOworCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjZWxscy5hcHBlbmQoY3VycmVudC5jZWxsc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFNvcnQg
dGhlIGRpcnR5IGNlbGxzIGJ5IHBhaW50IG9yZGVyLgotICAgICAgICAgICAgc3RkOjpzdGFibGVf
c29ydChjZWxscy5iZWdpbigpLCBjZWxscy5lbmQoKSwgY29tcGFyZUNlbGxQb3NpdGlvbnMpOwor
ICAgICAgICAgICAgaWYgKCFtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpKQorICAgICAgICAgICAg
ICAgIHN0ZDo6c3RhYmxlX3NvcnQoY2VsbHMuYmVnaW4oKSwgY2VsbHMuZW5kKCksIGNvbXBhcmVD
ZWxsUG9zaXRpb25zKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGQ6OnN0
YWJsZV9zb3J0KGNlbGxzLmJlZ2luKCksIGNlbGxzLmVuZCgpLCBjb21wYXJlQ2VsbFBvc2l0aW9u
c1dpdGhPdmVyZmxvd2luZ0NlbGxzKTsKKwogICAgICAgICAgICAgaW50IHNpemUgPSBjZWxscy5z
aXplKCk7CiAgICAgICAgICAgICAvLyBQYWludCB0aGUgY2VsbHMuCiAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKQEAgLTExNTUsNyArMTE5OSw3IEBAIGJvb2wgUmVu
ZGVyVGFibGVTZWN0aW9uOjpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVz
dCwgSGl0VGVzdFJlc3VsCiAgICAgaWYgKGhhc092ZXJmbG93Q2xpcCgpICYmICFvdmVyZmxvd0Ns
aXBSZWN0KGFkanVzdGVkTG9jYXRpb24pLmludGVyc2VjdHMocmVzdWx0LnJlY3RGb3JQb2ludChw
b2ludEluQ29udGFpbmVyKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX2hh
c092ZXJmbG93aW5nQ2VsbCkgeworICAgIGlmIChoYXNPdmVyZmxvd2luZ0NlbGwoKSkgewogICAg
ICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBsYXN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
aGF2ZSB0byBza2lwIG92ZXIgaW5saW5lIGZsb3dzLCBzaW5jZSB0aGV5IGNhbiBzaG93IHVwIGlu
c2lkZSB0YWJsZSByb3dzCiAgICAgICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRlbW90ZWQg
aW5saW5lIDxmb3JtPiBmb3IgZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaCBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAppbmRleCA5ZjFmNDA2
NTY0ZWNhNDQyZDg2YzhjMzFmMDZmOTdmZGE2OTkxMzk3Li5jN2U2MGM3ZGRhOWZiN2Y0ODlkMzkz
ZGQyMTQ5MWY1ZmMwZTQxMGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5oCkBAIC0xNDMsNiArMTQzLDggQEAgcHJpdmF0ZToKICAgICBib29sIGVu
c3VyZVJvd3MoaW50KTsKICAgICB2b2lkIGNsZWFyR3JpZCgpOwogCisgICAgYm9vbCBoYXNPdmVy
Zmxvd2luZ0NlbGwoKSBjb25zdCB7IHJldHVybiBtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpIHx8
IG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbDsgfQorCiAgICAgUmVuZGVy
T2JqZWN0Q2hpbGRMaXN0IG1fY2hpbGRyZW47CiAKICAgICBWZWN0b3I8Um93U3RydWN0PiBtX2dy
aWQ7CkBAIC0xNjAsNyArMTYyLDEyIEBAIHByaXZhdGU6CiAgICAgaW50IG1fb3V0ZXJCb3JkZXJB
ZnRlcjsKIAogICAgIGJvb2wgbV9uZWVkc0NlbGxSZWNhbGM7Ci0gICAgYm9vbCBtX2hhc092ZXJm
bG93aW5nQ2VsbDsKKworICAgIC8vIFRoaXMgSGFzaFNldCBob2xkcyB0aGUgb3ZlcmZsb3dpbmcg
Y2VsbHMgZm9yIGZhc3RlciBwYWludGluZy4KKyAgICAvLyBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBn
TWF4QWxsb3dlZE92ZXJmbG93aW5nQ2VsbFJhdGlvICogdG90YWwgY2VsbHMsIGl0IHdpbGwgYmUg
ZW1wdHkKKyAgICAvLyBhbmQgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxs
IHdpbGwgYmUgc2V0IHRvIHNhdmUgbWVtb3J5LgorICAgIEhhc2hTZXQ8UmVuZGVyVGFibGVDZWxs
Kj4gbV9vdmVyZmxvd2luZ0NlbGxzOworICAgIGJvb2wgbV9mb3JjZVNsb3dQYWludFBhdGhXaXRo
T3ZlcmZsb3dpbmdDZWxsOwogCiAgICAgYm9vbCBtX2hhc011bHRpcGxlQ2VsbExldmVsczsKIH07
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103807</attachid>
            <date>2011-08-12 13:42:10 -0700</date>
            <delta_ts>2011-08-18 13:21:11 -0700</delta_ts>
            <desc>New version: taking Dave&apos;s comment into account.</desc>
            <filename>bug-65491-20110812134208.patch</filename>
            <type>text/plain</type>
            <size>12981</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI5NTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNTkzMzEzNjllZGFkNmM1
ZDk2OGM3MWMzYWRlNGJlNzg2NGQwOWIyLi4zYWU1NGJmYzM5YzVkZTc5OGIwNDQyZTY4ODU2Njdi
ZWY0OTZkYTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDgtMTIgIEp1bGll
biBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IGEgZmFzdGVyIHBhdGggZm9yIHBhaW50aW5nIHRhYmxlcyB3aXRoIG92ZXJmbG93aW5nIGNlbGxz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTQ5MQor
CisgICAgICAgIFRoaXMgY2hhbmdlIGludHJvZHVjZXMgYSBzbWFydGVyIHdheSBvZiBwYWludGlu
ZyBpZiB0aGUgdGFibGUgaXMgYmlnIGVub3VnaCBhbmQgd2UgaGF2ZSBhIHNtYWxsIGFtb3VudAor
ICAgICAgICBvZiBvdmVyZmxvd2luZyBjZWxscyBpbiB0aGUgdGFibGUuIFRoZSBuZXcgcGF0aCBk
b2VzIGEgYmluYXJ5IHNlYXJjaCBvZiB0aGUgY2VsbHMgdG8gcmVwYWludCBidXQgYWRkcworICAg
ICAgICB0aGUgb3ZlcmZsb3dpbmcgY2VsbHMgdG8gdGhlIHJlcGFpbnRpbmcgY2VsbHMuCisKKyAg
ICAgICAgVGhpcyBzYXZlcyB+NTAlIHdoZW4gZG9pbmcgcHJvZ3JhbW1hdGljIHNjcm9sbGluZyB0
aHJvdWdodCBKUyBvbiBhIDUwMHgxMDAgdGFibGUgd2l0aCBzb21lIG92ZXJmbG93aW5nCisgICAg
ICAgIGNlbGxzLiBBbHNvIHdlIGNhcCB0aGUgbWVtb3J5IHVzYWdlIHRvIGEgcmF0aW8gb2YgdGhl
IHRvdGFsIHNpemUgb2YgdGhlIHRhYmxlIHRvIGF2b2lkIGJsb3dpbmcgdXAgdGhlCisgICAgICAg
IG1lbW9yeS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYXMgdGhlIGJlaGF2aW9yIHNob3VsZCBiZSB0aGUgc2FtZS4KKworICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpSZW5kZXJUYWJsZVNlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKTogQWRkZWQgc29tZSBjb2RlIHRv
IGFjY3VtdWxhdGUgdGhlIG92ZXJmbG93aW5nIGNlbGxzCisgICAgICAgIGluIGFuIGludGVybmFs
IEhhc2hTZXQgKHdlIGRvbid0IG5lZWQgdG8ga2VlcCB0aGVtIHNvcnRlZCBhbmQgaXQgbWFrZXMg
aXQgZWFzaWVyIHRvIHVzZSB0aGVtIGR1cmluZworICAgICAgICBwYWludGluZykuIElmIHdlIGhp
dCB0aGUgY2FwLCBmbGlwIHRoZSBib29sZWFuIHZhbHVlIGFuZCBjbGVhciB0aGUgSGFzaFNldCBh
cyB0aGUgc2xvdyBwYXRoIGRvZXMgbm90CisgICAgICAgIGNhcmUgYWJvdXQgdGhlIGNlbGwncyBp
bmZvcm1hdGlvbi4gTWFrZSBzdXJlIHRoYXQgdGhlICJoYXMgb3ZlcmZsb3dpbmcgY2VsbHMiIGlu
Zm9ybWF0aW9uIGlzIHN0aWxsCisgICAgICAgIHByb3Blcmx5IGVuY29kZWQgb24gb3VyIDIgdmFs
dWVzLgorCisgICAgICAgIChXZWJDb3JlOjpjb21wYXJlQ2VsbFBvc2l0aW9uc1dpdGhPdmVyZmxv
d2luZ0NlbGxzKTogQWRkZWQgdGhpcyBtZXRob2QgYXMgd2UgYXJlIGRvaW5nIGEgbW9yZQorICAg
ICAgICBjb21wbGljYXRlZCBzb3J0OgorICAgICAgICAgICAgKiB0aGUgb2xkIHBhdGggd291bGQg
c29ydCBvbmUgKG1vc3RseSBzb3J0ZWQpIGFycmF5IGJ5IHJvd3Mgb25seSBhcyB0aGUgc3RhYmxl
IHNvcnQgd291bGQKKyAgICAgICAgICAgICAgdGFrZSBjYXJlIG9mIGtlZXBpbmcgdGhlIGNvbHVt
biBvcmRlcmluZyBpbnNpZGUgYSByb3cuCisgICAgICAgICAgICAqIHRoZSBuZXcgcGF0aCBiYXNp
Y2FsbHkgaGFzIHRvIHNvcnQgYW4gdW5zb3J0ZWQgYXJyYXkgKHRha2VuIHBhcnRseSBmcm9tIHRo
ZSBIYXNoU2V0KS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpwYWlu
dE9iamVjdCk6IFR3ZWFrZWQgdGhlIGxvZ2ljIHRvIGFjY291bnQgZm9yIGRpZmZlcmVuY2UgYmV0
d2VlbgorICAgICAgICBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgYW5k
IGhhcyBzb21lIG92ZXJmbG93aW5nIGNlbGxzLiBBbHNvIHdlIG1ha2Ugc3VyZSB3ZSBkb24ndAor
ICAgICAgICByZXBhaW50IHRoZSBzYW1lIGNlbGwgdHdpY2UuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQpOiBDaGFuZ2VkIHRvIGhhc092ZXJmbG93
aW5nQ2VsbCgpLiBXZSBkb24ndCBhcHBseSBvdXIKKyAgICAgICAgZmFzdCBwYXRoIG9wdGltaXph
dGlvbiBoZXJlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oOiBU
cmFuc2Zvcm1lZCBvdXIgb3JpZ2luYWwgYm9vbGVhbiBpbnRvCisgICAgICAgIGEgSGFzaFNldCBh
bmQgYSBib29sZWFuLiBUaGUgSGFzaFNldCBob2xkcyB1cCB0aGUgQ2VsbFN0cnVjdCB0aGF0IGFy
ZSBvdmVyZmxvd2luZworICAgICAgICB1bnRpbCB3ZSByZWFjaCB0aGUgbWVtb3J5IHRocmVzaG9s
ZC4gQWZ0ZXIgdGhpcyBpcyBoaXQsIHdlIGp1c3Qgc2V0IHRoZSBib29sZWFuCisgICAgICAgIHRv
IGF2b2lkIHVzaW5nIHRvbyBtdWNoIG1lbW9yeS4KKworICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGVTZWN0aW9uOjpoYXNPdmVyZmxvd2luZ0NlbGwpOiBUaGlzIGlzIHRoZSBuZXcgd2F5IHRv
IGRldGVybWluZQorICAgICAgICBpZiB3ZSBoYXZlIGFueSBvdmVyZmxvd2luZyBjZWxsLCB1c2Vk
IG9ubHkgZm9yIGhpdCB0ZXN0aW5nLgorCiAyMDExLTA4LTEyICBQYXZlbCBGZWxkbWFuICA8cGZl
bGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtYWtlIGZvbGRlcnMg
b3B0aW9uYWwgaW4gdGhlIFNjcmlwdHMnIHBhbmVsIGZpbGUgc2VsZWN0b3IuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGY4OTY2ZjVm
MjdiZjFiMzZhZDM2ODFlMzIwNTZhNzliNzExZjlkY2UuLmZlYTAyMmI2MDc2ZmVlMTU0MTE0ZmYz
MzZiM2VjMTA3OWI3MDFlYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC00NCw2ICs0NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKKy8vIFRob3NlIDIgdmFyaWFibGVzIGFy
ZSB1c2VkIHRvIGJhbGFuY2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiB2cyB0aGUgcmVwYWludCB0
aW1lIG9uIGJpZyB0YWJsZXMuCitzdGF0aWMgdW5zaWduZWQgZ01pblRhYmxlU2l6ZVRvVXNlRmFz
dFBhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgPSA3NSAqIDc1Oworc3RhdGljIGZsb2F0IGdN
YXhBbGxvd2VkT3ZlcmZsb3dpbmdDZWxsUmF0aW9Gb3JGYXN0UGFpbnRQYXRoID0gMC4xZjsKKwog
c3RhdGljIGlubGluZSB2b2lkIHNldFJvd0xvZ2ljYWxIZWlnaHRUb1Jvd1N0eWxlTG9naWNhbEhl
aWdodElmTm90UmVsYXRpdmUoUmVuZGVyVGFibGVTZWN0aW9uOjpSb3dTdHJ1Y3QqIHJvdykKIHsK
ICAgICBBU1NFUlQocm93ICYmIHJvdy0+cm93UmVuZGVyZXIpOwpAQCAtNjIsNyArNjYsNiBAQCBS
ZW5kZXJUYWJsZVNlY3Rpb246OlJlbmRlclRhYmxlU2VjdGlvbihOb2RlKiBub2RlKQogICAgICwg
bV9vdXRlckJvcmRlckJlZm9yZSgwKQogICAgICwgbV9vdXRlckJvcmRlckFmdGVyKDApCiAgICAg
LCBtX25lZWRzQ2VsbFJlY2FsYyhmYWxzZSkKLSAgICAsIG1faGFzT3ZlcmZsb3dpbmdDZWxsKGZh
bHNlKQogICAgICwgbV9oYXNNdWx0aXBsZUNlbGxMZXZlbHMoZmFsc2UpCiB7CiAgICAgLy8gaW5p
dCBSZW5kZXJPYmplY3QgYXR0cmlidXRlcwpAQCAtNDI0LDcgKzQyNyw4IEBAIGludCBSZW5kZXJU
YWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHRvQWRkKQogICAgIC8vIFNldCB0aGUgd2lkdGgg
b2Ygb3VyIHNlY3Rpb24gbm93LiAgVGhlIHJvd3Mgd2lsbCBhbHNvIGJlIHRoaXMgd2lkdGguCiAg
ICAgc2V0TG9naWNhbFdpZHRoKHRhYmxlKCktPmNvbnRlbnRMb2dpY2FsV2lkdGgoKSk7CiAgICAg
bV9vdmVyZmxvdy5jbGVhcigpOwotICAgIG1faGFzT3ZlcmZsb3dpbmdDZWxsID0gZmFsc2U7Cisg
ICAgbV9vdmVyZmxvd2luZ0NlbGxzLmNsZWFyKCk7CisgICAgbV9mb3JjZVNsb3dQYWludFBhdGhX
aXRoT3ZlcmZsb3dpbmdDZWxsID0gZmFsc2U7CiAKICAgICBpZiAodG9BZGQgJiYgdG90YWxSb3dz
ICYmIChtX3Jvd1Bvc1t0b3RhbFJvd3NdIHx8ICFuZXh0U2libGluZygpKSkgewogICAgICAgICBp
bnQgdG90YWxIZWlnaHQgPSBtX3Jvd1Bvc1t0b3RhbFJvd3NdICsgdG9BZGQ7CkBAIC02NDksNiAr
NjUzLDEyIEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3MoaW50IHRvQWRkKQog
CiAgICAgc2V0TG9naWNhbEhlaWdodChtX3Jvd1Bvc1t0b3RhbFJvd3NdKTsKIAorICAgIHVuc2ln
bmVkIHRvdGFsQ2VsbHNDb3VudCA9IG5FZmZDb2xzICogdG90YWxSb3dzOworICAgIGludCBtYXhB
bGxvd2VkT3ZlcmZsb3dpbmdDZWxsc0NvdW50ID0gdG90YWxDZWxsc0NvdW50IDwgZ01pblRhYmxl
U2l6ZVRvVXNlRmFzdFBhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgPyAwIDogZ01heEFsbG93
ZWRPdmVyZmxvd2luZ0NlbGxSYXRpb0ZvckZhc3RQYWludFBhdGggKiB0b3RhbENlbGxzQ291bnQ7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgYm9vbCBoYXNPdmVyZmxvd2luZ0NlbGwgPSBmYWxzZTsK
KyNlbmRpZgogICAgIC8vIE5vdyB0aGF0IG91ciBoZWlnaHQgaGFzIGJlZW4gZGV0ZXJtaW5lZCwg
YWRkIGluIG92ZXJmbG93IGZyb20gY2VsbHMuCiAgICAgZm9yIChpbnQgciA9IDA7IHIgPCB0b3Rh
bFJvd3M7IHIrKykgewogICAgICAgICBmb3IgKGludCBjID0gMDsgYyA8IG5FZmZDb2xzOyBjKysp
IHsKQEAgLTY1OSwxMCArNjY5LDIzIEBAIGludCBSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJv
d3MoaW50IHRvQWRkKQogICAgICAgICAgICAgaWYgKHIgPCB0b3RhbFJvd3MgLSAxICYmIGNlbGwg
PT0gcHJpbWFyeUNlbGxBdChyICsgMSwgYykpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgICAgICBhZGRPdmVyZmxvd0Zyb21DaGlsZChjZWxsKTsKLSAgICAgICAgICAgIG1faGFz
T3ZlcmZsb3dpbmdDZWxsIHw9IGNlbGwtPmhhc1Zpc3VhbE92ZXJmbG93KCk7CisjaWZuZGVmIE5E
RUJVRworICAgICAgICAgICAgaGFzT3ZlcmZsb3dpbmdDZWxsIHw9IGNlbGwtPmhhc1Zpc3VhbE92
ZXJmbG93KCk7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChjZWxsLT5oYXNWaXN1YWxPdmVyZmxv
dygpICYmICFtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwpIHsKKyAgICAg
ICAgICAgICAgICBtX292ZXJmbG93aW5nQ2VsbHMuYWRkKGNlbGwpOworICAgICAgICAgICAgICAg
IGlmIChtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpID4gbWF4QWxsb3dlZE92ZXJmbG93aW5nQ2Vs
bHNDb3VudCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCBtX2ZvcmNl
c1Nsb3dQYWludFBhdGggb25seSBpZiB0aGVyZSBpcyBhIGxlYXN0IG9uZSBvdmVyZmxvd2luZyBj
ZWxscyBhcyB0aGUgaGl0IHRlc3RpbmcgY29kZSByZWx5IG9uIHRoaXMgaW5mb3JtYXRpb24uCisg
ICAgICAgICAgICAgICAgICAgIG1fZm9yY2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2Vs
bCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBzbG93IHBhdGggZG9lcyBub3Qg
bWFrZSBhbnkgdXNlIG9mIHRoZSBvdmVyZmxvd2luZyBjZWxscyBpbmZvLCBkb24ndCBob2xkIG9u
IHRvIHRoZSBtZW1vcnkuCisgICAgICAgICAgICAgICAgICAgIG1fb3ZlcmZsb3dpbmdDZWxscy5j
bGVhcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KIAorICAgIEFTU0VSVChoYXNPdmVyZmxvd2luZ0NlbGwgPT0gdGhpcy0+aGFzT3ZlcmZsb3dp
bmdDZWxsKCkpOworCiAgICAgc3RhdGVQdXNoZXIucG9wKCk7CiAgICAgcmV0dXJuIGhlaWdodCgp
OwogfQpAQCAtOTE0LDYgKzkzNywxNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZUNlbGxQ
b3NpdGlvbnMoUmVuZGVyVGFibGVDZWxsKiBlbGVtMSwgUmVuZGVyVGFibGVDZWxsKgogICAgIHJl
dHVybiBlbGVtMS0+cm93KCkgPCBlbGVtMi0+cm93KCk7CiB9CiAKKy8vIFRoaXMgY29tcGFyaXNv
biBpcyB1c2VkIG9ubHkgd2hlbiB3ZSBoYXZlIG92ZXJmbG93aW5nIGNlbGxzIGFzIHdlIGhhdmUg
YW4gdW5zb3J0ZWQgYXJyYXkgdG8gc29ydC4gV2UgdGh1cyBuZWVkCisvLyB0byBzb3J0IGJvdGgg
b24gcm93cyBhbmQgY29sdW1ucyB0byBwcm9wZXJseSByZXBhaW50Lgorc3RhdGljIGlubGluZSBi
b29sIGNvbXBhcmVDZWxsUG9zaXRpb25zV2l0aE92ZXJmbG93aW5nQ2VsbHMoUmVuZGVyVGFibGVD
ZWxsKiBlbGVtMSwgUmVuZGVyVGFibGVDZWxsKiBlbGVtMikKK3sKKyAgICBpZiAoZWxlbTEtPnJv
dygpICE9IGVsZW0yLT5yb3coKSkKKyAgICAgICAgcmV0dXJuIGVsZW0xLT5yb3coKSA8IGVsZW0y
LT5yb3coKTsKKworICAgIHJldHVybiBlbGVtMS0+Y29sKCkgPCBlbGVtMi0+Y29sKCk7Cit9CisK
IHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludENlbGwoUmVuZGVyVGFibGVDZWxsKiBjZWxs
LCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIExheW91dFBvaW50IGNlbGxQb2ludCA9IGZsaXBGb3JXcml0aW5nTW9kZShjZWxsLCBw
YWludE9mZnNldCwgUGFyZW50VG9DaGlsZEZsaXBwaW5nQWRqdXN0bWVudCk7CkBAIC05NTEsNyAr
OTg0LDYgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnBhaW50Q2VsbChSZW5kZXJUYWJsZUNl
bGwqIGNlbGwsIFBhaW50SW5mbyYgcGFpbnRJbmZvLAogdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246
OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCiB7CiAgICAgLy8gQ2hlY2sgd2hpY2ggcm93cyBhbmQgY29scyBhcmUgdmlzaWJs
ZSBhbmQgb25seSBwYWludCB0aGVzZS4KLSAgICAvLyBGSVhNRTogQ291bGQgdXNlIGEgYmluYXJ5
IHNlYXJjaCBoZXJlLgogICAgIHVuc2lnbmVkIHRvdGFsUm93cyA9IG1fZ3JpZFJvd3M7CiAgICAg
dW5zaWduZWQgdG90YWxDb2xzID0gdGFibGUoKS0+Y29sdW1ucygpLnNpemUoKTsKIApAQCAtOTcw
LDggKzEwMDIsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRPYmplY3QoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgICAgICAgICAgbG9jYWxS
ZXBhaW50UmVjdC5zZXRYKHdpZHRoKCkgLSBsb2NhbFJlcGFpbnRSZWN0Lm1heFgoKSk7CiAgICAg
fQogCi0gICAgLy8gSWYgc29tZSBjZWxsIG92ZXJmbG93cywganVzdCBwYWludCBhbGwgb2YgdGhl
bS4KLSAgICBpZiAoIW1faGFzT3ZlcmZsb3dpbmdDZWxsKSB7CisgICAgaWYgKCFtX2ZvcmNlU2xv
d1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwpIHsKICAgICAgICAgTGF5b3V0VW5pdCBiZWZv
cmUgPSAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvY2FsUmVwYWludFJl
Y3QueSgpIDogbG9jYWxSZXBhaW50UmVjdC54KCkpIC0gb3M7CiAgICAgICAgIC8vIGJpbmFyeSBz
ZWFyY2ggdG8gZmluZCBhIHJvdwogICAgICAgICBzdGFydHJvdyA9IHN0ZDo6bG93ZXJfYm91bmQo
bV9yb3dQb3MuYmVnaW4oKSwgbV9yb3dQb3MuZW5kKCksIGJlZm9yZSkgLSBtX3Jvd1Bvcy5iZWdp
bigpOwpAQCAtOTk0LDcgKzEwMjUsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cGFpbnRP
YmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYQogICAgIHVu
c2lnbmVkIHN0YXJ0Y29sID0gMDsKICAgICB1bnNpZ25lZCBlbmRjb2wgPSB0b3RhbENvbHM7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBSVEwuCi0gICAgaWYgKCFtX2hhc092ZXJmbG93aW5nQ2Vs
bCAmJiBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKKyAgICBpZiAoIW1fZm9y
Y2VTbG93UGFpbnRQYXRoV2l0aE92ZXJmbG93aW5nQ2VsbCAmJiBzdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgTGF5b3V0VW5pdCBzdGFydCA9IChzdHlsZSgpLT5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9jYWxSZXBhaW50UmVjdC54KCkgOiBsb2NhbFJl
cGFpbnRSZWN0LnkoKSkgLSBvczsKICAgICAgICAgVmVjdG9yPGludD4mIGNvbHVtblBvcyA9IHRh
YmxlKCktPmNvbHVtblBvc2l0aW9ucygpOwogICAgICAgICBzdGFydGNvbCA9IHN0ZDo6bG93ZXJf
Ym91bmQoY29sdW1uUG9zLmJlZ2luKCksIGNvbHVtblBvcy5lbmQoKSwgc3RhcnQpIC0gY29sdW1u
UG9zLmJlZ2luKCk7CkBAIC0xMDEwLDcgKzEwNDEsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlv
bjo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBw
YQogICAgICAgICAgICAgKytlbmRjb2w7CiAgICAgfQogICAgIGlmIChzdGFydGNvbCA8IGVuZGNv
bCkgewotICAgICAgICBpZiAoIW1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzKSB7CisgICAgICAgIGlm
ICghbV9oYXNNdWx0aXBsZUNlbGxMZXZlbHMgJiYgIW1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkp
IHsKICAgICAgICAgICAgIC8vIERyYXcgdGhlIGRpcnR5IGNlbGxzIGluIHRoZSBvcmRlciB0aGF0
IHRoZXkgYXBwZWFyLgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCByID0gc3RhcnRyb3c7IHIg
PCBlbmRyb3c7IHIrKykgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYyA9IHN0YXJ0
Y29sOyBjIDwgZW5kY29sOyBjKyspIHsKQEAgLTEwMjIsMjYgKzEwNTMsNDEgQEAgdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OnBhaW50T2JqZWN0KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGEKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBEcmF3IHRoZSBjZWxscyBpbiB0aGUgY29ycmVjdCBw
YWludCBvcmRlci4KKyAgICAgICAgICAgIC8vIFRoZSBvdmVyZmxvd2luZyBjZWxscyBzaG91bGQg
YmUgc2NhcmNlIHRvIGF2b2lkIGFkZGluZyBhIGxvdCBvZiBjZWxscyB0byB0aGUgSGFzaFNldC4K
KyAgICAgICAgICAgIEFTU0VSVChtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpIDwgdG90YWxSb3dz
ICogdG90YWxDb2xzICogZ01heEFsbG93ZWRPdmVyZmxvd2luZ0NlbGxSYXRpb0ZvckZhc3RQYWlu
dFBhdGgpOworCisgICAgICAgICAgICAvLyBUbyBtYWtlIHN1cmUgd2UgcHJvcGVybHkgcmVwYWlu
dCB0aGUgc2VjdGlvbiwgd2UgcmVwYWludCBhbGwgdGhlIG92ZXJmbG93aW5nIGNlbGxzIHRoYXQg
d2UgY29sbGVjdGVkLgogICAgICAgICAgICAgVmVjdG9yPFJlbmRlclRhYmxlQ2VsbCo+IGNlbGxz
OworICAgICAgICAgICAgY29weVRvVmVjdG9yKG1fb3ZlcmZsb3dpbmdDZWxscywgY2VsbHMpOwor
CiAgICAgICAgICAgICBIYXNoU2V0PFJlbmRlclRhYmxlQ2VsbCo+IHNwYW5uaW5nQ2VsbHM7CisK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgciA9IHN0YXJ0cm93OyByIDwgZW5kcm93OyByKysp
IHsKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGMgPSBzdGFydGNvbDsgYyA8IGVuZGNv
bDsgYysrKSB7CiAgICAgICAgICAgICAgICAgICAgIENlbGxTdHJ1Y3QmIGN1cnJlbnQgPSBjZWxs
QXQociwgYyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudC5oYXNDZWxscygpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBjdXJyZW50LmNlbGxzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobV9vdmVyZmxvd2luZ0NlbGxzLmNvbnRhaW5zKGN1cnJl
bnQuY2VsbHNbaV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudC5jZWxsc1tpXS0+cm93U3BhbigpID4g
MSB8fCBjdXJyZW50LmNlbGxzW2ldLT5jb2xTcGFuKCkgPiAxKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNwYW5uaW5nQ2VsbHMuY29udGFpbnMoY3VycmVudC5jZWxsc1tpXSkp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNwYW5uaW5nQ2VsbHMuYWRkKGN1cnJlbnQuY2VsbHNbaV0pOwogICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscy5h
cHBlbmQoY3VycmVudC5jZWxsc1tpXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFNvcnQgdGhlIGRpcnR5
IGNlbGxzIGJ5IHBhaW50IG9yZGVyLgotICAgICAgICAgICAgc3RkOjpzdGFibGVfc29ydChjZWxs
cy5iZWdpbigpLCBjZWxscy5lbmQoKSwgY29tcGFyZUNlbGxQb3NpdGlvbnMpOworICAgICAgICAg
ICAgaWYgKCFtX292ZXJmbG93aW5nQ2VsbHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHN0ZDo6
c3RhYmxlX3NvcnQoY2VsbHMuYmVnaW4oKSwgY2VsbHMuZW5kKCksIGNvbXBhcmVDZWxsUG9zaXRp
b25zKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdGQ6OnNvcnQoY2VsbHMu
YmVnaW4oKSwgY2VsbHMuZW5kKCksIGNvbXBhcmVDZWxsUG9zaXRpb25zV2l0aE92ZXJmbG93aW5n
Q2VsbHMpOworCiAgICAgICAgICAgICBpbnQgc2l6ZSA9IGNlbGxzLnNpemUoKTsKICAgICAgICAg
ICAgIC8vIFBhaW50IHRoZSBjZWxscy4KICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQpAQCAtMTE1NSw3ICsxMjAxLDcgQEAgYm9vbCBSZW5kZXJUYWJsZVNlY3Rpb246
Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWwK
ICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkgJiYgIW92ZXJmbG93Q2xpcFJlY3QoYWRqdXN0ZWRM
b2NhdGlvbikuaW50ZXJzZWN0cyhyZXN1bHQucmVjdEZvclBvaW50KHBvaW50SW5Db250YWluZXIp
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1faGFzT3ZlcmZsb3dpbmdDZWxs
KSB7CisgICAgaWYgKGhhc092ZXJmbG93aW5nQ2VsbCgpKSB7CiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBjaGlsZCA9IGxhc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+cHJldmlv
dXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBoYXZlIHRvIHNraXAgb3Zl
ciBpbmxpbmUgZmxvd3MsIHNpbmNlIHRoZXkgY2FuIHNob3cgdXAgaW5zaWRlIHRhYmxlIHJvd3MK
ICAgICAgICAgICAgIC8vIGF0IHRoZSBtb21lbnQgKGEgZGVtb3RlZCBpbmxpbmUgPGZvcm0+IGZv
ciBleGFtcGxlKS4gSWYgd2UgZXZlciBpbXBsZW1lbnQgYQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCmluZGV4IDlmMWY0MDY1NjRlY2E0NDJkODZjOGMz
MWYwNmY5N2ZkYTY5OTEzOTcuLmM3ZTYwYzdkZGE5ZmI3ZjQ4OWQzOTNkZDIxNDkxZjVmYzBlNDEw
YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgK
QEAgLTE0Myw2ICsxNDMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZW5zdXJlUm93cyhpbnQpOwog
ICAgIHZvaWQgY2xlYXJHcmlkKCk7CiAKKyAgICBib29sIGhhc092ZXJmbG93aW5nQ2VsbCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3ZlcmZsb3dpbmdDZWxscy5zaXplKCkgfHwgbV9mb3JjZVNsb3dQYWlu
dFBhdGhXaXRoT3ZlcmZsb3dpbmdDZWxsOyB9CisKICAgICBSZW5kZXJPYmplY3RDaGlsZExpc3Qg
bV9jaGlsZHJlbjsKIAogICAgIFZlY3RvcjxSb3dTdHJ1Y3Q+IG1fZ3JpZDsKQEAgLTE2MCw3ICsx
NjIsMTIgQEAgcHJpdmF0ZToKICAgICBpbnQgbV9vdXRlckJvcmRlckFmdGVyOwogCiAgICAgYm9v
bCBtX25lZWRzQ2VsbFJlY2FsYzsKLSAgICBib29sIG1faGFzT3ZlcmZsb3dpbmdDZWxsOworCisg
ICAgLy8gVGhpcyBIYXNoU2V0IGhvbGRzIHRoZSBvdmVyZmxvd2luZyBjZWxscyBmb3IgZmFzdGVy
IHBhaW50aW5nLgorICAgIC8vIElmIHdlIGhhdmUgbW9yZSB0aGFuIGdNYXhBbGxvd2VkT3ZlcmZs
b3dpbmdDZWxsUmF0aW8gKiB0b3RhbCBjZWxscywgaXQgd2lsbCBiZSBlbXB0eQorICAgIC8vIGFu
ZCBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGwgd2lsbCBiZSBzZXQgdG8g
c2F2ZSBtZW1vcnkuCisgICAgSGFzaFNldDxSZW5kZXJUYWJsZUNlbGwqPiBtX292ZXJmbG93aW5n
Q2VsbHM7CisgICAgYm9vbCBtX2ZvcmNlU2xvd1BhaW50UGF0aFdpdGhPdmVyZmxvd2luZ0NlbGw7
CiAKICAgICBib29sIG1faGFzTXVsdGlwbGVDZWxsTGV2ZWxzOwogfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>