<?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>26030</bug_id>
          
          <creation_ts>2009-05-26 14:23:36 -0700</creation_ts>
          <short_desc>[Chromium] Chromium Linux ignores background color on &lt;select&gt;.</short_desc>
          <delta_ts>2009-06-10 10:41:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Langley">agl</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>123194</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-05-26 14:23:36 -0700</bug_when>
    <thetext>Chromium Linux ignores background color on &lt;select&gt;. We always just draw the default gray gradient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>123195</commentid>
    <comment_count>1</comment_count>
      <attachid>30682</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-05-26 14:24:41 -0700</bug_when>
    <thetext>Created attachment 30682
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124040</commentid>
    <comment_count>2</comment_count>
      <attachid>30682</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-02 13:23:30 -0700</bug_when>
    <thetext>Comment on attachment 30682
patch

Style issues.  no { } on single line ifs.

Don&apos;t we have a more efficient way to set this?

paint.setARGB(o-&gt;style()-&gt;backgroundColor().alpha(), o-&gt;style()-&gt;backgroundColor().red(), o-&gt;style()-&gt;backgroundColor().green(), o-&gt;style()-&gt;backgroundColor().blue());

There should be a way to pass a Color object to a SkPaint, I&apos;m sure we have such a function somewhere.  color has a .rgb() accessor which probably returns a skpaint compatible int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124061</commentid>
    <comment_count>3</comment_count>
      <attachid>30881</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-06-02 15:06:07 -0700</bug_when>
    <thetext>Created attachment 30881
patch

Changes:

1) Color::rgb does indeed return a value which is
   compatible. However, it seems be a bit of a leap that the
   internal format of both Color and SkColor is register
   ARGB. Other platforms define specific constructors in
   Color. However, both RGBA32 and SkColor unwrap to an
   unsigned int, so we can&apos;t do that here.

   I&apos;ve used .rgb() because it works and it&apos;s cleaner. I
   guess layout tests will catch if either side ever
   changes.

2) html4.css was specifiying a default background-color for
   buttons which meant that we could never tell if the page
   was setting one (which we should observe) or not (in
   which case we should draw our default button). So I added
   a CSS snippet to override this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124062</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-02 15:08:39 -0700</bug_when>
    <thetext>I&apos;m pretty sure I added a COMPILE_ASSERT in ColorSkia.cpp that ensures that the internal formats are identical.  We could/should add an SkColor cast operator to Color as necessary though!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124064</commentid>
    <comment_count>5</comment_count>
      <attachid>30881</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-02 15:13:21 -0700</bug_when>
    <thetext>Comment on attachment 30881
patch

Still has the { } style issues.

The .css file should be a real .css file on disk and go through the normal processing scripts, no?


I think I would have written this:
+        if (!o-&gt;style()-&gt;hasBackground()) {
+            paint.setARGB(0xff, 0xe9, 0xe9, 0xe9);
+        } else {
+            paint.setColor(o-&gt;style()-&gt;backgroundColor().rgb());
+        }

As something like:

static Color defaultButtonGrey(0xff, 0xe9, 0xe9, 0xe9);
Color buttonBackground = !o-&gt;style()-&gt;hasBackground() ? o-&gt;style()-&gt;backgroundColor() : defaultButtonGrey;
paint.setColor(buttonBackground.rgb());

But this makes me wonder if CSS buttons (which do not go through the button theme calls) will look correct w/o a background?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124200</commentid>
    <comment_count>6</comment_count>
      <attachid>30920</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-06-03 12:29:01 -0700</bug_when>
    <thetext>Created attachment 30920
patch

Next attempt:

This time we remove all the magic colour values from the paintButtonLike
function, except for a fallback colour. For painting &lt;select&gt;s and buttons, we
generate the family of colours needed by converting to HSL and changing the
luminance.

With this in hand, we set the CSS ButtonFace colour and the &lt;select&gt;
background-color and everything works out exactly the way is used to, except
that &lt;select&gt;&apos;s with background colours are now handled correctly.

With this code, we could also handling drawing buttons with background-colors,
but that&apos;s something for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124259</commentid>
    <comment_count>7</comment_count>
      <attachid>30920</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-03 17:16:10 -0700</bug_when>
    <thetext>Comment on attachment 30920
patch

I would have given this color a name:
 129         return 0xffdddddd;

static Color someNiceNameForTheColor(0xffdddddd);
return someNiceNameForTheColor;

Braces get their own line:
 264 static float brightenColorCap(float in) {


Single line ifs don&apos;t get braces:
292     if (max == min) {
 293         hue = 0.f;
 294     } else if (max == r) {

Color functions belong on Color.h or somewhere in Skia...
 282 static SkColor brightenColor(SkColor base, float brightenAmount)

256341 static void paintButtonLike(RenderTheme* theme, RenderObject* o, const RenderObject::PaintInfo&amp; i, const IntRect&amp; rect) {
 need { on its own line too.

WK of course uses CamelCase:
 334     int final_r = 255.f * brightenColorDecode(p, q, tr);

Looks nice though! :)

r- for color stuff needing to move somewhere else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124588</commentid>
    <comment_count>8</comment_count>
      <attachid>31019</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-06-05 16:27:48 -0700</bug_when>
    <thetext>Created attachment 31019
patch

Moved the RGB-&gt;HSL conversion to Color and used the existing HSL-&gt;RGB conversion therein.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124593</commentid>
    <comment_count>9</comment_count>
      <attachid>31020</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-06-05 17:08:50 -0700</bug_when>
    <thetext>Created attachment 31020
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124594</commentid>
    <comment_count>10</comment_count>
      <attachid>31020</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-05 17:12:57 -0700</bug_when>
    <thetext>Comment on attachment 31020
patch

Looks fine.  Please add a ChangeLog when landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124595</commentid>
    <comment_count>11</comment_count>
      <attachid>31020</attachid>
    <who name="">mitz</who>
    <bug_when>2009-06-05 17:16:14 -0700</bug_when>
    <thetext>Comment on attachment 31020
patch

Why the round-trip through HSL? Can&apos;t you just make a version of Color::light() that takes a parameter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124596</commentid>
    <comment_count>12</comment_count>
      <attachid>31020</attachid>
    <who name="">mitz</who>
    <bug_when>2009-06-05 17:17:44 -0700</bug_when>
    <thetext>Comment on attachment 31020
patch

See &lt;http://trac.webkit.org/changeset/21798&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124597</commentid>
    <comment_count>13</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-06-05 17:20:35 -0700</bug_when>
    <thetext>Never mind, you want HSL, not HSV!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124598</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-06-05 17:22:00 -0700</bug_when>
    <thetext>I could change Color::light, but the scaling of RGB components didn&apos;t work for me when I was playing around with different schemes. The colours I ended up with just didn&apos;t look quite right. I think HSL is the right way to do what I want here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124599</commentid>
    <comment_count>15</comment_count>
      <attachid>31020</attachid>
    <who name="">mitz</who>
    <bug_when>2009-06-05 17:24:02 -0700</bug_when>
    <thetext>Comment on attachment 31020
patch

&gt; +    while (hue &gt;= 360.0)
&gt; +        hue -= 360.0;
&gt; +
&gt; +    // makeRGBAFromHSLA assumes that hue is in [0...1).
&gt; +    hue /= 360.0;

What is the purpose of the while loop?

&gt; +    lightness = 0.5f * (max + min);

The &quot;f&quot; seems unhelpful at best.

&gt; +    else if (lightness &lt;= 0.5f)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124600</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-06-05 17:34:30 -0700</bug_when>
    <thetext>&gt; What is the purpose of the while loop?

The spec said &quot;mod 360&quot;, which is most accurately turned into a while loop.

Considering the case where max == r (which looks most likely to overflow 720 since it has the largest constant).

We have
hue = (60.0 * ((g - b) / (max - min))) + 360.0

so (g - b) / (max - min) must be &lt; 6 in order not to overflow.

We know that max &gt; g and max &gt; b (since max == r) and that min == g or min == b.

Consider g &gt;= b, thus b == min and thus g - b &lt; max - min so the whole fraction is &lt;= 1.
The alternative case leads, via similar reasoning to the fraction being &gt;= -1.

So, we can change the while to an if. I&apos;ll do that.

The f&apos;s were a left over from when I wrote it with floats. I&apos;ll remove them, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125167</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2009-06-10 10:41:21 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/44503.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30682</attachid>
            <date>2009-05-26 14:24:41 -0700</date>
            <delta_ts>2009-06-02 15:06:07 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2558</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTYyZTBmNC4uMGFmNTNkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNS0yNiAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gTGludXggaWdub3JlcyBiYWNrZ3JvdW5kIGNvbG9yIG9uIDxz
ZWxlY3Q+LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjAzMAorICAgICAgICBodHRwOi8vY3JidWcuY29tLzEyNTk2CisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
aW50QnV0dG9uTGlrZSk6IGRyYXcgc29saWQgY29sb3Igd2hlbiBiYWNrZ3JvdW5kLWNvbG9yIGlz
IHNldC4KKwogMjAwOS0wNS0yNiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4IDk0ZWU2NGYuLjY1OTBlODkg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApA
QCAtMjYyLDcgKzI2MiwxMSBAQCBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhl
bWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iagogCiAgICAgLy8gSWYg
dGhlIGJ1dHRvbiBpcyB0b28gc21hbGwsIGZhbGxiYWNrIHRvIGRyYXdpbmcgYSBzaW5nbGUsIHNv
bGlkIGNvbG9yCiAgICAgaWYgKHJlY3Qud2lkdGgoKSA8IDUgfHwgcmVjdC5oZWlnaHQoKSA8IDUp
IHsKLSAgICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGU5LCAweGU5LCAweGU5KTsKKyAgICAg
ICAgaWYgKCFvLT5zdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkpIHsKKyAgICAgICAgICAgIHBhaW50
LnNldEFSR0IoMHhmZiwgMHhlOSwgMHhlOSwgMHhlOSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBwYWludC5zZXRBUkdCKG8tPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLmFscGhh
KCksIG8tPnN0eWxlKCktPmJhY2tncm91bmRDb2xvcigpLnJlZCgpLCBvLT5zdHlsZSgpLT5iYWNr
Z3JvdW5kQ29sb3IoKS5ncmVlbigpLCBvLT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKS5ibHVl
KCkpOworICAgICAgICB9CiAgICAgICAgIHNrcmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCBy
aWdodCwgYm90dG9tKTsKICAgICAgICAgY2FudmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjc1LDYgKzI3OSwxMyBAQCBzdGF0aWMgdm9pZCBwYWludEJ1
dHRvbkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iagogICAgIGNhbnZhcy0+ZHJhd0xpbmUocmVjdC54KCkgKyAxLCBib3R0b20gLSAxLCByaWdo
dCAtIDEsIGJvdHRvbSAtIDEsIHBhaW50KTsKICAgICBjYW52YXMtPmRyYXdMaW5lKHJlY3QueCgp
LCByZWN0LnkoKSArIDEsIHJlY3QueCgpLCBib3R0b20gLSAxLCBwYWludCk7CiAKKyAgICBza3Jl
Y3Quc2V0KHJlY3QueCgpICsgMSwgcmVjdC55KCkgKyAxLCByaWdodCAtIDEsIGJvdHRvbSAtIDEp
OworICAgIGlmIChvLT5zdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkpIHsKKyAgICAgICAgcGFpbnQu
c2V0QVJHQihvLT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKS5hbHBoYSgpLCBvLT5zdHlsZSgp
LT5iYWNrZ3JvdW5kQ29sb3IoKS5yZWQoKSwgby0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCku
Z3JlZW4oKSwgby0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkuYmx1ZSgpKTsKKyAgICAgICAg
Y2FudmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KwogICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMCwgMCwgMCk7CiAgICAgU2tQb2ludCBwWzJdOwog
ICAgIGNvbnN0IGludCBsaWdodEVuZCA9IHRoZW1lLT5pc1ByZXNzZWQobykgPyAxIDogMDsKQEAg
LTI5MSw3ICszMDIsNiBAQCBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxpa2UoUmVuZGVyVGhlbWUq
IHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iagogICAgIHBhaW50LnNldFNo
YWRlcihzKTsKICAgICBzLT51bnJlZigpOwogCi0gICAgc2tyZWN0LnNldChyZWN0LngoKSArIDEs
IHJlY3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsKICAgICBjYW52YXMtPmRyYXdS
ZWN0KHNrcmVjdCwgcGFpbnQpOwogCiAgICAgcGFpbnQuc2V0U2hhZGVyKE5VTEwpOwo=
</data>
<flag name="review"
          id="15541"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30881</attachid>
            <date>2009-06-02 15:06:07 -0700</date>
            <delta_ts>2009-06-03 12:29:01 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>3309</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTYyZTBmNC4uMGFmNTNkYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAwOS0wNS0yNiAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gTGludXggaWdub3JlcyBiYWNrZ3JvdW5kIGNvbG9yIG9uIDxz
ZWxlY3Q+LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNjAzMAorICAgICAgICBodHRwOi8vY3JidWcuY29tLzEyNTk2CisKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
aW50QnV0dG9uTGlrZSk6IGRyYXcgc29saWQgY29sb3Igd2hlbiBiYWNrZ3JvdW5kLWNvbG9yIGlz
IHNldC4KKwogMjAwOS0wNS0yNiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4IDk0ZWU2NGYuLjk2YWIwYmEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcApA
QCAtMTIzLDEwICsxMjMsMTkgQEAgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpSZW5kZXJUaGVt
ZUNocm9taXVtTGludXgoKQogewogfQogCisvLyBodG1sNC5jc3Mgc3BlY2lmaWVzIGEgY29sb3Vy
IHNvLCBpbiBvcmRlciB0byBjYXRjaCB0aGUgY2FzZSB3aGVyZSB0aGUgcGFnZQorLy8gaGFzbid0
IGV4cGxpY2l0bHkgc2V0IG9uZSwgd2Ugb3ZlcnJpZGUgaHRtbDQuY3NzIGhlcmUuIFdoZW4gYW4g
ZXhwbGljaXQKKy8vIGNvbG91ciBpc24ndCBzZXQsIHdlIGRyYXcgYSBwcmV0dHkgZ3JhZGllbnQu
CitzdGF0aWMgY29uc3QgY2hhciB0aGVtZUNocm9taXVtTGludXhTdHlsZVNoZWV0W10gPQorICAg
ICJpbnB1dFt0eXBlPVwiYnV0dG9uXCJdLCBpbnB1dFt0eXBlPVwic3VibWl0XCJdLCBpbnB1dFt0
eXBlPVwicmVzZXRcIl0sIGlucHV0W3R5cGU9XCJmaWxlXCJdOjotd2Via2l0LWZpbGUtdXBsb2Fk
LWJ1dHRvbiwgYnV0dG9uIHtcbiIKKyAgICAiICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFy
ZW50O1xuIgorICAgICJ9IjsKKwogLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxlIHNoZWV0cyB0byBt
YXRjaCB0aGVpciBtZXRyaWNzLgogU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0
cmFEZWZhdWx0U3R5bGVTaGVldCgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJB
Z2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAg
ICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1l
V2luVXNlckFnZW50U3R5bGVTaGVldCkpICsKKyAgICAgICAgICAgU3RyaW5nKHRoZW1lQ2hyb21p
dW1MaW51eFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZUNocm9taXVtTGludXhTdHlsZVNoZWV0KSAt
IDEpOwogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYVF1aXJrc1N0
eWxlU2hlZXQoKQpAQCAtMjYyLDcgKzI3MSwxMSBAQCBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbkxp
a2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iagog
CiAgICAgLy8gSWYgdGhlIGJ1dHRvbiBpcyB0b28gc21hbGwsIGZhbGxiYWNrIHRvIGRyYXdpbmcg
YSBzaW5nbGUsIHNvbGlkIGNvbG9yCiAgICAgaWYgKHJlY3Qud2lkdGgoKSA8IDUgfHwgcmVjdC5o
ZWlnaHQoKSA8IDUpIHsKLSAgICAgICAgcGFpbnQuc2V0QVJHQigweGZmLCAweGU5LCAweGU5LCAw
eGU5KTsKKyAgICAgICAgaWYgKCFvLT5zdHlsZSgpLT5oYXNCYWNrZ3JvdW5kKCkpIHsKKyAgICAg
ICAgICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHhlOSwgMHhlOSwgMHhlOSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBwYWludC5zZXRDb2xvcihvLT5zdHlsZSgpLT5iYWNrZ3JvdW5k
Q29sb3IoKS5yZ2IoKSk7CisgICAgICAgIH0KICAgICAgICAgc2tyZWN0LnNldChyZWN0LngoKSwg
cmVjdC55KCksIHJpZ2h0LCBib3R0b20pOwogICAgICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVj
dCwgcGFpbnQpOwogICAgICAgICByZXR1cm47CkBAIC0yNzUsNiArMjg4LDEzIEBAIHN0YXRpYyB2
b2lkIHBhaW50QnV0dG9uTGlrZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqCiAgICAgY2FudmFzLT5kcmF3TGluZShyZWN0LngoKSArIDEsIGJvdHRv
bSAtIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSwgcGFpbnQpOwogICAgIGNhbnZhcy0+ZHJhd0xp
bmUocmVjdC54KCksIHJlY3QueSgpICsgMSwgcmVjdC54KCksIGJvdHRvbSAtIDEsIHBhaW50KTsK
IAorICAgIHNrcmVjdC5zZXQocmVjdC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHJpZ2h0IC0gMSwg
Ym90dG9tIC0gMSk7CisgICAgaWYgKG8tPnN0eWxlKCktPmhhc0JhY2tncm91bmQoKSkgeworICAg
ICAgICBwYWludC5zZXRDb2xvcihvLT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2IoKSk7
CisgICAgICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKICAgICBwYWludC5zZXRBUkdCKDB4ZmYsIDAsIDAsIDApOwogICAgIFNrUG9p
bnQgcFsyXTsKICAgICBjb25zdCBpbnQgbGlnaHRFbmQgPSB0aGVtZS0+aXNQcmVzc2VkKG8pID8g
MSA6IDA7CkBAIC0yOTEsNyArMzExLDYgQEAgc3RhdGljIHZvaWQgcGFpbnRCdXR0b25MaWtlKFJl
bmRlclRoZW1lKiB0aGVtZSwgUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmoKICAgICBw
YWludC5zZXRTaGFkZXIocyk7CiAgICAgcy0+dW5yZWYoKTsKIAotICAgIHNrcmVjdC5zZXQocmVj
dC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHJpZ2h0IC0gMSwgYm90dG9tIC0gMSk7CiAgICAgY2Fu
dmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKIAogICAgIHBhaW50LnNldFNoYWRlcihOVUxM
KTsK
</data>
<flag name="review"
          id="15685"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30920</attachid>
            <date>2009-06-03 12:29:01 -0700</date>
            <delta_ts>2009-06-05 16:27:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7812</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1MaW51eC5jc3MgYi9XZWJDb3Jl
L2Nzcy90aGVtZUNocm9taXVtTGludXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmY4MjEwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Nzcy90aGVtZUNocm9t
aXVtTGludXguY3NzCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBUaGVzZSBzdHlsZXMgb3ZlcnJpZGUgb3Ro
ZXIgdXNlci1hZ2VudCBzdHlsZXMgZm9yIENocm9taXVtIG9uIExpbnV4LiAqLworCitzZWxlY3Qg
eworICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGRkZGQ7CisgICAgYm9yZGVyOiAwcHg7Cit9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3Bw
IGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA5
NGVlNjRmLi4wZWI1NzI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTGludXguY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hy
b21pdW1MaW51eC5jcHAKQEAgLTEyMywxMCArMTIzLDE4IEBAIFJlbmRlclRoZW1lQ2hyb21pdW1M
aW51eDo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4KCkKIHsKIH0KIAorQ29sb3IgUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4OjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29uc3QKK3sKKyAg
ICBpZiAoY3NzVmFsdWVJZCA9PSBDU1NWYWx1ZUJ1dHRvbmZhY2UpCisgICAgICAgIHJldHVybiAw
eGZmZGRkZGRkOworICAgIHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJ
ZCk7Cit9CisKIC8vIFVzZSB0aGUgV2luZG93cyBzdHlsZSBzaGVldHMgdG8gbWF0Y2ggdGhlaXIg
bWV0cmljcy4KIFN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmV4dHJhRGVmYXVsdFN0
eWxlU2hlZXQoKQogewotICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNo
ZWV0LCBzaXplb2YodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSk7CisgICAgcmV0dXJuIFN0
cmluZyh0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2Vu
dFN0eWxlU2hlZXQpKSArCisgICAgICAgICAgIFN0cmluZyh0aGVtZUNocm9taXVtTGludXhVc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVDaHJvbWl1bUxpbnV4VXNlckFnZW50U3R5bGVT
aGVldCkpOwogfQogCiBTdHJpbmcgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYVF1aXJr
c1N0eWxlU2hlZXQoKQpAQCAtMjUzLDE2ICsyNjEsOTkgQEAgdm9pZCBSZW5kZXJUaGVtZUNocm9t
aXVtTGludXg6OnNldFJhZGlvU2l6ZShSZW5kZXJTdHlsZSogc3R5bGUpIGNvbnN0CiAgICAgc2V0
Q2hlY2tib3hTaXplKHN0eWxlKTsKIH0KIAorc3RhdGljIGZsb2F0IGJyaWdodGVuQ29sb3JDYXAo
ZmxvYXQgaW4pIHsKKyAgICBpZiAoaW4gPCAwKQorICAgICAgICByZXR1cm4gaW4gKyAxLmY7Cisg
ICAgaWYgKGluID4gMSkKKyAgICAgICAgcmV0dXJuIGluIC0gMS5mOworICAgIHJldHVybiBpbjsK
K30KKworc3RhdGljIGZsb2F0IGJyaWdodGVuQ29sb3JEZWNvZGUoZmxvYXQgcCwgZmxvYXQgcSwg
ZmxvYXQgdCkgeworICAgIGlmICh0IDwgMC4xNjY2NjY2NjZmKQorICAgICAgICByZXR1cm4gcCAr
ICgocSAtIHApICogNiAqIHQpOworICAgIGlmICh0IDwgMC41ZikKKyAgICAgICAgcmV0dXJuIHE7
CisgICAgaWYgKHQgPCAwLjY2NjY2NjY2NmYpCisgICAgICAgIHJldHVybiBwICsgKChxIC0gcCkg
KiA2ICogKDAuNjY2NjY2NjY2ZiAtIHQpKTsKKyAgICByZXR1cm4gcDsKK30KKworc3RhdGljIFNr
Q29sb3IgYnJpZ2h0ZW5Db2xvcihTa0NvbG9yIGJhc2UsIGZsb2F0IGJyaWdodGVuQW1vdW50KQor
eworICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSFNMX2FuZF9IU1YKKyAgICBm
bG9hdCByID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNrQ29sb3JHZXRSKGJhc2UpKSAvIDI1NS5mOwor
ICAgIGZsb2F0IGcgPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2tDb2xvckdldEcoYmFzZSkpIC8gMjU1
LmY7CisgICAgZmxvYXQgYiA9IHN0YXRpY19jYXN0PGZsb2F0PihTa0NvbG9yR2V0QihiYXNlKSkg
LyAyNTUuZjsKKyAgICBmbG9hdCBtYXggPSBzdGQ6Om1heChzdGQ6Om1heChyLCBnKSwgYik7Cisg
ICAgZmxvYXQgbWluID0gc3RkOjptaW4oc3RkOjptaW4ociwgZyksIGIpOworCisgICAgZmxvYXQg
aHVlOworICAgIGlmIChtYXggPT0gbWluKSB7CisgICAgICAgIGh1ZSA9IDAuZjsKKyAgICB9IGVs
c2UgaWYgKG1heCA9PSByKSB7CisgICAgICAgIGh1ZSA9ICg2MC5mICogKChnIC0gYikgLyAobWF4
IC0gbWluKSkpICsgMzYwLmY7CisgICAgfSBlbHNlIGlmIChtYXggPT0gZykgeworICAgICAgICBo
dWUgPSAoNjAuZiAqICgoYiAtIHIpIC8gKG1heCAtIG1pbikpKSArIDEyMC5mOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGh1ZSA9ICg2MC5mICogKChyIC0gZykgLyAobWF4IC0gbWluKSkpICsgMjQw
LmY7CisgICAgfQorCisgICAgd2hpbGUgKGh1ZSA+PSAzNjAuZikKKyAgICAgICAgaHVlIC09IDM2
MC5mOworCisgICAgZmxvYXQgbHVtaW5hbmNlID0gMC41ZiAqIChtYXggKyBtaW4pOworICAgIGZs
b2F0IHNhdHVyYXRpb247CisgICAgaWYgKG1heCA9PSBtaW4pIHsKKyAgICAgICAgc2F0dXJhdGlv
biA9IDAuZjsKKyAgICB9IGVsc2UgaWYgKGx1bWluYW5jZSA8PSAwLjVmKSB7CisgICAgICAgIHNh
dHVyYXRpb24gPSAoKG1heCAtIG1pbikgLyAobWF4ICsgbWluKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc2F0dXJhdGlvbiA9ICgobWF4IC0gbWluKSAvICgyLmYgLSAobWF4ICsgbWluKSkpOwor
ICAgIH0KKworICAgIGx1bWluYW5jZSArPSBicmlnaHRlbkFtb3VudDsKKyAgICBpZiAobHVtaW5h
bmNlIDwgMCkKKyAgICAgICAgbHVtaW5hbmNlID0gMDsKKyAgICBpZiAobHVtaW5hbmNlID4gMSkK
KyAgICAgICAgbHVtaW5hbmNlID0gMTsKKworICAgIGZsb2F0IHE7CisgICAgaWYgKGx1bWluYW5j
ZSA8IDAuNWYpIHsKKyAgICAgICAgcSA9IGx1bWluYW5jZSAqICgxLmYgKyBzYXR1cmF0aW9uKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBxID0gbHVtaW5hbmNlICsgc2F0dXJhdGlvbiAtIChsdW1p
bmFuY2UgKiBzYXR1cmF0aW9uKTsKKyAgICB9CisKKyAgICBmbG9hdCBwID0gMiAqIGx1bWluYW5j
ZSAtIHE7CisgICAgZmxvYXQgaHVlX25vcm1hbGlzZWQgPSBodWUgLyAzNjAuZjsKKyAgICBmbG9h
dCB0ciA9IGJyaWdodGVuQ29sb3JDYXAoaHVlX25vcm1hbGlzZWQgKyAwLjMzMzMzMzNmKTsKKyAg
ICBmbG9hdCB0ZyA9IGJyaWdodGVuQ29sb3JDYXAoaHVlX25vcm1hbGlzZWQpOworICAgIGZsb2F0
IHRiID0gYnJpZ2h0ZW5Db2xvckNhcChodWVfbm9ybWFsaXNlZCAtIDAuMzMzMzMzM2YpOworCisg
ICAgaW50IGZpbmFsX3IgPSAyNTUuZiAqIGJyaWdodGVuQ29sb3JEZWNvZGUocCwgcSwgdHIpOwor
ICAgIGludCBmaW5hbF9nID0gMjU1LmYgKiBicmlnaHRlbkNvbG9yRGVjb2RlKHAsIHEsIHRnKTsK
KyAgICBpbnQgZmluYWxfYiA9IDI1NS5mICogYnJpZ2h0ZW5Db2xvckRlY29kZShwLCBxLCB0Yik7
CisKKyAgICByZXR1cm4gU2tDb2xvclNldEFSR0IoMHhmZiwgZmluYWxfciwgZmluYWxfZywgZmlu
YWxfYik7Cit9CisKIHN0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlrZShSZW5kZXJUaGVtZSogdGhl
bWUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNv
bnN0IEludFJlY3QmIHJlY3QpIHsKICAgICBTa0NhbnZhcyogY29uc3QgY2FudmFzID0gaS5jb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CiAgICAgU2tQYWludCBwYWludDsKICAg
ICBTa1JlY3Qgc2tyZWN0OwogICAgIGNvbnN0IGludCByaWdodCA9IHJlY3QueCgpICsgcmVjdC53
aWR0aCgpOwogICAgIGNvbnN0IGludCBib3R0b20gPSByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCk7
CisgICAgU2tDb2xvciBiYXNlQ29sb3IgPSBTa0NvbG9yU2V0QVJHQigweGZmLCAweGRkLCAweGRk
LCAweGRkKTsKKyAgICBpZiAoby0+c3R5bGUoKS0+aGFzQmFja2dyb3VuZCgpKQorICAgICAgICBi
YXNlQ29sb3IgPSBvLT5zdHlsZSgpLT5iYWNrZ3JvdW5kQ29sb3IoKS5yZ2IoKTsKKyAgICAvLyBP
dXIgc3RhbmRhcmQgZ3JhZGllbnQgaXMgZnJvbSAweGRkIHRvIDB4ZjguIFRoaXMgaXMgdGhlIGFt
b3VudCBvZgorICAgIC8vIGluY3JlYXNlZCBsdW1pbmFuY2UgYmV0d2VlbiB0aG9zZSB2YWx1ZXMu
CisgICAgU2tDb2xvciBsaWdodENvbG9yID0gYnJpZ2h0ZW5Db2xvcihiYXNlQ29sb3IsIDAuMTA2
KTsKIAogICAgIC8vIElmIHRoZSBidXR0b24gaXMgdG9vIHNtYWxsLCBmYWxsYmFjayB0byBkcmF3
aW5nIGEgc2luZ2xlLCBzb2xpZCBjb2xvcgogICAgIGlmIChyZWN0LndpZHRoKCkgPCA1IHx8IHJl
Y3QuaGVpZ2h0KCkgPCA1KSB7Ci0gICAgICAgIHBhaW50LnNldEFSR0IoMHhmZiwgMHhlOSwgMHhl
OSwgMHhlOSk7CisgICAgICAgIHBhaW50LnNldENvbG9yKGJhc2VDb2xvcik7CiAgICAgICAgIHNr
cmVjdC5zZXQocmVjdC54KCksIHJlY3QueSgpLCByaWdodCwgYm90dG9tKTsKICAgICAgICAgY2Fu
dmFzLT5kcmF3UmVjdChza3JlY3QsIHBhaW50KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgyLDgg
KzM3Myw4IEBAIHN0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlrZShSZW5kZXJUaGVtZSogdGhlbWUs
IFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqCiAgICAgcFtsaWdodEVuZF0uc2V0KFNr
SW50VG9TY2FsYXIocmVjdC54KCkpLCBTa0ludFRvU2NhbGFyKHJlY3QueSgpKSk7CiAgICAgcFtk
YXJrRW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0LngoKSksIFNrSW50VG9TY2FsYXIoYm90dG9t
IC0gMSkpOwogICAgIFNrQ29sb3IgY29sb3JzWzJdOwotICAgIGNvbG9yc1swXSA9IFNrQ29sb3JT
ZXRBUkdCKDB4ZmYsIDB4ZjgsIDB4ZjgsIDB4ZjgpOwotICAgIGNvbG9yc1sxXSA9IFNrQ29sb3JT
ZXRBUkdCKDB4ZmYsIDB4ZGQsIDB4ZGQsIDB4ZGQpOworICAgIGNvbG9yc1swXSA9IGxpZ2h0Q29s
b3I7CisgICAgY29sb3JzWzFdID0gYmFzZUNvbG9yOwogCiAgICAgU2tTaGFkZXIqIHMgPSBTa0dy
YWRpZW50U2hhZGVyOjpDcmVhdGVMaW5lYXIoCiAgICAgICAgIHAsIGNvbG9ycywgTlVMTCwgMiwg
U2tTaGFkZXI6OmtDbGFtcF9UaWxlTW9kZSwgTlVMTCk7CkBAIC0yOTUsNyArMzg2LDcgQEAgc3Rh
dGljIHZvaWQgcGFpbnRCdXR0b25MaWtlKFJlbmRlclRoZW1lKiB0aGVtZSwgUmVuZGVyT2JqZWN0
KiBvLCBjb25zdCBSZW5kZXJPYmoKICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwgcGFpbnQp
OwogCiAgICAgcGFpbnQuc2V0U2hhZGVyKE5VTEwpOwotICAgIHBhaW50LnNldEFSR0IoMHhmZiwg
MHhjZSwgMHhjZSwgMHhjZSk7CisgICAgcGFpbnQuc2V0Q29sb3IoYnJpZ2h0ZW5Db2xvcihiYXNl
Q29sb3IsIC0wLjA1ODgpKTsKICAgICBjYW52YXMtPmRyYXdQb2ludChyZWN0LngoKSArIDEsIHJl
Y3QueSgpICsgMSwgcGFpbnQpOwogICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJpZ2h0IC0gMiwgcmVj
dC55KCkgKyAxLCBwYWludCk7CiAgICAgY2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAxLCBi
b3R0b20gLSAyLCBwYWludCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUNocm9taXVtTGludXguaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1MaW51eC5oCmluZGV4IDc4Mzg1MDkuLjExMjM5ZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5oCkBAIC02MCw2ICs2MCw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogICAgICAgICAvLyBTeXN0ZW0gZm9udHMuCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzeXN0ZW1Gb250KGludCBwcm9wSWQsIEZvbnREZXNjcmlwdGlvbiYpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIENvbG9yIHN5c3RlbUNvbG9yKGludCBjc3NWYWxpZElkKSBjb25zdDsKIAogICAg
ICAgICB2aXJ0dWFsIGludCBtaW5pbXVtTWVudUxpc3RTaXplKFJlbmRlclN0eWxlKikgY29uc3Q7
CiAK
</data>
<flag name="review"
          id="15713"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31019</attachid>
            <date>2009-06-05 16:27:48 -0700</date>
            <delta_ts>2009-06-05 17:08:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>7996</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1MaW51eC5jc3MgYi9XZWJDb3Jl
L2Nzcy90aGVtZUNocm9taXVtTGludXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmY4MjEwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Nzcy90aGVtZUNocm9t
aXVtTGludXguY3NzCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBUaGVzZSBzdHlsZXMgb3ZlcnJpZGUgb3Ro
ZXIgdXNlci1hZ2VudCBzdHlsZXMgZm9yIENocm9taXVtIG9uIExpbnV4LiAqLworCitzZWxlY3Qg
eworICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGRkZGQ7CisgICAgYm9yZGVyOiAwcHg7Cit9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IGU4NWFjMDAuLmY0ZDY2ZjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0zMjEsNiArMzIxLDQxIEBAIHZvaWQgQ29s
b3I6OmdldFJHQkEoZG91YmxlJiByLCBkb3VibGUmIGcsIGRvdWJsZSYgYiwgZG91YmxlJiBhKSBj
b25zdAogICAgIGEgPSBhbHBoYSgpIC8gMjU1LjA7CiB9CiAKK3ZvaWQgQ29sb3I6OmdldEhTTChk
b3VibGUmIGh1ZSwgZG91YmxlJiBzYXR1cmF0aW9uLCBkb3VibGUmIGxpZ2h0bmVzcykgY29uc3QK
K3sKKyAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZQor
ICAgIGRvdWJsZSByID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWQoKSkgLyAyNTUuMDsKKyAgICBk
b3VibGUgZyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oZ3JlZW4oKSkgLyAyNTUuMDsKKyAgICBkb3Vi
bGUgYiA9IHN0YXRpY19jYXN0PGRvdWJsZT4oYmx1ZSgpKSAvIDI1NS4wOworICAgIGRvdWJsZSBt
YXggPSBzdGQ6Om1heChzdGQ6Om1heChyLCBnKSwgYik7CisgICAgZG91YmxlIG1pbiA9IHN0ZDo6
bWluKHN0ZDo6bWluKHIsIGcpLCBiKTsKKworICAgIGlmIChtYXggPT0gbWluKSB7CisgICAgICAg
IGh1ZSA9IDAuMDsKKyAgICB9IGVsc2UgaWYgKG1heCA9PSByKSB7CisgICAgICAgIGh1ZSA9ICg2
MC4wICogKChnIC0gYikgLyAobWF4IC0gbWluKSkpICsgMzYwLjA7CisgICAgfSBlbHNlIGlmICht
YXggPT0gZykgeworICAgICAgICBodWUgPSAoNjAuMCAqICgoYiAtIHIpIC8gKG1heCAtIG1pbikp
KSArIDEyMC4wOworICAgIH0gZWxzZSB7CisgICAgICAgIGh1ZSA9ICg2MC4wICogKChyIC0gZykg
LyAobWF4IC0gbWluKSkpICsgMjQwLjA7CisgICAgfQorCisgICAgd2hpbGUgKGh1ZSA+PSAzNjAu
MCkKKyAgICAgICAgaHVlIC09IDM2MC4wOworCisgICAgLy8gbWFrZVJHQkFGcm9tSFNMQSBhc3N1
bWVzIHRoYXQgaHVlIGlzIGluIFswLi4uMSkuCisgICAgaHVlIC89IDM2MC4wOworCisgICAgbGln
aHRuZXNzID0gMC41ZiAqIChtYXggKyBtaW4pOworICAgIGlmIChtYXggPT0gbWluKSB7CisgICAg
ICAgIHNhdHVyYXRpb24gPSAwLjA7CisgICAgfSBlbHNlIGlmIChsaWdodG5lc3MgPD0gMC41Zikg
eworICAgICAgICBzYXR1cmF0aW9uID0gKChtYXggLSBtaW4pIC8gKG1heCArIG1pbikpOworICAg
IH0gZWxzZSB7CisgICAgICAgIHNhdHVyYXRpb24gPSAoKG1heCAtIG1pbikgLyAoMi4wIC0gKG1h
eCArIG1pbikpKTsKKyAgICB9Cit9CisKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdC
KHVuc2lnbmVkIHBpeGVsQ29sb3IpCiB7CiAgICAgUkdCQTMyIHJnYmE7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKaW5kZXggMDRiZjRjNC4uMDMyZDBjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaApAQCAtOTQsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSR0IoUkdCQTMy
IHJnYikgeyBtX2NvbG9yID0gcmdiOyBtX3ZhbGlkID0gdHJ1ZTsgfQogICAgIHZvaWQgZ2V0UkdC
QShmbG9hdCYgciwgZmxvYXQmIGcsIGZsb2F0JiBiLCBmbG9hdCYgYSkgY29uc3Q7CiAgICAgdm9p
ZCBnZXRSR0JBKGRvdWJsZSYgciwgZG91YmxlJiBnLCBkb3VibGUmIGIsIGRvdWJsZSYgYSkgY29u
c3Q7CisgICAgdm9pZCBnZXRIU0woZG91YmxlJiBoLCBkb3VibGUmIHMsIGRvdWJsZSYgbCkgY29u
c3Q7CiAKICAgICBDb2xvciBsaWdodCgpIGNvbnN0OwogICAgIENvbG9yIGRhcmsoKSBjb25zdDsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5j
cHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCmluZGV4
IDk0ZWU2NGYuLjk3ZjBlMWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lQ2hyb21pdW1MaW51eC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bUxpbnV4LmNwcApAQCAtMTIzLDEwICsxMjMsMTggQEAgUmVuZGVyVGhlbWVDaHJvbWl1
bUxpbnV4OjpSZW5kZXJUaGVtZUNocm9taXVtTGludXgoKQogewogfQogCitDb2xvciBSZW5kZXJU
aGVtZUNocm9taXVtTGludXg6OnN5c3RlbUNvbG9yKGludCBjc3NWYWx1ZUlkKSBjb25zdAorewor
ICAgIGlmIChjc3NWYWx1ZUlkID09IENTU1ZhbHVlQnV0dG9uZmFjZSkKKyAgICAgICAgcmV0dXJu
IDB4ZmZkZGRkZGQ7CisgICAgcmV0dXJuIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xvcihjc3NWYWx1
ZUlkKTsKK30KKwogLy8gVXNlIHRoZSBXaW5kb3dzIHN0eWxlIHNoZWV0cyB0byBtYXRjaCB0aGVp
ciBtZXRyaWNzLgogU3RyaW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFEZWZhdWx0
U3R5bGVTaGVldCgpCiB7Ci0gICAgcmV0dXJuIFN0cmluZyh0aGVtZVdpblVzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZih0aGVtZVdpblVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKKyAgICByZXR1cm4g
U3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1lV2luVXNlckFn
ZW50U3R5bGVTaGVldCkpICsKKyAgICAgICAgICAgU3RyaW5nKHRoZW1lQ2hyb21pdW1MaW51eFVz
ZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih0aGVtZUNocm9taXVtTGludXhVc2VyQWdlbnRTdHls
ZVNoZWV0KSk7CiB9CiAKIFN0cmluZyBSZW5kZXJUaGVtZUNocm9taXVtTGludXg6OmV4dHJhUXVp
cmtzU3R5bGVTaGVldCgpCkBAIC0yNTMsMTYgKzI2MSwzNSBAQCB2b2lkIFJlbmRlclRoZW1lQ2hy
b21pdW1MaW51eDo6c2V0UmFkaW9TaXplKFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKICAgICBz
ZXRDaGVja2JveFNpemUoc3R5bGUpOwogfQogCitzdGF0aWMgU2tDb2xvciBicmlnaHRlbkNvbG9y
KGRvdWJsZSBoLCBkb3VibGUgcywgZG91YmxlIGwsIGZsb2F0IGJyaWdodGVuQW1vdW50KQorewor
ICAgIGwgKz0gYnJpZ2h0ZW5BbW91bnQ7CisgICAgaWYgKGwgPiAxLjApCisgICAgICAgIGwgPSAx
LjA7CisgICAgaWYgKGwgPCAwLjApCisgICAgICAgIGwgPSAwLjA7CisKKyAgICByZXR1cm4gbWFr
ZVJHQkFGcm9tSFNMQShoLCBzLCBsLCAxLjApOworfQorCiBzdGF0aWMgdm9pZCBwYWludEJ1dHRv
bkxpa2UoUmVuZGVyVGhlbWUqIHRoZW1lLCBSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KSB7CiAgICAgU2tDYW52YXMq
IGNvbnN0IGNhbnZhcyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwog
ICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgU2tSZWN0IHNrcmVjdDsKICAgICBjb25zdCBpbnQgcmln
aHQgPSByZWN0LngoKSArIHJlY3Qud2lkdGgoKTsKICAgICBjb25zdCBpbnQgYm90dG9tID0gcmVj
dC55KCkgKyByZWN0LmhlaWdodCgpOworICAgIFNrQ29sb3IgYmFzZUNvbG9yID0gU2tDb2xvclNl
dEFSR0IoMHhmZiwgMHhkZCwgMHhkZCwgMHhkZCk7CisgICAgaWYgKG8tPnN0eWxlKCktPmhhc0Jh
Y2tncm91bmQoKSkKKyAgICAgICAgYmFzZUNvbG9yID0gby0+c3R5bGUoKS0+YmFja2dyb3VuZENv
bG9yKCkucmdiKCk7CisgICAgZG91YmxlIGgsIHMsIGw7CisgICAgQ29sb3IoYmFzZUNvbG9yKS5n
ZXRIU0woaCwgcywgbCk7CisgICAgLy8gT3VyIHN0YW5kYXJkIGdyYWRpZW50IGlzIGZyb20gMHhk
ZCB0byAweGY4LiBUaGlzIGlzIHRoZSBhbW91bnQgb2YKKyAgICAvLyBpbmNyZWFzZWQgbHVtaW5h
bmNlIGJldHdlZW4gdGhvc2UgdmFsdWVzLgorICAgIFNrQ29sb3IgbGlnaHRDb2xvcihicmlnaHRl
bkNvbG9yKGgsIHMsIGwsIDAuMTA1KSk7CiAKICAgICAvLyBJZiB0aGUgYnV0dG9uIGlzIHRvbyBz
bWFsbCwgZmFsbGJhY2sgdG8gZHJhd2luZyBhIHNpbmdsZSwgc29saWQgY29sb3IKICAgICBpZiAo
cmVjdC53aWR0aCgpIDwgNSB8fCByZWN0LmhlaWdodCgpIDwgNSkgewotICAgICAgICBwYWludC5z
ZXRBUkdCKDB4ZmYsIDB4ZTksIDB4ZTksIDB4ZTkpOworICAgICAgICBwYWludC5zZXRDb2xvcihi
YXNlQ29sb3IpOwogICAgICAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmlnaHQs
IGJvdHRvbSk7CiAgICAgICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTI4MiwyMCArMzA5LDIwIEBAIHN0YXRpYyB2b2lkIHBhaW50QnV0dG9u
TGlrZShSZW5kZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
CiAgICAgcFtsaWdodEVuZF0uc2V0KFNrSW50VG9TY2FsYXIocmVjdC54KCkpLCBTa0ludFRvU2Nh
bGFyKHJlY3QueSgpKSk7CiAgICAgcFtkYXJrRW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0Lngo
KSksIFNrSW50VG9TY2FsYXIoYm90dG9tIC0gMSkpOwogICAgIFNrQ29sb3IgY29sb3JzWzJdOwot
ICAgIGNvbG9yc1swXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZjgsIDB4ZjgsIDB4ZjgpOwot
ICAgIGNvbG9yc1sxXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZGQsIDB4ZGQsIDB4ZGQpOwor
ICAgIGNvbG9yc1swXSA9IGxpZ2h0Q29sb3I7CisgICAgY29sb3JzWzFdID0gYmFzZUNvbG9yOwog
Ci0gICAgU2tTaGFkZXIqIHMgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVhdGVMaW5lYXIoCisgICAg
U2tTaGFkZXIqIHNoYWRlciA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0ZUxpbmVhcigKICAgICAg
ICAgcCwgY29sb3JzLCBOVUxMLCAyLCBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlLCBOVUxMKTsK
ICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7Ci0gICAgcGFpbnQuc2V0
U2hhZGVyKHMpOwotICAgIHMtPnVucmVmKCk7CisgICAgcGFpbnQuc2V0U2hhZGVyKHNoYWRlcik7
CisgICAgc2hhZGVyLT51bnJlZigpOwogCiAgICAgc2tyZWN0LnNldChyZWN0LngoKSArIDEsIHJl
Y3QueSgpICsgMSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsKICAgICBjYW52YXMtPmRyYXdSZWN0
KHNrcmVjdCwgcGFpbnQpOwogCiAgICAgcGFpbnQuc2V0U2hhZGVyKE5VTEwpOwotICAgIHBhaW50
LnNldEFSR0IoMHhmZiwgMHhjZSwgMHhjZSwgMHhjZSk7CisgICAgcGFpbnQuc2V0Q29sb3IoYnJp
Z2h0ZW5Db2xvcihoLCBzLCBsLCAtMC4wNTg4KSk7CiAgICAgY2FudmFzLT5kcmF3UG9pbnQocmVj
dC54KCkgKyAxLCByZWN0LnkoKSArIDEsIHBhaW50KTsKICAgICBjYW52YXMtPmRyYXdQb2ludChy
aWdodCAtIDIsIHJlY3QueSgpICsgMSwgcGFpbnQpOwogICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJl
Y3QueCgpICsgMSwgYm90dG9tIC0gMiwgcGFpbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtTGludXguaAppbmRleCA3ODM4NTA5Li4xMTIzOWQ5IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAorKysgYi9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaApAQCAtNjAsNiArNjAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsaWRJZCkg
Y29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJT
dHlsZSopIGNvbnN0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31020</attachid>
            <date>2009-06-05 17:08:50 -0700</date>
            <delta_ts>2009-06-05 17:12:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>8329</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL3RoZW1lQ2hyb21pdW1MaW51eC5jc3MgYi9XZWJDb3Jl
L2Nzcy90aGVtZUNocm9taXVtTGludXguY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmY4MjEwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Nzcy90aGVtZUNocm9t
aXVtTGludXguY3NzCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBUaGVzZSBzdHlsZXMgb3ZlcnJpZGUgb3Ro
ZXIgdXNlci1hZ2VudCBzdHlsZXMgZm9yIENocm9taXVtIG9uIExpbnV4LiAqLworCitzZWxlY3Qg
eworICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGRkZGQ7CisgICAgYm9yZGVyOiAwcHg7Cit9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IGU4NWFjMDAuLjM5N2RhMjkgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC0zMjEsNiArMzIxLDQxIEBAIHZvaWQgQ29s
b3I6OmdldFJHQkEoZG91YmxlJiByLCBkb3VibGUmIGcsIGRvdWJsZSYgYiwgZG91YmxlJiBhKSBj
b25zdAogICAgIGEgPSBhbHBoYSgpIC8gMjU1LjA7CiB9CiAKK3ZvaWQgQ29sb3I6OmdldEhTTChk
b3VibGUmIGh1ZSwgZG91YmxlJiBzYXR1cmF0aW9uLCBkb3VibGUmIGxpZ2h0bmVzcykgY29uc3QK
K3sKKyAgICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hTTF9jb2xvcl9zcGFjZS4g
VGhpcyBpcyBhIGRpcmVjdCBjb3B5IG9mCisgICAgLy8gdGhlIGFsZ29yaXRobSB0aGVyZWluLCBh
bHRob3VnaCBpdCdzIDM2MF5vIGJhc2VkIGFuZCB3ZSBlbmQgdXAgd2FudGluZworICAgIC8vIFsw
Li4uMSkgYmFzZWQuIEl0J3MgY2xlYXJlciBpZiB3ZSBzdGljayB0byAzNjBebyB1bnRpbCB0aGUg
ZW5kLgorICAgIGRvdWJsZSByID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihyZWQoKSkgLyAyNTUuMDsK
KyAgICBkb3VibGUgZyA9IHN0YXRpY19jYXN0PGRvdWJsZT4oZ3JlZW4oKSkgLyAyNTUuMDsKKyAg
ICBkb3VibGUgYiA9IHN0YXRpY19jYXN0PGRvdWJsZT4oYmx1ZSgpKSAvIDI1NS4wOworICAgIGRv
dWJsZSBtYXggPSBzdGQ6Om1heChzdGQ6Om1heChyLCBnKSwgYik7CisgICAgZG91YmxlIG1pbiA9
IHN0ZDo6bWluKHN0ZDo6bWluKHIsIGcpLCBiKTsKKworICAgIGlmIChtYXggPT0gbWluKQorICAg
ICAgICBodWUgPSAwLjA7CisgICAgZWxzZSBpZiAobWF4ID09IHIpCisgICAgICAgIGh1ZSA9ICg2
MC4wICogKChnIC0gYikgLyAobWF4IC0gbWluKSkpICsgMzYwLjA7CisgICAgZWxzZSBpZiAobWF4
ID09IGcpCisgICAgICAgIGh1ZSA9ICg2MC4wICogKChiIC0gcikgLyAobWF4IC0gbWluKSkpICsg
MTIwLjA7CisgICAgZWxzZQorICAgICAgICBodWUgPSAoNjAuMCAqICgociAtIGcpIC8gKG1heCAt
IG1pbikpKSArIDI0MC4wOworCisgICAgd2hpbGUgKGh1ZSA+PSAzNjAuMCkKKyAgICAgICAgaHVl
IC09IDM2MC4wOworCisgICAgLy8gbWFrZVJHQkFGcm9tSFNMQSBhc3N1bWVzIHRoYXQgaHVlIGlz
IGluIFswLi4uMSkuCisgICAgaHVlIC89IDM2MC4wOworCisgICAgbGlnaHRuZXNzID0gMC41ZiAq
IChtYXggKyBtaW4pOworICAgIGlmIChtYXggPT0gbWluKQorICAgICAgICBzYXR1cmF0aW9uID0g
MC4wOworICAgIGVsc2UgaWYgKGxpZ2h0bmVzcyA8PSAwLjVmKQorICAgICAgICBzYXR1cmF0aW9u
ID0gKChtYXggLSBtaW4pIC8gKG1heCArIG1pbikpOworICAgIGVsc2UKKyAgICAgICAgc2F0dXJh
dGlvbiA9ICgobWF4IC0gbWluKSAvICgyLjAgLSAobWF4ICsgbWluKSkpOworfQorCiBDb2xvciBj
b2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQih1bnNpZ25lZCBwaXhlbENvbG9yKQogewogICAgIFJH
QkEzMiByZ2JhOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IDA0YmY0YzQuLjAzMmQw
Y2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTk0LDYgKzk0LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0UkdCKFJHQkEzMiByZ2IpIHsgbV9jb2xvciA9IHJnYjsgbV92YWxpZCA9
IHRydWU7IH0KICAgICB2b2lkIGdldFJHQkEoZmxvYXQmIHIsIGZsb2F0JiBnLCBmbG9hdCYgYiwg
ZmxvYXQmIGEpIGNvbnN0OwogICAgIHZvaWQgZ2V0UkdCQShkb3VibGUmIHIsIGRvdWJsZSYgZywg
ZG91YmxlJiBiLCBkb3VibGUmIGEpIGNvbnN0OworICAgIHZvaWQgZ2V0SFNMKGRvdWJsZSYgaCwg
ZG91YmxlJiBzLCBkb3VibGUmIGwpIGNvbnN0OwogCiAgICAgQ29sb3IgbGlnaHQoKSBjb25zdDsK
ICAgICBDb2xvciBkYXJrKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bUxpbnV4LmNwcAppbmRleCA5NGVlNjRmLi44MDQ5NDAzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKQEAgLTEyMywxMCArMTIz
LDIwIEBAIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4
KCkKIHsKIH0KIAorQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzeXN0ZW1Db2xvcihp
bnQgY3NzVmFsdWVJZCkgY29uc3QKK3sKKyAgICBzdGF0aWMgY29uc3QgQ29sb3IgbGludXhCdXR0
b25HcmF5Q29sb3IoMHhmZmRkZGRkZCk7CisKKyAgICBpZiAoY3NzVmFsdWVJZCA9PSBDU1NWYWx1
ZUJ1dHRvbmZhY2UpCisgICAgICAgIHJldHVybiBsaW51eEJ1dHRvbkdyYXlDb2xvcjsKKyAgICBy
ZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOworfQorCiAvLyBVc2Ug
dGhlIFdpbmRvd3Mgc3R5bGUgc2hlZXRzIHRvIG1hdGNoIHRoZWlyIG1ldHJpY3MuCiBTdHJpbmcg
UmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpleHRyYURlZmF1bHRTdHlsZVNoZWV0KCkKIHsKLSAg
ICByZXR1cm4gU3RyaW5nKHRoZW1lV2luVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHRoZW1l
V2luVXNlckFnZW50U3R5bGVTaGVldCkpOworICAgIHJldHVybiBTdHJpbmcodGhlbWVXaW5Vc2Vy
QWdlbnRTdHlsZVNoZWV0LCBzaXplb2YodGhlbWVXaW5Vc2VyQWdlbnRTdHlsZVNoZWV0KSkgKwor
ICAgICAgICAgICBTdHJpbmcodGhlbWVDaHJvbWl1bUxpbnV4VXNlckFnZW50U3R5bGVTaGVldCwg
c2l6ZW9mKHRoZW1lQ2hyb21pdW1MaW51eFVzZXJBZ2VudFN0eWxlU2hlZXQpKTsKIH0KIAogU3Ry
aW5nIFJlbmRlclRoZW1lQ2hyb21pdW1MaW51eDo6ZXh0cmFRdWlya3NTdHlsZVNoZWV0KCkKQEAg
LTI1MywxNiArMjYzLDM2IEBAIHZvaWQgUmVuZGVyVGhlbWVDaHJvbWl1bUxpbnV4OjpzZXRSYWRp
b1NpemUoUmVuZGVyU3R5bGUqIHN0eWxlKSBjb25zdAogICAgIHNldENoZWNrYm94U2l6ZShzdHls
ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlrZShSZW5kZXJUaGVtZSogdGhlbWUs
IFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0
IEludFJlY3QmIHJlY3QpIHsKK3N0YXRpYyBTa0NvbG9yIGJyaWdodGVuQ29sb3IoZG91YmxlIGgs
IGRvdWJsZSBzLCBkb3VibGUgbCwgZmxvYXQgYnJpZ2h0ZW5BbW91bnQpCit7CisgICAgbCArPSBi
cmlnaHRlbkFtb3VudDsKKyAgICBpZiAobCA+IDEuMCkKKyAgICAgICAgbCA9IDEuMDsKKyAgICBp
ZiAobCA8IDAuMCkKKyAgICAgICAgbCA9IDAuMDsKKworICAgIHJldHVybiBtYWtlUkdCQUZyb21I
U0xBKGgsIHMsIGwsIDEuMCk7Cit9CisKK3N0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlrZShSZW5k
ZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CiAgICAgU2tDYW52YXMqIGNvbnN0IGNh
bnZhcyA9IGkuY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIFNrUGFp
bnQgcGFpbnQ7CiAgICAgU2tSZWN0IHNrcmVjdDsKICAgICBjb25zdCBpbnQgcmlnaHQgPSByZWN0
LngoKSArIHJlY3Qud2lkdGgoKTsKICAgICBjb25zdCBpbnQgYm90dG9tID0gcmVjdC55KCkgKyBy
ZWN0LmhlaWdodCgpOworICAgIFNrQ29sb3IgYmFzZUNvbG9yID0gU2tDb2xvclNldEFSR0IoMHhm
ZiwgMHhkZCwgMHhkZCwgMHhkZCk7CisgICAgaWYgKG8tPnN0eWxlKCktPmhhc0JhY2tncm91bmQo
KSkKKyAgICAgICAgYmFzZUNvbG9yID0gby0+c3R5bGUoKS0+YmFja2dyb3VuZENvbG9yKCkucmdi
KCk7CisgICAgZG91YmxlIGgsIHMsIGw7CisgICAgQ29sb3IoYmFzZUNvbG9yKS5nZXRIU0woaCwg
cywgbCk7CisgICAgLy8gT3VyIHN0YW5kYXJkIGdyYWRpZW50IGlzIGZyb20gMHhkZCB0byAweGY4
LiBUaGlzIGlzIHRoZSBhbW91bnQgb2YKKyAgICAvLyBpbmNyZWFzZWQgbHVtaW5hbmNlIGJldHdl
ZW4gdGhvc2UgdmFsdWVzLgorICAgIFNrQ29sb3IgbGlnaHRDb2xvcihicmlnaHRlbkNvbG9yKGgs
IHMsIGwsIDAuMTA1KSk7CiAKICAgICAvLyBJZiB0aGUgYnV0dG9uIGlzIHRvbyBzbWFsbCwgZmFs
bGJhY2sgdG8gZHJhd2luZyBhIHNpbmdsZSwgc29saWQgY29sb3IKICAgICBpZiAocmVjdC53aWR0
aCgpIDwgNSB8fCByZWN0LmhlaWdodCgpIDwgNSkgewotICAgICAgICBwYWludC5zZXRBUkdCKDB4
ZmYsIDB4ZTksIDB4ZTksIDB4ZTkpOworICAgICAgICBwYWludC5zZXRDb2xvcihiYXNlQ29sb3Ip
OwogICAgICAgICBza3JlY3Quc2V0KHJlY3QueCgpLCByZWN0LnkoKSwgcmlnaHQsIGJvdHRvbSk7
CiAgICAgICAgIGNhbnZhcy0+ZHJhd1JlY3Qoc2tyZWN0LCBwYWludCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTI4MiwyMCArMzEyLDIwIEBAIHN0YXRpYyB2b2lkIHBhaW50QnV0dG9uTGlrZShSZW5k
ZXJUaGVtZSogdGhlbWUsIFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqCiAgICAgcFts
aWdodEVuZF0uc2V0KFNrSW50VG9TY2FsYXIocmVjdC54KCkpLCBTa0ludFRvU2NhbGFyKHJlY3Qu
eSgpKSk7CiAgICAgcFtkYXJrRW5kXS5zZXQoU2tJbnRUb1NjYWxhcihyZWN0LngoKSksIFNrSW50
VG9TY2FsYXIoYm90dG9tIC0gMSkpOwogICAgIFNrQ29sb3IgY29sb3JzWzJdOwotICAgIGNvbG9y
c1swXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZjgsIDB4ZjgsIDB4ZjgpOwotICAgIGNvbG9y
c1sxXSA9IFNrQ29sb3JTZXRBUkdCKDB4ZmYsIDB4ZGQsIDB4ZGQsIDB4ZGQpOworICAgIGNvbG9y
c1swXSA9IGxpZ2h0Q29sb3I7CisgICAgY29sb3JzWzFdID0gYmFzZUNvbG9yOwogCi0gICAgU2tT
aGFkZXIqIHMgPSBTa0dyYWRpZW50U2hhZGVyOjpDcmVhdGVMaW5lYXIoCisgICAgU2tTaGFkZXIq
IHNoYWRlciA9IFNrR3JhZGllbnRTaGFkZXI6OkNyZWF0ZUxpbmVhcigKICAgICAgICAgcCwgY29s
b3JzLCBOVUxMLCAyLCBTa1NoYWRlcjo6a0NsYW1wX1RpbGVNb2RlLCBOVUxMKTsKICAgICBwYWlu
dC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7Ci0gICAgcGFpbnQuc2V0U2hhZGVyKHMp
OwotICAgIHMtPnVucmVmKCk7CisgICAgcGFpbnQuc2V0U2hhZGVyKHNoYWRlcik7CisgICAgc2hh
ZGVyLT51bnJlZigpOwogCiAgICAgc2tyZWN0LnNldChyZWN0LngoKSArIDEsIHJlY3QueSgpICsg
MSwgcmlnaHQgLSAxLCBib3R0b20gLSAxKTsKICAgICBjYW52YXMtPmRyYXdSZWN0KHNrcmVjdCwg
cGFpbnQpOwogCiAgICAgcGFpbnQuc2V0U2hhZGVyKE5VTEwpOwotICAgIHBhaW50LnNldEFSR0Io
MHhmZiwgMHhjZSwgMHhjZSwgMHhjZSk7CisgICAgcGFpbnQuc2V0Q29sb3IoYnJpZ2h0ZW5Db2xv
cihoLCBzLCBsLCAtMC4wNTg4KSk7CiAgICAgY2FudmFzLT5kcmF3UG9pbnQocmVjdC54KCkgKyAx
LCByZWN0LnkoKSArIDEsIHBhaW50KTsKICAgICBjYW52YXMtPmRyYXdQb2ludChyaWdodCAtIDIs
IHJlY3QueSgpICsgMSwgcGFpbnQpOwogICAgIGNhbnZhcy0+ZHJhd1BvaW50KHJlY3QueCgpICsg
MSwgYm90dG9tIC0gMiwgcGFpbnQpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bUxpbnV4LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtTGludXguaAppbmRleCA3ODM4NTA5Li4xMTIzOWQ5IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaAorKysgYi9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguaApAQCAtNjAsNiArNjAsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gU3lzdGVtIGZvbnRzLgogICAgICAgICB2aXJ0dWFs
IHZvaWQgc3lzdGVtRm9udChpbnQgcHJvcElkLCBGb250RGVzY3JpcHRpb24mKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBDb2xvciBzeXN0ZW1Db2xvcihpbnQgY3NzVmFsaWRJZCkgY29uc3Q7CiAK
ICAgICAgICAgdmlydHVhbCBpbnQgbWluaW11bU1lbnVMaXN0U2l6ZShSZW5kZXJTdHlsZSopIGNv
bnN0OwogCg==
</data>
<flag name="review"
          id="15790"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>