<?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>145721</bug_id>
          
          <creation_ts>2015-06-05 20:09:16 -0700</creation_ts>
          <short_desc>Sink real number type checks below the first arithmetic operation</short_desc>
          <delta_ts>2015-09-14 11:09:13 -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>NEW</bug_status>
          <resolution></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="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</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>1100046</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-05 20:09:16 -0700</bug_when>
    <thetext>In cases like:

o.x + o.y

Where the two operands are likely real doubles, we currently do NaN checks for both operands before doing the addition.  Instead, we could do the NaN check after speculatively doing the addition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100047</commentid>
    <comment_count>1</comment_count>
      <attachid>254403</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-05 20:10:00 -0700</bug_when>
    <thetext>Created attachment 254403
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100051</commentid>
    <comment_count>2</comment_count>
      <attachid>254404</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-05 21:02:23 -0700</bug_when>
    <thetext>Created attachment 254404
might be done

Still benchmarking</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100052</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-05 21:04:49 -0700</bug_when>
    <thetext>Attachment 254404 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:297:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1449:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1538:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100056</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-05 21:35:56 -0700</bug_when>
    <thetext>Maybe this isn&apos;t such a good idea.  box2d, the benchmark that should have benefited from this, is actually suffering.  I&apos;ll try to investigate why.


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 (r185277)
&quot;DoubleRealUse&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r185277)

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               DoubleRealUse                                   
SunSpider:
   3d-cube                                            5.1608+-0.0434     ?      5.4252+-0.3844        ? might be 1.0512x slower
   3d-morph                                           6.2298+-0.5615            5.9676+-0.2967          might be 1.0439x faster
   3d-raytrace                                        6.6622+-0.1147            6.5508+-0.1568          might be 1.0170x faster
   access-binary-trees                                2.4546+-0.2021            2.4021+-0.0643          might be 1.0219x faster
   access-fannkuch                                    6.2485+-0.0529            6.2050+-0.0558        
   access-nbody                                       2.9231+-0.0504     ?      2.9850+-0.0735        ? might be 1.0212x slower
   access-nsieve                                      3.5333+-0.0652            3.5019+-0.1308        
   bitops-3bit-bits-in-byte                           1.6429+-0.0616     ?      1.6495+-0.0705        ?
   bitops-bits-in-byte                                3.9222+-0.3337     ?      3.9572+-0.2793        ?
   bitops-bitwise-and                                 2.2649+-0.2649            2.2419+-0.2797          might be 1.0103x faster
   bitops-nsieve-bits                                 3.4191+-0.2026     ?      3.4365+-0.2572        ?
   controlflow-recursive                              3.2246+-0.2735            3.1154+-0.3846          might be 1.0351x faster
   crypto-aes                                         4.7313+-0.2135     ?      4.9056+-0.5659        ? might be 1.0368x slower
   crypto-md5                                         2.7327+-0.1181     ?      2.7391+-0.0419        ?
   crypto-sha1                                        3.9390+-0.3229            3.8605+-0.4292          might be 1.0203x faster
   date-format-tofte                                  9.2758+-0.1038     ?      9.4127+-0.3645        ? might be 1.0148x slower
   date-format-xparb                                  6.1372+-0.4733            5.8803+-0.2261          might be 1.0437x faster
   math-cordic                                        3.1557+-0.0985     ?      3.2679+-0.4099        ? might be 1.0356x slower
   math-partial-sums                                  5.6852+-0.4265            5.6765+-0.5863        
   math-spectral-norm                                 2.1281+-0.1922     ?      2.1494+-0.2350        ? might be 1.0100x slower
   regexp-dna                                         8.5785+-1.7263            7.4858+-0.1044          might be 1.1460x faster
   string-base64                                      5.0573+-0.1838     ?      5.0575+-0.1720        ?
   string-fasta                                       6.8582+-0.0820            6.7749+-0.0909          might be 1.0123x faster
   string-tagcloud                                    9.6671+-0.6289     ?      9.7732+-0.6238        ? might be 1.0110x slower
   string-unpack-code                                20.8331+-1.2336     ?     21.4014+-1.9397        ? might be 1.0273x slower
   string-validate-input                              6.0933+-0.1728            6.0275+-0.1514          might be 1.0109x faster

   &lt;arithmetic&gt;                                       5.4830+-0.0818            5.4558+-0.1193          might be 1.0050x faster

                                                        TipOfTree               DoubleRealUse                                   
LongSpider:
   3d-cube                                          904.8590+-11.3189    ?    911.5098+-36.6801       ?
   3d-morph                                        1527.2159+-3.3210         1526.0107+-2.7848        
   3d-raytrace                                      744.5743+-93.5410         705.4590+-7.0631          might be 1.0554x faster
   access-binary-trees                             1007.6110+-11.4286        1002.2077+-10.3281       
   access-fannkuch                                  345.1088+-7.0188     ?    346.4229+-13.0193       ?
   access-nbody                                     589.0284+-0.8089     ^    575.8524+-4.2512        ^ definitely 1.0229x faster
   access-nsieve                                    490.0885+-24.2256    ?    492.7859+-28.1751       ?
   bitops-3bit-bits-in-byte                          44.8100+-0.6487           44.1103+-0.5069          might be 1.0159x faster
   bitops-bits-in-byte                               99.3084+-0.7910           99.2161+-1.4317        
   bitops-nsieve-bits                               419.9189+-2.5585     ?    421.4469+-2.8904        ?
   controlflow-recursive                            506.8518+-18.1385         491.2904+-12.7051         might be 1.0317x faster
   crypto-aes                                       708.8814+-8.1663     ?    716.9584+-27.5910       ? might be 1.0114x slower
   crypto-md5                                       538.8437+-6.3228     ^    526.6714+-2.8118        ^ definitely 1.0231x faster
   crypto-sha1                                      681.9068+-30.7470    ?    687.1373+-14.7245       ?
   date-format-tofte                                731.4278+-14.4995         728.5741+-12.6458       
   date-format-xparb                                820.7187+-17.2954         805.2424+-16.4964         might be 1.0192x faster
   hash-map                                         182.8060+-5.0375     ?    185.5539+-4.4685        ? might be 1.0150x slower
   math-cordic                                      605.6199+-69.2781         586.3061+-28.5357         might be 1.0329x faster
   math-partial-sums                                506.1805+-3.4945     ?    513.8389+-21.8052       ? might be 1.0151x slower
   math-spectral-norm                               564.9269+-0.8218     ?    565.7150+-2.3582        ?
   string-base64                                    410.1970+-7.1679     ?    415.0805+-11.4785       ? might be 1.0119x slower
   string-fasta                                     433.1283+-5.1775          430.8855+-15.3424       
   string-tagcloud                                  195.0800+-4.1782     ?    195.6558+-3.1224        ?

   &lt;geometric&gt;                                      458.8901+-3.2612          456.4614+-1.6626          might be 1.0053x faster

                                                        TipOfTree               DoubleRealUse                                   
V8Spider:
   crypto                                            58.3114+-1.4157           56.6046+-2.5831          might be 1.0302x faster
   deltablue                                        109.0718+-11.5390         104.5914+-2.1321          might be 1.0428x faster
   earley-boyer                                      49.5396+-2.3602     ?     50.2601+-0.7182        ? might be 1.0145x slower
   raytrace                                          43.4325+-5.0697           41.9586+-2.8903          might be 1.0351x faster
   regexp                                            84.9896+-5.1557           82.3738+-2.4833          might be 1.0318x faster
   richards                                          77.8365+-2.0710     ?     82.5630+-7.5645        ? might be 1.0607x slower
   splay                                             41.0068+-1.0436           40.3124+-1.6370          might be 1.0172x faster

   &lt;geometric&gt;                                       62.3777+-1.5371           61.6904+-0.5210          might be 1.0111x faster

                                                        TipOfTree               DoubleRealUse                                   
Octane:
   encrypt                                           0.20910+-0.01056          0.20364+-0.00132         might be 1.0268x faster
   decrypt                                           3.62930+-0.16952          3.59206+-0.08528         might be 1.0104x faster
   deltablue                                x2       0.19563+-0.00219          0.19477+-0.00156       
   earley                                            0.39365+-0.00344          0.39321+-0.00393       
   boyer                                             5.21272+-0.04803    ^     5.13831+-0.02557       ^ definitely 1.0145x faster
   navier-stokes                            x2       5.17602+-0.00959    ?     5.25855+-0.20652       ? might be 1.0159x slower
   raytrace                                 x2       1.32085+-0.04138          1.30504+-0.05753         might be 1.0121x faster
   richards                                 x2       0.12672+-0.00080    ?     0.12746+-0.00162       ?
   splay                                    x2       0.40215+-0.00325    ?     0.40575+-0.00217       ?
   regexp                                   x2      31.62671+-0.55746    ?    32.16578+-0.97972       ? might be 1.0170x slower
   pdfjs                                    x2      42.46533+-0.21581    ?    42.92166+-0.91888       ? might be 1.0107x slower
   mandreel                                 x2      51.09701+-0.37534    ?    51.55372+-1.44598       ?
   gbemu                                    x2      46.54798+-6.74593         46.17776+-4.91357       
   closure                                           0.56444+-0.00170    ^     0.55986+-0.00246       ^ definitely 1.0082x faster
   jquery                                            7.37959+-0.02282          7.35187+-0.03633       
   box2d                                    x2      11.86116+-0.06912    !    13.19819+-0.18691       ! definitely 1.1127x slower
   zlib                                     x2     394.70802+-31.98257       391.72782+-15.39353      
   typescript                               x2     823.31380+-13.21436   ?   826.30518+-15.25333      ?

   &lt;geometric&gt;                                       6.63243+-0.05634    ?     6.68481+-0.08657       ? might be 1.0079x slower

                                                        TipOfTree               DoubleRealUse                                   
Kraken:
   ai-astar                                          235.024+-1.372      ?     236.800+-3.052         ?
   audio-beat-detection                               81.927+-0.325             81.861+-0.405         
   audio-dft                                         120.524+-3.549            119.075+-2.021           might be 1.0122x faster
   audio-fft                                          71.167+-2.056             69.738+-1.017           might be 1.0205x faster
   audio-oscillator                                   78.513+-3.242             77.620+-1.882           might be 1.0115x faster
   imaging-darkroom                                  105.376+-1.631            105.016+-1.789         
   imaging-desaturate                                 64.462+-2.333             63.288+-0.316           might be 1.0185x faster
   imaging-gaussian-blur                             110.727+-1.978      ?     111.612+-4.275         ?
   json-parse-financial                               48.536+-1.408      ?      49.151+-3.674         ? might be 1.0127x slower
   json-stringify-tinderbox                           28.869+-1.475      ?      29.109+-1.460         ?
   stanford-crypto-aes                                58.679+-1.241      ?      59.180+-1.180         ?
   stanford-crypto-ccm                                48.056+-1.736      ?      48.484+-2.073         ?
   stanford-crypto-pbkdf2                            110.311+-1.564      ?     112.305+-1.801         ? might be 1.0181x slower
   stanford-crypto-sha256-iterative                   43.048+-0.640             43.017+-0.662         

   &lt;arithmetic&gt;                                       86.087+-0.462      ?      86.161+-0.638         ? might be 1.0009x slower

                                                        TipOfTree               DoubleRealUse                                   
JSRegress:
   abs-boolean                                        2.6982+-0.0282     ?      2.7275+-0.0512        ? might be 1.0109x slower
   adapt-to-double-divide                            16.6434+-0.1326     ?     16.9337+-0.3696        ? might be 1.0174x slower
   aliased-arguments-getbyval                         1.3326+-0.0951     ?      1.3451+-0.0942        ?
   allocate-big-object                                3.0814+-0.2963            3.0813+-0.2644        
   arguments-named-and-reflective                    12.6823+-0.4448     ?     13.0494+-1.5097        ? might be 1.0289x slower
   arguments-out-of-bounds                           14.9174+-0.7423           14.7099+-0.2277          might be 1.0141x faster
   arguments-strict-mode                             11.6017+-1.3461           11.1768+-0.9433          might be 1.0380x faster
   arguments                                          9.6723+-0.2546            9.6353+-0.3352        
   arity-mismatch-inlining                            0.9183+-0.1005            0.8856+-0.0187          might be 1.0369x faster
   array-access-polymorphic-structure                 7.4720+-1.0016            6.9528+-0.2283          might be 1.0747x faster
   array-nonarray-polymorhpic-access                 33.7808+-1.1821           33.3112+-1.1283          might be 1.0141x faster
   array-prototype-every                             87.0541+-2.1359     ?     87.5568+-6.9420        ?
   array-prototype-forEach                           85.3459+-0.5231           84.1084+-3.4083          might be 1.0147x faster
   array-prototype-map                               96.1195+-8.9814           91.2474+-1.7461          might be 1.0534x faster
   array-prototype-reduce                            83.0638+-4.2161           80.8770+-2.4130          might be 1.0270x faster
   array-prototype-reduceRight                       82.0041+-2.0958           81.8353+-1.4521        
   array-prototype-some                              87.5992+-2.7840           84.4624+-2.5658          might be 1.0371x faster
   array-splice-contiguous                           42.1250+-1.5861     !     45.0010+-0.6043        ! definitely 1.0683x slower
   array-with-double-add                              4.2764+-0.0973     ?      4.3199+-0.1314        ? might be 1.0102x slower
   array-with-double-increment                        3.3328+-0.0393            3.2946+-0.0294          might be 1.0116x faster
   array-with-double-mul-add                          5.3485+-0.2751            5.3474+-0.3345        
   array-with-double-sum                              3.4500+-0.1160            3.3871+-0.0683          might be 1.0185x faster
   array-with-int32-add-sub                           6.8465+-0.1894     ?      6.9323+-0.1414        ? might be 1.0125x slower
   array-with-int32-or-double-sum                     3.5509+-0.3349            3.4984+-0.1587          might be 1.0150x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     37.7726+-2.0070           37.0742+-1.8484          might be 1.0188x faster
   ArrayBuffer-DataView-alloc-long-lived             16.5807+-1.5151           15.9539+-2.1059          might be 1.0393x faster
   ArrayBuffer-Int32Array-byteOffset                  3.8612+-0.0631     ?      4.2719+-0.5612        ? might be 1.1063x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     39.1002+-1.3192           38.6167+-1.2834          might be 1.0125x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.1466+-1.6934           22.5643+-0.7932          might be 1.0258x faster
   ArrayBuffer-Int8Array-alloc-long-lived            14.4735+-1.4342           14.2890+-1.8740          might be 1.0129x faster
   ArrayBuffer-Int8Array-alloc                       10.6046+-0.2619     ?     10.7165+-0.3170        ? might be 1.0106x slower
   asmjs_bool_bug                                     7.7869+-0.0611     ?      7.8068+-0.2259        ?
   assign-custom-setter-polymorphic                   3.3576+-0.1672            3.2590+-0.0646          might be 1.0303x faster
   assign-custom-setter                               5.0450+-0.6807            4.6423+-0.1584          might be 1.0867x faster
   basic-set                                          9.5396+-0.2073     ?      9.8708+-0.7738        ? might be 1.0347x slower
   big-int-mul                                        4.1005+-0.0333     !      4.2583+-0.0249        ! definitely 1.0385x slower
   boolean-test                                       3.4491+-0.3571            3.3581+-0.3608          might be 1.0271x faster
   branch-fold                                        4.0415+-0.1477            4.0101+-0.1478        
   branch-on-string-as-boolean                       21.1610+-1.8662     ?     21.6707+-1.6459        ? might be 1.0241x slower
   by-val-generic                                     8.3562+-0.4762     ?      8.4019+-0.5822        ?
   call-spread-apply                                 30.8014+-2.1592     ?     31.8298+-4.9953        ? might be 1.0334x slower
   call-spread-call                                  26.2705+-1.5552           25.7950+-1.2096          might be 1.0184x faster
   captured-assignments                               0.5142+-0.0080     ?      0.5809+-0.1183        ? might be 1.1296x slower
   cast-int-to-double                                 5.4144+-0.1292            5.4090+-0.1624        
   cell-argument                                      8.6852+-0.1025            8.6543+-0.2996        
   cfg-simplify                                       2.9222+-0.1123            2.9116+-0.1969        
   chain-getter-access                                9.3312+-0.1371            9.2634+-0.1763        
   cmpeq-obj-to-obj-other                            12.6772+-1.3209     ?     12.8197+-0.9931        ? might be 1.0112x slower
   constant-test                                      5.1038+-0.2221            5.0224+-0.0228          might be 1.0162x faster
   create-lots-of-functions                          11.7335+-0.3418     ?     12.0164+-0.4489        ? might be 1.0241x slower
   cse-new-array-buffer                               2.6141+-0.0980     ?      2.6720+-0.2110        ? might be 1.0222x slower
   cse-new-array                                      2.6350+-0.0526     ?      2.6411+-0.0585        ?
   DataView-custom-properties                        43.0418+-1.6142     ?     43.6421+-2.0264        ? might be 1.0139x slower
   deconstructing-parameters-overridden-by-function   
                                                      0.6088+-0.0553            0.5695+-0.0347          might be 1.0690x faster
   delay-tear-off-arguments-strictmode               14.1698+-0.2457     ?     14.3218+-0.2491        ? might be 1.0107x slower
   deltablue-varargs                                215.8993+-18.0660         213.1444+-9.7052          might be 1.0129x faster
   destructuring-arguments                           17.8810+-0.5899           17.5660+-0.6234          might be 1.0179x faster
   destructuring-swap                                 5.2572+-0.1995     ?      5.2613+-0.2286        ?
   direct-arguments-getbyval                          1.4176+-0.1709            1.3342+-0.1134          might be 1.0625x faster
   div-boolean-double                                 5.2732+-0.0283     ?      5.2933+-0.0746        ?
   div-boolean                                        7.8628+-0.0837            7.8240+-0.0260        
   double-get-by-val-out-of-bounds                    4.7448+-0.1253            4.7166+-0.1754        
   double-pollution-getbyval                          8.9127+-0.0760     ?      8.9259+-0.0386        ?
   double-pollution-putbyoffset                       4.6154+-0.4252            4.5628+-0.2777          might be 1.0115x faster
   double-real-use                                   30.6083+-1.2423     ^     26.8977+-0.4437        ^ definitely 1.1380x faster
   double-to-int32-typed-array-no-inline              2.5259+-0.1606     ?      2.5596+-0.1220        ? might be 1.0133x slower
   double-to-int32-typed-array                        2.0383+-0.1188     ?      2.1089+-0.1882        ? might be 1.0346x slower
   double-to-uint32-typed-array-no-inline             2.6215+-0.1634     ?      2.6385+-0.0940        ?
   double-to-uint32-typed-array                       2.2292+-0.2593            2.0933+-0.1041          might be 1.0649x faster
   elidable-new-object-dag                           44.0384+-1.7788           43.9157+-1.5278        
   elidable-new-object-roflcopter                    44.8941+-2.1323     ?     46.5966+-2.5937        ? might be 1.0379x slower
   elidable-new-object-then-call                     40.1167+-0.6172           39.9511+-1.2781        
   elidable-new-object-tree                          45.6534+-1.6854     ?     46.1323+-1.9782        ? might be 1.0105x slower
   empty-string-plus-int                              5.7307+-0.3509            5.6814+-0.1894        
   emscripten-cube2hash                              39.9495+-0.9205           38.3503+-1.8771          might be 1.0417x faster
   exit-length-on-plain-object                       14.3197+-0.3227     ?     15.0712+-1.7169        ? might be 1.0525x slower
   external-arguments-getbyval                        1.2864+-0.0923     ?      1.4826+-0.2587        ? might be 1.1526x slower
   external-arguments-putbyval                        2.4093+-0.0490            2.3872+-0.0483        
   fixed-typed-array-storage-var-index                1.2677+-0.1096     ?      1.2754+-0.1516        ?
   fixed-typed-array-storage                          0.9650+-0.1078     ?      0.9846+-0.1375        ? might be 1.0203x slower
   Float32Array-matrix-mult                           4.7671+-0.2883            4.7120+-0.2500          might be 1.0117x faster
   Float32Array-to-Float64Array-set                  52.6925+-2.1853     !     57.6643+-2.0666        ! definitely 1.0944x slower
   Float64Array-alloc-long-lived                     86.9568+-1.4834     ?     87.5475+-1.6276        ?
   Float64Array-to-Int16Array-set                    69.7976+-1.6633     ?     71.8801+-1.4995        ? might be 1.0298x slower
   fold-double-to-int                                14.0352+-0.6970           13.9459+-0.2591        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.1310+-1.0941           10.1054+-1.0360        
   fold-get-by-id-to-multi-get-by-offset             10.1697+-1.4928     ?     10.5650+-1.3110        ? might be 1.0389x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.9183+-0.9338            9.7284+-0.5880          might be 1.0195x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     10.5318+-1.3051            9.4893+-0.6447          might be 1.1099x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.3247+-0.6008     ?     10.2503+-0.6532        ? might be 1.0993x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      7.9151+-0.7231     ?      8.0010+-0.4450        ? might be 1.0109x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.9781+-0.4065     ?     10.2982+-0.5149        ? might be 1.0321x slower
   fold-put-by-id-to-multi-put-by-offset             10.8041+-0.6670           10.5944+-1.1401          might be 1.0198x faster
   fold-put-structure                                 6.2873+-2.1644            6.1503+-1.5005          might be 1.0223x faster
   for-of-iterate-array-entries                       4.8375+-0.4880            4.6163+-0.0923          might be 1.0479x faster
   for-of-iterate-array-keys                          3.7589+-0.0911     ?      3.8621+-0.1574        ? might be 1.0275x slower
   for-of-iterate-array-values                        3.7700+-0.1977     ?      3.7874+-0.2585        ?
   fround                                            21.0698+-0.8629           20.8125+-0.9192          might be 1.0124x faster
   ftl-library-inlining-dataview                     65.8031+-2.4573     ?     66.3633+-2.2200        ?
   ftl-library-inlining                              75.1298+-18.7421          72.3749+-6.0746          might be 1.0381x faster
   function-dot-apply                                 2.2896+-0.0721     ?      2.3614+-0.1111        ? might be 1.0314x slower
   function-test                                      3.0990+-0.3391     ?      3.2563+-0.5101        ? might be 1.0508x slower
   function-with-eval                               103.6340+-0.9946          102.7782+-1.5243        
   gcse-poly-get-less-obvious                        19.8511+-2.4780     ?     20.6216+-2.0589        ? might be 1.0388x slower
   gcse-poly-get                                     21.1770+-0.9898     ?     22.1546+-1.6671        ? might be 1.0462x slower
   gcse                                               4.3977+-0.0958     ?      4.4751+-0.1965        ? might be 1.0176x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.9716+-0.3352            2.8266+-0.1099          might be 1.0513x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0175+-0.0828     ?      6.0975+-0.2019        ? might be 1.0133x slower
   get-by-id-chain-from-try-block                     6.8020+-0.2972            6.6825+-0.2327          might be 1.0179x faster
   get-by-id-check-structure-elimination              5.1951+-0.1351     ?      5.2680+-0.1738        ? might be 1.0140x slower
   get-by-id-proto-or-self                           18.1330+-0.8475     ?     19.4744+-1.6955        ? might be 1.0740x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0097+-0.0729            2.9565+-0.0320          might be 1.0180x faster
   get-by-id-self-or-proto                           18.9848+-0.9475     ?     19.5079+-2.5353        ? might be 1.0276x slower
   get-by-val-out-of-bounds                           4.5629+-0.3466     ?      4.5951+-0.1839        ?
   get_callee_monomorphic                             3.0146+-0.3781     ?      3.2587+-0.6580        ? might be 1.0810x slower
   get_callee_polymorphic                             3.8818+-0.1500            3.8507+-0.1113        
   getter-no-activation                               5.2981+-0.4853            5.2823+-0.3508        
   getter-prototype                                  15.6368+-0.9663           14.8065+-0.1801          might be 1.0561x faster
   getter-richards                                  126.4050+-5.1292          121.5462+-4.0312          might be 1.0400x faster
   getter                                             6.5248+-0.7941            5.4882+-0.3937          might be 1.1889x faster
   global-var-const-infer-fire-from-opt               0.9474+-0.1024     ?      1.0192+-0.1760        ? might be 1.0758x slower
   global-var-const-infer                             1.1738+-0.3193            0.9084+-0.1277          might be 1.2921x faster
   HashMap-put-get-iterate-keys                      30.3682+-1.6365     ?     30.4166+-0.8849        ?
   HashMap-put-get-iterate                           31.6236+-1.2062     ?     34.2173+-3.1457        ? might be 1.0820x slower
   HashMap-string-put-get-iterate                    32.7264+-3.3039           32.6712+-2.5577        
   hoist-make-rope                                   12.2855+-0.3808     ?     12.5344+-0.9353        ? might be 1.0203x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.1246+-0.0257     ?      5.1697+-0.1534        ?
   hoist-poly-check-structure                         3.7656+-0.0837            3.7135+-0.0396          might be 1.0140x faster
   imul-double-only                                   8.4989+-0.6693     ?      8.5585+-0.6137        ?
   imul-int-only                                      9.8321+-0.5380     ?     10.0580+-0.7448        ? might be 1.0230x slower
   imul-mixed                                         8.4202+-0.3542     ?      8.5046+-0.4951        ? might be 1.0100x slower
   in-four-cases                                     23.0688+-1.5864           22.2783+-0.1492          might be 1.0355x faster
   in-one-case-false                                 11.1418+-0.1078     ?     11.3597+-0.4287        ? might be 1.0196x slower
   in-one-case-true                                  11.5194+-0.5378           11.0592+-0.0473          might be 1.0416x faster
   in-two-cases                                      11.7089+-0.2859           11.6455+-0.0986        
   indexed-properties-in-objects                      3.2495+-0.3585            3.0349+-0.0757          might be 1.0707x faster
   infer-closure-const-then-mov-no-inline             4.4194+-0.5021            4.1254+-0.2880          might be 1.0713x faster
   infer-closure-const-then-mov                      19.6966+-0.1815     ?     19.7834+-0.2400        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.7997+-0.1509     ?     13.2074+-1.0920        ? might be 1.0319x slower
   infer-closure-const-then-put-to-scope             23.3578+-1.5821     ^     21.4519+-0.1228        ^ definitely 1.0888x faster
   infer-closure-const-then-reenter-no-inline   
                                                     54.4246+-0.3167     ?     54.9907+-2.3118        ? might be 1.0104x slower
   infer-closure-const-then-reenter                  22.6489+-1.2307           22.0618+-1.2951          might be 1.0266x faster
   infer-constant-global-property                     3.7493+-0.2359            3.5911+-0.0319          might be 1.0441x faster
   infer-constant-property                            2.9080+-0.3266            2.8483+-0.1081          might be 1.0210x faster
   infer-one-time-closure-ten-vars                   12.8227+-0.5611           12.5890+-0.1718          might be 1.0186x faster
   infer-one-time-closure-two-vars                   12.6448+-1.6819     ?     13.1635+-1.3375        ? might be 1.0410x slower
   infer-one-time-closure                            12.4769+-0.8362           11.9530+-0.2295          might be 1.0438x faster
   infer-one-time-deep-closure                       21.8444+-1.8729     ?     22.1429+-1.4542        ? might be 1.0137x slower
   inline-arguments-access                            4.7625+-0.3660            4.6176+-0.0627          might be 1.0314x faster
   inline-arguments-aliased-access                    4.7806+-0.2456     ?      4.9225+-0.5292        ? might be 1.0297x slower
   inline-arguments-local-escape                      4.8164+-0.1742            4.6877+-0.0727          might be 1.0274x faster
   inline-get-scoped-var                              5.2936+-0.3069     ^      4.7820+-0.0436        ^ definitely 1.1070x faster
   inlined-put-by-id-transition                      12.0719+-0.2983           11.8033+-0.2769          might be 1.0228x faster
   int-or-other-abs-then-get-by-val                   6.1125+-2.7071            5.0496+-0.1007          might be 1.2105x faster
   int-or-other-abs-zero-then-get-by-val             17.8687+-0.6968     ?     18.3604+-1.5933        ? might be 1.0275x slower
   int-or-other-add-then-get-by-val                   4.4368+-0.1288            4.4269+-0.1465        
   int-or-other-add                                   5.5101+-0.1737            5.4358+-0.1235          might be 1.0137x faster
   int-or-other-div-then-get-by-val                   4.3531+-0.1965     ?      4.5806+-0.6665        ? might be 1.0523x slower
   int-or-other-max-then-get-by-val                   4.4974+-0.2439            4.3360+-0.0152          might be 1.0372x faster
   int-or-other-min-then-get-by-val                   4.4044+-0.1305            4.3659+-0.0322        
   int-or-other-mod-then-get-by-val                   4.0318+-0.1060            3.9685+-0.0351          might be 1.0159x faster
   int-or-other-mul-then-get-by-val                   3.9688+-0.0557     ?      4.1901+-0.4492        ? might be 1.0558x slower
   int-or-other-neg-then-get-by-val                   4.7808+-0.0161     ?      4.8302+-0.0392        ? might be 1.0103x slower
   int-or-other-neg-zero-then-get-by-val             17.7248+-0.1829     ?     18.0343+-1.1448        ? might be 1.0175x slower
   int-or-other-sub-then-get-by-val                   4.4134+-0.0335     ?      4.4454+-0.0648        ?
   int-or-other-sub                                   3.6678+-0.0749     ?      3.7014+-0.0950        ?
   int-overflow-local                                 4.6615+-0.1357     ?      4.6945+-0.2805        ?
   Int16Array-alloc-long-lived                       53.0475+-0.9939     ?     53.6426+-1.0074        ? might be 1.0112x slower
   Int16Array-bubble-sort-with-byteLength            20.5958+-0.9028     ?     20.6202+-0.9481        ?
   Int16Array-bubble-sort                            20.4302+-0.2172     ?     20.7670+-1.2921        ? might be 1.0165x slower
   Int16Array-load-int-mul                            1.6422+-0.1324            1.5353+-0.0101          might be 1.0696x faster
   Int16Array-to-Int32Array-set                      54.3070+-1.6574     !     58.4018+-1.6824        ! definitely 1.0754x slower
   Int32Array-alloc-large                            24.1757+-0.5930     ?     24.6455+-1.7956        ? might be 1.0194x slower
   Int32Array-alloc-long-lived                       64.2651+-1.9963     ?     64.4023+-1.7463        ?
   Int32Array-alloc                                   3.4187+-0.1375            3.3951+-0.1078        
   Int32Array-Int8Array-view-alloc                    7.5479+-1.1740            7.2793+-0.8247          might be 1.0369x faster
   int52-spill                                        6.0745+-0.3527            5.8871+-0.1453          might be 1.0318x faster
   Int8Array-alloc-long-lived                        48.3613+-1.3683     ?     49.5009+-1.5600        ? might be 1.0236x slower
   Int8Array-load-with-byteLength                     3.4780+-0.1885     ?      3.6906+-0.4786        ? might be 1.0611x slower
   Int8Array-load                                     3.4201+-0.0537     ?      3.5684+-0.2387        ? might be 1.0434x slower
   integer-divide                                    11.0440+-0.1315           10.9361+-0.2039        
   integer-modulo                                     2.2037+-0.2527            2.0947+-0.0576          might be 1.0520x faster
   is-boolean-fold-tricky                             4.7024+-0.2421     ?      4.8092+-0.5085        ? might be 1.0227x slower
   is-boolean-fold                                    3.0679+-0.2770     ?      3.1330+-0.2801        ? might be 1.0212x slower
   is-function-fold-tricky-internal-function   
                                                     12.0548+-0.1890     ?     12.0653+-0.0606        ?
   is-function-fold-tricky                            4.6057+-0.0802            4.5934+-0.0473        
   is-function-fold                                   3.1042+-0.2850     ?      3.1582+-0.3716        ? might be 1.0174x slower
   is-number-fold-tricky                              4.4878+-0.0778     ?      4.6681+-0.2531        ? might be 1.0402x slower
   is-number-fold                                     2.9164+-0.0421     ?      3.1025+-0.2900        ? might be 1.0638x slower
   is-object-or-null-fold-functions                   3.1436+-0.3688            3.0860+-0.2249          might be 1.0187x faster
   is-object-or-null-fold-less-tricky                 4.6110+-0.1072     ?      4.6645+-0.2701        ? might be 1.0116x slower
   is-object-or-null-fold-tricky                      6.8543+-0.3595            6.7362+-0.2318          might be 1.0175x faster
   is-object-or-null-fold                             3.0680+-0.3855            2.9163+-0.0488          might be 1.0520x faster
   is-object-or-null-trickier-function                4.7601+-0.2659     ?      4.9225+-0.4278        ? might be 1.0341x slower
   is-object-or-null-trickier-internal-function   
                                                     12.8347+-0.1650     ?     12.9543+-0.5704        ?
   is-object-or-null-tricky-function                  4.7076+-0.2008     ?      4.7929+-0.4675        ? might be 1.0181x slower
   is-object-or-null-tricky-internal-function   
                                                      9.3252+-0.0739     ?      9.3321+-0.1437        ?
   is-string-fold-tricky                              4.5378+-0.1591     ?      4.7892+-0.3578        ? might be 1.0554x slower
   is-string-fold                                     3.1344+-0.3823     ?      3.1831+-0.4184        ? might be 1.0155x slower
   is-undefined-fold-tricky                           3.9350+-0.3210            3.7817+-0.0453          might be 1.0405x faster
   is-undefined-fold                                  3.0053+-0.1655            2.9476+-0.0524          might be 1.0196x faster
   large-int-captured                                 5.0820+-0.5252     ?      5.1239+-0.3262        ?
   large-int-neg                                     16.5406+-0.8203     ?     17.1314+-1.4140        ? might be 1.0357x slower
   large-int                                         14.8286+-0.4062     ?     14.9555+-0.7241        ?
   load-varargs-elimination                          22.7071+-0.1788     ?     31.3809+-18.9817       ? might be 1.3820x slower
   logical-not-weird-types                            3.4186+-0.1837            3.3781+-0.0844          might be 1.0120x faster
   logical-not                                        4.6055+-0.0359     ?      4.6512+-0.0687        ?
   lots-of-fields                                    12.5911+-0.1494           12.4218+-0.5126          might be 1.0136x faster
   make-indexed-storage                               3.0541+-0.2009     ?      3.1566+-0.1381        ? might be 1.0336x slower
   make-rope-cse                                     12.2771+-1.0951     ?     12.5935+-1.5015        ? might be 1.0258x slower
   marsaglia-larger-ints                             36.7852+-1.7921           35.8618+-0.4922          might be 1.0257x faster
   marsaglia-osr-entry                               23.2332+-0.4112     ?     23.9528+-1.4614        ? might be 1.0310x slower
   math-with-out-of-bounds-array-values              25.0724+-1.6139     ?     25.3854+-0.7838        ? might be 1.0125x slower
   max-boolean                                        2.5769+-0.0901     ?      2.5847+-0.0896        ?
   method-on-number                                  17.9796+-0.2174     ^     17.4055+-0.2247        ^ definitely 1.0330x faster
   min-boolean                                        2.7835+-0.6302            2.5733+-0.0486          might be 1.0817x faster
   minus-boolean-double                               3.2336+-0.0436     ?      3.2514+-0.0685        ?
   minus-boolean                                      2.5136+-0.1227            2.4189+-0.0758          might be 1.0392x faster
   misc-strict-eq                                    39.8228+-3.1985           39.0572+-1.3588          might be 1.0196x faster
   mod-boolean-double                                10.9939+-0.1771     ?     11.2897+-0.7972        ? might be 1.0269x slower
   mod-boolean                                        7.8946+-0.0391     ?      7.9755+-0.2016        ? might be 1.0102x slower
   mul-boolean-double                                 3.7460+-0.0835     ?      3.7602+-0.1500        ?
   mul-boolean                                        3.0576+-0.2254            2.9900+-0.0479          might be 1.0226x faster
   neg-boolean                                        3.3205+-0.2587     ?      3.3700+-0.3940        ? might be 1.0149x slower
   negative-zero-divide                               0.3902+-0.0202     ?      0.4112+-0.0284        ? might be 1.0537x slower
   negative-zero-modulo                               0.4010+-0.0663     ?      0.4587+-0.1385        ? might be 1.1440x slower
   negative-zero-negate                               0.3625+-0.0214     !      0.4313+-0.0465        ! definitely 1.1898x slower
   nested-function-parsing                           40.6377+-1.8004           39.4135+-1.0237          might be 1.0311x faster
   new-array-buffer-dead                            112.5503+-2.4721     ?    113.6045+-1.7116        ?
   new-array-buffer-push                              6.8811+-0.0906     ?      6.9136+-0.0978        ?
   new-array-dead                                    19.5350+-0.8165           19.0659+-0.4709          might be 1.0246x faster
   new-array-push                                     7.0680+-0.9504            6.6026+-0.3220          might be 1.0705x faster
   no-inline-constructor                             42.4250+-1.0362           40.8241+-1.2013          might be 1.0392x faster
   number-test                                        3.1404+-0.0476     ?      3.3124+-0.3408        ? might be 1.0548x slower
   object-closure-call                                5.7347+-0.0553     ?      5.8264+-0.2389        ? might be 1.0160x slower
   object-test                                        3.0046+-0.1647            2.9822+-0.1297        
   obvious-sink-pathology-taken                     140.7885+-4.3980     ?    142.3224+-2.0632        ? might be 1.0109x slower
   obvious-sink-pathology                           130.9134+-2.0269     ?    133.3243+-3.7729        ? might be 1.0184x slower
   obviously-elidable-new-object                     36.3408+-1.2000     ?     36.4894+-1.4300        ?
   plus-boolean-arith                                 2.5558+-0.0254     ?      2.5613+-0.0298        ?
   plus-boolean-double                                3.3514+-0.2755            3.3468+-0.2684        
   plus-boolean                                       2.4828+-0.0769            2.4768+-0.0692        
   poly-chain-access-different-prototypes-simple   
                                                      3.6290+-0.3533     ?      3.6467+-0.5290        ?
   poly-chain-access-different-prototypes             2.6217+-0.0172     ?      2.7033+-0.2553        ? might be 1.0312x slower
   poly-chain-access-simpler                          3.3475+-0.0521     ?      3.3568+-0.0749        ?
   poly-chain-access                                  2.6127+-0.0301     ?      2.6265+-0.0333        ?
   poly-stricteq                                     59.8716+-1.1565     ?     60.9186+-2.8077        ? might be 1.0175x slower
   polymorphic-array-call                             1.4482+-0.0715     ?      1.4612+-0.1882        ?
   polymorphic-get-by-id                              3.2102+-0.0309            3.1970+-0.0413        
   polymorphic-put-by-id                             34.7648+-3.9706           31.8252+-1.9813          might be 1.0924x faster
   polymorphic-structure                             15.1081+-0.2073           15.0425+-0.2371        
   polyvariant-monomorphic-get-by-id                  8.7048+-0.1092     ?      8.7347+-0.1370        ?
   proto-getter-access                                9.2751+-0.1240     ?      9.4513+-0.2681        ? might be 1.0190x slower
   put-by-id-replace-and-transition                   9.6072+-0.0774     ?      9.8145+-0.2580        ? might be 1.0216x slower
   put-by-id-slightly-polymorphic                     3.0077+-0.2029     ?      3.0448+-0.3405        ? might be 1.0123x slower
   put-by-id                                         13.0151+-0.2770           12.7943+-0.2696          might be 1.0173x faster
   put-by-val-direct                                  0.4355+-0.0616            0.3936+-0.0164          might be 1.1065x faster
   put-by-val-large-index-blank-indexing-type   
                                                     12.3265+-1.1084           12.0483+-0.7156          might be 1.0231x faster
   put-by-val-machine-int                             2.8480+-0.0737     ?      2.8780+-0.1022        ? might be 1.0105x slower
   rare-osr-exit-on-local                            15.9913+-1.2760           15.1985+-0.4167          might be 1.0522x faster
   register-pressure-from-osr                        21.5356+-0.1664     ?     21.9041+-0.6430        ? might be 1.0171x slower
   repeat-multi-get-by-offset                        24.7608+-0.8519     ?     25.2542+-1.5211        ? might be 1.0199x slower
   setter-prototype                                  10.5325+-0.1346     ?     10.9357+-0.7670        ? might be 1.0383x slower
   setter                                             5.7752+-0.6039     ?      6.0874+-0.6888        ? might be 1.0541x slower
   simple-activation-demo                            25.4524+-0.3944           25.1325+-0.4415          might be 1.0127x faster
   simple-getter-access                              11.8270+-0.1804     ?     12.0248+-0.5223        ? might be 1.0167x slower
   simple-poly-call-nested                            8.5067+-0.7851            8.1897+-0.2060          might be 1.0387x faster
   simple-poly-call                                   1.3674+-0.0636     ?      1.3726+-0.0654        ?
   sin-boolean                                       22.8291+-0.5877     ?     22.9124+-0.7654        ?
   singleton-scope                                   62.2797+-0.5899     ?     63.7203+-1.8672        ? might be 1.0231x slower
   sink-function                                     12.3405+-0.3983           12.2428+-0.3684        
   sink-huge-activation                              18.8394+-0.3021     ?     19.4418+-0.7702        ? might be 1.0320x slower
   sinkable-new-object-dag                           70.5228+-0.3849           69.8621+-2.3182        
   sinkable-new-object-taken                         51.5270+-2.2933     ?     53.3783+-5.4343        ? might be 1.0359x slower
   sinkable-new-object                               38.6052+-0.3399     ?     39.0633+-0.9565        ? might be 1.0119x slower
   slow-array-profile-convergence                     3.2297+-0.3712            2.8952+-0.0503          might be 1.1155x faster
   slow-convergence                                   2.9270+-0.3294            2.7279+-0.0402          might be 1.0730x faster
   slow-ternaries                                    21.1071+-2.4826           20.3393+-3.2358          might be 1.0378x faster
   sorting-benchmark                                 19.2550+-0.6306           19.1977+-0.5469        
   sparse-conditional                                 1.2052+-0.0562     ?      1.2329+-0.1348        ? might be 1.0230x slower
   splice-to-remove                                  15.9714+-1.6478           15.8792+-1.3339        
   string-char-code-at                               16.3978+-0.4410     ?     16.8615+-0.6800        ? might be 1.0283x slower
   string-concat-object                               2.7797+-0.3064     ?      2.8610+-0.2595        ? might be 1.0293x slower
   string-concat-pair-object                          2.8154+-0.1978            2.6340+-0.1887          might be 1.0689x faster
   string-concat-pair-simple                         11.8418+-0.4567     ?     12.1330+-0.2749        ? might be 1.0246x slower
   string-concat-simple                              12.2856+-0.5446     ?     13.2740+-1.6978        ? might be 1.0805x slower
   string-cons-repeat                                 9.0823+-0.9483     ^      8.0001+-0.1259        ^ definitely 1.1353x faster
   string-cons-tower                                  8.2670+-0.2450     ?      8.3765+-0.2971        ? might be 1.0132x slower
   string-equality                                   17.9752+-0.7123     ?     18.0697+-1.0792        ?
   string-get-by-val-big-char                         7.3743+-0.2275            7.2351+-0.0656          might be 1.0192x faster
   string-get-by-val-out-of-bounds-insane             3.7590+-0.2183            3.6410+-0.1457          might be 1.0324x faster
   string-get-by-val-out-of-bounds                    5.6814+-0.2234            5.5584+-0.0529          might be 1.0221x faster
   string-get-by-val                                  3.4647+-0.0619     ?      3.4918+-0.2199        ?
   string-hash                                        2.1492+-0.1199     ?      2.2736+-0.2430        ? might be 1.0579x slower
   string-long-ident-equality                        14.9464+-1.0301           14.8337+-0.7255        
   string-out-of-bounds                              15.0102+-0.3120     ?     15.1136+-0.3411        ?
   string-repeat-arith                               34.0263+-1.8728           33.8778+-2.2149        
   string-sub                                        67.9135+-1.6727     ?     68.2456+-3.0013        ?
   string-test                                        3.0227+-0.0153     ?      3.0474+-0.0305        ?
   string-var-equality                               33.5386+-2.0310           32.2082+-0.3798          might be 1.0413x faster
   structure-hoist-over-transitions                   2.8547+-0.4560            2.6792+-0.0303          might be 1.0655x faster
   substring-concat-weird                            41.4771+-1.7399           41.3732+-1.6788        
   substring-concat                                  42.9596+-1.1900           42.8604+-0.5744        
   substring                                         46.0668+-1.2495     ?     47.0009+-3.8174        ? might be 1.0203x slower
   switch-char-constant                               2.9289+-0.1363     ?      2.9784+-0.1503        ? might be 1.0169x slower
   switch-char                                        6.9198+-0.7443            6.8586+-1.1912        
   switch-constant                                    8.5658+-0.2117     ?      8.6888+-0.5171        ? might be 1.0144x slower
   switch-string-basic-big-var                       18.5851+-0.3696     ?     18.9438+-0.4042        ? might be 1.0193x slower
   switch-string-basic-big                           15.6048+-1.7822           15.2658+-0.7807          might be 1.0222x faster
   switch-string-basic-var                           15.0824+-0.2207     ?     15.2163+-0.2479        ?
   switch-string-basic                               13.5952+-0.2137     ?     13.6023+-0.1596        ?
   switch-string-big-length-tower-var                20.2915+-0.4313           20.2835+-0.1296        
   switch-string-length-tower-var                    15.6263+-0.2468     ?     15.7563+-0.2066        ?
   switch-string-length-tower                        13.7559+-1.2457           13.2903+-0.3945          might be 1.0350x faster
   switch-string-short                               13.1050+-0.1585     ?     13.1509+-0.1871        ?
   switch                                            12.7249+-0.1926     ?     13.0591+-0.3772        ? might be 1.0263x slower
   tear-off-arguments-simple                          3.7993+-0.1889            3.6196+-0.1922          might be 1.0496x faster
   tear-off-arguments                                 4.9165+-0.1672     ?      5.0852+-0.4231        ? might be 1.0343x slower
   temporal-structure                                12.8182+-0.8732           12.2893+-0.3858          might be 1.0430x faster
   to-int32-boolean                                  14.1067+-0.2110           13.9358+-0.1953          might be 1.0123x faster
   try-catch-get-by-val-cloned-arguments             14.9554+-0.4873     ?     14.9939+-0.4124        ?
   try-catch-get-by-val-direct-arguments              6.8453+-0.2236     ?      6.8847+-0.8320        ?
   try-catch-get-by-val-scoped-arguments              8.0800+-0.7919     ?      8.4574+-1.4340        ? might be 1.0467x slower
   typed-array-get-set-by-val-profiling              33.5809+-1.7771           33.3000+-1.0689        
   undefined-property-access                        342.3951+-3.3096     ?    343.3002+-4.3138        ?
   undefined-test                                     3.1656+-0.1076     ?      3.1666+-0.0653        ?
   unprofiled-licm                                   24.1632+-1.4573           23.5682+-1.4026          might be 1.0252x faster
   varargs-call                                      15.0940+-0.4109           15.0931+-0.3372        
   varargs-construct-inline                          28.5719+-0.8833           27.9885+-0.6923          might be 1.0208x faster
   varargs-construct                                 22.8814+-0.6321     ?     22.9266+-0.8839        ?
   varargs-inline                                     9.7843+-0.8408            9.3125+-0.0553          might be 1.0507x faster
   varargs-strict-mode                               10.0411+-0.1667     ?     10.6716+-1.1066        ? might be 1.0628x slower
   varargs                                           10.1121+-0.1288     ?     10.1956+-0.3238        ?
   weird-inlining-const-prop                          3.5248+-0.3674            3.4598+-0.2392          might be 1.0188x faster

   &lt;geometric&gt;                                        8.9636+-0.0314            8.9578+-0.0215          might be 1.0007x faster

                                                        TipOfTree               DoubleRealUse                                   
AsmBench:
   bigfib.cpp                                       518.8040+-49.8107         498.0255+-2.6855          might be 1.0417x faster
   cray.c                                           431.3710+-12.6573         428.1437+-3.4040        
   dry.c                                            488.6579+-8.1970     ?    497.2350+-21.7451       ? might be 1.0176x slower
   FloatMM.c                                        722.0693+-1.6528     ?    722.1525+-2.0219        ?
   gcc-loops.cpp                                   4093.8066+-12.0332    ?   4196.5155+-255.2997      ? might be 1.0251x slower
   n-body.c                                         973.4665+-6.1992     ?    991.8999+-47.6840       ? might be 1.0189x slower
   Quicksort.c                                      424.1171+-2.0359          423.2583+-2.4650        
   stepanov_container.cpp                          3608.2825+-45.7520        3598.2685+-17.9705       
   Towers.c                                         256.3579+-2.6343          256.2805+-1.2721        

   &lt;geometric&gt;                                      792.3100+-8.2953     ?    793.0379+-6.8061        ? might be 1.0009x slower

                                                        TipOfTree               DoubleRealUse                                   
CompressionBench:
   huffman                                          355.3179+-1.9686     !    386.2188+-2.7035        ! definitely 1.0870x slower
   arithmetic-simple                                372.7928+-13.6699         369.6384+-6.8861        
   arithmetic-precise                               284.4393+-3.4096     ?    284.6909+-2.7542        ?
   arithmetic-complex-precise                       282.0315+-1.6502     ?    282.8636+-2.9708        ?
   arithmetic-precise-order-0                       382.1066+-18.8638         373.7717+-5.3831          might be 1.0223x faster
   arithmetic-precise-order-1                       331.4238+-4.2569     ?    333.2034+-2.5252        ?
   arithmetic-precise-order-2                       367.3392+-5.2870          367.0187+-5.1677        
   arithmetic-simple-order-1                        427.1547+-3.1452     ?    427.6714+-5.0059        ?
   arithmetic-simple-order-2                        471.0651+-3.6067     ?    473.0229+-5.3327        ?
   lz-string                                        311.6233+-4.3969     ?    314.5848+-2.0450        ?

   &lt;geometric&gt;                                      354.0521+-2.9362     ?    356.7875+-1.4017        ? might be 1.0077x slower

                                                        TipOfTree               DoubleRealUse                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   62.2416+-0.2800           62.2058+-0.1711          might be 1.0006x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100060</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-05 21:48:03 -0700</bug_when>
    <thetext>Ooops - of course!  This does need to handle ordinary double conversion.  You could have (Int32:1) + (Double:2).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100061</commentid>
    <comment_count>6</comment_count>
      <attachid>254406</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-05 22:02:50 -0700</bug_when>
    <thetext>Created attachment 254406
better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100062</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-05 22:32:28 -0700</bug_when>
    <thetext>This isn&apos;t a speed-up on box2d, the benchmark it was targeting.  Not a slow-down, either.  It is a speed-up on the microbenchmark.  I think it&apos;s probably worth landing on the grounds that we have a microbenchmark speed-up and no slow downs.


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 (r185277)
&quot;DoubleRealUse&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r185277)

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               DoubleRealUse                                   
SunSpider:
   3d-cube                                            5.2026+-0.1018     ?      5.2321+-0.1275        ?
   3d-morph                                           5.8165+-0.0678            5.8164+-0.1013        
   3d-raytrace                                        6.5668+-0.0382     ?      6.5899+-0.0678        ?
   access-binary-trees                                2.3927+-0.0840     ?      2.4734+-0.2429        ? might be 1.0337x slower
   access-fannkuch                                    6.3230+-0.0855            6.2534+-0.1414          might be 1.0111x faster
   access-nbody                                       2.9377+-0.0715     ?      3.1802+-0.3930        ? might be 1.0825x slower
   access-nsieve                                      3.5073+-0.1743            3.4458+-0.0727          might be 1.0178x faster
   bitops-3bit-bits-in-byte                           1.6018+-0.0227     ?      1.7095+-0.1716        ? might be 1.0673x slower
   bitops-bits-in-byte                                3.7928+-0.2100     ?      4.0126+-0.4482        ? might be 1.0579x slower
   bitops-bitwise-and                                 2.1962+-0.1567     ?      2.3123+-0.3010        ? might be 1.0529x slower
   bitops-nsieve-bits                                 3.2804+-0.0291     ?      3.3884+-0.2821        ? might be 1.0329x slower
   controlflow-recursive                              3.3219+-0.8031            2.9244+-0.0896          might be 1.1359x faster
   crypto-aes                                         4.7254+-0.2488            4.6718+-0.0706          might be 1.0115x faster
   crypto-md5                                         2.9290+-0.2674            2.7732+-0.1089          might be 1.0562x faster
   crypto-sha1                                        3.9234+-0.3411            3.6300+-0.2891          might be 1.0808x faster
   date-format-tofte                                  9.1747+-0.0895     ?      9.5341+-0.4467        ? might be 1.0392x slower
   date-format-xparb                                  5.9039+-0.1356     ?      5.9816+-0.2447        ? might be 1.0132x slower
   math-cordic                                        3.2038+-0.0769     ?      3.4410+-0.4478        ? might be 1.0740x slower
   math-partial-sums                                  6.0313+-0.8628            5.8447+-0.7282          might be 1.0319x faster
   math-spectral-norm                                 2.1651+-0.1260     ?      2.4008+-0.6643        ? might be 1.1089x slower
   regexp-dna                                         7.5648+-0.1991     ?      8.2447+-1.5835        ? might be 1.0899x slower
   string-base64                                      5.3027+-0.7949            5.0621+-0.2743          might be 1.0475x faster
   string-fasta                                       7.0802+-0.5843     ?      7.5710+-1.5564        ? might be 1.0693x slower
   string-tagcloud                                   10.3597+-0.4720     ?     10.4562+-1.4354        ?
   string-unpack-code                                20.2360+-0.4666     ?     20.9112+-1.0052        ? might be 1.0334x slower
   string-validate-input                              6.0770+-0.1384            5.9775+-0.0906          might be 1.0166x faster

   &lt;arithmetic&gt;                                       5.4468+-0.0751     ?      5.5322+-0.1216        ? might be 1.0157x slower

                                                        TipOfTree               DoubleRealUse                                   
LongSpider:
   3d-cube                                          901.3462+-3.1764     ?    906.6036+-9.7589        ?
   3d-morph                                        1531.9673+-7.8483     ?   1535.1906+-14.7097       ?
   3d-raytrace                                      732.7443+-67.9542         711.1558+-8.1386          might be 1.0304x faster
   access-binary-trees                             1002.6327+-6.7249     ?   1010.8462+-11.2496       ?
   access-fannkuch                                  348.3668+-2.8039     ?    370.5251+-48.1705       ? might be 1.0636x slower
   access-nbody                                     591.0437+-2.8346     !    606.8278+-1.7720        ! definitely 1.0267x slower
   access-nsieve                                    483.1322+-10.4077         481.3862+-7.6489        
   bitops-3bit-bits-in-byte                          45.3797+-1.4785           44.1983+-0.8650          might be 1.0267x faster
   bitops-bits-in-byte                              107.0593+-19.3226         101.1230+-3.3281          might be 1.0587x faster
   bitops-nsieve-bits                               421.9225+-1.9395     ?    425.0806+-4.0026        ?
   controlflow-recursive                            487.4026+-9.0812     ?    503.3051+-11.4977       ? might be 1.0326x slower
   crypto-aes                                       704.4706+-7.9363     ?    705.3912+-5.1696        ?
   crypto-md5                                       535.2856+-5.6195     ^    526.0693+-2.9380        ^ definitely 1.0175x faster
   crypto-sha1                                      687.7664+-15.1019         683.0371+-9.4787        
   date-format-tofte                                758.3883+-48.0466         722.0837+-11.5790         might be 1.0503x faster
   date-format-xparb                                827.0798+-17.9376    ^    795.4028+-10.3726       ^ definitely 1.0398x faster
   hash-map                                         183.7496+-6.4762     ?    185.3465+-4.9724        ?
   math-cordic                                      579.7266+-3.3025          576.3393+-2.9517        
   math-partial-sums                                508.6323+-7.2567     ?    510.4797+-3.4359        ?
   math-spectral-norm                               573.7021+-8.8469          573.0007+-14.9089       
   string-base64                                    412.0036+-7.0183          409.2138+-2.7316        
   string-fasta                                     436.7411+-5.2999     ^    426.0829+-4.8414        ^ definitely 1.0250x faster
   string-tagcloud                                  196.4525+-5.3208     ?    198.1056+-2.7451        ?

   &lt;geometric&gt;                                      460.2311+-2.9455          458.3733+-2.0976          might be 1.0041x faster

                                                        TipOfTree               DoubleRealUse                                   
V8Spider:
   crypto                                            56.4698+-1.3224     ?     56.8267+-2.3474        ?
   deltablue                                         99.6978+-4.1181     ?    101.5317+-2.3149        ? might be 1.0184x slower
   earley-boyer                                      48.6385+-1.5300     ?     49.6343+-1.8269        ? might be 1.0205x slower
   raytrace                                          40.9377+-1.7334     ?     42.8641+-2.1497        ? might be 1.0471x slower
   regexp                                            82.4089+-2.6578     ?     84.1447+-2.5198        ? might be 1.0211x slower
   richards                                          80.0120+-0.8285           77.9913+-2.8881          might be 1.0259x faster
   splay                                             40.7305+-1.5525           40.5649+-1.9596        

   &lt;geometric&gt;                                       60.6031+-0.4654     ?     61.3094+-0.8494        ? might be 1.0117x slower

                                                        TipOfTree               DoubleRealUse                                   
Octane:
   encrypt                                           0.20957+-0.01040          0.20655+-0.00595         might be 1.0147x faster
   decrypt                                           3.61027+-0.04016    ?     3.61537+-0.04675       ?
   deltablue                                x2       0.19497+-0.00142    ?     0.19598+-0.00192       ?
   earley                                            0.39424+-0.00145    ?     0.39456+-0.00355       ?
   boyer                                             5.16339+-0.03958    ?     5.18243+-0.02854       ?
   navier-stokes                            x2       5.20905+-0.01719    ?     5.21560+-0.05911       ?
   raytrace                                 x2       1.30908+-0.05103          1.29249+-0.03800         might be 1.0128x faster
   richards                                 x2       0.12915+-0.00147          0.12795+-0.00107       
   splay                                    x2       0.40275+-0.00362    ?     0.40608+-0.00327       ?
   regexp                                   x2      31.83571+-0.43011         31.68957+-0.22374       
   pdfjs                                    x2      42.85785+-0.51927         42.79992+-0.20894       
   mandreel                                 x2      51.12459+-0.25382    ?    51.51715+-1.20686       ?
   gbemu                                    x2      42.87791+-0.75220    ?    43.18229+-0.55683       ?
   closure                                           0.56751+-0.00422          0.56475+-0.00248       
   jquery                                            7.42726+-0.06766          7.41816+-0.04312       
   box2d                                    x2      11.89483+-0.06173    ?    12.36935+-1.05722       ? might be 1.0399x slower
   zlib                                     x2     393.68656+-15.36351   ?   398.11609+-2.68836       ? might be 1.0113x slower
   typescript                               x2     827.82385+-12.76021       819.13090+-11.73114        might be 1.0106x faster

   &lt;geometric&gt;                                       6.61643+-0.01791    ?     6.63077+-0.04745       ? might be 1.0022x slower

                                                        TipOfTree               DoubleRealUse                                   
Kraken:
   ai-astar                                          235.417+-1.696      ?     237.390+-3.275         ?
   audio-beat-detection                               82.699+-0.585             82.205+-0.395         
   audio-dft                                         122.845+-3.596      ?     124.097+-4.846         ? might be 1.0102x slower
   audio-fft                                          72.093+-2.011             70.856+-1.825           might be 1.0175x faster
   audio-oscillator                                   78.603+-1.761      ?      79.445+-2.016         ? might be 1.0107x slower
   imaging-darkroom                                  107.122+-1.776            106.082+-3.619         
   imaging-desaturate                                 63.598+-0.746      ?      64.304+-1.936         ? might be 1.0111x slower
   imaging-gaussian-blur                             114.473+-6.134            110.562+-1.749           might be 1.0354x faster
   json-parse-financial                               47.145+-1.742      ?      48.637+-2.133         ? might be 1.0316x slower
   json-stringify-tinderbox                           29.260+-2.305      ?      30.373+-1.992         ? might be 1.0381x slower
   stanford-crypto-aes                                59.196+-1.693             58.655+-0.994         
   stanford-crypto-ccm                                48.655+-1.480             48.544+-1.294         
   stanford-crypto-pbkdf2                            109.971+-0.594      ?     110.977+-2.249         ?
   stanford-crypto-sha256-iterative                   44.322+-2.093             43.471+-2.103           might be 1.0196x faster

   &lt;arithmetic&gt;                                       86.814+-0.683      ?      86.828+-0.350         ? might be 1.0002x slower

                                                        TipOfTree               DoubleRealUse                                   
JSRegress:
   abs-boolean                                        2.7649+-0.1183            2.6873+-0.0324          might be 1.0289x faster
   adapt-to-double-divide                            16.7288+-0.3671     ?     16.8645+-0.4734        ?
   aliased-arguments-getbyval                         1.4421+-0.2302            1.3382+-0.1006          might be 1.0777x faster
   allocate-big-object                                2.9254+-0.1073     ?      3.0038+-0.2455        ? might be 1.0268x slower
   arguments-named-and-reflective                    13.0861+-1.3456           12.9819+-1.0046        
   arguments-out-of-bounds                           14.5733+-0.2316     ?     14.8540+-0.5192        ? might be 1.0193x slower
   arguments-strict-mode                             10.9566+-0.3296     ?     11.8086+-1.3412        ? might be 1.0778x slower
   arguments                                         10.1036+-0.7402     ?     10.5160+-1.5001        ? might be 1.0408x slower
   arity-mismatch-inlining                            0.9017+-0.0483            0.8956+-0.0354        
   array-access-polymorphic-structure                 7.0216+-0.2172     ?      7.2062+-0.3152        ? might be 1.0263x slower
   array-nonarray-polymorhpic-access                 32.8719+-1.8345     ?     32.8955+-0.6989        ?
   array-prototype-every                             87.9524+-4.0077           86.7491+-2.5256          might be 1.0139x faster
   array-prototype-forEach                           87.0063+-1.2138           83.5326+-2.5129          might be 1.0416x faster
   array-prototype-map                               92.6319+-1.4502     ?     96.5256+-7.7157        ? might be 1.0420x slower
   array-prototype-reduce                            81.8702+-0.9279     ?     82.1413+-2.8818        ?
   array-prototype-reduceRight                       82.0904+-1.8855           79.6058+-1.8309          might be 1.0312x faster
   array-prototype-some                              88.2260+-2.6270           86.4564+-3.8683          might be 1.0205x faster
   array-splice-contiguous                           43.8490+-2.6188     ?     45.0930+-0.9397        ? might be 1.0284x slower
   array-with-double-add                              4.3463+-0.1342            4.3461+-0.1812        
   array-with-double-increment                        3.4650+-0.2279            3.2715+-0.0469          might be 1.0591x faster
   array-with-double-mul-add                          5.2054+-0.0482     ?      5.7114+-1.2200        ? might be 1.0972x slower
   array-with-double-sum                              3.7505+-0.3875            3.4980+-0.2291          might be 1.0722x faster
   array-with-int32-add-sub                           6.8856+-0.1234            6.8135+-0.0396          might be 1.0106x faster
   array-with-int32-or-double-sum                     3.4651+-0.0675            3.4024+-0.0487          might be 1.0184x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     37.7840+-2.3381           37.5572+-1.7134        
   ArrayBuffer-DataView-alloc-long-lived             14.2959+-0.3899     !     16.5704+-1.6687        ! definitely 1.1591x slower
   ArrayBuffer-Int32Array-byteOffset                  4.2788+-0.5260            4.0119+-0.3323          might be 1.0665x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     38.1942+-0.6386     ?     39.5656+-1.6971        ? might be 1.0359x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.2982+-0.5866     ?     22.7830+-1.5175        ? might be 1.0217x slower
   ArrayBuffer-Int8Array-alloc-long-lived            13.7660+-0.4629     ?     14.6244+-1.8022        ? might be 1.0624x slower
   ArrayBuffer-Int8Array-alloc                       11.5650+-1.3796           10.6271+-0.4835          might be 1.0883x faster
   asmjs_bool_bug                                     7.7279+-0.0555     ?      7.8003+-0.1000        ?
   assign-custom-setter-polymorphic                   3.4038+-0.1668     ?      3.4591+-0.3928        ? might be 1.0162x slower
   assign-custom-setter                               4.5816+-0.0447     ?      4.6850+-0.1296        ? might be 1.0226x slower
   basic-set                                         10.4003+-1.9170           10.0424+-1.1441          might be 1.0356x faster
   big-int-mul                                        4.1228+-0.0472     !      4.2523+-0.0258        ! definitely 1.0314x slower
   boolean-test                                       3.2338+-0.1223     ?      3.2371+-0.2382        ?
   branch-fold                                        4.4364+-0.5021            4.3280+-0.5857          might be 1.0250x faster
   branch-on-string-as-boolean                       20.9379+-0.8049           20.7851+-1.1391        
   by-val-generic                                     8.4496+-0.6162            8.4256+-0.4680        
   call-spread-apply                                 30.0473+-1.2583           29.6607+-1.0834          might be 1.0130x faster
   call-spread-call                                  25.8841+-1.6990     ?     26.4585+-1.1217        ? might be 1.0222x slower
   captured-assignments                               0.5249+-0.0237     ?      0.5555+-0.0702        ? might be 1.0582x slower
   cast-int-to-double                                 5.3745+-0.1502            5.3635+-0.1511        
   cell-argument                                      8.7243+-0.2841     ?      8.8645+-0.5968        ? might be 1.0161x slower
   cfg-simplify                                       2.9988+-0.2696            2.8474+-0.0431          might be 1.0532x faster
   chain-getter-access                                9.1357+-0.0920     ?      9.6206+-0.8220        ? might be 1.0531x slower
   cmpeq-obj-to-obj-other                            12.1787+-0.7837     ?     12.5842+-1.9518        ? might be 1.0333x slower
   constant-test                                      5.0123+-0.0253     ?      5.0671+-0.0893        ? might be 1.0109x slower
   create-lots-of-functions                          11.6797+-0.4007           11.5581+-0.3368          might be 1.0105x faster
   cse-new-array-buffer                               2.7593+-0.2821            2.6275+-0.1854          might be 1.0502x faster
   cse-new-array                                      2.6628+-0.1293            2.6271+-0.0380          might be 1.0136x faster
   DataView-custom-properties                        43.5056+-1.6841     ?     43.8673+-2.0971        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.6581+-0.1004            0.6034+-0.0959          might be 1.0907x faster
   delay-tear-off-arguments-strictmode               15.0502+-1.0942           14.3447+-0.2251          might be 1.0492x faster
   deltablue-varargs                                210.5859+-4.5215     ?    210.9005+-2.1066        ?
   destructuring-arguments                           17.6674+-0.4716           17.5642+-0.2715        
   destructuring-swap                                 5.3977+-0.3946            5.1004+-0.0213          might be 1.0583x faster
   direct-arguments-getbyval                          1.2996+-0.0454     ?      1.3575+-0.1948        ? might be 1.0446x slower
   div-boolean-double                                 5.3299+-0.1547            5.2974+-0.0672        
   div-boolean                                        7.8198+-0.0110     !      7.9242+-0.0722        ! definitely 1.0134x slower
   double-get-by-val-out-of-bounds                    4.6955+-0.1761            4.6042+-0.0702          might be 1.0198x faster
   double-pollution-getbyval                          8.9615+-0.1542            8.9108+-0.0268        
   double-pollution-putbyoffset                       4.6159+-0.3783            4.4319+-0.1912          might be 1.0415x faster
   double-real-use                                   30.7680+-1.4014     ^     27.8455+-0.5449        ^ definitely 1.1050x faster
   double-to-int32-typed-array-no-inline              2.5655+-0.1732     ?      2.6180+-0.0494        ? might be 1.0205x slower
   double-to-int32-typed-array                        2.1217+-0.2726     ?      2.2112+-0.3140        ? might be 1.0422x slower
   double-to-uint32-typed-array-no-inline             2.9482+-0.2888            2.6280+-0.1780          might be 1.1218x faster
   double-to-uint32-typed-array                       2.0793+-0.0613     ?      2.3433+-0.2544        ? might be 1.1270x slower
   elidable-new-object-dag                           43.6029+-1.9667           43.4862+-2.7154        
   elidable-new-object-roflcopter                    44.9545+-1.1542           44.5726+-1.6791        
   elidable-new-object-then-call                     40.2013+-1.1971           39.4508+-1.2949          might be 1.0190x faster
   elidable-new-object-tree                          46.7319+-1.7593           46.4502+-1.6972        
   empty-string-plus-int                              5.5827+-0.1175     ?      5.6143+-0.1224        ?
   emscripten-cube2hash                              38.8370+-0.9669     ?     39.3053+-1.6712        ? might be 1.0121x slower
   exit-length-on-plain-object                       13.9146+-0.1349     ?     14.5843+-1.4161        ? might be 1.0481x slower
   external-arguments-getbyval                        1.2535+-0.0361     ?      1.3282+-0.0660        ? might be 1.0596x slower
   external-arguments-putbyval                        2.3966+-0.0575     ?      2.4865+-0.1349        ? might be 1.0375x slower
   fixed-typed-array-storage-var-index                1.3495+-0.1680            1.2178+-0.0202          might be 1.1081x faster
   fixed-typed-array-storage                          0.9326+-0.0452     ?      0.9500+-0.0834        ? might be 1.0187x slower
   Float32Array-matrix-mult                           4.6297+-0.2221            4.6053+-0.1801        
   Float32Array-to-Float64Array-set                  53.5590+-2.4331     !     57.6923+-1.2496        ! definitely 1.0772x slower
   Float64Array-alloc-long-lived                     87.8797+-2.9439           87.8154+-1.1353        
   Float64Array-to-Int16Array-set                    68.9527+-1.6965     ?     69.8889+-1.4584        ? might be 1.0136x slower
   fold-double-to-int                                13.6014+-0.1636     ?     13.8258+-0.2389        ? might be 1.0165x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.4222+-1.0423     ?     10.9725+-1.0662        ? might be 1.0528x slower
   fold-get-by-id-to-multi-get-by-offset             10.1340+-1.3274     ?     11.3405+-1.0545        ? might be 1.1191x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.7424+-1.1058     ?     10.3923+-1.3939        ? might be 1.0667x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.2607+-1.1588     ?      9.6464+-0.6475        ? might be 1.0416x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.0247+-0.8734            9.3558+-0.9142          might be 1.0715x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.2358+-0.6188            6.8994+-1.6665          might be 1.1937x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     10.0655+-0.4985            9.9585+-0.5643          might be 1.0108x faster
   fold-put-by-id-to-multi-put-by-offset             10.5042+-1.2973     ?     10.7074+-1.0722        ? might be 1.0193x slower
   fold-put-structure                                 7.6204+-0.6905            6.9910+-1.5184          might be 1.0900x faster
   for-of-iterate-array-entries                       4.7410+-0.2829            4.6010+-0.1380          might be 1.0304x faster
   for-of-iterate-array-keys                          3.9753+-0.5735            3.8818+-0.2540          might be 1.0241x faster
   for-of-iterate-array-values                        3.7312+-0.2276     ?      3.7704+-0.3525        ? might be 1.0105x slower
   fround                                            21.1287+-0.3732     ?     21.3750+-0.7753        ? might be 1.0117x slower
   ftl-library-inlining-dataview                     67.1286+-5.5787           66.2189+-1.6194          might be 1.0137x faster
   ftl-library-inlining                              75.4043+-19.0764          74.2172+-18.5748         might be 1.0160x faster
   function-dot-apply                                 2.2896+-0.0569            2.2804+-0.0748        
   function-test                                      2.9845+-0.1116            2.9187+-0.0392          might be 1.0226x faster
   function-with-eval                               103.9167+-3.0970          102.5265+-2.6564          might be 1.0136x faster
   gcse-poly-get-less-obvious                        19.1483+-1.3385           18.5897+-0.6445          might be 1.0300x faster
   gcse-poly-get                                     20.5992+-1.7924     ?     20.8334+-1.6266        ? might be 1.0114x slower
   gcse                                               4.5824+-0.5026            4.5014+-0.1645          might be 1.0180x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.0034+-0.2997            2.8690+-0.1050          might be 1.0468x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0474+-0.1040            6.0246+-0.0465        
   get-by-id-chain-from-try-block                     7.0615+-0.6295     ?      7.4285+-1.1409        ? might be 1.0520x slower
   get-by-id-check-structure-elimination              5.2528+-0.2095     ?      5.2793+-0.1862        ?
   get-by-id-proto-or-self                           18.5943+-0.9645     ?     19.7433+-1.2489        ? might be 1.0618x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.0156+-0.1075            2.9733+-0.0406          might be 1.0142x faster
   get-by-id-self-or-proto                           18.7160+-0.8363     ?     19.4611+-2.3150        ? might be 1.0398x slower
   get-by-val-out-of-bounds                           4.6423+-0.2730     ?      4.8080+-0.6054        ? might be 1.0357x slower
   get_callee_monomorphic                             3.0088+-0.1199     ?      3.0387+-0.2374        ?
   get_callee_polymorphic                             3.7929+-0.1884     ?      3.9277+-0.3821        ? might be 1.0355x slower
   getter-no-activation                               5.1326+-0.2736            5.0011+-0.1349          might be 1.0263x faster
   getter-prototype                                  14.7728+-0.2277     ?     15.4115+-1.1204        ? might be 1.0432x slower
   getter-richards                                  127.0997+-3.0202          125.9145+-3.4852        
   getter                                             5.8917+-0.5951     ?      5.9327+-0.7877        ?
   global-var-const-infer-fire-from-opt               0.9563+-0.0361     ?      0.9591+-0.0341        ?
   global-var-const-infer                             1.0167+-0.1334            0.9040+-0.0945          might be 1.1246x faster
   HashMap-put-get-iterate-keys                      30.8184+-1.8675     ?     31.3241+-0.6596        ? might be 1.0164x slower
   HashMap-put-get-iterate                           33.1590+-1.6777           32.3455+-0.9040          might be 1.0252x faster
   HashMap-string-put-get-iterate                    32.4650+-2.0202           32.3478+-1.6796        
   hoist-make-rope                                   12.4580+-0.5100     ?     12.7791+-0.6886        ? might be 1.0258x slower
   hoist-poly-check-structure-effectful-loop   
                                                      5.1674+-0.0994            5.0603+-0.0716          might be 1.0212x faster
   hoist-poly-check-structure                         3.8571+-0.3347     ?      4.0552+-0.4108        ? might be 1.0514x slower
   imul-double-only                                   9.1540+-1.1312            9.0688+-0.0631        
   imul-int-only                                      9.9065+-0.1595     ?     10.6442+-0.6550        ? might be 1.0745x slower
   imul-mixed                                         8.4793+-0.4060            8.4738+-0.3026        
   in-four-cases                                     22.1650+-0.2572     ?     22.4874+-0.5091        ? might be 1.0145x slower
   in-one-case-false                                 11.1189+-0.1018     ?     11.2161+-0.1401        ?
   in-one-case-true                                  11.0849+-0.0919     ?     11.0880+-0.0925        ?
   in-two-cases                                      11.9036+-0.4053           11.8037+-0.3286        
   indexed-properties-in-objects                      3.1969+-0.2791            3.0449+-0.1761          might be 1.0499x faster
   infer-closure-const-then-mov-no-inline             4.1823+-0.3042            4.0704+-0.2587          might be 1.0275x faster
   infer-closure-const-then-mov                      19.7880+-0.4627     ?     19.9517+-0.1772        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     13.5107+-1.2799     ?     14.3783+-1.5306        ? might be 1.0642x slower
   infer-closure-const-then-put-to-scope             23.3468+-1.8319     ?     23.3590+-1.8271        ?
   infer-closure-const-then-reenter-no-inline   
                                                     54.3228+-0.4435     ?     55.3523+-1.8673        ? might be 1.0190x slower
   infer-closure-const-then-reenter                  23.1040+-0.8665           22.3345+-1.1557          might be 1.0345x faster
   infer-constant-global-property                     3.6313+-0.0647     ?      3.7094+-0.1394        ? might be 1.0215x slower
   infer-constant-property                            2.7998+-0.0744     ?      2.8898+-0.2817        ? might be 1.0321x slower
   infer-one-time-closure-ten-vars                   12.5927+-0.1853     ?     12.6359+-0.3417        ?
   infer-one-time-closure-two-vars                   12.5545+-0.5719     ?     13.2167+-1.7103        ? might be 1.0527x slower
   infer-one-time-closure                            11.8448+-0.2582     ?     12.0566+-0.3985        ? might be 1.0179x slower
   infer-one-time-deep-closure                       22.1726+-1.7452           21.7840+-1.0947          might be 1.0178x faster
   inline-arguments-access                            5.0644+-0.6172            4.7699+-0.1427          might be 1.0617x faster
   inline-arguments-aliased-access                    4.7702+-0.1138     ?      4.8065+-0.3694        ?
   inline-arguments-local-escape                      4.9061+-0.5369            4.8212+-0.3084          might be 1.0176x faster
   inline-get-scoped-var                              4.9820+-0.2706            4.9467+-0.1727        
   inlined-put-by-id-transition                      11.6175+-0.2839     ?     11.8226+-0.5680        ? might be 1.0177x slower
   int-or-other-abs-then-get-by-val                   5.0402+-0.1016     ?      5.1194+-0.2382        ? might be 1.0157x slower
   int-or-other-abs-zero-then-get-by-val             17.5608+-0.3821     ?     18.4869+-1.1515        ? might be 1.0527x slower
   int-or-other-add-then-get-by-val                   4.3645+-0.0213     ?      4.4022+-0.0834        ?
   int-or-other-add                                   5.4037+-0.0213     ?      5.4917+-0.1858        ? might be 1.0163x slower
   int-or-other-div-then-get-by-val                   4.3656+-0.1768            4.2928+-0.0461          might be 1.0170x faster
   int-or-other-max-then-get-by-val                   4.3445+-0.0106     ?      4.4605+-0.1728        ? might be 1.0267x slower
   int-or-other-min-then-get-by-val                   5.6239+-3.0714            4.3383+-0.0458          might be 1.2963x faster
   int-or-other-mod-then-get-by-val                   4.0172+-0.1071     ?      4.0636+-0.2126        ? might be 1.0115x slower
   int-or-other-mul-then-get-by-val                   4.9749+-2.3066            4.0291+-0.1592          might be 1.2347x faster
   int-or-other-neg-then-get-by-val                   4.8075+-0.0211     ?      4.8460+-0.1269        ?
   int-or-other-neg-zero-then-get-by-val             18.0243+-0.2209     ^     17.3781+-0.1907        ^ definitely 1.0372x faster
   int-or-other-sub-then-get-by-val                   4.4643+-0.1497            4.4471+-0.0975        
   int-or-other-sub                                   3.7574+-0.2765     ?      3.7653+-0.1458        ?
   int-overflow-local                                 4.5862+-0.0427     ?      4.6908+-0.1811        ? might be 1.0228x slower
   Int16Array-alloc-long-lived                       52.9876+-1.1439     ?     53.2183+-1.2539        ?
   Int16Array-bubble-sort-with-byteLength            20.2855+-0.1971     ?     20.4377+-0.3623        ?
   Int16Array-bubble-sort                            20.5279+-1.2312     ?     21.3903+-1.2170        ? might be 1.0420x slower
   Int16Array-load-int-mul                            1.6444+-0.1842            1.5708+-0.0672          might be 1.0469x faster
   Int16Array-to-Int32Array-set                      53.7147+-1.8504     !     58.9365+-0.5705        ! definitely 1.0972x slower
   Int32Array-alloc-large                            24.4908+-0.9589           24.2937+-1.3980        
   Int32Array-alloc-long-lived                       63.9952+-1.9592           63.8105+-0.8235        
   Int32Array-alloc                                   3.4477+-0.0970     ?      3.8851+-0.6322        ? might be 1.1268x slower
   Int32Array-Int8Array-view-alloc                    7.1173+-0.8781     ?      7.5314+-0.8287        ? might be 1.0582x slower
   int52-spill                                        5.7375+-0.0336     ?      5.7817+-0.0431        ?
   Int8Array-alloc-long-lived                        48.9581+-1.6839           48.3344+-1.1704          might be 1.0129x faster
   Int8Array-load-with-byteLength                     3.6595+-0.2221            3.4198+-0.0466          might be 1.0701x faster
   Int8Array-load                                     3.7262+-0.3340            3.5915+-0.3959          might be 1.0375x faster
   integer-divide                                    11.2612+-0.7858     ?     11.7140+-1.6091        ? might be 1.0402x slower
   integer-modulo                                     2.1007+-0.0379     ?      2.1104+-0.0854        ?
   is-boolean-fold-tricky                             4.5181+-0.0868     ?      4.6575+-0.2668        ? might be 1.0308x slower
   is-boolean-fold                                    2.9624+-0.0913            2.9288+-0.0479          might be 1.0115x faster
   is-function-fold-tricky-internal-function   
                                                     12.0374+-0.3402     ?     12.0951+-0.0912        ?
   is-function-fold-tricky                            4.6332+-0.1252     ?      4.7192+-0.1993        ? might be 1.0185x slower
   is-function-fold                                   2.9629+-0.0358     ?      2.9919+-0.1251        ?
   is-number-fold-tricky                              4.8808+-0.5293            4.5818+-0.2205          might be 1.0653x faster
   is-number-fold                                     3.1746+-0.3553            3.0692+-0.3794          might be 1.0343x faster
   is-object-or-null-fold-functions                   3.1336+-0.3002     ?      3.3345+-0.4106        ? might be 1.0641x slower
   is-object-or-null-fold-less-tricky                 4.5705+-0.0820     ?      4.6808+-0.2595        ? might be 1.0241x slower
   is-object-or-null-fold-tricky                      6.7696+-0.1363            6.7528+-0.1369        
   is-object-or-null-fold                             2.9506+-0.0724     ?      2.9688+-0.0654        ?
   is-object-or-null-trickier-function                4.6650+-0.1133     ?      5.0236+-0.9377        ? might be 1.0769x slower
   is-object-or-null-trickier-internal-function   
                                                     12.6900+-0.0736           12.5703+-0.0970        
   is-object-or-null-tricky-function                  4.5767+-0.0654     ?      4.6719+-0.0815        ? might be 1.0208x slower
   is-object-or-null-tricky-internal-function   
                                                      9.4711+-0.3842     ?      9.4871+-0.3143        ?
   is-string-fold-tricky                              4.5151+-0.1069     ?      4.7314+-0.4505        ? might be 1.0479x slower
   is-string-fold                                     2.8972+-0.0228     ?      2.9131+-0.0363        ?
   is-undefined-fold-tricky                           3.8040+-0.0391     ?      3.8277+-0.0945        ?
   is-undefined-fold                                  3.1521+-0.3533            3.1068+-0.3102          might be 1.0146x faster
   large-int-captured                                 4.9330+-0.2099            4.8893+-0.1173        
   large-int-neg                                     16.7028+-0.6964           16.4651+-0.7936          might be 1.0144x faster
   large-int                                         14.7038+-0.2219     ?     14.7371+-0.2079        ?
   load-varargs-elimination                          23.3787+-1.2534           23.3649+-1.1365        
   logical-not-weird-types                            3.3903+-0.1418     ?      3.3911+-0.1763        ?
   logical-not                                        4.6350+-0.0335     ?      4.7909+-0.2647        ? might be 1.0336x slower
   lots-of-fields                                    12.6230+-0.2570     ?     13.0515+-2.0007        ? might be 1.0339x slower
   make-indexed-storage                               3.2594+-0.1462            3.1270+-0.2464          might be 1.0423x faster
   make-rope-cse                                     12.3969+-1.2564           12.0170+-1.2601          might be 1.0316x faster
   marsaglia-larger-ints                             36.4939+-0.6195     ?     37.6276+-2.6405        ? might be 1.0311x slower
   marsaglia-osr-entry                               23.1974+-0.9869     ?     23.8764+-1.2779        ? might be 1.0293x slower
   math-with-out-of-bounds-array-values              26.9576+-7.2486           26.6963+-2.3409        
   max-boolean                                        2.5752+-0.1192     ?      2.6243+-0.1996        ? might be 1.0191x slower
   method-on-number                                  17.8790+-0.5505     ?     19.6233+-4.3820        ? might be 1.0976x slower
   min-boolean                                        2.7017+-0.3128            2.5543+-0.0316          might be 1.0577x faster
   minus-boolean-double                               3.2594+-0.1023     ?      3.2607+-0.0934        ?
   minus-boolean                                      2.3998+-0.0362     ?      2.5240+-0.3059        ? might be 1.0518x slower
   misc-strict-eq                                    39.3015+-0.8798     ?     39.3497+-1.0284        ?
   mod-boolean-double                                11.2163+-0.3828           10.9923+-0.1102          might be 1.0204x faster
   mod-boolean                                        8.0257+-0.2461            7.8951+-0.0102          might be 1.0165x faster
   mul-boolean-double                                 3.8599+-0.2596            3.7915+-0.0595          might be 1.0180x faster
   mul-boolean                                        3.0587+-0.2975     ?      3.1560+-0.3996        ? might be 1.0318x slower
   neg-boolean                                        3.2579+-0.0531     ?      3.3897+-0.3999        ? might be 1.0405x slower
   negative-zero-divide                               0.4338+-0.0720            0.4020+-0.0297          might be 1.0789x faster
   negative-zero-modulo                               0.4190+-0.0364            0.4037+-0.0285          might be 1.0378x faster
   negative-zero-negate                               0.4028+-0.0475            0.3781+-0.0223          might be 1.0653x faster
   nested-function-parsing                           39.2493+-0.1189           39.0745+-0.2591        
   new-array-buffer-dead                            113.4927+-2.5656          111.5985+-2.9043          might be 1.0170x faster
   new-array-buffer-push                              7.4875+-0.8834            6.9375+-0.2021          might be 1.0793x faster
   new-array-dead                                    19.3591+-0.5450     ?     19.6083+-0.9396        ? might be 1.0129x slower
   new-array-push                                     6.4486+-0.0638     ?      6.5577+-0.0878        ? might be 1.0169x slower
   no-inline-constructor                             42.6313+-1.8622           41.1036+-1.3199          might be 1.0372x faster
   number-test                                        3.1616+-0.1232            3.1098+-0.0293          might be 1.0167x faster
   object-closure-call                                5.8179+-0.0817     ?      5.9015+-0.3376        ? might be 1.0144x slower
   object-test                                        2.9736+-0.2638            2.8835+-0.0224          might be 1.0313x faster
   obvious-sink-pathology-taken                     146.9525+-11.4995         141.3045+-1.0046          might be 1.0400x faster
   obvious-sink-pathology                           132.6357+-2.3136          132.0987+-1.4803        
   obviously-elidable-new-object                     36.4392+-1.5764           34.8174+-0.9955          might be 1.0466x faster
   plus-boolean-arith                                 2.6580+-0.1305     ?      2.6775+-0.3251        ?
   plus-boolean-double                                3.4882+-0.3784            3.2903+-0.0473          might be 1.0602x faster
   plus-boolean                                       2.4759+-0.0501     ?      2.4855+-0.1152        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.3580+-0.0781     ?      3.3894+-0.0998        ?
   poly-chain-access-different-prototypes             2.8794+-0.3666            2.7379+-0.3033          might be 1.0517x faster
   poly-chain-access-simpler                          3.4207+-0.1002            3.3523+-0.0478          might be 1.0204x faster
   poly-chain-access                                  2.7554+-0.3364            2.6338+-0.0435          might be 1.0462x faster
   poly-stricteq                                     60.9377+-2.1203           59.7648+-0.6538          might be 1.0196x faster
   polymorphic-array-call                             1.4191+-0.0612            1.4129+-0.0448        
   polymorphic-get-by-id                              3.2754+-0.2111            3.2098+-0.0602          might be 1.0204x faster
   polymorphic-put-by-id                             33.7656+-2.4640           32.7787+-1.6756          might be 1.0301x faster
   polymorphic-structure                             16.9566+-5.2977           15.5527+-0.8742          might be 1.0903x faster
   polyvariant-monomorphic-get-by-id                  8.7461+-0.2948     ?      8.7655+-0.2406        ?
   proto-getter-access                                9.4189+-0.1625     ?      9.6491+-0.5598        ? might be 1.0244x slower
   put-by-id-replace-and-transition                   9.5932+-0.0652     ?      9.7232+-0.2593        ? might be 1.0136x slower
   put-by-id-slightly-polymorphic                     2.9339+-0.0970            2.8736+-0.0317          might be 1.0210x faster
   put-by-id                                         13.0500+-0.2385           12.6633+-0.2294          might be 1.0305x faster
   put-by-val-direct                                  0.4187+-0.0619            0.4093+-0.0145          might be 1.0232x faster
   put-by-val-large-index-blank-indexing-type   
                                                     12.5348+-1.2371           12.5184+-1.1894        
   put-by-val-machine-int                             2.8787+-0.1924            2.8392+-0.0354          might be 1.0139x faster
   rare-osr-exit-on-local                            15.3765+-0.7056           15.3342+-0.7004        
   register-pressure-from-osr                        22.1255+-1.1094           21.9197+-1.0250        
   repeat-multi-get-by-offset                        25.2084+-1.4383           24.9320+-1.0521          might be 1.0111x faster
   setter-prototype                                  10.6165+-0.1528     ?     10.6251+-0.0770        ?
   setter                                             6.5298+-0.8744            6.3660+-0.7955          might be 1.0257x faster
   simple-activation-demo                            25.3591+-0.2911     ?     26.1081+-1.5538        ? might be 1.0295x slower
   simple-getter-access                              11.8133+-0.1867     ?     11.8572+-0.3743        ?
   simple-poly-call-nested                            8.3894+-0.7791     ?      8.4436+-0.4108        ?
   simple-poly-call                                   1.3816+-0.1241     ?      1.4088+-0.2056        ? might be 1.0197x slower
   sin-boolean                                       22.4815+-0.8652     ?     22.6965+-0.9251        ?
   singleton-scope                                   62.8346+-1.6408     ?     63.6619+-1.9345        ? might be 1.0132x slower
   sink-function                                     12.3191+-0.3735           12.0288+-0.1749          might be 1.0241x faster
   sink-huge-activation                              19.3323+-0.5815     ?     19.9036+-1.7381        ? might be 1.0296x slower
   sinkable-new-object-dag                           70.9199+-1.2252     ?     71.8415+-3.2129        ? might be 1.0130x slower
   sinkable-new-object-taken                         52.5699+-4.1713           51.9659+-2.8133          might be 1.0116x faster
   sinkable-new-object                               39.8404+-1.0175           38.8383+-0.4756          might be 1.0258x faster
   slow-array-profile-convergence                     2.9380+-0.1308     ?      3.0857+-0.3033        ? might be 1.0503x slower
   slow-convergence                                   2.9697+-0.2788            2.8308+-0.1608          might be 1.0491x faster
   slow-ternaries                                    22.0433+-1.6460           18.9023+-1.9406          might be 1.1662x faster
   sorting-benchmark                                 18.6527+-0.4101     ?     18.8980+-0.3997        ? might be 1.0132x slower
   sparse-conditional                                 1.2979+-0.2126     ?      1.4444+-0.4444        ? might be 1.1129x slower
   splice-to-remove                                  15.6659+-1.0644           15.3494+-0.3104          might be 1.0206x faster
   string-char-code-at                               17.1439+-1.6194           16.4173+-0.6535          might be 1.0443x faster
   string-concat-object                               2.8370+-0.5444            2.7131+-0.1080          might be 1.0457x faster
   string-concat-pair-object                          2.7073+-0.2315            2.5837+-0.0878          might be 1.0478x faster
   string-concat-pair-simple                         11.9191+-0.3498     ?     12.0178+-0.5709        ?
   string-concat-simple                              13.0638+-1.5799           12.9613+-1.1567        
   string-cons-repeat                                 9.7438+-0.8794            8.7532+-1.1283          might be 1.1132x faster
   string-cons-tower                                  8.3061+-0.3443     ?      8.5110+-0.6264        ? might be 1.0247x slower
   string-equality                                   18.1641+-0.7797     ?     18.6406+-1.8311        ? might be 1.0262x slower
   string-get-by-val-big-char                         7.2243+-0.0231     ?      7.2609+-0.1644        ?
   string-get-by-val-out-of-bounds-insane             3.6266+-0.1112     ?      3.9423+-0.5692        ? might be 1.0871x slower
   string-get-by-val-out-of-bounds                    5.5268+-0.0329     ?      5.5415+-0.0392        ?
   string-get-by-val                                  3.6193+-0.4561            3.4318+-0.2136          might be 1.0546x faster
   string-hash                                        2.1193+-0.0412     ?      2.2196+-0.1362        ? might be 1.0473x slower
   string-long-ident-equality                        14.6736+-0.1662           14.4659+-0.2071          might be 1.0144x faster
   string-out-of-bounds                              14.9633+-0.1815     ?     15.1074+-0.2726        ?
   string-repeat-arith                               33.6847+-1.9599     ?     35.1204+-1.5572        ? might be 1.0426x slower
   string-sub                                        67.0485+-2.6458     ?     71.5456+-3.1721        ? might be 1.0671x slower
   string-test                                        3.1298+-0.2736            3.0350+-0.0525          might be 1.0312x faster
   string-var-equality                               33.0560+-1.3082     ?     33.8698+-1.9813        ? might be 1.0246x slower
   structure-hoist-over-transitions                   2.7360+-0.0928     ?      2.7360+-0.0277        ?
   substring-concat-weird                            41.2107+-1.7561     ?     41.2759+-1.0279        ?
   substring-concat                                  42.6440+-0.5127     ?     42.9985+-0.9828        ?
   substring                                         48.5335+-8.2216           45.9051+-1.6477          might be 1.0573x faster
   switch-char-constant                               3.1143+-0.1967            2.9629+-0.2302          might be 1.0511x faster
   switch-char                                        6.4789+-0.3318     ?      7.0639+-0.8039        ? might be 1.0903x slower
   switch-constant                                    8.4672+-0.2130     ?      8.6052+-0.2598        ? might be 1.0163x slower
   switch-string-basic-big-var                       18.5179+-0.5437     ?     18.8149+-0.8684        ? might be 1.0160x slower
   switch-string-basic-big                           16.2025+-3.5888           15.1114+-0.3374          might be 1.0722x faster
   switch-string-basic-var                           15.2065+-0.2800           15.0765+-0.2113        
   switch-string-basic                               13.5850+-0.2303     ?     13.8495+-1.0559        ? might be 1.0195x slower
   switch-string-big-length-tower-var                20.1630+-0.2503     ?     20.5843+-1.3021        ? might be 1.0209x slower
   switch-string-length-tower-var                    15.6684+-0.2093           15.5169+-0.2019        
   switch-string-length-tower                        13.6844+-1.1508     ?     13.7624+-1.3460        ?
   switch-string-short                               13.1625+-0.1877     ?     13.2904+-0.2037        ?
   switch                                            12.7336+-0.2084     ?     12.7768+-0.4726        ?
   tear-off-arguments-simple                          3.5734+-0.0307     ?      3.6082+-0.1080        ?
   tear-off-arguments                                 4.9028+-0.1054            4.8628+-0.0880        
   temporal-structure                                12.2666+-0.2842           12.1772+-0.1134        
   to-int32-boolean                                  13.9360+-0.1775     ?     14.1127+-0.3120        ? might be 1.0127x slower
   try-catch-get-by-val-cloned-arguments             14.9442+-0.9098     ?     15.8510+-1.2071        ? might be 1.0607x slower
   try-catch-get-by-val-direct-arguments              7.2616+-0.9892            6.5286+-0.1252          might be 1.1123x faster
   try-catch-get-by-val-scoped-arguments              7.7489+-0.2051     ?      8.2821+-0.9710        ? might be 1.0688x slower
   typed-array-get-set-by-val-profiling              33.8614+-1.6957           32.6138+-0.2489          might be 1.0383x faster
   undefined-property-access                        343.6169+-3.5920     ?    344.1093+-1.4379        ?
   undefined-test                                     3.2235+-0.2332            3.1329+-0.0934          might be 1.0289x faster
   unprofiled-licm                                   23.4334+-1.5786     ?     23.5981+-1.6618        ?
   varargs-call                                      14.9989+-0.1980     ?     15.8424+-1.2820        ? might be 1.0562x slower
   varargs-construct-inline                          28.4843+-0.3949     ?     29.0465+-0.9530        ? might be 1.0197x slower
   varargs-construct                                 22.8858+-1.0049     ?     23.0784+-0.4801        ?
   varargs-inline                                     9.4686+-0.1182            9.4569+-0.1305        
   varargs-strict-mode                               10.1083+-0.1253     ?     10.4791+-0.9830        ? might be 1.0367x slower
   varargs                                           10.0447+-0.0735           10.0061+-0.0438        
   weird-inlining-const-prop                          3.3890+-0.2617     ?      4.0432+-2.0991        ? might be 1.1930x slower

   &lt;geometric&gt;                                        8.9828+-0.0370            8.9747+-0.0232          might be 1.0009x faster

                                                        TipOfTree               DoubleRealUse                                   
AsmBench:
   bigfib.cpp                                       500.8590+-4.9801     ?    501.3822+-3.6239        ?
   cray.c                                           427.4548+-0.6829     ?    429.9062+-2.0056        ?
   dry.c                                            491.1985+-3.9376     ?    492.3243+-5.9774        ?
   FloatMM.c                                        723.4755+-2.5057     ?    725.8680+-3.4654        ?
   gcc-loops.cpp                                   4110.9378+-9.6674         4106.2331+-9.5015        
   n-body.c                                         975.3578+-3.6786     !    988.6222+-6.7565        ! definitely 1.0136x slower
   Quicksort.c                                      423.9291+-1.5040     ?    427.3347+-3.9421        ?
   stepanov_container.cpp                          3611.3676+-28.6169    ?   3739.1442+-360.8933      ? might be 1.0354x slower
   Towers.c                                         256.7973+-1.5518          256.3450+-1.0713        

   &lt;geometric&gt;                                      790.0516+-1.1096     ?    795.5933+-9.1078        ? might be 1.0070x slower

                                                        TipOfTree               DoubleRealUse                                   
CompressionBench:
   huffman                                          363.4777+-24.9324    ?    379.6798+-2.9143        ? might be 1.0446x slower
   arithmetic-simple                                369.3888+-3.2803          368.1330+-4.5425        
   arithmetic-precise                               286.7947+-8.5259          286.4227+-2.4576        
   arithmetic-complex-precise                       283.2440+-2.7682     ?    285.2054+-5.4135        ?
   arithmetic-precise-order-0                       378.0345+-3.9396     ?    381.1244+-10.3295       ?
   arithmetic-precise-order-1                       336.5474+-8.7359          332.4686+-4.9355          might be 1.0123x faster
   arithmetic-precise-order-2                       365.7171+-5.2101     ?    371.1844+-3.1533        ? might be 1.0149x slower
   arithmetic-simple-order-1                        428.9500+-3.8664     ?    441.7043+-22.2044       ? might be 1.0297x slower
   arithmetic-simple-order-2                        471.4394+-3.9041     ?    477.3422+-6.6362        ? might be 1.0125x slower
   lz-string                                        316.3170+-6.3424     ?    323.5696+-7.3347        ? might be 1.0229x slower

   &lt;geometric&gt;                                      355.6574+-2.6702     ?    360.0178+-2.9351        ? might be 1.0123x slower

                                                        TipOfTree               DoubleRealUse                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   62.0666+-0.1679     ?     62.4051+-0.1801        ? might be 1.0055x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1100063</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-05 22:34:35 -0700</bug_when>
    <thetext>Attachment 254406 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:297:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1430:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103350</commentid>
    <comment_count>9</comment_count>
      <attachid>254406</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-06-19 12:07:24 -0700</bug_when>
    <thetext>Comment on attachment 254406
better

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

r=me

Let&apos;s hold off on landing this for a bit.

Please check the EFL build.

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:289
&gt; +    void tryToSinkRealNumberCheck()

Perhaps it would be better to call this &quot;tryToHoistRealNumberCheck&quot; (and &quot;arithmeticWithHoistedRealNumberCheck&quot;), or &quot;tryToCombineRealNumberChecks&quot;. In a way, we are sinking real number checks because we are moving them after the arithmetic. But in a way we are hoisting them, because we are doing them two-for-one through the arithmetic at the head of a chain of nodes. Since it is usually illegal to sink checks, but legal to hoist checks, it might be clearer to call this hoisting.

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:320
&gt; +        // Then we might eliminate the IsNumber because the DoubleRep&apos;s type checks:

because of

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:329
&gt; +        // And then we might try to eliminat the DoubleRep&apos;s entirely:

eliminate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104686</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-25 11:25:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Comment on attachment 254406 [details]
&gt; better
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=254406&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; Let&apos;s hold off on landing this for a bit.
&gt; 
&gt; Please check the EFL build.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:289
&gt; &gt; +    void tryToSinkRealNumberCheck()
&gt; 
&gt; Perhaps it would be better to call this &quot;tryToHoistRealNumberCheck&quot; (and
&gt; &quot;arithmeticWithHoistedRealNumberCheck&quot;), or &quot;tryToCombineRealNumberChecks&quot;.
&gt; In a way, we are sinking real number checks because we are moving them after
&gt; the arithmetic. But in a way we are hoisting them, because we are doing them
&gt; two-for-one through the arithmetic at the head of a chain of nodes. Since it
&gt; is usually illegal to sink checks, but legal to hoist checks, it might be
&gt; clearer to call this hoisting.

Agree.  I think that method name is a holdover from when I was trying to do this using sinking rather than hoisting.  I think I need to rename the bug as well.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:320
&gt; &gt; +        // Then we might eliminate the IsNumber because the DoubleRep&apos;s type checks:
&gt; 
&gt; because of
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:329
&gt; &gt; +        // And then we might try to eliminat the DoubleRep&apos;s entirely:
&gt; 
&gt; eliminate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105837</commentid>
    <comment_count>11</comment_count>
      <attachid>255861</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-06-30 15:04:57 -0700</bug_when>
    <thetext>Created attachment 255861
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1105839</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-06-30 15:06:09 -0700</bug_when>
    <thetext>Attachment 255861 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:297:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1430:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1519:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 3 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125665</commentid>
    <comment_count>13</comment_count>
      <attachid>254406</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-09-14 11:09:13 -0700</bug_when>
    <thetext>Comment on attachment 254406
better

Cleared Geoffrey Garen&apos;s review+ from obsolete attachment 254406 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254403</attachid>
            <date>2015-06-05 20:10:00 -0700</date>
            <delta_ts>2015-06-05 21:02:23 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>12467</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4NTI3NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQ4LDYgKzQ0OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHkKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjTWFjaGluZUlu
dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CisgICAg
ICAgIGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYm
IGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAg
c2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpICsgcmlnaHQu
YXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA4LDYgKzUwOSw3IEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGZv
ck5vZGUobm9kZSkuc2V0VHlwZShTcGVjTWFjaGluZUludCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CisgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToK
ICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdo
dC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3Vi
bGVOdW1iZXIobGVmdC5hc051bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNjExLDYgKzYxMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVj
TWFjaGluZUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBV
c2U6CisgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYm
IHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigp
ICogcmlnaHQuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxODUyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1
MSwxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50
U3RhdGUgPT0gRml4cG9pbnROb3RDb252ZXJnZWQpOwogICAgICAgICAKKyAgICAgICAgLy8gSW4g
RlRMIG1vZGUgd2Ugd2lsbCBkbyBzb21lIG9wdGltaXphdGlvbnMgdGhhdCByZXF1aXJlIHJlZmVy
ZW5jZSBjb3VudHMuCisgICAgICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKKyAg
ICAgICAgICAgIG1fZ3JhcGguY29tcHV0ZVJlZkNvdW50cygpOworICAgICAgICAKICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKQEAgLTExMiwx
MCArMTE2LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlP
dmVyQ2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHRyeVRvU2lua1JlYWxOdW1iZXJDaGVjaygpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE11bDoKICAgICAg
ICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgICAgIHRyeVRvU2lua1JlYWxO
dW1iZXJDaGVjaygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBBcml0aFN1YjoKQEAgLTEyOCw5ICsxMzUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ub2RlSW5kZXgsIG1fbm9kZS0+b3JpZ2luLCBqc051bWJlcigtdmFs
dWUpKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRyeVRvU2lua1JlYWxOdW1iZXJDaGVjaygpOwogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBBcml0aFBvdzoKQEAgLTE2Myw2ICsxNzAsMTAgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaGFkSW50MzJDaGVjayA9
IHRydWU7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IERv
dWJsZVJlcCkgeworICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSAhPSBOdW1iZXJVc2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7
IDsgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgewogICAgICAgICAgICAgICAgIGlmIChj
YW5vbmljYWxSZXN1bHRSZXByZXNlbnRhdGlvbihub2RlLT5yZXN1bHQoKSkgPT0KICAgICAgICAg
ICAgICAgICAgICAgY2Fub25pY2FsUmVzdWx0UmVwcmVzZW50YXRpb24obV9ub2RlLT5yZXN1bHQo
KSkpIHsKQEAgLTI3NSw2ICsyODYsMTIzIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCisgICAgdm9pZCB0cnlUb1NpbmtSZWFsTnVtYmVyQ2hlY2soKQorICAgIHsKKyAgICAgICAg
Ly8gV2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgdGhpcyBleGNlcHQgaW4gdGhlIEZUTC4KKyAg
ICAgICAgaWYgKCFpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHJlcXVpcmUgdGhhdCBib3RoIG9mIHRoZSBpbnB1
dHMgYXJlIERvdWJsZVJlcChSZWFsTnVtYmVyOiksIGFuZCB0aGF0IHRob3NlCisgICAgICAgIC8v
IERvdWJsZVJlcCdzIGhhdmUgbm8gb3RoZXIgdXNlcnMuCisgICAgICAgIGF1dG8gaXNWYWxpZElu
cHV0ID0gWyZdIChFZGdlIGVkZ2UpIHsKKyAgICAgICAgICAgIHJldHVybiBlZGdlLT5vcCgpID09
IERvdWJsZVJlcAorICAgICAgICAgICAgICAgICYmIGVkZ2UtPmNoaWxkMSgpLnVzZUtpbmQoKSA9
PSBSZWFsTnVtYmVyVXNlCisgICAgICAgICAgICAgICAgJiYgZWRnZS0+YWRqdXN0ZWRSZWZDb3Vu
dCgpID09IDE7CisgICAgICAgIH07CisgICAgICAgIGlmICghaXNWYWxpZElucHV0KG1fbm9kZS0+
Y2hpbGQxKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWlzVmFsaWRJbnB1
dChtX25vZGUtPmNoaWxkMigpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIC8vIFdlIGFsc28gcmVxdWlyZSB0aGF0IHRoZSBvcGVyYXRpb24gaGFzIG5ldmVyIGhhZCB0
aGUgQmFkVHlwZSBleGl0IHR5cGUuIFRoaXMgaXMgYmVjYXVzZQorICAgICAgICAvLyB0aGUgc3Vu
a2VuIG9wZXJhdGlvbiBtaWdodCBleGl0IGR1ZSB0byBCYWRUeXBlIGlmIGl0IGNyZWF0ZWQgYSBO
YU4gZXZlbiB0aG91Z2ggdGhlCisgICAgICAgIC8vIGlucHV0cyB3ZXJlIG5vdCBOYU4sIGxpa2Ug
SW5maW5pdHkgKyAtSW5maW5pdHkgb3IgMCAqIEluZmluaXR5LgorICAgICAgICBpZiAobV9ncmFw
aC5oYXNFeGl0U2l0ZShtX25vZGUsIEJhZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgLy8gTm93IGNvbWVzIHRoZSBoYXJkIHBhcnQ6IHdlIGNhbiBvbmx5IGRv
IHRoaXMgaWYgd2UgY2FuIGhvaXN0IHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbgorICAgICAgICAv
LyB1cCB0byB0aGUgZmlyc3Qgb2YgdGhlIHR3byBEb3VibGVSZXAncy4gVGhpcyBpcyBiZWNhdXNl
IG90aGVyd2lzZSB3ZSdsbCBlaXRoZXIgc3RpbGwKKyAgICAgICAgLy8gaGF2ZSBDaGVjayhSZWFs
TnVtYmVyOikgaW4gcGxhY2Ugb2YgdGhlIERvdWJsZVJlcChSZWFsTnVtYmVyOiksIHdoaWNoIGlz
IGp1c3QgYXMKKyAgICAgICAgLy8gZXhwZW5zaXZlIGFzIHRoZSBEb3VibGVSZXAuIE9yLCBpZiB3
ZSB0cnkgdG8ganVzdCByZW1vdmUgdGhlIERvdWJsZVJlcCdzIGVudGlyZWx5IHRoZW4KKyAgICAg
ICAgLy8gd2UgdmlvbGF0ZSB0aGUgImRvbid0IHNpbmsgY2hlY2tzIiBwcmluY2lwbGUuIEhlcmUn
cyBhIGNvdW50ZXJleGFtcGxlIG9mIHdoeToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3JpZ2lu
YWwgY29kZToKKyAgICAgICAgLy8gICAgIDE6IERvdWJsZVJlcChSZWFsTnVtYmVyOkB4KQorICAg
ICAgICAvLyAgICAgMjogRG91YmxlUmVwKFJlYWxOdW1iZXI6QHkpCisgICAgICAgIC8vICAgICAz
OiBJc051bWJlcihAeCkKKyAgICAgICAgLy8gICAgIDQ6IENhbGwoLi4uLCBAMykKKyAgICAgICAg
Ly8gICAgIDU6IEFyaXRoQWRkKERvdWJsZVJlcDpAMSwgRG91YmxlUmVwOkAyKQorICAgICAgICAv
LworICAgICAgICAvLyBUaGVuIHdlIG1pZ2h0IGVsaW1pbmF0ZSB0aGUgSXNOdW1iZXIgYmVjYXVz
ZSB0aGUgRG91YmxlUmVwJ3MgdHlwZSBjaGVja3M6CisgICAgICAgIC8vCisgICAgICAgIC8vIEFm
dGVyIElzTnVtYmVyIGVsaW1pbmF0aW9uOgorICAgICAgICAvLyAgICAgMTogRG91YmxlUmVwKFJl
YWxOdW1iZXI6QHgpCisgICAgICAgIC8vICAgICAyOiBEb3VibGVSZXAoUmVhbE51bWJlcjpAeSkK
KyAgICAgICAgLy8gICAgIDM6IEpTQ29uc3RhbnQodHJ1ZSkKKyAgICAgICAgLy8gICAgIDQ6IENh
bGwoLi4uLCBAMykKKyAgICAgICAgLy8gICAgIDU6IEFyaXRoQWRkKERvdWJsZVJlcDpAMSwgRG91
YmxlUmVwOkAyKQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgdGhlbiB3ZSBtaWdodCB0cnkg
dG8gZWxpbWluYXQgdGhlIERvdWJsZVJlcCdzIGVudGlyZWx5OgorICAgICAgICAvLworICAgICAg
ICAvLyBBZnRlciBzdHJlbmd0aCByZWR1Y3Rpb246CisgICAgICAgIC8vICAgICAxOiA8cmVtb3Zl
ZD4KKyAgICAgICAgLy8gICAgIDI6IDxyZW1vdmVkPgorICAgICAgICAvLyAgICAgMzogSlNDb25z
dGFudCh0cnVlKQorICAgICAgICAvLyAgICAgNDogQ2FsbCguLi4sIEAzKQorICAgICAgICAvLyAg
ICAgNTogQXJpdGhBZGQoUmVhbE51bWJlcjpAeCwgUmVhbE51bWJlcjpAeSkKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gQW5kIG5vdyB3ZSBtaWdodCBlbmQgdXAgbWFraW5nIHRoZSBjYWxsIHBhc3Np
bmcgInRydWUiIGZvciAiSXNOdW1iZXIiLCBldmVuIHRob3VnaCB3ZQorICAgICAgICAvLyBoYXZl
bid0IHlldCBkb25lIGFueSBjaGVja3MgdG8gc2VlIGlmIEB4IGlzIGEgbnVtYmVyLgorICAgICAg
ICAvLworICAgICAgICAvLyBCdXQgaW4gdGhlIGNvbW1vbiBjYXNlcywgd2UgKmRvKiB3YW50IHRv
IGVyYWRpY2F0ZSB0aGUgRG91YmxlUmVwJ3MgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgICAgIC8v
IHdlIGRvbid0IGV2ZW4gbmVlZCB0aGUgQ2hlY2soUmVhbE51bWJlcjopLiBXZSBjYW4gZG8gdGhp
cyBpZiB0aGUgdHJhbnNmb3JtYXRpb24KKyAgICAgICAgLy8gaW52b2x2ZXMgcmVwbGFjaW5nIHRo
ZSBmaXJzdCBvZiB0aGUgRG91YmxlUmVwJ3Mgd2l0aCBvdXIgYXJpdGhtZXRpYyBvcGVyYXRpb24u
IFRoaXMKKyAgICAgICAgLy8gbWVhbnMgZmluZGluZyB0aGUgRG91YmxlUmVwJ3MgaW4gdGhpcyBj
dXJyZW50IGJhc2ljIGJsb2NrLCBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndAorICAgICAgICAv
LyBoYXZlIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgMTogLi4u
CisgICAgICAgIC8vICAgICAyOiBEb3VibGVSZXAoUmVhbE51bWJlcjpAMSkKKyAgICAgICAgLy8g
ICAgIDM6IC4uLgorICAgICAgICAvLyAgICAgNDogRG91YmxlUmVwKFJlYWxOdW1iZXI6QDMpCisg
ICAgICAgIC8vICAgICA1OiBBcml0aEFkZChEb3VibGVSZXA6QDIsIERvdWJsZVJlcDpANCkKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gV2UganVzdCBmYWlsIGZvciB0aGluZ3MgbGlrZSB0aGlzLiBJ
dCBzaG91bGRuJ3QgdXN1YWxseSBoYXBwZW4uCisgICAgICAgIAorICAgICAgICBib29sIGZvdW5k
TGVmdCA9IGZhbHNlOworICAgICAgICBib29sIGZvdW5kUmlnaHQgPSBmYWxzZTsKKyAgICAgICAg
Tm9kZSogbm9kZVRvUmVwbGFjZSA9IG51bGxwdHI7CisgICAgICAgIE5vZGUqIG5vZGVUb0tpbGwg
PSBudWxscHRyOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1fbm9kZUluZGV4
OyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiBiZWZvcmUgZWl0aGVy
IERvdWJsZVJlcCdzIHdlIHNlZSB0aGUgY2hpbGQgb2YgdGhlIG90aGVyIERvdWJsZVJlcCwgd2Ug
ZmFpbC4KKyAgICAgICAgICAgIGlmIChub2RlID09IG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChub2RlID09IG1fbm9k
ZS0+Y2hpbGQyKCktPmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9ub2RlLT5jaGlsZDEoKSkgeworICAgICAg
ICAgICAgICAgIGZvdW5kTGVmdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kUmln
aHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZVRvUmVwbGFjZSA9IG1fbm9kZS0+Y2hpbGQx
KCkubm9kZSgpOworICAgICAgICAgICAgICAgICAgICBub2RlVG9LaWxsID0gbV9ub2RlLT5jaGls
ZDIoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUgPT0g
bV9ub2RlLT5jaGlsZDIoKSkgeworICAgICAgICAgICAgICAgIGZvdW5kUmlnaHQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9k
ZVRvUmVwbGFjZSA9IG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgpOworICAgICAgICAgICAgICAgICAg
ICBub2RlVG9LaWxsID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlQoISFub2RlVG9SZXBsYWNlID09ICEhbm9kZVRvS2lsbCk7CisgICAgICAg
IAorICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIG51bGwgaWYgZWl0aGVyIERvdWJsZVJlcCBpcyBp
biBhIGRpZmZlcmVudCBibG9jay4gTWF5YmUgd2UgY291bGQgaGFuZGxlCisgICAgICAgIC8vIHRo
aXMgZXZlbnR1YWxseSwgYnV0IGl0J3MgaGFyZGVyLCBhbmQgcHJvYmFibHkgbGVzcyBjb21tb24u
CisgICAgICAgIGlmICghbm9kZVRvUmVwbGFjZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIC8vIEZJWE1FOiBEbyB0aGUgcmVwbGFjZW1lbnQvcmVtb3ZhbC4KKyAgICAg
ICAgCisgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKG1fbm9kZS0+Y2hpbGQxKCktPmNo
aWxkMSgpLm5vZGUoKSwgUmVhbE51bWJlclVzZSk7CisgICAgICAgIG1fbm9kZS0+Y2hpbGQyKCkg
PSBFZGdlKG1fbm9kZS0+Y2hpbGQyKCktPmNoaWxkMSgpLm5vZGUoKSwgUmVhbE51bWJlclVzZSk7
CisgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAogICAgIEluc2VydGlvblNl
dCBtX2luc2VydGlvblNldDsKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIHVuc2lnbmVk
IG1fbm9kZUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4NTI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDM3LDEw
ICsxNDM3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIERvdWJsZVJlcFVzZTogewotICAgICAgICAgICAgTFZhbHVlIEMxID0gbG93RG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgTFZhbHVlIEMyID0gbG93RG91YmxlKG1fbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQgPSBsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDIoKSk7CiAKLSAgICAgICAgICAgIHNldERvdWJsZShpc1N1YiA/IG1fb3V0LmRvdWJs
ZVN1YihDMSwgQzIpIDogbV9vdXQuZG91YmxlQWRkKEMxLCBDMikpOworICAgICAgICAgICAgc2V0
RG91YmxlKGlzU3ViID8gbV9vdXQuZG91YmxlU3ViKGxlZnQsIHJpZ2h0KSA6IG1fb3V0LmRvdWJs
ZUFkZChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIGFyaXRo
bWV0aWNXaXRoU3Vua2VuUmVhbE51bWJlckNoZWNrKAorICAgICAgICAgICAgICAgIFsmXSAoTFZh
bHVlIGEsIExWYWx1ZSBiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N1YiA/IG1f
b3V0LmRvdWJsZVN1YihhLCBiKSA6IG1fb3V0LmRvdWJsZUFkZChhLCBiKTsKKyAgICAgICAgICAg
ICAgICB9KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTE1MjUsNiArMTUzMywxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNlIFJlYWxOdW1iZXJVc2U6IHsKKyAgICAgICAg
ICAgIGFyaXRobWV0aWNXaXRoU3Vua2VuUmVhbE51bWJlckNoZWNrKAorICAgICAgICAgICAgICAg
IFsmXSAoTFZhbHVlIGEsIExWYWx1ZSBiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBt
X291dC5kb3VibGVNdWwoYSwgYik7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTU0MjYsNiArNTQ0Miw0NSBAQCBwcml2YXRlOgogCiAgICAgICAgIHNl
dEpTVmFsdWUoYWN0aXZhdGlvbik7CiAgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBhcml0aG1ldGljV2l0aFN1bmtlblJlYWxOdW1iZXJDaGVjayhj
b25zdCBGdW5jdG9yJiBlbWl0TWF0aCkKKyAgICB7CisgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAg
ICAgICBMVmFsdWUgcmlnaHQgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCksIE1hbnVhbE9w
ZXJhbmRTcGVjdWxhdGlvbik7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBzbG93UGF0
aCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiYXJpdGhtZXRpY1dpdGhTdW5rZW5SZWFsTnVtYmVy
Q2hlY2sgc2xvdyBwYXRoIikpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImFyaXRobWV0aWNXaXRoU3Vua2VuUmVhbE51bWJlckNoZWNr
IGNvbnRpbnVhdGlvbiIpKTsKKyAgICAgICAgCisgICAgICAgIExWYWx1ZSBsZWZ0RG91YmxlID0g
dW5ib3hEb3VibGUobGVmdCk7CisgICAgICAgIExWYWx1ZSByaWdodERvdWJsZSA9IHVuYm94RG91
YmxlKHJpZ2h0KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1fb3V0LmFu
Y2hvcihlbWl0TWF0aChsZWZ0RG91YmxlLCByaWdodERvdWJsZSkpOworICAgICAgICBtX291dC5i
cmFuY2goCisgICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChmYXN0UmVzdWx0LnZhbHVlKCks
IGZhc3RSZXN1bHQudmFsdWUoKSksCisgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiks
IHJhcmVseShzbG93UGF0aCkpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKKyAgICAgICAgLy8g
V2Ugc3BlY3VsYXRlIHRoYXQgdGhlIGlucHV0cyBhcmUgaW50MzIuIFdlIGNhbm5vdCB1c2UgdGhl
IEZUTF9UWVBFX0NIRUNLKCkgaGVscGVycworICAgICAgICAvLyBiZWNhdXNlIHdoZW4gd2UgZ2V0
IHRvIHRoaXMgcG9pbnQsIHRoZSBpbnB1dHMgbWF5IGJlIGVpdGhlciBEb3VibGVSZWFsIG9yIElu
dDMyLiBJZiB3ZQorICAgICAgICAvLyByZXF1ZXN0ZWQgSW50MzIgZmlsdHJhdGlvbiwgdGhlbiB0
aGF0IHdvdWxkIGJlIHdyb25nLCBiZWNhdXNlIHRoaXMgY2hlY2sgbWlnaHQgYmUKKyAgICAgICAg
Ly8gYnlwYXNzZWQgaW4gd2hpY2ggY2FzZSB0aGUgaW5wdXRzIHdlcmUgRG91YmxlUmVhbC4gSWYg
d2UgcmVxdWVzdGVkIEludDMyfERvdWJsZVJlYWwKKyAgICAgICAgLy8gZmlsdHJhdGlvbiwgdGhl
biB0aGF0IHdvdWxkIGJlIGFsc28gd3JvbmcsIHNpbmNlIHRoaXMgd2Ugd2FudCB0byBleGl0IGlm
IG5vdCBJbnQzMiBldmVuCisgICAgICAgIC8vIGlmIHRoZSBpbnB1dHMgYXJlIHByb3ZlZCB0byBi
ZSBJbnQzMnxEb3VibGVSZWFsLCBzaW5jZSBvbiB0aGlzIHBhdGggd2Ugd2lsbCBhbHdheXMKKyAg
ICAgICAgLy8gdW5ib3ggaW50MzIuCisgICAgICAgIHNwZWN1bGF0ZShCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUobGVmdCksIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBpc05vdEludDMyKGxlZnQpKTsK
KyAgICAgICAgbGVmdERvdWJsZSA9IG1fb3V0LmludFRvRG91YmxlKHVuYm94SW50MzIobGVmdCkp
OworICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKHJpZ2h0KSwgbV9ub2Rl
LT5jaGlsZDIoKS5ub2RlKCksIGlzTm90SW50MzIocmlnaHQpKTsKKyAgICAgICAgcmlnaHREb3Vi
bGUgPSBtX291dC5pbnRUb0RvdWJsZSh1bmJveEludDMyKHJpZ2h0KSk7CisgICAgICAgIFZhbHVl
RnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IoZW1pdE1hdGgobGVmdERvdWJsZSwg
cmlnaHREb3VibGUpKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgZmFzdFJlc3VsdCwgc2xv
d1Jlc3VsdCkpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGZpbHRlciB0aGUg
aW5wdXRzIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIG1faW50ZXJwcmV0ZXIuZmlsdGVyKG1fbm9k
ZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZVJlYWxOdW1iZXIpOworICAgICAgICBtX2ludGVycHJl
dGVyLmZpbHRlcihtX25vZGUtPmNoaWxkMigpLCBTcGVjQnl0ZWNvZGVSZWFsTnVtYmVyKTsKKyAg
ICB9CiAKICNpZiBFTkFCTEUoRlRMX05BVElWRV9DQUxMX0lOTElOSU5HKQogICAgIExWYWx1ZSBn
ZXRGdW5jdGlvbkJ5U3ltYm9sKGNvbnN0IENTdHJpbmcgc3ltYm9sKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254404</attachid>
            <date>2015-06-05 21:02:23 -0700</date>
            <delta_ts>2015-06-05 22:02:50 -0700</delta_ts>
            <desc>might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15699</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1Mjg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDE1LTA2LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2luayByZWFsIG51bWJlciB0eXBlIGNoZWNrcyBiZWxvdyB0aGUgZmlyc3QgYXJpdGhtZXRpYyBv
cGVyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTcyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgQ29uc2lkZXIgY29kZSBsaWtlOgorICAgICAgICAKKyAgICAgICAgICAgIG8ueCAr
IG8ueQorICAgICAgICAKKyAgICAgICAgd2hlcmUgYm90aCBvLnggYW5kIG8ueSBhcmUgcHJlZGlj
dGVkIHRvIGJlIHJlYWwgZG91Ymxlcy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHdlIGhhbmRsZWQK
KyAgICAgICAgdGhpcyBieSBjb252ZXJ0aW5nIHRoZSBsb2FkZWQgSlNWYWx1ZXMgdG8gZG91Ymxl
IHdpdGhvdXQgY2hlY2tzLCBhbmQgdGhlbiBkb2luZyBOYU4gY2hlY2tzCisgICAgICAgIG9uIHRo
ZSBkb3VibGVzLiBUaGF0IHdhcyBwcmV0dHkgZ29vZC4gQnV0IHRoaXMgY2hhbmdlIG1ha2VzIGl0
IGJldHRlcjogaW5zdGVhZCBvZiBkb2luZworICAgICAgICB0d28gTmFOIGNoZWNrcyAob25lIG9u
IGVhY2ggaW5wdXQpLCB3ZSBkbyBhIE5hTiBjaGVjayBvbiB0aGUgcmVzdWx0IG9mIHRoZSBhZGRp
dGlvbi4gSWYKKyAgICAgICAgdGhhdCBmYWlscywgdGhlbiB3ZSBhdHRlbXB0IGludC10by1kb3Vi
bGUgY29udmVyc2lvbiBhbmQgcmVkbyB0aGUgYWRkaXRpb24uIFRoaXMKKyAgICAgICAgb3B0aW1p
emF0aW9uIG9ubHkgd29ya3MgaW4gY2VydGFpbiBjYXNlcyBhcyBpdCByZXF1aXJlcyB1cyB0byBo
b2lzdCB0aGUgYWRkaXRpb24gdXAgdG8gdGhlCisgICAgICAgIHBvaW50IG9mIHRoZSBmaXJzdCB2
YWx1ZS10by1kb3VibGUgY29udmVyc2lvbiwgc28gYXMgdG8gYXZvaWQgc2lua2luZyB0aG9zZSBj
aGVja3MuIEFsbCBvZgorICAgICAgICB0aGUgd2VpcmQgY2F2ZWF0cyBhcmUgZG9jdW1lbnRlZCBp
biB0aGUgU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6dHJ5VG9TaW5rUmVhbE51bWJlckNoZWNrKCkK
KyAgICAgICAgbWV0aG9kLgorICAgICAgICAKKyAgICAgICAgUmlnaHQgbm93LCB3ZSBkbyB0aGlz
IG9wdGltaXphdGlvbiBvbmx5IGZvciBhZGQsIHN1YiwgYW5kIG11bCwgc2luY2UgdGhvc2Ugc2Vl
bSB1bmxpa2VseQorICAgICAgICB0byBwcm9kdWNlIE5hTiBmb3Igbm9uLU5hTiBpbnB1dHMuIEV2
ZW4gdGhlc2Ugb3BlcmF0aW9ucyBjYW4gcmV0dXJuIE5hTiBmb3Igbm9uLU5hTgorICAgICAgICBp
bnB1dHMsIGZvciBleGFtcGxlIEluZmluaXR5ICsgLUluZmluaXR5IG9yIDAgKiBJbmZpbml0eS4g
V2UgaGFuZGxlIHRoYXQgY2FzZSBieSBibGluZGx5CisgICAgICAgIHNwZWN1bGF0aW5nIHRoYXQg
aXQgd29uJ3QgaGFwcGVuLCBidXQgdGhlbiBhdm9pZGluZyB0aGUgb3B0aW1pemF0aW9uIGlmIHRo
ZSBzZW1hbnRpYworICAgICAgICBvcmlnaW4gaGFkIEJhZFR5cGUgZXhpdHMuCisgICAgICAgIAor
ICAgICAgICBUaGlzIG9wdGltaXphdGlvbiBpcyBvbmx5IGVuYWJsZWQgaW4gdGhlIEZUTCBmb3Ig
bm93LiBUaGUgd2luIGZyb20gdGhpcyBvcHRpbWl6YXRpb24gaXMKKyAgICAgICAgc21hbGwgZW5v
dWdoIHRoYXQgaXQncyBwcm9iYWJseSBub3Qgd29ydGggdGhlIGVmZm9ydCB0byBwdXQgaXQgaW50
byB0aGUgREZHLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIDglIHNwZWVkLXVwIG9uIHRo
ZSBkb3VibGUtcmVwLXVzZSBtaWNyb2JlbmNobWFyay4KKworICAgICAgICAqIGRmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICog
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0
cmVuZ3RoUmVkdWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZTo6aGFuZGxlQ29tbXV0YXRpdml0eSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6dHJ5VG9TaW5rUmVhbE51bWJlckNoZWNrKToKKyAgICAg
ICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlQXJpdGhBZGRPclN1Yik6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb24pOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphcml0aG1ldGljV2l0aFN1bmtlblJlYWxOdW1iZXJD
aGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmdldEZ1bmN0aW9uQnlT
eW1ib2wpOgorCiAyMDE1LTA2LTA1ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBTdWJjbGFzc2VzIG9mIEpTTm9uRmluYWxPYmplY3Qgd2l0aCBnYydhYmxlIGNoaWxk
cmVuIG5lZWQgdG8gaW1wbGVtZW50IHZpc2l0Q2hpbGRyZW4oKS4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE4NTI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDQ4LDYgKzQ0
OCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjTWFjaGluZUludCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CisgICAgICAgIGNhc2UgUmVhbE51bWJl
clVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAm
JiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
anNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpICsgcmlnaHQuYXNOdW1iZXIoKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTA4LDYgKzUwOSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlw
ZShTcGVjTWFjaGluZUludCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3Vi
bGVSZXBVc2U6CisgICAgICAgIGNhc2UgUmVhbE51bWJlclVzZToKICAgICAgICAgICAgIGlmIChs
ZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAg
ICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051
bWJlcigpIC0gcmlnaHQuYXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
NjExLDYgKzYxMyw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjTWFjaGluZUludCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CisgICAgICAgIGNhc2Ug
UmVhbE51bWJlclVzZToKICAgICAgICAgICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNO
dW1iZXIoKSAmJiByaWdodC5pc051bWJlcigpKSB7CiAgICAgICAgICAgICAgICAgc2V0Q29uc3Rh
bnQobm9kZSwganNEb3VibGVOdW1iZXIobGVmdC5hc051bWJlcigpICogcmlnaHQuYXNOdW1iZXIo
KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxODUyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSwxMCBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX2ZpeHBvaW50U3RhdGUgPT0gRml4cG9pbnRO
b3RDb252ZXJnZWQpOwogICAgICAgICAKKyAgICAgICAgLy8gSW4gRlRMIG1vZGUgd2Ugd2lsbCBk
byBzb21lIG9wdGltaXphdGlvbnMgdGhhdCByZXF1aXJlIHJlZmVyZW5jZSBjb3VudHMuCisgICAg
ICAgIGlmIChpc0ZUTChtX2dyYXBoLm1fcGxhbi5tb2RlKSkKKyAgICAgICAgICAgIG1fZ3JhcGgu
Y29tcHV0ZVJlZkNvdW50cygpOworICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgu
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKQEAgLTExMiwxMCArMTE2LDEzIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHRyeVRvU2lua1JlYWxOdW1iZXJDaGVjaygpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE11bDoKICAgICAgICAgICAgIGhhbmRsZUNvbW11
dGF0aXZpdHkoKTsKKyAgICAgICAgICAgIHRyeVRvU2lua1JlYWxOdW1iZXJDaGVjaygpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aFN1YjoKQEAg
LTEyOCw5ICsxMzUsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9u
b2RlSW5kZXgsIG1fbm9kZS0+b3JpZ2luLCBqc051bWJlcigtdmFsdWUpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRyeVRvU2lua1Jl
YWxOdW1iZXJDaGVjaygpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBBcml0
aFBvdzoKQEAgLTE2Myw2ICsxNzAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgaGFkSW50MzJDaGVjayA9IHRydWU7CiAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IERvdWJsZVJlcCkgeworICAgICAg
ICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSAhPSBOdW1iZXJVc2UpCisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9y
IChOb2RlKiBub2RlID0gbV9ub2RlLT5jaGlsZDEoKS5ub2RlKCk7IDsgbm9kZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKSkgewogICAgICAgICAgICAgICAgIGlmIChjYW5vbmljYWxSZXN1bHRSZXBy
ZXNlbnRhdGlvbihub2RlLT5yZXN1bHQoKSkgPT0KICAgICAgICAgICAgICAgICAgICAgY2Fub25p
Y2FsUmVzdWx0UmVwcmVzZW50YXRpb24obV9ub2RlLT5yZXN1bHQoKSkpIHsKQEAgLTI3NSw2ICsy
ODYsMTMwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCB0cnlU
b1NpbmtSZWFsTnVtYmVyQ2hlY2soKQorICAgIHsKKyAgICAgICAgLy8gV2UgY3VycmVudGx5IGRv
bid0IHN1cHBvcnQgdGhpcyBleGNlcHQgaW4gdGhlIEZUTC4KKyAgICAgICAgaWYgKCFpc0ZUTCht
X2dyYXBoLm1fcGxhbi5tb2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAg
ICAgIC8vIFdlIHJlcXVpcmUgdGhhdCBib3RoIG9mIHRoZSBpbnB1dHMgYXJlIERvdWJsZVJlcChS
ZWFsTnVtYmVyOiksIGFuZCB0aGF0IHRob3NlCisgICAgICAgIC8vIERvdWJsZVJlcCdzIGhhdmUg
bm8gb3RoZXIgdXNlcnMuCisgICAgICAgIGF1dG8gaXNWYWxpZElucHV0ID0gWyZdIChFZGdlIGVk
Z2UpIHsKKyAgICAgICAgICAgIHJldHVybiBlZGdlLT5vcCgpID09IERvdWJsZVJlcAorICAgICAg
ICAgICAgICAgICYmIGVkZ2UtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBSZWFsTnVtYmVyVXNlCisg
ICAgICAgICAgICAgICAgJiYgZWRnZS0+YWRqdXN0ZWRSZWZDb3VudCgpID09IDE7CisgICAgICAg
IH07CisgICAgICAgIGlmICghaXNWYWxpZElucHV0KG1fbm9kZS0+Y2hpbGQxKCkpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWlzVmFsaWRJbnB1dChtX25vZGUtPmNoaWxkMigp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGFsc28gcmVx
dWlyZSB0aGF0IHRoZSBvcGVyYXRpb24gaGFzIG5ldmVyIGhhZCB0aGUgQmFkVHlwZSBleGl0IHR5
cGUuIFRoaXMgaXMgYmVjYXVzZQorICAgICAgICAvLyB0aGUgc3Vua2VuIG9wZXJhdGlvbiBtaWdo
dCBleGl0IGR1ZSB0byBCYWRUeXBlIGlmIGl0IGNyZWF0ZWQgYSBOYU4gZXZlbiB0aG91Z2ggdGhl
CisgICAgICAgIC8vIGlucHV0cyB3ZXJlIG5vdCBOYU4sIGxpa2UgSW5maW5pdHkgKyAtSW5maW5p
dHkgb3IgMCAqIEluZmluaXR5LgorICAgICAgICBpZiAobV9ncmFwaC5oYXNFeGl0U2l0ZShtX25v
ZGUsIEJhZFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8g
Tm93IGNvbWVzIHRoZSBoYXJkIHBhcnQ6IHdlIGNhbiBvbmx5IGRvIHRoaXMgaWYgd2UgY2FuIGhv
aXN0IHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbgorICAgICAgICAvLyB1cCB0byB0aGUgZmlyc3Qg
b2YgdGhlIHR3byBEb3VibGVSZXAncy4gVGhpcyBpcyBiZWNhdXNlIG90aGVyd2lzZSB3ZSdsbCBl
aXRoZXIgc3RpbGwKKyAgICAgICAgLy8gaGF2ZSBDaGVjayhSZWFsTnVtYmVyOikgaW4gcGxhY2Ug
b2YgdGhlIERvdWJsZVJlcChSZWFsTnVtYmVyOiksIHdoaWNoIGlzIGp1c3QgYXMKKyAgICAgICAg
Ly8gZXhwZW5zaXZlIGFzIHRoZSBEb3VibGVSZXAuIE9yLCBpZiB3ZSB0cnkgdG8ganVzdCByZW1v
dmUgdGhlIERvdWJsZVJlcCdzIGVudGlyZWx5IHRoZW4KKyAgICAgICAgLy8gd2UgdmlvbGF0ZSB0
aGUgImRvbid0IHNpbmsgY2hlY2tzIiBwcmluY2lwbGUuIEhlcmUncyBhIGNvdW50ZXJleGFtcGxl
IG9mIHdoeToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3JpZ2luYWwgY29kZToKKyAgICAgICAg
Ly8gICAgIDE6IERvdWJsZVJlcChSZWFsTnVtYmVyOkB4KQorICAgICAgICAvLyAgICAgMjogRG91
YmxlUmVwKFJlYWxOdW1iZXI6QHkpCisgICAgICAgIC8vICAgICAzOiBJc051bWJlcihAeCkKKyAg
ICAgICAgLy8gICAgIDQ6IENhbGwoLi4uLCBAMykKKyAgICAgICAgLy8gICAgIDU6IEFyaXRoQWRk
KERvdWJsZVJlcDpAMSwgRG91YmxlUmVwOkAyKQorICAgICAgICAvLworICAgICAgICAvLyBUaGVu
IHdlIG1pZ2h0IGVsaW1pbmF0ZSB0aGUgSXNOdW1iZXIgYmVjYXVzZSB0aGUgRG91YmxlUmVwJ3Mg
dHlwZSBjaGVja3M6CisgICAgICAgIC8vCisgICAgICAgIC8vIEFmdGVyIElzTnVtYmVyIGVsaW1p
bmF0aW9uOgorICAgICAgICAvLyAgICAgMTogRG91YmxlUmVwKFJlYWxOdW1iZXI6QHgpCisgICAg
ICAgIC8vICAgICAyOiBEb3VibGVSZXAoUmVhbE51bWJlcjpAeSkKKyAgICAgICAgLy8gICAgIDM6
IEpTQ29uc3RhbnQodHJ1ZSkKKyAgICAgICAgLy8gICAgIDQ6IENhbGwoLi4uLCBAMykKKyAgICAg
ICAgLy8gICAgIDU6IEFyaXRoQWRkKERvdWJsZVJlcDpAMSwgRG91YmxlUmVwOkAyKQorICAgICAg
ICAvLworICAgICAgICAvLyBBbmQgdGhlbiB3ZSBtaWdodCB0cnkgdG8gZWxpbWluYXQgdGhlIERv
dWJsZVJlcCdzIGVudGlyZWx5OgorICAgICAgICAvLworICAgICAgICAvLyBBZnRlciBzdHJlbmd0
aCByZWR1Y3Rpb246CisgICAgICAgIC8vICAgICAxOiA8cmVtb3ZlZD4KKyAgICAgICAgLy8gICAg
IDI6IDxyZW1vdmVkPgorICAgICAgICAvLyAgICAgMzogSlNDb25zdGFudCh0cnVlKQorICAgICAg
ICAvLyAgICAgNDogQ2FsbCguLi4sIEAzKQorICAgICAgICAvLyAgICAgNTogQXJpdGhBZGQoUmVh
bE51bWJlcjpAeCwgUmVhbE51bWJlcjpAeSkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIG5v
dyB3ZSBtaWdodCBlbmQgdXAgbWFraW5nIHRoZSBjYWxsIHBhc3NpbmcgInRydWUiIGZvciAiSXNO
dW1iZXIiLCBldmVuIHRob3VnaCB3ZQorICAgICAgICAvLyBoYXZlbid0IHlldCBkb25lIGFueSBj
aGVja3MgdG8gc2VlIGlmIEB4IGlzIGEgbnVtYmVyLgorICAgICAgICAvLworICAgICAgICAvLyBC
dXQgaW4gdGhlIGNvbW1vbiBjYXNlcywgd2UgKmRvKiB3YW50IHRvIGVyYWRpY2F0ZSB0aGUgRG91
YmxlUmVwJ3MgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgICAgIC8vIHdlIGRvbid0IGV2ZW4gbmVl
ZCB0aGUgQ2hlY2soUmVhbE51bWJlcjopLiBXZSBjYW4gZG8gdGhpcyBpZiB0aGUgdHJhbnNmb3Jt
YXRpb24KKyAgICAgICAgLy8gaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBmaXJzdCBvZiB0aGUgRG91
YmxlUmVwJ3Mgd2l0aCBvdXIgYXJpdGhtZXRpYyBvcGVyYXRpb24uIFRoaXMKKyAgICAgICAgLy8g
bWVhbnMgZmluZGluZyB0aGUgRG91YmxlUmVwJ3MgaW4gdGhpcyBjdXJyZW50IGJhc2ljIGJsb2Nr
LCBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndAorICAgICAgICAvLyBoYXZlIHNvbWV0aGluZyBs
aWtlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgMTogLi4uCisgICAgICAgIC8vICAgICAy
OiBEb3VibGVSZXAoUmVhbE51bWJlcjpAMSkKKyAgICAgICAgLy8gICAgIDM6IC4uLgorICAgICAg
ICAvLyAgICAgNDogRG91YmxlUmVwKFJlYWxOdW1iZXI6QDMpCisgICAgICAgIC8vICAgICA1OiBB
cml0aEFkZChEb3VibGVSZXA6QDIsIERvdWJsZVJlcDpANCkKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gV2UganVzdCBmYWlsIGZvciB0aGluZ3MgbGlrZSB0aGlzLiBJdCBzaG91bGRuJ3QgdXN1YWxs
eSBoYXBwZW4uCisgICAgICAgIAorICAgICAgICBib29sIGZvdW5kTGVmdCA9IGZhbHNlOworICAg
ICAgICBib29sIGZvdW5kUmlnaHQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgbm9kZUluZGV4
VG9SZXBsYWNlID0gVUlOVF9NQVg7CisgICAgICAgIE5vZGUqIG5vZGVUb0tpbGwgPSBudWxscHRy
OworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1fbm9kZUluZGV4OyBub2RlSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiBiZWZvcmUgZWl0aGVyIERvdWJsZVJl
cCdzIHdlIHNlZSB0aGUgY2hpbGQgb2YgdGhlIG90aGVyIERvdWJsZVJlcCwgd2UgZmFpbC4KKyAg
ICAgICAgICAgIGlmIChub2RlID09IG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChub2RlID09IG1fbm9kZS0+Y2hpbGQy
KCktPmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG5vZGUgPT0gbV9ub2RlLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAg
IGZvdW5kTGVmdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kUmlnaHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9SZXBsYWNlID0gbm9kZUluZGV4OworICAgICAg
ICAgICAgICAgICAgICBub2RlVG9LaWxsID0gbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9ub2RlLT5jaGlsZDIoKSkg
eworICAgICAgICAgICAgICAgIGZvdW5kUmlnaHQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlm
IChmb3VuZExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9SZXBsYWNlID0g
bm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICBub2RlVG9LaWxsID0gbV9ub2RlLT5jaGls
ZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoKG5vZGVJbmRleFRv
UmVwbGFjZSA9PSBVSU5UX01BWCkgPT0gIW5vZGVUb0tpbGwpOworICAgICAgICAKKyAgICAgICAg
Ly8gVGhpcyBjb3VsZCBiZSB1bnNldCBpZiBlaXRoZXIgRG91YmxlUmVwIGlzIGluIGEgZGlmZmVy
ZW50IGJsb2NrLiBNYXliZSB3ZSBjb3VsZCBoYW5kbGUKKyAgICAgICAgLy8gdGhpcyBldmVudHVh
bGx5LCBidXQgaXQncyBoYXJkZXIsIGFuZCBwcm9iYWJseSBsZXNzIGNvbW1vbi4KKyAgICAgICAg
aWYgKG5vZGVJbmRleFRvUmVwbGFjZSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIE5vZGUqIG5vZGVUb1JlcGxhY2UgPSBtX2Jsb2NrLT5hdChub2Rl
SW5kZXhUb1JlcGxhY2UpOworICAgICAgICAKKyAgICAgICAgc3RkOjpzd2FwKG1fYmxvY2stPmF0
KG5vZGVJbmRleFRvUmVwbGFjZSksIG1fYmxvY2stPmF0KG1fbm9kZUluZGV4KSk7CisgICAgICAg
IG1fbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpLm5vZGUo
KSwgUmVhbE51bWJlclVzZSk7CisgICAgICAgIG1fbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKG1fbm9k
ZS0+Y2hpbGQyKCktPmNoaWxkMSgpLm5vZGUoKSwgUmVhbE51bWJlclVzZSk7CisgICAgICAgIAor
ICAgICAgICBub2RlVG9SZXBsYWNlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICBub2RlVG9L
aWxsLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICBub2RlVG9SZXBsYWNlLT5yZW1vdmUoKTsK
KyAgICAgICAgbm9kZVRvS2lsbC0+cmVtb3ZlKCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5n
ZWQgPSB0cnVlOworICAgIH0KKyAgICAKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7
CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
CShyZXZpc2lvbiAxODUyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzNywxMCArMTQzNywxOCBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6
IHsKLSAgICAgICAgICAgIExWYWx1ZSBDMSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsK
LSAgICAgICAgICAgIExWYWx1ZSBDMiA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgICAgIExWYWx1ZSBsZWZ0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAg
ICAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwogCi0g
ICAgICAgICAgICBzZXREb3VibGUoaXNTdWIgPyBtX291dC5kb3VibGVTdWIoQzEsIEMyKSA6IG1f
b3V0LmRvdWJsZUFkZChDMSwgQzIpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShpc1N1YiA/IG1f
b3V0LmRvdWJsZVN1YihsZWZ0LCByaWdodCkgOiBtX291dC5kb3VibGVBZGQobGVmdCwgcmlnaHQp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBSZWFsTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBhcml0aG1ldGljV2l0aFN1bmtlblJl
YWxOdW1iZXJDaGVjaygKKyAgICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBhLCBMVmFsdWUgYikg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdWIgPyBtX291dC5kb3VibGVTdWIoYSwg
YikgOiBtX291dC5kb3VibGVBZGQoYSwgYik7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNTI1LDYgKzE1MzMsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAK
KyAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBhcml0aG1ldGljV2l0
aFN1bmtlblJlYWxOdW1iZXJDaGVjaygKKyAgICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBhLCBM
VmFsdWUgYikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlTXVsKGEs
IGIpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01
NDI2LDYgKzU0NDIsNDUgQEAgcHJpdmF0ZToKIAogICAgICAgICBzZXRKU1ZhbHVlKGFjdGl2YXRp
b24pOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgYXJpdGhtZXRpY1dpdGhTdW5rZW5SZWFsTnVtYmVyQ2hlY2soY29uc3QgRnVuY3RvciYgZW1p
dE1hdGgpCisgICAgeworICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHJpZ2h0
ID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoImFyaXRobWV0aWNXaXRoU3Vua2VuUmVhbE51bWJlckNoZWNrIHNsb3cgcGF0aCIp
KTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJhcml0aG1ldGljV2l0aFN1bmtlblJlYWxOdW1iZXJDaGVjayBjb250aW51YXRpb24iKSk7
CisgICAgICAgIAorICAgICAgICBMVmFsdWUgbGVmdERvdWJsZSA9IHVuYm94RG91YmxlKGxlZnQp
OworICAgICAgICBMVmFsdWUgcmlnaHREb3VibGUgPSB1bmJveERvdWJsZShyaWdodCk7CisgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZW1pdE1hdGgobGVm
dERvdWJsZSwgcmlnaHREb3VibGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAg
ICAgbV9vdXQuZG91YmxlRXF1YWwoZmFzdFJlc3VsdC52YWx1ZSgpLCBmYXN0UmVzdWx0LnZhbHVl
KCkpLAorICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgp
KTsKKyAgICAgICAgCisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIC8vIFdlIHNwZWN1bGF0ZSB0aGF0
IHRoZSBpbnB1dHMgYXJlIGludDMyLiBXZSBjYW5ub3QgdXNlIHRoZSBGVExfVFlQRV9DSEVDSygp
IGhlbHBlcnMKKyAgICAgICAgLy8gYmVjYXVzZSB3aGVuIHdlIGdldCB0byB0aGlzIHBvaW50LCB0
aGUgaW5wdXRzIG1heSBiZSBlaXRoZXIgRG91YmxlUmVhbCBvciBJbnQzMi4gSWYgd2UKKyAgICAg
ICAgLy8gcmVxdWVzdGVkIEludDMyIGZpbHRyYXRpb24sIHRoZW4gdGhhdCB3b3VsZCBiZSB3cm9u
ZywgYmVjYXVzZSB0aGlzIGNoZWNrIG1pZ2h0IGJlCisgICAgICAgIC8vIGJ5cGFzc2VkIGluIHdo
aWNoIGNhc2UgdGhlIGlucHV0cyB3ZXJlIERvdWJsZVJlYWwuIElmIHdlIHJlcXVlc3RlZCBJbnQz
MnxEb3VibGVSZWFsCisgICAgICAgIC8vIGZpbHRyYXRpb24sIHRoZW4gdGhhdCB3b3VsZCBiZSBh
bHNvIHdyb25nLCBzaW5jZSB0aGlzIHdlIHdhbnQgdG8gZXhpdCBpZiBub3QgSW50MzIgZXZlbgor
ICAgICAgICAvLyBpZiB0aGUgaW5wdXRzIGFyZSBwcm92ZWQgdG8gYmUgSW50MzJ8RG91YmxlUmVh
bCwgc2luY2Ugb24gdGhpcyBwYXRoIHdlIHdpbGwgYWx3YXlzCisgICAgICAgIC8vIHVuYm94IGlu
dDMyLgorICAgICAgICBzcGVjdWxhdGUoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGxlZnQpLCBtX25v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgaXNOb3RJbnQzMihsZWZ0KSk7CisgICAgICAgIGxlZnREb3Vi
bGUgPSBtX291dC5pbnRUb0RvdWJsZSh1bmJveEludDMyKGxlZnQpKTsKKyAgICAgICAgc3BlY3Vs
YXRlKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShyaWdodCksIG1fbm9kZS0+Y2hpbGQyKCkubm9kZSgp
LCBpc05vdEludDMyKHJpZ2h0KSk7CisgICAgICAgIHJpZ2h0RG91YmxlID0gbV9vdXQuaW50VG9E
b3VibGUodW5ib3hJbnQzMihyaWdodCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKGVtaXRNYXRoKGxlZnREb3VibGUsIHJpZ2h0RG91YmxlKSk7Cisg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBzZXREb3VibGUobV9v
dXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBmaWx0ZXIgdGhlIGlucHV0cyBhcHByb3ByaWF0
ZWx5LgorICAgICAgICBtX2ludGVycHJldGVyLmZpbHRlcihtX25vZGUtPmNoaWxkMSgpLCBTcGVj
Qnl0ZWNvZGVSZWFsTnVtYmVyKTsKKyAgICAgICAgbV9pbnRlcnByZXRlci5maWx0ZXIobV9ub2Rl
LT5jaGlsZDIoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlcik7CisgICAgfQogCiAjaWYgRU5BQkxF
KEZUTF9OQVRJVkVfQ0FMTF9JTkxJTklORykKICAgICBMVmFsdWUgZ2V0RnVuY3Rpb25CeVN5bWJv
bChjb25zdCBDU3RyaW5nIHN5bWJvbCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>254406</attachid>
            <date>2015-06-05 22:02:50 -0700</date>
            <delta_ts>2015-09-14 11:09:13 -0700</delta_ts>
            <desc>better</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18855</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1Mjg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE1LTA2LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2luayByZWFsIG51bWJlciB0eXBlIGNoZWNrcyBiZWxvdyB0aGUgZmlyc3QgYXJpdGhtZXRpYyBv
cGVyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTcyMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgQ29uc2lkZXIgY29kZSBsaWtlOgorICAgICAgICAKKyAgICAgICAgICAgIG8ueCAr
IG8ueQorICAgICAgICAKKyAgICAgICAgd2hlcmUgYm90aCBvLnggYW5kIG8ueSBhcmUgcHJlZGlj
dGVkIHRvIGJlIHJlYWwgZG91Ymxlcy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHdlIGhhbmRsZWQK
KyAgICAgICAgdGhpcyBieSBjb252ZXJ0aW5nIHRoZSBsb2FkZWQgSlNWYWx1ZXMgdG8gZG91Ymxl
IHdpdGhvdXQgY2hlY2tzLCBhbmQgdGhlbiBkb2luZyBOYU4gY2hlY2tzCisgICAgICAgIG9uIHRo
ZSBkb3VibGVzLiBUaGF0IHdhcyBwcmV0dHkgZ29vZC4gQnV0IHRoaXMgY2hhbmdlIG1ha2VzIGl0
IGJldHRlcjogaW5zdGVhZCBvZiBkb2luZworICAgICAgICB0d28gTmFOIGNoZWNrcyAob25lIG9u
IGVhY2ggaW5wdXQpLCB3ZSBkbyBhIE5hTiBjaGVjayBvbiB0aGUgcmVzdWx0IG9mIHRoZSBhZGRp
dGlvbi4gSWYKKyAgICAgICAgdGhhdCBmYWlscywgdGhlbiB3ZSBhdHRlbXB0IGEgZnVsbCB2YWx1
ZS10by1kb3VibGUgY29udmVyc2lvbiBhbmQgcmVkbyB0aGUgYWRkaXRpb24uIFRoaXMKKyAgICAg
ICAgb3B0aW1pemF0aW9uIG9ubHkgd29ya3MgaW4gY2VydGFpbiBjYXNlcyBhcyBpdCByZXF1aXJl
cyB1cyB0byBob2lzdCB0aGUgYWRkaXRpb24gdXAgdG8gdGhlCisgICAgICAgIHBvaW50IG9mIHRo
ZSBmaXJzdCB2YWx1ZS10by1kb3VibGUgY29udmVyc2lvbiwgc28gYXMgdG8gYXZvaWQgc2lua2lu
ZyB0aG9zZSBjaGVja3MuIEFsbCBvZgorICAgICAgICB0aGUgd2VpcmQgY2F2ZWF0cyBhcmUgZG9j
dW1lbnRlZCBpbiB0aGUgU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6dHJ5VG9TaW5rUmVhbE51bWJl
ckNoZWNrKCkKKyAgICAgICAgbWV0aG9kLgorICAgICAgICAKKyAgICAgICAgUmlnaHQgbm93LCB3
ZSBkbyB0aGlzIG9wdGltaXphdGlvbiBvbmx5IGZvciBhZGQsIHN1YiwgYW5kIG11bCwgc2luY2Ug
dGhvc2Ugc2VlbSB1bmxpa2VseQorICAgICAgICB0byBwcm9kdWNlIE5hTiBmb3Igbm9uLU5hTiBp
bnB1dHMuIEV2ZW4gdGhlc2Ugb3BlcmF0aW9ucyBjYW4gcmV0dXJuIE5hTiBmb3Igbm9uLU5hTgor
ICAgICAgICBpbnB1dHMsIGZvciBleGFtcGxlIEluZmluaXR5ICsgLUluZmluaXR5IG9yIDAgKiBJ
bmZpbml0eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgb3B0aW1pemF0aW9uIGlzIG9ubHkgZW5h
YmxlZCBpbiB0aGUgRlRMIGZvciBub3cuIFRoZSB3aW4gZnJvbSB0aGlzIG9wdGltaXphdGlvbiBp
cworICAgICAgICBzbWFsbCBlbm91Z2ggdGhhdCBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUg
ZWZmb3J0IHRvIHB1dCBpdCBpbnRvIHRoZSBERkcuCisgICAgICAgIAorICAgICAgICBUaGlzIGlz
IGEgOCUgc3BlZWQtdXAgb24gdGhlIGRvdWJsZS1yZXAtdXNlIG1pY3JvYmVuY2htYXJrLgorCisg
ICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVDb21tdXRhdGl2aXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjp0cnlUb1NpbmtSZWFs
TnVtYmVyQ2hlY2spOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aEFkZE9yU3ViKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1hdGVyaWFsaXplQ3JlYXRlQWN0
aXZhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFyaXRobWV0aWNX
aXRoU3Vua2VuUmVhbE51bWJlckNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Z2V0RnVuY3Rpb25CeVN5bWJvbCk6CisKIDIwMTUtMDYtMDUgIE1hcmsgTGFtICA8bWFy
ay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFN1YmNsYXNzZXMgb2YgSlNOb25GaW5hbE9iamVj
dCB3aXRoIGdjJ2FibGUgY2hpbGRyZW4gbmVlZCB0byBpbXBsZW1lbnQgdmlzaXRDaGlsZHJlbigp
LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg1Mjc3KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00NDgsNiArNDQ4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNNYWNoaW5l
SW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAg
ICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQg
JiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAg
ICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVtYmVyKCkgKyByaWdo
dC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MDgsNiArNTA5LDcg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAg
Zm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNNYWNoaW5lSW50KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNl
OgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJp
Z2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Rv
dWJsZU51bWJlcihsZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC02MTEsNiArNjEzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNNYWNoaW5lSW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJl
cFVzZToKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQg
JiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAg
ICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVtYmVy
KCkgKiByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE4NTI3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYg
KzUxLDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9p
bnRTdGF0ZSA9PSBGaXhwb2ludE5vdENvbnZlcmdlZCk7CiAgICAgICAgIAorICAgICAgICAvLyBJ
biBGVEwgbW9kZSB3ZSB3aWxsIGRvIHNvbWUgb3B0aW1pemF0aW9ucyB0aGF0IHJlcXVpcmUgcmVm
ZXJlbmNlIGNvdW50cy4KKyAgICAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQor
ICAgICAgICAgICAgbV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIAogICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpAQCAtMTEy
LDEwICsxMTYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0
eU92ZXJDaGlsZDEoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgdHJ5VG9TaW5rUmVhbE51bWJlckNoZWNrKCk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAg
ICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworICAgICAgICAgICAgdHJ5VG9TaW5rUmVh
bE51bWJlckNoZWNrKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIEFyaXRoU3ViOgpAQCAtMTI4LDkgKzEzNSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX25vZGVJbmRleCwgbV9ub2RlLT5vcmlnaW4sIGpzTnVtYmVyKC12
YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdHJ5VG9TaW5rUmVhbE51bWJlckNoZWNrKCk7CiAgICAgICAgICAgICBicmVhazsK
IAogICAgICAgICBjYXNlIEFyaXRoUG93OgpAQCAtMTYzLDYgKzE3MCwxMCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBoYWRJbnQzMkNoZWNr
ID0gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0g
RG91YmxlUmVwKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpICE9IE51bWJlclVzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUo
KTsgOyBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYg
KGNhbm9uaWNhbFJlc3VsdFJlcHJlc2VudGF0aW9uKG5vZGUtPnJlc3VsdCgpKSA9PQogICAgICAg
ICAgICAgICAgICAgICBjYW5vbmljYWxSZXN1bHRSZXByZXNlbnRhdGlvbihtX25vZGUtPnJlc3Vs
dCgpKSkgewpAQCAtMjc1LDYgKzI4NiwxMjQgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0K
ICAgICAKKyAgICB2b2lkIHRyeVRvU2lua1JlYWxOdW1iZXJDaGVjaygpCisgICAgeworICAgICAg
ICAvLyBXZSBjdXJyZW50bHkgZG9uJ3Qgc3VwcG9ydCB0aGlzIGV4Y2VwdCBpbiB0aGUgRlRMLgor
ICAgICAgICBpZiAoIWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgLy8gV2UgcmVxdWlyZSB0aGF0IGJvdGggb2YgdGhlIGlu
cHV0cyBhcmUgRG91YmxlUmVwKFJlYWxOdW1iZXI6KSwgYW5kIHRoYXQgdGhvc2UKKyAgICAgICAg
Ly8gRG91YmxlUmVwJ3MgaGF2ZSBubyBvdGhlciB1c2Vycy4KKyAgICAgICAgYXV0byBpc1ZhbGlk
SW5wdXQgPSBbJl0gKEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgcmV0dXJuIGVkZ2UtPm9wKCkg
PT0gRG91YmxlUmVwCisgICAgICAgICAgICAgICAgJiYgZWRnZS0+Y2hpbGQxKCkudXNlS2luZCgp
ID09IFJlYWxOdW1iZXJVc2UKKyAgICAgICAgICAgICAgICAmJiBlZGdlLT5hZGp1c3RlZFJlZkNv
dW50KCkgPT0gMTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkSW5wdXQobV9ub2Rl
LT5jaGlsZDEoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghaXNWYWxpZElu
cHV0KG1fbm9kZS0+Y2hpbGQyKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgLy8gTm93IGNvbWVzIHRoZSBoYXJkIHBhcnQ6IHdlIGNhbiBvbmx5IGRvIHRoaXMgaWYg
d2UgY2FuIGhvaXN0IHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbgorICAgICAgICAvLyB1cCB0byB0
aGUgZmlyc3Qgb2YgdGhlIHR3byBEb3VibGVSZXAncy4gVGhpcyBpcyBiZWNhdXNlIG90aGVyd2lz
ZSB3ZSdsbCBlaXRoZXIgc3RpbGwKKyAgICAgICAgLy8gaGF2ZSBDaGVjayhSZWFsTnVtYmVyOikg
aW4gcGxhY2Ugb2YgdGhlIERvdWJsZVJlcChSZWFsTnVtYmVyOiksIHdoaWNoIGlzIGp1c3QgYXMK
KyAgICAgICAgLy8gZXhwZW5zaXZlIGFzIHRoZSBEb3VibGVSZXAuIE9yLCBpZiB3ZSB0cnkgdG8g
anVzdCByZW1vdmUgdGhlIERvdWJsZVJlcCdzIGVudGlyZWx5IHRoZW4KKyAgICAgICAgLy8gd2Ug
dmlvbGF0ZSB0aGUgImRvbid0IHNpbmsgY2hlY2tzIiBwcmluY2lwbGUuIEhlcmUncyBhIGNvdW50
ZXJleGFtcGxlIG9mIHdoeToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3JpZ2luYWwgY29kZToK
KyAgICAgICAgLy8gICAgIDE6IERvdWJsZVJlcChSZWFsTnVtYmVyOkB4KQorICAgICAgICAvLyAg
ICAgMjogRG91YmxlUmVwKFJlYWxOdW1iZXI6QHkpCisgICAgICAgIC8vICAgICAzOiBJc051bWJl
cihAeCkKKyAgICAgICAgLy8gICAgIDQ6IENhbGwoLi4uLCBAMykKKyAgICAgICAgLy8gICAgIDU6
IEFyaXRoQWRkKERvdWJsZVJlcDpAMSwgRG91YmxlUmVwOkAyKQorICAgICAgICAvLworICAgICAg
ICAvLyBUaGVuIHdlIG1pZ2h0IGVsaW1pbmF0ZSB0aGUgSXNOdW1iZXIgYmVjYXVzZSB0aGUgRG91
YmxlUmVwJ3MgdHlwZSBjaGVja3M6CisgICAgICAgIC8vCisgICAgICAgIC8vIEFmdGVyIElzTnVt
YmVyIGVsaW1pbmF0aW9uOgorICAgICAgICAvLyAgICAgMTogRG91YmxlUmVwKFJlYWxOdW1iZXI6
QHgpCisgICAgICAgIC8vICAgICAyOiBEb3VibGVSZXAoUmVhbE51bWJlcjpAeSkKKyAgICAgICAg
Ly8gICAgIDM6IEpTQ29uc3RhbnQodHJ1ZSkKKyAgICAgICAgLy8gICAgIDQ6IENhbGwoLi4uLCBA
MykKKyAgICAgICAgLy8gICAgIDU6IEFyaXRoQWRkKERvdWJsZVJlcDpAMSwgRG91YmxlUmVwOkAy
KQorICAgICAgICAvLworICAgICAgICAvLyBBbmQgdGhlbiB3ZSBtaWdodCB0cnkgdG8gZWxpbWlu
YXQgdGhlIERvdWJsZVJlcCdzIGVudGlyZWx5OgorICAgICAgICAvLworICAgICAgICAvLyBBZnRl
ciBzdHJlbmd0aCByZWR1Y3Rpb246CisgICAgICAgIC8vICAgICAxOiA8cmVtb3ZlZD4KKyAgICAg
ICAgLy8gICAgIDI6IDxyZW1vdmVkPgorICAgICAgICAvLyAgICAgMzogSlNDb25zdGFudCh0cnVl
KQorICAgICAgICAvLyAgICAgNDogQ2FsbCguLi4sIEAzKQorICAgICAgICAvLyAgICAgNTogQXJp
dGhBZGQoUmVhbE51bWJlcjpAeCwgUmVhbE51bWJlcjpAeSkKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gQW5kIG5vdyB3ZSBtaWdodCBlbmQgdXAgbWFraW5nIHRoZSBjYWxsIHBhc3NpbmcgInRydWUi
IGZvciAiSXNOdW1iZXIiLCBldmVuIHRob3VnaCB3ZQorICAgICAgICAvLyBoYXZlbid0IHlldCBk
b25lIGFueSBjaGVja3MgdG8gc2VlIGlmIEB4IGlzIGEgbnVtYmVyLgorICAgICAgICAvLworICAg
ICAgICAvLyBCdXQgaW4gdGhlIGNvbW1vbiBjYXNlcywgd2UgKmRvKiB3YW50IHRvIGVyYWRpY2F0
ZSB0aGUgRG91YmxlUmVwJ3MgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgICAgIC8vIHdlIGRvbid0
IGV2ZW4gbmVlZCB0aGUgQ2hlY2soUmVhbE51bWJlcjopLiBXZSBjYW4gZG8gdGhpcyBpZiB0aGUg
dHJhbnNmb3JtYXRpb24KKyAgICAgICAgLy8gaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBmaXJzdCBv
ZiB0aGUgRG91YmxlUmVwJ3Mgd2l0aCBvdXIgYXJpdGhtZXRpYyBvcGVyYXRpb24uIFRoaXMKKyAg
ICAgICAgLy8gbWVhbnMgZmluZGluZyB0aGUgRG91YmxlUmVwJ3MgaW4gdGhpcyBjdXJyZW50IGJh
c2ljIGJsb2NrLCBhbmQgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndAorICAgICAgICAvLyBoYXZlIHNv
bWV0aGluZyBsaWtlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgMTogLi4uCisgICAgICAg
IC8vICAgICAyOiBEb3VibGVSZXAoUmVhbE51bWJlcjpAMSkKKyAgICAgICAgLy8gICAgIDM6IC4u
LgorICAgICAgICAvLyAgICAgNDogRG91YmxlUmVwKFJlYWxOdW1iZXI6QDMpCisgICAgICAgIC8v
ICAgICA1OiBBcml0aEFkZChEb3VibGVSZXA6QDIsIERvdWJsZVJlcDpANCkKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gV2UganVzdCBmYWlsIGZvciB0aGluZ3MgbGlrZSB0aGlzLiBJdCBzaG91bGRu
J3QgdXN1YWxseSBoYXBwZW4uCisgICAgICAgIAorICAgICAgICBib29sIGZvdW5kTGVmdCA9IGZh
bHNlOworICAgICAgICBib29sIGZvdW5kUmlnaHQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQg
bm9kZUluZGV4VG9SZXBsYWNlID0gVUlOVF9NQVg7CisgICAgICAgIE5vZGUqIG5vZGVUb0tpbGwg
PSBudWxscHRyOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1fbm9kZUluZGV4
OyBub2RlSW5kZXgtLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChu
b2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiBiZWZvcmUgZWl0aGVy
IERvdWJsZVJlcCdzIHdlIHNlZSB0aGUgY2hpbGQgb2YgdGhlIG90aGVyIERvdWJsZVJlcCwgd2Ug
ZmFpbC4KKyAgICAgICAgICAgIGlmIChub2RlID09IG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChub2RlID09IG1fbm9k
ZS0+Y2hpbGQyKCktPmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9ub2RlLT5jaGlsZDEoKSkgeworICAgICAg
ICAgICAgICAgIGZvdW5kTGVmdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kUmln
aHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9SZXBsYWNlID0gbm9kZUluZGV4
OworICAgICAgICAgICAgICAgICAgICBub2RlVG9LaWxsID0gbV9ub2RlLT5jaGlsZDIoKS5ub2Rl
KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9ub2RlLT5j
aGlsZDIoKSkgeworICAgICAgICAgICAgICAgIGZvdW5kUmlnaHQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGlmIChmb3VuZExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9S
ZXBsYWNlID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgICAgICBub2RlVG9LaWxsID0gbV9u
b2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoKG5v
ZGVJbmRleFRvUmVwbGFjZSA9PSBVSU5UX01BWCkgPT0gIW5vZGVUb0tpbGwpOworICAgICAgICAK
KyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSB1bnNldCBpZiBlaXRoZXIgRG91YmxlUmVwIGlzIGlu
IGEgZGlmZmVyZW50IGJsb2NrLiBNYXliZSB3ZSBjb3VsZCBoYW5kbGUKKyAgICAgICAgLy8gdGhp
cyBldmVudHVhbGx5LCBidXQgaXQncyBoYXJkZXIsIGFuZCBwcm9iYWJseSBsZXNzIGNvbW1vbi4K
KyAgICAgICAgaWYgKG5vZGVJbmRleFRvUmVwbGFjZSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIE5vZGUqIG5vZGVUb1JlcGxhY2UgPSBtX2Jsb2Nr
LT5hdChub2RlSW5kZXhUb1JlcGxhY2UpOworICAgICAgICAKKyAgICAgICAgc3RkOjpzd2FwKG1f
YmxvY2stPmF0KG5vZGVJbmRleFRvUmVwbGFjZSksIG1fYmxvY2stPmF0KG1fbm9kZUluZGV4KSk7
CisgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCkgPSBFZGdlKG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxk
MSgpLm5vZGUoKSwgUmVhbE51bWJlclVzZSk7CisgICAgICAgIG1fbm9kZS0+Y2hpbGQyKCkgPSBF
ZGdlKG1fbm9kZS0+Y2hpbGQyKCktPmNoaWxkMSgpLm5vZGUoKSwgUmVhbE51bWJlclVzZSk7Cisg
ICAgICAgIAorICAgICAgICBub2RlVG9SZXBsYWNlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAg
ICBub2RlVG9LaWxsLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICBub2RlVG9SZXBsYWNlLT5y
ZW1vdmUoKTsKKyAgICAgICAgbm9kZVRvS2lsbC0+cmVtb3ZlKCk7CisgICAgICAgIAorICAgICAg
ICBtX2NoYW5nZWQgPSB0cnVlOworICAgIH0KKyAgICAKICAgICBJbnNlcnRpb25TZXQgbV9pbnNl
cnRpb25TZXQ7CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX25vZGVJ
bmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCShyZXZpc2lvbiAxODUyNzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMTUgKzYzLDE3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsK
IAotc3RhdGljIHN0ZDo6YXRvbWljPGludD4gY29tcGlsZUNvdW50ZXI7CituYW1lc3BhY2Ugewor
CitzdGQ6OmF0b21pYzxpbnQ+IGNvbXBpbGVDb3VudGVyOwogCiAjaWYgQVNTRVJUX0RJU0FCTEVE
Ci1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVucmVhY2hhYmxlKCkKK05P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBmdGxVbnJlYWNoYWJsZSgpCiB7CiAgICAgQ1JBU0go
KTsKIH0KICNlbHNlCi1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVucmVh
Y2hhYmxlKAorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZ0bFVucmVhY2hhYmxlKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIHVuc2lnbmVkIG5v
ZGVJbmRleCkKIHsKICAgICBkYXRhTG9nKCJDcmFzaGluZyBpbiB0aG91Z2h0LXRvLWJlLXVucmVh
Y2hhYmxlIEZUTC1nZW5lcmF0ZWQgY29kZSBmb3IgIiwgcG9pbnRlckR1bXAoY29kZUJsb2NrKSwg
IiBhdCBiYXNpYyBibG9jayAjIiwgYmxvY2tJbmRleCk7CkBAIC05NjAsMjggKzk2Miw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAg
ICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVuYm94RG91Ymxl
KHZhbHVlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlUmVwIFJlYWxOdW1iZXJVc2UgaW50IGNhc2Ui
KSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkRvdWJsZVJlcCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZG91YmxlVmFs
dWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmRv
dWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCi0gICAgICAgICAgICAgICAgdXN1
YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaW50Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAot
ICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNw
ZWNCeXRlY29kZVJlYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSAmIH5TcGVjRnVsbERvdWJsZSkpOwotICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5pbnRU
b0RvdWJsZSh1bmJveEludDMyKHZhbHVlKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoanNWYWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCksIHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMTQzNywxMCArMTQxOCwxOCBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAg
IExWYWx1ZSBDMSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExW
YWx1ZSBDMiA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBsZWZ0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVl
IHJpZ2h0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwogCi0gICAgICAgICAgICBzZXRE
b3VibGUoaXNTdWIgPyBtX291dC5kb3VibGVTdWIoQzEsIEMyKSA6IG1fb3V0LmRvdWJsZUFkZChD
MSwgQzIpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShpc1N1YiA/IG1fb3V0LmRvdWJsZVN1Yihs
ZWZ0LCByaWdodCkgOiBtX291dC5kb3VibGVBZGQobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVy
VXNlOiB7CisgICAgICAgICAgICBhcml0aG1ldGljV2l0aFN1bmtlblJlYWxOdW1iZXJDaGVjaygK
KyAgICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBhLCBMVmFsdWUgYikgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaXNTdWIgPyBtX291dC5kb3VibGVTdWIoYSwgYikgOiBtX291dC5kb3Vi
bGVBZGQoYSwgYik7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNTI1LDYgKzE1MTQsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBS
ZWFsTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBhcml0aG1ldGljV2l0aFN1bmtlblJlYWxOdW1i
ZXJDaGVjaygKKyAgICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBhLCBMVmFsdWUgYikgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlTXVsKGEsIGIpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01NDI2LDYgKzU0MjMsMzIg
QEAgcHJpdmF0ZToKIAogICAgICAgICBzZXRKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgYXJpdGhtZXRpY1dp
dGhTdW5rZW5SZWFsTnVtYmVyQ2hlY2soY29uc3QgRnVuY3RvciYgZW1pdE1hdGgpCisgICAgewor
ICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFyaXRo
bWV0aWNXaXRoU3Vua2VuUmVhbE51bWJlckNoZWNrIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhcml0aG1ldGlj
V2l0aFN1bmtlblJlYWxOdW1iZXJDaGVjayBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgbGVmdERvdWJsZSA9IHVuYm94RG91YmxlKGxlZnQpOworICAgICAgICBMVmFs
dWUgcmlnaHREb3VibGUgPSB1bmJveERvdWJsZShyaWdodCk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZW1pdE1hdGgobGVmdERvdWJsZSwgcmlnaHRE
b3VibGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZG91Ymxl
RXF1YWwoZmFzdFJlc3VsdC52YWx1ZSgpLCBmYXN0UmVzdWx0LnZhbHVlKCkpLAorICAgICAgICAg
ICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAgCisg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIGxlZnREb3VibGUgPSBqc1ZhbHVlVG9Eb3VibGVBc3N1bWlu
Z1JlYWxEb3VibGUobV9ub2RlLT5jaGlsZDEoKSwgbGVmdCwgbGVmdERvdWJsZSk7CisgICAgICAg
IHJpZ2h0RG91YmxlID0ganNWYWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91YmxlKG1fbm9kZS0+
Y2hpbGQyKCksIHJpZ2h0LCByaWdodERvdWJsZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3IoZW1pdE1hdGgobGVmdERvdWJsZSwgcmlnaHREb3VibGUp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldERvdWJs
ZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwor
ICAgIH0KIAogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgTFZhbHVl
IGdldEZ1bmN0aW9uQnlTeW1ib2woY29uc3QgQ1N0cmluZyBzeW1ib2wpCkBAIC03NDY2LDYgKzc0
ODksMzMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaW50ZWdlclZhbHVl
OwogICAgIH0KKyAgICAKKyAgICBMVmFsdWUganNWYWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91
YmxlKEVkZ2UgZWRnZSwgTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNW
YWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91YmxlKGVkZ2UsIGpzVmFsdWUsIHVuYm94RG91Ymxl
KGpzVmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGpzVmFsdWVUb0RvdWJsZUFzc3Vt
aW5nUmVhbERvdWJsZShFZGdlIGVkZ2UsIExWYWx1ZSBqc1ZhbHVlLCBMVmFsdWUgZG91YmxlVmFs
dWUpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJqc1ZhbHVlVG9Eb3VibGVBc3N1bWluZ1JlYWxEb3VibGUgUmVhbE51bWJlclVzZSBp
bnQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGVBc3N1bWluZ1JlYWxEb3VibGUgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihkb3VibGVWYWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCisgICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwK
KyAgICAgICAgICAgIGlzTm90SW50MzIoanNWYWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5TcGVj
RG91YmxlUmVhbCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmludFRvRG91YmxlKHVuYm94SW50MzIoanNWYWx1ZSkpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9v
dXQuZG91YmxlVHlwZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgfQogCiAgICAgTFZh
bHVlIGlzTnVtYmVyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1
bGxUb3ApCiAgICAgewpAQCAtNzk0NywyMyArNzk5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVk
Z2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBkb3VibGVWYWx1
ZSA9IHVuYm94RG91YmxlKHZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlu
dENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZVJlYWxOdW1iZXIgaW50IGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgic3BlY3VsYXRlUmVhbE51bWJlciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChkb3Vi
bGVWYWx1ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24p
LCByYXJlbHkoaW50Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgdHlwZUNoZWNrKAotICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2Rl
LT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwKLSAgICAgICAgICAgIGlzTm90SW50
MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkgJiB+U3BlY0Z1bGxEb3VibGUp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBqc1ZhbHVlVG9Eb3VibGVB
c3N1bWluZ1JlYWxEb3VibGUobV9ub2RlLT5jaGlsZDEoKSwgdmFsdWUpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSBlZGdlKQpAQCAtODY2MCw2ICs4
Njk0LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX3RiYWFTdHJ1Y3RLaW5kOwogfTsKIAor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIHZvaWQgbG93ZXJERkdUb0xMVk0oU3RhdGUmIHN0
YXRlKQogewogICAgIExvd2VyREZHVG9MTFZNIGxvd2VyaW5nKHN0YXRlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255861</attachid>
            <date>2015-06-30 15:04:57 -0700</date>
            <delta_ts>2015-06-30 15:04:57 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18569</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg1NzU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ3IEBA
CisyMDE1LTA2LTA1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2luayByZWFsIG51bWJlciB0eXBlIGNoZWNrcyBiZWxvdyB0aGUgZmlyc3QgYXJpdGhtZXRpYyBv
cGVyYXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0NTcyMQorCisgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorICAgICAgICAK
KyAgICAgICAgQ29uc2lkZXIgY29kZSBsaWtlOgorICAgICAgICAKKyAgICAgICAgICAgIG8ueCAr
IG8ueQorICAgICAgICAKKyAgICAgICAgd2hlcmUgYm90aCBvLnggYW5kIG8ueSBhcmUgcHJlZGlj
dGVkIHRvIGJlIHJlYWwgZG91Ymxlcy4gUHJpb3IgdG8gdGhpcyBjaGFuZ2UsIHdlIGhhbmRsZWQK
KyAgICAgICAgdGhpcyBieSBjb252ZXJ0aW5nIHRoZSBsb2FkZWQgSlNWYWx1ZXMgdG8gZG91Ymxl
IHdpdGhvdXQgY2hlY2tzLCBhbmQgdGhlbiBkb2luZyBOYU4gY2hlY2tzCisgICAgICAgIG9uIHRo
ZSBkb3VibGVzLiBUaGF0IHdhcyBwcmV0dHkgZ29vZC4gQnV0IHRoaXMgY2hhbmdlIG1ha2VzIGl0
IGJldHRlcjogaW5zdGVhZCBvZiBkb2luZworICAgICAgICB0d28gTmFOIGNoZWNrcyAob25lIG9u
IGVhY2ggaW5wdXQpLCB3ZSBkbyBhIE5hTiBjaGVjayBvbiB0aGUgcmVzdWx0IG9mIHRoZSBhZGRp
dGlvbi4gSWYKKyAgICAgICAgdGhhdCBmYWlscywgdGhlbiB3ZSBhdHRlbXB0IGEgZnVsbCB2YWx1
ZS10by1kb3VibGUgY29udmVyc2lvbiBhbmQgcmVkbyB0aGUgYWRkaXRpb24uIFRoaXMKKyAgICAg
ICAgb3B0aW1pemF0aW9uIG9ubHkgd29ya3MgaW4gY2VydGFpbiBjYXNlcyBhcyBpdCByZXF1aXJl
cyB1cyB0byBob2lzdCB0aGUgYWRkaXRpb24gdXAgdG8gdGhlCisgICAgICAgIHBvaW50IG9mIHRo
ZSBmaXJzdCB2YWx1ZS10by1kb3VibGUgY29udmVyc2lvbiwgc28gYXMgdG8gYXZvaWQgc2lua2lu
ZyB0aG9zZSBjaGVja3MuIEFsbCBvZgorICAgICAgICB0aGUgd2VpcmQgY2F2ZWF0cyBhcmUgZG9j
dW1lbnRlZCBpbiB0aGUgU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6dHJ5VG9TaW5rUmVhbE51bWJl
ckNoZWNrKCkKKyAgICAgICAgbWV0aG9kLgorICAgICAgICAKKyAgICAgICAgUmlnaHQgbm93LCB3
ZSBkbyB0aGlzIG9wdGltaXphdGlvbiBvbmx5IGZvciBhZGQsIHN1YiwgYW5kIG11bCwgc2luY2Ug
dGhvc2Ugc2VlbSB1bmxpa2VseQorICAgICAgICB0byBwcm9kdWNlIE5hTiBmb3Igbm9uLU5hTiBp
bnB1dHMuIEV2ZW4gdGhlc2Ugb3BlcmF0aW9ucyBjYW4gcmV0dXJuIE5hTiBmb3Igbm9uLU5hTgor
ICAgICAgICBpbnB1dHMsIGZvciBleGFtcGxlIEluZmluaXR5ICsgLUluZmluaXR5IG9yIDAgKiBJ
bmZpbml0eS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgb3B0aW1pemF0aW9uIGlzIG9ubHkgZW5h
YmxlZCBpbiB0aGUgRlRMIGZvciBub3cuIFRoZSB3aW4gZnJvbSB0aGlzIG9wdGltaXphdGlvbiBp
cworICAgICAgICBzbWFsbCBlbm91Z2ggdGhhdCBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCB0aGUg
ZWZmb3J0IHRvIHB1dCBpdCBpbnRvIHRoZSBERkcuCisgICAgICAgIAorICAgICAgICBUaGlzIGlz
IGEgOCUgc3BlZWQtdXAgb24gdGhlIGRvdWJsZS1yZXAtdXNlIG1pY3JvYmVuY2htYXJrLgorCisg
ICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVOb2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjpoYW5kbGVDb21tdXRhdGl2aXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJlbmd0aFJlZHVjdGlvblBoYXNlOjp0cnlUb1NpbmtSZWFs
TnVtYmVyQ2hlY2spOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aEFkZE9yU3ViKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1hdGVyaWFsaXplQ3JlYXRlQWN0
aXZhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFyaXRobWV0aWNX
aXRoU3Vua2VuUmVhbE51bWJlckNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Z2V0RnVuY3Rpb25CeVN5bWJvbCk6CisKIDIwMTUtMDYtMTkgIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBBdm9pZCBn
ZXRPd25Qcm9wZXJ0eU5hbWVzL1N5bWJvbHMgb24gdmVyeSBsYXJnZSBsaXN0cwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkocmV2aXNpb24gMTg1NzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
NDgsNiArNDQ4LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNNYWNoaW5lSW50KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAgICAgICAgY2FzZSBS
ZWFsTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051
bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFu
dChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigp
KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01MDgsNiArNTA5LDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNNYWNoaW5lSW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIERvdWJsZVJlcFVzZToKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICAg
ICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYgbGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVy
KCkpIHsKICAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihs
ZWZ0LmFzTnVtYmVyKCkgLSByaWdodC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC02MTEsNiArNjEzLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNNYWNoaW5lSW50
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKKyAgICAg
ICAgY2FzZSBSZWFsTnVtYmVyVXNlOgogICAgICAgICAgICAgaWYgKGxlZnQgJiYgcmlnaHQgJiYg
bGVmdC5pc051bWJlcigpICYmIHJpZ2h0LmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgICAgICBz
ZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihsZWZ0LmFzTnVtYmVyKCkgKiByaWdodC5h
c051bWJlcigpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE4NTc1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEwIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZml4cG9pbnRTdGF0ZSA9PSBG
aXhwb2ludE5vdENvbnZlcmdlZCk7CiAgICAgICAgIAorICAgICAgICAvLyBJbiBGVEwgbW9kZSB3
ZSB3aWxsIGRvIHNvbWUgb3B0aW1pemF0aW9ucyB0aGF0IHJlcXVpcmUgcmVmZXJlbmNlIGNvdW50
cy4KKyAgICAgICAgaWYgKGlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQorICAgICAgICAgICAg
bV9ncmFwaC5jb21wdXRlUmVmQ291bnRzKCk7CisgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQg
PSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewpAQCAtMTEyLDEwICsxMTYsMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdHJ5VG9TaW5rUmVhbE51bWJlckNoZWNrKCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoTXVsOgogICAgICAgICAgICAgaGFu
ZGxlQ29tbXV0YXRpdml0eSgpOworICAgICAgICAgICAgdHJ5VG9TaW5rUmVhbE51bWJlckNoZWNr
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRo
U3ViOgpAQCAtMTI4LDkgKzEzNSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX25vZGVJbmRleCwgbV9ub2RlLT5vcmlnaW4sIGpzTnVtYmVyKC12YWx1ZSkpKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgdHJ5
VG9TaW5rUmVhbE51bWJlckNoZWNrKCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBj
YXNlIEFyaXRoUG93OgpAQCAtMTYzLDYgKzE3MCwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBoYWRJbnQzMkNoZWNrID0gdHJ1ZTsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gRG91YmxlUmVwKSB7
CisgICAgICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpICE9IE51bWJl
clVzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgPSBtX25vZGUtPmNoaWxkMSgpLm5vZGUoKTsgOyBub2RlID0g
bm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhbm9uaWNhbFJl
c3VsdFJlcHJlc2VudGF0aW9uKG5vZGUtPnJlc3VsdCgpKSA9PQogICAgICAgICAgICAgICAgICAg
ICBjYW5vbmljYWxSZXN1bHRSZXByZXNlbnRhdGlvbihtX25vZGUtPnJlc3VsdCgpKSkgewpAQCAt
Mjc1LDYgKzI4NiwxMjQgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2
b2lkIHRyeVRvU2lua1JlYWxOdW1iZXJDaGVjaygpCisgICAgeworICAgICAgICAvLyBXZSBjdXJy
ZW50bHkgZG9uJ3Qgc3VwcG9ydCB0aGlzIGV4Y2VwdCBpbiB0aGUgRlRMLgorICAgICAgICBpZiAo
IWlzRlRMKG1fZ3JhcGgubV9wbGFuLm1vZGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgLy8gV2UgcmVxdWlyZSB0aGF0IGJvdGggb2YgdGhlIGlucHV0cyBhcmUgRG91
YmxlUmVwKFJlYWxOdW1iZXI6KSwgYW5kIHRoYXQgdGhvc2UKKyAgICAgICAgLy8gRG91YmxlUmVw
J3MgaGF2ZSBubyBvdGhlciB1c2Vycy4KKyAgICAgICAgYXV0byBpc1ZhbGlkSW5wdXQgPSBbJl0g
KEVkZ2UgZWRnZSkgeworICAgICAgICAgICAgcmV0dXJuIGVkZ2UtPm9wKCkgPT0gRG91YmxlUmVw
CisgICAgICAgICAgICAgICAgJiYgZWRnZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IFJlYWxOdW1i
ZXJVc2UKKyAgICAgICAgICAgICAgICAmJiBlZGdlLT5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMTsK
KyAgICAgICAgfTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkSW5wdXQobV9ub2RlLT5jaGlsZDEoKSkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghaXNWYWxpZElucHV0KG1fbm9kZS0+
Y2hpbGQyKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgLy8gTm93
IGNvbWVzIHRoZSBoYXJkIHBhcnQ6IHdlIGNhbiBvbmx5IGRvIHRoaXMgaWYgd2UgY2FuIGhvaXN0
IHRoZSBhcml0aG1ldGljIG9wZXJhdGlvbgorICAgICAgICAvLyB1cCB0byB0aGUgZmlyc3Qgb2Yg
dGhlIHR3byBEb3VibGVSZXAncy4gVGhpcyBpcyBiZWNhdXNlIG90aGVyd2lzZSB3ZSdsbCBlaXRo
ZXIgc3RpbGwKKyAgICAgICAgLy8gaGF2ZSBDaGVjayhSZWFsTnVtYmVyOikgaW4gcGxhY2Ugb2Yg
dGhlIERvdWJsZVJlcChSZWFsTnVtYmVyOiksIHdoaWNoIGlzIGp1c3QgYXMKKyAgICAgICAgLy8g
ZXhwZW5zaXZlIGFzIHRoZSBEb3VibGVSZXAuIE9yLCBpZiB3ZSB0cnkgdG8ganVzdCByZW1vdmUg
dGhlIERvdWJsZVJlcCdzIGVudGlyZWx5IHRoZW4KKyAgICAgICAgLy8gd2UgdmlvbGF0ZSB0aGUg
ImRvbid0IHNpbmsgY2hlY2tzIiBwcmluY2lwbGUuIEhlcmUncyBhIGNvdW50ZXJleGFtcGxlIG9m
IHdoeToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT3JpZ2luYWwgY29kZToKKyAgICAgICAgLy8g
ICAgIDE6IERvdWJsZVJlcChSZWFsTnVtYmVyOkB4KQorICAgICAgICAvLyAgICAgMjogRG91Ymxl
UmVwKFJlYWxOdW1iZXI6QHkpCisgICAgICAgIC8vICAgICAzOiBJc051bWJlcihAeCkKKyAgICAg
ICAgLy8gICAgIDQ6IENhbGwoLi4uLCBAMykKKyAgICAgICAgLy8gICAgIDU6IEFyaXRoQWRkKERv
dWJsZVJlcDpAMSwgRG91YmxlUmVwOkAyKQorICAgICAgICAvLworICAgICAgICAvLyBUaGVuIHdl
IG1pZ2h0IGVsaW1pbmF0ZSB0aGUgSXNOdW1iZXIgYmVjYXVzZSB0aGUgRG91YmxlUmVwJ3MgdHlw
ZSBjaGVja3M6CisgICAgICAgIC8vCisgICAgICAgIC8vIEFmdGVyIElzTnVtYmVyIGVsaW1pbmF0
aW9uOgorICAgICAgICAvLyAgICAgMTogRG91YmxlUmVwKFJlYWxOdW1iZXI6QHgpCisgICAgICAg
IC8vICAgICAyOiBEb3VibGVSZXAoUmVhbE51bWJlcjpAeSkKKyAgICAgICAgLy8gICAgIDM6IEpT
Q29uc3RhbnQodHJ1ZSkKKyAgICAgICAgLy8gICAgIDQ6IENhbGwoLi4uLCBAMykKKyAgICAgICAg
Ly8gICAgIDU6IEFyaXRoQWRkKERvdWJsZVJlcDpAMSwgRG91YmxlUmVwOkAyKQorICAgICAgICAv
LworICAgICAgICAvLyBBbmQgdGhlbiB3ZSBtaWdodCB0cnkgdG8gZWxpbWluYXQgdGhlIERvdWJs
ZVJlcCdzIGVudGlyZWx5OgorICAgICAgICAvLworICAgICAgICAvLyBBZnRlciBzdHJlbmd0aCBy
ZWR1Y3Rpb246CisgICAgICAgIC8vICAgICAxOiA8cmVtb3ZlZD4KKyAgICAgICAgLy8gICAgIDI6
IDxyZW1vdmVkPgorICAgICAgICAvLyAgICAgMzogSlNDb25zdGFudCh0cnVlKQorICAgICAgICAv
LyAgICAgNDogQ2FsbCguLi4sIEAzKQorICAgICAgICAvLyAgICAgNTogQXJpdGhBZGQoUmVhbE51
bWJlcjpAeCwgUmVhbE51bWJlcjpAeSkKKyAgICAgICAgLy8KKyAgICAgICAgLy8gQW5kIG5vdyB3
ZSBtaWdodCBlbmQgdXAgbWFraW5nIHRoZSBjYWxsIHBhc3NpbmcgInRydWUiIGZvciAiSXNOdW1i
ZXIiLCBldmVuIHRob3VnaCB3ZQorICAgICAgICAvLyBoYXZlbid0IHlldCBkb25lIGFueSBjaGVj
a3MgdG8gc2VlIGlmIEB4IGlzIGEgbnVtYmVyLgorICAgICAgICAvLworICAgICAgICAvLyBCdXQg
aW4gdGhlIGNvbW1vbiBjYXNlcywgd2UgKmRvKiB3YW50IHRvIGVyYWRpY2F0ZSB0aGUgRG91Ymxl
UmVwJ3MgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgICAgIC8vIHdlIGRvbid0IGV2ZW4gbmVlZCB0
aGUgQ2hlY2soUmVhbE51bWJlcjopLiBXZSBjYW4gZG8gdGhpcyBpZiB0aGUgdHJhbnNmb3JtYXRp
b24KKyAgICAgICAgLy8gaW52b2x2ZXMgcmVwbGFjaW5nIHRoZSBmaXJzdCBvZiB0aGUgRG91Ymxl
UmVwJ3Mgd2l0aCBvdXIgYXJpdGhtZXRpYyBvcGVyYXRpb24uIFRoaXMKKyAgICAgICAgLy8gbWVh
bnMgZmluZGluZyB0aGUgRG91YmxlUmVwJ3MgaW4gdGhpcyBjdXJyZW50IGJhc2ljIGJsb2NrLCBh
bmQgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndAorICAgICAgICAvLyBoYXZlIHNvbWV0aGluZyBsaWtl
OgorICAgICAgICAvLworICAgICAgICAvLyAgICAgMTogLi4uCisgICAgICAgIC8vICAgICAyOiBE
b3VibGVSZXAoUmVhbE51bWJlcjpAMSkKKyAgICAgICAgLy8gICAgIDM6IC4uLgorICAgICAgICAv
LyAgICAgNDogRG91YmxlUmVwKFJlYWxOdW1iZXI6QDMpCisgICAgICAgIC8vICAgICA1OiBBcml0
aEFkZChEb3VibGVSZXA6QDIsIERvdWJsZVJlcDpANCkKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
V2UganVzdCBmYWlsIGZvciB0aGluZ3MgbGlrZSB0aGlzLiBJdCBzaG91bGRuJ3QgdXN1YWxseSBo
YXBwZW4uCisgICAgICAgIAorICAgICAgICBib29sIGZvdW5kTGVmdCA9IGZhbHNlOworICAgICAg
ICBib29sIGZvdW5kUmlnaHQgPSBmYWxzZTsKKyAgICAgICAgdW5zaWduZWQgbm9kZUluZGV4VG9S
ZXBsYWNlID0gVUlOVF9NQVg7CisgICAgICAgIE5vZGUqIG5vZGVUb0tpbGwgPSBudWxscHRyOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IG1fbm9kZUluZGV4OyBub2RlSW5kZXgt
LTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2Jsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiBiZWZvcmUgZWl0aGVyIERvdWJsZVJlcCdz
IHdlIHNlZSB0aGUgY2hpbGQgb2YgdGhlIG90aGVyIERvdWJsZVJlcCwgd2UgZmFpbC4KKyAgICAg
ICAgICAgIGlmIChub2RlID09IG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpKQorICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChub2RlID09IG1fbm9kZS0+Y2hpbGQyKCkt
PmNoaWxkMSgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG5vZGUgPT0gbV9ub2RlLT5jaGlsZDEoKSkgeworICAgICAgICAgICAgICAgIGZv
dW5kTGVmdCA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKGZvdW5kUmlnaHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4VG9SZXBsYWNlID0gbm9kZUluZGV4OworICAgICAgICAg
ICAgICAgICAgICBub2RlVG9LaWxsID0gbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5vZGUgPT0gbV9ub2RlLT5jaGlsZDIoKSkgewor
ICAgICAgICAgICAgICAgIGZvdW5kUmlnaHQgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChm
b3VuZExlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4VG9SZXBsYWNlID0gbm9k
ZUluZGV4OworICAgICAgICAgICAgICAgICAgICBub2RlVG9LaWxsID0gbV9ub2RlLT5jaGlsZDEo
KS5ub2RlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQoKG5vZGVJbmRleFRvUmVw
bGFjZSA9PSBVSU5UX01BWCkgPT0gIW5vZGVUb0tpbGwpOworICAgICAgICAKKyAgICAgICAgLy8g
VGhpcyBjb3VsZCBiZSB1bnNldCBpZiBlaXRoZXIgRG91YmxlUmVwIGlzIGluIGEgZGlmZmVyZW50
IGJsb2NrLiBNYXliZSB3ZSBjb3VsZCBoYW5kbGUKKyAgICAgICAgLy8gdGhpcyBldmVudHVhbGx5
LCBidXQgaXQncyBoYXJkZXIsIGFuZCBwcm9iYWJseSBsZXNzIGNvbW1vbi4KKyAgICAgICAgaWYg
KG5vZGVJbmRleFRvUmVwbGFjZSA9PSBVSU5UX01BWCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIE5vZGUqIG5vZGVUb1JlcGxhY2UgPSBtX2Jsb2NrLT5hdChub2RlSW5k
ZXhUb1JlcGxhY2UpOworICAgICAgICAKKyAgICAgICAgc3RkOjpzd2FwKG1fYmxvY2stPmF0KG5v
ZGVJbmRleFRvUmVwbGFjZSksIG1fYmxvY2stPmF0KG1fbm9kZUluZGV4KSk7CisgICAgICAgIG1f
bm9kZS0+Y2hpbGQxKCkgPSBFZGdlKG1fbm9kZS0+Y2hpbGQxKCktPmNoaWxkMSgpLm5vZGUoKSwg
UmVhbE51bWJlclVzZSk7CisgICAgICAgIG1fbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKG1fbm9kZS0+
Y2hpbGQyKCktPmNoaWxkMSgpLm5vZGUoKSwgUmVhbE51bWJlclVzZSk7CisgICAgICAgIAorICAg
ICAgICBub2RlVG9SZXBsYWNlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICBub2RlVG9LaWxs
LT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICBub2RlVG9SZXBsYWNlLT5yZW1vdmUoKTsKKyAg
ICAgICAgbm9kZVRvS2lsbC0+cmVtb3ZlKCk7CisgICAgICAgIAorICAgICAgICBtX2NoYW5nZWQg
PSB0cnVlOworICAgIH0KKyAgICAKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAg
ICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxODU3NTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTIgKzY4LDEyIEBAIG5hbWVzcGFjZSB7
CiBzdGQ6OmF0b21pYzxpbnQ+IGNvbXBpbGVDb3VudGVyOwogCiAjaWYgQVNTRVJUX0RJU0FCTEVE
Ci1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVucmVhY2hhYmxlKCkKK05P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBmdGxVbnJlYWNoYWJsZSgpCiB7CiAgICAgQ1JBU0go
KTsKIH0KICNlbHNlCi1OT19SRVRVUk5fRFVFX1RPX0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVucmVh
Y2hhYmxlKAorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZ0bFVucmVhY2hhYmxlKAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIHVuc2lnbmVkIG5v
ZGVJbmRleCkKIHsKICAgICBkYXRhTG9nKCJDcmFzaGluZyBpbiB0aG91Z2h0LXRvLWJlLXVucmVh
Y2hhYmxlIEZUTC1nZW5lcmF0ZWQgY29kZSBmb3IgIiwgcG9pbnRlckR1bXAoY29kZUJsb2NrKSwg
IiBhdCBiYXNpYyBibG9jayAjIiwgYmxvY2tJbmRleCk7CkBAIC05NjIsMjggKzk2Miw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAg
ICAgICAgY2FzZSBSZWFsTnVtYmVyVXNlOiB7CiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBs
b3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIExWYWx1ZSBkb3VibGVWYWx1ZSA9IHVuYm94RG91Ymxl
KHZhbHVlKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50Q2FzZSA9
IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRG91YmxlUmVwIFJlYWxOdW1iZXJVc2UgaW50IGNhc2Ui
KSk7Ci0gICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NL
KG1fb3V0LCAoIkRvdWJsZVJlcCBjb250aW51YXRpb24iKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZG91YmxlVmFs
dWUpOwotICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgICAgIG1fb3V0LmRv
dWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCi0gICAgICAgICAgICAgICAgdXN1
YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaW50Q2FzZSkpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAot
ICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh2YWx1ZSksIG1fbm9kZS0+Y2hpbGQxKCksIFNw
ZWNCeXRlY29kZVJlYWxOdW1iZXIsCi0gICAgICAgICAgICAgICAgaXNOb3RJbnQzMih2YWx1ZSwg
cHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSAmIH5TcGVjRnVsbERvdWJsZSkpOwotICAgICAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5pbnRU
b0RvdWJsZSh1bmJveEludDMyKHZhbHVlKSkpOwotICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KSk7Cisg
ICAgICAgICAgICBzZXREb3VibGUoanNWYWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91YmxlKG1f
bm9kZS0+Y2hpbGQxKCksIHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgICAgIApAQCAtMTQzOSwxMCArMTQxOCwxOCBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6IHsKLSAgICAgICAgICAg
IExWYWx1ZSBDMSA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgICAgIExW
YWx1ZSBDMiA9IGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBsZWZ0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgTFZhbHVl
IHJpZ2h0ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkpOwogCi0gICAgICAgICAgICBzZXRE
b3VibGUoaXNTdWIgPyBtX291dC5kb3VibGVTdWIoQzEsIEMyKSA6IG1fb3V0LmRvdWJsZUFkZChD
MSwgQzIpKTsKKyAgICAgICAgICAgIHNldERvdWJsZShpc1N1YiA/IG1fb3V0LmRvdWJsZVN1Yihs
ZWZ0LCByaWdodCkgOiBtX291dC5kb3VibGVBZGQobGVmdCwgcmlnaHQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBSZWFsTnVtYmVy
VXNlOiB7CisgICAgICAgICAgICBhcml0aG1ldGljV2l0aFN1bmtlblJlYWxOdW1iZXJDaGVjaygK
KyAgICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBhLCBMVmFsdWUgYikgeworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaXNTdWIgPyBtX291dC5kb3VibGVTdWIoYSwgYikgOiBtX291dC5kb3Vi
bGVBZGQoYSwgYik7CisgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNTI3LDYgKzE1MTQsMTQgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBS
ZWFsTnVtYmVyVXNlOiB7CisgICAgICAgICAgICBhcml0aG1ldGljV2l0aFN1bmtlblJlYWxOdW1i
ZXJDaGVjaygKKyAgICAgICAgICAgICAgICBbJl0gKExWYWx1ZSBhLCBMVmFsdWUgYikgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlTXVsKGEsIGIpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC01NDI4LDYgKzU0MjMsMzIg
QEAgcHJpdmF0ZToKIAogICAgICAgICBzZXRKU1ZhbHVlKGFjdGl2YXRpb24pOwogICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgYXJpdGhtZXRpY1dp
dGhTdW5rZW5SZWFsTnVtYmVyQ2hlY2soY29uc3QgRnVuY3RvciYgZW1pdE1hdGgpCisgICAgewor
ICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKKyAgICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMigpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOworICAgICAgICAKKyAg
ICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImFyaXRo
bWV0aWNXaXRoU3Vua2VuUmVhbE51bWJlckNoZWNrIHNsb3cgcGF0aCIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJhcml0aG1ldGlj
V2l0aFN1bmtlblJlYWxOdW1iZXJDaGVjayBjb250aW51YXRpb24iKSk7CisgICAgICAgIAorICAg
ICAgICBMVmFsdWUgbGVmdERvdWJsZSA9IHVuYm94RG91YmxlKGxlZnQpOworICAgICAgICBMVmFs
dWUgcmlnaHREb3VibGUgPSB1bmJveERvdWJsZShyaWdodCk7CisgICAgICAgIFZhbHVlRnJvbUJs
b2NrIGZhc3RSZXN1bHQgPSBtX291dC5hbmNob3IoZW1pdE1hdGgobGVmdERvdWJsZSwgcmlnaHRE
b3VibGUpKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAgICAgbV9vdXQuZG91Ymxl
RXF1YWwoZmFzdFJlc3VsdC52YWx1ZSgpLCBmYXN0UmVzdWx0LnZhbHVlKCkpLAorICAgICAgICAg
ICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKKyAgICAgICAgCisg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIGxlZnREb3VibGUgPSBqc1ZhbHVlVG9Eb3VibGVBc3N1bWlu
Z1JlYWxEb3VibGUobV9ub2RlLT5jaGlsZDEoKSwgbGVmdCwgbGVmdERvdWJsZSk7CisgICAgICAg
IHJpZ2h0RG91YmxlID0ganNWYWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91YmxlKG1fbm9kZS0+
Y2hpbGQyKCksIHJpZ2h0LCByaWdodERvdWJsZSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNs
b3dSZXN1bHQgPSBtX291dC5hbmNob3IoZW1pdE1hdGgobGVmdERvdWJsZSwgcmlnaHREb3VibGUp
KTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHNldERvdWJs
ZShtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCkpOwor
ICAgIH0KIAogI2lmIEVOQUJMRShGVExfTkFUSVZFX0NBTExfSU5MSU5JTkcpCiAgICAgTFZhbHVl
IGdldEZ1bmN0aW9uQnlTeW1ib2woY29uc3QgQ1N0cmluZyBzeW1ib2wpCkBAIC03NDY4LDYgKzc0
ODksMzMgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICByZXR1cm4gaW50ZWdlclZhbHVl
OwogICAgIH0KKyAgICAKKyAgICBMVmFsdWUganNWYWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91
YmxlKEVkZ2UgZWRnZSwgTFZhbHVlIGpzVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4ganNW
YWx1ZVRvRG91YmxlQXNzdW1pbmdSZWFsRG91YmxlKGVkZ2UsIGpzVmFsdWUsIHVuYm94RG91Ymxl
KGpzVmFsdWUpKTsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIGpzVmFsdWVUb0RvdWJsZUFzc3Vt
aW5nUmVhbERvdWJsZShFZGdlIGVkZ2UsIExWYWx1ZSBqc1ZhbHVlLCBMVmFsdWUgZG91YmxlVmFs
dWUpCisgICAgeworICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJqc1ZhbHVlVG9Eb3VibGVBc3N1bWluZ1JlYWxEb3VibGUgUmVhbE51bWJlclVzZSBp
bnQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGVBc3N1bWluZ1JlYWxEb3VibGUgY29udGludWF0
aW9uIikpOworICAgICAgICAKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgZmFzdFJlc3VsdCA9IG1f
b3V0LmFuY2hvcihkb3VibGVWYWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCgKKyAgICAgICAg
ICAgIG1fb3V0LmRvdWJsZUVxdWFsKGRvdWJsZVZhbHVlLCBkb3VibGVWYWx1ZSksCisgICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpbnRDYXNlKSk7CisgICAgICAgIAor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludENhc2UsIGNv
bnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAg
ICAgIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwK
KyAgICAgICAgICAgIGlzTm90SW50MzIoanNWYWx1ZSwgcHJvdmVuVHlwZShlZGdlKSAmIH5TcGVj
RG91YmxlUmVhbCkpOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmludFRvRG91YmxlKHVuYm94SW50MzIoanNWYWx1ZSkpKTsKKyAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIHJldHVybiBtX291dC5waGkobV9v
dXQuZG91YmxlVHlwZSwgZmFzdFJlc3VsdCwgc2xvd1Jlc3VsdCk7CisgICAgfQogCiAgICAgTFZh
bHVlIGlzTnVtYmVyKExWYWx1ZSBqc1ZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlID0gU3BlY0Z1
bGxUb3ApCiAgICAgewpAQCAtNzk0OSwyMyArNzk5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKGVk
Z2UsIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBkb3VibGVWYWx1
ZSA9IHVuYm94RG91YmxlKHZhbHVlKTsKLSAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGlu
dENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoInNwZWN1bGF0ZVJlYWxOdW1iZXIgaW50IGNh
c2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgic3BlY3VsYXRlUmVhbE51bWJlciBjb250aW51YXRpb24iKSk7Ci0gICAgICAgIAot
ICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5kb3VibGVFcXVhbChkb3Vi
bGVWYWx1ZSwgZG91YmxlVmFsdWUpLAotICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24p
LCByYXJlbHkoaW50Q2FzZSkpOwotICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAg
ICAgICAgdHlwZUNoZWNrKAotICAgICAgICAgICAganNWYWx1ZVZhbHVlKHZhbHVlKSwgbV9ub2Rl
LT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlUmVhbE51bWJlciwKLSAgICAgICAgICAgIGlzTm90SW50
MzIodmFsdWUsIHByb3ZlblR5cGUobV9ub2RlLT5jaGlsZDEoKSkgJiB+U3BlY0Z1bGxEb3VibGUp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotCi0gICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBqc1ZhbHVlVG9Eb3VibGVB
c3N1bWluZ1JlYWxEb3VibGUobV9ub2RlLT5jaGlsZDEoKSwgdmFsdWUpOwogICAgIH0KICAgICAK
ICAgICB2b2lkIHNwZWN1bGF0ZURvdWJsZVJlcFJlYWwoRWRnZSBlZGdlKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>