<?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>143996</bug_id>
          
          <creation_ts>2015-04-21 09:44:16 -0700</creation_ts>
          <short_desc>[[Set]] should be properly executed in JS builtins</short_desc>
          <delta_ts>2015-04-22 11:59:41 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>143926</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1087073</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-21 09:44:16 -0700</bug_when>
    <thetext>Currently, all assignments in builtins JS code is compiled into put_by_val_direct.
However, some functions (like Array.from) needs [[Set]]. (but it is now compiled into pu_by_val_direct, [[DefineOwnProperty]]).

By leveraging bytecode intrinsics, we&apos;ll fix it.
There&apos;s 2 plans to solve this.

1. Implement the bytecode intrinsic for [[DefineOwnProperty]] and remove the hack for builtins

Currently, assignments in builtins JS code are compiled into put_by_val_direct.
However, it&apos;s different from the default JS behavior.
In this plan, we implement the bytecode intrinsic emitting put_by_val_direct and use it explicitly.
And dropping the current hack for builtins.

2. Implement the bytecode intrinsic for [[Set]] and keep the current hack for builtins

However, a lot of builtins code requires [[DefineOwnProperty]] behavior rather than [[Set]].
So keeping the current hack for builtins. By default, assignments in builtins are compiled into put_by_val_direct.
And implementing the bytecode intrinsic emitting put_by_val ([[Set]])</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087103</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-21 11:07:11 -0700</bug_when>
    <thetext>I prefer option (1) because it is more obvious. Bracket access in a builtin has the same meaning as bracket access in normal JavaScript, and if you need non-traditional behavior, you must specify that.

So far, every time I&apos;ve encountered something in builtins that did not match regular JavaScript -- for example, conversion of put_by_val to put_by_val_direct, conversion of undefined to @undefined, not quite parsing the .js file as a normal program, ASSERTing that no capturing has taken place -- I have been surprised, and lost half a day to debugging. I&apos;d like to remove these surprises over time.

I think it is also nice for our builtins to annotate which features they require that are not possible in the programming language. Over time, we should urge the standards committee to make these features a part of the language.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087114</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-21 11:41:01 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; I prefer option (1) because it is more obvious. Bracket access in a builtin
&gt; has the same meaning as bracket access in normal JavaScript, and if you need
&gt; non-traditional behavior, you must specify that.
&gt; 
&gt; So far, every time I&apos;ve encountered something in builtins that did not match
&gt; regular JavaScript -- for example, conversion of put_by_val to
&gt; put_by_val_direct, conversion of undefined to @undefined, not quite parsing
&gt; the .js file as a normal program, ASSERTing that no capturing has taken
&gt; place -- I have been surprised, and lost half a day to debugging. I&apos;d like
&gt; to remove these surprises over time.
&gt; 
&gt; I think it is also nice for our builtins to annotate which features they
&gt; require that are not possible in the programming language. Over time, we
&gt; should urge the standards committee to make these features a part of the
&gt; language.

Agreed.
I think (1) is preferable too because it is intuitive that the witten JS code in builtins works as the same to the usual JS code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087373</commentid>
    <comment_count>3</comment_count>
      <attachid>251314</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-22 08:01:51 -0700</bug_when>
    <thetext>Created attachment 251314
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087377</commentid>
    <comment_count>4</comment_count>
      <attachid>251315</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-22 08:11:01 -0700</bug_when>
    <thetext>Created attachment 251315
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087461</commentid>
    <comment_count>5</comment_count>
      <attachid>251315</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-22 11:07:40 -0700</bug_when>
    <thetext>Comment on attachment 251315
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087463</commentid>
    <comment_count>6</comment_count>
      <attachid>251315</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-04-22 11:10:42 -0700</bug_when>
    <thetext>Comment on attachment 251315
Patch

Thank you for your review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087495</commentid>
    <comment_count>7</comment_count>
      <attachid>251315</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-22 11:59:38 -0700</bug_when>
    <thetext>Comment on attachment 251315
Patch

Clearing flags on attachment: 251315

Committed r183117: &lt;http://trac.webkit.org/changeset/183117&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1087496</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-22 11:59:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251314</attachid>
            <date>2015-04-22 08:01:51 -0700</date>
            <delta_ts>2015-04-22 08:10:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143996-20150423000046.patch</filename>
            <type>text/plain</type>
            <size>10217</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
Mzk2OWM5ZTEyMmFiNDU4MjhiYjI3NTBiNTJmZjUyOTNkN2M2ZWMwLi5jOGNjMDBmYzU5ZWQ0ZmNh
NmNkNWU0MTRlNWFjMjBmYjVhNDVkNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAxNS0wNC0yMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbW1NldF1dIHNob3VsZCBiZSBwcm9wZXJseSBleGVjdXRlZCBpbiBK
UyBidWlsdGlucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzOTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ3VycmVudGx5LCBhbGwgYXNzaWdubWVudHMgaW4gYnVpbHRpbnMgSlMgY29kZSBpcyBjb21w
aWxlZCBpbnRvIHB1dF9ieV92YWxfZGlyZWN0LgorICAgICAgICBIb3dldmVyLAorCisgICAgICAg
IDEuIFNvbWUgZnVuY3Rpb25zIChsaWtlIEFycmF5LmZyb20pIG5lZWRzIFtbU2V0XV0uIChidXQg
aXQgaXMgbm93IGNvbXBpbGVkIGludG8gcHV0X2J5X3ZhbF9kaXJlY3QsIFtbRGVmaW5lT3duUHJv
cGVydHldXSkuCisgICAgICAgIDIuIEl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgSlMg
YmVoYXZpb3IuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgaW1wbGVtZW50IHRoZSBieXRl
Y29kZSBpbnRyaW5zaWMgZW1pdHRpbmcgcHV0X2J5X3ZhbF9kaXJlY3QgYW5kIHVzZSBpdCBleHBs
aWNpdGx5LgorICAgICAgICBBbmQgZHJvcHBpbmcgdGhlIGN1cnJlbnQgaGFjayBmb3IgYnVpbHRp
bnMuCisKKworICAgICAgICAqIGJ1aWx0aW5zL0FycmF5LnByb3RvdHlwZS5qczoKKyAgICAgICAg
KGZpbHRlcik6CisgICAgICAgIChtYXApOgorICAgICAgICAoZmluZCk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRQdXRCeVZhbCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2FycmF5LWZp
bGwtcHV0LWJ5LXZhbC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRUaHJvdyk6CisgICAgICAg
ICguc2V0IGdldCBhcnJheSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2FycmF5LWZpbHRlci1w
dXQtYnktdmFsLWRpcmVjdC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
ICguc2V0IGdldCB2YXIpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1maW5kLWRvZXMt
bm90LWxvb2t1cC10d2ljZS5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAg
IChzaG91bGRUaHJvdyk6CisgICAgICAgICguZ2V0IHNob3VsZEJlKToKKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvYXJyYXktZnJvbS1wdXQtYnktdmFsLWRpcmVjdC5qczogQWRkZWQuCisgICAgICAg
IChzaG91bGRCZSk6CisgICAgICAgICguc2V0IGdldCB2YXIpOgorICAgICAgICAqIHRlc3RzL3N0
cmVzcy9hcnJheS1tYXAtcHV0LWJ5LXZhbC1kaXJlY3QuanM6IEFkZGVkLgorICAgICAgICAoc2hv
dWxkQmUpOgorICAgICAgICAoLnNldCBnZXQgdmFyKToKKwogMjAxNS0wNC0yMSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIGZpeCAzMi1iaXQu
IEZvcmdvdCB0byBtYWtlIHRoaXMgc2ltcGxlIGNoYW5nZSB0byAzMl82NCBhcyB3ZWxsLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5LnByb3RvdHlwZS5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMKaW5k
ZXggMjNkOGVhMjY2ODBmOTdiNjg4Zjc2NzdiYTBiZTc1ZjU2MjNjNjZkZi4uZDI0ZGU5NjU0Y2I2
ZTU5ZTFhYzIzN2M0NTdlNDI2ZTQ1OTFlYTJkZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J1aWx0aW5zL0FycmF5LnByb3RvdHlwZS5qcworKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQXJyYXkucHJvdG90eXBlLmpzCkBAIC05Miw4ICs5MiwxMCBAQCBmdW5j
dGlvbiBmaWx0ZXIoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pIHsKICAgICAgICAgaWYgKCEoaSBp
biBhcnJheSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgdmFyIGN1cnJlbnQgPSBh
cnJheVtpXQotICAgICAgICBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywgY3VycmVudCwgaSwg
YXJyYXkpKQotICAgICAgICAgICAgcmVzdWx0W25leHRJbmRleCsrXSA9IGN1cnJlbnQ7CisgICAg
ICAgIGlmIChjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBjdXJyZW50LCBpLCBhcnJheSkpIHsKKyAg
ICAgICAgICAgIEBwdXRCeVZhbERpcmVjdChyZXN1bHQsIG5leHRJbmRleCwgY3VycmVudCk7Cisg
ICAgICAgICAgICArK25leHRJbmRleDsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMTE5LDcgKzEyMSw4IEBAIGZ1bmN0aW9uIG1hcChjYWxsYmFjayAvKiwgdGhp
c0FyZyAqLykgewogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAg
ICAgaWYgKCEoaSBpbiBhcnJheSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmVz
dWx0W2ldID0gY2FsbGJhY2suQGNhbGwodGhpc0FyZywgYXJyYXlbaV0sIGksIGFycmF5KQorICAg
ICAgICB2YXIgbWFwcGVkVmFsdWUgPSBjYWxsYmFjay5AY2FsbCh0aGlzQXJnLCBhcnJheVtpXSwg
aSwgYXJyYXkpOworICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBpLCBtYXBwZWRWYWx1
ZSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMDcsOCArMjEwLDkgQEAgZnVu
Y3Rpb24gZmluZChjYWxsYmFjayAvKiwgdGhpc0FyZyAqLykgewogICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgaWYgKCEoaSBpbiBhcnJheSkpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5
W2ldLCBpLCBhcnJheSkpCi0gICAgICAgICAgICByZXR1cm4gYXJyYXlbaV07CisgICAgICAgIHZh
ciBrVmFsdWUgPSBhcnJheVtpXTsKKyAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcs
IGtWYWx1ZSwgaSwgYXJyYXkpKQorICAgICAgICAgICAgcmV0dXJuIGtWYWx1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIHVuZGVmaW5lZDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggNmUxOThjYTI3ZTA5
ZGEwMmRjOWNmNTMwYzI5Mjc3YzU2Y2FjMjliNC4uNGM3Y2UyZDk1ZTU2MjAwNmM5MzZmNzcwNjBh
OGUzYWM4NDkyOWMxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE1NzYsMTAgKzE1NzYsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEJ5VmFsKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogYmFzZSwgUgogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRQdXRCeVZhbChSZWdpc3RlcklEKiBiYXNlLCBSZWdpc3RlcklEKiBwcm9wZXJ0eSwgUmVnaXN0
ZXJJRCogdmFsdWUpCiB7CiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0g
bmV3QXJyYXlQcm9maWxlKCk7Ci0gICAgaWYgKG1faXNCdWlsdGluRnVuY3Rpb24pCi0gICAgICAg
IGVtaXRPcGNvZGUob3BfcHV0X2J5X3ZhbF9kaXJlY3QpOwotICAgIGVsc2UKLSAgICAgICAgZW1p
dE9wY29kZShvcF9wdXRfYnlfdmFsKTsKKyAgICBlbWl0T3Bjb2RlKG9wX3B1dF9ieV92YWwpOwog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChiYXNlLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQocHJvcGVydHktPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCh2YWx1ZS0+aW5kZXgoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2FycmF5LWZpbGwtcHV0LWJ5LXZhbC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvYXJyYXktZmlsbC1wdXQtYnktdmFsLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5ZWVm
ZWY5OGJmZDJjNjM4NjBkYTVlY2E0MjlkZDI2NjZiNGM1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZpbGwtcHV0LWJ5LXZhbC5q
cwpAQCAtMCwwICsxLDQ0IEBACitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBtZXNzYWdlKSB7
CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBmdW5jKCk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3Ip
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigibm90IHRocm93bi4iKTsKKyAgICBpZiAoU3RyaW5n
KGVycm9yKSAhPT0gbWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6
ICIgKyBTdHJpbmcoZXJyb3IpKTsKK30KKwordmFyIGFycmF5ID0gbmV3IEFycmF5KDEwKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgKGZ1bmN0aW9uIChpbmRleCkgewor
ICAgICAgICB2YXIgc2Vlbk9uY2UgPSBmYWxzZTsKKyAgICAgICAgdmFyIHN0b3JhZ2UgPSBudWxs
OworICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCBpbmRleCwg
eworICAgICAgICAgICAgZ2V0KCkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcign
Z2V0IGlzIGNhbGxlZC4nICsgaW5kZXgpOworICAgICAgICAgICAgICAgIHJldHVybiBzdG9yYWdl
OworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHNldCh2YWx1ZSkgeworICAgICAgICAgICAg
ICAgIGlmIChzZWVuT25jZSkKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdz
ZXQgaXMgY2FsbGVkLicgKyBpbmRleCk7CisgICAgICAgICAgICAgICAgc2Vlbk9uY2UgPSB0cnVl
OworICAgICAgICAgICAgICAgIHN0b3JhZ2UgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gc3RvcmFnZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfShpKSk7Cit9CisK
Ky8vIE5vIGVycm9yLCBidXQgYWxsIHNlZW5PbmNlIGJlY29tZXMgdHJ1ZS4KK2FycmF5LmZpbGwo
NDIpOworCisvLyBFbnN1cmVzIHRoYXQgYWxsIHNldHRlciBpcyBjYWxsZWQgb25jZS4KK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgYXJyYXlbaV0gPSBpOworICAgIH0sICJFcnJvcjogc2V0IGlzIGNhbGxlZC4iICsg
aSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Fy
cmF5LWZpbHRlci1wdXQtYnktdmFsLWRpcmVjdC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvYXJyYXktZmlsdGVyLXB1dC1ieS12YWwtZGlyZWN0LmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjBhOTJkODEyYTJlY2U4NDY2OWQyYjVkNTg1YzA2MmJjYTQ0YmMyYzgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZpbHRlci1wdXQt
YnktdmFsLWRpcmVjdC5qcwpAQCAtMCwwICsxLDI3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDsgKytpKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3Rv
dHlwZSwgaSwgeworICAgICAgICBnZXQoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J2dldCBpcyBjYWxsZWQuJyk7CisgICAgICAgIH0sCisgICAgICAgIHNldCh2YWx1ZSkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXQgaXMgY2FsbGVkLicpOworICAgICAgICB9Cisg
ICAgfSk7Cit9CisKK3ZhciBvcmlnaW5hbCA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5
XTsKKworLy8gRG9lc24ndCB0aHJvdyBhbnkgZXJyb3JzLgordmFyIGZpbHRlcmVkID0gb3JpZ2lu
YWwuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsKKyAgICByZXR1cm4gaW5kZXggJSAy
ID09IDA7Cit9KTsKKworc2hvdWxkQmUoZmlsdGVyZWQubGVuZ3RoLCA1KTsKK2ZvciAodmFyIGkg
PSAwOyBpIDwgNTsgKytpKSB7CisgICAgc2hvdWxkQmUoZmlsdGVyZWRbaV0sIGkgKiAyKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktZmlu
ZC1kb2VzLW5vdC1sb29rdXAtdHdpY2UuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2FycmF5LWZpbmQtZG9lcy1ub3QtbG9va3VwLXR3aWNlLmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg3
Zjc2N2ZmNTk3ZTM3ODNkMjY4YWQwNWEyOWVkYmE2NGUzMzMxNDMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZpbmQtZG9lcy1ub3Qt
bG9va3VwLXR3aWNlLmpzCkBAIC0wLDAgKzEsNDcgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVh
bCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiBzaG91
bGRUaHJvdyhmdW5jLCBtZXNzYWdlKSB7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkg
eworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvciA9IGU7
CisgICAgfQorICAgIGlmICghZXJyb3IpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigibm90IHRo
cm93bi4iKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gbWVzc2FnZSkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJiYWQgZXJyb3I6ICIgKyBTdHJpbmcoZXJyb3IpKTsKK30KKwordmFyIGFy
cmF5ID0gbmV3IEFycmF5KDEwKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7Cisg
ICAgKGZ1bmN0aW9uIChpbmRleCkgeworICAgICAgICB2YXIgc2Vlbk9uY2UgPSBmYWxzZTsKKyAg
ICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGFycmF5LCBpbmRleCwgeworICAgICAgICAgICAg
Z2V0KCkgeworICAgICAgICAgICAgICAgIGlmIChzZWVuT25jZSkKKyAgICAgICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgaXMgY2FsbGVkLicgKyBpbmRleCk7CisgICAgICAgICAg
ICAgICAgc2Vlbk9uY2UgPSB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfShpKSk7Cit9CisKK3Nob3VsZEJlKGFycmF5
Lmxlbmd0aCwgMTApOworCisvLyBEb2Vzbid0IHRocm93IGFueSBlcnJvcnMuCit2YXIgZmluZFZh
bHVlID0gYXJyYXkuZmluZChmdW5jdGlvbiAodmFsdWUpIHsKKyAgICByZXR1cm4gdmFsdWUgPT09
IDk7Cit9KTsKK3Nob3VsZEJlKGZpbmRWYWx1ZSwgOSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTA7ICsraSkgeworICAgIHNob3VsZFRocm93KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHZh
bHVlID0gYXJyYXlbaV07CisgICAgfSwgIkVycm9yOiBnZXQgaXMgY2FsbGVkLiIgKyBpKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktZnJv
bS1wdXQtYnktdmFsLWRpcmVjdC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvYXJyYXktZnJvbS1wdXQtYnktdmFsLWRpcmVjdC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYzg3OTJmNzMw
ODVjM2Y5NGFkYTYyMThkZWVkZjZlMjUwM2U4MWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1mcm9tLXB1dC1ieS12YWwtZGlyZWN0
LmpzCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQp
IHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyAr
K2kpIHsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXkucHJvdG90eXBlLCBpLCB7Cisg
ICAgICAgIGdldCgpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0IGlzIGNhbGxl
ZC4nKTsKKyAgICAgICAgfSwKKyAgICAgICAgc2V0KHZhbHVlKSB7CisgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ3NldCBpcyBjYWxsZWQuJyk7CisgICAgICAgIH0KKyAgICB9KTsKK30KKwor
dmFyIG9yaWdpbmFsID0gWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldOworCisvLyBEb2Vz
bid0IHRocm93IGFueSBlcnJvcnMuCit2YXIgZ2VuZXJhdGVkID0gQXJyYXkuZnJvbShvcmlnaW5h
bCk7CisKK3Nob3VsZEJlKGdlbmVyYXRlZC5sZW5ndGgsIDEwKTsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTA7ICsraSkgeworICAgIHNob3VsZEJlKGdlbmVyYXRlZFtpXSwgaSk7Cit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LW1hcC1wdXQtYnkt
dmFsLWRpcmVjdC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXkt
bWFwLXB1dC1ieS12YWwtZGlyZWN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg4ZTVjZGVmMDIwMTI4MDkxOGVh
ZmViNWQ2ODdiMzkyYWVmZDU3MzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LW1hcC1wdXQtYnktdmFsLWRpcmVjdC5qcwpAQCAtMCww
ICsxLDI3IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYg
KGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVl
OiAnICsgYWN0dWFsKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAg
T2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3RvdHlwZSwgaSwgeworICAgICAgICBnZXQo
KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldCBpcyBjYWxsZWQuJyk7CisgICAg
ICAgIH0sCisgICAgICAgIHNldCh2YWx1ZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCdzZXQgaXMgY2FsbGVkLicpOworICAgICAgICB9CisgICAgfSk7Cit9CisKK3ZhciBvcmlnaW5h
bCA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XTsKKworLy8gRG9lc24ndCB0aHJvdyBh
bnkgZXJyb3JzLgordmFyIG1hcHBlZCA9IG9yaWdpbmFsLm1hcChmdW5jdGlvbiAodmFsdWUpIHsK
KyAgICByZXR1cm4gdmFsdWUgKiAyOworfSk7CisKK3Nob3VsZEJlKG1hcHBlZC5sZW5ndGgsIDEw
KTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIHNob3VsZEJlKG1hcHBlZFtp
XSwgaSAqIDIpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>251315</attachid>
            <date>2015-04-22 08:11:01 -0700</date>
            <delta_ts>2015-04-22 11:59:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143996-20150423000957.patch</filename>
            <type>text/plain</type>
            <size>11829</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgzMTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
Mzk2OWM5ZTEyMmFiNDU4MjhiYjI3NTBiNTJmZjUyOTNkN2M2ZWMwLi5lYzJkMWI2OGEzNzc2ZjVk
MWZkZmY3YjRmMjU5MGIwYTNmZTYzZDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NyBAQAorMjAxNS0wNC0yMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbW1NldF1dIHNob3VsZCBiZSBwcm9wZXJseSBleGVjdXRlZCBpbiBK
UyBidWlsdGlucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQzOTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQ3VycmVudGx5LCBhbGwgYXNzaWdubWVudHMgaW4gYnVpbHRpbnMgSlMgY29kZSBpcyBjb21w
aWxlZCBpbnRvIHB1dF9ieV92YWxfZGlyZWN0LgorICAgICAgICBIb3dldmVyLAorCisgICAgICAg
IDEuIFNvbWUgZnVuY3Rpb25zIChsaWtlIEFycmF5LmZyb20pIG5lZWRzIFtbU2V0XV0uIChidXQg
aXQgaXMgbm93IGNvbXBpbGVkIGludG8gcHV0X2J5X3ZhbF9kaXJlY3QsIFtbRGVmaW5lT3duUHJv
cGVydHldXSkuCisgICAgICAgIDIuIEl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGRlZmF1bHQgSlMg
YmVoYXZpb3IuCisKKyAgICAgICAgSW4gdGhpcyBwYXRjaCwgd2UgaW1wbGVtZW50IHRoZSBieXRl
Y29kZSBpbnRyaW5zaWMgZW1pdHRpbmcgcHV0X2J5X3ZhbF9kaXJlY3QgYW5kIHVzZSBpdCBleHBs
aWNpdGx5LgorICAgICAgICBBbmQgZHJvcHBpbmcgdGhlIGN1cnJlbnQgaGFjayBmb3IgYnVpbHRp
bnMuCisKKyAgICAgICAgKiBidWlsdGlucy9BcnJheS5wcm90b3R5cGUuanM6CisgICAgICAgIChm
aWx0ZXIpOgorICAgICAgICAobWFwKToKKyAgICAgICAgKGZpbmQpOgorICAgICAgICAqIGJ5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0UHV0QnlWYWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1maWxs
LXB1dC1ieS12YWwuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkVGhyb3cpOgorICAgICAgICAo
LnNldCBnZXQgYXJyYXkpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1maWx0ZXItcHV0
LWJ5LXZhbC1kaXJlY3QuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAo
LnNldCBnZXQgdmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvYXJyYXktZmluZC1kb2VzLW5v
dC1sb29rdXAtdHdpY2UuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAo
c2hvdWxkVGhyb3cpOgorICAgICAgICAoLmdldCBzaG91bGRCZSk6CisgICAgICAgICogdGVzdHMv
c3RyZXNzL2FycmF5LWZyb20tcHV0LWJ5LXZhbC1kaXJlY3QuanM6IEFkZGVkLgorICAgICAgICAo
c2hvdWxkQmUpOgorICAgICAgICAoLnNldCBnZXQgdmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvYXJyYXktZnJvbS1zZXQtbGVuZ3RoLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToK
KyAgICAgICAgKEFycmF5TGlrZSk6CisgICAgICAgIChBcnJheUxpa2UucHJvdG90eXBlLnNldCBs
ZW5ndGgpOgorICAgICAgICAoQXJyYXlMaWtlLnByb3RvdHlwZS5nZXQgbGVuZ3RoKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvYXJyYXktbWFwLXB1dC1ieS12YWwtZGlyZWN0LmpzOiBBZGRlZC4K
KyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKC5zZXQgZ2V0IHZhcik6CisKIDIwMTUtMDQt
MjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBmaXggMzItYml0LiBGb3Jnb3QgdG8gbWFrZSB0aGlzIHNpbXBsZSBjaGFuZ2UgdG8gMzJfNjQg
YXMgd2VsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJh
eS5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXkucHJv
dG90eXBlLmpzCmluZGV4IDIzZDhlYTI2NjgwZjk3YjY4OGY3Njc3YmEwYmU3NWY1NjIzYzY2ZGYu
LmQyNGRlOTY1NGNiNmU1OWUxYWMyMzdjNDU3ZTQyNmU0NTkxZWEyZGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheS5wcm90b3R5cGUuanMKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5LnByb3RvdHlwZS5qcwpAQCAtOTIsOCAr
OTIsMTAgQEAgZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrIC8qLCB0aGlzQXJnICovKSB7CiAgICAg
ICAgIGlmICghKGkgaW4gYXJyYXkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHZh
ciBjdXJyZW50ID0gYXJyYXlbaV0KLSAgICAgICAgaWYgKGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcs
IGN1cnJlbnQsIGksIGFycmF5KSkKLSAgICAgICAgICAgIHJlc3VsdFtuZXh0SW5kZXgrK10gPSBj
dXJyZW50OworICAgICAgICBpZiAoY2FsbGJhY2suQGNhbGwodGhpc0FyZywgY3VycmVudCwgaSwg
YXJyYXkpKSB7CisgICAgICAgICAgICBAcHV0QnlWYWxEaXJlY3QocmVzdWx0LCBuZXh0SW5kZXgs
IGN1cnJlbnQpOworICAgICAgICAgICAgKytuZXh0SW5kZXg7CisgICAgICAgIH0KICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExOSw3ICsxMjEsOCBAQCBmdW5jdGlvbiBtYXAoY2Fs
bGJhY2sgLyosIHRoaXNBcmcgKi8pIHsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7CiAgICAgICAgIGlmICghKGkgaW4gYXJyYXkpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIHJlc3VsdFtpXSA9IGNhbGxiYWNrLkBjYWxsKHRoaXNBcmcsIGFycmF5W2ldLCBp
LCBhcnJheSkKKyAgICAgICAgdmFyIG1hcHBlZFZhbHVlID0gY2FsbGJhY2suQGNhbGwodGhpc0Fy
ZywgYXJyYXlbaV0sIGksIGFycmF5KTsKKyAgICAgICAgQHB1dEJ5VmFsRGlyZWN0KHJlc3VsdCwg
aSwgbWFwcGVkVmFsdWUpOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjA3LDgg
KzIxMCw5IEBAIGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2sgLyosIHRoaXNBcmcgKi8pIHsKICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGlmICghKGkgaW4gYXJy
YXkpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjYWxsYmFjay5AY2FsbCh0
aGlzQXJnLCBhcnJheVtpXSwgaSwgYXJyYXkpKQotICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ld
OworICAgICAgICB2YXIga1ZhbHVlID0gYXJyYXlbaV07CisgICAgICAgIGlmIChjYWxsYmFjay5A
Y2FsbCh0aGlzQXJnLCBrVmFsdWUsIGksIGFycmF5KSkKKyAgICAgICAgICAgIHJldHVybiBrVmFs
dWU7CiAgICAgfQogICAgIHJldHVybiB1bmRlZmluZWQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCmluZGV4
IDZlMTk4Y2EyN2UwOWRhMDJkYzljZjUzMGMyOTI3N2M1NmNhYzI5YjQuLjRjN2NlMmQ5NWU1NjIw
MDZjOTM2Zjc3MDYwYThlM2FjODQ5MjljMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCkBAIC0xNTc2LDEw
ICsxNTc2LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRCeVZhbChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UsIFIKIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0UHV0QnlWYWwoUmVnaXN0ZXJJRCogYmFzZSwgUmVnaXN0ZXJJRCogcHJv
cGVydHksIFJlZ2lzdGVySUQqIHZhbHVlKQogewogICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFy
cmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgpOwotICAgIGlmIChtX2lzQnVpbHRpbkZ1bmN0
aW9uKQotICAgICAgICBlbWl0T3Bjb2RlKG9wX3B1dF9ieV92YWxfZGlyZWN0KTsKLSAgICBlbHNl
Ci0gICAgICAgIGVtaXRPcGNvZGUob3BfcHV0X2J5X3ZhbCk7CisgICAgZW1pdE9wY29kZShvcF9w
dXRfYnlfdmFsKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYmFzZS0+aW5kZXgoKSk7CiAg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb3BlcnR5LT5pbmRleCgpKTsKICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1maWxsLXB1dC1ieS12YWwuanMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZpbGwtcHV0LWJ5LXZhbC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yOWVlZmVmOThiZmQyYzYzODYwZGE1ZWNhNDI5ZGQyNjY2YjRjNTQ3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1maWxs
LXB1dC1ieS12YWwuanMKQEAgLTAsMCArMSw0NCBAQAorZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVu
YywgbWVzc2FnZSkgeworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAg
ZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAg
ICBpZiAoIWVycm9yKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm5vdCB0aHJvd24uIik7Cisg
ICAgaWYgKFN0cmluZyhlcnJvcikgIT09IG1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiYmFkIGVycm9yOiAiICsgU3RyaW5nKGVycm9yKSk7Cit9CisKK3ZhciBhcnJheSA9IG5ldyBB
cnJheSgxMCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIChmdW5jdGlv
biAoaW5kZXgpIHsKKyAgICAgICAgdmFyIHNlZW5PbmNlID0gZmFsc2U7CisgICAgICAgIHZhciBz
dG9yYWdlID0gbnVsbDsKKyAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3Rv
dHlwZSwgaW5kZXgsIHsKKyAgICAgICAgICAgIGdldCgpIHsKKyAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ2dldCBpcyBjYWxsZWQuJyArIGluZGV4KTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc3RvcmFnZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXQodmFsdWUpIHsK
KyAgICAgICAgICAgICAgICBpZiAoc2Vlbk9uY2UpCisgICAgICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcignc2V0IGlzIGNhbGxlZC4nICsgaW5kZXgpOworICAgICAgICAgICAgICAgIHNl
ZW5PbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBzdG9yYWdlID0gdmFsdWU7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHN0b3JhZ2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAg
IH0oaSkpOworfQorCisvLyBObyBlcnJvciwgYnV0IGFsbCBzZWVuT25jZSBiZWNvbWVzIHRydWUu
CithcnJheS5maWxsKDQyKTsKKworLy8gRW5zdXJlcyB0aGF0IGFsbCBzZXR0ZXIgaXMgY2FsbGVk
IG9uY2UuCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICBzaG91bGRUaHJvdyhm
dW5jdGlvbiAoKSB7CisgICAgICAgIGFycmF5W2ldID0gaTsKKyAgICB9LCAiRXJyb3I6IHNldCBp
cyBjYWxsZWQuIiArIGkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9hcnJheS1maWx0ZXItcHV0LWJ5LXZhbC1kaXJlY3QuanMgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWZpbHRlci1wdXQtYnktdmFsLWRpcmVjdC5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4wYTkyZDgxMmEyZWNlODQ2NjlkMmI1ZDU4NWMwNjJiY2E0NGJjMmM4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJh
eS1maWx0ZXItcHV0LWJ5LXZhbC1kaXJlY3QuanMKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24g
c2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVk
KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0
eShBcnJheS5wcm90b3R5cGUsIGksIHsKKyAgICAgICAgZ2V0KCkgeworICAgICAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCdnZXQgaXMgY2FsbGVkLicpOworICAgICAgICB9LAorICAgICAgICBzZXQo
dmFsdWUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0IGlzIGNhbGxlZC4nKTsK
KyAgICAgICAgfQorICAgIH0pOworfQorCit2YXIgb3JpZ2luYWwgPSBbMCwgMSwgMiwgMywgNCwg
NSwgNiwgNywgOCwgOV07CisKKy8vIERvZXNuJ3QgdGhyb3cgYW55IGVycm9ycy4KK3ZhciBmaWx0
ZXJlZCA9IG9yaWdpbmFsLmZpbHRlcihmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7CisgICAgcmV0
dXJuIGluZGV4ICUgMiA9PSAwOworfSk7CisKK3Nob3VsZEJlKGZpbHRlcmVkLmxlbmd0aCwgNSk7
Citmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkgeworICAgIHNob3VsZEJlKGZpbHRlcmVkW2ld
LCBpICogMik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2FycmF5LWZpbmQtZG9lcy1ub3QtbG9va3VwLXR3aWNlLmpzIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1maW5kLWRvZXMtbm90LWxvb2t1cC10d2ljZS5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44N2Y3NjdmZjU5N2UzNzgzZDI2OGFkMDVhMjllZGJhNjRlMzMzMTQzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1m
aW5kLWRvZXMtbm90LWxvb2t1cC10d2ljZS5qcwpAQCAtMCwwICsxLDQ3IEBACitmdW5jdGlvbiBz
aG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQp
CisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKwor
ZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgbWVzc2FnZSkgeworICAgIHZhciBlcnJvciA9IG51
bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVycm9yKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIm5vdCB0aHJvd24uIik7CisgICAgaWYgKFN0cmluZyhlcnJvcikgIT09IG1lc3NhZ2Up
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYmFkIGVycm9yOiAiICsgU3RyaW5nKGVycm9yKSk7
Cit9CisKK3ZhciBhcnJheSA9IG5ldyBBcnJheSgxMCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTA7ICsraSkgeworICAgIChmdW5jdGlvbiAoaW5kZXgpIHsKKyAgICAgICAgdmFyIHNlZW5PbmNl
ID0gZmFsc2U7CisgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcnJheSwgaW5kZXgsIHsK
KyAgICAgICAgICAgIGdldCgpIHsKKyAgICAgICAgICAgICAgICBpZiAoc2Vlbk9uY2UpCisgICAg
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZ2V0IGlzIGNhbGxlZC4nICsgaW5kZXgp
OworICAgICAgICAgICAgICAgIHNlZW5PbmNlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIH0oaSkpOworfQorCitz
aG91bGRCZShhcnJheS5sZW5ndGgsIDEwKTsKKworLy8gRG9lc24ndCB0aHJvdyBhbnkgZXJyb3Jz
LgordmFyIGZpbmRWYWx1ZSA9IGFycmF5LmZpbmQoZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgcmV0
dXJuIHZhbHVlID09PSA5OworfSk7CitzaG91bGRCZShmaW5kVmFsdWUsIDkpOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICBzaG91bGRUaHJvdyhmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHZhciB2YWx1ZSA9IGFycmF5W2ldOworICAgIH0sICJFcnJvcjogZ2V0IGlzIGNhbGxl
ZC4iICsgaSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2FycmF5LWZyb20tcHV0LWJ5LXZhbC1kaXJlY3QuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2FycmF5LWZyb20tcHV0LWJ5LXZhbC1kaXJlY3QuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmM4NzkyZjczMDg1YzNmOTRhZGE2MjE4ZGVlZGY2ZTI1MDNlODFhNAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktZnJvbS1wdXQt
YnktdmFsLWRpcmVjdC5qcwpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1
YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDsgKytpKSB7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEFycmF5LnByb3Rv
dHlwZSwgaSwgeworICAgICAgICBnZXQoKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J2dldCBpcyBjYWxsZWQuJyk7CisgICAgICAgIH0sCisgICAgICAgIHNldCh2YWx1ZSkgeworICAg
ICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZXQgaXMgY2FsbGVkLicpOworICAgICAgICB9Cisg
ICAgfSk7Cit9CisKK3ZhciBvcmlnaW5hbCA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5
XTsKKworLy8gRG9lc24ndCB0aHJvdyBhbnkgZXJyb3JzLgordmFyIGdlbmVyYXRlZCA9IEFycmF5
LmZyb20ob3JpZ2luYWwpOworCitzaG91bGRCZShnZW5lcmF0ZWQubGVuZ3RoLCAxMCk7Citmb3Ig
KHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICBzaG91bGRCZShnZW5lcmF0ZWRbaV0sIGkp
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJh
eS1mcm9tLXNldC1sZW5ndGguanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2FycmF5LWZyb20tc2V0LWxlbmd0aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjZhZGVhZGIwMjA1NjY2NTY4
MzI5ODYyODY5MmQ5MDhiNWY2NzVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1mcm9tLXNldC1sZW5ndGguanMKQEAgLTAsMCArMSw0
NSBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyAr
IGFjdHVhbCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsIGksIHsKKyAgICAgICAgZ2V0KCkgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgaXMgY2FsbGVkLicpOworICAgICAgICB9
LAorICAgICAgICBzZXQodmFsdWUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignc2V0
IGlzIGNhbGxlZC4nKTsKKyAgICAgICAgfQorICAgIH0pOworfQorCitjbGFzcyBBcnJheUxpa2Ug
eworICAgIGNvbnN0cnVjdG9yKGxlbmd0aCkgeworICAgICAgICB0aGlzLmxlbmd0aENhbGxlZCA9
IGZhbHNlOworICAgICAgICB0aGlzLl9sZW5ndGggPSBsZW5ndGg7CisgICAgfQorICAgIHNldCBs
ZW5ndGgodmFsdWUpIHsKKyAgICAgICAgdGhpcy5sZW5ndGhDYWxsZWQgPSB0cnVlOworICAgICAg
ICB0aGlzLl9sZW5ndGggPSB2YWx1ZTsKKyAgICB9CisgICAgZ2V0IGxlbmd0aCgpIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2xlbmd0aDsKKyAgICB9Cit9CisKK3ZhciBhcnJheUxpa2UgPSBuZXcg
QXJyYXlMaWtlKDEwKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgIGFycmF5
TGlrZVtpXSA9IGk7Cit9CitzaG91bGRCZShhcnJheUxpa2UubGVuZ3RoQ2FsbGVkLCBmYWxzZSk7
CisKK3ZhciBnZW5lcmF0ZWQgPSBBcnJheS5mcm9tLmNhbGwoQXJyYXlMaWtlLCBhcnJheUxpa2Up
OworCitzaG91bGRCZShnZW5lcmF0ZWQubGVuZ3RoLCAxMCk7CitzaG91bGRCZShnZW5lcmF0ZWQg
aW5zdGFuY2VvZiBBcnJheUxpa2UsIHRydWUpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytp
KSB7CisgICAgc2hvdWxkQmUoZ2VuZXJhdGVkW2ldLCBpKTsKK30KK3Nob3VsZEJlKGFycmF5TGlr
ZS5sZW5ndGhDYWxsZWQsIGZhbHNlKTsKK3Nob3VsZEJlKGdlbmVyYXRlZC5sZW5ndGhDYWxsZWQs
IHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9h
cnJheS1tYXAtcHV0LWJ5LXZhbC1kaXJlY3QuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2FycmF5LW1hcC1wdXQtYnktdmFsLWRpcmVjdC5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OGU1
Y2RlZjAyMDEyODA5MThlYWZlYjVkNjg3YjM5MmFlZmQ1NzMyCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1tYXAtcHV0LWJ5LXZhbC1k
aXJlY3QuanMKQEAgLTAsMCArMSwyNyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBl
Y3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTA7ICsraSkgeworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheS5wcm90b3R5cGUsIGks
IHsKKyAgICAgICAgZ2V0KCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdnZXQgaXMg
Y2FsbGVkLicpOworICAgICAgICB9LAorICAgICAgICBzZXQodmFsdWUpIHsKKyAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcignc2V0IGlzIGNhbGxlZC4nKTsKKyAgICAgICAgfQorICAgIH0pOwor
fQorCit2YXIgb3JpZ2luYWwgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV07CisKKy8v
IERvZXNuJ3QgdGhyb3cgYW55IGVycm9ycy4KK3ZhciBtYXBwZWQgPSBvcmlnaW5hbC5tYXAoZnVu
Y3Rpb24gKHZhbHVlKSB7CisgICAgcmV0dXJuIHZhbHVlICogMjsKK30pOworCitzaG91bGRCZSht
YXBwZWQubGVuZ3RoLCAxMCk7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpIHsKKyAgICBz
aG91bGRCZShtYXBwZWRbaV0sIGkgKiAyKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>