<?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>63469</bug_id>
          
          <creation_ts>2011-06-27 11:06:20 -0700</creation_ts>
          <short_desc>Clean up integer clamping functions in MathExtras.h and support arbitrary numeric types and limits.</short_desc>
          <delta_ts>2011-06-28 11:26:26 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Luke Macpherson">macpherson</reporter>
          <assigned_to name="Luke Macpherson">macpherson</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>inferno</cc>
    
    <cc>jamesr</cc>
    
    <cc>macpherson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>428100</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 11:06:20 -0700</bug_when>
    <thetext>Clean up integer clamping functions in MathExtras.h and support arbitrary numeric types and limits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428103</commentid>
    <comment_count>1</comment_count>
      <attachid>98750</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 11:10:55 -0700</bug_when>
    <thetext>Created attachment 98750
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428136</commentid>
    <comment_count>2</comment_count>
      <attachid>98750</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 11:33:53 -0700</bug_when>
    <thetext>Comment on attachment 98750
Patch

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

&gt; Source/JavaScriptCore/wtf/MathExtras.h:214
&gt; +template&lt;typename T&gt; inline T actualMinimum() {return std::numeric_limits&lt;T&gt;::min();}
&gt; +template&lt;&gt; inline float actualMinimum() {return -std::numeric_limits&lt;float&gt;::max();}
&gt; +template&lt;&gt; inline double actualMinimum() {return -std::numeric_limits&lt;double&gt;::max();}
&gt; +template&lt;typename T&gt; inline T actualMaximum() { return std::numeric_limits&lt;T&gt;::max();}

I think the name “actualMinimum” is a little confusing. It’s like we are having an argument with the designers of numeric_limits in our code. It would be better to use a term that aims for clarity without trying to reuse the same term numeric_limits uses.

If we can’t think of a great name, then I think given how we are using these functions now we should just call them defaultMinimumForClamp and defaultMaximumForClamp for now. Can always rename later.

We normally use spaces inside { } in WebKit code, so the lines above should have some additional spaces added.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:216
&gt; +template&lt;typename To, typename From&gt; inline To clampTo(const From value, const To min = actualMinimum&lt;To&gt;(), const To max = actualMaximum&lt;To&gt;())

The const here have no effect. You should leave them out.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:221
&gt; +    if (static_cast&lt;double&gt;(value) &gt;= static_cast&lt;double&gt;(max))
&gt; +        return max;
&gt; +    if (static_cast&lt;double&gt;(value) &lt;= static_cast&lt;double&gt;(min))
&gt; +        return min;

I don’t think this is a good technique. Converting everything to a double will make this unnecessarily inefficient.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:227
&gt; +    return clampTo&lt;int, double&gt;(value);

You should be able to call this as clampTo&lt;int&gt; here, and the same in all the other functions. I do not think you have to specify double explicitly, and I think it’s better style to not specify it.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:252
&gt; +    return clampTo&lt;int, unsigned&gt;(value);

It seems terrible to convert an unsigned to a double just to clamp it and turn it into an int. I don’t think this is a good change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428203</commentid>
    <comment_count>3</comment_count>
      <attachid>98771</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 12:59:49 -0700</bug_when>
    <thetext>Created attachment 98771
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428205</commentid>
    <comment_count>4</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 13:02:52 -0700</bug_when>
    <thetext>I think this addresses the specific issues mentioned in Darin&apos;s review.

I&apos;ve only added a parameter-type overload for doubles, as personally I don&apos;t think this is very productive as you&apos;d need to add a function for every &quot;From&quot; type, which defeats the purpose of having templates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428216</commentid>
    <comment_count>5</comment_count>
      <attachid>98771</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 13:15:53 -0700</bug_when>
    <thetext>Comment on attachment 98771
Patch

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

Better, but there is a problem here I’d like to see fixed before landing.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:233
&gt; +template&lt;typename To&gt; inline To clampTo(double value, To min = defaultMinimumForClamp&lt;To&gt;(), To max = defaultMaximumForClamp&lt;To&gt;())
&gt; +{
&gt; +    return clampTo&lt;To, double, double&gt;(value, min, max);
&gt; +}

You misunderstood me, I think. This overload should not be needed. The version above with From should work automatically. I tested this with a simple test program and it worked. Please leave this out.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:247
&gt; +    return clampTo&lt;int&gt;(value, 0);

You might find you need 0.0 here instead of 0.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:252
&gt; +    return clampTo&lt;int, float&gt;(value);

You should not need the &quot;float&quot; here.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:257
&gt; +    return clampTo&lt;int, float&gt;(value, 0);

Or here. Although you might need to use 0.0f instead of 0.

&gt; Source/JavaScriptCore/wtf/MathExtras.h:262
&gt; +    return clampTo&lt;int, unsigned&gt;(value, 0);

You should not need the unsigned here. But you may need to use 0U instead of 0.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428218</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 13:17:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;ve only added a parameter-type overload for doubles, as personally I don&apos;t think this is very productive as you&apos;d need to add a function for every &quot;From&quot; type, which defeats the purpose of having templates.

I wasn’t asking for an overload. Hope my review comments make that clear. I can post my test application to demonstrate what I mean about automatically choosing the correct template if it’s still not clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428248</commentid>
    <comment_count>7</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 13:50:42 -0700</bug_when>
    <thetext>Oh, got it. You&apos;re right I misunderstood - didn&apos;t realize the compiler could infer the template type from the parameter type. That does come in handy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428276</commentid>
    <comment_count>8</comment_count>
      <attachid>98782</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 14:09:57 -0700</bug_when>
    <thetext>Created attachment 98782
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428285</commentid>
    <comment_count>9</comment_count>
      <attachid>98782</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 14:16:45 -0700</bug_when>
    <thetext>Comment on attachment 98782
Patch

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

&gt; Source/JavaScriptCore/wtf/MathExtras.h:216
&gt; +template&lt;typename To, typename From, typename Intermediate&gt; inline To clampTo(From value, To min = defaultMinimumForClamp&lt;To&gt;(), To max = defaultMaximumForClamp&lt;To&gt;())

I’m not sure why we need this ability to have an intermediate type different from &quot;From&quot; nor why we need the typecasts on the left sides of the if statements.

Nothing in this patch takes advantage of either of those. Why not just use From and drop the third template argument?

&gt; Source/JavaScriptCore/wtf/MathExtras.h:257
&gt; +    return clampTo&lt;int&gt;(value, 0);

It’s unfortunate that the template function will include an extra check:

    if (value &lt;= 0)
        return 0;

Maybe we can live with this, but it seems unlikely the compiler will be smart enough to optimize it out. Maybe you should leave the function that clamps unsigned to integer alone for now, since the old version is more efficient than the template version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428415</commentid>
    <comment_count>10</comment_count>
      <attachid>98782</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 16:03:35 -0700</bug_when>
    <thetext>Comment on attachment 98782
Patch

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

&gt;&gt; Source/JavaScriptCore/wtf/MathExtras.h:216
&gt;&gt; +template&lt;typename To, typename From, typename Intermediate&gt; inline To clampTo(From value, To min = defaultMinimumForClamp&lt;To&gt;(), To max = defaultMaximumForClamp&lt;To&gt;())
&gt; 
&gt; I’m not sure why we need this ability to have an intermediate type different from &quot;From&quot; nor why we need the typecasts on the left sides of the if statements.
&gt; 
&gt; Nothing in this patch takes advantage of either of those. Why not just use From and drop the third template argument?

I think there may be some corner cases where it is needed.
1) clampTo&lt;int&gt;((unsigned short)foo, bar, baz); // tricky because the runtime supplied range may not fit inside an unsigned short.
2) clampTo&lt;unsigned&gt;((int)foo); // tricky because UINT_MAX does not fit inside int.
3) clampTo&lt;int&gt;((float)foo); // slightly wrong because float can&apos;t hold int without some loss of precision, so the caller may want to use a double here if precision is important.

I anticipate there might be places in the CSS code dealing with shorts and unsigned shorts that are not clamped correctly right now that could use these corner cases.

&gt;&gt; Source/JavaScriptCore/wtf/MathExtras.h:257
&gt;&gt; +    return clampTo&lt;int&gt;(value, 0);
&gt; 
&gt; It’s unfortunate that the template function will include an extra check:
&gt; 
&gt;     if (value &lt;= 0)
&gt;         return 0;
&gt; 
&gt; Maybe we can live with this, but it seems unlikely the compiler will be smart enough to optimize it out. Maybe you should leave the function that clamps unsigned to integer alone for now, since the old version is more efficient than the template version.

Because value is range restricted to values &gt;= 0 by the unsigned type the compiler should know that this is equivalent to if (value == 0) return 0; return value; When I inlined it with a constant value it was optimized out. I wasn&apos;t able to find anywhere in the source tree where this function was actually called with unsigned input, so I can&apos;t be sure what the compiled output would look like, but then again it&apos;s not worth messing up the code to provide a function that is never called either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428425</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 16:14:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think there may be some corner cases where it is needed.

So you plan to use it directly later? I don’t object to the concept, but I am not sure how someone would use it.

It sounds like it’s going to be easy to accidentally use this incorrectly!

&gt; 1) clampTo&lt;int&gt;((unsigned short)foo, bar, baz); // tricky because the runtime supplied range may not fit inside an unsigned short.

Sure that makes sense.

&gt; 2) clampTo&lt;unsigned&gt;((int)foo); // tricky because UINT_MAX does not fit inside int.

Are we going to just leave this, then, as a trap for a future programmers to fall into? I don’t like functions that are hard to call correctly.

&gt; 3) clampTo&lt;int&gt;((float)foo); // slightly wrong because float can&apos;t hold int without some loss of precision, so the caller may want to use a double here if precision is important.

Since we have this function, this is not just a theoretical question. I do understand that a float can’t hold an int. But does it give the wrong answer? What cases fail? Are there really cases where using a double will give us a correct answer?

&gt; I anticipate there might be places in the CSS code dealing with shorts and unsigned shorts that are not clamped correctly right now that could use these corner cases.

The question isn’t whether code “could use” this, but rather what the clear simple rules for using this function are. I want something easy to use correctly and hard to use incorrectly.

&gt; When I inlined it with a constant value it was optimized out.

Good news.

&gt; I wasn&apos;t able to find anywhere in the source tree where this function was actually called with unsigned input, so I can&apos;t be sure what the compiled output would look like, but then again it&apos;s not worth messing up the code to provide a function that is never called either.

If nobody uses the function, then I suggest we remove it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428548</commentid>
    <comment_count>12</comment_count>
      <attachid>98838</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 18:28:24 -0700</bug_when>
    <thetext>Created attachment 98838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428555</commentid>
    <comment_count>13</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 18:36:30 -0700</bug_when>
    <thetext>Turned out there were two unused functions. Removing them both reduced the number of From types to float and double. The only float From type remaining was used for conversion to int. Given that it was losing precision I have made it use double as well, such that the template type only takes double now.

This takes care of all the tricky cases, and means that it can be safely called for all numeric output types. l have specialized long long to cause an error on link if anyone tries to use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428557</commentid>
    <comment_count>14</comment_count>
      <attachid>98841</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-27 18:42:25 -0700</bug_when>
    <thetext>Created attachment 98841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428560</commentid>
    <comment_count>15</comment_count>
      <attachid>98841</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-27 18:47:01 -0700</bug_when>
    <thetext>Comment on attachment 98841
Patch

I still don’t understand why we have to convert the float to a double to convert it to an int. I understand that int has more precision than a float does in the range of int, but I don’t understand why we can’t do a correct conversion without first converting to double. At some point I would love to have an answer to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428564</commentid>
    <comment_count>16</comment_count>
      <attachid>98841</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 19:03:05 -0700</bug_when>
    <thetext>Comment on attachment 98841
Patch

Attachment 98841 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8945611</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428580</commentid>
    <comment_count>17</comment_count>
      <attachid>98841</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 20:13:02 -0700</bug_when>
    <thetext>Comment on attachment 98841
Patch

Attachment 98841 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8950497</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428600</commentid>
    <comment_count>18</comment_count>
      <attachid>98841</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-27 21:11:48 -0700</bug_when>
    <thetext>Comment on attachment 98841
Patch

Attachment 98841 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8945643</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428928</commentid>
    <comment_count>19</comment_count>
      <attachid>98933</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-28 09:30:27 -0700</bug_when>
    <thetext>Created attachment 98933
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428929</commentid>
    <comment_count>20</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-06-28 09:33:10 -0700</bug_when>
    <thetext>Last patch restores original int clampTo(unsigned) function - apparently used in platform code outside the plain webkit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429023</commentid>
    <comment_count>21</comment_count>
      <attachid>98933</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-28 11:26:20 -0700</bug_when>
    <thetext>Comment on attachment 98933
Patch

Clearing flags on attachment: 98933

Committed r89943: &lt;http://trac.webkit.org/changeset/89943&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429024</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-28 11:26:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98750</attachid>
            <date>2011-06-27 11:10:55 -0700</date>
            <delta_ts>2011-06-27 12:59:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63469-20110628041052.patch</filename>
            <type>text/plain</type>
            <size>5037</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDYtMjcgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCBpbnRlZ2VyIGNsYW1waW5nIGZ1bmN0aW9ucyBpbiBNYXRoRXh0cmFzLmggYW5kIHN1cHBvcnQg
YXJiaXRyYXJ5IG51bWVyaWMgdHlwZXMgYW5kIGxpbWl0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDY5CisKKyAgICAgICAgKiB3dGYvTWF0aEV4
dHJhcy5oOgorICAgICAgICAoYWN0dWFsTWluaW11bSk6CisgICAgICAgIFZlcnNpb24gb2Ygc3Rk
OjpudW1lcmljX2xpbWl0czo6bWluKCkgdGhhdCByZXR1cm5zIHRoZSBsYXJnZXN0IG5lZ2F0aXZl
IHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICAgICAgKGFjdHVhbE1heGltdW0p
OgorICAgICAgICBTeW1tZXRyaWMgYWxpYXMgZm9yIHN0ZDo6bnVtZXJpY19saW1pdHM6Om1heCgp
CisgICAgICAgIChjbGFtcFRvKToKKyAgICAgICAgTmV3IHRlbXBsYXRlZCBjbGFtcGluZyBmdW5j
dGlvbiB0aGF0IHN1cHBvcnRzIGFyYml0cmFyeSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzLgorICAg
ICAgICAoY2xhbXBUb0ludGVnZXIpOgorICAgICAgICBVc2UgbmV3IGNsYW1wVG8gdGVtcGxhdGUu
CisgICAgICAgIChjbGFtcFRvRmxvYXQpOgorICAgICAgICBVc2UgbmV3IGNsYW1wVG8gdGVtcGxh
dGUuCisgICAgICAgIChjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKToKKyAgICAgICAgVXNlIG5ldyBj
bGFtcFRvIHRlbXBsYXQuCisKIDIwMTEtMDYtMjcgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGdu
c0Bnbm9tZS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguIE9uZSBtb3JlIGZp
bGVkIG1pc3NpbmcgZHVyaW5nIGRpc3RjaGVjaywgZm9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gODk4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcxICsyMDcsNDkg
QEAgaW5saW5lIGZsb2F0IGRlZzJ0dXJuKGZsb2F0IGQpIHsgcmV0dXJuIAogaW5saW5lIGZsb2F0
IHJhZDJncmFkKGZsb2F0IHIpIHsgcmV0dXJuIHIgKiAyMDAuMGYgLyBwaUZsb2F0OyB9CiBpbmxp
bmUgZmxvYXQgZ3JhZDJyYWQoZmxvYXQgZykgeyByZXR1cm4gZyAqIHBpRmxvYXQgLyAyMDAuMGY7
IH0KIAotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihkb3VibGUgeCkKKy8vIHN0ZDo6bnVtZXJp
Y19saW1pdHM8VD46Om1pbigpIHJldHVybnMgdGhlIHNtYWxsZXN0IHBvc2l0aXZlIHZhbHVlIGZv
ciBmbG9hdGluZyBwb2ludCB0eXBlcwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgYWN0
dWFsTWluaW11bSgpIHtyZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxUPjo6bWluKCk7fQordGVt
cGxhdGU8PiBpbmxpbmUgZmxvYXQgYWN0dWFsTWluaW11bSgpIHtyZXR1cm4gLXN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjptYXgoKTt9Cit0ZW1wbGF0ZTw+IGlubGluZSBkb3VibGUgYWN0dWFs
TWluaW11bSgpIHtyZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7fQor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgYWN0dWFsTWF4aW11bSgpIHsgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8VD46Om1heCgpO30KKwordGVtcGxhdGU8dHlwZW5hbWUgVG8sIHR5
cGVuYW1lIEZyb20+IGlubGluZSBUbyBjbGFtcFRvKGNvbnN0IEZyb20gdmFsdWUsIGNvbnN0IFRv
IG1pbiA9IGFjdHVhbE1pbmltdW08VG8+KCksIGNvbnN0IFRvIG1heCA9IGFjdHVhbE1heGltdW08
VG8+KCkpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpID49IHN0YXRpY19j
YXN0PGRvdWJsZT4obWF4KSkKKyAgICAgICAgcmV0dXJuIG1heDsKKyAgICBpZiAoc3RhdGljX2Nh
c3Q8ZG91YmxlPih2YWx1ZSkgPD0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtaW4pKQorICAgICAgICBy
ZXR1cm4gbWluOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxUbz4odmFsdWUpOworfQorCitpbmxp
bmUgaW50IGNsYW1wVG9JbnRlZ2VyKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY2xhbXBU
bzxpbnQsIGRvdWJsZT4odmFsdWUpOworfQorCitpbmxpbmUgZmxvYXQgY2xhbXBUb0Zsb2F0KGRv
dWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY2xhbXBUbzxmbG9hdCwgZG91YmxlPih2YWx1ZSk7
Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcihkb3VibGUgdmFsdWUpCit7
CisgICAgcmV0dXJuIGNsYW1wVG88aW50LCBkb3VibGU+KHZhbHVlLCAwKTsKK30KKworaW5saW5l
IGludCBjbGFtcFRvSW50ZWdlcihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY2xhbXBUbzxp
bnQsIGZsb2F0Pih2YWx1ZSk7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb1Bvc2l0aXZlSW50ZWdl
cihmbG9hdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQsIGZsb2F0Pih2YWx1ZSwg
MCk7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb0ludGVnZXIodW5zaWduZWQgdmFsdWUpCiB7Ci0g
ICAgY29uc3QgZG91YmxlIGludE1heCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgY29uc3QgZG91YmxlIGludE1pbiA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgCi0gICAg
aWYgKHggPj0gaW50TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKLSAgICBpZiAoeCA8PSBpbnRNaW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1pbigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOwot
fQotCi1pbmxpbmUgZmxvYXQgY2xhbXBUb0Zsb2F0KGRvdWJsZSB4KQotewotICAgIGNvbnN0IGRv
dWJsZSBmbG9hdE1heCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46Om1heCgpKTsKLSAgICBjb25zdCBkb3VibGUgZmxvYXRNaW4gPSAtc3RhdGljX2Nhc3Q8
ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpOwotICAgIAotICAgIGlm
ICh4ID49IGZsb2F0TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9h
dD46Om1heCgpOwotICAgIGlmICh4IDw9IGZsb2F0TWluKQotICAgICAgICByZXR1cm4gLXN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHgpOwotfQotCi1pbmxpbmUgaW50IGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIoZG91YmxlIHgp
Ci17Ci0gICAgY29uc3QgZG91YmxlIGludE1heCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50TWF4KQot
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBpZiAo
eCA8PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih4
KTsKLX0KLQotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihmbG9hdCB4KQotewotICAgIGNvbnN0
IGZsb2F0IGludE1heCA9IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKTsKLSAgICBjb25zdCBmbG9hdCBpbnRNaW4gPSBzdGF0aWNfY2FzdDxmbG9hdD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50
TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAg
ICBpZiAoeCA8PSBpbnRNaW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOwotfQotCi1pbmxpbmUg
aW50IGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIoZmxvYXQgeCkKLXsKLSAgICBjb25zdCBmbG9hdCBp
bnRNYXggPSBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBpZiAoeCA8PSAwKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih4KTsKLX0KLQotaW5saW5lIGludCBjbGFt
cFRvSW50ZWdlcih1bnNpZ25lZCB4KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludE1heCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAg
ICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOworICAgIHJl
dHVybiBjbGFtcFRvPGludCwgdW5zaWduZWQ+KHZhbHVlKTsKIH0KIAogI2lmICFDT01QSUxFUihN
U1ZDKSAmJiAhKENPTVBJTEVSKFJWQ1QpICYmIFBMQVRGT1JNKEJSRVdNUCkpICYmICFPUyhTT0xB
UklTKSAmJiAhT1MoU1lNQklBTikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98771</attachid>
            <date>2011-06-27 12:59:49 -0700</date>
            <delta_ts>2011-06-27 14:09:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63469-20110628055947.patch</filename>
            <type>text/plain</type>
            <size>5513</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDYtMjcgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCBpbnRlZ2VyIGNsYW1waW5nIGZ1bmN0aW9ucyBpbiBNYXRoRXh0cmFzLmggYW5kIHN1cHBvcnQg
YXJiaXRyYXJ5IG51bWVyaWMgdHlwZXMgYW5kIGxpbWl0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDY5CisKKyAgICAgICAgKiB3dGYvTWF0aEV4
dHJhcy5oOgorICAgICAgICAoYWN0dWFsTWluaW11bSk6CisgICAgICAgIFZlcnNpb24gb2Ygc3Rk
OjpudW1lcmljX2xpbWl0czo6bWluKCkgdGhhdCByZXR1cm5zIHRoZSBsYXJnZXN0IG5lZ2F0aXZl
IHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICAgICAgKGFjdHVhbE1heGltdW0p
OgorICAgICAgICBTeW1tZXRyaWMgYWxpYXMgZm9yIHN0ZDo6bnVtZXJpY19saW1pdHM6Om1heCgp
CisgICAgICAgIChjbGFtcFRvKToKKyAgICAgICAgTmV3IHRlbXBsYXRlZCBjbGFtcGluZyBmdW5j
dGlvbiB0aGF0IHN1cHBvcnRzIGFyYml0cmFyeSBpbnB1dCBhbmQgb3V0cHV0IHR5cGVzLgorICAg
ICAgICAoY2xhbXBUb0ludGVnZXIpOgorICAgICAgICBVc2UgbmV3IGNsYW1wVG8gdGVtcGxhdGUu
CisgICAgICAgIChjbGFtcFRvRmxvYXQpOgorICAgICAgICBVc2UgbmV3IGNsYW1wVG8gdGVtcGxh
dGUuCisgICAgICAgIChjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKToKKyAgICAgICAgVXNlIG5ldyBj
bGFtcFRvIHRlbXBsYXQuCisKIDIwMTEtMDYtMjcgIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGdu
c0Bnbm9tZS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguIE9uZSBtb3JlIGZp
bGVkIG1pc3NpbmcgZHVyaW5nIGRpc3RjaGVjaywgZm9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gODk4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcxICsyMDcsNTkg
QEAgaW5saW5lIGZsb2F0IGRlZzJ0dXJuKGZsb2F0IGQpIHsgcmV0dXJuIAogaW5saW5lIGZsb2F0
IHJhZDJncmFkKGZsb2F0IHIpIHsgcmV0dXJuIHIgKiAyMDAuMGYgLyBwaUZsb2F0OyB9CiBpbmxp
bmUgZmxvYXQgZ3JhZDJyYWQoZmxvYXQgZykgeyByZXR1cm4gZyAqIHBpRmxvYXQgLyAyMDAuMGY7
IH0KIAotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihkb3VibGUgeCkKKy8vIHN0ZDo6bnVtZXJp
Y19saW1pdHM8VD46Om1pbigpIHJldHVybnMgdGhlIHNtYWxsZXN0IHBvc2l0aXZlIHZhbHVlIGZv
ciBmbG9hdGluZyBwb2ludCB0eXBlcwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgZGVm
YXVsdE1pbmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8VD46Om1p
bigpOyB9Cit0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBkZWZhdWx0TWluaW11bUZvckNsYW1wKCkg
eyByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsgfQordGVtcGxhdGU8
PiBpbmxpbmUgZG91YmxlIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7IHJldHVybiAtc3RkOjpu
dW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsgfQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFQgZGVmYXVsdE1heGltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8VD46Om1heCgpOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRvLCB0eXBlbmFtZSBGcm9tLCB0
eXBlbmFtZSBJbnRlcm1lZGlhdGU+IGlubGluZSBUbyBjbGFtcFRvKEZyb20gdmFsdWUsIFRvIG1p
biA9IGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXA8VG8+KCksIFRvIG1heCA9IGRlZmF1bHRNYXhpbXVt
Rm9yQ2xhbXA8VG8+KCkpCit7CisgICAgaWYgKHN0YXRpY19jYXN0PEludGVybWVkaWF0ZT4odmFs
dWUpID49IHN0YXRpY19jYXN0PEludGVybWVkaWF0ZT4obWF4KSkKKyAgICAgICAgcmV0dXJuIG1h
eDsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8SW50ZXJtZWRpYXRlPih2YWx1ZSkgPD0gc3RhdGljX2Nh
c3Q8SW50ZXJtZWRpYXRlPihtaW4pKQorICAgICAgICByZXR1cm4gbWluOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxUbz4odmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUbywgdHlwZW5h
bWUgRnJvbT4gaW5saW5lIFRvIGNsYW1wVG8oRnJvbSB2YWx1ZSwgVG8gbWluID0gZGVmYXVsdE1p
bmltdW1Gb3JDbGFtcDxUbz4oKSwgVG8gbWF4ID0gZGVmYXVsdE1heGltdW1Gb3JDbGFtcDxUbz4o
KSkKK3sKKyAgICByZXR1cm4gY2xhbXBUbzxUbywgRnJvbSwgRnJvbT4odmFsdWUsIG1pbiwgbWF4
KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVG8+IGlubGluZSBUbyBjbGFtcFRvKGRvdWJsZSB2
YWx1ZSwgVG8gbWluID0gZGVmYXVsdE1pbmltdW1Gb3JDbGFtcDxUbz4oKSwgVG8gbWF4ID0gZGVm
YXVsdE1heGltdW1Gb3JDbGFtcDxUbz4oKSkKK3sKKyAgICByZXR1cm4gY2xhbXBUbzxUbywgZG91
YmxlLCBkb3VibGU+KHZhbHVlLCBtaW4sIG1heCk7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb0lu
dGVnZXIoZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvPGludD4odmFsdWUpOwor
fQorCitpbmxpbmUgZmxvYXQgY2xhbXBUb0Zsb2F0KGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gY2xhbXBUbzxmbG9hdD4odmFsdWUpOworfQorCitpbmxpbmUgaW50IGNsYW1wVG9Qb3NpdGl2
ZUludGVnZXIoZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvPGludD4odmFsdWUs
IDApOworfQorCitpbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKGZsb2F0IHZhbHVlKQoreworICAg
IHJldHVybiBjbGFtcFRvPGludCwgZmxvYXQ+KHZhbHVlKTsKK30KKworaW5saW5lIGludCBjbGFt
cFRvUG9zaXRpdmVJbnRlZ2VyKGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvPGlu
dCwgZmxvYXQ+KHZhbHVlLCAwKTsKK30KKworaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcih1bnNp
Z25lZCB2YWx1ZSkKIHsKLSAgICBjb25zdCBkb3VibGUgaW50TWF4ID0gc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICBjb25zdCBkb3VibGUg
aW50TWluID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1p
bigpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIGlmICh4IDw9IGludE1pbikKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oeCk7Ci19Ci0KLWlubGluZSBmbG9hdCBjbGFtcFRvRmxvYXQoZG91YmxlIHgp
Ci17Ci0gICAgY29uc3QgZG91YmxlIGZsb2F0TWF4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpOwotICAgIGNvbnN0IGRvdWJsZSBmbG9hdE1p
biA9IC1zdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgo
KSk7Ci0gICAgCi0gICAgaWYgKHggPj0gZmxvYXRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCk7Ci0gICAgaWYgKHggPD0gZmxvYXRNaW4pCi0gICAg
ICAgIHJldHVybiAtc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxmbG9hdD4oeCk7Ci19Ci0KLWlubGluZSBpbnQgY2xhbXBUb1Bvc2l0aXZl
SW50ZWdlcihkb3VibGUgeCkKLXsKLSAgICBjb25zdCBkb3VibGUgaW50TWF4ID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICAKLSAgICBp
ZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpOwotICAgIGlmICh4IDw9IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHgpOwotfQotCi1pbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKGZsb2F0
IHgpCi17Ci0gICAgY29uc3QgZmxvYXQgaW50TWF4ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotICAgIGNvbnN0IGZsb2F0IGludE1pbiA9IHN0
YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKLSAgICAK
LSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOwotICAgIGlmICh4IDw9IGludE1pbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
eCk7Ci19Ci0KLWlubGluZSBpbnQgY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcihmbG9hdCB4KQotewot
ICAgIGNvbnN0IGZsb2F0IGludE1heCA9IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIGlmICh4IDw9IDAp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOwotfQot
Ci1pbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKHVuc2lnbmVkIHgpCi17Ci0gICAgY29uc3QgdW5z
aWduZWQgaW50TWF4ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8
aW50Pjo6bWF4KCkpOwotICAgIAotICAgIGlmICh4ID49IGludE1heCkKLSAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oeCk7CisgICAgcmV0dXJuIGNsYW1wVG88aW50LCB1bnNpZ25lZD4odmFsdWUsIDApOwog
fQogCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICEoQ09NUElMRVIoUlZDVCkgJiYgUExBVEZPUk0o
QlJFV01QKSkgJiYgIU9TKFNPTEFSSVMpICYmICFPUyhTWU1CSUFOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98782</attachid>
            <date>2011-06-27 14:09:57 -0700</date>
            <delta_ts>2011-06-27 18:28:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63469-20110628070954.patch</filename>
            <type>text/plain</type>
            <size>5309</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4MzcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDYtMjcgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCBpbnRlZ2VyIGNsYW1waW5nIGZ1bmN0aW9ucyBpbiBNYXRoRXh0cmFzLmggYW5kIHN1cHBvcnQg
YXJiaXRyYXJ5IG51bWVyaWMgdHlwZXMgYW5kIGxpbWl0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDY5CisKKyAgICAgICAgKiB3dGYvTWF0aEV4
dHJhcy5oOgorICAgICAgICAoZGVmYXVsdE1pbmltdW1Gb3JDbGFtcCk6CisgICAgICAgIFZlcnNp
b24gb2Ygc3RkOjpudW1lcmljX2xpbWl0czo6bWluKCkgdGhhdCByZXR1cm5zIHRoZSBsYXJnZXN0
IG5lZ2F0aXZlIHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICAgICAgKGRlZmF1
bHRNYXhpbXVtRm9yQ2xhbXApOgorICAgICAgICBTeW1tZXRyaWMgYWxpYXMgZm9yIHN0ZDo6bnVt
ZXJpY19saW1pdHM6Om1heCgpCisgICAgICAgIChjbGFtcFRvKToKKyAgICAgICAgTmV3IHRlbXBs
YXRlZCBjbGFtcGluZyBmdW5jdGlvbiB0aGF0IHN1cHBvcnRzIGFyYml0cmFyeSBpbnB1dCBhbmQg
b3V0cHV0IHR5cGVzLgorICAgICAgICAoY2xhbXBUb0ludGVnZXIpOgorICAgICAgICBVc2UgbmV3
IGNsYW1wVG8gdGVtcGxhdGUuCisgICAgICAgIChjbGFtcFRvRmxvYXQpOgorICAgICAgICBVc2Ug
bmV3IGNsYW1wVG8gdGVtcGxhdGUuCisgICAgICAgIChjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKToK
KyAgICAgICAgVXNlIG5ldyBjbGFtcFRvIHRlbXBsYXRlLgorCiAyMDExLTA2LTI3ICBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgIDxnbnNAZ25vbWUub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVp
bGQgZml4LiBPbmUgbW9yZSBmaWxlZCBtaXNzaW5nIGR1cmluZyBkaXN0Y2hlY2ssIGZvcgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9uIDg5ODMxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIwNyw3MSArMjA3LDU0IEBAIGlubGluZSBmbG9hdCBkZWcydHVybihmbG9hdCBkKSB7IHJl
dHVybiAKIGlubGluZSBmbG9hdCByYWQyZ3JhZChmbG9hdCByKSB7IHJldHVybiByICogMjAwLjBm
IC8gcGlGbG9hdDsgfQogaW5saW5lIGZsb2F0IGdyYWQycmFkKGZsb2F0IGcpIHsgcmV0dXJuIGcg
KiBwaUZsb2F0IC8gMjAwLjBmOyB9CiAKLWlubGluZSBpbnQgY2xhbXBUb0ludGVnZXIoZG91Ymxl
IHgpCisvLyBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSByZXR1cm5zIHRoZSBzbWFsbGVz
dCBwb3NpdGl2ZSB2YWx1ZSBmb3IgZmxvYXRpbmcgcG9pbnQgdHlwZXMKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IGlubGluZSBUIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7IHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPFQ+OjptaW4oKTsgfQordGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgZGVmYXVs
dE1pbmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
bWF4KCk7IH0KK3RlbXBsYXRlPD4gaW5saW5lIGRvdWJsZSBkZWZhdWx0TWluaW11bUZvckNsYW1w
KCkgeyByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7IH0KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGRlZmF1bHRNYXhpbXVtRm9yQ2xhbXAoKSB7IHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
bywgdHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgSW50ZXJtZWRpYXRlPiBpbmxpbmUgVG8gY2xhbXBU
byhGcm9tIHZhbHVlLCBUbyBtaW4gPSBkZWZhdWx0TWluaW11bUZvckNsYW1wPFRvPigpLCBUbyBt
YXggPSBkZWZhdWx0TWF4aW11bUZvckNsYW1wPFRvPigpKQoreworICAgIGlmIChzdGF0aWNfY2Fz
dDxJbnRlcm1lZGlhdGU+KHZhbHVlKSA+PSBzdGF0aWNfY2FzdDxJbnRlcm1lZGlhdGU+KG1heCkp
CisgICAgICAgIHJldHVybiBtYXg7CisgICAgaWYgKHN0YXRpY19jYXN0PEludGVybWVkaWF0ZT4o
dmFsdWUpIDw9IHN0YXRpY19jYXN0PEludGVybWVkaWF0ZT4obWluKSkKKyAgICAgICAgcmV0dXJu
IG1pbjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VG8+KHZhbHVlKTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgVG8sIHR5cGVuYW1lIEZyb20+IGlubGluZSBUbyBjbGFtcFRvKEZyb20gdmFsdWUs
IFRvIG1pbiA9IGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXA8VG8+KCksIFRvIG1heCA9IGRlZmF1bHRN
YXhpbXVtRm9yQ2xhbXA8VG8+KCkpCit7CisgICAgcmV0dXJuIGNsYW1wVG88VG8sIEZyb20sIEZy
b20+KHZhbHVlLCBtaW4sIG1heCk7Cit9CisKK2lubGluZSBpbnQgY2xhbXBUb0ludGVnZXIoZG91
YmxlIHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvPGludD4odmFsdWUpOworfQorCitpbmxp
bmUgZmxvYXQgY2xhbXBUb0Zsb2F0KGRvdWJsZSB2YWx1ZSkKK3sKKyAgICByZXR1cm4gY2xhbXBU
bzxmbG9hdD4odmFsdWUpOworfQorCitpbmxpbmUgaW50IGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIo
ZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBjbGFtcFRvPGludD4odmFsdWUsIDApOworfQor
CitpbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKGZsb2F0IHZhbHVlKQoreworICAgIHJldHVybiBj
bGFtcFRvPGludD4odmFsdWUpOworfQorCitpbmxpbmUgaW50IGNsYW1wVG9Qb3NpdGl2ZUludGVn
ZXIoZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIGNsYW1wVG88aW50Pih2YWx1ZSwgMCk7Cit9
CisKK2lubGluZSBpbnQgY2xhbXBUb0ludGVnZXIodW5zaWduZWQgdmFsdWUpCiB7Ci0gICAgY29u
c3QgZG91YmxlIGludE1heCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSk7Ci0gICAgY29uc3QgZG91YmxlIGludE1pbiA9IHN0YXRpY19jYXN0PGRv
dWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgCi0gICAgaWYgKHgg
Pj0gaW50TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KTsKLSAgICBpZiAoeCA8PSBpbnRNaW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOwotfQotCi1p
bmxpbmUgZmxvYXQgY2xhbXBUb0Zsb2F0KGRvdWJsZSB4KQotewotICAgIGNvbnN0IGRvdWJsZSBm
bG9hdE1heCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
Om1heCgpKTsKLSAgICBjb25zdCBkb3VibGUgZmxvYXRNaW4gPSAtc3RhdGljX2Nhc3Q8ZG91Ymxl
PihzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4KCkpOwotICAgIAotICAgIGlmICh4ID49
IGZsb2F0TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1h
eCgpOwotICAgIGlmICh4IDw9IGZsb2F0TWluKQotICAgICAgICByZXR1cm4gLXN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgp
OwotfQotCi1pbmxpbmUgaW50IGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIoZG91YmxlIHgpCi17Ci0g
ICAgY29uc3QgZG91YmxlIGludE1heCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50TWF4KQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBpZiAoeCA8PSAw
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih4KTsKLX0K
LQotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihmbG9hdCB4KQotewotICAgIGNvbnN0IGZsb2F0
IGludE1heCA9IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKTsKLSAgICBjb25zdCBmbG9hdCBpbnRNaW4gPSBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50TWF4KQot
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBpZiAo
eCA8PSBpbnRNaW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1p
bigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOwotfQotCi1pbmxpbmUgaW50IGNs
YW1wVG9Qb3NpdGl2ZUludGVnZXIoZmxvYXQgeCkKLXsKLSAgICBjb25zdCBmbG9hdCBpbnRNYXgg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0g
ICAgCi0gICAgaWYgKHggPj0gaW50TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKLSAgICBpZiAoeCA8PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih4KTsKLX0KLQotaW5saW5lIGludCBjbGFtcFRvSW50
ZWdlcih1bnNpZ25lZCB4KQotewotICAgIGNvbnN0IHVuc2lnbmVkIGludE1heCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICAKLSAg
ICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOworICAgIHJldHVybiBj
bGFtcFRvPGludD4odmFsdWUsIDApOwogfQogCiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICEoQ09N
UElMRVIoUlZDVCkgJiYgUExBVEZPUk0oQlJFV01QKSkgJiYgIU9TKFNPTEFSSVMpICYmICFPUyhT
WU1CSUFOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98838</attachid>
            <date>2011-06-27 18:28:24 -0700</date>
            <delta_ts>2011-06-27 18:42:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63469-20110628112821.patch</filename>
            <type>text/plain</type>
            <size>4769</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDYtMjcgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCBpbnRlZ2VyIGNsYW1waW5nIGZ1bmN0aW9ucyBpbiBNYXRoRXh0cmFzLmggYW5kIHN1cHBvcnQg
YXJiaXRyYXJ5IG51bWVyaWMgdHlwZXMgYW5kIGxpbWl0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDY5CisKKyAgICAgICAgKiB3dGYvTWF0aEV4
dHJhcy5oOgorICAgICAgICAoZGVmYXVsdE1pbmltdW1Gb3JDbGFtcCk6CisgICAgICAgIFZlcnNp
b24gb2Ygc3RkOjpudW1lcmljX2xpbWl0czo6bWluKCkgdGhhdCByZXR1cm5zIHRoZSBsYXJnZXN0
IG5lZ2F0aXZlIHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICAgICAgKGRlZmF1
bHRNYXhpbXVtRm9yQ2xhbXApOgorICAgICAgICBTeW1tZXRyaWMgYWxpYXMgZm9yIHN0ZDo6bnVt
ZXJpY19saW1pdHM6Om1heCgpCisgICAgICAgIChjbGFtcFRvKToKKyAgICAgICAgTmV3IHRlbXBs
YXRlZCBjbGFtcGluZyBmdW5jdGlvbiB0aGF0IHN1cHBvcnRzIGFyYml0cmFyeSBvdXRwdXQgdHlw
ZXMuCisgICAgICAgIChjbGFtcFRvSW50ZWdlcik6CisgICAgICAgIFVzZSBuZXcgY2xhbXBUbyB0
ZW1wbGF0ZS4KKyAgICAgICAgKGNsYW1wVG9GbG9hdCk6CisgICAgICAgIFVzZSBuZXcgY2xhbXBU
byB0ZW1wbGF0ZS4KKyAgICAgICAgKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIpOgorICAgICAgICBV
c2UgbmV3IGNsYW1wVG8gdGVtcGxhdGUuCisKIDIwMTEtMDYtMjcgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguIE9u
ZSBtb3JlIGZpbGVkIG1pc3NpbmcgZHVyaW5nIGRpc3RjaGVjaywgZm9yCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gODk4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcx
ICsyMDcsMzkgQEAgaW5saW5lIGZsb2F0IGRlZzJ0dXJuKGZsb2F0IGQpIHsgcmV0dXJuIAogaW5s
aW5lIGZsb2F0IHJhZDJncmFkKGZsb2F0IHIpIHsgcmV0dXJuIHIgKiAyMDAuMGYgLyBwaUZsb2F0
OyB9CiBpbmxpbmUgZmxvYXQgZ3JhZDJyYWQoZmxvYXQgZykgeyByZXR1cm4gZyAqIHBpRmxvYXQg
LyAyMDAuMGY7IH0KIAotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihkb3VibGUgeCkKLXsKLSAg
ICBjb25zdCBkb3VibGUgaW50TWF4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsKLSAgICBjb25zdCBkb3VibGUgaW50TWluID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKLSAgICAKLSAgICBp
ZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpOwotICAgIGlmICh4IDw9IGludE1pbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oeCk7Ci19
CisvLyBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSByZXR1cm5zIHRoZSBzbWFsbGVzdCBw
b3NpdGl2ZSB2YWx1ZSBmb3IgZmxvYXRpbmcgcG9pbnQgdHlwZXMKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBUIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7IHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+OjptaW4oKTsgfQordGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgZGVmYXVsdE1p
bmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCk7IH0KK3RlbXBsYXRlPD4gaW5saW5lIGRvdWJsZSBkZWZhdWx0TWluaW11bUZvckNsYW1wKCkg
eyByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7IH0KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBUIGRlZmF1bHRNYXhpbXVtRm9yQ2xhbXAoKSB7IHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQogCi1pbmxpbmUgZmxvYXQgY2xhbXBUb0Zs
b2F0KGRvdWJsZSB4KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgY2xhbXBUbyhkb3Vi
bGUgdmFsdWUsIFQgbWluID0gZGVmYXVsdE1pbmltdW1Gb3JDbGFtcDxUPigpLCBUIG1heCA9IGRl
ZmF1bHRNYXhpbXVtRm9yQ2xhbXA8VD4oKSkKIHsKLSAgICBjb25zdCBkb3VibGUgZmxvYXRNYXgg
PSBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7
Ci0gICAgY29uc3QgZG91YmxlIGZsb2F0TWluID0gLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBmbG9hdE1h
eCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKLSAg
ICBpZiAoeCA8PSBmbG9hdE1pbikKLSAgICAgICAgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KTsKKyAgICBp
ZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXgpKQorICAgICAgICByZXR1cm4gbWF4
OworICAgIGlmICh2YWx1ZSA8PSBzdGF0aWNfY2FzdDxkb3VibGU+KG1pbikpCisgICAgICAgIHJl
dHVybiBtaW47CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsKIH0KIAotaW5saW5l
IGludCBjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKGRvdWJsZSB4KQoraW5saW5lIGludCBjbGFtcFRv
SW50ZWdlcihkb3VibGUgdmFsdWUpCiB7Ci0gICAgY29uc3QgZG91YmxlIGludE1heCA9IHN0YXRp
Y19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgCi0g
ICAgaWYgKHggPj0gaW50TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKTsKLSAgICBpZiAoeCA8PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50Pih4KTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHZhbHVlKTsK
IH0KIAotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihmbG9hdCB4KQoraW5saW5lIGZsb2F0IGNs
YW1wVG9GbG9hdChkb3VibGUgdmFsdWUpCiB7Ci0gICAgY29uc3QgZmxvYXQgaW50TWF4ID0gc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotICAgIGNv
bnN0IGZsb2F0IGludE1pbiA9IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIGlmICh4IDw9IGludE1pbikK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4oeCk7CisgICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KHZhbHVl
KTsKIH0KIAotaW5saW5lIGludCBjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKGZsb2F0IHgpCitpbmxp
bmUgaW50IGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIoZG91YmxlIHZhbHVlKQogewotICAgIGNvbnN0
IGZsb2F0IGludE1heCA9IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIGlmICh4IDw9IDApCi0gICAgICAg
IHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOworICAgIHJldHVybiBj
bGFtcFRvPGludD4odmFsdWUsIDApOwogfQogCi1pbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKHVu
c2lnbmVkIHgpCitpbmxpbmUgaW50IGNsYW1wVG9JbnRlZ2VyKGZsb2F0IHZhbHVlKQogewotICAg
IGNvbnN0IHVuc2lnbmVkIGludE1heCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHgpOworICAgIHJldHVybiBjbGFtcFRvPGludD4odmFsdWUpOwogfQog
CiAjaWYgIUNPTVBJTEVSKE1TVkMpICYmICEoQ09NUElMRVIoUlZDVCkgJiYgUExBVEZPUk0oQlJF
V01QKSkgJiYgIU9TKFNPTEFSSVMpICYmICFPUyhTWU1CSUFOKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98841</attachid>
            <date>2011-06-27 18:42:25 -0700</date>
            <delta_ts>2011-06-28 09:30:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63469-20110628114222.patch</filename>
            <type>text/plain</type>
            <size>4893</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDYtMjcgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCBpbnRlZ2VyIGNsYW1waW5nIGZ1bmN0aW9ucyBpbiBNYXRoRXh0cmFzLmggYW5kIHN1cHBvcnQg
YXJiaXRyYXJ5IG51bWVyaWMgdHlwZXMgYW5kIGxpbWl0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDY5CisKKyAgICAgICAgKiB3dGYvTWF0aEV4
dHJhcy5oOgorICAgICAgICAoZGVmYXVsdE1pbmltdW1Gb3JDbGFtcCk6CisgICAgICAgIFZlcnNp
b24gb2Ygc3RkOjpudW1lcmljX2xpbWl0czo6bWluKCkgdGhhdCByZXR1cm5zIHRoZSBsYXJnZXN0
IG5lZ2F0aXZlIHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICAgICAgKGRlZmF1
bHRNYXhpbXVtRm9yQ2xhbXApOgorICAgICAgICBTeW1tZXRyaWMgYWxpYXMgZm9yIHN0ZDo6bnVt
ZXJpY19saW1pdHM6Om1heCgpCisgICAgICAgIChjbGFtcFRvKToKKyAgICAgICAgTmV3IHRlbXBs
YXRlZCBjbGFtcGluZyBmdW5jdGlvbiB0aGF0IHN1cHBvcnRzIGFyYml0cmFyeSBvdXRwdXQgdHlw
ZXMuCisgICAgICAgIChjbGFtcFRvSW50ZWdlcik6CisgICAgICAgIFVzZSBuZXcgY2xhbXBUbyB0
ZW1wbGF0ZS4KKyAgICAgICAgKGNsYW1wVG9GbG9hdCk6CisgICAgICAgIFVzZSBuZXcgY2xhbXBU
byB0ZW1wbGF0ZS4KKyAgICAgICAgKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIpOgorICAgICAgICBV
c2UgbmV3IGNsYW1wVG8gdGVtcGxhdGUuCisKIDIwMTEtMDYtMjcgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguIE9u
ZSBtb3JlIGZpbGVkIG1pc3NpbmcgZHVyaW5nIGRpc3RjaGVjaywgZm9yCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gODk4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDcx
ICsyMDcsNDAgQEAgaW5saW5lIGZsb2F0IGRlZzJ0dXJuKGZsb2F0IGQpIHsgcmV0dXJuIAogaW5s
aW5lIGZsb2F0IHJhZDJncmFkKGZsb2F0IHIpIHsgcmV0dXJuIHIgKiAyMDAuMGYgLyBwaUZsb2F0
OyB9CiBpbmxpbmUgZmxvYXQgZ3JhZDJyYWQoZmxvYXQgZykgeyByZXR1cm4gZyAqIHBpRmxvYXQg
LyAyMDAuMGY7IH0KIAotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihkb3VibGUgeCkKLXsKLSAg
ICBjb25zdCBkb3VibGUgaW50TWF4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsKLSAgICBjb25zdCBkb3VibGUgaW50TWluID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKLSAgICAKLSAgICBp
ZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpOwotICAgIGlmICh4IDw9IGludE1pbikKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oeCk7Ci19
CisvLyBzdGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptaW4oKSByZXR1cm5zIHRoZSBzbWFsbGVzdCBw
b3NpdGl2ZSB2YWx1ZSBmb3IgZmxvYXRpbmcgcG9pbnQgdHlwZXMKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IGlubGluZSBUIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7IHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPFQ+OjptaW4oKTsgfQordGVtcGxhdGU8PiBpbmxpbmUgZmxvYXQgZGVmYXVsdE1p
bmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6bWF4
KCk7IH0KK3RlbXBsYXRlPD4gaW5saW5lIGRvdWJsZSBkZWZhdWx0TWluaW11bUZvckNsYW1wKCkg
eyByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6bWF4KCk7IH0KK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IGlubGluZSBUIGRlZmF1bHRNYXhpbXVtRm9yQ2xhbXAoKSB7IHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPFQ+OjptYXgoKTsgfQogCi1pbmxpbmUgZmxvYXQgY2xhbXBUb0Zs
b2F0KGRvdWJsZSB4KQordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgY2xhbXBUbyhkb3Vi
bGUgdmFsdWUsIFQgbWluID0gZGVmYXVsdE1pbmltdW1Gb3JDbGFtcDxUPigpLCBUIG1heCA9IGRl
ZmF1bHRNYXhpbXVtRm9yQ2xhbXA8VD4oKSkKIHsKLSAgICBjb25zdCBkb3VibGUgZmxvYXRNYXgg
PSBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKSk7
Ci0gICAgY29uc3QgZG91YmxlIGZsb2F0TWluID0gLXN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBmbG9hdE1h
eCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKLSAg
ICBpZiAoeCA8PSBmbG9hdE1pbikKLSAgICAgICAgcmV0dXJuIC1zdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6bWF4KCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih4KTsKKyAgICBp
ZiAodmFsdWUgPj0gc3RhdGljX2Nhc3Q8ZG91YmxlPihtYXgpKQorICAgICAgICByZXR1cm4gbWF4
OworICAgIGlmICh2YWx1ZSA8PSBzdGF0aWNfY2FzdDxkb3VibGU+KG1pbikpCisgICAgICAgIHJl
dHVybiBtaW47CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQ+KHZhbHVlKTsKIH0KK3RlbXBsYXRl
PD4gaW5saW5lIGxvbmcgbG9uZyBpbnQgY2xhbXBUbyhkb3VibGUsIGxvbmcgbG9uZyBpbnQsIGxv
bmcgbG9uZyBpbnQpOyAvLyBjbGFtcFRvIGRvZXMgbm90IHN1cHBvcnQgbG9uZyBsb25nIGludHMu
CiAKLWlubGluZSBpbnQgY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcihkb3VibGUgeCkKK2lubGluZSBp
bnQgY2xhbXBUb0ludGVnZXIoZG91YmxlIHZhbHVlKQogewotICAgIGNvbnN0IGRvdWJsZSBpbnRN
YXggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkp
OwotICAgIAotICAgIGlmICh4ID49IGludE1heCkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgaWYgKHggPD0gMCkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oeCk7CisgICAgcmV0dXJuIGNsYW1wVG88aW50
Pih2YWx1ZSk7CiB9CiAKLWlubGluZSBpbnQgY2xhbXBUb0ludGVnZXIoZmxvYXQgeCkKK2lubGlu
ZSBmbG9hdCBjbGFtcFRvRmxvYXQoZG91YmxlIHZhbHVlKQogewotICAgIGNvbnN0IGZsb2F0IGlu
dE1heCA9IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
KTsKLSAgICBjb25zdCBmbG9hdCBpbnRNaW4gPSBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50TWF4KQotICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBpZiAoeCA8
PSBpbnRNaW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOworICAgIHJldHVybiBjbGFtcFRvPGZs
b2F0Pih2YWx1ZSk7CiB9CiAKLWlubGluZSBpbnQgY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcihmbG9h
dCB4KQoraW5saW5lIGludCBjbGFtcFRvUG9zaXRpdmVJbnRlZ2VyKGRvdWJsZSB2YWx1ZSkKIHsK
LSAgICBjb25zdCBmbG9hdCBpbnRNYXggPSBzdGF0aWNfY2FzdDxmbG9hdD4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50TWF4KQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICBpZiAoeCA8PSAw
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih4KTsKKyAg
ICByZXR1cm4gY2xhbXBUbzxpbnQ+KHZhbHVlLCAwKTsKIH0KIAotaW5saW5lIGludCBjbGFtcFRv
SW50ZWdlcih1bnNpZ25lZCB4KQoraW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihmbG9hdCB2YWx1
ZSkKIHsKLSAgICBjb25zdCB1bnNpZ25lZCBpbnRNYXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50
TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih4KTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHZh
bHVlKTsKIH0KIAogI2lmICFDT01QSUxFUihNU1ZDKSAmJiAhKENPTVBJTEVSKFJWQ1QpICYmIFBM
QVRGT1JNKEJSRVdNUCkpICYmICFPUyhTT0xBUklTKSAmJiAhT1MoU1lNQklBTikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98933</attachid>
            <date>2011-06-28 09:30:27 -0700</date>
            <delta_ts>2011-06-28 11:26:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63469-20110629023024.patch</filename>
            <type>text/plain</type>
            <size>4798</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAK
KzIwMTEtMDYtMjcgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDbGVhbiB1
cCBpbnRlZ2VyIGNsYW1waW5nIGZ1bmN0aW9ucyBpbiBNYXRoRXh0cmFzLmggYW5kIHN1cHBvcnQg
YXJiaXRyYXJ5IG51bWVyaWMgdHlwZXMgYW5kIGxpbWl0cy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYzNDY5CisKKyAgICAgICAgKiB3dGYvTWF0aEV4
dHJhcy5oOgorICAgICAgICAoZGVmYXVsdE1pbmltdW1Gb3JDbGFtcCk6CisgICAgICAgIFZlcnNp
b24gb2Ygc3RkOjpudW1lcmljX2xpbWl0czo6bWluKCkgdGhhdCByZXR1cm5zIHRoZSBsYXJnZXN0
IG5lZ2F0aXZlIHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcy4KKyAgICAgICAgKGRlZmF1
bHRNYXhpbXVtRm9yQ2xhbXApOgorICAgICAgICBTeW1tZXRyaWMgYWxpYXMgZm9yIHN0ZDo6bnVt
ZXJpY19saW1pdHM6Om1heCgpCisgICAgICAgIChjbGFtcFRvKToKKyAgICAgICAgTmV3IHRlbXBs
YXRlZCBjbGFtcGluZyBmdW5jdGlvbiB0aGF0IHN1cHBvcnRzIGFyYml0cmFyeSBvdXRwdXQgdHlw
ZXMuCisgICAgICAgIChjbGFtcFRvSW50ZWdlcik6CisgICAgICAgIFVzZSBuZXcgY2xhbXBUbyB0
ZW1wbGF0ZS4KKyAgICAgICAgKGNsYW1wVG9GbG9hdCk6CisgICAgICAgIFVzZSBuZXcgY2xhbXBU
byB0ZW1wbGF0ZS4KKyAgICAgICAgKGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIpOgorICAgICAgICBV
c2UgbmV3IGNsYW1wVG8gdGVtcGxhdGUuCisKIDIwMTEtMDYtMjcgIEd1c3Rhdm8gTm9yb25oYSBT
aWx2YSAgPGduc0Bnbm9tZS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXguIE9u
ZSBtb3JlIGZpbGVkIG1pc3NpbmcgZHVyaW5nIGRpc3RjaGVjaywgZm9yCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gODk4NTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDY4
ICsyMDcsNDYgQEAgaW5saW5lIGZsb2F0IGRlZzJ0dXJuKGZsb2F0IGQpIHsgcmV0dXJuIAogaW5s
aW5lIGZsb2F0IHJhZDJncmFkKGZsb2F0IHIpIHsgcmV0dXJuIHIgKiAyMDAuMGYgLyBwaUZsb2F0
OyB9CiBpbmxpbmUgZmxvYXQgZ3JhZDJyYWQoZmxvYXQgZykgeyByZXR1cm4gZyAqIHBpRmxvYXQg
LyAyMDAuMGY7IH0KIAotaW5saW5lIGludCBjbGFtcFRvSW50ZWdlcihkb3VibGUgeCkKKy8vIHN0
ZDo6bnVtZXJpY19saW1pdHM8VD46Om1pbigpIHJldHVybnMgdGhlIHNtYWxsZXN0IHBvc2l0aXZl
IHZhbHVlIGZvciBmbG9hdGluZyBwb2ludCB0eXBlcwordGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5s
aW5lIFQgZGVmYXVsdE1pbmltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8VD46Om1pbigpOyB9Cit0ZW1wbGF0ZTw+IGlubGluZSBmbG9hdCBkZWZhdWx0TWluaW11bUZv
ckNsYW1wKCkgeyByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsgfQor
dGVtcGxhdGU8PiBpbmxpbmUgZG91YmxlIGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXAoKSB7IHJldHVy
biAtc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjptYXgoKTsgfQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gaW5saW5lIFQgZGVmYXVsdE1heGltdW1Gb3JDbGFtcCgpIHsgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8VD46Om1heCgpOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBU
IGNsYW1wVG8oZG91YmxlIHZhbHVlLCBUIG1pbiA9IGRlZmF1bHRNaW5pbXVtRm9yQ2xhbXA8VD4o
KSwgVCBtYXggPSBkZWZhdWx0TWF4aW11bUZvckNsYW1wPFQ+KCkpCiB7Ci0gICAgY29uc3QgZG91
YmxlIGludE1heCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKSk7Ci0gICAgY29uc3QgZG91YmxlIGludE1pbiA9IHN0YXRpY19jYXN0PGRvdWJsZT4o
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgCi0gICAgaWYgKHggPj0gaW50
TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAg
ICBpZiAoeCA8PSBpbnRNaW4pCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOworICAgIGlmICh2YWx1
ZSA+PSBzdGF0aWNfY2FzdDxkb3VibGU+KG1heCkpCisgICAgICAgIHJldHVybiBtYXg7CisgICAg
aWYgKHZhbHVlIDw9IHN0YXRpY19jYXN0PGRvdWJsZT4obWluKSkKKyAgICAgICAgcmV0dXJuIG1p
bjsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4odmFsdWUpOwogfQordGVtcGxhdGU8PiBpbmxp
bmUgbG9uZyBsb25nIGludCBjbGFtcFRvKGRvdWJsZSwgbG9uZyBsb25nIGludCwgbG9uZyBsb25n
IGludCk7IC8vIGNsYW1wVG8gZG9lcyBub3Qgc3VwcG9ydCBsb25nIGxvbmcgaW50cy4KIAotaW5s
aW5lIGZsb2F0IGNsYW1wVG9GbG9hdChkb3VibGUgeCkKK2lubGluZSBpbnQgY2xhbXBUb0ludGVn
ZXIoZG91YmxlIHZhbHVlKQogewotICAgIGNvbnN0IGRvdWJsZSBmbG9hdE1heCA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpKTsKLSAgICBjb25z
dCBkb3VibGUgZmxvYXRNaW4gPSAtc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6bWF4KCkpOwotICAgIAotICAgIGlmICh4ID49IGZsb2F0TWF4KQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwotICAgIGlmICh4IDw9
IGZsb2F0TWluKQotICAgICAgICByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpt
YXgoKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpOworICAgIHJldHVybiBjbGFt
cFRvPGludD4odmFsdWUpOwogfQogCi1pbmxpbmUgaW50IGNsYW1wVG9Qb3NpdGl2ZUludGVnZXIo
ZG91YmxlIHgpCitpbmxpbmUgZmxvYXQgY2xhbXBUb0Zsb2F0KGRvdWJsZSB2YWx1ZSkKIHsKLSAg
ICBjb25zdCBkb3VibGUgaW50TWF4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpKTsKLSAgICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwotICAgIGlmICh4IDw9IDAp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHgpOworICAg
IHJldHVybiBjbGFtcFRvPGZsb2F0Pih2YWx1ZSk7CiB9CiAKLWlubGluZSBpbnQgY2xhbXBUb0lu
dGVnZXIoZmxvYXQgeCkKK2lubGluZSBpbnQgY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcihkb3VibGUg
dmFsdWUpCiB7Ci0gICAgY29uc3QgZmxvYXQgaW50TWF4ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpOwotICAgIGNvbnN0IGZsb2F0IGludE1pbiA9
IHN0YXRpY19jYXN0PGZsb2F0PihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKTsKLSAg
ICAKLSAgICBpZiAoeCA+PSBpbnRNYXgpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOwotICAgIGlmICh4IDw9IGludE1pbikKLSAgICAgICAgcmV0dXJuIHN0
ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4oeCk7CisgICAgcmV0dXJuIGNsYW1wVG88aW50Pih2YWx1ZSwgMCk7CiB9CiAKLWlubGluZSBp
bnQgY2xhbXBUb1Bvc2l0aXZlSW50ZWdlcihmbG9hdCB4KQoraW5saW5lIGludCBjbGFtcFRvSW50
ZWdlcihmbG9hdCB2YWx1ZSkKIHsKLSAgICBjb25zdCBmbG9hdCBpbnRNYXggPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSk7Ci0gICAgCi0gICAgaWYg
KHggPj0gaW50TWF4KQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKTsKLSAgICBpZiAoeCA8PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50Pih4KTsKKyAgICByZXR1cm4gY2xhbXBUbzxpbnQ+KHZhbHVlKTsKIH0KIAog
aW5saW5lIGludCBjbGFtcFRvSW50ZWdlcih1bnNpZ25lZCB4KQogewogICAgIGNvbnN0IHVuc2ln
bmVkIGludE1heCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKTsKLSAgICAKKwogICAgIGlmICh4ID49IGludE1heCkKICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4oeCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>