<?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>147250</bug_id>
          
          <creation_ts>2015-07-23 19:39:01 -0700</creation_ts>
          <short_desc>DFG::safeToExecute() is wrong for MultiGetByOffset, doesn&apos;t consider the structures of the prototypes that get loaded from</short_desc>
          <delta_ts>2015-07-24 11:25:17 -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>
          
          <blocked>146929</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1111889</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 19:39:01 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111892</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 19:51:15 -0700</bug_when>
    <thetext>Oh man, this is super hard to test.  We end up not hoisting MultiGetByOffset in LICM in any of the situations where safeToExecute() would have been wrong - if the loop is responsible for adding or removing the property that is being loaded, then it will appear to clobber JSCell_structure or the property.  This means that of MultiGetByOffset relies on some CheckStructure to prove the presence of a property in a prototype, then that CheckStructure will be hoisted anytime that MultiGetByOffset is hoisted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111895</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 19:56:58 -0700</bug_when>
    <thetext>It just occurred to me that there&apos;s a tremendously simple solution: don&apos;t use MultiGetByOffset for prototype loads if the field in the prototype isn&apos;t constant-inferred.  That means we don&apos;t have to do any kind of checks on the prototype to guarantee the safety of MultiGetByOffset&apos;s execution.

Another solution is to prevent hoisting of MutliGetByOffset&apos;s whose prototype properties are not constant-inferred.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111898</commentid>
    <comment_count>3</comment_count>
      <attachid>257425</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 20:24:40 -0700</bug_when>
    <thetext>Created attachment 257425
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111907</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 21:00:38 -0700</bug_when>
    <thetext>As expected, there is no effect on performance:

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r187282)
&quot;FixSTE&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r187282)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                        TipOfTree                   FixSTE                                      
SunSpider:
   3d-cube                                            5.3942+-0.2171            5.2932+-0.0824          might be 1.0191x faster
   3d-morph                                           5.7981+-0.0895     ?      5.8463+-0.1318        ?
   3d-raytrace                                        6.6349+-0.4400            6.5021+-0.0932          might be 1.0204x faster
   access-binary-trees                                2.3634+-0.0989     ?      2.4486+-0.2319        ? might be 1.0361x slower
   access-fannkuch                                    7.3573+-0.2042            6.5433+-0.6331          might be 1.1244x faster
   access-nbody                                       2.9073+-0.1249            2.8647+-0.0770          might be 1.0148x faster
   access-nsieve                                      3.1949+-0.1067     ?      3.1990+-0.1015        ?
   bitops-3bit-bits-in-byte                           1.7177+-0.0688            1.6563+-0.0673          might be 1.0370x faster
   bitops-bits-in-byte                                3.6613+-0.1550            3.6080+-0.1117          might be 1.0148x faster
   bitops-bitwise-and                                 2.2122+-0.0479     ?      2.2459+-0.0713        ? might be 1.0153x slower
   bitops-nsieve-bits                                 3.1946+-0.0793            3.1815+-0.0574        
   controlflow-recursive                              2.3007+-0.0678     ?      2.3331+-0.0385        ? might be 1.0141x slower
   crypto-aes                                         4.6464+-0.1368     ?      4.6963+-0.1525        ? might be 1.0108x slower
   crypto-md5                                         2.8195+-0.2624            2.7766+-0.1186          might be 1.0155x faster
   crypto-sha1                                        2.6965+-0.1812     ?      2.8359+-0.3018        ? might be 1.0517x slower
   date-format-tofte                                  9.3464+-0.3072            9.1623+-0.0993          might be 1.0201x faster
   date-format-xparb                                  5.3880+-0.1257     ?      5.5550+-0.2300        ? might be 1.0310x slower
   math-cordic                                        3.0848+-0.0530     ?      3.0857+-0.0541        ?
   math-partial-sums                                  5.4990+-0.3757     ?      5.9557+-0.9060        ? might be 1.0831x slower
   math-spectral-norm                                 2.1145+-0.2771            2.0754+-0.0565          might be 1.0188x faster
   regexp-dna                                         7.7231+-1.2226     ?      8.1423+-1.6785        ? might be 1.0543x slower
   string-base64                                      4.8289+-0.0727     ?      5.8427+-1.7397        ? might be 1.2100x slower
   string-fasta                                       7.3020+-0.8343     ?      7.3181+-0.9742        ?
   string-tagcloud                                   10.6605+-1.5104            9.8118+-0.6454          might be 1.0865x faster
   string-unpack-code                                20.2755+-0.3183     ?     20.8014+-1.2156        ? might be 1.0259x slower
   string-validate-input                              5.2791+-0.5351            5.1257+-0.1226          might be 1.0299x faster

   &lt;arithmetic&gt;                                       5.3231+-0.0743     ?      5.3426+-0.1563        ? might be 1.0037x slower

                                                        TipOfTree                   FixSTE                                      
LongSpider:
   3d-cube                                         1113.9581+-15.9047    ?   1122.6446+-14.2030       ?
   3d-morph                                        1550.0653+-23.7832        1548.7938+-22.5314       
   3d-raytrace                                      700.5168+-3.2786          697.9635+-4.4509        
   access-binary-trees                             1011.5247+-9.3131     ?   1026.6173+-39.8346       ? might be 1.0149x slower
   access-fannkuch                                  340.4065+-15.5176         333.3040+-1.3611          might be 1.0213x faster
   access-nbody                                     594.0071+-9.6001     ?    598.9314+-8.0393        ?
   access-nsieve                                    477.2102+-5.2419     ?    479.0203+-9.7719        ?
   bitops-3bit-bits-in-byte                          45.1807+-1.2414           44.7111+-0.7806          might be 1.0105x faster
   bitops-bits-in-byte                              103.1696+-1.6273     ?    104.4125+-2.9245        ? might be 1.0120x slower
   bitops-nsieve-bits                               421.7130+-4.7491     ?    427.0826+-12.2488       ? might be 1.0127x slower
   controlflow-recursive                            493.8736+-6.1179     ?    496.1055+-10.0189       ?
   crypto-aes                                       697.2868+-8.5208     ?    702.6652+-22.5853       ?
   crypto-md5                                       543.1454+-3.5397          537.7665+-15.3720         might be 1.0100x faster
   crypto-sha1                                      712.6993+-13.5456         698.7428+-15.3981         might be 1.0200x faster
   date-format-tofte                                723.8298+-10.9820         721.3319+-4.8518        
   date-format-xparb                                777.2660+-20.6460    ?    807.7032+-24.1727       ? might be 1.0392x slower
   hash-map                                         176.1766+-4.0239          175.7396+-5.4489        
   math-cordic                                      582.2731+-7.2319          581.9697+-9.5447        
   math-partial-sums                                515.9413+-2.8245          510.7365+-3.4967          might be 1.0102x faster
   math-spectral-norm                               573.0699+-2.4170     ?    574.0151+-11.7185       ?
   string-base64                                    418.3698+-7.9984          414.4432+-6.3318        
   string-fasta                                     423.7142+-3.5634     ?    431.6918+-25.0562       ? might be 1.0188x slower
   string-tagcloud                                  198.2391+-8.0541          194.9641+-2.8238          might be 1.0168x faster

   &lt;geometric&gt;                                      461.0907+-2.0648     ?    461.4885+-1.7456        ? might be 1.0009x slower

                                                        TipOfTree                   FixSTE                                      
V8Spider:
   crypto                                            57.3664+-2.5998     ?     65.5976+-19.4829       ? might be 1.1435x slower
   deltablue                                         98.6021+-8.8660     ?    102.4016+-14.4358       ? might be 1.0385x slower
   earley-boyer                                      48.3950+-1.8376           47.7350+-2.4051          might be 1.0138x faster
   raytrace                                          39.3809+-2.5219     ?     39.5667+-3.1778        ?
   regexp                                            76.2546+-2.3023           74.5444+-1.6498          might be 1.0229x faster
   richards                                          78.9153+-2.7159     ?     79.4523+-0.5808        ?
   splay                                             40.9786+-2.2021           39.8220+-2.7102          might be 1.0290x faster

   &lt;geometric&gt;                                       59.5085+-1.5972     ?     60.2446+-2.0035        ? might be 1.0124x slower

                                                        TipOfTree                   FixSTE                                      
Octane:
   encrypt                                           0.19470+-0.00554    ?     0.19500+-0.00157       ?
   decrypt                                           3.29597+-0.05074    ?     3.29733+-0.02554       ?
   deltablue                                x2       0.19257+-0.00745          0.18918+-0.00176         might be 1.0179x faster
   earley                                            0.38732+-0.00352    ?     0.38883+-0.00422       ?
   boyer                                             5.11013+-0.02951          5.09835+-0.02978       
   navier-stokes                            x2       5.20096+-0.07741          5.15698+-0.02487       
   raytrace                                 x2       1.29696+-0.03808    ?     1.31062+-0.04177       ? might be 1.0105x slower
   richards                                 x2       0.12884+-0.00323    ?     0.13081+-0.00729       ? might be 1.0153x slower
   splay                                    x2       0.40259+-0.02456          0.38821+-0.00482         might be 1.0370x faster
   regexp                                   x2      29.14315+-0.31428    ?    30.63084+-4.21463       ? might be 1.0510x slower
   pdfjs                                    x2      43.07589+-0.25917    ?    43.37032+-0.56780       ?
   mandreel                                 x2      50.74457+-0.42856    ?    50.75525+-0.33062       ?
   gbemu                                    x2      44.53727+-1.87002         44.49853+-2.38834       
   closure                                           0.65929+-0.00385    ?     0.68134+-0.04154       ? might be 1.0334x slower
   jquery                                            8.61741+-0.12809    ?     9.00999+-0.75168       ? might be 1.0456x slower
   box2d                                    x2      12.28737+-0.80271    ?    12.30726+-0.73797       ?
   zlib                                     x2     409.16100+-13.80942   ?   416.95498+-1.85162       ? might be 1.0190x slower
   typescript                               x2     843.63871+-33.75756       838.27352+-12.86461      

   &lt;geometric&gt;                                       6.64308+-0.04825    ?     6.67289+-0.04324       ? might be 1.0045x slower

                                                        TipOfTree                   FixSTE                                      
Kraken:
   ai-astar                                          232.623+-13.076           224.867+-5.047           might be 1.0345x faster
   audio-beat-detection                               97.137+-5.554             94.054+-1.560           might be 1.0328x faster
   audio-dft                                         109.174+-2.366      ?     109.202+-2.203         ?
   audio-fft                                          60.972+-0.453      ?      61.686+-0.790         ? might be 1.0117x slower
   audio-oscillator                                   76.742+-1.986      ?      77.220+-2.203         ?
   imaging-darkroom                                  108.155+-1.736      ?     109.629+-6.656         ? might be 1.0136x slower
   imaging-desaturate                                 64.348+-5.071             63.629+-5.041           might be 1.0113x faster
   imaging-gaussian-blur                             113.492+-5.907            111.204+-1.959           might be 1.0206x faster
   json-parse-financial                               49.617+-2.159             49.429+-5.709         
   json-stringify-tinderbox                           28.721+-0.938      ?      30.212+-2.221         ? might be 1.0519x slower
   stanford-crypto-aes                                46.538+-0.117             46.516+-0.440         
   stanford-crypto-ccm                                48.986+-1.659             48.415+-1.890           might be 1.0118x faster
   stanford-crypto-pbkdf2                            108.803+-1.559      ^     102.799+-1.468         ^ definitely 1.0584x faster
   stanford-crypto-sha256-iterative                   43.866+-2.864             41.045+-0.755           might be 1.0687x faster

   &lt;arithmetic&gt;                                       84.941+-0.957             83.565+-1.087           might be 1.0165x faster

                                                        TipOfTree                   FixSTE                                      
JSRegress:
   abc-forward-loop-equal                            49.1909+-2.1341           47.5768+-1.2780          might be 1.0339x faster
   abc-postfix-backward-loop                         47.5818+-1.5716     ?     47.6836+-1.8892        ?
   abc-simple-backward-loop                          48.2264+-1.6033           47.1350+-1.6587          might be 1.0232x faster
   abc-simple-forward-loop                           47.5694+-1.7235     ?     47.5911+-1.7692        ?
   abc-skippy-loop                                   32.2809+-0.4943           31.9365+-0.3483          might be 1.0108x faster
   abs-boolean                                        2.9457+-0.3486            2.7575+-0.0437          might be 1.0682x faster
   adapt-to-double-divide                            16.6534+-0.1427     ?     16.9419+-0.7938        ? might be 1.0173x slower
   aliased-arguments-getbyval                         1.3224+-0.0370     ?      1.3534+-0.0608        ? might be 1.0235x slower
   allocate-big-object                                2.7873+-0.1354     ?      2.8757+-0.3936        ? might be 1.0317x slower
   arguments-named-and-reflective                    12.5630+-0.8464     ?     13.1570+-1.1915        ? might be 1.0473x slower
   arguments-out-of-bounds                           14.9372+-0.8787           14.7114+-0.5311          might be 1.0153x faster
   arguments-strict-mode                             11.7524+-1.0879           11.0042+-0.3990          might be 1.0680x faster
   arguments                                          9.6530+-0.2282     ?     10.0413+-0.8535        ? might be 1.0402x slower
   arity-mismatch-inlining                            0.8948+-0.0277            0.8705+-0.0240          might be 1.0279x faster
   array-access-polymorphic-structure                 6.7381+-0.2737     ?      7.4423+-1.1779        ? might be 1.1045x slower
   array-nonarray-polymorhpic-access                 31.7732+-0.8469     ?     32.5481+-1.5567        ? might be 1.0244x slower
   array-prototype-every                             86.0412+-2.9648     ?     89.7076+-7.7587        ? might be 1.0426x slower
   array-prototype-forEach                           83.6662+-2.3123     ?     84.3614+-0.8779        ?
   array-prototype-map                               92.1899+-3.8084     ?     97.5947+-15.1127       ? might be 1.0586x slower
   array-prototype-reduce                            81.5271+-2.5709     ?     82.1276+-2.6015        ?
   array-prototype-reduceRight                       81.5508+-2.1303     ?     85.3123+-11.9698       ? might be 1.0461x slower
   array-prototype-some                              83.0337+-1.9327     ?     88.8455+-4.5127        ? might be 1.0700x slower
   array-splice-contiguous                           25.2864+-0.2314     ?     25.3512+-0.4523        ?
   array-with-double-add                              4.2203+-0.1752            4.1504+-0.0962          might be 1.0168x faster
   array-with-double-increment                        3.3513+-0.1392            3.2325+-0.0289          might be 1.0367x faster
   array-with-double-mul-add                          5.1173+-0.1241     ?      5.2091+-0.3715        ? might be 1.0179x slower
   array-with-double-sum                              3.4972+-0.2699            3.3394+-0.0525          might be 1.0473x faster
   array-with-int32-add-sub                           6.8170+-0.0524     ?      6.8830+-0.0748        ?
   array-with-int32-or-double-sum                     3.4641+-0.1102            3.3548+-0.0155          might be 1.0326x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     38.9885+-2.6579           37.2008+-1.6814          might be 1.0481x faster
   ArrayBuffer-DataView-alloc-long-lived             15.1242+-1.0167           14.2812+-0.2134          might be 1.0590x faster
   ArrayBuffer-Int32Array-byteOffset                  3.8807+-0.0770     ?      3.9896+-0.3726        ? might be 1.0281x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     38.2821+-1.6692           37.1934+-0.5598          might be 1.0293x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.0061+-0.7376     !     24.8669+-1.0747        ! definitely 1.1300x slower
   ArrayBuffer-Int8Array-alloc-long-lived            14.0660+-1.3942     ?     14.7852+-1.9043        ? might be 1.0511x slower
   ArrayBuffer-Int8Array-alloc                       11.2478+-1.3504           10.6762+-0.7508          might be 1.0535x faster
   asmjs_bool_bug                                     8.3143+-0.7529            8.0327+-0.1103          might be 1.0351x faster
   assign-custom-setter-polymorphic                   3.0737+-0.0632            3.0710+-0.0616        
   assign-custom-setter                               4.1909+-0.0977            4.1880+-0.0586        
   basic-set                                          8.6260+-0.1368     ?      8.9596+-0.6024        ? might be 1.0387x slower
   big-int-mul                                        4.1665+-0.1516            4.0070+-0.0438          might be 1.0398x faster
   boolean-test                                       3.1082+-0.0381            3.1024+-0.0496        
   branch-fold                                        3.8864+-0.1410     ?      3.8889+-0.2879        ?
   branch-on-string-as-boolean                       20.8957+-1.2355           19.9648+-0.5736          might be 1.0466x faster
   by-val-generic                                     8.2857+-0.2103     ?      8.2885+-0.3868        ?
   call-spread-apply                                 30.1623+-0.6728           29.6469+-0.6101          might be 1.0174x faster
   call-spread-call                                  24.7203+-0.9377           24.4686+-0.3431          might be 1.0103x faster
   captured-assignments                               0.5288+-0.0738            0.4885+-0.0098          might be 1.0826x faster
   cast-int-to-double                                 5.3146+-0.0202     ?      5.3602+-0.1176        ?
   cell-argument                                      8.5445+-0.2305     ?      8.6558+-0.2292        ? might be 1.0130x slower
   cfg-simplify                                       3.1894+-0.8359            2.8498+-0.0219          might be 1.1192x faster
   chain-getter-access                                9.1638+-0.1554            9.1611+-0.1443        
   cmpeq-obj-to-obj-other                            12.0038+-0.9257     ?     12.2597+-1.7879        ? might be 1.0213x slower
   constant-test                                      5.0182+-0.0357     ?      5.0354+-0.0440        ?
   create-lots-of-functions                          11.3013+-0.1159     ?     11.7486+-1.3105        ? might be 1.0396x slower
   cse-new-array-buffer                               2.5121+-0.0363     ?      2.5493+-0.0678        ? might be 1.0148x slower
   cse-new-array                                      2.6302+-0.0500     ?      2.6702+-0.0847        ? might be 1.0152x slower
   DataView-custom-properties                        44.0143+-4.1470           41.8956+-0.4631          might be 1.0506x faster
   delay-tear-off-arguments-strictmode               14.7181+-1.2060           14.1253+-0.5450          might be 1.0420x faster
   deltablue-varargs                                218.7625+-33.6891         208.7928+-1.3955          might be 1.0477x faster
   destructuring-arguments                          183.7234+-4.2812     ?    187.1041+-5.6745        ? might be 1.0184x slower
   destructuring-parameters-overridden-by-function   
                                                      0.5897+-0.0166     ?      0.6128+-0.0290        ? might be 1.0393x slower
   destructuring-swap                                 5.1031+-0.0326     ?      5.1341+-0.0570        ?
   direct-arguments-getbyval                          1.3245+-0.0665            1.2749+-0.0309          might be 1.0389x faster
   div-boolean-double                                 5.2563+-0.0241     ?      5.2644+-0.0239        ?
   div-boolean                                        7.8086+-0.0201     ?      7.8231+-0.0382        ?
   double-get-by-val-out-of-bounds                    4.7594+-0.1462            4.7008+-0.0309          might be 1.0125x faster
   double-pollution-getbyval                          8.8988+-0.0781            8.8909+-0.0395        
   double-pollution-putbyoffset                       4.9632+-1.7375            4.3039+-0.0797          might be 1.1532x faster
   double-real-use                                   30.1287+-1.3722           29.9961+-0.8962        
   double-to-int32-typed-array-no-inline              2.3420+-0.0898     ?      2.3913+-0.2015        ? might be 1.0210x slower
   double-to-int32-typed-array                        2.0004+-0.0612     ?      2.1338+-0.2501        ? might be 1.0667x slower
   double-to-uint32-typed-array-no-inline             2.3850+-0.0324     ?      2.4280+-0.1056        ? might be 1.0180x slower
   double-to-uint32-typed-array                       2.0900+-0.0459            2.0825+-0.0617        
   elidable-new-object-dag                           43.9916+-1.8175           42.8857+-1.4953          might be 1.0258x faster
   elidable-new-object-roflcopter                    40.9328+-1.1856     ?     41.2094+-1.9513        ?
   elidable-new-object-then-call                     39.5514+-1.5827           38.5594+-0.9633          might be 1.0257x faster
   elidable-new-object-tree                          46.7832+-2.2496           45.8525+-1.4358          might be 1.0203x faster
   empty-string-plus-int                              5.2943+-0.0775     ?      5.3000+-0.0835        ?
   emscripten-cube2hash                              40.1535+-2.1423           38.9712+-1.9306          might be 1.0303x faster
   exit-length-on-plain-object                       15.0809+-1.1766           14.3964+-1.1325          might be 1.0475x faster
   external-arguments-getbyval                        1.3603+-0.1981     ?      1.3639+-0.0608        ?
   external-arguments-putbyval                        2.4624+-0.0738     ?      2.4649+-0.0489        ?
   fixed-typed-array-storage-var-index                1.8224+-1.3160            1.3270+-0.1477          might be 1.3733x faster
   fixed-typed-array-storage                          0.9613+-0.0563            0.9502+-0.0639          might be 1.0117x faster
   Float32Array-matrix-mult                           4.6595+-0.1214     ?      4.7762+-0.2827        ? might be 1.0251x slower
   Float32Array-to-Float64Array-set                  55.7070+-0.7630     !     57.3212+-0.3474        ! definitely 1.0290x slower
   Float64Array-alloc-long-lived                     90.7164+-2.0180     ?     92.0000+-1.4179        ? might be 1.0141x slower
   Float64Array-to-Int16Array-set                    71.6648+-1.8695           70.7601+-3.0791          might be 1.0128x faster
   fold-double-to-int                                14.0702+-0.1140     ?     14.4607+-0.5918        ? might be 1.0278x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.5685+-1.2664           10.4272+-0.9918          might be 1.0136x faster
   fold-get-by-id-to-multi-get-by-offset             10.3959+-1.3215     ?     10.4731+-1.6726        ?
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.8291+-0.6347     ?      9.2003+-0.8716        ? might be 1.0420x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.7229+-1.7296            8.8240+-1.1337          might be 1.1019x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.3809+-1.9562            9.9882+-1.4589          might be 1.0393x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.2402+-0.5412            8.1815+-0.3354        
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.1741+-0.6344            9.8442+-0.4684          might be 1.0335x faster
   fold-put-by-id-to-multi-put-by-offset             10.4608+-0.5653     ?     11.2751+-0.6263        ? might be 1.0779x slower
   fold-put-structure                                 7.8026+-0.2851            7.5094+-0.7761          might be 1.0391x faster
   for-of-iterate-array-entries                      12.4062+-0.1222           12.3581+-0.1324        
   for-of-iterate-array-keys                          3.7091+-0.1222     ?      3.7343+-0.1362        ?
   for-of-iterate-array-values                        4.1755+-0.4672            3.9761+-0.2673          might be 1.0502x faster
   fround                                            22.0680+-1.3373           21.6063+-0.4859          might be 1.0214x faster
   ftl-library-inlining-dataview                     66.8676+-2.3728     ?     67.3313+-2.3522        ?
   ftl-library-inlining                              99.5299+-18.2459    ?    102.9587+-14.1832       ? might be 1.0345x slower
   function-dot-apply                                 2.3519+-0.1334            2.2995+-0.0568          might be 1.0228x faster
   function-test                                      2.9131+-0.0407            2.9030+-0.0386        
   function-with-eval                               111.6064+-4.6160     ?    113.9303+-4.9949        ? might be 1.0208x slower
   gcse-poly-get-less-obvious                        18.7372+-1.1329           18.6489+-1.1604        
   gcse-poly-get                                     21.1558+-0.9425     ?     22.8883+-3.1909        ? might be 1.0819x slower
   gcse                                               4.4413+-0.1136     ?      4.4427+-0.1159        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7832+-0.0313            2.7720+-0.0516        
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0249+-0.0647     ?      6.0793+-0.1649        ?
   get-by-id-chain-from-try-block                     7.0293+-0.6969            6.6544+-0.0924          might be 1.0563x faster
   get-by-id-check-structure-elimination              5.1640+-0.1012            5.1388+-0.1072        
   get-by-id-proto-or-self                           17.9331+-0.8700     ?     18.3877+-1.2086        ? might be 1.0254x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9812+-0.0172     ?      2.9845+-0.0326        ?
   get-by-id-self-or-proto                           18.4280+-0.8303     ?     19.6517+-1.9144        ? might be 1.0664x slower
   get-by-val-out-of-bounds                           4.4323+-0.0369     ?      4.4909+-0.0949        ? might be 1.0132x slower
   get_callee_monomorphic                             2.8590+-0.5036            2.6401+-0.2354          might be 1.0829x faster
   get_callee_polymorphic                             3.5868+-0.1914     ?      3.6416+-0.2567        ? might be 1.0153x slower
   getter-no-activation                               5.1193+-0.4267     ?      5.1936+-0.2838        ? might be 1.0145x slower
   getter-prototype                                  15.2028+-0.8572           14.9386+-0.3215          might be 1.0177x faster
   getter-richards                                  142.7488+-13.7955         136.1184+-6.3265          might be 1.0487x faster
   getter                                             6.1554+-1.0539            5.4212+-0.0175          might be 1.1354x faster
   global-var-const-infer-fire-from-opt               1.1829+-0.0979     ^      1.0016+-0.0788        ^ definitely 1.1810x faster
   global-var-const-infer                             0.8532+-0.1117     ?      0.9035+-0.0861        ? might be 1.0589x slower
   HashMap-put-get-iterate-keys                      30.9323+-3.8077           29.0674+-1.1018          might be 1.0642x faster
   HashMap-put-get-iterate                           31.5552+-1.2151           30.8794+-1.4874          might be 1.0219x faster
   HashMap-string-put-get-iterate                    28.1022+-1.2046           27.8942+-1.3572        
   hoist-make-rope                                   12.7024+-1.4578     ?     13.0253+-1.8014        ? might be 1.0254x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.3066+-0.4519            5.1449+-0.0399          might be 1.0314x faster
   hoist-poly-check-structure                         3.8383+-0.2913            3.7257+-0.0297          might be 1.0302x faster
   imul-double-only                                   8.4376+-0.2067     ?      8.6118+-0.5321        ? might be 1.0206x slower
   imul-int-only                                     11.4417+-1.3243           10.7767+-0.7252          might be 1.0617x faster
   imul-mixed                                         8.7619+-0.8064            8.6637+-0.3881          might be 1.0113x faster
   in-four-cases                                     22.8675+-0.3460           22.7302+-0.2934        
   in-one-case-false                                 11.0184+-0.1029     ?     11.0877+-0.1682        ?
   in-one-case-true                                  11.0233+-0.1215     ?     11.4596+-0.6120        ? might be 1.0396x slower
   in-two-cases                                      11.3627+-0.1019     ?     11.5584+-0.4428        ? might be 1.0172x slower
   indexed-properties-in-objects                      2.9980+-0.0667     ?      3.0192+-0.2147        ?
   infer-closure-const-then-mov-no-inline             3.9631+-0.1498     ?      4.5502+-0.5337        ? might be 1.1481x slower
   infer-closure-const-then-mov                      19.7679+-0.2856     ?     19.8195+-0.2337        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.6552+-1.0413           12.2737+-0.3274          might be 1.0311x faster
   infer-closure-const-then-put-to-scope             22.6110+-1.3426           21.2890+-0.1778          might be 1.0621x faster
   infer-closure-const-then-reenter-no-inline   
                                                     56.5621+-2.0710           55.4860+-2.3094          might be 1.0194x faster
   infer-closure-const-then-reenter                  21.5719+-0.1601     ?     22.7464+-1.3237        ? might be 1.0544x slower
   infer-constant-global-property                     3.6265+-0.0481            3.6051+-0.0669        
   infer-constant-property                            2.7480+-0.0223     ?      2.8083+-0.1783        ? might be 1.0220x slower
   infer-one-time-closure-ten-vars                   13.0804+-1.0464     ?     13.1890+-0.9804        ?
   infer-one-time-closure-two-vars                   12.3414+-0.6584     ?     12.4534+-0.8376        ?
   infer-one-time-closure                            12.7104+-1.8395           12.1052+-0.2440          might be 1.0500x faster
   infer-one-time-deep-closure                       21.6525+-1.1454     ?     22.2657+-1.7851        ? might be 1.0283x slower
   inline-arguments-access                            4.3542+-0.0392     ?      4.3998+-0.0937        ? might be 1.0105x slower
   inline-arguments-aliased-access                    4.3552+-0.0714     ?      4.3741+-0.1158        ?
   inline-arguments-local-escape                      4.5682+-0.4465            4.4708+-0.1111          might be 1.0218x faster
   inline-get-scoped-var                              5.0644+-0.3538            4.9300+-0.2788          might be 1.0273x faster
   inlined-put-by-id-transition                      12.0170+-0.3284           11.9289+-0.6590        
   int-or-other-abs-then-get-by-val                   5.1598+-0.0310     ?      5.2091+-0.0684        ?
   int-or-other-abs-zero-then-get-by-val             18.6121+-1.3841     ?     19.2131+-0.9829        ? might be 1.0323x slower
   int-or-other-add-then-get-by-val                   4.8753+-1.3109            4.3973+-0.0662          might be 1.1087x faster
   int-or-other-add                                   5.3907+-0.0525            5.3819+-0.0249        
   int-or-other-div-then-get-by-val                   4.3431+-0.1028            4.3264+-0.2121        
   int-or-other-max-then-get-by-val                   4.4886+-0.0550            4.4574+-0.0671        
   int-or-other-min-then-get-by-val                   4.6672+-0.2261            4.5548+-0.0388          might be 1.0247x faster
   int-or-other-mod-then-get-by-val                   3.9304+-0.0604            3.8614+-0.0485          might be 1.0179x faster
   int-or-other-mul-then-get-by-val                   3.9126+-0.0453     ?      4.0972+-0.4102        ? might be 1.0472x slower
   int-or-other-neg-then-get-by-val                   4.8171+-0.0412            4.8145+-0.0191        
   int-or-other-neg-zero-then-get-by-val             17.9616+-0.8091     ?     18.2531+-1.4310        ? might be 1.0162x slower
   int-or-other-sub-then-get-by-val                   4.3786+-0.0159     ?      4.5620+-0.3581        ? might be 1.0419x slower
   int-or-other-sub                                   3.5532+-0.0265     ?      3.9251+-0.9120        ? might be 1.1047x slower
   int-overflow-local                                 4.6774+-0.3288            4.5876+-0.0704          might be 1.0196x faster
   Int16Array-alloc-long-lived                       54.8415+-0.8797     ?     55.0491+-2.6556        ?
   Int16Array-bubble-sort-with-byteLength            22.0397+-1.7591           21.4410+-1.4199          might be 1.0279x faster
   Int16Array-bubble-sort                            20.3900+-0.2872     ?     20.5175+-0.5569        ?
   Int16Array-load-int-mul                            1.5341+-0.0128            1.5291+-0.0224        
   Int16Array-to-Int32Array-set                      57.2809+-3.0517     ?     58.7389+-1.7630        ? might be 1.0255x slower
   Int32Array-alloc-large                            23.9189+-0.6588     ?     24.0688+-1.2167        ?
   Int32Array-alloc-long-lived                       66.9176+-0.5556     ?     67.7700+-2.1464        ? might be 1.0127x slower
   Int32Array-alloc                                   3.4580+-0.2992     ?      3.6418+-0.5279        ? might be 1.0531x slower
   Int32Array-Int8Array-view-alloc                    7.1153+-0.9028            6.7908+-0.2978          might be 1.0478x faster
   int52-spill                                        5.2352+-0.0502     ?      5.2972+-0.0323        ? might be 1.0118x slower
   Int8Array-alloc-long-lived                        50.2923+-1.6038     ?     50.9793+-1.8067        ? might be 1.0137x slower
   Int8Array-load-with-byteLength                     3.4315+-0.0510            3.4035+-0.0949        
   Int8Array-load                                     3.4404+-0.0440     ?      3.4611+-0.2085        ?
   integer-divide                                    10.7805+-0.1104           10.7127+-0.1273        
   integer-modulo                                     2.0945+-0.0786            2.0649+-0.0970          might be 1.0143x faster
   is-boolean-fold-tricky                             4.5251+-0.1028     ?      4.5337+-0.1016        ?
   is-boolean-fold                                    2.9061+-0.0836            2.8980+-0.0533        
   is-function-fold-tricky-internal-function   
                                                     11.9477+-0.1548     ?     13.5618+-4.2220        ? might be 1.1351x slower
   is-function-fold-tricky                            4.5546+-0.0598            4.5352+-0.0412        
   is-function-fold                                   2.8976+-0.0357     ?      2.9491+-0.1432        ? might be 1.0178x slower
   is-number-fold-tricky                              4.4792+-0.1068     ?      4.5688+-0.1994        ? might be 1.0200x slower
   is-number-fold                                     2.8730+-0.0256            2.8699+-0.0283        
   is-object-or-null-fold-functions                   2.9994+-0.1870            2.9683+-0.0969          might be 1.0105x faster
   is-object-or-null-fold-less-tricky                 4.5297+-0.0282     ?      4.5763+-0.0676        ? might be 1.0103x slower
   is-object-or-null-fold-tricky                      6.8418+-0.3978            6.7484+-0.2114          might be 1.0139x faster
   is-object-or-null-fold                             2.9986+-0.2188     ?      3.1139+-0.2513        ? might be 1.0385x slower
   is-object-or-null-trickier-function                4.6234+-0.0491     ?      4.7487+-0.1710        ? might be 1.0271x slower
   is-object-or-null-trickier-internal-function   
                                                     12.3845+-0.0704     ?     14.0079+-3.7739        ? might be 1.1311x slower
   is-object-or-null-tricky-function                  4.7622+-0.1761            4.7410+-0.2515        
   is-object-or-null-tricky-internal-function   
                                                      9.2888+-0.0459            9.2769+-0.0645        
   is-string-fold-tricky                              4.4546+-0.0784     ?      4.5093+-0.0609        ? might be 1.0123x slower
   is-string-fold                                     3.0611+-0.4330            2.9895+-0.2134          might be 1.0239x faster
   is-undefined-fold-tricky                           3.7612+-0.0505     ?      3.9293+-0.1795        ? might be 1.0447x slower
   is-undefined-fold                                  2.8927+-0.0684            2.8832+-0.1171        
   large-int-captured                                 4.6336+-0.0355     ?      4.6602+-0.1305        ?
   large-int-neg                                     16.2665+-0.1735     ?     16.2840+-0.6176        ?
   large-int                                         15.5990+-1.0239           14.8095+-0.3566          might be 1.0533x faster
   load-varargs-elimination                          22.7304+-0.3564     ?     23.1996+-1.0369        ? might be 1.0206x slower
   logical-not-weird-types                            3.3803+-0.0982            3.3623+-0.0412        
   logical-not                                        4.6757+-0.0513            4.6534+-0.0422        
   lots-of-fields                                    13.5341+-1.3572     ?     14.1935+-1.0412        ? might be 1.0487x slower
   make-indexed-storage                               3.2706+-0.4362            3.1972+-0.0690          might be 1.0230x faster
   make-rope-cse                                      4.6576+-0.4245     ?      5.0953+-0.5592        ? might be 1.0940x slower
   marsaglia-larger-ints                             36.8950+-0.6663     ?     37.4822+-2.2354        ? might be 1.0159x slower
   marsaglia-osr-entry                               23.3608+-1.3497     ?     24.0582+-1.9235        ? might be 1.0299x slower
   math-with-out-of-bounds-array-values              23.9806+-0.8705     ?     24.8044+-2.1719        ? might be 1.0344x slower
   max-boolean                                        2.7446+-0.0317            2.5962+-0.1327          might be 1.0572x faster
   method-on-number                                  17.3278+-1.0730           17.0938+-0.2285          might be 1.0137x faster
   min-boolean                                        2.7040+-0.0413            2.6005+-0.1001          might be 1.0398x faster
   minus-boolean-double                               3.2278+-0.0645     ?      3.2641+-0.0829        ? might be 1.0112x slower
   minus-boolean                                      2.4434+-0.0935            2.3873+-0.0440          might be 1.0235x faster
   misc-strict-eq                                    38.0774+-0.5121           37.3997+-0.4031          might be 1.0181x faster
   mod-boolean-double                                11.1070+-0.3055     ?     11.3152+-1.0788        ? might be 1.0187x slower
   mod-boolean                                        7.9316+-0.1393     ?      7.9428+-0.1168        ?
   mul-boolean-double                                 3.8228+-0.0689     ?      3.8649+-0.2877        ? might be 1.0110x slower
   mul-boolean                                        3.0680+-0.1703            2.9402+-0.0267          might be 1.0435x faster
   neg-boolean                                        3.2368+-0.0414     ?      3.2387+-0.0575        ?
   negative-zero-divide                               0.3750+-0.0242     ?      0.3834+-0.0236        ? might be 1.0225x slower
   negative-zero-modulo                               0.3824+-0.0253            0.3813+-0.0088        
   negative-zero-negate                               0.3744+-0.0259     ?      0.3763+-0.0463        ?
   nested-function-parsing                           50.2159+-1.1144     ?     50.8993+-2.0204        ? might be 1.0136x slower
   new-array-buffer-dead                            116.7105+-2.8559          116.1063+-3.1561        
   new-array-buffer-push                              7.5408+-0.9790            7.3518+-0.9982          might be 1.0257x faster
   new-array-dead                                    20.0121+-0.8094           19.5286+-0.4882          might be 1.0248x faster
   new-array-push                                     6.7928+-0.2278     ?      6.8539+-0.1919        ?
   no-inline-constructor                             39.9347+-1.6526           39.4386+-1.2089          might be 1.0126x faster
   number-test                                        3.0702+-0.0440     ?      3.1156+-0.1849        ? might be 1.0148x slower
   object-closure-call                                5.6977+-0.0271            5.6777+-0.0427        
   object-test                                        2.8678+-0.0523            2.8538+-0.0549        
   obvious-sink-pathology-taken                     139.0988+-3.7345     ?    139.2595+-5.1010        ?
   obvious-sink-pathology                           132.2765+-2.7040          129.2439+-2.7549          might be 1.0235x faster
   obviously-elidable-new-object                     34.9643+-1.3034     ?     34.9957+-0.9712        ?
   plus-boolean-arith                                 2.6043+-0.0980     ?      2.6653+-0.3358        ? might be 1.0234x slower
   plus-boolean-double                                3.2360+-0.0354     ?      3.2646+-0.0415        ?
   plus-boolean                                       2.4806+-0.0418     ?      2.5351+-0.1816        ? might be 1.0220x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.3256+-0.0509     ?      3.3798+-0.1394        ? might be 1.0163x slower
   poly-chain-access-different-prototypes             2.6581+-0.0185     ?      2.7107+-0.0950        ? might be 1.0198x slower
   poly-chain-access-simpler                          3.3577+-0.0591     ?      3.3604+-0.0449        ?
   poly-chain-access                                  2.6465+-0.0390     ?      2.6676+-0.1464        ?
   poly-stricteq                                     63.7962+-1.8889           63.3604+-3.5010        
   polymorphic-array-call                             1.3951+-0.0416     ?      1.4285+-0.0796        ? might be 1.0239x slower
   polymorphic-get-by-id                              3.2019+-0.0877     ?      3.3712+-0.2237        ? might be 1.0529x slower
   polymorphic-put-by-id                             31.9371+-3.8358           31.4132+-2.1433          might be 1.0167x faster
   polymorphic-structure                             14.9526+-0.1551     ?     14.9618+-0.1914        ?
   polyvariant-monomorphic-get-by-id                  8.6298+-0.1569     ?      9.4935+-1.3897        ? might be 1.1001x slower
   proto-getter-access                                9.2038+-0.1124            9.1712+-0.1894        
   put-by-id-replace-and-transition                   9.4959+-0.0533     ?      9.7665+-0.6999        ? might be 1.0285x slower
   put-by-id-slightly-polymorphic                     2.8653+-0.0274     ?      2.8741+-0.0201        ?
   put-by-id                                         12.5377+-0.9608           12.4845+-0.2169        
   put-by-val-direct                                  0.4074+-0.0380     ?      0.4111+-0.0456        ?
   put-by-val-large-index-blank-indexing-type   
                                                     12.8136+-1.1683           12.6095+-0.9656          might be 1.0162x faster
   put-by-val-machine-int                             2.8431+-0.0847            2.7750+-0.0478          might be 1.0245x faster
   rare-osr-exit-on-local                            14.7378+-0.2026     ?     15.0659+-0.3868        ? might be 1.0223x slower
   register-pressure-from-osr                        23.7920+-5.1003           21.3421+-0.2491          might be 1.1148x faster
   repeat-multi-get-by-offset                        24.9656+-1.2200           24.1028+-0.7089          might be 1.0358x faster
   setter-prototype                                  10.7817+-0.1752     ?     11.1064+-0.8337        ? might be 1.0301x slower
   setter                                             6.0565+-0.8871     ?      6.8486+-1.1342        ? might be 1.1308x slower
   simple-activation-demo                            26.0940+-1.0190           25.3783+-0.2962          might be 1.0282x faster
   simple-getter-access                              11.8910+-0.2302           11.7700+-0.1779          might be 1.0103x faster
   simple-poly-call-nested                            8.1458+-0.3263     ?      8.2704+-0.3957        ? might be 1.0153x slower
   simple-poly-call                                   1.2955+-0.0141     ?      1.3134+-0.0322        ? might be 1.0138x slower
   sin-boolean                                       24.4286+-2.0230           23.4221+-0.9140          might be 1.0430x faster
   singleton-scope                                   62.8030+-2.5979     ?     63.1274+-1.6159        ?
   sink-function                                     11.7089+-0.1244           11.6955+-0.2529        
   sink-huge-activation                              19.0329+-0.5494     ?     19.4456+-0.8617        ? might be 1.0217x slower
   sinkable-new-object-dag                           71.0866+-2.4980           68.2019+-2.0508          might be 1.0423x faster
   sinkable-new-object-taken                         51.4484+-2.4458           51.3571+-3.5181        
   sinkable-new-object                               38.0858+-1.0264     ?     38.6293+-1.1546        ? might be 1.0143x slower
   slow-array-profile-convergence                     2.9362+-0.0731            2.9126+-0.0565        
   slow-convergence                                   2.7041+-0.0484     ?      2.7048+-0.1141        ?
   slow-ternaries                                    22.8486+-2.8953           21.2612+-2.5604          might be 1.0747x faster
   sorting-benchmark                                 18.7098+-0.3078     ?     19.0012+-0.3065        ? might be 1.0156x slower
   sparse-conditional                                 1.2283+-0.0354            1.2170+-0.0312        
   splice-to-remove                                  15.3480+-0.9836           15.0212+-0.1531          might be 1.0218x faster
   string-char-code-at                               16.0640+-0.3588           15.9119+-0.1668        
   string-concat-object                               2.6526+-0.0599     ?      2.6643+-0.2980        ?
   string-concat-pair-object                          2.4516+-0.0659     ?      2.4744+-0.0948        ?
   string-concat-pair-simple                         11.7471+-1.0387     ?     11.8360+-1.1692        ?
   string-concat-simple                              12.1871+-1.1766           11.8508+-0.6097          might be 1.0284x faster
   string-cons-repeat                                 8.1770+-0.6413            8.0923+-0.7036          might be 1.0105x faster
   string-cons-tower                                  7.9288+-0.0918     ?      8.2785+-0.7234        ? might be 1.0441x slower
   string-equality                                   18.7683+-0.8236     !     22.2420+-0.8225        ! definitely 1.1851x slower
   string-get-by-val-big-char                         7.2335+-0.1534            7.1973+-0.0584        
   string-get-by-val-out-of-bounds-insane             3.7736+-0.2738            3.6500+-0.1494          might be 1.0339x faster
   string-get-by-val-out-of-bounds                    5.3210+-0.1664            5.2849+-0.1292        
   string-get-by-val                                  3.3293+-0.0623     ?      3.4613+-0.0939        ? might be 1.0396x slower
   string-hash                                        2.0920+-0.0421     ?      2.0949+-0.0723        ?
   string-long-ident-equality                        17.5789+-1.1482     ^     15.1092+-0.7200        ^ definitely 1.1635x faster
   string-out-of-bounds                              14.8328+-0.1165     ?     15.1006+-0.8133        ? might be 1.0181x slower
   string-repeat-arith                               35.2674+-3.0488     ?     35.9169+-2.9784        ? might be 1.0184x slower
   string-sub                                        71.9545+-0.9754           69.6618+-3.1504          might be 1.0329x faster
   string-test                                        2.9532+-0.0157     ?      2.9635+-0.0410        ?
   string-var-equality                               34.5922+-0.1229     ?     36.0954+-2.0963        ? might be 1.0435x slower
   structure-hoist-over-transitions                   2.6442+-0.0199     ?      2.6486+-0.0362        ?
   substring-concat-weird                            42.2306+-1.1907     ?     43.1875+-1.7354        ? might be 1.0227x slower
   substring-concat                                  45.6743+-2.8498           44.6290+-1.2507          might be 1.0234x faster
   substring                                         48.4918+-0.7181     ?     48.6324+-1.1482        ?
   switch-char-constant                               2.7871+-0.0163     ?      2.8094+-0.0204        ?
   switch-char                                        6.6656+-0.7563     ?      6.7631+-0.6714        ? might be 1.0146x slower
   switch-constant                                    8.4830+-0.4696            8.1971+-0.1585          might be 1.0349x faster
   switch-string-basic-big-var                       18.5730+-0.3710           18.2826+-0.2487          might be 1.0159x faster
   switch-string-basic-big                           14.8646+-0.2611           14.8239+-0.1194        
   switch-string-basic-var                           15.6848+-1.3306           15.1412+-0.2281          might be 1.0359x faster
   switch-string-basic                               13.9664+-0.1198     ?     14.2203+-0.6999        ? might be 1.0182x slower
   switch-string-big-length-tower-var                20.2944+-0.1808     ?     21.3515+-1.5724        ? might be 1.0521x slower
   switch-string-length-tower-var                    15.9220+-1.4140           15.3934+-0.2871          might be 1.0343x faster
   switch-string-length-tower                        13.2328+-0.0799           13.2126+-0.2027        
   switch-string-short                               13.5974+-1.1835           13.0909+-0.1939          might be 1.0387x faster
   switch                                            12.6652+-1.0394           12.2121+-0.1400          might be 1.0371x faster
   tear-off-arguments-simple                          3.3968+-0.0970            3.3759+-0.0793        
   tear-off-arguments                                 4.5225+-0.0491            4.4768+-0.0442          might be 1.0102x faster
   temporal-structure                                13.0960+-0.2724           13.0232+-0.1938        
   to-int32-boolean                                  14.1315+-0.2003     ?     14.3189+-0.7914        ? might be 1.0133x slower
   try-catch-get-by-val-cloned-arguments             15.5108+-0.4149     ?     16.9777+-1.7747        ? might be 1.0946x slower
   try-catch-get-by-val-direct-arguments              7.0088+-0.0842     ?      7.6011+-1.1353        ? might be 1.0845x slower
   try-catch-get-by-val-scoped-arguments              8.3146+-0.3858     ?      9.2380+-0.8045        ? might be 1.1111x slower
   typed-array-get-set-by-val-profiling              28.6257+-1.3600           27.9119+-0.4480          might be 1.0256x faster
   undefined-property-access                        382.6589+-4.9183     ?    386.3757+-9.3250        ?
   undefined-test                                     3.1135+-0.1345            3.1000+-0.0467        
   unprofiled-licm                                   22.9883+-0.7274     ?     23.6173+-1.3773        ? might be 1.0274x slower
   varargs-call                                      14.6163+-0.0738     ?     15.4217+-1.0139        ? might be 1.0551x slower
   varargs-construct-inline                          27.5913+-0.8025     ?     27.9218+-0.7479        ? might be 1.0120x slower
   varargs-construct                                 22.5176+-0.1697     ?     24.2928+-1.8387        ? might be 1.0788x slower
   varargs-inline                                     9.6087+-0.1125     ?      9.6720+-0.1575        ?
   varargs-strict-mode                               10.6362+-1.2375           10.1512+-0.3067          might be 1.0478x faster
   varargs                                           11.3409+-3.2275           10.0993+-0.1301          might be 1.1229x faster
   weird-inlining-const-prop                          3.4196+-0.3123            3.3159+-0.1142          might be 1.0313x faster

   &lt;geometric&gt;                                        9.1552+-0.0421            9.1535+-0.0213          might be 1.0002x faster

                                                        TipOfTree                   FixSTE                                      
AsmBench:
   bigfib.cpp                                       505.1322+-5.7694          502.1876+-1.6108        
   cray.c                                           432.3682+-3.3747     ?    433.1559+-5.5342        ?
   dry.c                                            491.3257+-2.3108          488.3864+-8.0730        
   FloatMM.c                                        726.2710+-3.0817     ?    734.4530+-17.0423       ? might be 1.0113x slower
   gcc-loops.cpp                                   4126.6291+-17.6764    ?   4230.4295+-250.1178      ? might be 1.0252x slower
   n-body.c                                         980.5491+-16.1848    ?    985.1325+-11.1834       ?
   Quicksort.c                                      424.9220+-6.1545     ?    425.5615+-15.7177       ?
   stepanov_container.cpp                          3662.6952+-89.7606    ?   3778.2427+-378.2175      ? might be 1.0315x slower
   Towers.c                                         258.7342+-3.5181     ?    264.3552+-15.0237       ? might be 1.0217x slower

   &lt;geometric&gt;                                      795.0468+-3.2480     ?    802.0522+-9.5987        ? might be 1.0088x slower

                                                        TipOfTree                   FixSTE                                      
CompressionBench:
   huffman                                           62.8671+-2.6257           62.2584+-3.1723        
   arithmetic-simple                                345.9539+-6.0398          341.9422+-4.1743          might be 1.0117x faster
   arithmetic-precise                               283.5095+-7.2314          279.5575+-2.4010          might be 1.0141x faster
   arithmetic-complex-precise                       291.7014+-31.8006         279.2008+-3.5982          might be 1.0448x faster
   arithmetic-precise-order-0                       363.5805+-13.3993    ?    371.3999+-28.9261       ? might be 1.0215x slower
   arithmetic-precise-order-1                       356.3984+-52.7854         338.3228+-2.9567          might be 1.0534x faster
   arithmetic-precise-order-2                       382.9665+-8.9269          380.4092+-4.4952        
   arithmetic-simple-order-1                        410.3756+-14.1061         406.3551+-3.4338        
   arithmetic-simple-order-2                        459.4163+-3.2388          453.5747+-5.6845          might be 1.0129x faster
   lz-string                                        308.0000+-2.9654     ?    316.2663+-8.4717        ? might be 1.0268x slower

   &lt;geometric&gt;                                      295.7539+-5.7465          292.6945+-3.0779          might be 1.0105x faster

                                                        TipOfTree                   FixSTE                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   60.4083+-0.2145     ?     60.4297+-0.2839        ? might be 1.0004x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1111908</commentid>
    <comment_count>5</comment_count>
      <attachid>257429</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-23 21:01:12 -0700</bug_when>
    <thetext>Created attachment 257429
better changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112009</commentid>
    <comment_count>6</comment_count>
      <attachid>257429</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-07-24 10:44:42 -0700</bug_when>
    <thetext>Comment on attachment 257429
better changelog

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGSafeToExecute.h:345
&gt; +        // We can&apos;t always guarantee that the MultiGetByOffset is safe to execute if it
&gt; +        // contains loads from prototypes. We know that it won&apos;t load from those prototypes if
&gt; +        // we watch the mutability of the properties being loaded. So, here we try to

Will garbage collecting a prototype fire its watchpoints?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112015</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-24 11:08:35 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 257429 [details]
&gt; better changelog
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257429&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSafeToExecute.h:345
&gt; &gt; +        // We can&apos;t always guarantee that the MultiGetByOffset is safe to execute if it
&gt; &gt; +        // contains loads from prototypes. We know that it won&apos;t load from those prototypes if
&gt; &gt; +        // we watch the mutability of the properties being loaded. So, here we try to
&gt; 
&gt; Will garbage collecting a prototype fire its watchpoints?

No, but a prerequisite to the DFG seeing a prototype is that it gets registered as a weak value.  So, GC will kill the CodeBlock before anything interesting happens with watchpoints when the prototype dies.  Currently the weak registration of prototypes used by MultiGetByOffset happens like this in ByteCodeParser:

        // 1) Emit prototype structure checks for all chains. This could sort of maybe not be
        //    optimal, if there is some rarely executed case in the chain that requires a lot
        //    of checks and those checks are not watchpointable.
        for (unsigned variantIndex = getByIdStatus.numVariants(); variantIndex--;)
            emitChecks(getByIdStatus[variantIndex].constantChecks());

The prototype that we load from will be one of the things we check.  To emit the check, we emit a JSConstant, which we create using weakJSConstant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112026</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-07-24 11:25:17 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/187347</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257425</attachid>
            <date>2015-07-23 20:24:40 -0700</date>
            <delta_ts>2015-07-23 21:01:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7542</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3Mjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU5IEBA
CisyMDE1LTA3LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHOjpzYWZlVG9FeGVjdXRlKCkgaXMgd3JvbmcgZm9yIE11bHRpR2V0QnlPZmZzZXQsIGRvZXNu
J3QgY29uc2lkZXIgdGhlIHN0cnVjdHVyZXMgb2YgdGhlIHByb3RvdHlwZXMgdGhhdCBnZXQgbG9h
ZGVkIGZyb20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NzI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBmaXhlcyBhIG5hc3R5IC0gYnV0IGN1cnJlbnRseSBiZW5pZ24gLSBidWcg
aW4gREZHOjpzYWZlVG9FeGVjdXRlKCkuIFRoYXQgZnVuY3Rpb24KKyAgICAgICAgd2lsbCB0ZWxs
IHlvdSBpZiBob2lzdGluZyBhIG5vZGUgdG8gc29tZSBwb2ludCBpcyBzYWZlIGluIHRoZSBzZW5z
ZSB0aGF0IHRoZSBub2RlIHdpbGwKKyAgICAgICAgbm90IGNyYXNoIHRoZSBWTSBpZiBpdCBleGVj
dXRlcyBhdCBzb21lIHBvaW50LiBBIG5vZGUgbWF5IGJlIHVuc2FmZSB0byBleGVjdXRlIGlmIHdl
CisgICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IGF0IHRoYXQgcG9pbnQsIHRoZSBtZW1vcnkgaXQg
aXMgbG9hZGluZyBpcyBub3QgZ2FyYmFnZS4gVGhpcyBpcyBhCisgICAgICAgIG5lY2Vzc2FyaWx5
IGxvb3NlIG5vdGlvbiAtIGZvciBleGFtcGxlIGl0J3MgT0sgdG8gaG9pc3QgYSBsb2FkIGlmIHdl
IGhhdmVuJ3QgcHJvdmVkCisgICAgICAgIHRoYXQgdGhlIGxvYWQgbWFrZXMgc2VtYW50aWMgc2Vu
c2UgYXQgdGhhdCBwb2ludCwgc2luY2UgYW55d2F5IHRoZSBwbGFjZSB3aGVyZSB0aGUgbm9kZQor
ICAgICAgICBkaWQgZ2V0IHVzZWQgd2lsbCBzdGlsbCBiZSBndWFyZGVkIGJ5IGFueSBzdWNoIHNl
bWFudGljIGNoZWNrcy4gQnV0IGJlY2F1c2Ugd2UgbWF5IGFsc28KKyAgICAgICAgaG9pc3QgdXNl
cyBvZiB0aGUgbG9hZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBkb2Vzbid0IHByb2R1
Y2UgYSBnYXJiYWdlIHZhbHVlLgorICAgICAgICBBbHNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0
IHRoZSBsb2FkIHdvbid0IHRyYXAuCisgICAgICAgIAorICAgICAgICBUaGlzIHZlcmlmaWNhdGlv
biBpc24ndCBwZXJmb3JtZWQgZm9yIHRoZSBsb2FkcyBmcm9tIHByb3RvdHlwZXMgaW5zaWRlCisg
ICAgICAgIE11bHRpR2V0QnlPZmZzZXQuIERGRzo6Qnl0ZUNvZGVQYXJzZXIgd2lsbCBndWFyZCBN
dWx0aUdldEJ5T2Zmc2V0IHdpdGggQ2hlY2tTdHJ1Y3R1cmUncworICAgICAgICBvbiB0aGUgcHJv
dG90eXBlcy4gU28sIGh5cG90aGV0aWNhbGx5LCB5b3UgbWlnaHQgZW5kIHVwIGhvaXN0aW5nIGEg
TXVsdGlHZXRCeU9mZnNldAorICAgICAgICBhYm92ZSB0aG9zZSBzdHJ1Y3R1cmUgY2hlY2tzLCB3
aGljaCB3b3VsZCBtZWFuIHRoYXQgd2UgbWlnaHQgbG9hZCBhIHZhbHVlIGZyb20gYSBtZW1vcnkK
KyAgICAgICAgbG9jYXRpb24gd2l0aG91dCBrbm93aW5nIHRoYXQgdGhlIGxvY2F0aW9uIGlzIHZh
bGlkLgorICAgICAgICAKKyAgICAgICAgVGhpcyBuZXZlciBoYXBwZW5zIGluIHByYWN0aWNlLiBU
aG9zZSBzdHJ1Y3R1cmUgY2hlY2tzIGFyZSBtb3N0IGhvaXN0YWJsZSB0aGF0IHRoZQorICAgICAg
ICBNdWx0aUdldEJ5T2Zmc2V0LCBzaW5jZSB0aGV5IHJlYWQgYSBzdHJpY3Qgc3Vic2V0IG9mIHRo
ZSBNdWx0aUdldEJ5T2Zmc2V0J3MgYWJzdHJhY3QKKyAgICAgICAgaGVhcCByZWFkcy4gQWxzbywg
d2UgaG9pc3QgaW4gcHJvZ3JhbSBvcmRlci4gU28sIHRob3NlIENoZWNrU3RydWN0dXJlJ3Mgd2ls
bCBhbHdheXMgYmUKKyAgICAgICAgaG9pc3RlZCBiZWZvcmUgdGhlIE11bHRpR2V0QnlPZmZzZXQg
Z2V0cyBob2lzdGVkLgorICAgICAgICAKKyAgICAgICAgQnV0IHdlIHNob3VsZCBmaXggdGhpcyBh
bnl3YXkuIERGRzo6c2FmZVRvRXhlY3V0ZSgpIGhhcyBhIGNsZWFyIGRlZmluaXRpb24gb2Ygd2hh
dCBhCisgICAgICAgICJ0cnVlIiByZXR1cm4gbWVhbnMgZm9yIElSIHRyYW5zZm9ybWF0aW9ucywg
YW5kIGl0IGZhaWxzIGluIHNhdGlzZnlpbmcgdGhhdCBkZWZpbml0aW9uCisgICAgICAgIGZvciBN
dWx0aUdldEJ5T2Zmc2V0LgorICAgICAgICAKKyAgICAgICAgVGhlcmUgYXJlIHZhcmlvdXMgYXBw
cm9hY2hlcyB3ZSBjYW4gdXNlIGZvciBtYWtpbmcgdGhpcyBzYWZlLiBJIGNvbnNpZGVyZWQgdHdv
OgorICAgICAgICAKKyAgICAgICAgMSkgSGF2ZSBNdWx0aUdldEJ5T2Zmc2V0IHJlZmVyIHRvIHRo
ZSBwcm90b3R5cGVzIGl0IGlzIGxvYWRpbmcgZnJvbSBpbiBJUiwgc28gdGhhdCB3ZQorICAgICAg
ICAgICBjYW4gY2hlY2sgaWYgaXQncyBzYWZlIHRvIGxvYWQgZnJvbSB0aGVtLgorICAgICAgICAK
KyAgICAgICAgMikgVHVybiBvZmYgTXVsdGlHZXRCeU9mZnNldCBob2lzdGluZyB3aGVuIGl0IHdp
bGwgZW1pdCBsb2FkcyBmcm9tIHByb3RvdHlwZXMsIGFuZCB0aGUKKyAgICAgICAgICAgcHJvdG90
eXBlIHN0cnVjdHVyZSBpc24ndCBiZWluZyB3YXRjaGVkLgorICAgICAgICAKKyAgICAgICAgSSBl
bmRlZCB1cCB1c2luZyAoMiksIGJlY2F1c2UgaXQgd2lsbCBiZSB0aGUgbW9zdCBuYXR1cmFsIHNv
bHV0aW9uIG9uY2UgSSBmaW5pc2gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NjkyOS4gQWxyZWFkeSBub3csIGl0J3Mgc29tZXdoYXQgbW9yZSBuYXR1
cmFsCisgICAgICAgIHRoYW4gKDEpIHNpbmNlIHRoYXQgcmVxdWlyZXMgbW9yZSBleHRlbnNpdmUg
SVIgY2hhbmdlcy4gQWxzbywgKDIpIHdpbGwgZ2l2ZSB1cyB3aGF0IHdlCisgICAgICAgIHdhbnQg
aW4gKm1vc3QqIGNhc2VzOiB3ZSB3aWxsIHVzdWFsbHkgd2F0Y2ggdGhlIHByb3RvdHlwZSBzdHJ1
Y3R1cmUsIGFuZCB3ZSB3aWxsCisgICAgICAgIHVzdWFsbHkgY29uc3RhbnQtZm9sZCBsb2FkcyBm
cm9tIHByb3RvdHlwZXMuIEJvdGggb2YgdGhlc2UgdXN1YWxseS10cnVlIHRoaW5ncyB3b3VsZAor
ICAgICAgICBoYXZlIHRvIGJlY29tZSBmYWxzZSBmb3IgTXVsdGlHZXRCeU9mZnNldCBob2lzdGlu
ZyB0byBiZSBkaXNhYmxlZCBieSB0aGlzIGNoYW5nZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
Y2hhbmdlIGFsc28gYWRkcyBteSBhdHRlbXB0IGF0IGEgdGVzdCwgdGhvdWdoIGl0J3Mgbm90IHJl
YWxseSBhIHRlc3Qgb2YgdGhpcyBidWcuCisgICAgICAgIFRoaXMgYnVnIGlzIGN1cnJlbnRseSBi
ZW5pZ24uIEJ1dCwgdGhlIHRlc3QgZG9lcyBhdCBsZWFzdCB0cmlnZ2VyIHRoZSBsb2dpYyB0byBy
dW4sCisgICAgICAgIHdoaWNoIGlzIGJldHRlciB0aGFuIG5vdGhpbmcuCisKKyAgICAgICAgKiBk
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUp
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9tdWx0aS1nZXQtYnktb2Zmc2V0LWhvaXN0LWFyb3Vu
ZC1zdHJ1Y3R1cmUtY2hlY2suanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwogMjAxNS0wNy0y
MyAgU3Vrb2xzYWsgU2Frc2h1d29uZyAgPHN1a29sc2FrQGdtYWlsLmNvbT4KIAogICAgICAgICBJ
bXBsZW1lbnQgV2ViQXNzZW1ibHkgbW9kdWxlcwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4NzI4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTUsNyArMjU1LDYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAog
ICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6
CiAgICAgY2FzZSBDaGVjazoKLSAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBN
dWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2UgVmFsdWVSZXA6CiAgICAgY2FzZSBEb3VibGVSZXA6
CkBAIC0zMzMsNiArMzMyLDQ3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlw
ZSYgc3QKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIE11
bHRpR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgYWx3YXlzIGd1YXJhbnRlZSB0
aGF0IHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGlzIHNhZmUgdG8gZXhlY3V0ZSBpZiBpdAorICAgICAg
ICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHByb3RvdHlwZXMuIFdlIGtub3cgdGhhdCBpdCB3b24n
dCBsb2FkIGZyb20gdGhvc2UgcHJvdG90eXBlcyBpZgorICAgICAgICAvLyB3ZSB3YXRjaCB0aGUg
bXV0YWJpbGl0eSBvZiB0aGUgcHJvcGVydGllcyBiZWluZyBsb2FkZWQuIFNvLCBoZXJlIHdlIHRy
eSB0bworICAgICAgICAvLyBjb25zdGFudC1mb2xkIHByb3RvdHlwZSBsb2FkcywgYW5kIGlmIHRo
YXQgZmFpbHMsIHdlIGNsYWltIHRoYXQgd2UgY2Fubm90IGhvaXN0LiBXZQorICAgICAgICAvLyBh
bHNvIGtub3cgdGhhdCBhIGxvYWQgaXMgc2FmZSB0byBleGVjdXRlIGlmIHdlIGFyZSB3YXRjaGlu
ZyB0aGUgcHJvdG90eXBlJ3MKKyAgICAgICAgLy8gc3RydWN0dXJlLgorICAgICAgICBmb3IgKGNv
bnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50IDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KS52YXJpYW50cykgeworICAgICAgICAgICAgaWYgKCF2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkg
eworICAgICAgICAgICAgICAgIC8vIEl0J3Mgbm90IGEgcHJvdG90eXBlIGxvYWQuCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIEpTVmFsdWUgYmFzZSA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOworICAgICAgICAgICAg
RnJvemVuVmFsdWUqIGZyb3plbiA9IGdyYXBoLmZyZWV6ZShiYXNlKTsKKyAgICAgICAgICAgIGlm
IChmcm96ZW4tPnN0cnVjdHVyZSgpLT5kZmdTaG91bGRXYXRjaCgpCisgICAgICAgICAgICAgICAg
JiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkg
eworICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNh
ZmUgdG8gbG9hZCBmcm9tIHRoaXMuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQg
PSBncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgICAgICAgICAgICAgIHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQo
KSk7CisgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CisgICAgICAgICAgICAgICAg
Ly8gQ291bGRuJ3QgY29uc3RhbnQtZm9sZCBhIHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdl
IHNob3VsZG4ndCBob2lzdAorICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBv
ZiB0aGUgbG9hZCBkZXBlbmRzIG9uIHN0cnVjdHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwK
KyAgICAgICAgICAgICAgICAvLyBhbmQgd2UncmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhl
cmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIHdpbGwgZWl0aGVyOgorICAgICAg
ICAgICAgLy8gLSBOb3QgbG9hZCBmcm9tIHRoZSBwcm90b3R5cGUgYmVjYXVzZSBjb25zdGFudCBm
b2xkaW5nIHdpbGwgc3VjY2VlZCBpbiB0aGUKKyAgICAgICAgICAgIC8vICAgYmFja2VuZCwgb3IK
KyAgICAgICAgICAgIC8vIC0gRW1pdCBpbnZhbGlkIGNvZGUgdGhhdCBmYWlscyB3YXRjaHBvaW50
IGNoZWNrcy4gVGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlCisgICAgICAgICAgICAvLyAgIHByb3Bl
cnR5IGJlY29tZXMgbXV0YWJsZSBhZnRlciB0aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJlYWR5IHNl
dCB0aGUgd2F0Y2hwb2ludAorICAgICAgICAgICAgLy8gICBhYm92ZS4gVGhpcyBjYXNlIGlzIE9L
IHNpbmNlIHRoZSBjb2RlIHdpbGwgZmFpbCB3YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2ZXIKKyAg
ICAgICAgICAgIC8vICAgZ2V0IGluc3RhbGxlZC4KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1nZXQtYnktb2Zmc2V0LWhvaXN0LWFy
b3VuZC1zdHJ1Y3R1cmUtY2hlY2suanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1nZXQtYnktb2Zmc2V0LWhvaXN0LWFyb3VuZC1zdHJ1Y3R1
cmUtY2hlY2suanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQtaG9pc3QtYXJvdW5kLXN0cnVjdHVyZS1jaGVjay5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACitmdW5jdGlvbiBmb28obywgc3RhcnQp
IHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytp
KQorICAgICAgICByZXN1bHQgKz0gby5mOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5s
aW5lKGZvbyk7CisKK3ZhciBvID0ge307CitvLmYgPSA0MjsKK3ZhciBmID0ge307CitmLmYgPSA0
MzsKK2YuZyA9IDQ0OworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgby5m
ID0gaTsKK28uZiA9IDQyOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAg
ICB2YXIgcDsKKyAgICBpZiAoaSAmIDEpCisgICAgICAgIHAgPSBvOworICAgIGVsc2UKKyAgICAg
ICAgcCA9IE9iamVjdC5jcmVhdGUobyk7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhwKTsKKyAgICBp
ZiAocmVzdWx0ICE9IDEwMCAqIDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257429</attachid>
            <date>2015-07-23 21:01:12 -0700</date>
            <delta_ts>2015-07-24 10:44:42 -0700</delta_ts>
            <desc>better changelog</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>9054</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg3Mjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDE1LTA3LTIzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHOjpzYWZlVG9FeGVjdXRlKCkgaXMgd3JvbmcgZm9yIE11bHRpR2V0QnlPZmZzZXQsIGRvZXNu
J3QgY29uc2lkZXIgdGhlIHN0cnVjdHVyZXMgb2YgdGhlIHByb3RvdHlwZXMgdGhhdCBnZXQgbG9h
ZGVkIGZyb20KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NzI1MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgVGhpcyBmaXhlcyBhIG5hc3R5IC0gYnV0IGN1cnJlbnRseSBiZW5pZ24gLSBidWcg
aW4gREZHOjpzYWZlVG9FeGVjdXRlKCkuIFRoYXQgZnVuY3Rpb24KKyAgICAgICAgd2lsbCB0ZWxs
IHlvdSBpZiBob2lzdGluZyBhIG5vZGUgdG8gc29tZSBwb2ludCBpcyBzYWZlIGluIHRoZSBzZW5z
ZSB0aGF0IHRoZSBub2RlIHdpbGwKKyAgICAgICAgbm90IGNyYXNoIHRoZSBWTSBpZiBpdCBleGVj
dXRlcyBhdCB0aGF0IHBvaW50LiBBIG5vZGUgbWF5IGJlIHVuc2FmZSB0byBleGVjdXRlIGlmIHdl
CisgICAgICAgIGNhbm5vdCBwcm92ZSB0aGF0IGF0IHRoYXQgcG9pbnQsIHRoZSBtZW1vcnkgaXQg
aXMgbG9hZGluZyBpcyBub3QgZ2FyYmFnZS4gVGhpcyBpcyBhCisgICAgICAgIG5lY2Vzc2FyaWx5
IGxvb3NlIG5vdGlvbiAtIGZvciBleGFtcGxlIGl0J3MgT0sgdG8gaG9pc3QgYSBsb2FkIGlmIHdl
IGhhdmVuJ3QgcHJvdmVkCisgICAgICAgIHRoYXQgdGhlIGxvYWQgbWFrZXMgc2VtYW50aWMgc2Vu
c2UgYXQgdGhhdCBwb2ludCwgc2luY2UgYW55d2F5IHRoZSBwbGFjZSB3aGVyZSB0aGUgbm9kZQor
ICAgICAgICBkaWQgZ2V0IHVzZWQgd2lsbCBzdGlsbCBiZSBndWFyZGVkIGJ5IGFueSBzdWNoIHNl
bWFudGljIGNoZWNrcy4gQnV0IGJlY2F1c2Ugd2UgbWF5IGFsc28KKyAgICAgICAgaG9pc3QgdXNl
cyBvZiB0aGUgbG9hZCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBpdCBkb2Vzbid0IHByb2R1
Y2UgYSBnYXJiYWdlIHZhbHVlLgorICAgICAgICBBbHNvLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0
IHRoZSBsb2FkIHdvbid0IHRyYXAuIEhlbmNlIHNhZmVUb0V4ZWN1dGUoKSByZXR1cm5zIHRydWUK
KyAgICAgICAgYW55dGltZSB3ZSBjYW4gYmUgc3VyZSB0aGF0IGEgbm9kZSB3aWxsIG5vdCBwcm9k
dWNlIGEgZ2FyYmFnZSByZXN1bHQgKGkuZS4gYSBtYWxmb3JtZWQKKyAgICAgICAgSlNWYWx1ZSBv
ciBvYmplY3QgcG9pbnRlcikgYW5kIHdpbGwgbm90IHRyYXAgd2hlbiBleGVjdXRlZCBhdCB0aGUg
cG9pbnQgaW4gcXVlc3Rpb24uCisgICAgICAgIAorICAgICAgICBUaGUgYnVnIGlzIHRoYXQgdGhp
cyB2ZXJpZmljYXRpb24gaXNuJ3QgcGVyZm9ybWVkIGZvciB0aGUgbG9hZHMgZnJvbSBwcm90b3R5
cGVzIGluc2lkZQorICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0LiBERkc6OkJ5dGVDb2RlUGFyc2Vy
IHdpbGwgZ3VhcmQgTXVsdGlHZXRCeU9mZnNldCB3aXRoIENoZWNrU3RydWN0dXJlJ3MKKyAgICAg
ICAgb24gdGhlIHByb3RvdHlwZXMuIFNvLCBoeXBvdGhldGljYWxseSwgeW91IG1pZ2h0IGVuZCB1
cCBob2lzdGluZyBhIE11bHRpR2V0QnlPZmZzZXQKKyAgICAgICAgYWJvdmUgdGhvc2Ugc3RydWN0
dXJlIGNoZWNrcywgd2hpY2ggd291bGQgbWVhbiB0aGF0IHdlIG1pZ2h0IGxvYWQgYSB2YWx1ZSBm
cm9tIGEgbWVtb3J5CisgICAgICAgIGxvY2F0aW9uIHdpdGhvdXQga25vd2luZyB0aGF0IHRoZSBs
b2NhdGlvbiBpcyB2YWxpZC4gSXQgbWlnaHQgdGhlbiByZXR1cm4gdGhlIHZhbHVlCisgICAgICAg
IGxvYWRlZC4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbmV2ZXIgaGFwcGVucyBpbiBwcmFjdGlj
ZS4gVGhvc2Ugc3RydWN0dXJlIGNoZWNrcyBhcmUgbW9yZSBob2lzdGFibGUgdGhhdCB0aGUKKyAg
ICAgICAgTXVsdGlHZXRCeU9mZnNldCwgc2luY2UgdGhleSByZWFkIGEgc3RyaWN0IHN1YnNldCBv
ZiB0aGUgTXVsdGlHZXRCeU9mZnNldCdzIGFic3RyYWN0CisgICAgICAgIGhlYXAgcmVhZHMuIEFs
c28sIHdlIGhvaXN0IGluIHByb2dyYW0gb3JkZXIuIFNvLCB0aG9zZSBDaGVja1N0cnVjdHVyZSdz
IHdpbGwgYWx3YXlzIGJlCisgICAgICAgIGhvaXN0ZWQgYmVmb3JlIHRoZSBNdWx0aUdldEJ5T2Zm
c2V0IGdldHMgaG9pc3RlZC4KKyAgICAgICAgCisgICAgICAgIEJ1dCB3ZSBzaG91bGQgZml4IHRo
aXMgYW55d2F5LiBERkc6OnNhZmVUb0V4ZWN1dGUoKSBoYXMgYSBjbGVhciBkZWZpbml0aW9uIG9m
IHdoYXQgYQorICAgICAgICAidHJ1ZSIgcmV0dXJuIG1lYW5zIGZvciBJUiB0cmFuc2Zvcm1hdGlv
bnMsIGFuZCBpdCBmYWlscyBpbiBzYXRpc2Z5aW5nIHRoYXQgZGVmaW5pdGlvbgorICAgICAgICBm
b3IgTXVsdGlHZXRCeU9mZnNldC4KKyAgICAgICAgCisgICAgICAgIFRoZXJlIGFyZSB2YXJpb3Vz
IGFwcHJvYWNoZXMgd2UgY2FuIHVzZSBmb3IgbWFraW5nIHRoaXMgc2FmZS4gSSBjb25zaWRlcmVk
IHR3bzoKKyAgICAgICAgCisgICAgICAgIDEpIEhhdmUgTXVsdGlHZXRCeU9mZnNldCByZWZlciB0
byB0aGUgcHJvdG90eXBlcyBpdCBpcyBsb2FkaW5nIGZyb20gaW4gSVIsIHNvIHRoYXQgd2UKKyAg
ICAgICAgICAgY2FuIGNoZWNrIGlmIGl0J3Mgc2FmZSB0byBsb2FkIGZyb20gdGhlbS4KKyAgICAg
ICAgCisgICAgICAgIDIpIFR1cm4gb2ZmIE11bHRpR2V0QnlPZmZzZXQgaG9pc3Rpbmcgd2hlbiBp
dCB3aWxsIGVtaXQgbG9hZHMgZnJvbSBwcm90b3R5cGVzLCBhbmQgdGhlCisgICAgICAgICAgIHBy
b3RvdHlwZSBzdHJ1Y3R1cmUgaXNuJ3QgYmVpbmcgd2F0Y2hlZC4KKyAgICAgICAgCisgICAgICAg
IEkgZW5kZWQgdXAgdXNpbmcgKDIpLCBiZWNhdXNlIGl0IHdpbGwgYmUgdGhlIG1vc3QgbmF0dXJh
bCBzb2x1dGlvbiBvbmNlIEkgZmluaXNoCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDY5MjkuIEFscmVhZHkgbm93LCBpdCdzIHNvbWV3aGF0IG1vcmUg
bmF0dXJhbAorICAgICAgICB0aGFuICgxKSBzaW5jZSB0aGF0IHJlcXVpcmVzIG1vcmUgZXh0ZW5z
aXZlIElSIGNoYW5nZXMuIEFsc28sICgyKSB3aWxsIGdpdmUgdXMgd2hhdCB3ZQorICAgICAgICB3
YW50IGluICptb3N0KiBjYXNlczogd2Ugd2lsbCB1c3VhbGx5IHdhdGNoIHRoZSBwcm90b3R5cGUg
c3RydWN0dXJlLCBhbmQgd2Ugd2lsbAorICAgICAgICB1c3VhbGx5IGNvbnN0YW50LWZvbGQgbG9h
ZHMgZnJvbSBwcm90b3R5cGVzLiBCb3RoIG9mIHRoZXNlIHVzdWFsbHktdHJ1ZSB0aGluZ3Mgd291
bGQKKyAgICAgICAgaGF2ZSB0byBiZWNvbWUgZmFsc2UgZm9yIE11bHRpR2V0QnlPZmZzZXQgaG9p
c3RpbmcgdG8gYmUgZGlzYWJsZWQgYnkgdGhpcyBjaGFuZ2UuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNoYW5nZSBhbHNvIGFkZHMgbXkgYXR0ZW1wdCBhdCBhIHRlc3QsIHRob3VnaCBpdCdzIG5v
dCByZWFsbHkgYSB0ZXN0IG9mIHRoaXMgYnVnLgorICAgICAgICBUaGlzIGJ1ZyBpcyBjdXJyZW50
bHkgYmVuaWduLiBCdXQsIHRoZSB0ZXN0IGRvZXMgYXQgbGVhc3QgdHJpZ2dlciB0aGUgbG9naWMg
dG8gcnVuLAorICAgICAgICB3aGljaCBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nLgorCisgICAgICAg
ICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVj
dXRlKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbXVsdGktZ2V0LWJ5LW9mZnNldC1ob2lzdC1h
cm91bmQtc3RydWN0dXJlLWNoZWNrLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisKIDIwMTUt
MDctMjMgIFN1a29sc2FrIFNha3NodXdvbmcgIDxzdWtvbHNha0BnbWFpbC5jb20+CiAKICAgICAg
ICAgSW1wbGVtZW50IFdlYkFzc2VtYmx5IG1vZHVsZXMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODcyODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpA
QCAtOTksOCArOTksMTUgQEAgcHJpdmF0ZToKIAogLy8gRGV0ZXJtaW5lcyBpZiBpdCdzIHNhZmUg
dG8gZXhlY3V0ZSBhIG5vZGUgd2l0aGluIHRoZSBnaXZlbiBhYnN0cmFjdCBzdGF0ZS4gVGhpcyBt
YXkKIC8vIHJldHVybiBmYWxzZSBjb25zZXJ2YXRpdmVseS4gSWYgaXQgcmV0dXJucyB0cnVlLCB0
aGVuIHlvdSBjYW4gaG9pc3QgdGhlIGdpdmVuIG5vZGUKLS8vIHVwIHRvIHRoZSBnaXZlbiBwb2lu
dCBhbmQgZXhwZWN0IHRoYXQgaXQgd2lsbCBub3QgY3Jhc2guIFRoaXMgZG9lc24ndCBndWFyYW50
ZWUgdGhhdAotLy8gdGhlIG5vZGUgd2lsbCBwcm9kdWNlIHRoZSByZXN1bHQgeW91IHdhbnRlZCBv
dGhlciB0aGFuIG5vdCBjcmFzaGluZy4KKy8vIHVwIHRvIHRoZSBnaXZlbiBwb2ludCBhbmQgZXhw
ZWN0IHRoYXQgaXQgd2lsbCBub3QgY3Jhc2guIEl0IGFsc28gZ3VhcmFudGVlcyB0aGF0IHRoZQor
Ly8gbm9kZSB3aWxsIG5vdCBwcm9kdWNlIGEgbWFsZm9ybWVkIEpTVmFsdWUgb3Igb2JqZWN0IHBv
aW50ZXIgd2hlbiBleGVjdXRlZCBpbiB0aGUKKy8vIGdpdmVuIHN0YXRlLiBCdXQgdGhpcyBkb2Vz
bid0IGd1YXJhbnRlZSB0aGF0IHRoZSBub2RlIHdpbGwgcHJvZHVjZSB0aGUgcmVzdWx0IHlvdQor
Ly8gd2FudGVkLiBGb3IgZXhhbXBsZSwgeW91IG1heSBoYXZlIGEgR2V0QnlPZmZzZXQgZnJvbSBh
IHByb3RvdHlwZSB0aGF0IG9ubHkgbWFrZXMKKy8vIHNlbWFudGljIHNlbnNlIGlmIHlvdSd2ZSBh
bHNvIGNoZWNrZWQgdGhhdCBzb21lIG5lYXJlciBwcm90b3R5cGUgZG9lc24ndCBhbHNvIGhhdmUK
Ky8vIGEgcHJvcGVydHkgb2YgdGhlIHNhbWUgbmFtZS4gVGhpcyBjb3VsZCBzdGlsbCByZXR1cm4g
dHJ1ZSBldmVuIGlmIHRoYXQgY2hlY2sgaGFkbid0CisvLyBiZWVuIHBlcmZvcm1lZCBpbiB0aGUg
Z2l2ZW4gYWJzdHJhY3Qgc3RhdGUuIFRoYXQncyBmaW5lIHRob3VnaDogdGhlIGxvYWQgY2FuIHN0
aWxsCisvLyBzYWZlbHkgZXhlY3V0ZSBiZWZvcmUgdGhhdCBjaGVjaywgc28gbG9uZyBhcyB0aGF0
IGNoZWNrIGNvbnRpbnVlcyB0byBndWFyZCBhbnkKKy8vIHVzZXItb2JzZXJ2YWJsZSB0aGluZ3Mg
ZG9uZSB0byB0aGUgbG9hZGVkIHZhbHVlLgogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0
ZVR5cGU+CiBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CkBAIC0yNTUsNyArMjYyLDYgQEAgYm9vbCBzYWZlVG9F
eGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQ2hlY2tJbkJvdW5kczoKICAg
ICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CiAgICAgY2FzZSBDaGVjazoKLSAgICBjYXNl
IE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgogICAgIGNhc2Ug
VmFsdWVSZXA6CiAgICAgY2FzZSBEb3VibGVSZXA6CkBAIC0zMzMsNiArMzM5LDQ3IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAg
Ly8gV2UgY2FuJ3QgYWx3YXlzIGd1YXJhbnRlZSB0aGF0IHRoZSBNdWx0aUdldEJ5T2Zmc2V0IGlz
IHNhZmUgdG8gZXhlY3V0ZSBpZiBpdAorICAgICAgICAvLyBjb250YWlucyBsb2FkcyBmcm9tIHBy
b3RvdHlwZXMuIFdlIGtub3cgdGhhdCBpdCB3b24ndCBsb2FkIGZyb20gdGhvc2UgcHJvdG90eXBl
cyBpZgorICAgICAgICAvLyB3ZSB3YXRjaCB0aGUgbXV0YWJpbGl0eSBvZiB0aGUgcHJvcGVydGll
cyBiZWluZyBsb2FkZWQuIFNvLCBoZXJlIHdlIHRyeSB0bworICAgICAgICAvLyBjb25zdGFudC1m
b2xkIHByb3RvdHlwZSBsb2FkcywgYW5kIGlmIHRoYXQgZmFpbHMsIHdlIGNsYWltIHRoYXQgd2Ug
Y2Fubm90IGhvaXN0LiBXZQorICAgICAgICAvLyBhbHNvIGtub3cgdGhhdCBhIGxvYWQgaXMgc2Fm
ZSB0byBleGVjdXRlIGlmIHdlIGFyZSB3YXRjaGluZyB0aGUgcHJvdG90eXBlJ3MKKyAgICAgICAg
Ly8gc3RydWN0dXJlLgorICAgICAgICBmb3IgKGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50
IDogbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cykgeworICAgICAgICAgICAg
aWYgKCF2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgICAgIC8vIEl0J3Mg
bm90IGEgcHJvdG90eXBlIGxvYWQuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUgYmFzZSA9IHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpOworICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IGdyYXBo
LmZyZWV6ZShiYXNlKTsKKyAgICAgICAgICAgIGlmIChmcm96ZW4tPnN0cnVjdHVyZSgpLT5kZmdT
aG91bGRXYXRjaCgpCisgICAgICAgICAgICAgICAgJiYgZnJvemVuLT5zdHJ1Y3R1cmUoKS0+aXNW
YWxpZE9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3Jl
IGFscmVhZHkgd2F0Y2hpbmcgdGhhdCBpdCdzIHNhZmUgdG8gbG9hZCBmcm9tIHRoaXMuCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPSBncmFwaC50cnlHZXRDb25zdGFudFByb3Bl
cnR5KAorICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJh
c2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoIWNvbnN0
YW50UmVzdWx0KSB7CisgICAgICAgICAgICAgICAgLy8gQ291bGRuJ3QgY29uc3RhbnQtZm9sZCBh
IHByb3RvdHlwZSBsb2FkLiBUaGVyZWZvcmUsIHdlIHNob3VsZG4ndCBob2lzdAorICAgICAgICAg
ICAgICAgIC8vIGJlY2F1c2UgdGhlIHNhZmV0eSBvZiB0aGUgbG9hZCBkZXBlbmRzIG9uIHN0cnVj
dHVyZSBjaGVja3Mgb24gdGhlIHByb3RvdHlwZSwKKyAgICAgICAgICAgICAgICAvLyBhbmQgd2Un
cmUgdG9vIGNoZWFwIHRvIHZlcmlmeSB0aGF0IGhlcmUuCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBPdGhl
cndpc2UsIHdlIHdpbGwgZWl0aGVyOgorICAgICAgICAgICAgLy8gLSBOb3QgbG9hZCBmcm9tIHRo
ZSBwcm90b3R5cGUgYmVjYXVzZSBjb25zdGFudCBmb2xkaW5nIHdpbGwgc3VjY2VlZCBpbiB0aGUK
KyAgICAgICAgICAgIC8vICAgYmFja2VuZCwgb3IKKyAgICAgICAgICAgIC8vIC0gRW1pdCBpbnZh
bGlkIGNvZGUgdGhhdCBmYWlscyB3YXRjaHBvaW50IGNoZWNrcy4gVGhpcyBjb3VsZCBoYXBwZW4g
aWYgdGhlCisgICAgICAgICAgICAvLyAgIHByb3BlcnR5IGJlY29tZXMgbXV0YWJsZSBhZnRlciB0
aGlzIHBvaW50LCBzaW5jZSB3ZSBhbHJlYWR5IHNldCB0aGUgd2F0Y2hwb2ludAorICAgICAgICAg
ICAgLy8gICBhYm92ZS4gVGhpcyBjYXNlIGlzIE9LIHNpbmNlIHRoZSBjb2RlIHdpbGwgZmFpbCB3
YXRjaHBvaW50IGNoZWNrcyBhbmQgbmV2ZXIKKyAgICAgICAgICAgIC8vICAgZ2V0IGluc3RhbGxl
ZC4KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICBjYXNlIExh
c3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9tdWx0aS1nZXQtYnktb2Zmc2V0LWhvaXN0LWFyb3VuZC1zdHJ1Y3R1cmUtY2hlY2suanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1nZXQt
Ynktb2Zmc2V0LWhvaXN0LWFyb3VuZC1zdHJ1Y3R1cmUtY2hlY2suanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211bHRpLWdldC1ieS1vZmZzZXQt
aG9pc3QtYXJvdW5kLXN0cnVjdHVyZS1jaGVjay5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMwIEBACitmdW5jdGlvbiBmb28obywgc3RhcnQpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICByZXN1bHQgKz0gby5mOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK3ZhciBvID0ge307Citv
LmYgPSA0MjsKK3ZhciBmID0ge307CitmLmYgPSA0MzsKK2YuZyA9IDQ0OworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgby5mID0gaTsKK28uZiA9IDQyOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcDsKKyAgICBpZiAoaSAmIDEpCisg
ICAgICAgIHAgPSBvOworICAgIGVsc2UKKyAgICAgICAgcCA9IE9iamVjdC5jcmVhdGUobyk7Cisg
ICAgdmFyIHJlc3VsdCA9IGZvbyhwKTsKKyAgICBpZiAocmVzdWx0ICE9IDEwMCAqIDQyKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
</data>
<flag name="review"
          id="282593"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>