<?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>39131</bug_id>
          
          <creation_ts>2010-05-14 13:09:58 -0700</creation_ts>
          <short_desc>Refactor text encoding detection logic in FileReader</short_desc>
          <delta_ts>2010-05-19 17:25:15 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dimich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>225963</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-14 13:09:58 -0700</bug_when>
    <thetext>This is the cleanup for the FileReader patch (https://bugs.webkit.org/show_bug.cgi?id=38157) per the comment from Adam Barth:

WebCore/html/FileReader.cpp:256
 +          if (m_rawData.size() &gt;= 2 &amp;&amp; m_rawData[0] == &apos;\xFE&apos; &amp;&amp; m_rawData[1] == &apos;\xFF&apos;) {
Yuck.  Is this in the spec?  We should move this to a more generic location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225964</commentid>
    <comment_count>1</comment_count>
      <attachid>56101</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-14 13:11:21 -0700</bug_when>
    <thetext>Created attachment 56101
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226053</commentid>
    <comment_count>2</comment_count>
      <attachid>56101</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-14 16:49:06 -0700</bug_when>
    <thetext>Comment on attachment 56101
Proposed Patch

Encoding sniffing is definitely not something the TextEncoding class should responsible for. And I think that we already have all the code for this - can&apos;t you just feed the data to TextResourceDecoder as text/plain?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228022</commentid>
    <comment_count>3</comment_count>
      <attachid>56525</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-19 15:51:26 -0700</bug_when>
    <thetext>Created attachment 56525
Proposed Patch

Changed to call TextResourceDecoder::decode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228050</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-19 16:26:23 -0700</bug_when>
    <thetext>+            // Per the File API spec, we SHOULD use the supplied encoding and do not check for BOM if the encoding is provided and valid.

Since this is SHOULD, and not a MUST, we could also ignore this requirement, like we do for Web content (it&apos;s also debatable whether it&apos;s right to always have the BOM override every other indication of character set, but that&apos;s what we do).

I don&apos;t have a strong opinion, just wanted to point out that it might be good to be consistent within WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228054</commentid>
    <comment_count>5</comment_count>
      <attachid>56531</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-19 16:40:34 -0700</bug_when>
    <thetext>Created attachment 56531
Proposed Patch

Your suggestion makes sense. I changed to ignore this requirement in order to be consistent with other part of WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228071</commentid>
    <comment_count>6</comment_count>
      <attachid>56531</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-19 16:54:29 -0700</bug_when>
    <thetext>Comment on attachment 56531
Proposed Patch

+    m_result = m_decoder-&gt;decode(&amp;m_rawData.at(0), m_rawData.size());

One also needs to call flush() to make sure that e.g. incomplete UTF-8 sequences at the end get converted to U+FFFD REPLACEMENT CHARACTER, and to be generally compatible with TextResourceDecoder design.

r=me if you call flush() and append the result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228098</commentid>
    <comment_count>7</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-05-19 17:25:15 -0700</bug_when>
    <thetext>Fixed as suggested and committed as http://trac.webkit.org/changeset/59797.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56101</attachid>
            <date>2010-05-14 13:11:21 -0700</date>
            <delta_ts>2010-05-19 15:51:26 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>39131</filename>
            <type>text/plain</type>
            <size>3772</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjhjNTQ0Yi4uMGY0MWM2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNS0xNCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTW92ZSB0ZXh0IGVuY29kaW5nIGRldGVjdGlvbiBsb2dpYyBmcm9tIEZpbGVS
ZWFkZXIgdG8gYSBnZW5lcmljIGxvY2F0aW9uLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxMzEKKworICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpU
ZXh0RW5jb2Rpbmc6OmdldEVuY29kaW5nRnJvbURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nLmg6CisKIDIwMTAtMDUtMTQgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFt
YWppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiAgQXR0ZW1wdCB0byBmaXgg
Y2hyb21pdW0ncyBtZW1vcnkgYm90IGVycm9yLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Zp
bGVSZWFkZXIuY3BwIGIvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCmluZGV4IDY5ZTAxY2Uu
LjkyMDE3NWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAKQEAgLTI1MSwyMSArMjUxLDkgQEAgdm9pZCBGaWxl
UmVhZGVyOjpjb252ZXJ0VG9UZXh0KCkKICAgICB9CiAKICAgICAvLyBUcnkgdG8gZGV0ZXJtaW5l
IHRoZSBlbmNvZGluZyBpZiBpdCBpcyBub3QgcHJvdmlkZWQuCi0gICAgLy8gRklYTUU6IG1vdmUg
dGhlIGZvbGxvd2luZyBsb2dpYyB0byBhIG1vcmUgZ2VuZXJpYyBwbGFjZS4KLSAgICBpbnQgb2Zm
c2V0ID0gMDsKLSAgICBpZiAoIW1fZW5jb2RpbmcuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGlmICht
X3Jhd0RhdGEuc2l6ZSgpID49IDIgJiYgbV9yYXdEYXRhWzBdID09ICdceEZFJyAmJiBtX3Jhd0Rh
dGFbMV0gPT0gJ1x4RkYnKSB7Ci0gICAgICAgICAgICBvZmZzZXQgPSAyOwotICAgICAgICAgICAg
bV9lbmNvZGluZyA9IFVURjE2QmlnRW5kaWFuRW5jb2RpbmcoKTsKLSAgICAgICAgfSBlbHNlIGlm
IChtX3Jhd0RhdGEuc2l6ZSgpID49IDIgJiYgbV9yYXdEYXRhWzBdID09ICdceEZGJyAmJiBtX3Jh
d0RhdGFbMV0gPT0gJ1x4RkUnKSB7Ci0gICAgICAgICAgICBvZmZzZXQgPSAyOwotICAgICAgICAg
ICAgbV9lbmNvZGluZyA9IFVURjE2TGl0dGxlRW5kaWFuRW5jb2RpbmcoKTsKLSAgICAgICAgfSBl
bHNlIGlmIChtX3Jhd0RhdGEuc2l6ZSgpID49IDIgJiYgbV9yYXdEYXRhWzBdID09ICdceEVGJyAm
JiBtX3Jhd0RhdGFbMV0gPT0gJ1x4QkInICYmIG1fcmF3RGF0YVsyXSA9PSAnXHhCRicpIHsKLSAg
ICAgICAgICAgIG9mZnNldCA9IDM7Ci0gICAgICAgICAgICBtX2VuY29kaW5nID0gVVRGOEVuY29k
aW5nKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9lbmNvZGluZyA9IFVURjhFbmNv
ZGluZygpOwotICAgIH0KKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAwOworICAgIGlmICghbV9lbmNv
ZGluZy5pc1ZhbGlkKCkpCisgICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmc6OmdldEVu
Y29kaW5nRnJvbURhdGEobV9yYXdEYXRhLCBvZmZzZXQpOwogCiAgICAgLy8gRGVjb2RlIHRoZSBk
YXRhLgogICAgIC8vIEZJWE1FOiBjb25zaWRlciBzdXBwb3J0aW5nIGluY3JlbWVudGFsIGRlY29k
aW5nIHRvIGltcHJvdmUgdGhlIHBlcmYuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvVGV4dEVuY29kaW5nLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rpbmcu
Y3BwCmluZGV4IDBhOTk3YTIuLjAyOTkwZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmcuY3BwCkBAIC0yNDAsNiArMjQwLDI1IEBAIGNvbnN0IFRleHRFbmNvZGluZyYgVGV4dEVu
Y29kaW5nOjplbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9uKCkgY29uc3QKICAgICByZXR1cm4gKnRo
aXM7CiB9CiAKK2NvbnN0IFRleHRFbmNvZGluZyYgVGV4dEVuY29kaW5nOjpnZXRFbmNvZGluZ0Zy
b21EYXRhKGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSwgdW5zaWduZWQmIG9mZnNldCkKK3sKKyAg
ICBpZiAoZGF0YS5zaXplKCkgPj0gb2Zmc2V0ICsgMikgeworICAgICAgICBpZiAoZGF0YVtvZmZz
ZXRdID09ICdceEZFJyAmJiBkYXRhW29mZnNldCArIDFdID09ICdceEZGJykgeworICAgICAgICAg
ICAgb2Zmc2V0ICs9IDI7CisgICAgICAgICAgICByZXR1cm4gVVRGMTZCaWdFbmRpYW5FbmNvZGlu
ZygpOworICAgICAgICB9CisgICAgICAgIGlmIChkYXRhW29mZnNldF0gPT0gJ1x4RkYnICYmIGRh
dGFbb2Zmc2V0ICsgMV0gPT0gJ1x4RkUnKSB7CisgICAgICAgICAgICBvZmZzZXQgKz0gMjsKKyAg
ICAgICAgICAgIHJldHVybiBVVEYxNkxpdHRsZUVuZGlhbkVuY29kaW5nKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKGRhdGEuc2l6ZSgpID49IG9mZnNldCArIDMgJiYgZGF0YVtvZmZzZXRd
ID09ICdceEVGJyAmJiBkYXRhW29mZnNldCArIDFdID09ICdceEJCJyAmJiBkYXRhW29mZnNldCAr
IDJdID09ICdceEJGJykgeworICAgICAgICBvZmZzZXQgKz0gMzsKKyAgICAgICAgcmV0dXJuIFVU
RjhFbmNvZGluZygpOworICAgIH0KKyAgICByZXR1cm4gVVRGOEVuY29kaW5nKCk7Cit9CisKIGNv
bnN0IFRleHRFbmNvZGluZyYgQVNDSUlFbmNvZGluZygpCiB7CiAgICAgc3RhdGljIFRleHRFbmNv
ZGluZyBnbG9iYWxBU0NJSUVuY29kaW5nKCJBU0NJSSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5oCmluZGV4IDM0MjliYjUuLjhmYjJhMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4
dEVuY29kaW5nLmgKQEAgLTc5LDYgKzc5LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICBVQ2hhciBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3Q7CiAKKyAgICAgICAg
Ly8gRGV0ZXJtaW5lIHRoZSB0ZXh0IGVuY29kaW5nIGJhc2VkIG9uIHRoZSBieXRlIG9yZGVyIG1h
c2sgKEJPTSkgb2YgdGhlIGRhdGEuIElmIHRoZSBCT00gY2Fubm90IGJlIGZvdW5kLCByZXR1cm4g
dGhlIFVURjggZW5jb2RpbmcuCisgICAgICAgIC8vIE5vdGUgdGhhdCBvbmx5IFVURjggYW5kIFVU
RjE2IGVuY29kaW5nIGRldGVybWluYXRpb24gYXJlIHN1cHBvcnRlZC4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IFRleHRFbmNvZGluZyYgZ2V0RW5jb2RpbmdGcm9tRGF0YShjb25zdCBWZWN0b3I8Y2hh
cj4mLCB1bnNpZ25lZCYgb2Zmc2V0KTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNO
b25CeXRlQmFzZWRFbmNvZGluZygpIGNvbnN0OwogICAgICAgICBib29sIGlzVVRGN0VuY29kaW5n
KCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="40445"
          type_id="1"
          status="-"
          setter="ap"
    />
    <flag name="commit-queue"
          id="40446"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56525</attachid>
            <date>2010-05-19 15:51:26 -0700</date>
            <delta_ts>2010-05-19 16:40:34 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>39131_2</filename>
            <type>text/plain</type>
            <size>10249</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4ZDRkMDhhLi5jYjg2NzUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDUt
MTkgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRleHQgZW5jb2RpbmcgZGV0ZWN0
aW9uIGxvZ2ljIGluIEZpbGVSZWFkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTEzMQorCisgICAgICAgIEFkZCBtb3JlIHRlc3QgY292ZXJhZ2Ug
Zm9yIEZpbGVSZWFkZXIuCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLmh0bWw6CisgICAgICAg
ICogZmFzdC9maWxlcy9yZXNvdXJjZXMvYmluYXJ5LWZpbGU6IEFkZGVkLgorCiAyMDEwLTA1LTE5
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVy
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZXhwZWN0
ZWQudHh0CmluZGV4IDljZDUzZTUuLjdkYWEwMTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvZmlsZS1yZWFkZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvZmlsZS1yZWFkZXItZXhwZWN0ZWQudHh0CkBAIC00MSw2ICs0MSwxNSBAQCByZWFkeVN0
YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBl
dmVudAorVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0cmluZworcmVhZHlT
dGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZl
ZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogOQorcmVzdWx0OiAweDAg
MHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgorUmVjZWl2ZWQgbG9hZGVuZCBl
dmVudAogVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyB0ZXh0CiByZWFkeVN0YXRlOiAwCiBS
ZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKQEAgLTg2LDYgKzk1LDI0IEBAIHJlYWR5U3RhdGU6IDIK
IHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6IEhlbGxvCiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitU
ZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBCT00gZmlsZSBhcyB0ZXh0IHdpdGggVVRGOCBlbmNvZGlu
ZworcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAx
CitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogMTIKK3Jl
c3VsdDogMHhmZCAweGZkIDB4MCAweDQ4IDB4MCAweDY1IDB4MCAweDZjIDB4MCAweDZjIDB4MCAw
eDZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBCT00g
ZmlsZSBhcyB0ZXh0IHdpdGggaW52YWxpZCBlbmNvZGluZworcmVhZHlTdGF0ZTogMAorUmVjZWl2
ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50City
ZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBIZWxsbworUmVjZWl2ZWQgbG9h
ZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBkYXRhIFVSTAogcmVhZHlT
dGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2Zp
bGUtcmVhZGVyLmh0bWwKaW5kZXggMzlmNWQwNS4uN2JhYmJiMSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci5odG1sCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvZmlsZS1yZWFkZXIuaHRtbApAQCAtMTEsMTEgKzExLDE0IEBAIHZhciB0ZXN0Q2FzZXMg
PSBbCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNUZXh0IiwKICAgICAidGVzdFJlYWRpbmdF
bXB0eUZpbGVBc0RhdGFVUkwiLAogICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzQmlu
YXJ5U3RyaW5nIiwKKyAgICAidGVzdFJlYWRpbmdCaW5hcnlGaWxlQXNCaW5hcnlTdHJpbmciLAog
ICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5n
VVRGMTZCRUJPTUVuY29kZWRGaWxlQXNUZXh0IiwKICAgICAidGVzdFJlYWRpbmdVVEYxNkxFQk9N
RW5jb2RlZEZpbGVBc1RleHQiLAogICAgICJ0ZXN0UmVhZGluZ1VURjhCT01FbmNvZGVkRmlsZUFz
VGV4dCIsCiAgICAgInRlc3RSZWFkaW5nVVRGMTZCRUVuY29kZWRGaWxlQXNUZXh0V2l0aFVURjE2
RW5jb2RpbmciLAorICAgICJ0ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFzVGV4dFdp
dGhVVEY4RW5jb2RpbmciLAorICAgICJ0ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFz
VGV4dFdpdGhJbnZhbGlkRW5jb2RpbmciLAogICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmls
ZUFzRGF0YVVSTCIsCiAgICAgInRlc3RNdWx0aXBsZVJlYWRzIiwKIF07CkBAIC0yOSw2ICszMiw3
IEBAIHZhciB0ZXN0RmlsZUluZm9MaXN0ID0gWwogICAgIHsgJ25hbWUnOiAnVVRGMTZMRS1CT00t
ZmlsZScsICdwYXRoJzogJ3Jlc291cmNlcy9VVEYxNkxFLUJPTS50eHQnIH0sCiAgICAgeyAnbmFt
ZSc6ICdVVEY4LUJPTS1maWxlJywgJ3BhdGgnOiAncmVzb3VyY2VzL1VURjgtQk9NLnR4dCcgfSwK
ICAgICB7ICduYW1lJzogJ1VURjE2QkUtZmlsZScsICdwYXRoJzogJ3Jlc291cmNlcy9VVEYxNkJF
LnR4dCcgfSwKKyAgICB7ICduYW1lJzogJ2JpbmFyeS1maWxlJywgJ3BhdGgnOiAncmVzb3VyY2Vz
L2JpbmFyeS1maWxlJyB9LAogXTsKIHZhciB0ZXN0RmlsZXMgPSB7IH07CiAKQEAgLTM3LDYgKzQx
LDI3IEBAIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQogICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSAr
ICJcbiIpKTsKIH0KIAorZnVuY3Rpb24gaXNBU0NJSVN0cmluZyhzdHIpCit7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKHN0ci5jaGFyQ29k
ZUF0KGkpID49IDEyOCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHRvSGV4YWRlY2ltYWwoc3RyKQoreworICAgIHZhciBy
ZXN1bHQgPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewor
ICAgICAgICB2YXIgaGV4ID0gIjB4IiArIChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpLnRvU3Ry
aW5nKDE2KTsKKyAgICAgICAgaWYgKGkgPiAwKQorICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsK
KyAgICAgICAgcmVzdWx0ICs9IGhleDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
ZnVuY3Rpb24gY3JlYXRlRmlsZVJlYWRlcigpCiB7CiAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxl
UmVhZGVyKCk7CkBAIC02Nyw3ICs5MiwxMCBAQCBmdW5jdGlvbiBsb2FkZWQoZXZlbnQpCiAgICAg
bG9nRXZlbnQoZXZlbnQpOwogICAgIGxvZygicmVhZHlTdGF0ZTogIiArIGV2ZW50LnRhcmdldC5y
ZWFkeVN0YXRlKTsKICAgICBsb2coInJlc3VsdCBzaXplOiAiICsgZXZlbnQudGFyZ2V0LnJlc3Vs
dC5sZW5ndGgpOwotICAgIGxvZygicmVzdWx0OiAiICsgZXZlbnQudGFyZ2V0LnJlc3VsdCk7CisK
KyAgICB2YXIgcmVzdWx0ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKKyAgICB2YXIgcmVzdWx0T3V0
cHV0ID0gaXNBU0NJSVN0cmluZyhyZXN1bHQpID8gcmVzdWx0IDogdG9IZXhhZGVjaW1hbChyZXN1
bHQpOworICAgIGxvZygicmVzdWx0OiAiICsgcmVzdWx0T3V0cHV0KTsKIH0KIAogZnVuY3Rpb24g
bG9hZEZhaWxlZChldmVudCkKQEAgLTEzOSw2ICsxNjcsMTMgQEAgZnVuY3Rpb24gdGVzdFJlYWRp
bmdVVEY4RW5jb2RlZEZpbGVBc0JpbmFyeVN0cmluZygpCiAgICAgcmVhZGVyLnJlYWRBc0JpbmFy
eVN0cmluZyh0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRp
bmdCaW5hcnlGaWxlQXNCaW5hcnlTdHJpbmcoKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEg
YmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0cmluZyIpOworICAgIHZhciByZWFkZXIgPSBjcmVhdGVG
aWxlUmVhZGVyKCk7CisgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXNbJ2Jp
bmFyeS1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFz
VGV4dCgpCiB7CiAgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIHRleHQiKTsK
QEAgLTE3NCw2ICsyMDksMjAgQEAgZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEYxNkJFRW5jb2RlZEZp
bGVBc1RleHRXaXRoVVRGMTZFbmNvZGluZygpCiAgICAgcmVhZGVyLnJlYWRBc1RleHQodGVzdEZp
bGVzWydVVEYxNkJFLWZpbGUnXSwgIlVURi0xNkJFIik7CiB9CiAKK2Z1bmN0aW9uIHRlc3RSZWFk
aW5nVVRGMTZCRUJPTUVuY29kZWRGaWxlQXNUZXh0V2l0aFVURjhFbmNvZGluZygpCit7CisgICAg
bG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBCT00gZmlsZSBhcyB0ZXh0IHdpdGggVVRGOCBl
bmNvZGluZyIpOworICAgIHZhciByZWFkZXIgPSBjcmVhdGVGaWxlUmVhZGVyKCk7CisgICAgcmVh
ZGVyLnJlYWRBc1RleHQodGVzdEZpbGVzWydVVEYxNkJFLUJPTS1maWxlJ10sICJVVEYtOCIpOwor
fQorCitmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFzVGV4dFdpdGhJ
bnZhbGlkRW5jb2RpbmcoKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTE2QkUgQk9N
IGZpbGUgYXMgdGV4dCB3aXRoIGludmFsaWQgZW5jb2RpbmciKTsKKyAgICB2YXIgcmVhZGVyID0g
Y3JlYXRlRmlsZVJlYWRlcigpOworICAgIHJlYWRlci5yZWFkQXNUZXh0KHRlc3RGaWxlc1snVVRG
MTZCRS1CT00tZmlsZSddLCAiQW55SW52YWxpZEVuY29kaW5nIik7Cit9CisKIGZ1bmN0aW9uIHRl
c3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNEYXRhVVJMKCkKIHsKICAgICBsb2coIlRlc3QgcmVh
ZGluZyBhIFVURi04IGZpbGUgYXMgZGF0YSBVUkwiKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvcmVzb3VyY2VzL2JpbmFyeS1maWxlIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy9yZXNvdXJjZXMvYmluYXJ5LWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzIzMTNkN2FjMTQxMTM0MzAwNjk2
MzFhMmIxNWRhZDAyM2Y0ZTdiYwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgOQpRY21aUXpXTkso
XmB1cCFjMDFjaTVmZEJ2aQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxN2QxZTk5Li5iMzFhNGM0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIyIEBACisyMDEwLTA1LTE5ICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZh
Y3RvciB0ZXh0IGVuY29kaW5nIGRldGVjdGlvbiBsb2dpYyBpbiBGaWxlUmVhZGVyLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkxMzEKKworICAgICAg
ICBDaGFuZ2VkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb1RleHQgdG8gY2FsbCBUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpkZWNvZGUgdG8KKyAgICAgICAgZGV0ZWN0IHRoZSBlbmNvZGluZyBmcm9tIEJPTSBh
bmQgZGVjb2RlIHRoZSB0ZXh0LiBBbHNvIGFkZCBhIG1ldGhvZAorICAgICAgICBza2lwQ2hlY2tG
b3JCT00oKSB0byBUZXh0UmVzb3VyY2VEZWNvZGVyIHNvIHRoYXQgd2UgY2FuIGNhbGwgaXQgdG8K
KyAgICAgICAgaW5kaWNhdGUgdGhhdCB3ZSBkbyBub3Qgd2FudCB0byBjaGVjayBmb3IgQk9NLiBU
aGlzIGlzIGJlY2F1c2UgRmlsZSBBUEkKKyAgICAgICAgc3BlYyBzYXlzIHRoYXQgdGhlIHN1cHBs
aWVkIGVuY29kaW5nIHNob3VsZCBiZSB1c2VkIGlmIGl0IGlzIHZhbGlkLgorCisgICAgICAgICog
aHRtbC9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmNvbnZl
cnRUb1RleHQpOgorICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5oOgorICAgICAgICAqIGxvYWRl
ci9UZXh0UmVzb3VyY2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UmVzb3VyY2VE
ZWNvZGVyOjpza2lwQ2hlY2tGb3JCT00pOgorCiAyMDEwLTA1LTE5ICBBbmRlcnMgQ2FybHNzb24g
IDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcCBiL1dlYkNvcmUvaHRtbC9G
aWxlUmVhZGVyLmNwcAppbmRleCA2YjRmMDY2Li5hZWU0OGY0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvRmlsZVJlYWRlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuY3BwCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIlByb2dyZXNz
RXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAi
VGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yNjYsMjYgKzI2NywxNyBAQCB2b2lkIEZpbGVSZWFkZXI6
OmNvbnZlcnRUb1RleHQoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gVHJ5IHRv
IGRldGVybWluZSB0aGUgZW5jb2RpbmcgaWYgaXQgaXMgbm90IHByb3ZpZGVkLgotICAgIC8vIEZJ
WE1FOiBtb3ZlIHRoZSBmb2xsb3dpbmcgbG9naWMgdG8gYSBtb3JlIGdlbmVyaWMgcGxhY2UuCi0g
ICAgaW50IG9mZnNldCA9IDA7Ci0gICAgaWYgKCFtX2VuY29kaW5nLmlzVmFsaWQoKSkgewotICAg
ICAgICBpZiAobV9yYXdEYXRhLnNpemUoKSA+PSAyICYmIG1fcmF3RGF0YVswXSA9PSAnXHhGRScg
JiYgbV9yYXdEYXRhWzFdID09ICdceEZGJykgewotICAgICAgICAgICAgb2Zmc2V0ID0gMjsKLSAg
ICAgICAgICAgIG1fZW5jb2RpbmcgPSBVVEYxNkJpZ0VuZGlhbkVuY29kaW5nKCk7Ci0gICAgICAg
IH0gZWxzZSBpZiAobV9yYXdEYXRhLnNpemUoKSA+PSAyICYmIG1fcmF3RGF0YVswXSA9PSAnXHhG
RicgJiYgbV9yYXdEYXRhWzFdID09ICdceEZFJykgewotICAgICAgICAgICAgb2Zmc2V0ID0gMjsK
LSAgICAgICAgICAgIG1fZW5jb2RpbmcgPSBVVEYxNkxpdHRsZUVuZGlhbkVuY29kaW5nKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAobV9yYXdEYXRhLnNpemUoKSA+PSAyICYmIG1fcmF3RGF0YVswXSA9
PSAnXHhFRicgJiYgbV9yYXdEYXRhWzFdID09ICdceEJCJyAmJiBtX3Jhd0RhdGFbMl0gPT0gJ1x4
QkYnKSB7Ci0gICAgICAgICAgICBvZmZzZXQgPSAzOwotICAgICAgICAgICAgbV9lbmNvZGluZyA9
IFVURjhFbmNvZGluZygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZW5jb2Rpbmcg
PSBVVEY4RW5jb2RpbmcoKTsKLSAgICB9Ci0KICAgICAvLyBEZWNvZGUgdGhlIGRhdGEuCiAgICAg
Ly8gRklYTUU6IGNvbnNpZGVyIHN1cHBvcnRpbmcgaW5jcmVtZW50YWwgZGVjb2RpbmcgdG8gaW1w
cm92ZSB0aGUgcGVyZi4KLSAgICBtX3Jlc3VsdCA9IG1fZW5jb2RpbmcuZGVjb2RlKCZtX3Jhd0Rh
dGEuYXQoMCkgKyBvZmZzZXQsIG1fcmF3RGF0YS5zaXplKCkgLSBvZmZzZXQpOworICAgIGlmICgh
bV9kZWNvZGVyKSB7CisgICAgICAgIGlmIChtX2VuY29kaW5nLmlzVmFsaWQoKSkgeworICAgICAg
ICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWlu
IiwgbV9lbmNvZGluZyk7CisgICAgICAgICAgICAvLyBQZXIgdGhlIEZpbGUgQVBJIHNwZWMsIHdl
IFNIT1VMRCB1c2UgdGhlIHN1cHBsaWVkIGVuY29kaW5nIGFuZCBkbyBub3QgY2hlY2sgZm9yIEJP
TSBpZiB0aGUgZW5jb2RpbmcgaXMgcHJvdmlkZWQgYW5kIHZhbGlkLgorICAgICAgICAgICAgbV9k
ZWNvZGVyLT5za2lwQ2hlY2tGb3JCT00oKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
X2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCBVVEY4
RW5jb2RpbmcoKSk7CisgICAgfQorICAgIG1fcmVzdWx0ID0gbV9kZWNvZGVyLT5kZWNvZGUoJm1f
cmF3RGF0YS5hdCgwKSwgbV9yYXdEYXRhLnNpemUoKSk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6
Y29udmVydFRvRGF0YVVSTCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5o
IGIvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIuaAppbmRleCA2ZmEzNjk5Li44MGQ0MjVjIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxl
UmVhZGVyLmgKQEAgLTUxLDYgKzUxLDcgQEAgY2xhc3MgQmxvYjsKIGNsYXNzIEZpbGU7CiBjbGFz
cyBGaWxlU3RyZWFtUHJveHk7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3Mg
VGV4dFJlc291cmNlRGVjb2RlcjsKIAogY2xhc3MgRmlsZVJlYWRlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEZpbGVSZWFkZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJn
ZXQsIHB1YmxpYyBGaWxlU3RyZWFtQ2xpZW50IHsKIHB1YmxpYzoKQEAgLTEzNSw2ICsxMzYsNyBA
QCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEJsb2I+IG1fZmlsZUJsb2I7CiAgICAgUmVhZFR5cGUg
bV9yZWFkVHlwZTsKKyAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKIAogICAgIC8vIExpa2Ug
WE1MSHR0cFJlcXVlc3QubV9yZXNwb25zZVRleHQsIHdlIGtlZXAgdGhpcyBhcyBhIFNjcmlwdFN0
cmluZywgbm90IGEgV2ViQ29yZTo6U3RyaW5nLgogICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZXNl
IHN0cmluZ3MgY2FuIGVhc2lseSBnZXQgaHVnZSAodGhleSBhcmUgZmlsbGVkIGZyb20gdGhlIGZp
bGUpIGFuZApAQCAtMTQ4LDggKzE1MCw4IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPGNoYXI+IG1f
cmF3RGF0YTsKICAgICBib29sIG1faXNSYXdEYXRhQ29udmVydGVkOwogCi0gICAgLy8gRW5jb2Rp
bmcgc2NoZW1lIHVzZWQgdG8gZGVjb2RlIHRoZSBkYXRhLgotICAgIFRleHRFbmNvZGluZyBtX2Vu
Y29kaW5nOworICAgIC8vIFRoZSBkZWNvZGVyIHVzZWQgdG8gZGVjb2RlIHRoZSB0ZXh0IGRhdGEu
CisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKIAogICAgIC8vIE5l
ZWRlZCB0byBjcmVhdGUgZGF0YSBVUkwuCiAgICAgU3RyaW5nIG1fZmlsZVR5cGU7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2xvYWRlci9UZXh0UmVzb3VyY2VEZWNvZGVyLmggYi9XZWJDb3JlL2xvYWRl
ci9UZXh0UmVzb3VyY2VEZWNvZGVyLmgKaW5kZXggZmI3NTVjOS4uMjU5YmM2OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9sb2FkZXIvVGV4dFJlc291cmNlRGVjb2Rlci5oCisrKyBiL1dlYkNvcmUvbG9h
ZGVyL1RleHRSZXNvdXJjZURlY29kZXIuaApAQCAtNjIsNiArNjIsNyBAQCBwdWJsaWM6CiAgICAK
ICAgICB2b2lkIHVzZUxlbmllbnRYTUxEZWNvZGluZygpIHsgbV91c2VMZW5pZW50WE1MRGVjb2Rp
bmcgPSB0cnVlOyB9CiAgICAgYm9vbCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2F3RXJy
b3I7IH0KKyAgICB2b2lkIHNraXBDaGVja0ZvckJPTSgpIHsgbV9jaGVja2VkRm9yQk9NID0gdHJ1
ZTsgfQogCiBwcml2YXRlOgogICAgIFRleHRSZXNvdXJjZURlY29kZXIoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSwgY29uc3QgVGV4dEVuY29kaW5nJiBkZWZhdWx0RW5jb2RpbmcsCg==
</data>
<flag name="commit-queue"
          id="40957"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56531</attachid>
            <date>2010-05-19 16:40:34 -0700</date>
            <delta_ts>2010-05-19 16:54:28 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>39131_3</filename>
            <type>text/plain</type>
            <size>9598</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4ZDRkMDhhLi5jYjg2NzUyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDUt
MTkgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRleHQgZW5jb2RpbmcgZGV0ZWN0
aW9uIGxvZ2ljIGluIEZpbGVSZWFkZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTEzMQorCisgICAgICAgIEFkZCBtb3JlIHRlc3QgY292ZXJhZ2Ug
Zm9yIEZpbGVSZWFkZXIuCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLWV4cGVj
dGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLmh0bWw6CisgICAgICAg
ICogZmFzdC9maWxlcy9yZXNvdXJjZXMvYmluYXJ5LWZpbGU6IEFkZGVkLgorCiAyMDEwLTA1LTE5
ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBOb3Qg
cmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVy
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXItZXhwZWN0
ZWQudHh0CmluZGV4IDljZDUzZTUuLmRhZTkwYjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvZmlsZS1yZWFkZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvZmlsZS1yZWFkZXItZXhwZWN0ZWQudHh0CkBAIC00MSw2ICs0MSwxNSBAQCByZWFkeVN0
YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBl
dmVudAorVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0cmluZworcmVhZHlT
dGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZl
ZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogOQorcmVzdWx0OiAweDAg
MHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgorUmVjZWl2ZWQgbG9hZGVuZCBl
dmVudAogVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyB0ZXh0CiByZWFkeVN0YXRlOiAwCiBS
ZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKQEAgLTg2LDYgKzk1LDI0IEBAIHJlYWR5U3RhdGU6IDIK
IHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6IEhlbGxvCiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitU
ZXN0IHJlYWRpbmcgYSBVVEYtMTZCRSBCT00gZmlsZSBhcyB0ZXh0IHdpdGggVVRGOCBlbmNvZGlu
ZworcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAx
CitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVz
dWx0OiBIZWxsbworUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTE2
QkUgQk9NIGZpbGUgYXMgdGV4dCB3aXRoIGludmFsaWQgZW5jb2RpbmcKK3JlYWR5U3RhdGU6IDAK
K1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBl
dmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2Vp
dmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgZGF0YSBVUkwK
IHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGxvYWRzdGFydCBldmVudApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9maWxlLXJlYWRlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy9maWxlLXJlYWRlci5odG1sCmluZGV4IDM5ZjVkMDUuLjdiYWJiYjEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvZmlsZS1yZWFkZXIuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL2ZpbGUtcmVhZGVyLmh0bWwKQEAgLTExLDExICsxMSwxNCBAQCB2YXIgdGVz
dENhc2VzID0gWwogICAgICJ0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzVGV4dCIsCiAgICAgInRlc3RS
ZWFkaW5nRW1wdHlGaWxlQXNEYXRhVVJMIiwKICAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZp
bGVBc0JpbmFyeVN0cmluZyIsCisgICAgInRlc3RSZWFkaW5nQmluYXJ5RmlsZUFzQmluYXJ5U3Ry
aW5nIiwKICAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc1RleHQiLAogICAgICJ0ZXN0
UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5nVVRG
MTZMRUJPTUVuY29kZWRGaWxlQXNUZXh0IiwKICAgICAidGVzdFJlYWRpbmdVVEY4Qk9NRW5jb2Rl
ZEZpbGVBc1RleHQiLAogICAgICJ0ZXN0UmVhZGluZ1VURjE2QkVFbmNvZGVkRmlsZUFzVGV4dFdp
dGhVVEYxNkVuY29kaW5nIiwKKyAgICAidGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVB
c1RleHRXaXRoVVRGOEVuY29kaW5nIiwKKyAgICAidGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2Rl
ZEZpbGVBc1RleHRXaXRoSW52YWxpZEVuY29kaW5nIiwKICAgICAidGVzdFJlYWRpbmdVVEY4RW5j
b2RlZEZpbGVBc0RhdGFVUkwiLAogICAgICJ0ZXN0TXVsdGlwbGVSZWFkcyIsCiBdOwpAQCAtMjks
NiArMzIsNyBAQCB2YXIgdGVzdEZpbGVJbmZvTGlzdCA9IFsKICAgICB7ICduYW1lJzogJ1VURjE2
TEUtQk9NLWZpbGUnLCAncGF0aCc6ICdyZXNvdXJjZXMvVVRGMTZMRS1CT00udHh0JyB9LAogICAg
IHsgJ25hbWUnOiAnVVRGOC1CT00tZmlsZScsICdwYXRoJzogJ3Jlc291cmNlcy9VVEY4LUJPTS50
eHQnIH0sCiAgICAgeyAnbmFtZSc6ICdVVEYxNkJFLWZpbGUnLCAncGF0aCc6ICdyZXNvdXJjZXMv
VVRGMTZCRS50eHQnIH0sCisgICAgeyAnbmFtZSc6ICdiaW5hcnktZmlsZScsICdwYXRoJzogJ3Jl
c291cmNlcy9iaW5hcnktZmlsZScgfSwKIF07CiB2YXIgdGVzdEZpbGVzID0geyB9OwogCkBAIC0z
Nyw2ICs0MSwyNyBAQCBmdW5jdGlvbiBsb2cobWVzc2FnZSkKICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1l
c3NhZ2UgKyAiXG4iKSk7CiB9CiAKK2Z1bmN0aW9uIGlzQVNDSUlTdHJpbmcoc3RyKQoreworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlmIChzdHIu
Y2hhckNvZGVBdChpKSA+PSAxMjgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiB0b0hleGFkZWNpbWFsKHN0cikKK3sKKyAg
ICB2YXIgcmVzdWx0ID0gIiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyAr
K2kpIHsKKyAgICAgICAgdmFyIGhleCA9ICIweCIgKyAoc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZG
KS50b1N0cmluZygxNik7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAiICI7CisgICAgICAgIHJlc3VsdCArPSBoZXg7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIGZ1bmN0aW9uIGNyZWF0ZUZpbGVSZWFkZXIoKQogewogICAgIHZhciByZWFkZXIgPSBu
ZXcgRmlsZVJlYWRlcigpOwpAQCAtNjcsNyArOTIsMTAgQEAgZnVuY3Rpb24gbG9hZGVkKGV2ZW50
KQogICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICBsb2coInJlYWR5U3RhdGU6ICIgKyBldmVudC50
YXJnZXQucmVhZHlTdGF0ZSk7CiAgICAgbG9nKCJyZXN1bHQgc2l6ZTogIiArIGV2ZW50LnRhcmdl
dC5yZXN1bHQubGVuZ3RoKTsKLSAgICBsb2coInJlc3VsdDogIiArIGV2ZW50LnRhcmdldC5yZXN1
bHQpOworCisgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7CisgICAgdmFyIHJl
c3VsdE91dHB1dCA9IGlzQVNDSUlTdHJpbmcocmVzdWx0KSA/IHJlc3VsdCA6IHRvSGV4YWRlY2lt
YWwocmVzdWx0KTsKKyAgICBsb2coInJlc3VsdDogIiArIHJlc3VsdE91dHB1dCk7CiB9CiAKIGZ1
bmN0aW9uIGxvYWRGYWlsZWQoZXZlbnQpCkBAIC0xMzksNiArMTY3LDEzIEBAIGZ1bmN0aW9uIHRl
c3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNCaW5hcnlTdHJpbmcoKQogICAgIHJlYWRlci5yZWFk
QXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzWydVVEY4LWZpbGUnXSk7CiB9CiAKK2Z1bmN0aW9uIHRl
c3RSZWFkaW5nQmluYXJ5RmlsZUFzQmluYXJ5U3RyaW5nKCkKK3sKKyAgICBsb2coIlRlc3QgcmVh
ZGluZyBhIGJpbmFyeSBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKKyAgICB2YXIgcmVhZGVyID0g
Y3JlYXRlRmlsZVJlYWRlcigpOworICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGVzdEZp
bGVzWydiaW5hcnktZmlsZSddKTsKK30KKwogZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEY4RW5jb2Rl
ZEZpbGVBc1RleHQoKQogewogICAgIGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyB0
ZXh0Iik7CkBAIC0xNzQsNiArMjA5LDIwIEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nVVRGMTZCRUVu
Y29kZWRGaWxlQXNUZXh0V2l0aFVURjE2RW5jb2RpbmcoKQogICAgIHJlYWRlci5yZWFkQXNUZXh0
KHRlc3RGaWxlc1snVVRGMTZCRS1maWxlJ10sICJVVEYtMTZCRSIpOwogfQogCitmdW5jdGlvbiB0
ZXN0UmVhZGluZ1VURjE2QkVCT01FbmNvZGVkRmlsZUFzVGV4dFdpdGhVVEY4RW5jb2RpbmcoKQor
eworICAgIGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTE2QkUgQk9NIGZpbGUgYXMgdGV4dCB3aXRo
IFVURjggZW5jb2RpbmciKTsKKyAgICB2YXIgcmVhZGVyID0gY3JlYXRlRmlsZVJlYWRlcigpOwor
ICAgIHJlYWRlci5yZWFkQXNUZXh0KHRlc3RGaWxlc1snVVRGMTZCRS1CT00tZmlsZSddLCAiVVRG
LTgiKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVBc1Rl
eHRXaXRoSW52YWxpZEVuY29kaW5nKCkKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi0x
NkJFIEJPTSBmaWxlIGFzIHRleHQgd2l0aCBpbnZhbGlkIGVuY29kaW5nIik7CisgICAgdmFyIHJl
YWRlciA9IGNyZWF0ZUZpbGVSZWFkZXIoKTsKKyAgICByZWFkZXIucmVhZEFzVGV4dCh0ZXN0Rmls
ZXNbJ1VURjE2QkUtQk9NLWZpbGUnXSwgIkFueUludmFsaWRFbmNvZGluZyIpOworfQorCiBmdW5j
dGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzRGF0YVVSTCgpCiB7CiAgICAgbG9nKCJU
ZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGRhdGEgVVJMIik7CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9iaW5hcnktZmlsZSBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL2JpbmFyeS1maWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcyMzEzZDdhYzE0MTEz
NDMwMDY5NjMxYTJiMTVkYWQwMjNmNGU3YmMKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDkKUWNt
WlF6V05LKF5gdXAhYzAxY2k1ZmRCdmkKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTdkMWU5OS4u
YzUzZGRhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAxMC0wNS0xOSAgSmlhbiBMaSAgPGppYW5saUBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVmYWN0b3IgdGV4dCBlbmNvZGluZyBkZXRlY3Rpb24gbG9naWMgaW4gRmlsZVJlYWRlci4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5MTMxCisK
KyAgICAgICAgQ2hhbmdlZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0IHRvIGNhbGwgVGV4dFJl
c291cmNlRGVjb2Rlcjo6ZGVjb2RlIHRvCisgICAgICAgIGRldGVjdCB0aGUgZW5jb2RpbmcgZnJv
bSBCT00gYW5kIGRlY29kZSB0aGUgdGV4dC4gVGhvdWdoIHRoZSBGaWxlIEFQSQorICAgICAgICBz
cGVjIHNheXMgdGhhdCB0aGUgc3VwcGxpZWQgZW5jb2Rpbmcgc2hvdWxkIGJlIHVzZWQgaWYgaXQg
aXMgdmFsaWQsIHdlCisgICAgICAgIGNob29zZSB0byBpZ25vcmUgdGhpcyByZXF1aXJlbWVudCBp
biBvcmRlciB0byBiZSBjb25zaXN0ZW50IHdpdGggaG93CisgICAgICAgIFdlYktpdCBkZWNvZGVz
IHRoZSB3ZWIgY29udGVudDogYWx3YXlzIGhhcyB0aGUgQk9NIG92ZXJyaWRlIHRoZSBwcm92aWRl
ZAorICAgICAgICBlbmNvZGluZy4KKworICAgICAgICAqIGh0bWwvRmlsZVJlYWRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KToKKyAgICAgICAgKiBo
dG1sL0ZpbGVSZWFkZXIuaDoKKwogMjAxMC0wNS0xOSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJz
Y2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5jcHAgYi9XZWJDb3JlL2h0bWwvRmlsZVJlYWRl
ci5jcHAKaW5kZXggNmI0ZjA2Ni4uNjYzOTU3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0Zp
bGVSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmNwcApAQCAtNDEsNiAr
NDEsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50Lmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRleHRSZXNv
dXJjZURlY29kZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMjY2LDI2ICsyNjcsMTQgQEAgdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0
VG9UZXh0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIFRyeSB0byBkZXRlcm1p
bmUgdGhlIGVuY29kaW5nIGlmIGl0IGlzIG5vdCBwcm92aWRlZC4KLSAgICAvLyBGSVhNRTogbW92
ZSB0aGUgZm9sbG93aW5nIGxvZ2ljIHRvIGEgbW9yZSBnZW5lcmljIHBsYWNlLgotICAgIGludCBv
ZmZzZXQgPSAwOwotICAgIGlmICghbV9lbmNvZGluZy5pc1ZhbGlkKCkpIHsKLSAgICAgICAgaWYg
KG1fcmF3RGF0YS5zaXplKCkgPj0gMiAmJiBtX3Jhd0RhdGFbMF0gPT0gJ1x4RkUnICYmIG1fcmF3
RGF0YVsxXSA9PSAnXHhGRicpIHsKLSAgICAgICAgICAgIG9mZnNldCA9IDI7Ci0gICAgICAgICAg
ICBtX2VuY29kaW5nID0gVVRGMTZCaWdFbmRpYW5FbmNvZGluZygpOwotICAgICAgICB9IGVsc2Ug
aWYgKG1fcmF3RGF0YS5zaXplKCkgPj0gMiAmJiBtX3Jhd0RhdGFbMF0gPT0gJ1x4RkYnICYmIG1f
cmF3RGF0YVsxXSA9PSAnXHhGRScpIHsKLSAgICAgICAgICAgIG9mZnNldCA9IDI7Ci0gICAgICAg
ICAgICBtX2VuY29kaW5nID0gVVRGMTZMaXR0bGVFbmRpYW5FbmNvZGluZygpOwotICAgICAgICB9
IGVsc2UgaWYgKG1fcmF3RGF0YS5zaXplKCkgPj0gMiAmJiBtX3Jhd0RhdGFbMF0gPT0gJ1x4RUYn
ICYmIG1fcmF3RGF0YVsxXSA9PSAnXHhCQicgJiYgbV9yYXdEYXRhWzJdID09ICdceEJGJykgewot
ICAgICAgICAgICAgb2Zmc2V0ID0gMzsKLSAgICAgICAgICAgIG1fZW5jb2RpbmcgPSBVVEY4RW5j
b2RpbmcoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2VuY29kaW5nID0gVVRGOEVu
Y29kaW5nKCk7Ci0gICAgfQotCiAgICAgLy8gRGVjb2RlIHRoZSBkYXRhLgorICAgIC8vIFRoZSBG
aWxlIEFQSSBzcGVjIHNheXMgdGhhdCB3ZSBzaG91bGQgdXNlIHRoZSBzdXBwbGllZCBlbmNvZGlu
ZyBpZiBpdCBpcyB2YWxpZC4gSG93ZXZlciwgd2UgY2hvb3NlIHRvIGlnbm9yZSB0aGlzCisgICAg
Ly8gcmVxdWlyZW1lbnQgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIGhvdyBXZWJLaXQg
ZGVjb2RlcyB0aGUgd2ViIGNvbnRlbnQ6IGFsd2F5cyBoYXMgdGhlIEJPTSBvdmVycmlkZSB0aGUK
KyAgICAvLyBwcm92aWRlZCBlbmNvZGluZy4gICAgIAogICAgIC8vIEZJWE1FOiBjb25zaWRlciBz
dXBwb3J0aW5nIGluY3JlbWVudGFsIGRlY29kaW5nIHRvIGltcHJvdmUgdGhlIHBlcmYuCi0gICAg
bV9yZXN1bHQgPSBtX2VuY29kaW5nLmRlY29kZSgmbV9yYXdEYXRhLmF0KDApICsgb2Zmc2V0LCBt
X3Jhd0RhdGEuc2l6ZSgpIC0gb2Zmc2V0KTsKKyAgICBpZiAoIW1fZGVjb2RlcikKKyAgICAgICAg
bV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgbV9l
bmNvZGluZy5pc1ZhbGlkKCkgPyBtX2VuY29kaW5nIDogVVRGOEVuY29kaW5nKCkpOworICAgIG1f
cmVzdWx0ID0gbV9kZWNvZGVyLT5kZWNvZGUoJm1fcmF3RGF0YS5hdCgwKSwgbV9yYXdEYXRhLnNp
emUoKSk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTCgpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2h0bWwvRmlsZVJlYWRlci5oIGIvV2ViQ29yZS9odG1sL0ZpbGVSZWFkZXIu
aAppbmRleCA2ZmEzNjk5Li44MGQ0MjVjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvRmlsZVJl
YWRlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9GaWxlUmVhZGVyLmgKQEAgLTUxLDYgKzUxLDcgQEAg
Y2xhc3MgQmxvYjsKIGNsYXNzIEZpbGU7CiBjbGFzcyBGaWxlU3RyZWFtUHJveHk7CiBjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKIAogY2xh
c3MgRmlsZVJlYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVSZWFkZXI+LCBwdWJsaWMgQWN0
aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBGaWxlU3RyZWFtQ2xpZW50
IHsKIHB1YmxpYzoKQEAgLTEzNSw2ICsxMzYsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEJs
b2I+IG1fZmlsZUJsb2I7CiAgICAgUmVhZFR5cGUgbV9yZWFkVHlwZTsKKyAgICBUZXh0RW5jb2Rp
bmcgbV9lbmNvZGluZzsKIAogICAgIC8vIExpa2UgWE1MSHR0cFJlcXVlc3QubV9yZXNwb25zZVRl
eHQsIHdlIGtlZXAgdGhpcyBhcyBhIFNjcmlwdFN0cmluZywgbm90IGEgV2ViQ29yZTo6U3RyaW5n
LgogICAgIC8vIFRoYXQncyBiZWNhdXNlIHRoZXNlIHN0cmluZ3MgY2FuIGVhc2lseSBnZXQgaHVn
ZSAodGhleSBhcmUgZmlsbGVkIGZyb20gdGhlIGZpbGUpIGFuZApAQCAtMTQ4LDggKzE1MCw4IEBA
IHByaXZhdGU6CiAgICAgVmVjdG9yPGNoYXI+IG1fcmF3RGF0YTsKICAgICBib29sIG1faXNSYXdE
YXRhQ29udmVydGVkOwogCi0gICAgLy8gRW5jb2Rpbmcgc2NoZW1lIHVzZWQgdG8gZGVjb2RlIHRo
ZSBkYXRhLgotICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOworICAgIC8vIFRoZSBkZWNvZGVy
IHVzZWQgdG8gZGVjb2RlIHRoZSB0ZXh0IGRhdGEuCisgICAgUmVmUHRyPFRleHRSZXNvdXJjZURl
Y29kZXI+IG1fZGVjb2RlcjsKIAogICAgIC8vIE5lZWRlZCB0byBjcmVhdGUgZGF0YSBVUkwuCiAg
ICAgU3RyaW5nIG1fZmlsZVR5cGU7Cg==
</data>
<flag name="review"
          id="40963"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="40964"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>