<?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>146275</bug_id>
          
          <creation_ts>2015-06-23 23:41:46 -0700</creation_ts>
          <short_desc>Optimize Array.join and Array.reverse for high speed array types</short_desc>
          <delta_ts>2015-06-25 10:18:06 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>fpizlo</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1104321</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-23 23:41:46 -0700</bug_when>
    <thetext>Optimize Array.join and Array.reverse for high speed array types</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104322</commentid>
    <comment_count>1</comment_count>
      <attachid>255474</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-23 23:51:54 -0700</bug_when>
    <thetext>Created attachment 255474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104483</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 14:35:08 -0700</bug_when>
    <thetext>Any reviewer interested?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104504</commentid>
    <comment_count>3</comment_count>
      <attachid>255474</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-06-24 15:23:44 -0700</bug_when>
    <thetext>Comment on attachment 255474
Patch

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

r=me with fixes.

&gt; Source/JavaScriptCore/ChangeLog:9
&gt; +        test from the Peacekeeper benchark.

typo: benchark

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:394
&gt; +    JSString* separatorOnHeap;

This can be moved into the else clause below.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:422
&gt; +                joiner.append(*exec, value);

Don&apos;t you have to check for a possible exception after this due to the joiner append()?  The contiguous indexing type can have arbitrary objects that will run toString() and therefore potentially throw an exception.

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:471
&gt; +                joiner.append(*exec, value);

Ditto.  Need exception check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104505</commentid>
    <comment_count>4</comment_count>
      <attachid>255474</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 15:29:46 -0700</bug_when>
    <thetext>Comment on attachment 255474
Patch

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

Might need to add a bit of test coverage for the issues you spotted. Thanks for the review, Mark.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:394
&gt;&gt; +    JSString* separatorOnHeap;
&gt; 
&gt; This can be moved into the else clause below.

I don’t think it can. If it falls out of scope, then the separator, which could be a string computed by a toString function with no other references to it, might be garbage collected.

However, even if in scope, if it’s not used later I don’t know what guarantees the value will remain on the stack so it won’t be garbage collected. Maybe I need to do something else to make sure this works.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:422
&gt;&gt; +                joiner.append(*exec, value);
&gt; 
&gt; Don&apos;t you have to check for a possible exception after this due to the joiner append()?  The contiguous indexing type can have arbitrary objects that will run toString() and therefore potentially throw an exception.

Good point. I probably do. Let me think about it more.

&gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:471
&gt;&gt; +                joiner.append(*exec, value);
&gt; 
&gt; Ditto.  Need exception check?

Will consider.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104511</commentid>
    <comment_count>5</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-06-24 15:39:28 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt;&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:422
&gt; &gt;&gt; +                joiner.append(*exec, value);
&gt; &gt; 
&gt; &gt; Don&apos;t you have to check for a possible exception after this due to the joiner append()?  The contiguous indexing type can have arbitrary objects that will run toString() and therefore potentially throw an exception.
&gt; 
&gt; Good point. I probably do. Let me think about it more.

Glorious refactoring idea: Enforce exception checking by encoding throwiness in signatures somehow, e.g like we do in WebCore with ExceptionCode&amp; argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104593</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-24 21:33:14 -0700</bug_when>
    <thetext>Committed r185942: &lt;http://trac.webkit.org/changeset/185942&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104595</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-06-24 21:43:00 -0700</bug_when>
    <thetext>Looks like this change is causing build failures on a lot of bots:
https://build.webkit.org/builders/Apple%20Mavericks%20Release%20%28Build%29/builds/16483/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104596</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-06-24 21:47:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Looks like this change is causing build failures on a lot of bots:
&gt; https://build.webkit.org/builders/Apple%20Mavericks%20Release%20%28Build%29/
&gt; builds/16483/steps/compile-webkit/logs/stdio

We probably need to #include &quot;StrongInlines.h&quot;. I&apos;ll try this shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104597</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-06-24 21:53:28 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Looks like this change is causing build failures on a lot of bots:
&gt; &gt; https://build.webkit.org/builders/Apple%20Mavericks%20Release%20%28Build%29/
&gt; &gt; builds/16483/steps/compile-webkit/logs/stdio
&gt; 
&gt; We probably need to #include &quot;StrongInlines.h&quot;. I&apos;ll try this shortly.

Landed in &lt;http://trac.webkit.org/changeset/185943&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104673</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-06-25 10:18:06 -0700</bug_when>
    <thetext>Thanks so much for the build fix, Chris!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255474</attachid>
            <date>2015-06-23 23:51:54 -0700</date>
            <delta_ts>2015-06-24 15:23:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146275-20150623235110.patch</filename>
            <type>text/plain</type>
            <size>11980</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg1ODk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
MzQ1MzI0NzMxMGRhMDI3Y2JiMWZmODdhZDI5ZWQyYzhhOTBhYjQwLi5lYjkxZTdmMTIxNjhlMDI3
NWJmYzZiMDQxNzExMmQxYzcwMDIwMWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxNS0wNi0yMyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgT3B0aW1pemUgQXJyYXkuam9pbiBhbmQgQXJyYXkucmV2ZXJzZSBmb3IgaGlnaCBz
cGVlZCBhcnJheSB0eXBlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTQ2Mjc1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhpcyBzZWVtcyB0byB5aWVsZCBhbm90aGVyIDE3JSBzcGVlZCBpbXByb3ZlbWVu
dCBpbiB0aGUgYXJyYXkKKyAgICAgICAgdGVzdCBmcm9tIHRoZSBQZWFjZWtlZXBlciBiZW5jaGFy
ay4KKworICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
Ojppc0hvbGUpOiBBZGRlZC4gSGVscGVyIHRvIGNoZWNrIGZvciBob2xlcy4KKyAgICAgICAgKEpT
Qzo6Y29udGFpbnNIb2xlKTogRGl0dG8uCisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jSm9p
bik6IEFkZGVkIHNwZWNpYWwgY2FzZXMgZm9yIHRoZSB2YXJpb3VzIHR5cGVzCisgICAgICAgIG9m
IGFycmF5cyB0aGF0IGNvdWxkIGJlIGluIGEgYnV0dGVyZmx5LgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY1JldmVyc2UpOiBEaXR0by4KKworICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmdK
b2luZXIuaDogTWFkZSBhcHBlbmRFbXB0eVN0cmluZyBwdWJsaWMgc28gd2UgY2FuCisgICAgICAg
IGNhbGwgaXQgZnJvbSB0aGUgbmV3IHBhcnRzIG9mIEFycmF5LmpvaW4uCisKIDIwMTUtMDYtMjIg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgQXJyYXkuam9p
biB3b3JrIGRpcmVjdGx5IG9uIHN1YnN0cmluZ3Mgd2l0aG91dCByZWlmeWluZyB0aGVtCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKaW5kZXgg
MjlkMmE0NDA4Yzg4MGZlNmRhYjZhMTkwODZjODI0MmQxNmYzZDlkMS4uNzY5NzJkZWM4YzFmODEw
ZTg5ZTEyZWJkOGMwNjU3NzA5YmQ2OTM4NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcApAQCAtMzYwLDUwICszNjAsMTM3IEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdHJpbmdKb2luZXIuam9p
bigqZXhlYykpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNIb2xlKGRvdWJsZSB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gc3RkOjppc25hbih2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9v
bCBpc0hvbGUoY29uc3QgV3JpdGVCYXJyaWVyPFVua25vd24+JiB2YWx1ZSkKK3sKKyAgICByZXR1
cm4gIXZhbHVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgaW5saW5lIGJvb2wg
Y29udGFpbnNIb2xlKFQqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGlzSG9sZShkYXRhW2ld
KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNKb2luKEV4ZWNT
dGF0ZSogZXhlYykKIHsKLSAgICBKU09iamVjdCogdGhpc09iaiA9IGV4ZWMtPnRoaXNWYWx1ZSgp
LnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVjdChleGVjKTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iaik7CisgICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBleGVjLT50aGlzVmFsdWUoKS50b1RoaXMoZXhlYywgU3RyaWN0TW9kZSkudG9PYmplY3Qo
ZXhlYyk7CisKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBnZXRMZW5ndGgoZXhlYywgdGhpc09iamVj
dCk7CiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgU3RyaW5nUmVjdXJzaW9uQ2hlY2tlciBj
aGVja2VyKGV4ZWMsIHRoaXNPYmopOworICAgIFN0cmluZ1JlY3Vyc2lvbkNoZWNrZXIgY2hlY2tl
cihleGVjLCB0aGlzT2JqZWN0KTsKICAgICBpZiAoSlNWYWx1ZSBlYXJseVJldHVyblZhbHVlID0g
Y2hlY2tlci5lYXJseVJldHVyblZhbHVlKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZWFybHlSZXR1cm5WYWx1ZSk7CiAKLSAgICBKU1N0cmluZyogc2VwYXJhdG9yID0gbnVsbHB0
cjsKLSAgICBpZiAoIWV4ZWMtPmFyZ3VtZW50KDApLmlzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAg
c2VwYXJhdG9yID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyk7CisgICAgSlNTdHJp
bmcqIHNlcGFyYXRvck9uSGVhcDsKKyAgICBTdHJpbmdWaWV3IHNlcGFyYXRvcjsKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnQoMCkuaXNVbmRlZmluZWQoKSkgeworICAgICAgICBzdGF0aWMgY29uc3Qg
TENoYXIgY29tbWEgPSAnLCc7CisgICAgICAgIHNlcGFyYXRvciA9IHsgJmNvbW1hLCAxIH07Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgc2VwYXJhdG9yT25IZWFwID0gZXhlYy0+YXJndW1lbnQoMCku
dG9TdHJpbmcoZXhlYyk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisgICAgICAgIHNl
cGFyYXRvciA9IHNlcGFyYXRvck9uSGVhcC0+dmlldyhleGVjKTsKICAgICB9CiAKLSAgICBjb25z
dCBMQ2hhciBjb21tYSA9ICcsJzsKLSAgICBKU1N0cmluZ0pvaW5lciBzdHJpbmdKb2luZXIoKmV4
ZWMsIHNlcGFyYXRvciA/IHNlcGFyYXRvci0+dmlldyhleGVjKSA6IFN0cmluZ1ZpZXd7ICZjb21t
YSwgMSB9LCBsZW5ndGgpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICBhdXRvJiB2bSA9IGV4
ZWMtPnZtKCk7CiAKLSAgICB1bnNpZ25lZCBpID0gMDsKLQotICAgIGlmIChpc0pTQXJyYXkodGhp
c09iaikpIHsKLSAgICAgICAgSlNBcnJheSogYXJyYXkgPSBhc0FycmF5KHRoaXNPYmopOwotICAg
ICAgICBmb3IgKDsgaSA8IGxlbmd0aCAmJiBhcnJheS0+Y2FuR2V0SW5kZXhRdWlja2x5KGkpOyAr
K2kpIHsKLSAgICAgICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGFycmF5LT5nZXRJ
bmRleFF1aWNrbHkoaSkpOwotICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cisg
ICAgc3dpdGNoICh0aGlzT2JqZWN0LT5pbmRleGluZ1R5cGUoKSkgeworICAgIGNhc2UgQUxMX0NP
TlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQ
RVM6IHsKKyAgICAgICAgYXV0byYgYnV0dGVyZmx5ID0gKnRoaXNPYmplY3QtPmJ1dHRlcmZseSgp
OworICAgICAgICBpZiAobGVuZ3RoID4gYnV0dGVyZmx5LnB1YmxpY0xlbmd0aCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIEpTU3RyaW5nSm9pbmVyIGpvaW5lcigqZXhlYywgc2VwYXJh
dG9yLCBsZW5ndGgpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICBhdXRv
IGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91cygpLmRhdGEoKTsKKyAgICAgICAgYm9vbCBob2xl
c0tub3duVG9CZU9LID0gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRhdGFbaV0uZ2V0KCk7
CisgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZCgq
ZXhlYywgdmFsdWUpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFo
b2xlc0tub3duVG9CZU9LKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5z
dHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0pKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZ290byBnZW5lcmFsQ2FzZTsKKyAgICAgICAgICAgICAgICAgICAgaG9s
ZXNLbm93blRvQmVPSyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGpvaW5lci5hcHBlbmRFbXB0eVN0cmluZygpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsKKyAgICB9
CisgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGF1dG8mIGJ1
dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgaWYgKGxlbmd0aCA+
IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBK
U1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsIHNlcGFyYXRvciwgbGVuZ3RoKTsKKyAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRp
Z3VvdXNEb3VibGUoKS5kYXRhKCk7CisgICAgICAgIGJvb2wgaG9sZXNLbm93blRvQmVPSyA9IGZh
bHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGRhdGFbaV07CisgICAgICAgICAgICBpZiAoIWlzSG9s
ZSh2YWx1ZSkpCisgICAgICAgICAgICAgICAgam9pbmVyLmFwcGVuZCgqZXhlYywganNOdW1iZXIo
dmFsdWUpKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGlmICghaG9sZXNL
bm93blRvQmVPSykgeworICAgICAgICAgICAgICAgICAgICBpZiAodGhpc09iamVjdC0+c3RydWN0
dXJlKHZtKS0+aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gZ2VuZXJhbENhc2U7CisgICAgICAgICAgICAgICAgICAgIGhvbGVzS25v
d25Ub0JlT0sgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBqb2lu
ZXIuYXBwZW5kRW1wdHlTdHJpbmcoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpvaW5lci5qb2luKCpleGVjKSk7CisgICAgfQorICAg
IGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6IHsKKyAgICAgICAgYXV0byYg
c3RvcmFnZSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKS0+YXJyYXlTdG9yYWdlKCk7CisgICAg
ICAgIGlmIChsZW5ndGggPiBzdG9yYWdlLnZlY3Rvckxlbmd0aCgpKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGlmIChzdG9yYWdlLmhhc0hvbGVzKCkgJiYgdGhpc09iamVjdC0+c3RydWN0
dXJlKHZtKS0+aG9sZXNNdXN0Rm9yd2FyZFRvUHJvdG90eXBlKHZtKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4ZWMsIHNlcGFyYXRvciwgbGVu
Z3RoKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgYXV0byBkYXRhID0g
c3RvcmFnZS52ZWN0b3IoKS5kYXRhKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGRhdGFbaV0uZ2V0
KCk7CisgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgam9pbmVyLmFwcGVu
ZCgqZXhlYywgdmFsdWUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGpvaW5l
ci5hcHBlbmRFbXB0eVN0cmluZygpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoam9pbmVyLmpvaW4oKmV4ZWMpKTsKKyAgICB9CiAgICAgfQogCi0gICAgZm9yICg7
IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBKU1ZhbHVlIGVsZW1lbnQgPSB0aGlzT2JqLT5n
ZXQoZXhlYywgaSk7CitnZW5lcmFsQ2FzZToKKyAgICBKU1N0cmluZ0pvaW5lciBqb2luZXIoKmV4
ZWMsIHNlcGFyYXRvciwgbGVuZ3RoKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSBlbGVt
ZW50ID0gdGhpc09iamVjdC0+Z2V0SW5kZXgoZXhlYywgaSk7CiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7Ci0gICAgICAgIHN0cmluZ0pvaW5lci5hcHBlbmQoKmV4ZWMsIGVsZW1lbnQpOwor
ICAgICAgICBqb2luZXIuYXBwZW5kKCpleGVjLCBlbGVtZW50KTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKICAgICB9CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0cmluZ0pv
aW5lci5qb2luKCpleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqb2luZXIuam9p
bigqZXhlYykpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5UHJvdG9G
dW5jQ29uY2F0KEV4ZWNTdGF0ZSogZXhlYykKQEAgLTUyMSw0MCArNjA4LDc3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNQdXNoKEV4ZWNTdGF0ZSogZXhlYykK
IAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1JldmVyc2UoRXhl
Y1N0YXRlKiBleGVjKQogewotICAgIEpTT2JqZWN0KiB0aGlzT2JqID0gZXhlYy0+dGhpc1ZhbHVl
KCkudG9UaGlzKGV4ZWMsIFN0cmljdE1vZGUpLnRvT2JqZWN0KGV4ZWMpOwotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2JqKTsKKyAgICBKU09iamVjdCogdGhpc09i
amVjdCA9IGV4ZWMtPnRoaXNWYWx1ZSgpLnRvVGhpcyhleGVjLCBTdHJpY3RNb2RlKS50b09iamVj
dChleGVjKTsKKworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGdldExlbmd0aChleGVjLCB0aGlzT2Jq
ZWN0KTsKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKKyAgICBhdXRvJiB2bSA9IGV4ZWMtPnZtKCk7
CisKKyAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlwZSgpKSB7CisgICAgY2FzZSBB
TExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElO
R19UWVBFUzogeworICAgICAgICBhdXRvJiBidXR0ZXJmbHkgPSAqdGhpc09iamVjdC0+YnV0dGVy
Zmx5KCk7CisgICAgICAgIGlmIChsZW5ndGggPiBidXR0ZXJmbHkucHVibGljTGVuZ3RoKCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgYXV0byBkYXRhID0gYnV0dGVyZmx5LmNvbnRpZ3Vv
dXMoKS5kYXRhKCk7CisgICAgICAgIGlmIChjb250YWluc0hvbGUoZGF0YSwgbGVuZ3RoKSAmJiB0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5ob2xlc011c3RGb3J3YXJkVG9Qcm90b3R5cGUodm0p
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN0ZDo6cmV2ZXJzZShkYXRhLCBkYXRhICsg
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0KTsKKyAg
ICB9CisgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGF1dG8m
IGJ1dHRlcmZseSA9ICp0aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKKyAgICAgICAgaWYgKGxlbmd0
aCA+IGJ1dHRlcmZseS5wdWJsaWNMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBhdXRvIGRhdGEgPSBidXR0ZXJmbHkuY29udGlndW91c0RvdWJsZSgpLmRhdGEoKTsKKyAgICAg
ICAgaWYgKGNvbnRhaW5zSG9sZShkYXRhLCBsZW5ndGgpICYmIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSh2bSktPmhvbGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgc3RkOjpyZXZlcnNlKGRhdGEsIGRhdGEgKyBsZW5ndGgpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRoaXNPYmplY3QpOworICAgIH0KKyAgICBjYXNlIEFMTF9B
UlJBWV9TVE9SQUdFX0lOREVYSU5HX1RZUEVTOiB7CisgICAgICAgIGF1dG8mIHN0b3JhZ2UgPSAq
dGhpc09iamVjdC0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOworICAgICAgICBpZiAobGVu
Z3RoID4gc3RvcmFnZS52ZWN0b3JMZW5ndGgoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBpZiAoc3RvcmFnZS5oYXNIb2xlcygpICYmIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmhv
bGVzTXVzdEZvcndhcmRUb1Byb3RvdHlwZSh2bSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgYXV0byBkYXRhID0gc3RvcmFnZS52ZWN0b3IoKS5kYXRhKCk7CisgICAgICAgIHN0ZDo6cmV2
ZXJzZShkYXRhLCBkYXRhICsgbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSh0aGlzT2JqZWN0KTsKKyAgICB9CisgICAgfQorCiAgICAgdW5zaWduZWQgbWlkZGxlID0gbGVu
Z3RoIC8gMjsKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbWlkZGxlOyBrKyspIHsKICAg
ICAgICAgdW5zaWduZWQgbGsxID0gbGVuZ3RoIC0gayAtIDE7Ci0gICAgICAgIEpTVmFsdWUgb2Jq
MiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGxrMSk7CisgICAgICAgIEpTVmFsdWUgb2Jq
MiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmplY3QsIGxrMSk7CiAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7Ci0gICAgICAgIEpTVmFsdWUgb2JqID0gZ2V0UHJvcGVydHkoZXhlYywgdGhp
c09iaiwgayk7CisgICAgICAgIEpTVmFsdWUgb2JqID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09i
amVjdCwgayk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgaWYgKG9i
ajIpIHsKLSAgICAgICAgICAgIHRoaXNPYmotPnB1dEJ5SW5kZXhJbmxpbmUoZXhlYywgaywgb2Jq
MiwgdHJ1ZSk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5wdXRCeUluZGV4SW5saW5lKGV4ZWMs
IGssIG9iajIsIHRydWUpOwogICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxlKGV4ZWMtPnZtKCkpLT5kZWxl
dGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgaykpIHsKKyAgICAgICAgfSBlbHNlIGlm
ICghdGhpc09iamVjdC0+bWV0aG9kVGFibGUoZXhlYy0+dm0oKSktPmRlbGV0ZVByb3BlcnR5QnlJ
bmRleCh0aGlzT2JqZWN0LCBleGVjLCBrKSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYywgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZGVsZXRlIHByb3BlcnR5LiIpKTsKICAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAgICAgICAgIH0K
IAogICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICB0aGlzT2JqLT5wdXRCeUluZGV4SW5s
aW5lKGV4ZWMsIGxrMSwgb2JqLCB0cnVlKTsKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnB1dEJ5
SW5kZXhJbmxpbmUoZXhlYywgbGsxLCBvYmosIHRydWUpOwogICAgICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIXRoaXNPYmotPm1ldGhvZFRhYmxl
KGV4ZWMtPnZtKCkpLT5kZWxldGVQcm9wZXJ0eUJ5SW5kZXgodGhpc09iaiwgZXhlYywgbGsxKSkg
eworICAgICAgICB9IGVsc2UgaWYgKCF0aGlzT2JqZWN0LT5tZXRob2RUYWJsZShleGVjLT52bSgp
KS0+ZGVsZXRlUHJvcGVydHlCeUluZGV4KHRoaXNPYmplY3QsIGV4ZWMsIGxrMSkpIHsKICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGRlbGV0
ZSBwcm9wZXJ0eS4iKSk7CiAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpOwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhpc09iaik7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aGlzT2JqZWN0KTsKIH0KIAog
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY1NoaWZ0KEV4ZWNTdGF0
ZSogZXhlYykKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nSm9pbmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0pvaW5l
ci5oCmluZGV4IGI5MTRjZGI2NjdmNGQ0ZGUyMDNjOWU0YTQyYmM1YzQ2NWJhZTZkY2UuLjIyNDc4
NDQ5MzNhMjZjN2I0OTdlNjJlZmVhNTI2ODY5NDc4NWUxMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSm9pbmVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdKb2luZXIuaApAQCAtMzcsNiArMzcsNyBAQCBwdWJs
aWM6CiAgICAgSlNTdHJpbmdKb2luZXIoRXhlY1N0YXRlJiwgU3RyaW5nVmlldyBzZXBhcmF0b3Is
IHVuc2lnbmVkIHN0cmluZ0NvdW50KTsKIAogICAgIHZvaWQgYXBwZW5kKEV4ZWNTdGF0ZSYsIEpT
VmFsdWUpOworICAgIHZvaWQgYXBwZW5kRW1wdHlTdHJpbmcoKTsKIAogICAgIEpTVmFsdWUgam9p
bihFeGVjU3RhdGUmKTsKIApAQCAtNDQsNyArNDUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgYXBw
ZW5kKFN0cmluZ1ZpZXdXaXRoVW5kZXJseWluZ1N0cmluZyYmKTsKICAgICB2b2lkIGFwcGVuZDhC
aXQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRMaXRlcmFsKGNvbnN0IElkZW50aWZp
ZXImKTsKLSAgICB2b2lkIGFwcGVuZEVtcHR5U3RyaW5nKCk7CiAgICAgdW5zaWduZWQgam9pbmVk
TGVuZ3RoKEV4ZWNTdGF0ZSYpIGNvbnN0OwogCiAgICAgTENoYXIgbV9zaW5nbGVDaGFyYWN0ZXJT
ZXBhcmF0b3I7Cg==
</data>
<flag name="review"
          id="280549"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>