<?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>85752</bug_id>
          
          <creation_ts>2012-05-06 15:34:02 -0700</creation_ts>
          <short_desc>Truncating multiplication on integers should not OSR exit every time</short_desc>
          <delta_ts>2012-05-22 10:18:03 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>617196</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-06 15:34:02 -0700</bug_when>
    <thetext>Say you do a * b where the result is larger than what can fit in an int32, but you use the result in integer contexts only (like [_] | 0).  Currently the DFG will &quot;prove&quot; that the multiplication will produce integers despite overflowing.  But then the multiplication will speculate no overflow, which will typically fail, since in this case a * b does overflow.

Multiplication should be smarter about this.  If you do a * b and we know that it overflows then in the general case our best bet is to perform the multiplication using the FPU.  But if we know something about a or b, for example if we really have something like a * 42, then we know that integer truncation would be equivalent to double truncation - and hence we can perform an integer multiplication and skip the overflow check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617197</commentid>
    <comment_count>1</comment_count>
      <attachid>140441</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-06 15:35:57 -0700</bug_when>
    <thetext>Created attachment 140441
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617212</commentid>
    <comment_count>2</comment_count>
      <attachid>140441</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-06 16:19:18 -0700</bug_when>
    <thetext>Comment on attachment 140441
the patch

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

r-, because I really do think we need a comment here – but nice optimization, looks great otherwise.

&gt; Source/JavaScriptCore/dfg/DFGGraph.h:512
&gt; +        int32_t twoToThe17 = 131072;

Why 2^17?

A number with an absolute value less than 2^17 is representable by 17 bits.  The result of multiplying a value representable by 17 bits by 2^31 (the largest possible absolute value of a signed integer) is representable in a 48 bit mantissa (with additional representation for the sign).  Doubles support 53 bits of mantissa precision.  Put the other way around, for the result of a multiply to be constrained within a 53 bits mantissa, if I know that the absolute value of one operand is no more than 2^31 then the second operand may have a magnitude of +/- 2^22 (less than/greater than – exclusive!).

I think 2^22 is correct here, but either way this really needs a comment. :-)

Also, I&apos;d suggest this would slightly nicer written &apos;&apos;int32_t  twoToThe17 = 1 &lt;&lt; 17;&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617217</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-06 16:30:14 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 140441 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140441&amp;action=review
&gt; 
&gt; r-, because I really do think we need a comment here – but nice optimization, looks great otherwise.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.h:512
&gt; &gt; +        int32_t twoToThe17 = 131072;
&gt; 
&gt; Why 2^17?

Yeah, that&apos;s sloppy.  It was the largest I tested and I figured it was good enough for the optimization to be effective.  I will make this more rational!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617222</commentid>
    <comment_count>4</comment_count>
      <attachid>140444</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-06 16:39:22 -0700</bug_when>
    <thetext>Created attachment 140444
the patch

Incorporated Gavin&apos;s feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617339</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-06 20:43:40 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/116264</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630502</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 10:18:03 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/117993</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140441</attachid>
            <date>2012-05-06 15:35:57 -0700</date>
            <delta_ts>2012-05-06 16:39:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>smartermult_patch_1.diff</filename>
            <type>text/plain</type>
            <size>10366</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2MjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDEyLTA1LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VHJ1bmNhdGluZyBtdWx0aXBsaWNhdGlvbiBvbiBpbnRlZ2VycyBzaG91bGQgbm90IE9TUiBleGl0
IGV2ZXJ5IHRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg1NzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om11bFNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIpOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptdWxJ
bW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlOjpkb1JvdW5kT2ZEb3VibGVWb3RpbmcpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE11bCk6CisKIDIwMTItMDUtMDEgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc2hvdWxkIGJlIGFibGUgdG8gY29tcHV0ZSBkb21p
bmF0b3JzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDExNjIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw3ICs0NTEsMjYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQXJpdGhNdWw6CisgICAgY2FzZSBBcml0aE11bDog
eworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7
CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7
CisgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5p
c051bWJlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpTVmFsdWUo
bGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQ
cmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91
YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFyaXRoRGl2
OgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKQEAgLTQ2Miw5ICs0ODEs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICBkb3VibGUgYSA9IGxlZnQuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIGRvdWJsZSBiID0gcmln
aHQuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoSlNWYWx1ZShhICogYikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBBcml0aERpdjoKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpT
VmFsdWUoYSAvIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTE2MjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUxLDkgKzI1MSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2Ug
QXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJpdGhEaXY6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6
IHsKICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMTYyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsMjEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihs
ZWZ0LCByaWdodCkgJiYgYWRkLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCisg
ICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0aE11bCk7CisgICAgICAgIAorICAgICAgICBOb2Rl
JiBsZWZ0ID0gYXQobXVsLmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZSYgcmlnaHQgPSBhdChtdWwu
Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG11bCwg
cmlnaHQsIGxlZnQpOworICAgICAgICBpZiAocmlnaHQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG11bCwgbGVmdCwg
cmlnaHQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobGVmdCwgcmlnaHQpICYmIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVN
YXlPdmVyZmxvdyhtdWwuYXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgfQorICAgIAogICAgIGJvb2wg
bmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBuZWdhdGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhOZWdhdGUpOwpAQCAtNDgyLDYgKzQ5NywyNSBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQuYXJp
dGhOb2RlRmxhZ3MoKSk7CiAgICAgfQogICAgIAorICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwsIE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBpbW1lZGlh
dGUpCisgICAgeworICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOworICAg
ICAgICAKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS52YWx1ZU9m
SlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYg
KCF2YXJpYWJsZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0
ZVZhbHVlLmFzSW50MzIoKTsKKyAgICAgICAgaW50MzJfdCB0d29Ub1RoZTE3ID0gMTMxMDcyOwor
ICAgICAgICBpZiAoaW50SW1tZWRpYXRlIDwgLXR3b1RvVGhlMTcgfHwgaW50SW1tZWRpYXRlID4g
dHdvVG9UaGUxNykKKyAgICAgICAgICAgIHJldHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigp
ICYmICFub2RlTWF5T3ZlcmZsb3cobXVsLmFyaXRoTm9kZUZsYWdzKCkpOworCisgICAgICAgIHJl
dHVybiBtdWwuY2FuU3BlY3VsYXRlSW50ZWdlcigpOworICAgIH0KKyAgICAKICAgICAvLyBXaGVu
IGEgbm9kZSdzIHJlZkNvdW50IGdvZXMgZnJvbSAwIHRvIDEsIGl0IG11c3QgKGxvZ2ljYWxseSkg
cmVjdXJzaXZlbHkgcmVmIGFsbCBvZiBpdHMgY2hpbGRyZW4sIGFuZCB2aWNlIHZlcnNhLgogICAg
IHZvaWQgcmVmQ2hpbGRyZW4oTm9kZUluZGV4KTsKICAgICB2b2lkIGRlcmVmQ2hpbGRyZW4oTm9k
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTYyMzgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMxLDggKzMzMSwyOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3Mp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEFyaXRoTXVs
OiB7CisgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQx
KCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKGxlZnQgJiYgcmlnaHQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tdWxT
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdERv
dWJsZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEFzIHNvb24gYXMgYSBtdWx0
aXBseSBoYXBwZW5zLCB3ZSBjYW4gZWFzaWx5IGVuZCB1cCBpbiB0aGUgcGFydAorICAgICAgICAg
ICAgLy8gb2YgdGhlIGRvdWJsZSBkb21haW4gd2hlcmUgdGhlIHBvaW50IGF0IHdoaWNoIHlvdSBk
byB0cnVuY2F0aW9uCisgICAgICAgICAgICAvLyBjYW4gY2hhbmdlIHRoZSBvdXRjb21lLiBTbywg
QXJpdGhNdWwgYWx3YXlzIGNoZWNrcyBmb3Igb3ZlcmZsb3cKKyAgICAgICAgICAgIC8vIG5vIG1h
dHRlciB3aGF0LCBhbmQgYWx3YXlzIGZvcmNlcyBpdHMgaW5wdXRzIHRvIGNoZWNrIGFzIHdlbGwu
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZsYWdzIHw9IE5vZGVVc2VkQXNOdW1iZXIgfCBO
b2RlTmVlZHNOZWdaZXJvOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBtX2dyYXBo
W25vZGUuY2hpbGQyKCldLm1lcmdlRmxhZ3MoZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICBj
YXNlIEFyaXRoRGl2OiB7CiAgICAgICAgICAgICBQcmVkaWN0ZWRUeXBlIGxlZnQgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUg
cmlnaHQgPSBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKQEAgLTc1Miw3ICs3
NzMsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgICAg
ICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0ID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAgUHJl
ZGljdGVkVHlwZSByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YTo6QmFs
bG90IGJhbGxvdDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNOdW1i
ZXJQcmVkaWN0aW9uKGxlZnQpICYmIGlzTnVtYmVyUHJlZGljdGlvbihyaWdodCkKKyAgICAgICAg
ICAgICAgICAgICAgJiYgIW1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkK
KyAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0gVmFyaWFibGVBY2Nlc3NEYXRhOjpWb3RlRG91
YmxlOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYmFsbG90ID0g
VmFyaWFibGVBY2Nlc3NEYXRhOjpWb3RlVmFsdWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgdm90ZShub2RlLmNoaWxkMSgpLCBiYWxsb3QpOworICAgICAgICAgICAgICAgIHZv
dGUobm9kZS5jaGlsZDIoKSwgYmFsbG90KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKwogICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgICAgIGNhc2Ug
QXJpdGhNYXg6CiAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDExNjIz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNjQ1LDcgKzI2NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlQXJpdGhOZWdhdGUoCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11
bChOb2RlJiBub2RlKQogewotICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0
KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICBpZiAobV9qaXQuZ3JhcGgoKS5tdWxTaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG5vZGUpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AyKHRoaXMs
IG5vZGUuY2hpbGQyKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAt
MjY1MywxNSArMjY1MywxNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwo
Tm9kCiAgICAgICAgIEdQUlJlZyByZWcxID0gb3AxLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVn
MiA9IG9wMi5ncHIoKTsKIAotICAgICAgICAvLyBXaGF0IGlzIHVuZm9ydHVuYXRlIGlzIHRoYXQg
d2UgY2Fubm90IHRha2UgYWR2YW50YWdlIG9mIG5vZGVDYW5UcnVuY2F0ZUludGVnZXIoKQotICAg
ICAgICAvLyBoZXJlLiBBIG11bHRpcGx5IG9uIGludGVnZXJzIHBlcmZvcm1lZCBpbiB0aGUgZG91
YmxlIGRvbWFpbiBhbmQgdGhlbiB0cnVuY2F0ZWQgdG8KLSAgICAgICAgLy8gYW4gaW50ZWdlciB3
aWxsIGdpdmUgYSBkaWZmZXJlbnQgcmVzdWx0IHRoYW4gYSBtdWx0aXBseSBwZXJmb3JtZWQgaW4g
dGhlIGludGVnZXIKLSAgICAgICAgLy8gZG9tYWluIGFuZCB0aGVuIHRydW5jYXRlZCwgaWYgdGhl
IGludGVnZXIgZG9tYWluIHJlc3VsdCB3b3VsZCBoYXZlIHJlc3VsdGVkIGluCi0gICAgICAgIC8v
IHNvbWV0aGluZyBiaWdnZXIgdGhhbiB3aGF0IGEgMzItYml0IGludGVnZXIgY2FuIGhvbGQuIEph
dmFTY3JpcHQgbWFuZGF0ZXMgdGhhdAotICAgICAgICAvLyB0aGUgc2VtYW50aWNzIGFyZSBhbHdh
eXMgYXMgaWYgdGhlIG11bHRpcGx5IGhhZCBiZWVuIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlCi0g
ICAgICAgIC8vIGRvbWFpbi4KLSAgICAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaE11bDMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKSk7CisgICAgICAg
IC8vIFdlIGNhbiBwZXJmb3JtIHRydW5jYXRlZCBtdWx0aXBsaWNhdGlvbnMgaWYgd2UgZ2V0IHRv
IHRoaXMgcG9pbnQsIGJlY2F1c2UgaWYgdGhlCisgICAgICAgIC8vIGZpeHVwIHBoYXNlIGNvdWxk
IG5vdCBwcm92ZSB0aGF0IGl0IHdvdWxkIGJlIHNhZmUsIGl0IHdvdWxkIGhhdmUgdHVybmVkIHVz
IGludG8KKyAgICAgICAgLy8gYSBkb3VibGUgbXVsdGlwbGljYXRpb24uCisgICAgICAgIGlmIChu
b2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUocmVnMSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIG1faml0Lm11
bDMyKHJlZzIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAorICAgICAgICAgICAgICAgIE92ZXJmbG93LCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok92ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUgdXNl
cnMgb2YgdGhpcyBub2RlIGNhcmUgYWJvdXQgc3VjaCB0aGluZ3MuCiAgICAgICAgIGlmICghbm9k
ZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7Cg==
</data>
<flag name="review"
          id="146291"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140444</attachid>
            <date>2012-05-06 16:39:22 -0700</date>
            <delta_ts>2012-05-06 20:39:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>smartermult_patch_2.diff</filename>
            <type>text/plain</type>
            <size>10787</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2MjQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBA
CisyMDEyLTA1LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VHJ1bmNhdGluZyBtdWx0aXBsaWNhdGlvbiBvbiBpbnRlZ2VycyBzaG91bGQgbm90IE9TUiBleGl0
IGV2ZXJ5IHRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg1NzUyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RG
R0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om11bFNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIpOgorICAgICAgICAoR3JhcGgpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptdWxJ
bW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlOjpkb1JvdW5kT2ZEb3VibGVWb3RpbmcpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBcml0aE11bCk6CisKIDIwMTItMDUtMDEgIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgc2hvdWxkIGJlIGFibGUgdG8gY29tcHV0ZSBkb21p
bmF0b3JzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAJKHJldmlzaW9uIDExNjIzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MSw3ICs0NTEsMjYgQEAg
Ym9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGluZAogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQXJpdGhNdWw6CisgICAgY2FzZSBBcml0aE11bDog
eworICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnZhbHVlKCk7
CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLnZhbHVlKCk7
CisgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5p
c051bWJlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpTVmFsdWUo
bGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIoKSkpOworICAgICAgICAgICAgbV9mb3Vu
ZENvbnN0YW50cyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKSB7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQ
cmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91
YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIEFyaXRoRGl2
OgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKQEAgLTQ2Miw5ICs0ODEs
NiBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgICAg
ICBkb3VibGUgYSA9IGxlZnQuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIGRvdWJsZSBiID0gcmln
aHQuYXNOdW1iZXIoKTsKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIEFyaXRoTXVsOgotICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoSlNWYWx1ZShhICogYikpOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBBcml0aERpdjoKICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KEpT
VmFsdWUoYSAvIGIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTE2MjM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUxLDkgKzI1MSwxNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEFyaXRoTXVsOiB7CisgICAgICAgICAg
ICBpZiAobV9ncmFwaC5tdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG5vZGUpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZml4RG91YmxlRWRnZSgwKTsKKyAgICAgICAgICAg
IGZpeERvdWJsZUVkZ2UoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAg
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgICAgIGNhc2UgQXJpdGhNYXg6Ci0gICAgICAgIGNhc2Ug
QXJpdGhNdWw6CiAgICAgICAgIGNhc2UgQXJpdGhEaXY6CiAgICAgICAgIGNhc2UgQXJpdGhNb2Q6
IHsKICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxMTYyMzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OCw2ICsxOTgsMjEg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihs
ZWZ0LCByaWdodCkgJiYgYWRkLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKICAgICB9CiAgICAgCisg
ICAgYm9vbCBtdWxTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKE5vZGUmIG11bCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtdWwub3AoKSA9PSBBcml0aE11bCk7CisgICAgICAgIAorICAgICAgICBOb2Rl
JiBsZWZ0ID0gYXQobXVsLmNoaWxkMSgpKTsKKyAgICAgICAgTm9kZSYgcmlnaHQgPSBhdChtdWwu
Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGxlZnQuaGFzQ29uc3RhbnQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG11bCwg
cmlnaHQsIGxlZnQpOworICAgICAgICBpZiAocmlnaHQuaGFzQ29uc3RhbnQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBtdWxJbW1lZGlhdGVTaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG11bCwgbGVmdCwg
cmlnaHQpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIobGVmdCwgcmlnaHQpICYmIG11bC5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkgJiYgIW5vZGVN
YXlPdmVyZmxvdyhtdWwuYXJpdGhOb2RlRmxhZ3MoKSk7CisgICAgfQorICAgIAogICAgIGJvb2wg
bmVnYXRlU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihOb2RlJiBuZWdhdGUpCiAgICAgewogICAgICAg
ICBBU1NFUlQobmVnYXRlLm9wKCkgPT0gQXJpdGhOZWdhdGUpOwpAQCAtNDgyLDYgKzQ5NywzMCBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbm9kZUNhblRydW5jYXRlSW50ZWdlcihhZGQuYXJp
dGhOb2RlRmxhZ3MoKSk7CiAgICAgfQogICAgIAorICAgIGJvb2wgbXVsSW1tZWRpYXRlU2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihOb2RlJiBtdWwsIE5vZGUmIHZhcmlhYmxlLCBOb2RlJiBpbW1lZGlh
dGUpCisgICAgeworICAgICAgICBBU1NFUlQoaW1tZWRpYXRlLmhhc0NvbnN0YW50KCkpOworICAg
ICAgICAKKyAgICAgICAgSlNWYWx1ZSBpbW1lZGlhdGVWYWx1ZSA9IGltbWVkaWF0ZS52YWx1ZU9m
SlNDb25zdGFudChtX2NvZGVCbG9jayk7CisgICAgICAgIGlmICghaW1tZWRpYXRlVmFsdWUuaXNJ
bnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYg
KCF2YXJpYWJsZS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBpbnQzMl90IGludEltbWVkaWF0ZSA9IGltbWVkaWF0
ZVZhbHVlLmFzSW50MzIoKTsKKyAgICAgICAgLy8gRG91YmxlcyBoYXZlIGEgNTMgYml0IG1hbnRp
c3NhIHNvIHdlIGV4cGVjdCBhIG11bHRpcGxpY2F0aW9uIG9mIDJeMzEgKHRoZSBoaWdoZXN0Cisg
ICAgICAgIC8vIG1hZ25pdHVkZSBwb3NzaWJsZSBpbnQzMiB2YWx1ZSkgYW5kIGFueSB2YWx1ZSBs
ZXNzIHRoYW4gMl4yMiB0byBub3QgcmVzdWx0IGluIGFueQorICAgICAgICAvLyByb3VuZGluZyBp
biBhIGRvdWJsZSBtdWx0aXBsaWNhdGlvbiAtIGhlbmNlIGl0IHdpbGwgYmUgZXF1aXZhbGVudCB0
byBhbiBpbnRlZ2VyCisgICAgICAgIC8vIG11bHRpcGxpY2F0aW9uLCBpZiB3ZSBhcmUgZG9pbmcg
aW50MzIgdHJ1bmNhdGlvbiBhZnRlcndhcmRzICh3aGljaCBpcyB3aGF0CisgICAgICAgIC8vIGNh
blNwZWN1bGF0ZUludGVnZXIoKSBpbXBsaWVzKS4KKyAgICAgICAgY29uc3QgaW50MzJfdCB0d29U
b1RoZTIyID0gMSA8PCAyMjsgCisgICAgICAgIGlmIChpbnRJbW1lZGlhdGUgPD0gLXR3b1RvVGhl
MjIgfHwgaW50SW1tZWRpYXRlID49IHR3b1RvVGhlMjIpCisgICAgICAgICAgICByZXR1cm4gbXVs
LmNhblNwZWN1bGF0ZUludGVnZXIoKSAmJiAhbm9kZU1heU92ZXJmbG93KG11bC5hcml0aE5vZGVG
bGFncygpKTsKKworICAgICAgICByZXR1cm4gbXVsLmNhblNwZWN1bGF0ZUludGVnZXIoKTsKKyAg
ICB9CisgICAgCiAgICAgLy8gV2hlbiBhIG5vZGUncyByZWZDb3VudCBnb2VzIGZyb20gMCB0byAx
LCBpdCBtdXN0IChsb2dpY2FsbHkpIHJlY3Vyc2l2ZWx5IHJlZiBhbGwgb2YgaXRzIGNoaWxkcmVu
LCBhbmQgdmljZSB2ZXJzYS4KICAgICB2b2lkIHJlZkNoaWxkcmVuKE5vZGVJbmRleCk7CiAgICAg
dm9pZCBkZXJlZkNoaWxkcmVuKE5vZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTE2MjM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw4ICszMzEs
MjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxk
MigpXS5tZXJnZUZsYWdzKGZsYWdzKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisK
KyAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgUHJlZGljdGVkVHlwZSBsZWZ0
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgICAgICBQcmVk
aWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVkaWN0aW9uKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0KSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZ3JhcGgubXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkKKyAgICAg
ICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24oUHJlZGljdEludDMyKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VQcmVkaWN0aW9uKFByZWRpY3REb3VibGUpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBBcyBzb29uIGFzIGEgbXVsdGlwbHkgaGFwcGVucywgd2UgY2FuIGVhc2lseSBlbmQgdXAg
aW4gdGhlIHBhcnQKKyAgICAgICAgICAgIC8vIG9mIHRoZSBkb3VibGUgZG9tYWluIHdoZXJlIHRo
ZSBwb2ludCBhdCB3aGljaCB5b3UgZG8gdHJ1bmNhdGlvbgorICAgICAgICAgICAgLy8gY2FuIGNo
YW5nZSB0aGUgb3V0Y29tZS4gU28sIEFyaXRoTXVsIGFsd2F5cyBjaGVja3MgZm9yIG92ZXJmbG93
CisgICAgICAgICAgICAvLyBubyBtYXR0ZXIgd2hhdCwgYW5kIGFsd2F5cyBmb3JjZXMgaXRzIGlu
cHV0cyB0byBjaGVjayBhcyB3ZWxsLgorICAgICAgICAgICAgCisgICAgICAgICAgICBmbGFncyB8
PSBOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZU5lZWRzTmVnWmVybzsKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5tZXJnZUZsYWdzKGZsYWdzKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5tZXJnZUZsYWdzKGZsYWdzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBBcml0aE11bDoKICAgICAgICAgY2FzZSBBcml0aERpdjogewogICAgICAgICAgICAgUHJlZGlj
dGVkVHlwZSBsZWZ0ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCk7CiAgICAg
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVk
aWN0aW9uKCk7CkBAIC03NTIsNyArNzczLDIzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IEFyaXRoTXVsOgorICAgICAgICAgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICAgICAgICAg
IFByZWRpY3RlZFR5cGUgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigp
OworICAgICAgICAgICAgICAgIFByZWRpY3RlZFR5cGUgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hp
bGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGE6OkJhbGxvdCBiYWxsb3Q7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKGlzTnVtYmVyUHJlZGljdGlvbihsZWZ0KSAmJiBpc051bWJlclByZWRp
Y3Rpb24ocmlnaHQpCisgICAgICAgICAgICAgICAgICAgICYmICFtX2dyYXBoLm11bFNob3VsZFNw
ZWN1bGF0ZUludGVnZXIobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlh
YmxlQWNjZXNzRGF0YTo6Vm90ZURvdWJsZTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGJhbGxvdCA9IFZhcmlhYmxlQWNjZXNzRGF0YTo6Vm90ZVZhbHVlOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHZvdGUobm9kZS5jaGlsZDEoKSwgYmFsbG90
KTsKKyAgICAgICAgICAgICAgICB2b3RlKG5vZGUuY2hpbGQyKCksIGJhbGxvdCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNhc2UgQXJpdGhN
aW46CiAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4OgogICAgICAgICAgICAgY2FzZSBBcml0aE1v
ZDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAxMTYyMzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY0NSw3ICsyNjQ1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTmVnYXRlKAogCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQXJpdGhNdWwoTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkp
ICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgaWYgKG1faml0LmdyYXBoKCku
bXVsU2hvdWxkU3BlY3VsYXRlSW50ZWdlcihub2RlKSkgewogICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIFNwZWN1bGF0ZUlu
dGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTI2NTMsMTUgKzI2NTMsMTcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICBHUFJSZWcgcmVnMSA9IG9wMS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHJlZzIgPSBvcDIuZ3ByKCk7CiAKLSAgICAgICAgLy8gV2hhdCBp
cyB1bmZvcnR1bmF0ZSBpcyB0aGF0IHdlIGNhbm5vdCB0YWtlIGFkdmFudGFnZSBvZiBub2RlQ2Fu
VHJ1bmNhdGVJbnRlZ2VyKCkKLSAgICAgICAgLy8gaGVyZS4gQSBtdWx0aXBseSBvbiBpbnRlZ2Vy
cyBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZSBkb21haW4gYW5kIHRoZW4gdHJ1bmNhdGVkIHRvCi0g
ICAgICAgIC8vIGFuIGludGVnZXIgd2lsbCBnaXZlIGEgZGlmZmVyZW50IHJlc3VsdCB0aGFuIGEg
bXVsdGlwbHkgcGVyZm9ybWVkIGluIHRoZSBpbnRlZ2VyCi0gICAgICAgIC8vIGRvbWFpbiBhbmQg
dGhlbiB0cnVuY2F0ZWQsIGlmIHRoZSBpbnRlZ2VyIGRvbWFpbiByZXN1bHQgd291bGQgaGF2ZSBy
ZXN1bHRlZCBpbgotICAgICAgICAvLyBzb21ldGhpbmcgYmlnZ2VyIHRoYW4gd2hhdCBhIDMyLWJp
dCBpbnRlZ2VyIGNhbiBob2xkLiBKYXZhU2NyaXB0IG1hbmRhdGVzIHRoYXQKLSAgICAgICAgLy8g
dGhlIHNlbWFudGljcyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0aXBseSBoYWQgYmVlbiBwZXJm
b3JtZWQgaW4gdGhlIGRvdWJsZQotICAgICAgICAvLyBkb21haW4uCi0gICAgICAgICAgICAKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZzEsIHJlZzIsIHJl
c3VsdC5ncHIoKSkpOworICAgICAgICAvLyBXZSBjYW4gcGVyZm9ybSB0cnVuY2F0ZWQgbXVsdGlw
bGljYXRpb25zIGlmIHdlIGdldCB0byB0aGlzIHBvaW50LCBiZWNhdXNlIGlmIHRoZQorICAgICAg
ICAvLyBmaXh1cCBwaGFzZSBjb3VsZCBub3QgcHJvdmUgdGhhdCBpdCB3b3VsZCBiZSBzYWZlLCBp
dCB3b3VsZCBoYXZlIHR1cm5lZCB1cyBpbnRvCisgICAgICAgIC8vIGEgZG91YmxlIG11bHRpcGxp
Y2F0aW9uLgorICAgICAgICBpZiAobm9kZUNhblRydW5jYXRlSW50ZWdlcihub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHJlZzEsIHJlc3VsdC5ncHIoKSk7
CisgICAgICAgICAgICBtX2ppdC5tdWwzMihyZWcyLCByZXN1bHQuZ3ByKCkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKKyAgICAgICAgICAgICAgICBP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLAorICAgICAgICAgICAgICAgIG1faml0LmJy
YW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnMSwgcmVnMiwgcmVzdWx0Lmdw
cigpKSk7CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBmb3IgbmVn
YXRpdmUgemVybywgaWYgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZSBjYXJlIGFib3V0IHN1Y2ggdGhp
bmdzLgogICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5v
ZGVGbGFncygpKSkgewo=
</data>
<flag name="review"
          id="146295"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>