<?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>55097</bug_id>
          
          <creation_ts>2011-02-23 15:48:28 -0800</creation_ts>
          <short_desc>fastMalloc(0) should not be supported</short_desc>
          <delta_ts>2012-06-12 02:38:59 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>arun.patole</cc>
    
    <cc>darin</cc>
    
    <cc>mjs</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>356503</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 15:48:28 -0800</bug_when>
    <thetext>fastMalloc(0) should not be supported</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356507</commentid>
    <comment_count>1</comment_count>
      <attachid>83569</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 15:50:33 -0800</bug_when>
    <thetext>Created attachment 83569
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356509</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 15:51:27 -0800</bug_when>
    <thetext>The idea for this patch came from finding and fixing bug 55091.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356511</commentid>
    <comment_count>3</comment_count>
      <attachid>83569</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-23 15:56:50 -0800</bug_when>
    <thetext>Comment on attachment 83569
wip

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

&gt; Source/WebCore/dom/Document.cpp:1272
&gt; +        return &quot;&quot;;

Not String() or emptyString() ?

&gt; Source/WebCore/loader/DocumentWriter.cpp:222
&gt; -    // make sure nothing&apos;s left in there
&gt; +    // FIXME: This is intended to flush the decoder.  I&apos;m not sure it&apos;s still needed though.
&gt; +    // Certainly we could expose a cleaner way to do this.
&gt;      addData(0, 0, true);

I&apos;ve wanted to kill this line of code for a while.  I looked into it recently.  It&apos;s non-trivial.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356515</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-02-23 16:01:29 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 83569 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=83569&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:1272
&gt; &gt; +        return &quot;&quot;;
&gt; 
&gt; Not String() or emptyString() ?

I just matched what the rests of that function did.  But I&apos;m happy to change them all to emptyString() or whatever is the current best practice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356525</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-02-23 16:18:25 -0800</bug_when>
    <thetext>It depends whether clients want an empty string or a null string.  In most code, we return String() which is the null string, in cases like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356541</commentid>
    <comment_count>6</comment_count>
      <attachid>83569</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2011-02-23 16:36:58 -0800</bug_when>
    <thetext>Comment on attachment 83569
wip

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

&gt; Source/WebCore/loader/TextResourceDecoder.cpp:689
&gt; +        result = m_codec-&gt;decode(m_buffer.data(), m_buffer.size(), true, m_contentType == XML &amp;&amp; !m_useLenientXMLDecoding, m_sawError);

if (!m_buffer.isEmpty()) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356552</commentid>
    <comment_count>7</comment_count>
      <attachid>83569</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-02-23 16:51:08 -0800</bug_when>
    <thetext>Comment on attachment 83569
wip

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

&gt;&gt; Source/WebCore/loader/TextResourceDecoder.cpp:689
&gt;&gt; -    String result = m_codec-&gt;decode(m_buffer.data(), m_buffer.size(), true, m_contentType == XML &amp;&amp; !m_useLenientXMLDecoding, m_sawError);
&gt;&gt; +    String result;
&gt;&gt; +    if (m_buffer.size())
&gt;&gt; +        result = m_codec-&gt;decode(m_buffer.data(), m_buffer.size(), true, m_contentType == XML &amp;&amp; !m_useLenientXMLDecoding, m_sawError);
&gt; 
&gt; if (!m_buffer.isEmpty()) ?

This change is wrong. Calling the text codec with flush equal to true can do work even if the data passed in has no length.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>356674</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-02-23 22:12:49 -0800</bug_when>
    <thetext>+    ASSERT(n); // fastMalloc(0) returns implementation-specific results and just wastes time.

Could you please elaborate on how the results are implementation specific?

It may or may not be a good idea to forbid fastMalloc(0) - the downsides I can think of is that more branching will be needed in code that could assume a non-null pointer before, and that fastMalloc will be less like malloc, confusingly to people working on the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415625</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-05 11:11:32 -0700</bug_when>
    <thetext>Updating the patch now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415643</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-05 12:52:45 -0700</bug_when>
    <thetext>I think that if you want to make fastMalloc semantically different from malloc in this case, you also need to rename it from fastMalloc to WTF::allocate or something else that doesn&apos;t have &quot;malloc&quot; in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415645</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-05 13:06:05 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think that if you want to make fastMalloc semantically different from malloc in this case, you also need to rename it from fastMalloc to WTF::allocate or something else that doesn&apos;t have &quot;malloc&quot; in it.

The C Standard says:

7.20.3 Memory management functions

If the size of the space requested is zero, the behavior is implementation deﬁned: either a null pointer is returned, or the behavior is as if the size were some nonzero value, except that the returned pointer shall not be used to access an object.

I think it&apos;s valid for our implementation to ASSERT.  We can obviously leave the if (!size) return 0; if in.

Right now on some platforms our fastMalloc returns 0, and others it returns fastMalloc(1).  In all cases, it does unnecessary work. So even if we don&apos;t change our behavior, I think we should ASSERT to make callers check size == 0 and possibly avoid lots of work.  In at least bug 55091 avoiding malloc(0) was a big perf win.


I&apos;ll post a patch shortly and start a discussion on webkit-dev.  If we make this change, it should be widely agreed upon (hence the soon-to-be-started thread).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415646</commentid>
    <comment_count>12</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-05 13:08:51 -0700</bug_when>
    <thetext>Thanks Eric.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415655</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-05 14:45:43 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I think it&apos;s valid for our implementation to ASSERT.  We can obviously leave the if (!size) return 0; if in.

I meant &quot;if desired&quot; here.  We could mark said if as UNLIKELY() as well.  In any case, we shouldn&apos;t hit it unless we&apos;re using fastMalloc for code we don&apos;t control (which I&apos;m not sure if we are or not).

I also forgot a link to the spec:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415657</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-05 15:15:35 -0700</bug_when>
    <thetext>See however the C++ standard, section 3.7.3.1.2 about allocation functions: &quot;If the size of the space requested is zero, the value returned shall not be a null pointer value.&quot;

Certainly, &quot;new&quot; does not necessarily need to use fastMalloc directly, but there isn&apos;t a lot of WebKit code that uses fastMalloc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415665</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-05 17:25:29 -0700</bug_when>
    <thetext>It’s clear and not debatable that it’s legal to call malloc(0) and then call free() on the result of malloc(0). The fact that the value returned is undefined and may be a null pointer is not really material, in my opinion.

If we make fastMalloc(0) illegal, then anyone porting code that previously used malloc to use fastMalloc will have to consider whether the value could be 0. The issue is not “code we don’t control” but rather any code we incorporate and change to call fastMalloc.

However, fastMalloc already is different from malloc in one respect. The fastMalloc function crashes if memory is not available. The real malloc is like tryFastMalloc in that it returns 0 if there is no memory available.

The argument for making fastMalloc(0) illegal is that we think that calling it is often a programming mistake, and we think that a runtime assertion is a good way to catch that mistake.

The arguments for making fastMalloc(0) legal are that we may want to port code using malloc without changing the semantic of a zero size and that we think there are code paths that have a size that is sometimes zero and sometimes non-zero where it is cleaner to be able to malloc and free without having to add a special case for zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415668</commentid>
    <comment_count>16</comment_count>
      <attachid>96056</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-05 17:52:05 -0700</bug_when>
    <thetext>Created attachment 96056
another wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416067</commentid>
    <comment_count>17</comment_count>
      <attachid>96139</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-06 15:27:57 -0700</bug_when>
    <thetext>Created attachment 96139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416073</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-06 15:38:46 -0700</bug_when>
    <thetext>Two issues prevent us from turning this on for the Mac port.

1.  Safari crashes on exit in some safari-specific code I can&apos;t see.  Running inspector/audits/audits-panel-functional.html may make that more likely.
2.  Any use of the Java plugin will cause WebKitPluginHost to crash on this ASSERT (again, closed-source code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416076</commentid>
    <comment_count>19</comment_count>
      <attachid>96139</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-06 15:47:31 -0700</bug_when>
    <thetext>Comment on attachment 96139
Patch

Changes that had to be made to accommodate this mode do not look like they are improving code quality.

Besides, what about my comment 44?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416077</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-06 15:47:47 -0700</bug_when>
    <thetext>comment 14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418718</commentid>
    <comment_count>21</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2011-06-10 08:52:13 -0700</bug_when>
    <thetext>Excuse me, but is there any test results showing how much performance gain can be given by this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>484473</commentid>
    <comment_count>22</comment_count>
      <attachid>96139</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-14 22:49:39 -0700</bug_when>
    <thetext>Comment on attachment 96139
Patch

Clearing the review flag for now.  There seems to be some question about whether to make this change more than a discussion about this particular patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>83569</attachid>
            <date>2011-02-23 15:50:33 -0800</date>
            <delta_ts>2011-06-05 17:52:01 -0700</delta_ts>
            <desc>wip</desc>
            <filename>bug-55097-20110223155031.patch</filename>
            <type>text/plain</type>
            <size>8735</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzk0NzkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pT
U3RyaW5nUmVmQ0YuY3BwCmluZGV4IDA4NzdhMTNlNjBiMjc4NjY4MGI2ZDljZDg1MzdjNTkxZTBi
MmVmNTguLmU3M2M2MTZhZjM3Njk0OGQzOWVmZmY1ZGYxMWViYzUyYTc5YTFhMGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcApAQCAtNDYsOSArNDYsOCBA
QCBKU1N0cmluZ1JlZiBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlN0cmluZ1JlZiBzdHJp
bmcpCiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmcsIENGUmFuZ2VNYWtlKDAs
IGxlbmd0aCksIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihV
bmlDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCB1bmljaGFyX2FuZF91Y2hhcl9tdXN0X2JlX3NhbWVf
c2l6ZSk7CiAgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8VUNoYXIqPihidWZmZXIuZ2V0KCkpLCBsZW5ndGgpLmxlYWtSZWYoKTsKLSAgICB9IGVs
c2UgewotICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZSgwLCAwKS5sZWFrUmVm
KCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OmNy
ZWF0ZSgpLmxlYWtSZWYoKTsKIH0KIAogQ0ZTdHJpbmdSZWYgSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
Q0ZBbGxvY2F0b3JSZWYgYWxsb2MsIEpTU3RyaW5nUmVmIHN0cmluZykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCmluZGV4IDg2MDM4YjZkNWQyNDQ0MTgwODc1MDAwMTA3Mzk0NDk1MTMzN2Y4NjYuLjY3
ZWE1ZmUxZWJjNjdhYzEzZThhNzZiMmFiNDNiM2JmMDMyNWRjYmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwpAQCAtMiw2ICsyLDI3IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCiAKKyAgICAgICAgZmFzdE1hbGxvYygwKSBzaG91bGQgbm90IGJlIHN1cHBvcnRlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUwOTcKKwor
ICAgICAgICBFdmVyeSBjYWxsIHRvIGZhc3RNYWxsb2MoMCkgbWF5IGJlIGEgcGVyZiBwcm9ibGVt
IG9yIGJ1Zy4KKyAgICAgICAgVGhpcyBhc3NlcnRpb24gd2FzIGFkZGVkIGFmdGVyIGRpc2N1c3Np
b24gd2l0aCBtanMgYW5kIGFuZGVyc2NhIG9uICN3ZWJraXQuCisKKyAgICAgICAgKiBBUEkvSlNT
dHJpbmdSZWZDRi5jcHA6CisgICAgICAgIChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyk6Cisg
ICAgICAgICogd3RmL0Zhc3RNYWxsb2MuY3BwOgorICAgICAgICAoV1RGOjpmYXN0WmVyb2VkTWFs
bG9jKToKKyAgICAgICAgKFdURjo6dHJ5RmFzdFplcm9lZE1hbGxvYyk6CisgICAgICAgIChXVEY6
OnRyeUZhc3RNYWxsb2MpOgorICAgICAgICAoV1RGOjpmYXN0TWFsbG9jKToKKyAgICAgICAgKFdU
Rjo6dHJ5RmFzdENhbGxvYyk6CisgICAgICAgIChXVEY6OmZhc3RDYWxsb2MpOgorICAgICAgICAo
V1RGOjp0cnlGYXN0UmVhbGxvYyk6CisKKzIwMTEtMDItMjMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3
ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAg
ICAgIFZlY3RvckJ1ZmZlciBzaG91bGQgbm90IGNhbGwgbWFsbG9jKDApCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NTA5MQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcAppbmRleCAyOWU5YTFhYWQ0N2JkYzVhMTYzYTIyMjcw
ZThlYjRkMTFiMmM3NDhkLi4xMmFjN2JkNGI2NzNmZmJkMThlMjM0NTUyNTllOGQ2ZGIxMDg2Mjgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAKQEAgLTE3Niw2ICsx
NzYsNyBAQCB2b2lkIGZhc3RNYWxsb2NNYXRjaEZhaWxlZCh2b2lkKikKIAogdm9pZCogZmFzdFpl
cm9lZE1hbGxvYyhzaXplX3QgbikgCiB7CisgICAgQVNTRVJUKG4pOyAvLyBmYXN0TWFsbG9jKDAp
IHJldHVybnMgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgcmVzdWx0cyBhbmQganVzdCB3YXN0ZXMg
dGltZS4KICAgICB2b2lkKiByZXN1bHQgPSBmYXN0TWFsbG9jKG4pOwogICAgIG1lbXNldChyZXN1
bHQsIDAsIG4pOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0xOTQsNiArMTk1LDcgQEAgY2hhciog
ZmFzdFN0ckR1cChjb25zdCBjaGFyKiBzcmMpCiAgICAgCiBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0
cnlGYXN0WmVyb2VkTWFsbG9jKHNpemVfdCBuKSAKIHsKKyAgICBBU1NFUlQobik7IC8vIGZhc3RN
YWxsb2MoMCkgcmV0dXJucyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyByZXN1bHRzIGFuZCBqdXN0
IHdhc3RlcyB0aW1lLgogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoIXRyeUZhc3RNYWxsb2Mo
bikuZ2V0VmFsdWUocmVzdWx0KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTksNiArMjIxLDcg
QEAgbmFtZXNwYWNlIFdURiB7CiAKIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RNYWxsb2Mo
c2l6ZV90IG4pIAogeworICAgIEFTU0VSVChuKTsgLy8gZmFzdE1hbGxvYygwKSByZXR1cm5zIGlt
cGxlbWVudGF0aW9uLXNwZWNpZmljIHJlc3VsdHMgYW5kIGp1c3Qgd2FzdGVzIHRpbWUuCiAgICAg
QVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShGQVNUX01BTExPQ19NQVRDSF9W
QUxJREFUSU9OKQpAQCAtMjQwLDYgKzI0Myw3IEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZh
c3RNYWxsb2Moc2l6ZV90IG4pCiAKIHZvaWQqIGZhc3RNYWxsb2Moc2l6ZV90IG4pIAogeworICAg
IEFTU0VSVChuKTsgLy8gZmFzdE1hbGxvYygwKSByZXR1cm5zIGltcGxlbWVudGF0aW9uLXNwZWNp
ZmljIHJlc3VsdHMgYW5kIGp1c3Qgd2FzdGVzIHRpbWUuCiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRl
bigpKTsKIAogI2lmIEVOQUJMRShGQVNUX01BTExPQ19NQVRDSF9WQUxJREFUSU9OKQpAQCAtMjUw
LDIxICsyNTQsMTUgQEAgdm9pZCogZmFzdE1hbGxvYyhzaXplX3QgbikKICAgICB2b2lkKiByZXN1
bHQgPSBtYWxsb2Mobik7CiAjZW5kaWYKIAotICAgIGlmICghcmVzdWx0KSB7Ci0jaWYgUExBVEZP
Uk0oQlJFV01QKQotICAgICAgICAvLyBUaGUgYmVoYXZpb3Igb2YgbWFsbG9jKDApIGlzIGltcGxl
bWVudGF0aW9uIGRlZmluZWQuCi0gICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IGZhc3RNYWxs
b2MgbmV2ZXIgcmV0dXJucyAwLCByZXRyeSB3aXRoIGZhc3RNYWxsb2MoMSkuCi0gICAgICAgIGlm
ICghbikKLSAgICAgICAgICAgIHJldHVybiBmYXN0TWFsbG9jKDEpOwotI2VuZGlmCisgICAgaWYg
KCFyZXN1bHQpCiAgICAgICAgIENSQVNIKCk7Ci0gICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbl9lbGVtZW50
cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSkKIHsKKyAgICBBU1NFUlQoZWxlbWVudF9zaXplKTsgLy8g
ZmFzdE1hbGxvYygwKSByZXR1cm5zIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHJlc3VsdHMgYW5k
IGp1c3Qgd2FzdGVzIHRpbWUuCiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVO
QUJMRShGQVNUX01BTExPQ19NQVRDSF9WQUxJREFUSU9OKQpAQCAtMjg4LDYgKzI4Niw3IEBAIFRy
eU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVf
dCBlbGVtZW50X3NpemUpCiAKIHZvaWQqIGZhc3RDYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNp
emVfdCBlbGVtZW50X3NpemUpCiB7CisgICAgQVNTRVJUKGVsZW1lbnRfc2l6ZSk7IC8vIGZhc3RN
YWxsb2MoMCkgcmV0dXJucyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyByZXN1bHRzIGFuZCBqdXN0
IHdhc3RlcyB0aW1lLgogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4oKSk7CiAKICNpZiBFTkFCTEUo
RkFTVF9NQUxMT0NfTUFUQ0hfVkFMSURBVElPTikKQEAgLTM0Nyw5ICszNDYsOCBAQCBUcnlNYWxs
b2NSZXR1cm5WYWx1ZSB0cnlGYXN0UmVhbGxvYyh2b2lkKiBwLCBzaXplX3QgbikKICAgICAgICAg
Ly8gKnN0YXRpY19jYXN0PEFsbG9jQWxpZ25tZW50SW50ZWdlcio+KHJlc3VsdCkgPSBJbnRlcm5h
bDo6QWxsb2NUeXBlTWFsbG9jOwogICAgICAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDxBbGxvY0Fs
aWdubWVudEludGVnZXIqPihyZXN1bHQpICsgMTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gZmFzdE1hbGxvYyhuKTsKLSAg
ICB9CiAjZWxzZQogICAgIHJldHVybiByZWFsbG9jKHAsIG4pOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggMDc3MTAyNmFkNzU1MjhmMjM5ZmRkMzkwN2NiZmJkM2U2Y2I4NWEwOC4uNzhiMjdiNmYzOWU2
MGIzNjAwZjlkNjc3ZGM5YmI5Y2JmZmVmM2NkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDI3IEBA
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKKyAgICAgICAgZmFzdE1h
bGxvYygwKSBzaG91bGQgbm90IGJlIHN1cHBvcnRlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUwOTcKKworICAgICAgICBFdmVyeSBjYWxsIHRvIGZh
c3RNYWxsb2MoMCkgbWF5IGJlIGEgcGVyZiBwcm9ibGVtIG9yIGJ1Zy4KKyAgICAgICAgVGhpcyBh
c3NlcnRpb24gd2FzIGFkZGVkIGFmdGVyIGRpc2N1c3Npb24gd2l0aCBtanMgYW5kIGFuZGVyc2Nh
IG9uICN3ZWJraXQuCisKKyAgICAgICAgSnVzdCBmaXhpbmcgYWxsIHRoZXNlIGNhbGxzaXRlcyB0
byBub3QgZXZlciBjYXVzZSBhIG1hbGxvYygwKS4KKworICAgICAgICAqIGRvbS9EZWNvZGVkRGF0
YURvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWREYXRhRG9jdW1l
bnRQYXJzZXI6OmFwcGVuZEJ5dGVzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsaXplZFRpdGxlKToKKyAgICAgICAgKiBsb2FkZXIvRG9j
dW1lbnRXcml0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRXcml0ZXI6OmVuZElm
Tm90TG9hZGluZ01haW5SZXNvdXJjZSk6CisgICAgICAgICogbG9hZGVyL1RleHRSZXNvdXJjZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJlc291cmNlRGVjb2Rlcjo6Zmx1c2gp
OgorCisyMDExLTAyLTIzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBTZWdtZW50ZWRTdHJpbmcg
ZG9lcyBub3QgbmVlZCBhbiBtX2NvbXBvc2l0ZSBtZW1iZXIKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDgzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcAppbmRleCA5NzViMWI1MWIxOTk3Mzdl
OWFlZTgwMjBkMDU2Njk3MTFjMDNjZDgxLi5hZDk4ODllYzhlYjZhZWJkZjJkYjQ1ZGQ3Nzk2NDQ5
YjkzYTgxNDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGVjb2RlZERhdGFEb2N1
bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RlY29kZWREYXRhRG9jdW1l
bnRQYXJzZXIuY3BwCkBAIC00Myw3ICs0Myw5IEBAIHZvaWQgRGVjb2RlZERhdGFEb2N1bWVudFBh
cnNlcjo6YXBwZW5kQnl0ZXMoRG9jdW1lbnRXcml0ZXIqIHdyaXRlciAsIGNvbnN0IGNoYXIqCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSB3cml0
ZXItPmNyZWF0ZURlY29kZXJJZk5lZWRlZCgpOwotICAgIFN0cmluZyBkZWNvZGVkID0gZGVjb2Rl
ci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCk7CisgICAgU3RyaW5nIGRlY29kZWQ7CisgICAgaWYgKGxl
bmd0aCkKKyAgICAgICAgZGVjb2RlZCA9IGRlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpOwog
ICAgIGlmIChzaG91bGRGbHVzaCkKICAgICAgICAgZGVjb2RlZCArPSBkZWNvZGVyLT5mbHVzaCgp
OwogICAgIGlmIChkZWNvZGVkLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4
IDY0M2U2YTMzNWRlYWUyZWVmYTY2MTJiMWYyZmU5MmQ4MmFiNDljMDcuLjBmNWZjY2I2NWJhY2Mw
YzZkOGYyNjgyMDNjM2RjMWRiZTA5MWFmMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAt
MTI2OCw2ICsxMjY4LDkgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgY2Fub25pY2FsaXplZFRpdGxl
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0aXRsZS5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBpOwogCisgICAgaWYgKCFsZW5n
dGgpCisgICAgICAgIHJldHVybiAiIjsKKwogICAgIFN0cmluZ0J1ZmZlciBidWZmZXIobGVuZ3Ro
KTsKICAgICB1bnNpZ25lZCBidWlsZGVySW5kZXggPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0RvY3VtZW50V3JpdGVyLmNwcAppbmRleCBhZjllYTUzOTYzMGUwYjgwNDkyOGM3MmVlNmY5MmFk
YWIzOGIxM2VhLi44MTFkYWVjZTU3ZWNiNDU2YzMyMDI3YjZmMTdiOTkzMmViOGQ0M2FiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKQEAgLTIxNyw3ICsyMTcsOCBA
QCB2b2lkIERvY3VtZW50V3JpdGVyOjplbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UoKQogICAg
IC8vIHNvIHdlJ2xsIGFkZCBhIHByb3RlY3RpdmUgcmVmY291bnQKICAgICBSZWZQdHI8RnJhbWU+
IHByb3RlY3RvcihtX2ZyYW1lKTsKIAotICAgIC8vIG1ha2Ugc3VyZSBub3RoaW5nJ3MgbGVmdCBp
biB0aGVyZQorICAgIC8vIEZJWE1FOiBUaGlzIGlzIGludGVuZGVkIHRvIGZsdXNoIHRoZSBkZWNv
ZGVyLiAgSSdtIG5vdCBzdXJlIGl0J3Mgc3RpbGwgbmVlZGVkIHRob3VnaC4KKyAgICAvLyBDZXJ0
YWlubHkgd2UgY291bGQgZXhwb3NlIGEgY2xlYW5lciB3YXkgdG8gZG8gdGhpcy4KICAgICBhZGRE
YXRhKDAsIDAsIHRydWUpOwogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmZpbmlzaFBhcnNpbmco
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNv
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcApp
bmRleCBjODE5OGUzMDQ3NmNmZjUxYjI4NjAxNjk5MjA4NjYwNzc4OTQ0ZmQ2Li5lY2M2YjE5NjYx
MDllY2RjMjZkYzAyMmVjMTdhMzcyMTU4ZGY4NWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1RleHRSZXNvdXJjZURlY29kZXIuY3BwCkBAIC02ODQsNyArNjg0LDkgQEAgU3RyaW5nIFRl
eHRSZXNvdXJjZURlY29kZXI6OmZsdXNoKCkKICAgICBpZiAoIW1fY29kZWMpCiAgICAgICAgIG1f
Y29kZWMgPSBuZXdUZXh0Q29kZWMobV9lbmNvZGluZyk7CiAKLSAgICBTdHJpbmcgcmVzdWx0ID0g
bV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6ZSgpLCB0cnVlLCBt
X2NvbnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VMZW5pZW50WE1MRGVjb2RpbmcsIG1fc2F3RXJy
b3IpOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgaWYgKG1fYnVmZmVyLnNpemUoKSkKKyAgICAg
ICAgcmVzdWx0ID0gbV9jb2RlYy0+ZGVjb2RlKG1fYnVmZmVyLmRhdGEoKSwgbV9idWZmZXIuc2l6
ZSgpLCB0cnVlLCBtX2NvbnRlbnRUeXBlID09IFhNTCAmJiAhbV91c2VMZW5pZW50WE1MRGVjb2Rp
bmcsIG1fc2F3RXJyb3IpOwogICAgIG1fYnVmZmVyLmNsZWFyKCk7CiAgICAgbV9jb2RlYy5jbGVh
cigpOwogICAgIG1fY2hlY2tlZEZvckJPTSA9IGZhbHNlOyAvLyBTa2lwIEJPTSBhZ2FpbiB3aGVu
IHJlLWRlY29kaW5nLgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96056</attachid>
            <date>2011-06-05 17:52:05 -0700</date>
            <delta_ts>2011-06-06 15:27:53 -0700</delta_ts>
            <desc>another wip</desc>
            <filename>bug-55097-20110605175204.patch</filename>
            <type>text/plain</type>
            <size>11597</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgxMzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0
cmluZ1JlZi5jcHAKaW5kZXggZWEzMWRhNjZiYjk0MGQ3ZWRmNTYzOWZiMjFjMjJhZDRiZDU1YzBi
ZC4uOWFlMzNhZTFhZTRlOWI5NjY5M2UwNGJmN2JkZGQ2YmQzYmZlZjcyOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZi5jcHAKQEAgLTQ2LDggKzQ2LDExIEBAIEpTU3Ry
aW5nUmVmIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykK
ICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwogICAgICAgICBWZWN0b3I8
VUNoYXIsIDEwMjQ+IGJ1ZmZlcihsZW5ndGgpOwogICAgICAgICBVQ2hhciogcCA9IGJ1ZmZlci5k
YXRhKCk7Ci0gICAgICAgIGlmIChjb252ZXJzaW9uT0sgPT0gY29udmVydFVURjhUb1VURjE2KCZz
dHJpbmcsIHN0cmluZyArIGxlbmd0aCwgJnAsIHAgKyBsZW5ndGgpKQotICAgICAgICAgICAgcmV0
dXJuIE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRh
KCkpLmxlYWtSZWYoKTsKKyAgICAgICAgaWYgKGNvbnZlcnNpb25PSyA9PSBjb252ZXJ0VVRGOFRv
VVRGMTYoJnN0cmluZywgc3RyaW5nICsgbGVuZ3RoLCAmcCwgcCArIGxlbmd0aCkpIHsKKyAgICAg
ICAgICAgIHNpemVfdCB1dGYxNkxlbmd0aCA9IHAgLSBidWZmZXIuZGF0YSgpOworICAgICAgICAg
ICAgaWYgKHV0ZjE2TGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmlu
Zzo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIHV0ZjE2TGVuZ3RoKS5sZWFrUmVmKCk7CisgICAgICAg
IH0KICAgICB9CiAKICAgICAvLyBOdWxsIHN0cmluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU3RyaW5nUmVmQ0YuY3BwCmluZGV4IDA4NzdhMTNlNjBiMjc4NjY4MGI2ZDljZDg1Mzdj
NTkxZTBiMmVmNTguLmU3M2M2MTZhZjM3Njk0OGQzOWVmZmY1ZGYxMWViYzUyYTc5YTFhMGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcApAQCAtNDYsOSAr
NDYsOCBAQCBKU1N0cmluZ1JlZiBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlN0cmluZ1Jl
ZiBzdHJpbmcpCiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmcsIENGUmFuZ2VN
YWtlKDAsIGxlbmd0aCksIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihVbmlDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCB1bmljaGFyX2FuZF91Y2hhcl9tdXN0X2Jl
X3NhbWVfc2l6ZSk7CiAgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIuZ2V0KCkpLCBsZW5ndGgpLmxlYWtSZWYoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZSgwLCAwKS5s
ZWFrUmVmKCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJp
bmc6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKIH0KIAogQ0ZTdHJpbmdSZWYgSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoQ0ZBbGxvY2F0b3JSZWYgYWxsb2MsIEpTU3RyaW5nUmVmIHN0cmluZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAKaW5kZXggOWExMTZlNmIyZjYz
OTM3ZDBkMDJkMDg4YzYxYTU1NGM5ZmMyM2I4Ni4uMzBhNjkzNzZkZWFkMjg1OGYzMGIxNzZhNTRh
YzlmYTY5ZjUxMjE0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFx
dWVKU1N0cmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0
cmluZy5jcHAKQEAgLTM0LDggKzM0LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIFBhc3NS
ZWZQdHI8T3BhcXVlSlNTdHJpbmc+IE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoY29uc3QgVVN0cmlu
ZyYgdXN0cmluZykKIHsKLSAgICBpZiAoIXVzdHJpbmcuaXNOdWxsKCkpCisgICAgaWYgKCF1c3Ry
aW5nLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBmaXggT3BhcXVlSlNT
dHJpbmcoY2hhciosIHNpemVfdCkgdG8gYXZvaWQgbWFsbG9jKDApIGluc3RlYWQgb2YgbWFraW5n
IHRoaXMgaXNFbXB0eSgpIGNoZWNrLCBidXQgdGhhdCBpbnZvbHZlcyBjaGFuZ2luZyBhIHB1Ymxp
YyBBUEkgaGVhZGVyLgorICAgICAgICBpZiAodXN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9wYXF1ZUpTU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE9wYXF1ZUpTU3RyaW5nKHVzdHJpbmcuY2hhcmFjdGVycygpLCB1c3RyaW5n
Lmxlbmd0aCgpKSk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwppbmRleCAzNzM5OTIwZmM5Zjc3OGE3MmUwOWEzZWE0Y2E0NzdmYWZiN2QxY2UzLi44Mjk3
ZTY2ZWFlZTZiZjc0MTgxNDBjNzRjM2FjNjQ0N2JkOTIxNTVjIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMS0wMi0yMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgZmFzdE1hbGxvYygwKSBzaG91bGQgbm90IGJlIHN1cHBvcnRlZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUwOTcKKworICAgICAgICBFdmVyeSBj
YWxsIHRvIGZhc3RNYWxsb2MoMCkgbWF5IGJlIGEgcGVyZiBwcm9ibGVtIG9yIGJ1Zy4KKyAgICAg
ICAgVGhpcyBhc3NlcnRpb24gd2FzIGFkZGVkIGFmdGVyIGRpc2N1c3Npb24gd2l0aCBtanMgYW5k
IGFuZGVyc2NhIG9uICN3ZWJraXQuCisKKyAgICAgICAgKiBBUEkvSlNTdHJpbmdSZWZDRi5jcHA6
CisgICAgICAgIChKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyk6CisgICAgICAgICogd3RmL0Zh
c3RNYWxsb2MuY3BwOgorICAgICAgICAoV1RGOjpmYXN0WmVyb2VkTWFsbG9jKToKKyAgICAgICAg
KFdURjo6dHJ5RmFzdFplcm9lZE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RNYWxsb2Mp
OgorICAgICAgICAoV1RGOjpmYXN0TWFsbG9jKToKKyAgICAgICAgKFdURjo6dHJ5RmFzdENhbGxv
Yyk6CisgICAgICAgIChXVEY6OmZhc3RDYWxsb2MpOgorICAgICAgICAoV1RGOjp0cnlGYXN0UmVh
bGxvYyk6CisKIDIwMTEtMDYtMDQgIEtldmluIE9sbGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVy
cy5jb20+CiAKICAgICAgICAgW3d4XSBVbnJldmlld2VkIGJ1aWxkIGZpeC4gUmVzdG9yZSB0aGUg
UFBDIGJ1aWxkIGFuZCBhbGxvdyB1c2VycyB0byBzcGVjaWZ5IGFyY2hpdGVjdHVyZXMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5jcHAKaW5kZXggZjc5YjYyNzhmMzMyMDE2MzY2MGFhNjJkNjA0N2M4M2M5YzVkZDAzMy4u
YTU4NGEyMjY4YzIzZmQxOTk1YzZjMGE2ODQ0NzJkNGM3MzdhNzNiZiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAKQEAgLTQxLDggKzQxLDkgQEAgaW5saW5lIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OkpTUHJv
cGVydHlOYW1lSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU4KICAgICA6IEpTQ2Vs
bChleGVjLT5nbG9iYWxEYXRhKCksIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVJdGVy
YXRvclN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fbnVtQ2FjaGVhYmxlU2xvdHMobnVtQ2FjaGVh
YmxlU2xvdHMpCiAgICAgLCBtX2pzU3RyaW5nc1NpemUocHJvcGVydHlOYW1lQXJyYXlEYXRhLT5w
cm9wZXJ0eU5hbWVWZWN0b3IoKS5zaXplKCkpCi0gICAgLCBtX2pzU3RyaW5ncyhhZG9wdEFycmF5
UHRyKG5ldyBXcml0ZUJhcnJpZXI8VW5rbm93bj5bbV9qc1N0cmluZ3NTaXplXSkpCiB7CisgICAg
bV9qc1N0cmluZ3MgPSBtX2pzU3RyaW5nc1NpemUgPyBhZG9wdEFycmF5UHRyKG5ldyBXcml0ZUJh
cnJpZXI8VW5rbm93bj5bbV9qc1N0cmluZ3NTaXplXSkgOiBudWxscHRyOworCiAgICAgUHJvcGVy
dHlOYW1lQXJyYXlEYXRhOjpQcm9wZXJ0eU5hbWVWZWN0b3ImIHByb3BlcnR5TmFtZVZlY3RvciA9
IHByb3BlcnR5TmFtZUFycmF5RGF0YS0+cHJvcGVydHlOYW1lVmVjdG9yKCk7CiAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2pzU3RyaW5nc1NpemU7ICsraSkKICAgICAgICAgbV9qc1N0cmlu
Z3NbaV0uc2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywganNPd25lZFN0cmluZyhleGVjLCBw
cm9wZXJ0eU5hbWVWZWN0b3JbaV0udXN0cmluZygpKSk7CkBAIC04Niw2ICs4Nyw3IEBAIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmNyZWF0ZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTT2JqZWN0CiAKIEpTVmFsdWUgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6Z2V0
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIGJhc2UsIHNpemVfdCBpKQogeworICAgIEFTU0VS
VChpIDwgbV9qc1N0cmluZ3NTaXplKTsKICAgICBKU1ZhbHVlIGlkZW50aWZpZXIgPSBtX2pzU3Ry
aW5nc1tpXS5nZXQoKTsKICAgICBpZiAobV9jYWNoZWRTdHJ1Y3R1cmUuZ2V0KCkgPT0gYmFzZS0+
c3RydWN0dXJlKCkgJiYgbV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSA9PSBiYXNlLT5zdHJ1
Y3R1cmUoKS0+cHJvdG90eXBlQ2hhaW4oZXhlYykpCiAgICAgICAgIHJldHVybiBpZGVudGlmaWVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAKaW5kZXggMWZkY2MzZDBl
NTFmMjI5MjYzNWQ5MTE0NGYyMmQwNDhhMTkyYWI1NC4uZDI1M2VkZTFlNmM0MGM0ZTFkNWE2ZTM4
MzZiNDBjMmY5YjE5ZTBmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9G
YXN0TWFsbG9jLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2Mu
Y3BwCkBAIC0xNzMsNiArMTczLDcgQEAgdm9pZCBmYXN0TWFsbG9jTWF0Y2hGYWlsZWQodm9pZCop
CiAKIHZvaWQqIGZhc3RaZXJvZWRNYWxsb2Moc2l6ZV90IG4pIAogeworICAgIEFTU0VSVChuKTsg
Ly8gZmFzdE1hbGxvYygwKSByZXR1cm5zIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHJlc3VsdHMg
YW5kIGp1c3Qgd2FzdGVzIHRpbWUuCiAgICAgdm9pZCogcmVzdWx0ID0gZmFzdE1hbGxvYyhuKTsK
ICAgICBtZW1zZXQocmVzdWx0LCAwLCBuKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTg4LDYg
KzE4OSw3IEBAIGNoYXIqIGZhc3RTdHJEdXAoY29uc3QgY2hhciogc3JjKQogCiBUcnlNYWxsb2NS
ZXR1cm5WYWx1ZSB0cnlGYXN0WmVyb2VkTWFsbG9jKHNpemVfdCBuKSAKIHsKKyAgICBBU1NFUlQo
bik7IC8vIGZhc3RNYWxsb2MoMCkgcmV0dXJucyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyByZXN1
bHRzIGFuZCBqdXN0IHdhc3RlcyB0aW1lLgogICAgIHZvaWQqIHJlc3VsdDsKICAgICBpZiAoIXRy
eUZhc3RNYWxsb2MobikuZ2V0VmFsdWUocmVzdWx0KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0y
MTMsNiArMjE1LDcgQEAgbmFtZXNwYWNlIFdURiB7CiAKIFRyeU1hbGxvY1JldHVyblZhbHVlIHRy
eUZhc3RNYWxsb2Moc2l6ZV90IG4pIAogeworICAgIEFTU0VSVChuKTsgLy8gZmFzdE1hbGxvYygw
KSByZXR1cm5zIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHJlc3VsdHMgYW5kIGp1c3Qgd2FzdGVz
IHRpbWUuCiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShXVEZfTUFM
TE9DX1ZBTElEQVRJT04pCkBAIC0yMzcsNiArMjQwLDcgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUg
dHJ5RmFzdE1hbGxvYyhzaXplX3QgbikKIAogdm9pZCogZmFzdE1hbGxvYyhzaXplX3QgbikgCiB7
CisgICAgQVNTRVJUKG4pOyAvLyBmYXN0TWFsbG9jKDApIHJldHVybnMgaW1wbGVtZW50YXRpb24t
c3BlY2lmaWMgcmVzdWx0cyBhbmQganVzdCB3YXN0ZXMgdGltZS4KICAgICBBU1NFUlQoIWlzRm9y
YmlkZGVuKCkpOwogCiAjaWYgRU5BQkxFKFdURl9NQUxMT0NfVkFMSURBVElPTikKQEAgLTI0OCwy
MSArMjUyLDE1IEBAIHZvaWQqIGZhc3RNYWxsb2Moc2l6ZV90IG4pCiAgICAgdm9pZCogcmVzdWx0
ID0gbWFsbG9jKG4pOwogI2VuZGlmCiAKLSAgICBpZiAoIXJlc3VsdCkgewotI2lmIFBMQVRGT1JN
KEJSRVdNUCkKLSAgICAgICAgLy8gVGhlIGJlaGF2aW9yIG9mIG1hbGxvYygwKSBpcyBpbXBsZW1l
bnRhdGlvbiBkZWZpbmVkLgotICAgICAgICAvLyBUbyBtYWtlIHN1cmUgdGhhdCBmYXN0TWFsbG9j
IG5ldmVyIHJldHVybnMgMCwgcmV0cnkgd2l0aCBmYXN0TWFsbG9jKDEpLgotICAgICAgICBpZiAo
IW4pCi0gICAgICAgICAgICByZXR1cm4gZmFzdE1hbGxvYygxKTsKLSNlbmRpZgorICAgIGlmICgh
cmVzdWx0KQogICAgICAgICBDUkFTSCgpOwotICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMs
IHNpemVfdCBlbGVtZW50X3NpemUpCiB7CisgICAgQVNTRVJUKGVsZW1lbnRfc2l6ZSk7IC8vIGZh
c3RNYWxsb2MoMCkgcmV0dXJucyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyByZXN1bHRzIGFuZCBq
dXN0IHdhc3RlcyB0aW1lLgogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4oKSk7CiAKICNpZiBFTkFC
TEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQpAQCAtMjg0LDYgKzI4Miw3IEBAIFRyeU1hbGxvY1Jl
dHVyblZhbHVlIHRyeUZhc3RDYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50
X3NpemUpCiAKIHZvaWQqIGZhc3RDYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVt
ZW50X3NpemUpCiB7CisgICAgQVNTRVJUKGVsZW1lbnRfc2l6ZSk7IC8vIGZhc3RNYWxsb2MoMCkg
cmV0dXJucyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyByZXN1bHRzIGFuZCBqdXN0IHdhc3RlcyB0
aW1lLgogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4oKSk7CiAKICNpZiBFTkFCTEUoV1RGX01BTExP
Q19WQUxJREFUSU9OKQpAQCAtMzQyLDkgKzM0MSw4IEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRy
eUZhc3RSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBuKQogICAgICAgICAqZmFzdE1hbGxvY1ZhbGlk
YXRpb25TdWZmaXgocmVzdWx0KSA9IEludGVybmFsOjpWYWxpZGF0aW9uU3VmZml4OwogICAgICAg
ICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAgICByZXR1cm4gZmFzdE1hbGxvYyhuKTsKLSAg
ICB9CiAjZWxzZQogICAgIHJldHVybiByZWFsbG9jKHAsIG4pOwogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVmZmVyLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nQnVmZmVyLmgKaW5kZXggZTczZDM4ZTU2ZDA5
N2M5ZWRjMDM2MzcxZDRkNDNhZTI4M2Q1YzNlZS4uOThlMDdlZTUxZTQ0YjFhMTAwZTI2M2NlN2Mz
OWQ1ZGMxNGNkOTkwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0
L1N0cmluZ0J1ZmZlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdCdWZmZXIuaApAQCAtNDMsNyArNDMsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAo
bV9sZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyBzaXplb2Yo
VUNoYXIpKQogICAgICAgICAgICAgQ1JBU0goKTsKLSAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nh
c3Q8VUNoYXIqPihmYXN0TWFsbG9jKG1fbGVuZ3RoICogc2l6ZW9mKFVDaGFyKSkpOworICAgICAg
ICBtX2RhdGEgPSBtX2xlbmd0aCA/IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhtX2xl
bmd0aCAqIHNpemVvZihVQ2hhcikpKSA6IDA7CiAgICAgfQogCiAgICAgflN0cmluZ0J1ZmZlcigp
CkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fbGVu
Z3RoKSB7CiAgICAgICAgICAgICBpZiAobmV3TGVuZ3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1
bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFVDaGFyKSkKICAgICAgICAgICAgICAgICBDUkFTSCgp
OwotICAgICAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxvYyht
X2RhdGEsIG5ld0xlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKKyAgICAgICAgICAgIG1fZGF0YSA9
IG1fbGVuZ3RoID8gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxvYyhtX2RhdGEsIG5ld0xl
bmd0aCAqIHNpemVvZihVQ2hhcikpKSA6IDA7CiAgICAgICAgIH0KICAgICAgICAgbV9sZW5ndGgg
PSBuZXdMZW5ndGg7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU5MWRhNmJlZDMyNGY1Mzk5OTNhZmY5
YTBiNzYwOGYzYTNjZjkxNzYuLmE1NjQ3ZTVmYjUwN2I0Yjc0OTRmNWNkODE4ZjhlYjRmODgwNDlk
NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEgKzEsMjIgQEAKKzIwMTEtMDItMjMgIEVyaWMgU2VpZGVsICA8
ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGZhc3RNYWxsb2MoMCkgc2hvdWxkIG5vdCBiZSBzdXBwb3J0ZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1MDk3CisKKyAgICAgICAg
RXZlcnkgY2FsbCB0byBmYXN0TWFsbG9jKDApIG1heSBiZSBhIHBlcmYgcHJvYmxlbSBvciBidWcu
CisgICAgICAgIFRoaXMgYXNzZXJ0aW9uIHdhcyBhZGRlZCBhZnRlciBkaXNjdXNzaW9uIHdpdGgg
bWpzIGFuZCBhbmRlcnNjYSBvbiAjd2Via2l0LgorCisgICAgICAgIEp1c3QgZml4aW5nIGFsbCB0
aGVzZSBjYWxsc2l0ZXMgdG8gbm90IGV2ZXIgY2F1c2UgYSBtYWxsb2MoMCkuCisKKyAgICAgICAg
KiBkb20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpE
ZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyOjphcHBlbmRCeXRlcyk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbGl6ZWRUaXRsZSk6CisgICAg
ICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50V3JpdGVyOjplbmRJZk5vdExvYWRpbmdNYWluUmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRl
ci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJj
ZURlY29kZXI6OmZsdXNoKToKKwogPT0gUm9sbGVkIG92ZXIgdG8gQ2hhbmdlTG9nLTIwMTEtMDYt
MDQgPT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9EZWNvZGVkRGF0YURvY3VtZW50
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFyc2Vy
LmNwcAppbmRleCA5NzViMWI1MWIxOTk3MzdlOWFlZTgwMjBkMDU2Njk3MTFjMDNjZDgxLi5hZDk4
ODllYzhlYjZhZWJkZjJkYjQ1ZGQ3Nzk2NDQ5YjkzYTgxNDA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0RlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC00Myw3ICs0Myw5IEBA
IHZvaWQgRGVjb2RlZERhdGFEb2N1bWVudFBhcnNlcjo6YXBwZW5kQnl0ZXMoRG9jdW1lbnRXcml0
ZXIqIHdyaXRlciAsIGNvbnN0IGNoYXIqCiAgICAgICAgIHJldHVybjsKIAogICAgIFRleHRSZXNv
dXJjZURlY29kZXIqIGRlY29kZXIgPSB3cml0ZXItPmNyZWF0ZURlY29kZXJJZk5lZWRlZCgpOwot
ICAgIFN0cmluZyBkZWNvZGVkID0gZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbmd0aCk7CisgICAg
U3RyaW5nIGRlY29kZWQ7CisgICAgaWYgKGxlbmd0aCkKKyAgICAgICAgZGVjb2RlZCA9IGRlY29k
ZXItPmRlY29kZShkYXRhLCBsZW5ndGgpOwogICAgIGlmIChzaG91bGRGbHVzaCkKICAgICAgICAg
ZGVjb2RlZCArPSBkZWNvZGVyLT5mbHVzaCgpOwogICAgIGlmIChkZWNvZGVkLmlzRW1wdHkoKSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRXcml0ZXIuY3BwCmluZGV4IDJmYzAyZDFjZjJl
NzVlODE3NDY5ZGVkZmIxMGUwMDI5MmQ4MzQ1NzIuLjMxYWQxMTBmNjlmYTkzNzFkMzRhZjQ0NzRi
NzRkNTgyOWVlMjQ1NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVu
dFdyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNw
cApAQCAtMjE5LDcgKzIxOSw4IEBAIHZvaWQgRG9jdW1lbnRXcml0ZXI6OmVuZElmTm90TG9hZGlu
Z01haW5SZXNvdXJjZSgpCiAgICAgLy8gc28gd2UnbGwgYWRkIGEgcHJvdGVjdGl2ZSByZWZjb3Vu
dAogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwogCi0gICAgLy8gbWFrZSBz
dXJlIG5vdGhpbmcncyBsZWZ0IGluIHRoZXJlCisgICAgLy8gRklYTUU6IFRoaXMgaXMgaW50ZW5k
ZWQgdG8gZmx1c2ggdGhlIGRlY29kZXIuICBJJ20gbm90IHN1cmUgaXQncyBzdGlsbCBuZWVkZWQg
dGhvdWdoLgorICAgIC8vIENlcnRhaW5seSB3ZSBjb3VsZCBleHBvc2UgYSBjbGVhbmVyIHdheSB0
byBkbyB0aGlzLgogICAgIGFkZERhdGEoMCwgMCwgdHJ1ZSk7CiAgICAgbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+ZmluaXNoUGFyc2luZygpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96139</attachid>
            <date>2011-06-06 15:27:57 -0700</date>
            <delta_ts>2011-10-14 22:49:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55097-20110606152756.patch</filename>
            <type>text/plain</type>
            <size>12706</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgxMzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9BUEkvSlNTdHJpbmdSZWYuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0
cmluZ1JlZi5jcHAKaW5kZXggZWEzMWRhNjZiYjk0MGQ3ZWRmNTYzOWZiMjFjMjJhZDRiZDU1YzBi
ZC4uOWFlMzNhZTFhZTRlOWI5NjY5M2UwNGJmN2JkZGQ2YmQzYmZlZjcyOSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZi5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZi5jcHAKQEAgLTQ2LDggKzQ2LDExIEBAIEpTU3Ry
aW5nUmVmIEpTU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykK
ICAgICAgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihzdHJpbmcpOwogICAgICAgICBWZWN0b3I8
VUNoYXIsIDEwMjQ+IGJ1ZmZlcihsZW5ndGgpOwogICAgICAgICBVQ2hhciogcCA9IGJ1ZmZlci5k
YXRhKCk7Ci0gICAgICAgIGlmIChjb252ZXJzaW9uT0sgPT0gY29udmVydFVURjhUb1VURjE2KCZz
dHJpbmcsIHN0cmluZyArIGxlbmd0aCwgJnAsIHAgKyBsZW5ndGgpKQotICAgICAgICAgICAgcmV0
dXJuIE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoYnVmZmVyLmRhdGEoKSwgcCAtIGJ1ZmZlci5kYXRh
KCkpLmxlYWtSZWYoKTsKKyAgICAgICAgaWYgKGNvbnZlcnNpb25PSyA9PSBjb252ZXJ0VVRGOFRv
VVRGMTYoJnN0cmluZywgc3RyaW5nICsgbGVuZ3RoLCAmcCwgcCArIGxlbmd0aCkpIHsKKyAgICAg
ICAgICAgIHNpemVfdCB1dGYxNkxlbmd0aCA9IHAgLSBidWZmZXIuZGF0YSgpOworICAgICAgICAg
ICAgaWYgKHV0ZjE2TGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmlu
Zzo6Y3JlYXRlKGJ1ZmZlci5kYXRhKCksIHV0ZjE2TGVuZ3RoKS5sZWFrUmVmKCk7CisgICAgICAg
IH0KICAgICB9CiAKICAgICAvLyBOdWxsIHN0cmluZy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTU3RyaW5nUmVmQ0YuY3BwCmluZGV4IDA4NzdhMTNlNjBiMjc4NjY4MGI2ZDljZDg1Mzdj
NTkxZTBiMmVmNTguLmU3M2M2MTZhZjM3Njk0OGQzOWVmZmY1ZGYxMWViYzUyYTc5YTFhMGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNTdHJpbmdSZWZDRi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1N0cmluZ1JlZkNGLmNwcApAQCAtNDYsOSAr
NDYsOCBAQCBKU1N0cmluZ1JlZiBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlN0cmluZ1Jl
ZiBzdHJpbmcpCiAgICAgICAgIENGU3RyaW5nR2V0Q2hhcmFjdGVycyhzdHJpbmcsIENGUmFuZ2VN
YWtlKDAsIGxlbmd0aCksIGJ1ZmZlci5nZXQoKSk7CiAgICAgICAgIENPTVBJTEVfQVNTRVJUKHNp
emVvZihVbmlDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCB1bmljaGFyX2FuZF91Y2hhcl9tdXN0X2Jl
X3NhbWVfc2l6ZSk7CiAgICAgICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8VUNoYXIqPihidWZmZXIuZ2V0KCkpLCBsZW5ndGgpLmxlYWtSZWYoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OmNyZWF0ZSgwLCAwKS5s
ZWFrUmVmKCk7Ci0gICAgfQorICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJp
bmc6OmNyZWF0ZSgpLmxlYWtSZWYoKTsKIH0KIAogQ0ZTdHJpbmdSZWYgSlNTdHJpbmdDb3B5Q0ZT
dHJpbmcoQ0ZBbGxvY2F0b3JSZWYgYWxsb2MsIEpTU3RyaW5nUmVmIHN0cmluZykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvT3BhcXVlSlNTdHJpbmcuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0cmluZy5jcHAKaW5kZXggOWExMTZlNmIyZjYz
OTM3ZDBkMDJkMDg4YzYxYTU1NGM5ZmMyM2I4Ni4uMzBhNjkzNzZkZWFkMjg1OGYzMGIxNzZhNTRh
YzlmYTY5ZjUxMjE0NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFx
dWVKU1N0cmluZy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9PcGFxdWVKU1N0
cmluZy5jcHAKQEAgLTM0LDggKzM0LDEyIEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiAKIFBhc3NS
ZWZQdHI8T3BhcXVlSlNTdHJpbmc+IE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUoY29uc3QgVVN0cmlu
ZyYgdXN0cmluZykKIHsKLSAgICBpZiAoIXVzdHJpbmcuaXNOdWxsKCkpCisgICAgaWYgKCF1c3Ry
aW5nLmlzTnVsbCgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBmaXggT3BhcXVlSlNT
dHJpbmcoY2hhciosIHNpemVfdCkgdG8gYXZvaWQgbWFsbG9jKDApIGluc3RlYWQgb2YgbWFraW5n
IHRoaXMgaXNFbXB0eSgpIGNoZWNrLCBidXQgdGhhdCBpbnZvbHZlcyBjaGFuZ2luZyBhIHB1Ymxp
YyBBUEkgaGVhZGVyLgorICAgICAgICBpZiAodXN0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE9wYXF1ZUpTU3RyaW5nKCkpOwogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE9wYXF1ZUpTU3RyaW5nKHVzdHJpbmcuY2hhcmFjdGVycygpLCB1c3RyaW5n
Lmxlbmd0aCgpKSk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwppbmRleCAzNzM5OTIwZmM5Zjc3OGE3MmUwOWEzZWE0Y2E0NzdmYWZiN2QxY2UzLi4xY2Vi
MmIzN2I0NTZhZWNiNTA3YTkzZDUyMWY3NmRmM2FiNjNlMWFkIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMS0wMi0yMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgZmFzdE1hbGxvYygwKSBzaG91bGQgbm90IGJlIHN1cHBvcnRlZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTUwOTcKKworICAgICAgICBFdmVyeSBj
YWxsIHRvIGZhc3RNYWxsb2MoMCkgbWF5IGJlIGEgcGVyZiBwcm9ibGVtIG9yIGJ1Zy4KKyAgICAg
ICAgVGhpcyBhc3NlcnRpb24gd2FzIGFkZGVkIGFmdGVyIGRpc2N1c3Npb24gd2l0aCBtanMgYW5k
IGFuZGVyc2NhIG9uICN3ZWJraXQuCisKKyAgICAgICAgVW5mb3J0dW5hdGVseSBpdCdzIG5vdCB5
ZXQgcG9zc2libGUgdG8gQVNTRVJUIG9uIGZhc3RNYWxsb2MoMCkgb24gTWFjIGR1ZSB0bworICAg
ICAgICBTYWZhcmkgZGVwZW5kaW5nIG9uIGZhc3RNYWxsb2MoMCkuIFNvIGZvciBub3cgZmFzdE1h
bGxvYygwKQorICAgICAgICBhbGxvd2VkIGJ5IGRlZmF1bHQgYnV0IG1hZGUgYSBjb21waWxlLXRp
bWUgb3B0aW9uLgorCisgICAgICAgICogQVBJL0pTU3RyaW5nUmVmQ0YuY3BwOgorICAgICAgICAo
SlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcpOgorICAgICAgICAqIHd0Zi9GYXN0TWFsbG9jLmNw
cDoKKyAgICAgICAgKFdURjo6ZmFzdFplcm9lZE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZh
c3RaZXJvZWRNYWxsb2MpOgorICAgICAgICAoV1RGOjp0cnlGYXN0TWFsbG9jKToKKyAgICAgICAg
KFdURjo6ZmFzdE1hbGxvYyk6CisgICAgICAgIChXVEY6OnRyeUZhc3RDYWxsb2MpOgorICAgICAg
ICAoV1RGOjpmYXN0Q2FsbG9jKToKKyAgICAgICAgKFdURjo6dHJ5RmFzdFJlYWxsb2MpOgorCiAy
MDExLTA2LTA0ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxpdmllcnMuY29tPgogCiAg
ICAgICAgIFt3eF0gVW5yZXZpZXdlZCBidWlsZCBmaXguIFJlc3RvcmUgdGhlIFBQQyBidWlsZCBh
bmQgYWxsb3cgdXNlcnMgdG8gc3BlY2lmeSBhcmNoaXRlY3R1cmVzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCmlu
ZGV4IGY3OWI2Mjc4ZjMzMjAxNjM2NjBhYTYyZDYwNDdjODNjOWM1ZGQwMzMuLmE1ODRhMjI2OGMy
M2ZkMTk5NWM2YzBhNjg0NDcyZDRjNzM3YTczYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCkBAIC00MSw4
ICs0MSw5IEBAIGlubGluZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOCiAgICAgOiBKU0NlbGwoZXhlYy0+Z2xv
YmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lSXRlcmF0b3JTdHJ1Y3R1
cmUuZ2V0KCkpCiAgICAgLCBtX251bUNhY2hlYWJsZVNsb3RzKG51bUNhY2hlYWJsZVNsb3RzKQog
ICAgICwgbV9qc1N0cmluZ3NTaXplKHByb3BlcnR5TmFtZUFycmF5RGF0YS0+cHJvcGVydHlOYW1l
VmVjdG9yKCkuc2l6ZSgpKQotICAgICwgbV9qc1N0cmluZ3MoYWRvcHRBcnJheVB0cihuZXcgV3Jp
dGVCYXJyaWVyPFVua25vd24+W21fanNTdHJpbmdzU2l6ZV0pKQogeworICAgIG1fanNTdHJpbmdz
ID0gbV9qc1N0cmluZ3NTaXplID8gYWRvcHRBcnJheVB0cihuZXcgV3JpdGVCYXJyaWVyPFVua25v
d24+W21fanNTdHJpbmdzU2l6ZV0pIDogbnVsbHB0cjsKKwogICAgIFByb3BlcnR5TmFtZUFycmF5
RGF0YTo6UHJvcGVydHlOYW1lVmVjdG9yJiBwcm9wZXJ0eU5hbWVWZWN0b3IgPSBwcm9wZXJ0eU5h
bWVBcnJheURhdGEtPnByb3BlcnR5TmFtZVZlY3RvcigpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9qc1N0cmluZ3NTaXplOyArK2kpCiAgICAgICAgIG1fanNTdHJpbmdzW2ldLnNldChl
eGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIGpzT3duZWRTdHJpbmcoZXhlYywgcHJvcGVydHlOYW1l
VmVjdG9yW2ldLnVzdHJpbmcoKSkpOwpAQCAtODYsNiArODcsNyBAQCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdAogCiBKU1ZhbHVlIEpTUHJvcGVydHlOYW1lSXRlcmF0b3I6OmdldChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiBiYXNlLCBzaXplX3QgaSkKIHsKKyAgICBBU1NFUlQoaSA8IG1fanNT
dHJpbmdzU2l6ZSk7CiAgICAgSlNWYWx1ZSBpZGVudGlmaWVyID0gbV9qc1N0cmluZ3NbaV0uZ2V0
KCk7CiAgICAgaWYgKG1fY2FjaGVkU3RydWN0dXJlLmdldCgpID09IGJhc2UtPnN0cnVjdHVyZSgp
ICYmIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkgPT0gYmFzZS0+c3RydWN0dXJlKCktPnBy
b3RvdHlwZUNoYWluKGV4ZWMpKQogICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL0Zhc3RNYWxsb2MuY3BwCmluZGV4IDFmZGNjM2QwZTUxZjIyOTI2MzVk
OTExNDRmMjJkMDQ4YTE5MmFiNTQuLjA0ZmE0Njc2YTdiMjdkZmIwODU2ZjdjNmE0NjZlYTg5M2Rl
YjBkN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvRmFzdE1hbGxvYy5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9GYXN0TWFsbG9jLmNwcApAQCAtOTks
NiArOTksMTYgQEAKIC8vIFVzZSBhIGJhY2tncm91bmQgdGhyZWFkIHRvIHBlcmlvZGljYWxseSBz
Y2F2ZW5nZSBtZW1vcnkgdG8gcmVsZWFzZSBiYWNrIHRvIHRoZSBzeXN0ZW0KICNkZWZpbmUgVVNF
X0JBQ0tHUk9VTkRfVEhSRUFEX1RPX1NDQVZFTkdFX01FTU9SWSAxCiAKKy8vIENhbGxpbmcgbWFs
bG9jKDApLCBhbHRob3VnaCBhbGxvd2VkIGJ5IHRoZSBDIHN0YW5kYXJkLCBoYXMKKy8vIGltcGxl
bWVudGF0aW9uLXNwZWNpZmljIGJlaGF2aW9yIGFuZCBpcyBhbHdheXMgc2xvd2VyIHRoYW4gdGhl
IGNhbGxlcgorLy8gYnJhbmNoaW5nIHRvIGF2b2lkIG1hbGxvYygwKSAoYmVjYXVzZSBtYWxsb2Mg
d2lsbCBsb2NrKS4gV2Ugd291bGQgbGlrZSB0bworLy8gZGlzYWxsb3cgZmFzdE1hbGxvYygwKSB0
aHJvdWdob3V0IFdlYktpdC4gQ3VycmVudGx5IFNhZmFyaSBkZXBlbmRzCisvLyBvbiBmYXN0TWFs
bG9jKDApIG5vdCBhc3NlcnRpbmcsIHNvIHdlIGNhbid0IHJlbW92ZSBmYXN0TWFsbG9jKDApIG9u
IE1hYy4KKy8vIE90aGVyIHBvcnRzIHNob3VsZCBkaXNhYmxlIGZhc3RNYWxsb2MoMCkgd2hlbiBw
b3NzaWJsZS4KKyNpZm5kZWYgQUxMT1dfWkVST19TSVpFX0ZBU1RfTUFMTE9DCisjZGVmaW5lIEFM
TE9XX1pFUk9fU0laRV9GQVNUX01BTExPQyAxCisjZW5kaWYKKwogI2lmbmRlZiBOREVCVUcKIG5h
bWVzcGFjZSBXVEYgewogCkBAIC0xNzMsNiArMTgzLDcgQEAgdm9pZCBmYXN0TWFsbG9jTWF0Y2hG
YWlsZWQodm9pZCopCiAKIHZvaWQqIGZhc3RaZXJvZWRNYWxsb2Moc2l6ZV90IG4pIAogeworICAg
IEFTU0VSVChBTExPV19aRVJPX1NJWkVfRkFTVF9NQUxMT0MgfHwgbik7IC8vIGZhc3RNYWxsb2Mo
MCkgcmV0dXJucyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyByZXN1bHRzIGFuZCBqdXN0IHdhc3Rl
cyB0aW1lLgogICAgIHZvaWQqIHJlc3VsdCA9IGZhc3RNYWxsb2Mobik7CiAgICAgbWVtc2V0KHJl
c3VsdCwgMCwgbik7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE4OCw2ICsxOTksNyBAQCBjaGFy
KiBmYXN0U3RyRHVwKGNvbnN0IGNoYXIqIHNyYykKIAogVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5
RmFzdFplcm9lZE1hbGxvYyhzaXplX3QgbikgCiB7CisgICAgQVNTRVJUKEFMTE9XX1pFUk9fU0la
RV9GQVNUX01BTExPQyB8fCBuKTsgLy8gZmFzdE1hbGxvYygwKSByZXR1cm5zIGltcGxlbWVudGF0
aW9uLXNwZWNpZmljIHJlc3VsdHMgYW5kIGp1c3Qgd2FzdGVzIHRpbWUuCiAgICAgdm9pZCogcmVz
dWx0OwogICAgIGlmICghdHJ5RmFzdE1hbGxvYyhuKS5nZXRWYWx1ZShyZXN1bHQpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTIxMyw2ICsyMjUsNyBAQCBuYW1lc3BhY2UgV1RGIHsKIAogVHJ5TWFs
bG9jUmV0dXJuVmFsdWUgdHJ5RmFzdE1hbGxvYyhzaXplX3QgbikgCiB7CisgICAgQVNTRVJUKEFM
TE9XX1pFUk9fU0laRV9GQVNUX01BTExPQyB8fCBuKTsgLy8gZmFzdE1hbGxvYygwKSByZXR1cm5z
IGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHJlc3VsdHMgYW5kIGp1c3Qgd2FzdGVzIHRpbWUuCiAg
ICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShXVEZfTUFMTE9DX1ZBTElE
QVRJT04pCkBAIC0yMzcsNiArMjUwLDcgQEAgVHJ5TWFsbG9jUmV0dXJuVmFsdWUgdHJ5RmFzdE1h
bGxvYyhzaXplX3QgbikKIAogdm9pZCogZmFzdE1hbGxvYyhzaXplX3QgbikgCiB7CisgICAgQVNT
RVJUKEFMTE9XX1pFUk9fU0laRV9GQVNUX01BTExPQyB8fCBuKTsgLy8gZmFzdE1hbGxvYygwKSBy
ZXR1cm5zIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHJlc3VsdHMgYW5kIGp1c3Qgd2FzdGVzIHRp
bWUuCiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShXVEZfTUFMTE9D
X1ZBTElEQVRJT04pCkBAIC0yNDgsMjEgKzI2MiwxNSBAQCB2b2lkKiBmYXN0TWFsbG9jKHNpemVf
dCBuKQogICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvYyhuKTsKICNlbmRpZgogCi0gICAgaWYgKCFy
ZXN1bHQpIHsKLSNpZiBQTEFURk9STShCUkVXTVApCi0gICAgICAgIC8vIFRoZSBiZWhhdmlvciBv
ZiBtYWxsb2MoMCkgaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4KLSAgICAgICAgLy8gVG8gbWFr
ZSBzdXJlIHRoYXQgZmFzdE1hbGxvYyBuZXZlciByZXR1cm5zIDAsIHJldHJ5IHdpdGggZmFzdE1h
bGxvYygxKS4KLSAgICAgICAgaWYgKCFuKQotICAgICAgICAgICAgcmV0dXJuIGZhc3RNYWxsb2Mo
MSk7Ci0jZW5kaWYKKyAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgQ1JBU0goKTsKLSAgICB9CiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCiBUcnlNYWxsb2NSZXR1cm5WYWx1ZSB0cnlGYXN0Q2Fs
bG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplKQogeworICAgIEFTU0VS
VChBTExPV19aRVJPX1NJWkVfRkFTVF9NQUxMT0MgfHwgZWxlbWVudF9zaXplKTsgLy8gZmFzdE1h
bGxvYygwKSByZXR1cm5zIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHJlc3VsdHMgYW5kIGp1c3Qg
d2FzdGVzIHRpbWUuCiAgICAgQVNTRVJUKCFpc0ZvcmJpZGRlbigpKTsKIAogI2lmIEVOQUJMRShX
VEZfTUFMTE9DX1ZBTElEQVRJT04pCkBAIC0yODQsNiArMjkyLDcgQEAgVHJ5TWFsbG9jUmV0dXJu
VmFsdWUgdHJ5RmFzdENhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6
ZSkKIAogdm9pZCogZmFzdENhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRf
c2l6ZSkKIHsKKyAgICBBU1NFUlQoQUxMT1dfWkVST19TSVpFX0ZBU1RfTUFMTE9DIHx8IGVsZW1l
bnRfc2l6ZSk7IC8vIGZhc3RNYWxsb2MoMCkgcmV0dXJucyBpbXBsZW1lbnRhdGlvbi1zcGVjaWZp
YyByZXN1bHRzIGFuZCBqdXN0IHdhc3RlcyB0aW1lLgogICAgIEFTU0VSVCghaXNGb3JiaWRkZW4o
KSk7CiAKICNpZiBFTkFCTEUoV1RGX01BTExPQ19WQUxJREFUSU9OKQpAQCAtMzQyLDkgKzM1MSw4
IEBAIFRyeU1hbGxvY1JldHVyblZhbHVlIHRyeUZhc3RSZWFsbG9jKHZvaWQqIHAsIHNpemVfdCBu
KQogICAgICAgICAqZmFzdE1hbGxvY1ZhbGlkYXRpb25TdWZmaXgocmVzdWx0KSA9IEludGVybmFs
OjpWYWxpZGF0aW9uU3VmZml4OwogICAgICAgICBmYXN0TWFsbG9jVmFsaWRhdGUocmVzdWx0KTsK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAg
ICByZXR1cm4gZmFzdE1hbGxvYyhuKTsKLSAgICB9CiAjZWxzZQogICAgIHJldHVybiByZWFsbG9j
KHAsIG4pOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3Rl
eHQvU3RyaW5nQnVmZmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5n
QnVmZmVyLmgKaW5kZXggZTczZDM4ZTU2ZDA5N2M5ZWRjMDM2MzcxZDRkNDNhZTI4M2Q1YzNlZS4u
OThlMDdlZTUxZTQ0YjFhMTAwZTI2M2NlN2MzOWQ1ZGMxNGNkOTkwNCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdCdWZmZXIuaApAQCAtNDMsNyArNDMsNyBAQCBw
dWJsaWM6CiAgICAgewogICAgICAgICBpZiAobV9sZW5ndGggPiBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkgLyBzaXplb2YoVUNoYXIpKQogICAgICAgICAgICAgQ1JBU0goKTsK
LSAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0TWFsbG9jKG1fbGVuZ3Ro
ICogc2l6ZW9mKFVDaGFyKSkpOworICAgICAgICBtX2RhdGEgPSBtX2xlbmd0aCA/IHN0YXRpY19j
YXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpKSA6IDA7CiAg
ICAgfQogCiAgICAgflN0cmluZ0J1ZmZlcigpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgaWYgKG5ld0xlbmd0aCA+IG1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAobmV3TGVu
Z3RoID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFVDaGFy
KSkKICAgICAgICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgbV9kYXRhID0gc3RhdGlj
X2Nhc3Q8VUNoYXIqPihmYXN0UmVhbGxvYyhtX2RhdGEsIG5ld0xlbmd0aCAqIHNpemVvZihVQ2hh
cikpKTsKKyAgICAgICAgICAgIG1fZGF0YSA9IG1fbGVuZ3RoID8gc3RhdGljX2Nhc3Q8VUNoYXIq
PihmYXN0UmVhbGxvYyhtX2RhdGEsIG5ld0xlbmd0aCAqIHNpemVvZihVQ2hhcikpKSA6IDA7CiAg
ICAgICAgIH0KICAgICAgICAgbV9sZW5ndGggPSBuZXdMZW5ndGg7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGU5MWRhNmJlZDMyNGY1Mzk5OTNhZmY5YTBiNzYwOGYzYTNjZjkxNzYuLmE1NjQ3ZTVmYjUw
N2I0Yjc0OTRmNWNkODE4ZjhlYjRmODgwNDlkNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEgKzEsMjIgQEAK
KzIwMTEtMDItMjMgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGZhc3RNYWxsb2MoMCkgc2hvdWxk
IG5vdCBiZSBzdXBwb3J0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU1MDk3CisKKyAgICAgICAgRXZlcnkgY2FsbCB0byBmYXN0TWFsbG9jKDApIG1h
eSBiZSBhIHBlcmYgcHJvYmxlbSBvciBidWcuCisgICAgICAgIFRoaXMgYXNzZXJ0aW9uIHdhcyBh
ZGRlZCBhZnRlciBkaXNjdXNzaW9uIHdpdGggbWpzIGFuZCBhbmRlcnNjYSBvbiAjd2Via2l0Lgor
CisgICAgICAgIEp1c3QgZml4aW5nIGFsbCB0aGVzZSBjYWxsc2l0ZXMgdG8gbm90IGV2ZXIgY2F1
c2UgYSBtYWxsb2MoMCkuCisKKyAgICAgICAgKiBkb20vRGVjb2RlZERhdGFEb2N1bWVudFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyOjphcHBl
bmRCeXRlcyk6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNhbm9uaWNhbGl6ZWRUaXRsZSk6CisgICAgICAgICogbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50V3JpdGVyOjplbmRJZk5vdExvYWRpbmdNYWlu
UmVzb3VyY2UpOgorICAgICAgICAqIGxvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRSZXNvdXJjZURlY29kZXI6OmZsdXNoKToKKwogPT0gUm9sbGVk
IG92ZXIgdG8gQ2hhbmdlTG9nLTIwMTEtMDYtMDQgPT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9EZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9EZWNvZGVkRGF0YURvY3VtZW50UGFyc2VyLmNwcAppbmRleCA5NzViMWI1MWIxOTk3MzdlOWFl
ZTgwMjBkMDU2Njk3MTFjMDNjZDgxLi5hZDk4ODllYzhlYjZhZWJkZjJkYjQ1ZGQ3Nzk2NDQ5Yjkz
YTgxNDA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRGVjb2RlZERhdGFEb2N1bWVu
dFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RlY29kZWREYXRhRG9jdW1lbnRQ
YXJzZXIuY3BwCkBAIC00Myw3ICs0Myw5IEBAIHZvaWQgRGVjb2RlZERhdGFEb2N1bWVudFBhcnNl
cjo6YXBwZW5kQnl0ZXMoRG9jdW1lbnRXcml0ZXIqIHdyaXRlciAsIGNvbnN0IGNoYXIqCiAgICAg
ICAgIHJldHVybjsKIAogICAgIFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIgPSB3cml0ZXIt
PmNyZWF0ZURlY29kZXJJZk5lZWRlZCgpOwotICAgIFN0cmluZyBkZWNvZGVkID0gZGVjb2Rlci0+
ZGVjb2RlKGRhdGEsIGxlbmd0aCk7CisgICAgU3RyaW5nIGRlY29kZWQ7CisgICAgaWYgKGxlbmd0
aCkKKyAgICAgICAgZGVjb2RlZCA9IGRlY29kZXItPmRlY29kZShkYXRhLCBsZW5ndGgpOwogICAg
IGlmIChzaG91bGRGbHVzaCkKICAgICAgICAgZGVjb2RlZCArPSBkZWNvZGVyLT5mbHVzaCgpOwog
ICAgIGlmIChkZWNvZGVkLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xv
YWRlci9Eb2N1bWVudFdyaXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRG9jdW1lbnRX
cml0ZXIuY3BwCmluZGV4IDJmYzAyZDFjZjJlNzVlODE3NDY5ZGVkZmIxMGUwMDI5MmQ4MzQ1NzIu
Ljc4NDg4MjczMWUwYmJkMTVlMDlmMDU1ODFiMDNjZmIyYmRhNjM1N2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9Eb2N1bWVudFdyaXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0RvY3VtZW50V3JpdGVyLmNwcApAQCAtMjE5LDcgKzIxOSw4IEBAIHZvaWQgRG9j
dW1lbnRXcml0ZXI6OmVuZElmTm90TG9hZGluZ01haW5SZXNvdXJjZSgpCiAgICAgLy8gc28gd2Un
bGwgYWRkIGEgcHJvdGVjdGl2ZSByZWZjb3VudAogICAgIFJlZlB0cjxGcmFtZT4gcHJvdGVjdG9y
KG1fZnJhbWUpOwogCi0gICAgLy8gbWFrZSBzdXJlIG5vdGhpbmcncyBsZWZ0IGluIHRoZXJlCisg
ICAgLy8gRklYTUU6IFRoaXMgaXMgaW50ZW5kZWQgdG8gZmx1c2ggdGhlIGRlY29kZXIuIEkgYW0g
bm90IHN1cmUgdGhhdCBpdCBpcyBzdGlsbCBuZWVkZWQuCisgICAgLy8gQ2VydGFpbmx5IHdlIGNv
dWxkIGV4cG9zZSBhIGNsZWFuZXIgd2F5IHRvIGRvIHRoaXMuCiAgICAgYWRkRGF0YSgwLCAwLCB0
cnVlKTsKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5maW5pc2hQYXJzaW5nKCk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>