<?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>47382</bug_id>
          
          <creation_ts>2010-10-07 15:38:59 -0700</creation_ts>
          <short_desc>Blob / BlobBuilder can be put into bad state with wild integers and strings, due to integer overflows</short_desc>
          <delta_ts>2010-12-04 16:50:31 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Evans">cevans</reporter>
          <assigned_to name="Chris Evans">cevans</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>jianli</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>291290</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-07 15:38:59 -0700</bug_when>
    <thetext>For example:

var bb =  new BlobBuilder();
var s= &apos;&apos;;
var i = 0;
for (; i &lt; 2000; ++i) s += &apos;A&apos;;
bb.append(s);
b = bb.getBlob();
slice = b.slice(1999, 9223372036854775000);

This leaves &quot;slice&quot; with a crazy large &quot;size&quot; which is clearly incorrect. I haven&apos;t managed to abuse these broken objects to cause any crashing, but I&apos;m going to fix it to be safe.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291298</commentid>
    <comment_count>1</comment_count>
      <attachid>70162</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-07 15:56:45 -0700</bug_when>
    <thetext>Created attachment 70162
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291299</commentid>
    <comment_count>2</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-07 15:58:19 -0700</bug_when>
    <thetext>Ideally Jian would review this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291302</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-07 16:05:13 -0700</bug_when>
    <thetext>Attachment 70162 did not build on mac:
Build output: http://queues.webkit.org/results/4244113</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291335</commentid>
    <comment_count>4</comment_count>
      <attachid>70174</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-07 17:08:10 -0700</bug_when>
    <thetext>Created attachment 70174
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291341</commentid>
    <comment_count>5</comment_count>
      <attachid>70174</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-07 17:17:39 -0700</bug_when>
    <thetext>Comment on attachment 70174
Patch

Thanks for finding and fixing the problem.

&gt; WebCore/fileapi/BlobBuilder.cpp:69
&gt; +    CString result = CString::newUninitialized(newLen, q);

Could you please also provide a test case for BlobBuilder.append?

&gt; WebCore/ChangeLog:7
&gt; +        Fix integer errors in Blob and BlobBuilder.

Better to mention the problem in more details, like &quot;Fix integer overflow errors in Blob.slice and BlobBuilder.append&quot;.
Please update the bug title and ChangeLog to reflect this.

&gt; LayoutTests/fast/files/blob-slice-oflow.html:11
&gt; +var bb =  new BlobBuilder();

Better to name it as builder.

&gt; LayoutTests/fast/files/blob-slice-oflow.html:12
&gt; +var s= &apos;&apos;;

Please add a space between &apos;s&apos; and &apos;=&apos;.
Also, better to rename s as text.

&gt; LayoutTests/fast/files/blob-slice-oflow.html:16
&gt; +b = bb.getBlob();

Better to use the meaningful word to name the variable, like &quot;blob&quot;.

&gt; LayoutTests/fast/files/blob-slice-oflow.html:17
&gt; +slice = b.slice(1999, 9223372036854775000);

Better to name it as slicedBlob.

&gt; LayoutTests/fast/files/blob-slice-oflow.html:19
&gt; +    &apos;Blob slice length: &apos; + slice.size));

No need to split into 2 lines.

&gt; LayoutTests/fast/files/blob-slice-oflow.html:22
&gt; +  alert(&apos;FAIL&apos;);

Please log the failure instead of popping an alert dialog since otherwise it will cause the test to hang on error.

&gt; LayoutTests/ChangeLog:9
&gt; +        * fast/files/blob-slice-oflow.html: Added.

Would be better not to abbreviate the word. Please rename to blob-slice-overflow.html.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291347</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-07 17:30:45 -0700</bug_when>
    <thetext>Thanks for the review!

I will fix all of these things except: &quot;Could you please also provide a test case for BlobBuilder.append?&quot;. Unfortunately, any test here would fail on 32-bit (not enough virtual address space) or be inefficient / possibly exhaust physical RAM (64-bit).

New patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291352</commentid>
    <comment_count>7</comment_count>
      <attachid>70178</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-07 17:42:03 -0700</bug_when>
    <thetext>Created attachment 70178
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291773</commentid>
    <comment_count>8</comment_count>
      <attachid>70178</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-08 11:23:35 -0700</bug_when>
    <thetext>Comment on attachment 70178
Patch

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

&gt; WebCore/ChangeLog:5
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=47382

Normally we prefer to have the lines organized like the following:
  Bug title
  Bug link

  Detailed description

Could you please add the bug title before the link?

If you add a new test, we should have a line like:
  Test: fast/files/blob-slice-overflow.html
It should be added by prepare-ChangeLog automatically.

&gt; LayoutTests/fast/files/blob-slice-overflow.html:14
&gt; +var i = 0;
&gt; +for (; i &lt; 2000; ++i) text += &apos;A&apos;;

Can we move &quot;var i = 0&quot; to the for statement since i is not referred outside the for loop?

&gt; LayoutTests/ChangeLog:5
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=47382

Please add bug title before the bug link.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291982</commentid>
    <comment_count>9</comment_count>
      <attachid>70322</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-08 17:41:25 -0700</bug_when>
    <thetext>Created attachment 70322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292567</commentid>
    <comment_count>10</comment_count>
      <attachid>70322</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-11 11:15:35 -0700</bug_when>
    <thetext>Comment on attachment 70322
Patch

This is the only problem.

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

&gt; LayoutTests/fast/files/blob-slice-overflow.html:13
&gt; +for (i = 0; i &lt; 2000; ++i) text += &apos;A&apos;;

What I mean is:
  for (var i = 0; ...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292605</commentid>
    <comment_count>11</comment_count>
      <attachid>70178</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-11 12:14:43 -0700</bug_when>
    <thetext>Comment on attachment 70178
Patch

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

&gt; WebCore/ChangeLog:7
&gt; +        Fix integer overflow errors in Blob.slice and BlobBuilder.append.

One more thing. Please also add an empty line and the following Test line after the description.
        Test: fast/files/blob-slice-overflow.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293679</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-13 13:41:24 -0700</bug_when>
    <thetext>I did add the Test: line in the latest patch.
I&apos;ll fix the &quot;var&quot; thing now and upload a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293682</commentid>
    <comment_count>13</comment_count>
      <attachid>70654</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-13 13:44:40 -0700</bug_when>
    <thetext>Created attachment 70654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293685</commentid>
    <comment_count>14</comment_count>
      <attachid>70654</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-13 13:50:10 -0700</bug_when>
    <thetext>Comment on attachment 70654
Patch

Looks good. But before I approve it, please sync and resolve the conflicts. I am seeing BlobBuilder files have been changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293718</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-13 14:28:32 -0700</bug_when>
    <thetext>Merge done, patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293719</commentid>
    <comment_count>16</comment_count>
      <attachid>70661</attachid>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-13 14:28:58 -0700</bug_when>
    <thetext>Created attachment 70661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293739</commentid>
    <comment_count>17</comment_count>
      <attachid>70661</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-13 15:11:46 -0700</bug_when>
    <thetext>Comment on attachment 70661
Patch

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

&gt; WebCore/fileapi/BlobBuilder.cpp:66
&gt; +        size_t oldSize = buffer.size();

Is this change now needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293743</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Evans">cevans</who>
    <bug_when>2010-10-13 15:21:14 -0700</bug_when>
    <thetext>Yes. Vector::size() returns size_t, which cannot be stuffed into an &quot;unsigned&quot; on 64-bit without risking truncation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293839</commentid>
    <comment_count>19</comment_count>
      <attachid>70661</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-13 17:21:51 -0700</bug_when>
    <thetext>Comment on attachment 70661
Patch

Clearing flags on attachment: 70661

Committed r69716: &lt;http://trac.webkit.org/changeset/69716&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293840</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-13 17:21:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317326</commentid>
    <comment_count>21</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-12-04 16:50:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/8730623&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70162</attachid>
            <date>2010-10-07 15:56:45 -0700</date>
            <delta_ts>2010-10-07 17:08:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>47382_1.diff</filename>
            <type>text/plain</type>
            <size>3855</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDY5MTgwKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBACiAgICAgaWYgKHN0YXJ0ID49IHNp
emUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAgIH0gZWxz
ZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzaXplKQorICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5n
dGggPiBzaXplIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RhcnQpICsgbGVu
Z3RoID4gc3RkOjpudW1lcmljX2xpbWl0czxsb25nIGxvbmc+OjptYXgoKSkKICAgICAgICAgbGVu
Z3RoID0gc2l6ZSAtIHN0YXJ0OwogCiAgICAgT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSA9IEJs
b2JEYXRhOjpjcmVhdGUoKTsKSW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Jsb2JCdWlsZGVyLmNwcAkocmV2aXNpb24g
NjkxODApCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Myw3ICs2MywxMCBAQAogICAgICAgICByZXR1cm4gQ1N0cmluZygpOwogCiAgICAgY2hh
ciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQoYS5s
ZW5ndGgoKSArIGIubGVuZ3RoKCksIHEpOworICAgIHNpemVfdCBuZXdMZW4gPSBhLmxlbmd0aCgp
ICsgYi5sZW5ndGgoKTsKKyAgICBpZiAobmV3TGVuIDwgYS5sZW5ndGgoKSkKKyAgICAgICAgcmV0
dXJuIENTdHJpbmcoKTsKKyAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJpbmc6Om5ld1VuaW5pdGlh
bGl6ZWQobmV3TGVuLCBxKTsKICAgICBpZiAoYS5sZW5ndGgoKSkKICAgICAgICAgbWVtY3B5KHEs
IGEuZGF0YSgpLCBhLmxlbmd0aCgpKTsKICAgICBpZiAoYi5sZW5ndGgoKSkKSW5kZXg6IFdlYkNv
cmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2
OTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYg
QEAKKzIwMTAtMTAtMDcgIENocmlzIEV2YW5zICA8Y2V2YW5zQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzgyCisKKyAgICAgICAgRml4IGludGVnZXIgZXJy
b3JzIGluIEJsb2IgYW5kIEJsb2JCdWlsZGVyLgorCisgICAgICAgICogZmlsZWFwaS9CbG9iLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNlKTogaGFuZGxlIGludGVnZXIgb3ZlcmZs
b3cgcHJvcGVybHkuCisgICAgICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjb25jYXRlbmF0ZVR3b0NTdHJpbmdzKTogYXZvaWQgcG90ZW50aWFsIGNyYXNo
IHdpdGggaHVnZSBzdHJpbmdzLgorCiAyMDEwLTEwLTA2ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rp
dmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRz
a3kuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb2Zsb3cuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb2Zsb3cuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vZmxv
dy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACis8aHRtbD4KKzxib2R5PgorVGhl
IGV4Y2Vzc2l2ZSBsZW5ndGggcGFzc2VkIHRvIEJsb2Iuc2xpY2UoKSBzaG91bGQgYmUgdHJhcHBl
ZCBhbmQgcmVzdWx0IGluCithIHRydW5jYXRlZCBzbGljZSBiZWluZyByZXR1cm5lZC4KKzxwcmUg
aWQ9J2NvbnNvbGUnPjwvcHJlPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCkKK30KK3ZhciBiYiA9ICBuZXcgQmxvYkJ1aWxk
ZXIoKTsKK3ZhciBzPSAnJzsKK3ZhciBpID0gMDsKK2ZvciAoOyBpIDwgMjAwMDsgKytpKSBzICs9
ICdBJzsKK2JiLmFwcGVuZChzKTsKK2IgPSBiYi5nZXRCbG9iKCk7CitzbGljZSA9IGIuc2xpY2Uo
MTk5OSwgOTIyMzM3MjAzNjg1NDc3NTAwMCk7Citkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
c29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKAorICAgICdCbG9iIHNs
aWNlIGxlbmd0aDogJyArIHNsaWNlLnNpemUpKTsKK2lmIChzbGljZS5zaXplICE9IDEpIHsKKyAg
Ly8gSnVzdCBmb3IgZ29vZCBtZWFzdXJlLgorICBhbGVydCgnRkFJTCcpOworfQoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vZmxvdy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLW9mbG93LWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vZmxvdy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorVGhlIGV4Y2Vzc2l2ZSBsZW5n
dGggcGFzc2VkIHRvIEJsb2Iuc2xpY2UoKSBzaG91bGQgYmUgdHJhcHBlZCBhbmQgcmVzdWx0IGlu
IGEgdHJ1bmNhdGVkIHNsaWNlIGJlaW5nIHJldHVybmVkLgorQmxvYiBzbGljZSBsZW5ndGg6IDEK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY5MTgwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMDcgIENocmlzIEV2YW5zICA8Y2V2
YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzgyCisK
KyAgICAgICAgQWRkIHRlc3QgZm9yIEJsb2Iuc2xpY2UoKSBpbnRlZ2VyIG92ZXJmbG93LgorCisg
ICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNsaWNlLW9mbG93Lmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZmlsZXMvYmxvYi1zbGljZS1vZmxvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAy
MDEwLTEwLTA2ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLCB0ZXN0IGV4cGVjdGF0aW9uIHVwZGF0ZS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70174</attachid>
            <date>2010-10-07 17:08:10 -0700</date>
            <delta_ts>2010-10-07 17:42:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>47382_2.diff</filename>
            <type>text/plain</type>
            <size>3822</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDY5MTgwKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBACiAgICAgaWYgKHN0YXJ0ID49IHNp
emUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAgIH0gZWxz
ZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzaXplKQorICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5n
dGggPiBzaXplIHx8IGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4
KCkgLSBzdGFydCkKICAgICAgICAgbGVuZ3RoID0gc2l6ZSAtIHN0YXJ0OwogCiAgICAgT3duUHRy
PEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Js
b2JCdWlsZGVyLmNwcAkocmV2aXNpb24gNjkxODApCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1
aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMCBAQAogICAgICAgICByZXR1
cm4gQ1N0cmluZygpOwogCiAgICAgY2hhciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJp
bmc6Om5ld1VuaW5pdGlhbGl6ZWQoYS5sZW5ndGgoKSArIGIubGVuZ3RoKCksIHEpOworICAgIHNp
emVfdCBuZXdMZW4gPSBhLmxlbmd0aCgpICsgYi5sZW5ndGgoKTsKKyAgICBpZiAobmV3TGVuIDwg
YS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICBDU3RyaW5nIHJlc3Vs
dCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKICAgICBpZiAoYS5sZW5n
dGgoKSkKICAgICAgICAgbWVtY3B5KHEsIGEuZGF0YSgpLCBhLmxlbmd0aCgpKTsKICAgICBpZiAo
Yi5sZW5ndGgoKSkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAtMDcgIENocmlzIEV2YW5zICA8Y2V2
YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzgyCisK
KyAgICAgICAgRml4IGludGVnZXIgZXJyb3JzIGluIEJsb2IgYW5kIEJsb2JCdWlsZGVyLgorCisg
ICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2I6OnNsaWNl
KTogaGFuZGxlIGludGVnZXIgb3ZlcmZsb3cgcHJvcGVybHkuCisgICAgICAgICogZmlsZWFwaS9C
bG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25jYXRlbmF0ZVR3b0NTdHJpbmdz
KTogYXZvaWQgcG90ZW50aWFsIGNyYXNoIHdpdGggaHVnZSBzdHJpbmdzLgorCiAyMDEwLTEwLTA2
ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L2Jsb2Itc2xpY2Utb2Zsb3cuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzL2Jsb2Itc2xpY2Utb2Zsb3cuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvZmlsZXMvYmxvYi1zbGljZS1vZmxvdy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
IEBACis8aHRtbD4KKzxib2R5PgorVGhlIGV4Y2Vzc2l2ZSBsZW5ndGggcGFzc2VkIHRvIEJsb2Iu
c2xpY2UoKSBzaG91bGQgYmUgdHJhcHBlZCBhbmQgcmVzdWx0IGluCithIHRydW5jYXRlZCBzbGlj
ZSBiZWluZyByZXR1cm5lZC4KKzxwcmUgaWQ9J2NvbnNvbGUnPjwvcHJlPgorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCkKK30K
K3ZhciBiYiA9ICBuZXcgQmxvYkJ1aWxkZXIoKTsKK3ZhciBzPSAnJzsKK3ZhciBpID0gMDsKK2Zv
ciAoOyBpIDwgMjAwMDsgKytpKSBzICs9ICdBJzsKK2JiLmFwcGVuZChzKTsKK2IgPSBiYi5nZXRC
bG9iKCk7CitzbGljZSA9IGIuc2xpY2UoMTk5OSwgOTIyMzM3MjAzNjg1NDc3NTAwMCk7Citkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKAorICAgICdCbG9iIHNsaWNlIGxlbmd0aDogJyArIHNsaWNlLnNpemUpKTsKK2lm
IChzbGljZS5zaXplICE9IDEpIHsKKyAgLy8gSnVzdCBmb3IgZ29vZCBtZWFzdXJlLgorICBhbGVy
dCgnRkFJTCcpOworfQoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vZmxvdy1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNl
LW9mbG93LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmls
ZXMvYmxvYi1zbGljZS1vZmxvdy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MiBAQAorVGhlIGV4Y2Vzc2l2ZSBsZW5ndGggcGFzc2VkIHRvIEJsb2Iuc2xpY2UoKSBzaG91bGQg
YmUgdHJhcHBlZCBhbmQgcmVzdWx0IGluIGEgdHJ1bmNhdGVkIHNsaWNlIGJlaW5nIHJldHVybmVk
LgorQmxvYiBzbGljZSBsZW5ndGg6IDEKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MTgwKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAt
MTAtMDcgIENocmlzIEV2YW5zICA8Y2V2YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ3MzgyCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIEJsb2Iuc2xpY2Uo
KSBpbnRlZ2VyIG92ZXJmbG93LgorCisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNsaWNlLW9m
bG93Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXMvYmxvYi1zbGljZS1vZmxvdy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDEwLTEwLTA2ICBLZW50IFRhbXVyYSAgPHRrZW50QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCB0ZXN0IGV4cGVjdGF0aW9uIHVwZGF0
ZS4K
</data>
<flag name="review"
          id="59970"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70178</attachid>
            <date>2010-10-07 17:42:03 -0700</date>
            <delta_ts>2010-10-13 13:44:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>47382_3.diff</filename>
            <type>text/plain</type>
            <size>3945</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDY5MTgwKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBACiAgICAgaWYgKHN0YXJ0ID49IHNp
emUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAgIH0gZWxz
ZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzaXplKQorICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5n
dGggPiBzaXplIHx8IGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4
KCkgLSBzdGFydCkKICAgICAgICAgbGVuZ3RoID0gc2l6ZSAtIHN0YXJ0OwogCiAgICAgT3duUHRy
PEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Js
b2JCdWlsZGVyLmNwcAkocmV2aXNpb24gNjkxODApCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1
aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMCBAQAogICAgICAgICByZXR1
cm4gQ1N0cmluZygpOwogCiAgICAgY2hhciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJp
bmc6Om5ld1VuaW5pdGlhbGl6ZWQoYS5sZW5ndGgoKSArIGIubGVuZ3RoKCksIHEpOworICAgIHNp
emVfdCBuZXdMZW4gPSBhLmxlbmd0aCgpICsgYi5sZW5ndGgoKTsKKyAgICBpZiAobmV3TGVuIDwg
YS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICBDU3RyaW5nIHJlc3Vs
dCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKICAgICBpZiAoYS5sZW5n
dGgoKSkKICAgICAgICAgbWVtY3B5KHEsIGEuZGF0YSgpLCBhLmxlbmd0aCgpKTsKICAgICBpZiAo
Yi5sZW5ndGgoKSkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMTAtMDcgIENocmlzIEV2YW5zICA8Y2V2
YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzgyCisK
KyAgICAgICAgRml4IGludGVnZXIgb3ZlcmZsb3cgZXJyb3JzIGluIEJsb2Iuc2xpY2UgYW5kIEJs
b2JCdWlsZGVyLmFwcGVuZC4KKworICAgICAgICAqIGZpbGVhcGkvQmxvYi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpCbG9iOjpzbGljZSk6IGhhbmRsZSBpbnRlZ2VyIG92ZXJmbG93IHByb3Blcmx5
LgorICAgICAgICAqIGZpbGVhcGkvQmxvYkJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y29uY2F0ZW5hdGVUd29DU3RyaW5ncyk6IGF2b2lkIHBvdGVudGlhbCBjcmFzaCB3aXRoIGh1Z2Ug
c3RyaW5ncy4KKwogMjAxMC0xMC0wNiAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAorPGh0bWw+Cis8Ym9keT4KK1RoZSBl
eGNlc3NpdmUgbGVuZ3RoIHBhc3NlZCB0byBCbG9iLnNsaWNlKCkgc2hvdWxkIGJlIHRyYXBwZWQg
YW5kIHJlc3VsdCBpbgorYSB0cnVuY2F0ZWQgc2xpY2UgYmVpbmcgcmV0dXJuZWQuCis8cHJlIGlk
PSdjb25zb2xlJz48L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpCit9Cit2YXIgYnVpbGRlciA9ICBuZXcgQmxvYkJ1
aWxkZXIoKTsKK3ZhciB0ZXh0ID0gJyc7Cit2YXIgaSA9IDA7Citmb3IgKDsgaSA8IDIwMDA7ICsr
aSkgdGV4dCArPSAnQSc7CitidWlsZGVyLmFwcGVuZCh0ZXh0KTsKK2Jsb2IgPSBidWlsZGVyLmdl
dEJsb2IoKTsKK3NsaWNlZEJsb2IgPSBibG9iLnNsaWNlKDE5OTksIDkyMjMzNzIwMzY4NTQ3NzUw
MDApOworZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgnQmxvYiBzbGljZSBsZW5ndGg6ICcgKyBzbGljZWRCbG9iLnNp
emUpKTsKK2lmIChzbGljZWRCbG9iLnNpemUgIT0gMSkgeworICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdGQUlM
JykpOworfQoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92
ZXJmbG93LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmls
ZXMvYmxvYi1zbGljZS1vdmVyZmxvdy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMiBAQAorVGhlIGV4Y2Vzc2l2ZSBsZW5ndGggcGFzc2VkIHRvIEJsb2Iuc2xpY2UoKSBzaG91
bGQgYmUgdHJhcHBlZCBhbmQgcmVzdWx0IGluIGEgdHJ1bmNhdGVkIHNsaWNlIGJlaW5nIHJldHVy
bmVkLgorQmxvYiBzbGljZSBsZW5ndGg6IDEKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY5MTgwKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTAtMTAtMDcgIENocmlzIEV2YW5zICA8Y2V2YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ3MzgyCisKKyAgICAgICAgQWRkIHRlc3QgZm9yIEJsb2Iuc2xp
Y2UoKSBpbnRlZ2VyIG92ZXJmbG93LgorCisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNsaWNl
LW92ZXJmbG93Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZmlsZXMvYmxvYi1zbGljZS1v
dmVyZmxvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorCiAyMDEwLTEwLTA2ICBLZW50IFRhbXVyYSAg
PHRrZW50QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCB0ZXN0IGV4cGVjdGF0
aW9uIHVwZGF0ZS4K
</data>
<flag name="review"
          id="59974"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70322</attachid>
            <date>2010-10-08 17:41:25 -0700</date>
            <delta_ts>2010-10-13 13:44:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>47382_4.diff</filename>
            <type>text/plain</type>
            <size>4213</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDY5MTgwKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBACiAgICAgaWYgKHN0YXJ0ID49IHNp
emUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAgIH0gZWxz
ZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzaXplKQorICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5n
dGggPiBzaXplIHx8IGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4
KCkgLSBzdGFydCkKICAgICAgICAgbGVuZ3RoID0gc2l6ZSAtIHN0YXJ0OwogCiAgICAgT3duUHRy
PEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Js
b2JCdWlsZGVyLmNwcAkocmV2aXNpb24gNjkxODApCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1
aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMCBAQAogICAgICAgICByZXR1
cm4gQ1N0cmluZygpOwogCiAgICAgY2hhciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJp
bmc6Om5ld1VuaW5pdGlhbGl6ZWQoYS5sZW5ndGgoKSArIGIubGVuZ3RoKCksIHEpOworICAgIHNp
emVfdCBuZXdMZW4gPSBhLmxlbmd0aCgpICsgYi5sZW5ndGgoKTsKKyAgICBpZiAobmV3TGVuIDwg
YS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICBDU3RyaW5nIHJlc3Vs
dCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKICAgICBpZiAoYS5sZW5n
dGgoKSkKICAgICAgICAgbWVtY3B5KHEsIGEuZGF0YSgpLCBhLmxlbmd0aCgpKTsKICAgICBpZiAo
Yi5sZW5ndGgoKSkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMTAtMDggIENocmlzIEV2YW5zICA8Y2V2
YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQmxvYiAvIEJsb2JCdWlsZGVyIGNhbiBiZSBwdXQgaW50byBiYWQgc3RhdGUgd2l0
aCB3aWxkIGludGVnZXJzIGFuZCBzdHJpbmdzLCBkdWUgdG8gaW50ZWdlciBvdmVyZmxvd3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzgyCisKKyAg
ICAgICAgRml4IGludGVnZXIgb3ZlcmZsb3cgZXJyb3JzIGluIEJsb2Iuc2xpY2UgYW5kIEJsb2JC
dWlsZGVyLmFwcGVuZC4KKworICAgICAgICBUZXN0OiBmYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3Zl
cmZsb3cuaHRtbAorCisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OnNsaWNlKTogaGFuZGxlIGludGVnZXIgb3ZlcmZsb3cgcHJvcGVybHkuCisgICAg
ICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25jYXRl
bmF0ZVR3b0NTdHJpbmdzKTogYXZvaWQgcG90ZW50aWFsIGNyYXNoIHdpdGggaHVnZSBzdHJpbmdz
LgorCiAyMDEwLTEwLTA2ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACis8aHRtbD4KKzxib2R5PgorVGhlIGV4Y2Vzc2l2
ZSBsZW5ndGggcGFzc2VkIHRvIEJsb2Iuc2xpY2UoKSBzaG91bGQgYmUgdHJhcHBlZCBhbmQgcmVz
dWx0IGluCithIHRydW5jYXRlZCBzbGljZSBiZWluZyByZXR1cm5lZC4KKzxwcmUgaWQ9J2NvbnNv
bGUnPjwvcHJlPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCkKK30KK3ZhciBidWlsZGVyID0gIG5ldyBCbG9iQnVpbGRlcigp
OwordmFyIHRleHQgPSAnJzsKK2ZvciAoaSA9IDA7IGkgPCAyMDAwOyArK2kpIHRleHQgKz0gJ0En
OworYnVpbGRlci5hcHBlbmQodGV4dCk7CitibG9iID0gYnVpbGRlci5nZXRCbG9iKCk7CitzbGlj
ZWRCbG9iID0gYmxvYi5zbGljZSgxOTk5LCA5MjIzMzcyMDM2ODU0Nzc1MDAwKTsKK2RvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoJ0Jsb2Igc2xpY2UgbGVuZ3RoOiAnICsgc2xpY2VkQmxvYi5zaXplKSk7CitpZiAoc2xp
Y2VkQmxvYi5zaXplICE9IDEpIHsKKyAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUn
KS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRkFJTCcpKTsKK30KK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Ut
b3ZlcmZsb3ctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoZSBl
eGNlc3NpdmUgbGVuZ3RoIHBhc3NlZCB0byBCbG9iLnNsaWNlKCkgc2hvdWxkIGJlIHRyYXBwZWQg
YW5kIHJlc3VsdCBpbiBhIHRydW5jYXRlZCBzbGljZSBiZWluZyByZXR1cm5lZC4KK0Jsb2Igc2xp
Y2UgbGVuZ3RoOiAxCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTE4MCkKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTEwLTA4ICBDaHJp
cyBFdmFucyAgPGNldmFuc0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEJsb2IgLyBCbG9iQnVpbGRlciBjYW4gYmUgcHV0IGludG8g
YmFkIHN0YXRlIHdpdGggd2lsZCBpbnRlZ2VycyBhbmQgc3RyaW5ncywgZHVlIHRvIGludGVnZXIg
b3ZlcmZsb3dzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NzM4MgorCisgICAgICAgIEFkZCB0ZXN0IGZvciBCbG9iLnNsaWNlKCkgaW50ZWdlciBvdmVy
Zmxvdy4KKworICAgICAgICAqIGZhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3ctZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKwogMjAxMC0xMC0wNiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgdGVzdCBleHBlY3RhdGlvbiB1cGRhdGUuCg==
</data>
<flag name="review"
          id="60150"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70654</attachid>
            <date>2010-10-13 13:44:40 -0700</date>
            <delta_ts>2010-10-13 14:28:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>47382_5.diff</filename>
            <type>text/plain</type>
            <size>4217</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDY5MTgwKQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBACiAgICAgaWYgKHN0YXJ0ID49IHNp
emUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAgIH0gZWxz
ZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzaXplKQorICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5n
dGggPiBzaXplIHx8IGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4
KCkgLSBzdGFydCkKICAgICAgICAgbGVuZ3RoID0gc2l6ZSAtIHN0YXJ0OwogCiAgICAgT3duUHRy
PEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Js
b2JCdWlsZGVyLmNwcAkocmV2aXNpb24gNjkxODApCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1
aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2MywxMCBAQAogICAgICAgICByZXR1
cm4gQ1N0cmluZygpOwogCiAgICAgY2hhciogcTsKLSAgICBDU3RyaW5nIHJlc3VsdCA9IENTdHJp
bmc6Om5ld1VuaW5pdGlhbGl6ZWQoYS5sZW5ndGgoKSArIGIubGVuZ3RoKCksIHEpOworICAgIHNp
emVfdCBuZXdMZW4gPSBhLmxlbmd0aCgpICsgYi5sZW5ndGgoKTsKKyAgICBpZiAobmV3TGVuIDwg
YS5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICBDU3RyaW5nIHJlc3Vs
dCA9IENTdHJpbmc6Om5ld1VuaW5pdGlhbGl6ZWQobmV3TGVuLCBxKTsKICAgICBpZiAoYS5sZW5n
dGgoKSkKICAgICAgICAgbWVtY3B5KHEsIGEuZGF0YSgpLCBhLmxlbmd0aCgpKTsKICAgICBpZiAo
Yi5sZW5ndGgoKSkKSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA2OTE4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMTAtMDggIENocmlzIEV2YW5zICA8Y2V2
YW5zQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQmxvYiAvIEJsb2JCdWlsZGVyIGNhbiBiZSBwdXQgaW50byBiYWQgc3RhdGUgd2l0
aCB3aWxkIGludGVnZXJzIGFuZCBzdHJpbmdzLCBkdWUgdG8gaW50ZWdlciBvdmVyZmxvd3MKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MzgyCisKKyAg
ICAgICAgRml4IGludGVnZXIgb3ZlcmZsb3cgZXJyb3JzIGluIEJsb2Iuc2xpY2UgYW5kIEJsb2JC
dWlsZGVyLmFwcGVuZC4KKworICAgICAgICBUZXN0OiBmYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3Zl
cmZsb3cuaHRtbAorCisgICAgICAgICogZmlsZWFwaS9CbG9iLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkJsb2I6OnNsaWNlKTogaGFuZGxlIGludGVnZXIgb3ZlcmZsb3cgcHJvcGVybHkuCisgICAg
ICAgICogZmlsZWFwaS9CbG9iQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb25jYXRl
bmF0ZVR3b0NTdHJpbmdzKTogYXZvaWQgcG90ZW50aWFsIGNyYXNoIHdpdGggaHVnZSBzdHJpbmdz
LgorCiAyMDEwLTEwLTA2ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACis8aHRtbD4KKzxib2R5PgorVGhlIGV4Y2Vzc2l2
ZSBsZW5ndGggcGFzc2VkIHRvIEJsb2Iuc2xpY2UoKSBzaG91bGQgYmUgdHJhcHBlZCBhbmQgcmVz
dWx0IGluCithIHRydW5jYXRlZCBzbGljZSBiZWluZyByZXR1cm5lZC4KKzxwcmUgaWQ9J2NvbnNv
bGUnPjwvcHJlPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCkKK30KK3ZhciBidWlsZGVyID0gIG5ldyBCbG9iQnVpbGRlcigp
OwordmFyIHRleHQgPSAnJzsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDsgKytpKSB0ZXh0ICs9
ICdBJzsKK2J1aWxkZXIuYXBwZW5kKHRleHQpOworYmxvYiA9IGJ1aWxkZXIuZ2V0QmxvYigpOwor
c2xpY2VkQmxvYiA9IGJsb2Iuc2xpY2UoMTk5OSwgOTIyMzM3MjAzNjg1NDc3NTAwMCk7Citkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKCdCbG9iIHNsaWNlIGxlbmd0aDogJyArIHNsaWNlZEJsb2Iuc2l6ZSkpOworaWYg
KHNsaWNlZEJsb2Iuc2l6ZSAhPSAxKSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0ZBSUwnKSk7Cit9Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3ctZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9ibG9iLXNs
aWNlLW92ZXJmbG93LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitU
aGUgZXhjZXNzaXZlIGxlbmd0aCBwYXNzZWQgdG8gQmxvYi5zbGljZSgpIHNob3VsZCBiZSB0cmFw
cGVkIGFuZCByZXN1bHQgaW4gYSB0cnVuY2F0ZWQgc2xpY2UgYmVpbmcgcmV0dXJuZWQuCitCbG9i
IHNsaWNlIGxlbmd0aDogMQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjkxODApCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0xMC0wOCAg
Q2hyaXMgRXZhbnMgIDxjZXZhbnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iIC8gQmxvYkJ1aWxkZXIgY2FuIGJlIHB1dCBp
bnRvIGJhZCBzdGF0ZSB3aXRoIHdpbGQgaW50ZWdlcnMgYW5kIHN0cmluZ3MsIGR1ZSB0byBpbnRl
Z2VyIG92ZXJmbG93cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDczODIKKworICAgICAgICBBZGQgdGVzdCBmb3IgQmxvYi5zbGljZSgpIGludGVnZXIg
b3ZlcmZsb3cuCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3cuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9maWxlcy9ibG9iLXNsaWNlLW92ZXJmbG93LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisKIDIwMTAtMTAtMDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHRlc3QgZXhwZWN0YXRpb24gdXBkYXRlLgo=
</data>
<flag name="review"
          id="60520"
          type_id="1"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70661</attachid>
            <date>2010-10-13 14:28:58 -0700</date>
            <delta_ts>2010-10-13 17:21:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>47382_6.diff</filename>
            <type>text/plain</type>
            <size>4133</size>
            <attacher name="Chris Evans">cevans</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZmlsZWFwaS9CbG9iLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Zp
bGVhcGkvQmxvYi5jcHAJKHJldmlzaW9uIDY5NjQ1KQorKysgV2ViQ29yZS9maWxlYXBpL0Jsb2Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBACiAgICAgaWYgKHN0YXJ0ID49IHNp
emUpIHsKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBsZW5ndGggPSAwOwotICAgIH0gZWxz
ZSBpZiAoc3RhcnQgKyBsZW5ndGggPiBzaXplKQorICAgIH0gZWxzZSBpZiAoc3RhcnQgKyBsZW5n
dGggPiBzaXplIHx8IGxlbmd0aCA+IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4
KCkgLSBzdGFydCkKICAgICAgICAgbGVuZ3RoID0gc2l6ZSAtIHN0YXJ0OwogCiAgICAgT3duUHRy
PEJsb2JEYXRhPiBibG9iRGF0YSA9IEJsb2JEYXRhOjpjcmVhdGUoKTsKSW5kZXg6IFdlYkNvcmUv
ZmlsZWFwaS9CbG9iQnVpbGRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9maWxlYXBpL0Js
b2JCdWlsZGVyLmNwcAkocmV2aXNpb24gNjk2NDUpCisrKyBXZWJDb3JlL2ZpbGVhcGkvQmxvYkJ1
aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw3IEBACiAKICAgICBpZiAoIXV0
ZjhUZXh0LmlzTnVsbCgpKSB7CiAgICAgICAgIFZlY3RvcjxjaGFyPiYgYnVmZmVyID0gKm1faXRl
bXNbbV9pdGVtcy5zaXplKCkgLSAxXS5kYXRhLT5tdXRhYmxlRGF0YSgpOwotICAgICAgICB1bnNp
Z25lZCBvbGRTaXplID0gYnVmZmVyLnNpemUoKTsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBi
dWZmZXIuc2l6ZSgpOwogCiAgICAgICAgIGlmIChpc0VuZGluZ1R5cGVOYXRpdmUpCiAgICAgICAg
ICAgICBub3JtYWxpemVMaW5lRW5kaW5nc1RvTmF0aXZlKHV0ZjhUZXh0LCBidWZmZXIpOwpJbmRl
eDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDY5NjQ1KQorKysgV2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxOSBAQAorMjAxMC0xMC0xMyAgQ2hyaXMgRXZhbnMgIDxjZXZhbnNAZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCbG9iIC8g
QmxvYkJ1aWxkZXIgY2FuIGJlIHB1dCBpbnRvIGJhZCBzdGF0ZSB3aXRoIHdpbGQgaW50ZWdlcnMg
YW5kIHN0cmluZ3MsIGR1ZSB0byBpbnRlZ2VyIG92ZXJmbG93cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDczODIKKworICAgICAgICBGaXggaW50ZWdl
ciBvdmVyZmxvdyBlcnJvcnMgaW4gQmxvYi5zbGljZSBhbmQgQmxvYkJ1aWxkZXIuYXBwZW5kLgor
CisgICAgICAgIFRlc3Q6IGZhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sCisKKyAg
ICAgICAgKiBmaWxlYXBpL0Jsb2IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmxvYjo6c2xpY2Up
OiBoYW5kbGUgaW50ZWdlciBvdmVyZmxvdyBwcm9wZXJseS4KKyAgICAgICAgKiBmaWxlYXBpL0Js
b2JCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJsb2JCdWlsZGVyOjphcHBlbmQpOiB1
c2UgY29ycmVjdCB0eXBlIGZvciB2ZWN0b3IgbGVuZ3RoLgorCiAyMDEwLTEwLTEzICBKZW5uIEJy
YWl0aHdhaXRlICA8amVubmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERt
aXRyeSBUaXRvdi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGljZS1vdmVy
Zmxvdy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmlsZXMvYmxvYi1zbGlj
ZS1vdmVyZmxvdy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9i
bG9iLXNsaWNlLW92ZXJmbG93Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYgQEAKKzxo
dG1sPgorPGJvZHk+CitUaGUgZXhjZXNzaXZlIGxlbmd0aCBwYXNzZWQgdG8gQmxvYi5zbGljZSgp
IHNob3VsZCBiZSB0cmFwcGVkIGFuZCByZXN1bHQgaW4KK2EgdHJ1bmNhdGVkIHNsaWNlIGJlaW5n
IHJldHVybmVkLgorPHByZSBpZD0nY29uc29sZSc+PC9wcmU+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKQorfQordmFyIGJ1
aWxkZXIgPSAgbmV3IEJsb2JCdWlsZGVyKCk7Cit2YXIgdGV4dCA9ICcnOworZm9yICh2YXIgaSA9
IDA7IGkgPCAyMDAwOyArK2kpIHRleHQgKz0gJ0EnOworYnVpbGRlci5hcHBlbmQodGV4dCk7Citi
bG9iID0gYnVpbGRlci5nZXRCbG9iKCk7CitzbGljZWRCbG9iID0gYmxvYi5zbGljZSgxOTk5LCA5
MjIzMzcyMDM2ODU0Nzc1MDAwKTsKK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0Jsb2Igc2xpY2UgbGVuZ3RoOiAn
ICsgc2xpY2VkQmxvYi5zaXplKSk7CitpZiAoc2xpY2VkQmxvYi5zaXplICE9IDEpIHsKKyAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZSgnRkFJTCcpKTsKK30KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorPC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Ut
b3ZlcmZsb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZmls
ZXMvYmxvYi1zbGljZS1vdmVyZmxvdy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL2Jsb2Itc2xpY2Utb3ZlcmZsb3ctZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1RoZSBleGNlc3NpdmUgbGVuZ3RoIHBhc3NlZCB0byBC
bG9iLnNsaWNlKCkgc2hvdWxkIGJlIHRyYXBwZWQgYW5kIHJlc3VsdCBpbiBhIHRydW5jYXRlZCBz
bGljZSBiZWluZyByZXR1cm5lZC4KK0Jsb2Igc2xpY2UgbGVuZ3RoOiAxCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2OTY0NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE1IEBACisyMDEwLTEwLTEzICBDaHJpcyBFdmFucyAgPGNldmFuc0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJsb2Ig
LyBCbG9iQnVpbGRlciBjYW4gYmUgcHV0IGludG8gYmFkIHN0YXRlIHdpdGggd2lsZCBpbnRlZ2Vy
cyBhbmQgc3RyaW5ncywgZHVlIHRvIGludGVnZXIgb3ZlcmZsb3dzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzM4MgorCisgICAgICAgIEFkZCB0ZXN0
IGZvciBCbG9iLnNsaWNlKCkgaW50ZWdlciBvdmVyZmxvdy4KKworICAgICAgICAqIGZhc3QvZmls
ZXMvYmxvYi1zbGljZS1vdmVyZmxvdy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ZpbGVz
L2Jsb2Itc2xpY2Utb3ZlcmZsb3ctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAxMC0xMC0xMyAg
QWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gVW5yZXZpZXdlZCwgYnVpbGQgZml4Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>