<?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>12963</bug_id>
          
          <creation_ts>2007-03-04 02:11:42 -0800</creation_ts>
          <short_desc>Inconsistencies in JS array extras with Mozilla implementation</short_desc>
          <delta_ts>2007-03-29 04:49:51 -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>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>OS X 10.4</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="Jeff Walden (remove +bwo to email)">jwalden+bwo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>gavin.sharp</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>20501</commentid>
    <comment_count>0</comment_count>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2007-03-04 02:11:42 -0800</bug_when>
    <thetext>I recently made the effort to fully quantify the exact details of Mozilla&apos;s support for its array extensions: some, every, forEach, map, filter, and (lastI|i)ndexOf.  Exact JavaScript definitions of these methods which fully match the native Mozilla implementations are now posted on the Mozilla Developer Center:

http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:indexOf
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:lastIndexOf
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:some
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:filter
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:every
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:map
http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Objects:Array:forEach

Safari&apos;s done a good job of matching the Mozilla implementations, for the most part (including not replicating a bug Mozilla had up until the latest update).  I&apos;ve found a couple things you do differently, tho, and I&apos;m posting a patch for them.  (Feel free to compare against the above URLs for yourself as a double-check for any other latent issues.)  The issues discovered are as follows:

- forEach returns this, not undefined
- all the methods should ignore holes, not treat them as undefined (I think
  every/forEach/some already do this?)

I do not have a Mac and thus haven&apos;t tested the to-be-posted patch or the current implementation&apos;s behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20502</commentid>
    <comment_count>1</comment_count>
      <attachid>13470</attachid>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2007-03-04 02:14:59 -0800</bug_when>
    <thetext>Created attachment 13470
Patch

Picking the reviewer for the original extras implementation, let me know if someone else should do this...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20503</commentid>
    <comment_count>2</comment_count>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2007-03-04 02:19:44 -0800</bug_when>
    <thetext>I also have ECMAScript-262 ed. 3 style specs, since much of the code in some of the examples replicates specification-defined operators like ToNumber.  I currently have these specs at &lt;http://web.mit.edu/jwalden/www/array-extras.js&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20519</commentid>
    <comment_count>3</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-03-04 07:40:16 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I also have ECMAScript-262 ed. 3 style specs, since much of the code in some of
&gt; the examples replicates specification-defined operators like ToNumber.  I
&gt; currently have these specs at &lt;http://web.mit.edu/jwalden/www/array-extras.js&gt;.

Thanks for the patch, Jeff!  There are a few things needed before this may be landed:

- Create or update existing layout tests that fail before the patch is applied, and pass after the patch is applied.  I know you don&apos;t have a Mac, but these particular layout tests should run in Mozilla/Firefox (not all layout tests will work this way), and you should be able to add tests for the changed behavior that may be verified later by someone with a Mac.  If there are any Mac computer labs at MIT, you should be able to write/update these tests quite easily:

LayoutTests/fast/js/array-every.html
LayoutTests/fast/js/array-float-delete.html
LayoutTests/fast/js/array-foreach.html
LayoutTests/fast/js/array-index-immediate-types.html
LayoutTests/fast/js/array-indexof.html
LayoutTests/fast/js/array-join-bug-11524.html
LayoutTests/fast/js/array-lastIndexOf.html
LayoutTests/fast/js/array-some.html
LayoutTests/fast/js/array-tostring-ignore-separator.html

- A changelog entry (generated by prepare-ChangeLog in the WebKitTools/Scripts directory, then edited to include bug information and a description of the fix).

- A patch created by the WebKitTools/Scripts/svn-create-patch script (after the above changes) that includes the ChangeLog entries for JavaScriptCore and LayoutTests, the layout test changes, and the code changes.

Thanks again!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20551</commentid>
    <comment_count>4</comment_count>
      <attachid>13470</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-04 21:58:37 -0800</bug_when>
    <thetext>Comment on attachment 13470
Patch

Thanks. This help is quite welcome!

It&apos;s hard to read this patch because it has so much context! I&apos;m really used to the plain old &quot;-u&quot;.

The code change looks fine, but we need some test cases and a change log before we can review+ this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20566</commentid>
    <comment_count>5</comment_count>
      <attachid>13476</attachid>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2007-03-05 00:47:52 -0800</bug_when>
    <thetext>Created attachment 13476
Full patch (but haven&apos;t attempted to run the tests yet)

(In reply to comment #4)
&gt; It&apos;s hard to read this patch because it has so much context! I&apos;m really used
&gt; to the plain old &quot;-u&quot;.

Not overdoing context is good, but since -p was useless I wanted enough to show the names of the methods associated with each change.

&gt; The code change looks fine, but we need some test cases and a change log
&gt; before we can review+ this.

I whipped up some tests/changes earlier tonight as a break from classwork.  I&apos;m pretty sure the changes are correct, except possibly with respect to amounts of (trailing) whitespace (ugh).  I should have access to a Mac tomorrow night, so hopefully I&apos;ll be able to build/verify the tests then if no one else has (hence no review flag yet).

By the way, these methods are all tested in Mozilla&apos;s JS test suite, which is being reorganized to separate Moz-specific behaviors from ECMA-262 canon to aid use by other implementations.  (There are nascent plans to try to make some sort of generalized ECMA-262 test suite, but that&apos;s a while away for now.)  Except for forEach returning undefined, I&apos;d bet we have everything else tested -- resyncing wouldn&apos;t be a bad idea if you have the time, as a further correctness check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20389</commentid>
    <comment_count>6</comment_count>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2007-03-05 21:44:12 -0800</bug_when>
    <thetext>I wrongly expected the |getProperty()| function in JavaScriptCore returned NULL only for non-existent properties and not for properties with value set to |undefined|, so as written the patch doesn&apos;t pass the tests in it (even ignoring the whitespace and formatting flubs in it).  I need to use a getProperty/hasProperty pair to fix the problem.

Hopefully I&apos;ll have time to fix that by the end of the week, but I doubt it&apos;ll be any sooner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17589</commentid>
    <comment_count>7</comment_count>
      <attachid>13786</attachid>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2007-03-23 15:01:34 -0700</bug_when>
    <thetext>Created attachment 13786
Complete patch

Returning false for an array index whose element is undefined seems to be a bug, because hasProperty just returns the result of getPropertySlot.

This patch includes tests, passes all of them, and regresses no existing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>17446</commentid>
    <comment_count>8</comment_count>
      <attachid>13786</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-03-24 20:03:21 -0700</bug_when>
    <thetext>Comment on attachment 13786
Complete patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>16568</commentid>
    <comment_count>9</comment_count>
    <who name="Jeff Walden (remove +bwo to email)">jwalden+bwo</who>
    <bug_when>2007-03-29 04:49:51 -0700</bug_when>
    <thetext>http://trac.webkit.org/projects/webkit/changeset/20569</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13470</attachid>
            <date>2007-03-04 02:14:59 -0800</date>
            <delta_ts>2007-03-05 00:47:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>safari-js-arrays.diff</filename>
            <type>text/plain</type>
            <size>5188</size>
            <attacher name="Jeff Walden (remove +bwo to email)">jwalden+bwo</attacher>
            
              <data encoding="base64">SW5kZXg6IGFycmF5X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJyYXlfb2JqZWN0LmNwcAko
cmV2aXNpb24gMTk5NTIpCisrKyBhcnJheV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NzIsNDEgKzc3Miw0MSBAQCBKU1ZhbHVlICpBcnJheVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24o
CiAgICAgICAgIHRoaXNPYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsIGsrbnJBcmdzLTEpOwogICAg
IH0KICAgICBmb3IgKCB1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCBuckFyZ3M7ICsrayApCiAgICAg
ICB0aGlzT2JqLT5wdXQoZXhlYywgaywgYXJnc1trXSk7CiAgICAgcmVzdWx0ID0ganNOdW1iZXIo
bGVuZ3RoICsgbnJBcmdzKTsKICAgICB0aGlzT2JqLT5wdXQoZXhlYywgbGVuZ3RoUHJvcGVydHlO
YW1lLCByZXN1bHQsIERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiAgICAgYnJlYWs7CiAgIH0KICAg
Y2FzZSBGaWx0ZXI6CiAgIGNhc2UgTWFwOiB7CiAgICAgSlNPYmplY3QgKmVhY2hGdW5jdGlvbiA9
IGFyZ3NbMF0tPnRvT2JqZWN0KGV4ZWMpOwogICAgIAogICAgIGlmICghZWFjaEZ1bmN0aW9uLT5p
bXBsZW1lbnRzQ2FsbCgpKQogICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKICAgICAKICAgICBKU09iamVjdCAqYXBwbHlUaGlzID0gYXJnc1sxXS0+aXNVbmRlZmluZWRP
ck51bGwoKSA/IGV4ZWMtPmR5bmFtaWNJbnRlcnByZXRlcigpLT5nbG9iYWxPYmplY3QoKSA6ICBh
cmdzWzFdLT50b09iamVjdChleGVjKTsKICAgICBKU09iamVjdCAqcmVzdWx0QXJyYXk7CiAgICAg
CiAgICAgaWYgKGlkID09IEZpbHRlcikgCiAgICAgICByZXN1bHRBcnJheSA9IHN0YXRpY19jYXN0
PEpTT2JqZWN0ICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXkoKS0+
Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkpKTsKLSAgICBlbHNlCyB7CisgICAgZWxzZSB7
CiAgICAgICBMaXN0IGFyZ3M7CiAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsK
ICAgICAgIHJlc3VsdEFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZXhlYy0+bGV4aWNh
bEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLT5jb25zdHJ1Y3QoZXhlYywgYXJncykpOwog
ICAgIH0KICAgICAKICAgICB1bnNpZ25lZCBmaWx0ZXJJbmRleCA9IDA7CiAgICAgZm9yICh1bnNp
Z25lZCBrID0gMDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewog
ICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAKICAgICAgIGlmICghdGhpc09iai0+Z2V0UHJvcGVy
dHlTbG90KGV4ZWMsIGssIHNsb3QpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAg
ICAgSlNWYWx1ZSAqdiA9IHNsb3QuZ2V0VmFsdWUoZXhlYywgdGhpc09iaiwgayk7CiAgICAgICAK
ICAgICAgIExpc3QgZWFjaEFyZ3VtZW50czsKICAgICAgIAogICAgICAgZWFjaEFyZ3VtZW50cy5h
cHBlbmQodik7CiAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CiAgICAg
ICBlYWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKICAgICAgIApAQCAtODIxLDQxICs4MjEs
NDEgQEAgSlNWYWx1ZSAqQXJyYXlQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKAogICAgIHJldHVy
biByZXN1bHRBcnJheTsKICAgfQogICBjYXNlIEV2ZXJ5OgogICBjYXNlIEZvckVhY2g6CiAgIGNh
c2UgU29tZTogewogICAgIC8vRG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgdGhyZWUgaXMgYXZhaWxh
YmxlIGF0OgogICAgIC8vaHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemlsbGEub3JnL2VuL2RvY3Mv
Q29yZV9KYXZhU2NyaXB0XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJheTpldmVyeQogICAgIC8v
aHR0cDovL2RldmVsb3Blci10ZXN0Lm1vemlsbGEub3JnL2VuL2RvY3MvQ29yZV9KYXZhU2NyaXB0
XzEuNV9SZWZlcmVuY2U6T2JqZWN0czpBcnJheTpmb3JFYWNoCiAgICAgLy9odHRwOi8vZGV2ZWxv
cGVyLXRlc3QubW96aWxsYS5vcmcvZW4vZG9jcy9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5j
ZTpPYmplY3RzOkFycmF5OnNvbWUKICAgICAKICAgICBKU09iamVjdCAqZWFjaEZ1bmN0aW9uID0g
YXJnc1swXS0+dG9PYmplY3QoZXhlYyk7CiAgICAgCiAgICAgaWYgKCFlYWNoRnVuY3Rpb24tPmlt
cGxlbWVudHNDYWxsKCkpCiAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Ip
OwogICAgIAogICAgIEpTT2JqZWN0ICphcHBseVRoaXMgPSBhcmdzWzFdLT5pc1VuZGVmaW5lZE9y
TnVsbCgpID8gZXhlYy0+ZHluYW1pY0ludGVycHJldGVyKCktPmdsb2JhbE9iamVjdCgpIDogIGFy
Z3NbMV0tPnRvT2JqZWN0KGV4ZWMpOwogICAgIAogICAgIGlmIChpZCA9PSBTb21lIHx8IGlkID09
IEV2ZXJ5KQogICAgICAgcmVzdWx0ID0ganNCb29sZWFuKGlkID09IEV2ZXJ5KTsKICAgICBlbHNl
Ci0gICAgICByZXN1bHQgPSB0aGlzT2JqOworICAgICAgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGsgPSAwOyBrIDwgbGVuZ3RoICYmICFleGVjLT5oYWRF
eGNlcHRpb24oKTsgKytrKSB7CiAgICAgICBQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgCiAg
ICAgICBpZiAoIXRoaXNPYmotPmdldFByb3BlcnR5U2xvdChleGVjLCBrLCBzbG90KSkKICAgICAg
ICAgY29udGludWU7CiAgICAgICAKICAgICAgIExpc3QgZWFjaEFyZ3VtZW50czsKICAgICAgIAog
ICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoc2xvdC5nZXRWYWx1ZShleGVjLCB0aGlzT2JqLCBr
KSk7CiAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihrKSk7CiAgICAgICBlYWNo
QXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKICAgICAgIAogICAgICAgYm9vbCBwcmVkaWNhdGVS
ZXN1bHQgPSBlYWNoRnVuY3Rpb24tPmNhbGwoZXhlYywgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRz
KS0+dG9Cb29sZWFuKGV4ZWMpOwogICAgICAgCiAgICAgICBpZiAoaWQgPT0gRXZlcnkgJiYgIXBy
ZWRpY2F0ZVJlc3VsdCkgewogICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4oZmFsc2UpOwogICAg
ICAgICBicmVhazsKICAgICAgIH0KICAgICAgIGlmIChpZCA9PSBTb21lICYmIHByZWRpY2F0ZVJl
c3VsdCkgewpAQCAtODY4LDY3ICs4NjgsNjcgQEAgSlNWYWx1ZSAqQXJyYXlQcm90b0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKAogCiAgIGNhc2UgSW5kZXhPZjogewogICAgIC8vIEphdmFTY3JpcHQgMS41
IEV4dGVuc2lvbiBieSBNb3ppbGxhCiAgICAgLy8gRG9jdW1lbnRhdGlvbjogaHR0cDovL2RldmVs
b3Blci5tb3ppbGxhLm9yZy9lbi9kb2NzL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOkds
b2JhbF9PYmplY3RzOkFycmF5OmluZGV4T2YKIAogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKICAg
ICBkb3VibGUgZCA9IGFyZ3NbMV0tPnRvSW50ZWdlcihleGVjKTsKICAgICBpZiAoZCA8IDApCiAg
ICAgICAgIGQgKz0gbGVuZ3RoOwogICAgIGlmIChkID4gMCkgewogICAgICAgICBpZiAoZCA+IGxl
bmd0aCkKICAgICAgICAgICAgIGluZGV4ID0gbGVuZ3RoOwogICAgICAgICBlbHNlCiAgICAgICAg
ICAgICBpbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkKTsKICAgICB9CiAKICAgICBKU1Zh
bHVlKiBzZWFyY2hFbGVtZW50ID0gYXJnc1swXTsKICAgICBmb3IgKDsgaW5kZXggPCBsZW5ndGg7
ICsraW5kZXgpIHsKICAgICAgICAgSlNWYWx1ZSogZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNP
YmosIGluZGV4KTsKICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAgZSA9IGpzVW5kZWZpbmVk
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0cmljdEVxdWFsKGV4ZWMs
IHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZGV4KTsK
ICAgICB9CiAKICAgICByZXR1cm4ganNOdW1iZXIoLTEpOwogICB9CiAgIGNhc2UgTGFzdEluZGV4
T2Y6IHsKICAgICAgICAvLyBKYXZhU2NyaXB0IDEuNiBFeHRlbnNpb24gYnkgTW96aWxsYQogICAg
ICAgLy8gRG9jdW1lbnRhdGlvbjogaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9kb2Nz
L0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVmZXJlbmNlOkdsb2JhbF9PYmplY3RzOkFycmF5Omxhc3RJ
bmRleE9mIAogCiAgICAgaW50IGluZGV4ID0gbGVuZ3RoIC0gMTsKICAgICBkb3VibGUgZCA9IGFy
Z3NbMV0tPnRvSW50ZWdlcihleGVjKTsKIAogICAgIGlmIChkIDwgMCkgewogICAgICAgICBkICs9
IGxlbmd0aDsKICAgICAgICAgaWYgKGQgPCAwKSAKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cigtMSk7CiAgICAgfQogICAgIGlmIChkIDwgbGVuZ3RoKQogICAgICAgICBpbmRleCA9IHN0YXRp
Y19jYXN0PGludD4oZCk7CiAgICAgICAgICAgCiAgICAgSlNWYWx1ZSogc2VhcmNoRWxlbWVudCA9
IGFyZ3NbMF07CiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKICAgICAgICAgSlNW
YWx1ZSogZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKICAgICAgICAgaWYg
KCFlKQotICAgICAgICAgICAgZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKHN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAg
ICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZGV4KTsKICAgICB9CiAgICAgICAgICAgCiAgICAg
cmV0dXJuIGpzTnVtYmVyKC0xKTsKIH0KICAgZGVmYXVsdDoKICAgICBhc3NlcnQoMCk7CiAgICAg
cmVzdWx0ID0gMDsKICAgICBicmVhazsKICAgfQogICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXlPYmplY3RJbXAgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBcnJheU9iamVjdEltcDo6QXJyYXlPYmplY3RJbXAoRXhl
Y1N0YXRlICpleGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uUHJv
dG90eXBlICpmdW5jUHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlQ
cm90b3R5cGUgKmFycmF5UHJvdG8pCiAgIDogSW50ZXJuYWxGdW5jdGlvbkltcChmdW5jUHJvdG8p
Cg==
</data>
<flag name="review"
          id="5317"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13476</attachid>
            <date>2007-03-05 00:47:52 -0800</date>
            <delta_ts>2007-03-23 15:01:34 -0700</delta_ts>
            <desc>Full patch (but haven&apos;t attempted to run the tests yet)</desc>
            <filename>safari-js-arrays.diff</filename>
            <type>text/plain</type>
            <size>16157</size>
            <attacher name="Jeff Walden (remove +bwo to email)">jwalden+bwo</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTU4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDctMDMtMDUgIEplZmYgV2Fs
ZGVuICAgPGp3YWxkZW4rY29kZUBtaXQuZWR1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI5NjMKKyAgICAgICAgRml4IHNvbWUgaW5jb25zaXN0ZW5jaWVzIGluIHRo
ZSBNb3ppbGxhIEpTIEFycmF5IGV4dHJhcyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgd2l0aCBy
ZXNwZWN0IHRvIHRoZSBNb3ppbGxhIGltcGxlbWVudGF0aW9uOgorICAgICAgICAKKyAgICAgICAg
ICAtIGhvbGVzIGluIGFycmF5cyBzaG91bGQgYmUgc2tpcHBlZCwgbm90IHRyZWF0ZWQgYXMgdW5k
ZWZpbmVkLAorICAgICAgICAgICAgYnkgYWxsIHN1Y2ggbWV0aG9kcworICAgICAgICAgIC0gQXJy
YXkucHJvdG90eXBlLmZvckVhY2ggc2hvdWxkIHJldHVybiB1bmRlZmluZWQKKworICAgICAgICAq
IGtqcy9hcnJheV9vYmplY3QuY3BwOgorICAgICAgICAoQXJyYXlQcm90b0Z1bmM6OmNhbGxBc0Z1
bmN0aW9uKToKKwogMjAwNy0wMy0wNCAgRG9uIEdpYnNvbiAgPGRnaWJzb243N0BnbWFpbC5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTmlrb2xhcyBaaW1tZXJtYW5uLgpJbmRleDogSmF2YVNj
cmlwdENvcmUva2pzL2FycmF5X29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUva2pzL2FycmF5X29iamVjdC5jcHAJKHJldmlzaW9uIDE5OTUyKQorKysgSmF2YVNjcmlwdENv
cmUva2pzL2FycmF5X29iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSw3ICs3ODksNyBA
QCBKU1ZhbHVlICpBcnJheVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oCiAgICAgCiAgICAgaWYg
KGlkID09IEZpbHRlcikgCiAgICAgICByZXN1bHRBcnJheSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0
ICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigpLT5idWlsdGluQXJyYXkoKS0+Y29uc3RydWN0
KGV4ZWMsIExpc3Q6OmVtcHR5KCkpKTsKLSAgICBlbHNlCyB7CisgICAgZWxzZSB7CiAgICAgICBM
aXN0IGFyZ3M7CiAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihsZW5ndGgpKTsKICAgICAgIHJl
c3VsdEFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZXhlYy0+bGV4aWNhbEludGVycHJl
dGVyKCktPmJ1aWx0aW5BcnJheSgpLT5jb25zdHJ1Y3QoZXhlYywgYXJncykpOwpAQCAtODM4LDcg
KzgzOCw3IEBAIEpTVmFsdWUgKkFycmF5UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbigKICAgICBp
ZiAoaWQgPT0gU29tZSB8fCBpZCA9PSBFdmVyeSkKICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihp
ZCA9PSBFdmVyeSk7CiAgICAgZWxzZQotICAgICAgcmVzdWx0ID0gdGhpc09iajsKKyAgICAgIHJl
c3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8
IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraykgewogICAgICAgUHJvcGVydHlT
bG90IHNsb3Q7CkBAIC04ODUsNyArODg1LDcgQEAgSlNWYWx1ZSAqQXJyYXlQcm90b0Z1bmM6OmNh
bGxBc0Z1bmN0aW9uKAogICAgIGZvciAoOyBpbmRleCA8IGxlbmd0aDsgKytpbmRleCkgewogICAg
ICAgICBKU1ZhbHVlKiBlID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwogICAg
ICAgICBpZiAoIWUpCi0gICAgICAgICAgICBlID0ganNVbmRlZmluZWQoKTsKKyAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RyaWN0RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwg
ZSkpCiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5kZXgpOwogICAgIH0KQEAgLTkxMSw3
ICs5MTEsNyBAQCBKU1ZhbHVlICpBcnJheVByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24oCiAgICAg
Zm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKICAgICAgICAgSlNWYWx1ZSogZSA9IGdldFBy
b3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsKICAgICAgICAgaWYgKCFlKQotICAgICAgICAg
ICAgZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYg
KHN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGluZGV4KTsKICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTk1OCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDA3
LTAzLTA1ICBKZWZmIFdhbGRlbiAgPGp3YWxkZW4rY29kZUBtaXQuZWR1PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5NjMKKyAgICAgICAgRml4IHNvbWUgaW5jb25z
aXN0ZW5jaWVzIGluIHRoZSBNb3ppbGxhIEpTIEFycmF5IGV4dHJhcyBpbXBsZW1lbnRhdGlvbnMK
KyAgICAgICAgd2l0aCByZXNwZWN0IHRvIHRoZSBNb3ppbGxhIGltcGxlbWVudGF0aW9uOgorICAg
ICAgICAKKyAgICAgICAgICAtIGhvbGVzIGluIGFycmF5cyBzaG91bGQgYmUgc2tpcHBlZCwgbm90
IHRyZWF0ZWQgYXMgdW5kZWZpbmVkLAorICAgICAgICAgICAgYnkgYWxsIHN1Y2ggbWV0aG9kcwor
ICAgICAgICAgIC0gQXJyYXkucHJvdG90eXBlLmZvckVhY2ggc2hvdWxkIHJldHVybiB1bmRlZmlu
ZWQKKworICAgICAgICAqIGZhc3QvanMvYXJyYXktZXZlcnktZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIGZhc3QvanMvYXJyYXktZmlsdGVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9hcnJheS1maWx0ZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9hcnJh
eS1mb3JlYWNoLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LWZvcmVhY2gu
aHRtbDoKKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LWluZGV4b2YtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGZhc3QvanMvYXJyYXktaW5kZXhvZi5odG1sOgorICAgICAgICAqIGZhc3QvanMvYXJy
YXktbGFzdEluZGV4T2YtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMvYXJyYXktbWFw
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9hcnJheS1tYXAuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC9qcy9hcnJheS1zb21lLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiBmYXN0L2pzL2FycmF5LXNvbWUuaHRtbDoKKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNl
cy9hcnJheS1ldmVyeS5qczoKKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9hcnJheS1sYXN0
SW5kZXhPZi5qczoKKwogMjAwNy0wMy0wNCAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL2FycmF5LWV2ZXJ5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL2FycmF5LWV2ZXJ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTk5NTIpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL2FycmF5LWV2ZXJ5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtNDQsNSArNDQsOSBAQCBQQVNTIFsxMiwgNTQsIDE4LCAxMzAsIDQ0XS5ldmVyeShpc0JpZ0Vu
CiBQQVNTIGFjY3VtdWxhdG9yLnRvU3RyaW5nKCkgaXMgWzEyLCA1NCwgMTgsIDEzMCwgNDRdLnRv
U3RyaW5nKCkKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAorNy4wIEJlaGF2aW9y
IGZvciBIb2xlcyBpbiBBcnJheXMKK1BBU1MgYXJyLmV2ZXJ5KGlzTm90VW5kZWZpbmVkKSBpcyB0
cnVlCitQQVNTIGFyci5ldmVyeShpc05vdFVuZGVmaW5lZCkgaXMgdHJ1ZQorCiBURVNUIENPTVBM
RVRFCiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZmlsdGVyLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWZpbHRlci1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWZpbHRlci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorMS4wIEJlaGF2aW9yIHdp
dGggSG9sZXMgaW4gQXJyYXkKK1RoZSBmb2xsb3dpbmcgdGVzdHMgZW5zdXJlIHRoYXQgZmlsdGVy
IHNraXBzIGhvbGVzIGluIHRoZSBhcnJheSBpdCBjb25zdHJ1Y3RzLiAgWW91IHNob3VsZCBzZWUg
dHJ1ZSBwcmludGVkIHR3aWNlOgorCit0cnVlCit0cnVlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL2FycmF5LWZpbHRlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
YXJyYXktZmlsdGVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2Fy
cmF5LWZpbHRlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCitmdW5jdGlvbiBwcmludChz
dHIpIHsKKyAgICBkb2N1bWVudC53cml0ZWxuKHN0cisiPGJyLz4iKTsKK30KKworaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorMS4wIEJlaGF2aW9yIHdpdGggSG9s
ZXMgaW4gQXJyYXk8YnIvPgorVGhlIGZvbGxvd2luZyB0ZXN0cyBlbnN1cmUgdGhhdCBmaWx0ZXIg
c2tpcHMgaG9sZXMgaW4gdGhlIGFycmF5IGl0IGNvbnN0cnVjdHMuICBZb3Ugc2hvdWxkIHNlZSB0
cnVlIHByaW50ZWQgdHdpY2U6PGJyLz48YnIvPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHBhc3NVbmRl
ZmluZWQoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7CisgICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50
ID09PSAidW5kZWZpbmVkIjsKK30KKwordmFyIGFyciA9IFt1bmRlZmluZWRdOwordmFyIHJlcyA9
IGFyci5maWx0ZXIocGFzc1VuZGVmaW5lZCk7CitwcmludChyZXMubGVuZ3RoID09IDEgJiYgMCBp
biByZXMgJiYgcmVzWzBdID09PSB1bmRlZmluZWQpOworCithcnIgPSBuZXcgQXJyYXkoMjApOwor
cmVzID0gYXJyLmZpbHRlcihwYXNzVW5kZWZpbmVkKTsKK3ByaW50KHJlcy5sZW5ndGggPT0gMCk7
CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9hcnJheS1mb3JlYWNoLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2pzL2FycmF5LWZvcmVhY2gtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxOTk1MikKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZm9yZWFjaC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDMgKzUxLDE0IEBAIFR5cGVFcnJvcjogVHlwZSBlcnJvcgogVHlwZUVycm9yOiBU
eXBlIGVycm9yCiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IKIAorNi4wIEJlaGF2aW9yIGZvciBIb2xl
cyBpbiBBcnJheXMKK1RoaXMgdGVzdCBjaGVja3MgdGhhdCBob2xlcyBpbiBhcnJheXMgKGluZGV4
ZXMgd2hpY2ggaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgYXJlIG5vdCBwcmVzZW50KSBhcmUgbm90IGlu
Y2x1ZGVkIGluIGVudW1lcmF0aW9uOgorCitNYW51YWxseSBkZWxldGVkIGluZGV4IG5vdCBlbnVt
ZXJhdGVkCitBcnJheSBjcmVhdGVkIHVzaW5nIGNvbnN0cnVjdG9yIGhhcyBubyBwcm9wZXJ0aWVz
LCBzbyBubyBpbmRleGVzIGVudW1lcmF0ZWQKKworNy4wIFJldHVybiBWYWx1ZQorVGhpcyB0ZXN0
IGNoZWNrcyB0aGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgQXJyYXkucHJvdG90eXBlLmZvckVhY2gg
aXMgdW5kZWZpbmVkOgorCitSZXR1cm4gdmFsdWUgaXMgdW5kZWZpbmVkIQorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL2FycmF5LWZvcmVhY2guaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL2FycmF5LWZvcmVhY2guaHRtbAkocmV2aXNpb24gMTk5NTIpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL2FycmF5LWZvcmVhY2guaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTM5
LDUgKzEzOSw0MyBAQCB0cnkgewogCiA8L3NjcmlwdD4KIAorPGJyLz4KKzYuMCBCZWhhdmlvciBm
b3IgSG9sZXMgaW4gQXJyYXlzPGJyLz4KK1RoaXMgdGVzdCBjaGVja3MgdGhhdCBob2xlcyBpbiBh
cnJheXMgKGluZGV4ZXMgd2hpY2ggaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgYXJlIG5vdCBwcmVzZW50
KSBhcmUgbm90IGluY2x1ZGVkIGluIGVudW1lcmF0aW9uOjxici8+PGJyLz4KKzxzY3JpcHQ+Citm
dW5jdGlvbiB0aHJvd0lmVW5kZWZpbmVkKGVsZW1lbnQsIGluZGV4LCBhcnJheSkgeworICAgIGlm
ICh0eXBlb2YgZWxlbWVudCA9PT0gInVuZGVmaW5lZCIpCisgICAgICAgIHRocm93ICJ1bmRlZmlu
ZWQgZWxlbWVudCBlbnVtZXJhdGVkISI7Cit9CisKK3ZhciBhcnI7Cit0cnkgeworICAgIGFyciA9
IFs1LCA1LCA1LCA1XTsKKyAgICBkZWxldGUgYXJyWzFdOworICAgIGFyci5mb3JFYWNoKHRocm93
SWZVbmRlZmluZWQpOworICAgIHByaW50KCJNYW51YWxseSBkZWxldGVkIGluZGV4IG5vdCBlbnVt
ZXJhdGVkIik7Cit9IGNhdGNoIChlKSB7CisgICAgcHJpbnQoZSk7Cit9CisKK3RyeSB7CisgICAg
YXJyID0gbmV3IEFycmF5KDIwKTsKKyAgICBhcnIuZm9yRWFjaCh0aHJvd0lmVW5kZWZpbmVkKTsK
KyAgICBwcmludCgiQXJyYXkgY3JlYXRlZCB1c2luZyBjb25zdHJ1Y3RvciBoYXMgbm8gcHJvcGVy
dGllcywgc28gbm8gaW5kZXhlcyBlbnVtZXJhdGVkIik7Cit9IGNhdGNoIChlKSB7CisgICAgcHJp
bnQoZSk7Cit9CisKKzwvc2NyaXB0PgorCis8YnIvPgorNy4wIFJldHVybiBWYWx1ZTxici8+CitU
aGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiBBcnJheS5wcm90b3R5cGUu
Zm9yRWFjaCBpcyB1bmRlZmluZWQ6PGJyLz48YnIvPgorPHNjcmlwdD4KK3ZhciB3YXNVbmRlZmlu
ZWQgPSB0eXBlb2YgKFsxLCAyLCAzXS5mb3JFYWNoKGZ1bmN0aW9uKCl7fSkpID09PSAidW5kZWZp
bmVkIjsKKworcHJpbnQoIlJldHVybiB2YWx1ZSBpcyAiICsgKHdhc1VuZGVmaW5lZCA/ICIiIDog
Ik5PVCAiKSArICJ1bmRlZmluZWQhIik7Cis8L3NjcmlwdD4KKwogPC9ib2R5PgotPC9odG1sPgpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvYXJyYXktaW5kZXhvZi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9hcnJheS1pbmRleG9mLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTk5NTIpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWluZGV4b2YtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC00OSw2ICs0OSw5IEBACiAxMy4wIExvb2tpbmcgZm9yIHVuZGVmaW5lZAogKiBU
aGUgaW5kZXhPZiB1bmRlZmluZWQgaXMgNwogKiBUaGUgaW5kZXhPZiB1bmRlZmluZWQgaXMgLTEK
KyogVGhlIGluZGV4T2YgdW5kZWZpbmVkIGlzIDMKKyogVGhlIGluZGV4T2YgdW5kZWZpbmVkIGlz
IC0xCisqIFRoZSBpbmRleE9mIHVuZGVmaW5lZCBpcyAtMQogCiAxNC4wIE9iamVjdCB1c2luZyB0
aGUgQXJyYXkgcHJvdG90eXBlCiAqIFRoZSBpbmRleE9mIFN0cmluZyAiSGVsbG8iIGlzIDAKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktaW5kZXhvZi5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktaW5kZXhvZi5odG1sCShyZXZpc2lvbiAxOTk1MikK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktaW5kZXhvZi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xNCw2ICsxNCwxMSBAQCB0ZXN0QXJyYXkzWzNdID0gNTsKIHRlc3RBcnJheTNbNF0gPSA1
OwogdGVzdEFycmF5M1s1XSA9IDk7CiB0ZXN0QXJyYXkzLmxlbmd0aCA9IDY7Cit2YXIgdGVzdEFy
cmF5NCA9IFs1LCA1LCA1LCB1bmRlZmluZWRdOworZGVsZXRlIHRlc3RBcnJheTRbMV07Cit2YXIg
dGVzdEFycmF5NSA9IFs1LCA1LCA1LCB1bmRlZmluZWRdOworZGVsZXRlIHRlc3RBcnJheTVbM107
Cit2YXIgdGVzdEFycmF5NiA9IG5ldyBBcnJheSgyMCk7CiBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQogICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKIApAQCAt
ODQsNyArODksMTAgQEAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKIAogPHA+MTMu
MCBMb29raW5nIGZvciB1bmRlZmluZWQ8YnI+CiAJKiBUaGUgaW5kZXhPZiB1bmRlZmluZWQgaXMg
PHNjcmlwdD5kb2N1bWVudC53cml0ZSh0ZXN0QXJyYXkuaW5kZXhPZih1bmRlZmluZWQpKTwvc2Ny
aXB0Pjxicj4KLQkqIFRoZSBpbmRleE9mIHVuZGVmaW5lZCBpcyA8c2NyaXB0PmRvY3VtZW50Lndy
aXRlKHRlc3RBcnJheTIuaW5kZXhPZih1bmRlZmluZWQpKTwvc2NyaXB0PgorCSogVGhlIGluZGV4
T2YgdW5kZWZpbmVkIGlzIDxzY3JpcHQ+ZG9jdW1lbnQud3JpdGUodGVzdEFycmF5Mi5pbmRleE9m
KHVuZGVmaW5lZCkpPC9zY3JpcHQ+PGJyPgorCSogVGhlIGluZGV4T2YgdW5kZWZpbmVkIGlzIDxz
Y3JpcHQ+ZG9jdW1lbnQud3JpdGUodGVzdEFycmF5NC5pbmRleE9mKHVuZGVmaW5lZCkpPC9zY3Jp
cHQ+PGJyPgorCSogVGhlIGluZGV4T2YgdW5kZWZpbmVkIGlzIDxzY3JpcHQ+ZG9jdW1lbnQud3Jp
dGUodGVzdEFycmF5NS5pbmRleE9mKHVuZGVmaW5lZCkpPC9zY3JpcHQ+PGJyPgorCSogVGhlIGlu
ZGV4T2YgdW5kZWZpbmVkIGlzIDxzY3JpcHQ+ZG9jdW1lbnQud3JpdGUodGVzdEFycmF5Ni5pbmRl
eE9mKHVuZGVmaW5lZCkpPC9zY3JpcHQ+CiA8L3A+CiAKIDxwPjE0LjAgT2JqZWN0IHVzaW5nIHRo
ZSBBcnJheSBwcm90b3R5cGU8YnI+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWxh
c3RJbmRleE9mLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pz
L2FycmF5LWxhc3RJbmRleE9mLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTk5NTIpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL2FycmF5LWxhc3RJbmRleE9mLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMTEsNiArMTEsMTIgQEAgUEFTUyBsYXN0SW5kZXggaXMgMwogUEFTUyBsYXN0SW5k
ZXggaXMgMAogUEFTUyBsYXN0SW5kZXggaXMgMAogUEFTUyBsYXN0SW5kZXggaXMgMworUEFTUyBs
YXN0SW5kZXggaXMgLTEKK1BBU1MgbGFzdEluZGV4IGlzIC0xCitQQVNTIGxhc3RJbmRleCBpcyAt
MQorUEFTUyBsYXN0SW5kZXggaXMgMTkKK1BBU1MgbGFzdEluZGV4IGlzIC0xCitQQVNTIGxhc3RJ
bmRleCBpcyAtMQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBM
RVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LW1hcC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1tYXAtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1tYXAtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACisxLjAgQmVoYXZpb3Igd2l0aCBIb2xlcyBp
biBBcnJheQorVGhlIGZvbGxvd2luZyB0ZXN0cyBlbnN1cmUgdGhhdCBtYXAgc2tpcHMgaG9sZXMg
aW4gdGhlIGFycmF5IGl0IGNvbnN0cnVjdHMuICBZb3Ugc2hvdWxkIHNlZSBmYWxzZSBhbmQgdHJ1
ZSBwcmludGVkIGluIHRoYXQgb3JkZXIsIGZvbGxvd2VkIGJ5IHRoZSBwcmludGluZyBvZiB0aGUg
aW5kZXhlcyBhbmQgdmFsdWVzIGluIHR3byBhcnJheXMsIHRoZSBmaXJzdCBvZiB3aGljaCBoYXMg
bm8gaW5kZXhlcyBhbmQgdGhlIHNlY29uZCBvZiB3aGljaCBoYXMgb25lLCB3aG9zZSB2YWx1ZSBp
cyBOYU46CisKK2ZhbHNlCit0cnVlCitUaGUgZm9sbG93aW5nIGluZGV4ZXMgYXJlIGluIHRoZSBy
ZXN1bHQgYXJyYXk6CitFbmQgaW5kZXhlcyBpbiB0aGUgcmVzdWx0IGFycmF5LgorVGhlIGZvbGxv
d2luZyBpbmRleGVzIGFyZSBpbiB0aGUgcmVzdWx0IGFycmF5OgorMTU6IE5hTgorRW5kIGluZGV4
ZXMgaW4gdGhlIHJlc3VsdCBhcnJheS4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXkt
bWFwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1tYXAuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktbWFwLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CisKK2Z1bmN0aW9uIHByaW50KHN0cikgeworICAgIGRvY3VtZW50
LndyaXRlbG4oc3RyKyI8YnIvPiIpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+CisxLjAgQmVoYXZpb3Igd2l0aCBIb2xlcyBpbiBBcnJheTxici8+CitU
aGUgZm9sbG93aW5nIHRlc3RzIGVuc3VyZSB0aGF0IG1hcCBza2lwcyBob2xlcyBpbiB0aGUgYXJy
YXkgaXQgY29uc3RydWN0cy4gIFlvdSBzaG91bGQgc2VlIGZhbHNlIGFuZCB0cnVlIHByaW50ZWQg
aW4gdGhhdCBvcmRlciwgZm9sbG93ZWQgYnkgdGhlIHByaW50aW5nIG9mIHRoZSBpbmRleGVzIGFu
ZCB2YWx1ZXMgaW4gdHdvIGFycmF5cywgdGhlIGZpcnN0IG9mIHdoaWNoIGhhcyBubyBpbmRleGVz
IGFuZCB0aGUgc2Vjb25kIG9mIHdoaWNoIGhhcyBvbmUsIHdob3NlIHZhbHVlIGlzIHVuZGVmaW5l
ZDo8YnIvPjxici8+Cis8c2NyaXB0PgorZnVuY3Rpb24gdHdpY2UoZWxlbWVudCwgaW5kZXgsIGFy
cmF5KSB7CisgICAgcmV0dXJuIDIgKiBlbGVtZW50OworfQordmFyIGFyciA9IFsxLCAyLCAzLCA0
XTsKK2RlbGV0ZSBhcnJbMl07Cit2YXIgcmVzID0gYXJyLm1hcCh0d2ljZSk7CitwcmludCgyIGlu
IHJlcyk7CitwcmludChyZXNbMF0gPT0gMiAmJiByZXNbMV0gPT0gNCAmJiByZXNbM10gPT0gOCk7
CisKK2FyciA9IG5ldyBBcnJheSgyMCk7CityZXMgPSBhcnIubWFwKHR3aWNlKTsKK3ByaW50KCJU
aGUgZm9sbG93aW5nIGluZGV4ZXMgYXJlIGluIHRoZSByZXN1bHQgYXJyYXk6Iik7Citmb3IgKHZh
ciBpIGluIHJlcykKKyAgICBwcmludChpICsgIjogIiArIHJlc1tpXSk7CitwcmludCgiRW5kIGlu
ZGV4ZXMgaW4gdGhlIHJlc3VsdCBhcnJheS4iKTsKKworYXJyWzE1XSA9IHVuZGVmaW5lZDsKK3Jl
cyA9IGFyci5tYXAodHdpY2UpOworcHJpbnQoIlRoZSBmb2xsb3dpbmcgaW5kZXhlcyBhcmUgaW4g
dGhlIHJlc3VsdCBhcnJheToiKTsKK2ZvciAodmFyIGkgaW4gcmVzKQorICAgICBwcmludChpICsg
IjogIiArIHJlc1tpXSk7CitwcmludCgiRW5kIGluZGV4ZXMgaW4gdGhlIHJlc3VsdCBhcnJheS4i
KTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL2FycmF5LXNvbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvanMvYXJyYXktc29tZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE5OTUyKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9hcnJheS1zb21lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
NTgsMyArNTgsMTggQEAgRG9uZSB3aXRoIGZpcnN0IGFycmF5LgogVGVzdGluZyBlbGVtZW50IDEy
Li4uCiBEb25lIHdpdGggc2Vjb25kIGFycmF5LgogCis3LjAgQmVoYXZpb3Igd2l0aCBIb2xlcyBp
biBBcnJheXMKK1RoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMg
bm90IGludm9rZWQgZm9yIGhvbGVzIGluIHRoZSBhcnJheS4gIEZpdmUgYXJyYXlzIGFyZSB0ZXN0
ZWQ6CisKK1Rlc3RpbmcgZWxlbWVudCAyLi4uCitUZXN0aW5nIGVsZW1lbnQgOC4uLgorVGVzdGlu
ZyBlbGVtZW50IDEuLi4KK1Rlc3RpbmcgZWxlbWVudCA0Li4uCitEb25lIHdpdGggZmlyc3QgYXJy
YXkuCitUZXN0aW5nIGVsZW1lbnQgdW5kZWZpbmVkLi4uCitEb25lIHdpdGggc2Vjb25kIGFycmF5
LgorRG9uZSB3aXRoIHRoaXJkIGFycmF5LgorRG9uZSB3aXRoIGZvdXJ0aCBhcnJheS4KK1Rlc3Rp
bmcgZWxlbWVudCB1bmRlZmluZWQuLi4KK0RvbmUgd2l0aCBmaWZ0aCBhcnJheS4KKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1zb21lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9qcy9hcnJheS1zb21lLmh0bWwJKHJldmlzaW9uIDE5OTUyKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9hcnJheS1zb21lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw2ICsx
NTYsMzggQEAgZnVuY3Rpb24gaXNCaWdFbm91Z2goZWxlbWVudCwgaW5kZXgsIGFycgogcHJpbnQo
IkRvbmUgd2l0aCBmaXJzdCBhcnJheS4iKTsKIFsxMiwgNSwgOCwgMSwgNDRdLnNvbWUoaXNCaWdF
bm91Z2gpOwogcHJpbnQoIkRvbmUgd2l0aCBzZWNvbmQgYXJyYXkuIik7CisKKzwvc2NyaXB0Pgor
PGJyLz4KKzcuMCBCZWhhdmlvciB3aXRoIEhvbGVzIGluIEFycmF5czxici8+CitUaGlzIHRlc3Qg
Y2hlY2tzIHRoYXQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIG5vdCBpbnZva2VkIGZvciBob2xl
cyBpbiB0aGUgYXJyYXkuICBGaXZlIGFycmF5cyBhcmUgdGVzdGVkOjxici8+PGJyLz4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiBpc0JpZ0Vub3VnaChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHsKKyAgICBw
cmludCgiVGVzdGluZyBlbGVtZW50ICIgKyBlbGVtZW50ICsgIi4uLiIpOworICAgIHJldHVybiAo
ZWxlbWVudCA+PSAxMCk7Cit9CisKK3ZhciBhcnIgPSBbMiwgNSwgOCwgMSwgNF07CitkZWxldGUg
YXJyWzFdOworYXJyLnNvbWUoaXNCaWdFbm91Z2gpOworcHJpbnQoIkRvbmUgd2l0aCBmaXJzdCBh
cnJheS4iKTsKKworYXJyID0gW3VuZGVmaW5lZF07CithcnIuc29tZShpc0JpZ0Vub3VnaCk7Citw
cmludCgiRG9uZSB3aXRoIHNlY29uZCBhcnJheS4iKTsKKworZGVsZXRlIGFyclswXTsKK2Fyci5z
b21lKGlzQmlnRW5vdWdoKTsKK3ByaW50KCJEb25lIHdpdGggdGhpcmQgYXJyYXkuIik7CisKK2Fy
ciA9IG5ldyBBcnJheSgyMCk7CithcnIuc29tZShpc0JpZ0Vub3VnaCk7CitwcmludCgiRG9uZSB3
aXRoIGZvdXJ0aCBhcnJheS4iKTsKKworYXJyWzE3XSA9IHVuZGVmaW5lZDsKK2Fyci5zb21lKGlz
QmlnRW5vdWdoKTsKK3ByaW50KCJEb25lIHdpdGggZmlmdGggYXJyYXkuIik7CisKIDwvc2NyaXB0
PgogPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5LWV2ZXJ5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5LWV2ZXJ5LmpzCShy
ZXZpc2lvbiAxOTk1MikKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5LWV2
ZXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC04MSw0ICs4MSwxNCBAQCBhY2N1bXVsYXRvci5sZW5n
dGggPSAwOwogc2hvdWxkQmVUcnVlKCJbMTIsIDU0LCAxOCwgMTMwLCA0NF0uZXZlcnkoaXNCaWdF
bm91Z2hTaG9ydENpcmN1aXQpIik7CiBzaG91bGRCZSgiYWNjdW11bGF0b3IudG9TdHJpbmcoKSIs
ICJbMTIsIDU0LCAxOCwgMTMwLCA0NF0udG9TdHJpbmcoKSIpOwogCitkZWJ1ZygnNy4wIEJlaGF2
aW9yIGZvciBIb2xlcyBpbiBBcnJheXMnKTsKK3ZhciBhcnIgPSBbNSwgNSwgNSwgNV07CitkZWxl
dGUgYXJyWzFdOworZnVuY3Rpb24gaXNOb3RVbmRlZmluZWQoZWxlbWVudCwgaW5kZXgsIGFycmF5
KSB7CisgICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ICE9PSAidW5kZWZpbmVkIjsKK30KK3Nob3Vs
ZEJlVHJ1ZSgiYXJyLmV2ZXJ5KGlzTm90VW5kZWZpbmVkKSIpOworYXJyID0gbmV3IEFycmF5KDIw
KTsKK3Nob3VsZEJlVHJ1ZSgiYXJyLmV2ZXJ5KGlzTm90VW5kZWZpbmVkKSIpOworCiBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMv
YXJyYXktbGFzdEluZGV4T2YuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9y
ZXNvdXJjZXMvYXJyYXktbGFzdEluZGV4T2YuanMJKHJldmlzaW9uIDE5OTUyKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvYXJyYXktbGFzdEluZGV4T2YuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTIzLDQgKzIzLDMyIEBAIHNob3VsZEJlKCdsYXN0SW5kZXgnLCAnMCcpOwogbGFzdElu
ZGV4ID0gdGVzdEFycmF5Lmxhc3RJbmRleE9mKDIsIC0xKTsKIHNob3VsZEJlKCdsYXN0SW5kZXgn
LCAnMycpOwogCitkZWxldGUgdGVzdEFycmF5WzFdOworCitsYXN0SW5kZXggPSB0ZXN0QXJyYXku
bGFzdEluZGV4T2YodW5kZWZpbmVkKTsKK3Nob3VsZEJlKCdsYXN0SW5kZXgnLCAnLTEnKTsKKwor
ZGVsZXRlIHRlc3RBcnJheVszXTsKKworbGFzdEluZGV4ID0gdGVzdEFycmF5Lmxhc3RJbmRleE9m
KHVuZGVmaW5lZCk7CitzaG91bGRCZSgnbGFzdEluZGV4JywgJy0xJyk7CisKK3Rlc3RBcnJheSA9
IG5ldyBBcnJheSgyMCk7CisKK2xhc3RJbmRleCA9IHRlc3RBcnJheS5sYXN0SW5kZXhPZih1bmRl
ZmluZWQpOworc2hvdWxkQmUoJ2xhc3RJbmRleCcsICctMScpOworCit0ZXN0QXJyYXlbMTldID0g
dW5kZWZpbmVkOworCitsYXN0SW5kZXggPSB0ZXN0QXJyYXkubGFzdEluZGV4T2YodW5kZWZpbmVk
KTsKK3Nob3VsZEJlKCdsYXN0SW5kZXgnLCAnMTknKTsKKworbGFzdEluZGV4ID0gdGVzdEFycmF5
Lmxhc3RJbmRleE9mKHVuZGVmaW5lZCwgMTgpOworc2hvdWxkQmUoJ2xhc3RJbmRleCcsICctMScp
OworCitkZWxldGUgdGVzdEFycmF5WzE5XTsKKworbGFzdEluZGV4ID0gdGVzdEFycmF5Lmxhc3RJ
bmRleE9mKHVuZGVmaW5lZCk7CitzaG91bGRCZSgnbGFzdEluZGV4JywgJy0xJyk7CisKIHZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>13786</attachid>
            <date>2007-03-23 15:01:34 -0700</date>
            <delta_ts>2007-03-24 20:03:21 -0700</delta_ts>
            <desc>Complete patch</desc>
            <filename>array-extras-v3.diff</filename>
            <type>text/plain</type>
            <size>17024</size>
            <attacher name="Jeff Walden (remove +bwo to email)">jwalden+bwo</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNDQ4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDctMDMtMjMgIEplZmYgV2Fs
ZGVuICA8andhbGRlbitjb2RlQG1pdC5lZHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTI5NjMKKyAgICAgICAgRml4IHNvbWUgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBNb3ppbGxh
IEpTIEFycmF5IGV4dHJhcyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgd2l0aCByZXNwZWN0IHRv
IHRoZSBNb3ppbGxhIGltcGxlbWVudGF0aW9uOgorCisgICAgICAgICAgLSBob2xlcyBpbiBhcnJh
eXMgc2hvdWxkIGJlIHNraXBwZWQsIG5vdCB0cmVhdGVkIGFzIHVuZGVmaW5lZCwKKyAgICAgICAg
ICAgIGJ5IGFsbCBzdWNoIG1ldGhvZHMKKyAgICAgICAgICAtIGFuIGVsZW1lbnQgd2l0aCB2YWx1
ZSB1bmRlZmluZWQgaXMgbm90IGEgaG9sZQorICAgICAgICAgIC0gQXJyYXkucHJvdG90eXBlLmZv
ckVhY2ggc2hvdWxkIHJldHVybiB1bmRlZmluZWQKKworICAgICAgICAqIGtqcy9hcnJheV9vYmpl
Y3QuY3BwOgorICAgICAgICAoQXJyYXlJbnN0YW5jZTo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAg
ICAgICAgKEFycmF5UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbik6CisKIDIwMDctMDMtMjQgIE1h
cmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBE
YXJpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCShyZXZpc2lvbiAyMDQ0
OCkKKysrIEphdmFTY3JpcHRDb3JlL2tqcy9hcnJheV9vYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNyArMTAxLDcgQEAgYm9vbCBBcnJheUluc3RhbmNlOjpnZXRPd25Qcm9wZXJ0eVNs
b3QoRQogICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChpbmRleCA8IHN0b3JhZ2VMZW5ndGgp
IHsKICAgICAgIEpTVmFsdWUgKnYgPSBzdG9yYWdlW2luZGV4XTsKLSAgICAgIGlmICghdiB8fCB2
LT5pc1VuZGVmaW5lZCgpKQorICAgICAgaWYgKCF2KQogICAgICAgICByZXR1cm4gZmFsc2U7ICAg
ICAgCiAgICAgICBzbG90LnNldFZhbHVlU2xvdCh0aGlzLCAmc3RvcmFnZVtpbmRleF0pOwogICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMjAsNyArMTIwLDcgQEAgYm9vbCBBcnJheUluc3RhbmNlOjpn
ZXRPd25Qcm9wZXJ0eVNsb3QoRQogICAgIHJldHVybiBmYWxzZTsKICAgaWYgKGluZGV4IDwgc3Rv
cmFnZUxlbmd0aCkgewogICAgIEpTVmFsdWUgKnYgPSBzdG9yYWdlW2luZGV4XTsKLSAgICBpZiAo
IXYgfHwgdi0+aXNVbmRlZmluZWQoKSkKKyAgICBpZiAoIXYpCiAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgc2xvdC5zZXRWYWx1ZVNsb3QodGhpcywgJnN0b3JhZ2VbaW5kZXhdKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTc4OSw3ICs3ODksNyBAQCBKU1ZhbHVlKiBBcnJheVByb3RvRnVuYzo6Y2Fs
bEFzRnVuY3Rpb24oCiAgICAgCiAgICAgaWYgKGlkID09IEZpbHRlcikgCiAgICAgICByZXN1bHRB
cnJheSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGV4ZWMtPmxleGljYWxJbnRlcnByZXRlcigp
LT5idWlsdGluQXJyYXkoKS0+Y29uc3RydWN0KGV4ZWMsIExpc3Q6OmVtcHR5KCkpKTsKLSAgICBl
bHNlCyB7CisgICAgZWxzZSB7CiAgICAgICBMaXN0IGFyZ3M7CiAgICAgICBhcmdzLmFwcGVuZChq
c051bWJlcihsZW5ndGgpKTsKICAgICAgIHJlc3VsdEFycmF5ID0gc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QgKj4oZXhlYy0+bGV4aWNhbEludGVycHJldGVyKCktPmJ1aWx0aW5BcnJheSgpLT5jb25zdHJ1
Y3QoZXhlYywgYXJncykpOwpAQCAtODM4LDcgKzgzOCw3IEBAIEpTVmFsdWUqIEFycmF5UHJvdG9G
dW5jOjpjYWxsQXNGdW5jdGlvbigKICAgICBpZiAoaWQgPT0gU29tZSB8fCBpZCA9PSBFdmVyeSkK
ICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihpZCA9PSBFdmVyeSk7CiAgICAgZWxzZQotICAgICAg
cmVzdWx0ID0gdGhpc09iajsKKyAgICAgIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBrID0gMDsgayA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9u
KCk7ICsraykgewogICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CkBAIC04ODUsNyArODg1LDcgQEAg
SlNWYWx1ZSogQXJyYXlQcm90b0Z1bmM6OmNhbGxBc0Z1bmN0aW9uKAogICAgIGZvciAoOyBpbmRl
eCA8IGxlbmd0aDsgKytpbmRleCkgewogICAgICAgICBKU1ZhbHVlKiBlID0gZ2V0UHJvcGVydHko
ZXhlYywgdGhpc09iaiwgaW5kZXgpOwogICAgICAgICBpZiAoIWUpCi0gICAgICAgICAgICBlID0g
anNVbmRlZmluZWQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoc3RyaWN0
RXF1YWwoZXhlYywgc2VhcmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAgICByZXR1cm4ganNOdW1i
ZXIoaW5kZXgpOwogICAgIH0KQEAgLTkxMSw3ICs5MTEsNyBAQCBKU1ZhbHVlKiBBcnJheVByb3Rv
RnVuYzo6Y2FsbEFzRnVuY3Rpb24oCiAgICAgZm9yICg7IGluZGV4ID49IDA7IC0taW5kZXgpIHsK
ICAgICAgICAgSlNWYWx1ZSogZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsK
ICAgICAgICAgaWYgKCFlKQotICAgICAgICAgICAgZSA9IGpzVW5kZWZpbmVkKCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1l
bnQsIGUpKQogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZGV4KTsKICAgICB9CkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiAyMDQ0OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDA3LTAzLTIzICBKZWZmIFdhbGRlbiAgPGp3YWxkZW4r
Y29kZUBtaXQuZWR1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjk2MworICAg
ICAgICAgRml4IHNvbWUgaW5jb25zaXN0ZW5jaWVzIGluIHRoZSBNb3ppbGxhIEpTIEFycmF5IGV4
dHJhcyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgIHdpdGggcmVzcGVjdCB0byB0aGUgTW96aWxs
YSBpbXBsZW1lbnRhdGlvbjoKKworICAgICAgICAgICAtIGhvbGVzIGluIGFycmF5cyBzaG91bGQg
YmUgc2tpcHBlZCwgbm90IHRyZWF0ZWQgYXMgdW5kZWZpbmVkLAorICAgICAgICAgICAgIGJ5IGFs
bCBzdWNoIG1ldGhvZHMKKyAgICAgICAgICAgLSBhbiBlbGVtZW50IHdpdGggdmFsdWUgdW5kZWZp
bmVkIGlzIG5vdCBhIGhvbGUKKyAgICAgICAgICAgLSBBcnJheS5wcm90b3R5cGUuZm9yRWFjaCBz
aG91bGQgcmV0dXJuIHVuZGVmaW5lZAorCisgICAgICAgICogZmFzdC9qcy9hcnJheS1ldmVyeS1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9hcnJheS1maWx0ZXItZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LWZpbHRlci5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2pzL2FycmF5LWZvcmVhY2gtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZh
c3QvanMvYXJyYXktZm9yZWFjaC5odG1sOgorICAgICAgICAqIGZhc3QvanMvYXJyYXktaW5kZXhv
Zi1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9qcy9hcnJheS1pbmRleG9mLmh0bWw6Cisg
ICAgICAgICogZmFzdC9qcy9hcnJheS1sYXN0SW5kZXhPZi1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogZmFzdC9qcy9hcnJheS1tYXAtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2pzL2FycmF5LW1hcC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LXNvbWUt
ZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3QvanMvYXJyYXktc29tZS5odG1sOgorICAgICAg
ICAqIGZhc3QvanMvcmVzb3VyY2VzL2FycmF5LWV2ZXJ5LmpzOgorICAgICAgICAqIGZhc3QvanMv
cmVzb3VyY2VzL2FycmF5LWxhc3RJbmRleE9mLmpzOgorCiAyMDA3LTAzLTIzICBBZGVsZSBQZXRl
cnNvbiAgPGFkZWxlQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZXZlcnktZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZXZlcnktZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAyMDQ0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZXZlcnktZXhwZWN0ZWQu
dHh0CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMCBAQCBQQVNTIFsxMiwgNSwgOCwgMTMw
LCA0NF0uZXZlcnkoaXNCaWdFbm91CiBQQVNTIGFjY3VtdWxhdG9yLnRvU3RyaW5nKCkgaXMgWzEy
LCA1XS50b1N0cmluZygpCiBQQVNTIFsxMiwgNTQsIDE4LCAxMzAsIDQ0XS5ldmVyeShpc0JpZ0Vu
b3VnaFNob3J0Q2lyY3VpdCkgaXMgdHJ1ZQogUEFTUyBhY2N1bXVsYXRvci50b1N0cmluZygpIGlz
IFsxMiwgNTQsIDE4LCAxMzAsIDQ0XS50b1N0cmluZygpCisKKzcuMCBCZWhhdmlvciBmb3IgSG9s
ZXMgaW4gQXJyYXlzCitQQVNTIGFyci5ldmVyeShpc05vdFVuZGVmaW5lZCkgaXMgdHJ1ZQorUEFT
UyBhcnIuZXZlcnkoaXNOb3RVbmRlZmluZWQpIGlzIHRydWUKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9h
cnJheS1maWx0ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvYXJyYXktZmlsdGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvanMvYXJyYXktZmlsdGVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2IEBACisxLjAgQmVoYXZpb3Igd2l0aCBIb2xlcyBpbiBBcnJheQorVGhlIGZvbGxvd2luZyB0
ZXN0cyBlbnN1cmUgdGhhdCBmaWx0ZXIgc2tpcHMgaG9sZXMgaW4gdGhlIGFycmF5IGl0IGNvbnN0
cnVjdHMuIFlvdSBzaG91bGQgc2VlIHRydWUgcHJpbnRlZCB0d2ljZToKKwordHJ1ZQordHJ1ZQor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWZpbHRlci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZmlsdGVyLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWZpbHRlci5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMxIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorCitmdW5jdGlvbiBwcmludChzdHIpIHsKKyAgICBkb2N1bWVudC53cml0ZWxuKHN0cisi
PGJyLz4iKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorMS4wIEJlaGF2aW9yIHdpdGggSG9sZXMgaW4gQXJyYXk8YnIvPgorVGhlIGZvbGxvd2luZyB0
ZXN0cyBlbnN1cmUgdGhhdCBmaWx0ZXIgc2tpcHMgaG9sZXMgaW4gdGhlIGFycmF5IGl0IGNvbnN0
cnVjdHMuIFlvdSBzaG91bGQgc2VlIHRydWUgcHJpbnRlZCB0d2ljZTo8YnIvPjxici8+Cis8c2Ny
aXB0PgorZnVuY3Rpb24gcGFzc1VuZGVmaW5lZChlbGVtZW50LCBpbmRleCwgYXJyYXkpIHsKKyAg
ICByZXR1cm4gdHlwZW9mIGVsZW1lbnQgPT09ICJ1bmRlZmluZWQiOworfQorCit2YXIgYXJyID0g
W3VuZGVmaW5lZF07Cit2YXIgcmVzID0gYXJyLmZpbHRlcihwYXNzVW5kZWZpbmVkKTsKK3ByaW50
KHJlcy5sZW5ndGggPT0gMSAmJiAwIGluIHJlcyAmJiByZXNbMF0gPT09IHVuZGVmaW5lZCk7CisK
K2FyciA9IG5ldyBBcnJheSgyMCk7CityZXMgPSBhcnIuZmlsdGVyKHBhc3NVbmRlZmluZWQpOwor
cHJpbnQocmVzLmxlbmd0aCA9PSAwKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWZvcmVhY2gtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZm9yZWFjaC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDIwNDQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1mb3JlYWNoLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTEsMyArNTEsMTQgQEAgVHlwZUVycm9yOiBU
eXBlIGVycm9yCiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IKIFR5cGVFcnJvcjogVHlwZSBlcnJvcgog
Cis2LjAgQmVoYXZpb3IgZm9yIEhvbGVzIGluIEFycmF5cworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0
IGhvbGVzIGluIGFycmF5cyAoaW5kZXhlcyB3aGljaCBoYXZlIGJlZW4gZGVsZXRlZCBvciBhcmUg
bm90IHByZXNlbnQpIGFyZSBub3QgaW5jbHVkZWQgaW4gZW51bWVyYXRpb246CisKK01hbnVhbGx5
IGRlbGV0ZWQgaW5kZXggbm90IGVudW1lcmF0ZWQKK0FycmF5IGNyZWF0ZWQgdXNpbmcgY29uc3Ry
dWN0b3IgaGFzIG5vIHByb3BlcnRpZXMsIHNvIG5vIGluZGV4ZXMgZW51bWVyYXRlZAorCis3LjAg
UmV0dXJuIFZhbHVlCitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBvZiBB
cnJheS5wcm90b3R5cGUuZm9yRWFjaCBpcyB1bmRlZmluZWQ6CisKK1JldHVybiB2YWx1ZSBpcyB1
bmRlZmluZWQhCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZm9yZWFjaC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZm9yZWFjaC5odG1sCShy
ZXZpc2lvbiAyMDQ0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktZm9yZWFjaC5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzksNSArMTM5LDQzIEBAIHRyeSB7CiAKIDwvc2NyaXB0Pgog
Cis8YnIvPgorNi4wIEJlaGF2aW9yIGZvciBIb2xlcyBpbiBBcnJheXM8YnIvPgorVGhpcyB0ZXN0
IGNoZWNrcyB0aGF0IGhvbGVzIGluIGFycmF5cyAoaW5kZXhlcyB3aGljaCBoYXZlIGJlZW4gZGVs
ZXRlZCBvciBhcmUgbm90IHByZXNlbnQpIGFyZSBub3QgaW5jbHVkZWQgaW4gZW51bWVyYXRpb246
PGJyLz48YnIvPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRocm93SWZVbmRlZmluZWQoZWxlbWVudCwg
aW5kZXgsIGFycmF5KSB7CisgICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAidW5kZWZpbmVkIikK
KyAgICAgICAgdGhyb3cgInVuZGVmaW5lZCBlbGVtZW50IGVudW1lcmF0ZWQhIjsKK30KKwordmFy
IGFycjsKK3RyeSB7CisgICAgYXJyID0gWzUsIDUsIDUsIDVdOworICAgIGRlbGV0ZSBhcnJbMV07
CisgICAgYXJyLmZvckVhY2godGhyb3dJZlVuZGVmaW5lZCk7CisgICAgcHJpbnQoIk1hbnVhbGx5
IGRlbGV0ZWQgaW5kZXggbm90IGVudW1lcmF0ZWQiKTsKK30gY2F0Y2ggKGUpIHsKKyAgICBwcmlu
dChlKTsKK30KKwordHJ5IHsKKyAgICBhcnIgPSBuZXcgQXJyYXkoMjApOworICAgIGFyci5mb3JF
YWNoKHRocm93SWZVbmRlZmluZWQpOworICAgIHByaW50KCJBcnJheSBjcmVhdGVkIHVzaW5nIGNv
bnN0cnVjdG9yIGhhcyBubyBwcm9wZXJ0aWVzLCBzbyBubyBpbmRleGVzIGVudW1lcmF0ZWQiKTsK
K30gY2F0Y2ggKGUpIHsKKyAgICBwcmludChlKTsKK30KKworPC9zY3JpcHQ+CisKKzxici8+Cis3
LjAgUmV0dXJuIFZhbHVlPGJyLz4KK1RoaXMgdGVzdCBjaGVja3MgdGhhdCB0aGUgcmV0dXJuIHZh
bHVlIG9mIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoIGlzIHVuZGVmaW5lZDo8YnIvPjxici8+Cis8
c2NyaXB0PgordmFyIHdhc1VuZGVmaW5lZCA9IHR5cGVvZiAoWzEsIDIsIDNdLmZvckVhY2goZnVu
Y3Rpb24oKXt9KSkgPT09ICJ1bmRlZmluZWQiOworCitwcmludCgiUmV0dXJuIHZhbHVlIGlzICIg
KyAod2FzVW5kZWZpbmVkID8gIiIgOiAiTk9UICIpICsgInVuZGVmaW5lZCEiKTsKKzwvc2NyaXB0
PgorCiA8L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9odG1s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1pbmRleG9mLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LWluZGV4b2YtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAyMDQ0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktaW5kZXhv
Zi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDkgQEAKIDEzLjAgTG9v
a2luZyBmb3IgdW5kZWZpbmVkCiAqIFRoZSBpbmRleE9mIHVuZGVmaW5lZCBpcyA3CiAqIFRoZSBp
bmRleE9mIHVuZGVmaW5lZCBpcyAtMQorKiBUaGUgaW5kZXhPZiB1bmRlZmluZWQgaXMgMworKiBU
aGUgaW5kZXhPZiB1bmRlZmluZWQgaXMgLTEKKyogVGhlIGluZGV4T2YgdW5kZWZpbmVkIGlzIC0x
CiAKIDE0LjAgT2JqZWN0IHVzaW5nIHRoZSBBcnJheSBwcm90b3R5cGUKICogVGhlIGluZGV4T2Yg
U3RyaW5nICJIZWxsbyIgaXMgMApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1pbmRl
eG9mLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1pbmRleG9m
Lmh0bWwJKHJldmlzaW9uIDIwNDQ4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1pbmRl
eG9mLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE0LDYgKzE0LDExIEBAIHRlc3RBcnJheTNbM10g
PSA1OwogdGVzdEFycmF5M1s0XSA9IDU7CiB0ZXN0QXJyYXkzWzVdID0gOTsKIHRlc3RBcnJheTMu
bGVuZ3RoID0gNjsKK3ZhciB0ZXN0QXJyYXk0ID0gWzUsIDUsIDUsIHVuZGVmaW5lZF07CitkZWxl
dGUgdGVzdEFycmF5NFsxXTsKK3ZhciB0ZXN0QXJyYXk1ID0gWzUsIDUsIDUsIHVuZGVmaW5lZF07
CitkZWxldGUgdGVzdEFycmF5NVszXTsKK3ZhciB0ZXN0QXJyYXk2ID0gbmV3IEFycmF5KDIwKTsK
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOwogCkBAIC04NCw3ICs4OSwxMCBAQCBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQogCiA8cD4xMy4wIExvb2tpbmcgZm9yIHVuZGVmaW5lZDxicj4KIAkqIFRo
ZSBpbmRleE9mIHVuZGVmaW5lZCBpcyA8c2NyaXB0PmRvY3VtZW50LndyaXRlKHRlc3RBcnJheS5p
bmRleE9mKHVuZGVmaW5lZCkpPC9zY3JpcHQ+PGJyPgotCSogVGhlIGluZGV4T2YgdW5kZWZpbmVk
IGlzIDxzY3JpcHQ+ZG9jdW1lbnQud3JpdGUodGVzdEFycmF5Mi5pbmRleE9mKHVuZGVmaW5lZCkp
PC9zY3JpcHQ+CisJKiBUaGUgaW5kZXhPZiB1bmRlZmluZWQgaXMgPHNjcmlwdD5kb2N1bWVudC53
cml0ZSh0ZXN0QXJyYXkyLmluZGV4T2YodW5kZWZpbmVkKSk8L3NjcmlwdD48YnI+CisJKiBUaGUg
aW5kZXhPZiB1bmRlZmluZWQgaXMgPHNjcmlwdD5kb2N1bWVudC53cml0ZSh0ZXN0QXJyYXk0Lmlu
ZGV4T2YodW5kZWZpbmVkKSk8L3NjcmlwdD48YnI+CisJKiBUaGUgaW5kZXhPZiB1bmRlZmluZWQg
aXMgPHNjcmlwdD5kb2N1bWVudC53cml0ZSh0ZXN0QXJyYXk1LmluZGV4T2YodW5kZWZpbmVkKSk8
L3NjcmlwdD48YnI+CisJKiBUaGUgaW5kZXhPZiB1bmRlZmluZWQgaXMgPHNjcmlwdD5kb2N1bWVu
dC53cml0ZSh0ZXN0QXJyYXk2LmluZGV4T2YodW5kZWZpbmVkKSk8L3NjcmlwdD4KIDwvcD4KIAog
PHA+MTQuMCBPYmplY3QgdXNpbmcgdGhlIEFycmF5IHByb3RvdHlwZTxicj4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvYXJyYXktbGFzdEluZGV4T2YtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktbGFzdEluZGV4T2YtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAyMDQ0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktbGFzdEluZGV4T2Yt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMSw2ICsxMSwxMiBAQCBQQVNTIGxhc3RJ
bmRleCBpcyAzCiBQQVNTIGxhc3RJbmRleCBpcyAwCiBQQVNTIGxhc3RJbmRleCBpcyAwCiBQQVNT
IGxhc3RJbmRleCBpcyAzCitQQVNTIGxhc3RJbmRleCBpcyAtMQorUEFTUyBsYXN0SW5kZXggaXMg
LTEKK1BBU1MgbGFzdEluZGV4IGlzIC0xCitQQVNTIGxhc3RJbmRleCBpcyAxOQorUEFTUyBsYXN0
SW5kZXggaXMgLTEKK1BBU1MgbGFzdEluZGV4IGlzIC0xCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJy
YXktbWFwLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2Fy
cmF5LW1hcC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L2FycmF5LW1hcC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzEu
MCBCZWhhdmlvciB3aXRoIEhvbGVzIGluIEFycmF5CitUaGUgZm9sbG93aW5nIHRlc3RzIGVuc3Vy
ZSB0aGF0IG1hcCBza2lwcyBob2xlcyBpbiB0aGUgYXJyYXkgaXQgY29uc3RydWN0cy4gWW91IHNo
b3VsZCBzZWUgZmFsc2UgYW5kIHRydWUgcHJpbnRlZCBpbiB0aGF0IG9yZGVyLCBmb2xsb3dlZCBi
eSB0aGUgcHJpbnRpbmcgb2YgdGhlIGluZGV4ZXMgYW5kIHZhbHVlcyBpbiB0d28gYXJyYXlzLCB0
aGUgZmlyc3Qgb2Ygd2hpY2ggaGFzIG5vIGluZGV4ZXMgYW5kIHRoZSBzZWNvbmQgb2Ygd2hpY2gg
aGFzIG9uZSwgd2hvc2UgdmFsdWUgaXMgTmFOOgorCitmYWxzZQordHJ1ZQorVGhlIGZvbGxvd2lu
ZyBpbmRleGVzIGFyZSBpbiB0aGUgcmVzdWx0IGFycmF5OgorRW5kIGluZGV4ZXMgaW4gdGhlIHJl
c3VsdCBhcnJheS4KK1RoZSBmb2xsb3dpbmcgaW5kZXhlcyBhcmUgaW4gdGhlIHJlc3VsdCBhcnJh
eToKKzE1OiBOYU4KK0VuZCBpbmRleGVzIGluIHRoZSByZXN1bHQgYXJyYXkuCisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvanMvYXJyYXktbWFwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9hcnJheS1tYXAuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvanMvYXJyYXktbWFwLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK2Z1bmN0aW9uIHBy
aW50KHN0cikgeworICAgIGRvY3VtZW50LndyaXRlbG4oc3RyKyI8YnIvPiIpOworfQorCitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisxLjAgQmVoYXZpb3Igd2l0
aCBIb2xlcyBpbiBBcnJheTxici8+CitUaGUgZm9sbG93aW5nIHRlc3RzIGVuc3VyZSB0aGF0IG1h
cCBza2lwcyBob2xlcyBpbiB0aGUgYXJyYXkgaXQgY29uc3RydWN0cy4gWW91IHNob3VsZCBzZWUg
ZmFsc2UgYW5kIHRydWUgcHJpbnRlZCBpbiB0aGF0IG9yZGVyLCBmb2xsb3dlZCBieSB0aGUgcHJp
bnRpbmcgb2YgdGhlIGluZGV4ZXMgYW5kIHZhbHVlcyBpbiB0d28gYXJyYXlzLCB0aGUgZmlyc3Qg
b2Ygd2hpY2ggaGFzIG5vIGluZGV4ZXMgYW5kIHRoZSBzZWNvbmQgb2Ygd2hpY2ggaGFzIG9uZSwg
d2hvc2UgdmFsdWUgaXMgTmFOOjxici8+PGJyLz4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0d2ljZShl
bGVtZW50LCBpbmRleCwgYXJyYXkpIHsKKyAgICByZXR1cm4gMiAqIGVsZW1lbnQ7Cit9Cit2YXIg
YXJyID0gWzEsIDIsIDMsIDRdOworZGVsZXRlIGFyclsyXTsKK3ZhciByZXMgPSBhcnIubWFwKHR3
aWNlKTsKK3ByaW50KDIgaW4gcmVzKTsKK3ByaW50KHJlc1swXSA9PSAyICYmIHJlc1sxXSA9PSA0
ICYmIHJlc1szXSA9PSA4KTsKKworYXJyID0gbmV3IEFycmF5KDIwKTsKK3JlcyA9IGFyci5tYXAo
dHdpY2UpOworcHJpbnQoIlRoZSBmb2xsb3dpbmcgaW5kZXhlcyBhcmUgaW4gdGhlIHJlc3VsdCBh
cnJheToiKTsKK2ZvciAodmFyIGkgaW4gcmVzKQorICAgIHByaW50KGkgKyAiOiAiICsgcmVzW2ld
KTsKK3ByaW50KCJFbmQgaW5kZXhlcyBpbiB0aGUgcmVzdWx0IGFycmF5LiIpOworCithcnJbMTVd
ID0gdW5kZWZpbmVkOworcmVzID0gYXJyLm1hcCh0d2ljZSk7CitwcmludCgiVGhlIGZvbGxvd2lu
ZyBpbmRleGVzIGFyZSBpbiB0aGUgcmVzdWx0IGFycmF5OiIpOworZm9yICh2YXIgaSBpbiByZXMp
CisgICAgIHByaW50KGkgKyAiOiAiICsgcmVzW2ldKTsKK3ByaW50KCJFbmQgaW5kZXhlcyBpbiB0
aGUgcmVzdWx0IGFycmF5LiIpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktc29tZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1zb21lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MjA0NDgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LXNvbWUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC01OCwzICs1OCwxOCBAQCBEb25lIHdpdGggZmlyc3QgYXJyYXkuCiBU
ZXN0aW5nIGVsZW1lbnQgMTIuLi4KIERvbmUgd2l0aCBzZWNvbmQgYXJyYXkuCiAKKzcuMCBCZWhh
dmlvciB3aXRoIEhvbGVzIGluIEFycmF5cworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBjYWxs
YmFjayBmdW5jdGlvbiBpcyBub3QgaW52b2tlZCBmb3IgaG9sZXMgaW4gdGhlIGFycmF5LiBGaXZl
IGFycmF5cyBhcmUgdGVzdGVkOgorCitUZXN0aW5nIGVsZW1lbnQgMi4uLgorVGVzdGluZyBlbGVt
ZW50IDguLi4KK1Rlc3RpbmcgZWxlbWVudCAxLi4uCitUZXN0aW5nIGVsZW1lbnQgNC4uLgorRG9u
ZSB3aXRoIGZpcnN0IGFycmF5LgorVGVzdGluZyBlbGVtZW50IHVuZGVmaW5lZC4uLgorRG9uZSB3
aXRoIHNlY29uZCBhcnJheS4KK0RvbmUgd2l0aCB0aGlyZCBhcnJheS4KK0RvbmUgd2l0aCBmb3Vy
dGggYXJyYXkuCitUZXN0aW5nIGVsZW1lbnQgdW5kZWZpbmVkLi4uCitEb25lIHdpdGggZmlmdGgg
YXJyYXkuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktc29tZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktc29tZS5odG1sCShyZXZpc2lvbiAy
MDQ0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktc29tZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTYsNiArMTU2LDM4IEBAIGZ1bmN0aW9uIGlzQmlnRW5vdWdoKGVsZW1lbnQsIGlu
ZGV4LCBhcnIKIHByaW50KCJEb25lIHdpdGggZmlyc3QgYXJyYXkuIik7CiBbMTIsIDUsIDgsIDEs
IDQ0XS5zb21lKGlzQmlnRW5vdWdoKTsKIHByaW50KCJEb25lIHdpdGggc2Vjb25kIGFycmF5LiIp
OworCis8L3NjcmlwdD4KKzxici8+Cis3LjAgQmVoYXZpb3Igd2l0aCBIb2xlcyBpbiBBcnJheXM8
YnIvPgorVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBub3Qg
aW52b2tlZCBmb3IgaG9sZXMgaW4gdGhlIGFycmF5LiBGaXZlIGFycmF5cyBhcmUgdGVzdGVkOjxi
ci8+PGJyLz4KKzxzY3JpcHQ+CitmdW5jdGlvbiBpc0JpZ0Vub3VnaChlbGVtZW50LCBpbmRleCwg
YXJyYXkpIHsKKyAgICBwcmludCgiVGVzdGluZyBlbGVtZW50ICIgKyBlbGVtZW50ICsgIi4uLiIp
OworICAgIHJldHVybiAoZWxlbWVudCA+PSAxMCk7Cit9CisKK3ZhciBhcnIgPSBbMiwgNSwgOCwg
MSwgNF07CitkZWxldGUgYXJyWzFdOworYXJyLnNvbWUoaXNCaWdFbm91Z2gpOworcHJpbnQoIkRv
bmUgd2l0aCBmaXJzdCBhcnJheS4iKTsKKworYXJyID0gW3VuZGVmaW5lZF07CithcnIuc29tZShp
c0JpZ0Vub3VnaCk7CitwcmludCgiRG9uZSB3aXRoIHNlY29uZCBhcnJheS4iKTsKKworZGVsZXRl
IGFyclswXTsKK2Fyci5zb21lKGlzQmlnRW5vdWdoKTsKK3ByaW50KCJEb25lIHdpdGggdGhpcmQg
YXJyYXkuIik7CisKK2FyciA9IG5ldyBBcnJheSgyMCk7CithcnIuc29tZShpc0JpZ0Vub3VnaCk7
CitwcmludCgiRG9uZSB3aXRoIGZvdXJ0aCBhcnJheS4iKTsKKworYXJyWzE3XSA9IHVuZGVmaW5l
ZDsKK2Fyci5zb21lKGlzQmlnRW5vdWdoKTsKK3ByaW50KCJEb25lIHdpdGggZmlmdGggYXJyYXku
Iik7CisKIDwvc2NyaXB0PgogPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5
LWV2ZXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2Fy
cmF5LWV2ZXJ5LmpzCShyZXZpc2lvbiAyMDQ0OCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVz
b3VyY2VzL2FycmF5LWV2ZXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC04MCw1ICs4MCwxNiBAQCBz
aG91bGRCZSgiYWNjdW11bGF0b3IudG9TdHJpbmcoKSIsICJbMTIsCiBhY2N1bXVsYXRvci5sZW5n
dGggPSAwOwogc2hvdWxkQmVUcnVlKCJbMTIsIDU0LCAxOCwgMTMwLCA0NF0uZXZlcnkoaXNCaWdF
bm91Z2hTaG9ydENpcmN1aXQpIik7CiBzaG91bGRCZSgiYWNjdW11bGF0b3IudG9TdHJpbmcoKSIs
ICJbMTIsIDU0LCAxOCwgMTMwLCA0NF0udG9TdHJpbmcoKSIpOworZGVidWcoIiIpOworCitkZWJ1
ZygnNy4wIEJlaGF2aW9yIGZvciBIb2xlcyBpbiBBcnJheXMnKTsKK3ZhciBhcnIgPSBbNSwgNSwg
NSwgNV07CitkZWxldGUgYXJyWzFdOworZnVuY3Rpb24gaXNOb3RVbmRlZmluZWQoZWxlbWVudCwg
aW5kZXgsIGFycmF5KSB7CisgICAgcmV0dXJuIHR5cGVvZiBlbGVtZW50ICE9PSAidW5kZWZpbmVk
IjsKK30KK3Nob3VsZEJlVHJ1ZSgiYXJyLmV2ZXJ5KGlzTm90VW5kZWZpbmVkKSIpOworYXJyID0g
bmV3IEFycmF5KDIwKTsKK3Nob3VsZEJlVHJ1ZSgiYXJyLmV2ZXJ5KGlzTm90VW5kZWZpbmVkKSIp
OwogCiBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9q
cy9yZXNvdXJjZXMvYXJyYXktbGFzdEluZGV4T2YuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9yZXNvdXJjZXMvYXJyYXktbGFzdEluZGV4T2YuanMJKHJldmlzaW9uIDIwNDQ4
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvYXJyYXktbGFzdEluZGV4T2YuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDQgKzIzLDMyIEBAIHNob3VsZEJlKCdsYXN0SW5kZXgnLCAn
MCcpOwogbGFzdEluZGV4ID0gdGVzdEFycmF5Lmxhc3RJbmRleE9mKDIsIC0xKTsKIHNob3VsZEJl
KCdsYXN0SW5kZXgnLCAnMycpOwogCitkZWxldGUgdGVzdEFycmF5WzFdOworCitsYXN0SW5kZXgg
PSB0ZXN0QXJyYXkubGFzdEluZGV4T2YodW5kZWZpbmVkKTsKK3Nob3VsZEJlKCdsYXN0SW5kZXgn
LCAnLTEnKTsKKworZGVsZXRlIHRlc3RBcnJheVszXTsKKworbGFzdEluZGV4ID0gdGVzdEFycmF5
Lmxhc3RJbmRleE9mKHVuZGVmaW5lZCk7CitzaG91bGRCZSgnbGFzdEluZGV4JywgJy0xJyk7CisK
K3Rlc3RBcnJheSA9IG5ldyBBcnJheSgyMCk7CisKK2xhc3RJbmRleCA9IHRlc3RBcnJheS5sYXN0
SW5kZXhPZih1bmRlZmluZWQpOworc2hvdWxkQmUoJ2xhc3RJbmRleCcsICctMScpOworCit0ZXN0
QXJyYXlbMTldID0gdW5kZWZpbmVkOworCitsYXN0SW5kZXggPSB0ZXN0QXJyYXkubGFzdEluZGV4
T2YodW5kZWZpbmVkKTsKK3Nob3VsZEJlKCdsYXN0SW5kZXgnLCAnMTknKTsKKworbGFzdEluZGV4
ID0gdGVzdEFycmF5Lmxhc3RJbmRleE9mKHVuZGVmaW5lZCwgMTgpOworc2hvdWxkQmUoJ2xhc3RJ
bmRleCcsICctMScpOworCitkZWxldGUgdGVzdEFycmF5WzE5XTsKKworbGFzdEluZGV4ID0gdGVz
dEFycmF5Lmxhc3RJbmRleE9mKHVuZGVmaW5lZCk7CitzaG91bGRCZSgnbGFzdEluZGV4JywgJy0x
Jyk7CisKIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="5502"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>