<?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>97691</bug_id>
          
          <creation_ts>2012-09-26 08:51:13 -0700</creation_ts>
          <short_desc>Add ability for JSArray::unshiftCount to unshift in middle of an array</short_desc>
          <delta_ts>2012-09-26 11:37:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>728612</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-26 08:51:13 -0700</bug_when>
    <thetext>Currently JSArray::unshiftCount only handles unshifting at the beginning of an array.  This severely limits its usefulness in real world code.

It should be updated to handle unshifting from the middle of an array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728643</commentid>
    <comment_count>1</comment_count>
      <attachid>165819</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-26 09:12:37 -0700</bug_when>
    <thetext>Created attachment 165819
Patch

Here is the performance data for this patch.  I reran just browsermark-js and saw no slowdown on array_blur.

Benchmark report for SunSpider, V8Spider, Octane, Kraken, JSBench, JSRegress, DSP, BrowsermarkJS, and BrowsermarkDOM on msaboff-pro (MacPro5,1).

VMs tested:
&quot;Base&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r129520)
&quot;UnshiftOpt&quot; at /Volumes/Data/src/webkit.work/WebKitBuild/Release/DumpRenderTree (r129520)

Collected 12 samples per benchmark/VM, with 4 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.

                                                     Base                   UnshiftOpt                                    
SunSpider:
   3d-cube                                      8.9070+-0.4115     ?      8.9251+-0.4109        ?
   3d-morph                                     7.6528+-0.0695     ?      7.6684+-0.0421        ?
   3d-raytrace                                 12.5421+-0.2923     ?     12.6467+-0.3392        ?
   access-binary-trees                          2.3043+-0.4384            2.2860+-0.4285        
   access-fannkuch                              6.7549+-0.0455            6.7246+-0.0249        
   access-nbody                                 4.2389+-0.0286            4.2266+-0.0355        
   access-nsieve                                3.4221+-0.0470     ?      3.4816+-0.0555        ? might be 1.0174x slower
   bitops-3bit-bits-in-byte                     1.3607+-0.0100            1.3580+-0.0082        
   bitops-bits-in-byte                          5.7671+-0.0209            5.7443+-0.0195        
   bitops-bitwise-and                           2.1956+-0.0513     ?      2.2041+-0.0293        ?
   bitops-nsieve-bits                           3.5128+-0.0097     ?      3.5316+-0.0370        ?
   controlflow-recursive                        2.5124+-0.0187            2.5089+-0.0154        
   crypto-aes                                   9.5934+-0.4560     ?      9.6112+-0.4311        ?
   crypto-md5                                   4.0577+-0.1782            3.9596+-0.1115          might be 1.0248x faster
   crypto-sha1                                  3.3370+-0.2377            3.1824+-0.0369          might be 1.0486x faster
   date-format-tofte                           14.1293+-0.9179           13.9694+-0.9034          might be 1.0114x faster
   date-format-xparb                           11.9128+-0.5754           11.6569+-0.5107          might be 1.0220x faster
   math-cordic                                  4.2426+-0.0875     ?      4.2898+-0.0920        ? might be 1.0111x slower
   math-partial-sums                           10.3206+-0.0611     ?     10.3240+-0.1010        ?
   math-spectral-norm                           3.0738+-0.0323            3.0583+-0.0219        
   regexp-dna                                  10.4303+-0.4001     ?     10.5125+-0.3420        ?
   string-base64                                5.6996+-0.5414            5.5063+-0.4130          might be 1.0351x faster
   string-fasta                                 8.2432+-0.3093            8.1925+-0.3201        
   string-tagcloud                             13.7845+-0.2941           13.6668+-0.2291        
   string-unpack-code                          25.5450+-0.6396     ?     25.6005+-0.5872        ?
   string-validate-input                        8.7420+-0.5940     ?      8.7485+-0.5456        ?

   &lt;arithmetic&gt; *                               7.4724+-0.1442            7.4456+-0.1685          might be 1.0036x faster
   &lt;geometric&gt;                                  5.9231+-0.1214            5.8993+-0.1267          might be 1.0040x faster
   &lt;harmonic&gt;                                   4.6432+-0.1006            4.6259+-0.0985          might be 1.0037x faster

                                                     Base                   UnshiftOpt                                    
V8Spider:
   crypto                                      77.0292+-0.3806     ?     77.0435+-0.4834        ?
   deltablue                                  119.2475+-0.4669          119.0133+-0.4813        
   earley-boyer                                91.6742+-1.6376           91.0826+-1.7689        
   raytrace                                    64.0670+-0.3897           63.8701+-0.2537        
   regexp                                      87.7629+-0.8198           87.3886+-0.3580        
   richards                                    96.7946+-1.3499           96.4373+-1.1282        
   splay                                       98.7116+-23.1225    ?     99.7802+-22.7950       ? might be 1.0108x slower

   &lt;arithmetic&gt;                                90.7553+-3.1565           90.6594+-3.1229          might be 1.0011x faster
   &lt;geometric&gt; *                               88.6343+-2.7126           88.5591+-2.6503          might be 1.0008x faster
   &lt;harmonic&gt;                                  86.6357+-2.3376           86.5846+-2.2512          might be 1.0006x faster

                                                     Base                   UnshiftOpt                                    
Octane and V8v7:
   encrypt                                     0.40942+-0.00057    ?     0.41136+-0.00217       ?
   decrypt                                     7.12104+-0.00754          7.11715+-0.00825       
   deltablue                          x2       0.54869+-0.00745          0.54839+-0.00480       
   earley                                      0.94881+-0.00687          0.94426+-0.00725       
   boyer                                      13.47526+-0.05659         13.45574+-0.05278       
   raytrace                           x2       4.53751+-0.15072          4.46667+-0.04337         might be 1.0159x faster
   regexp                             x2      26.67053+-0.20591    ?    26.67730+-0.07058       ?
   richards                           x2       0.25499+-0.00451    ?     0.25510+-0.00470       ?
   splay                              x2       0.74306+-0.00581    !     0.76202+-0.00733       ! definitely 1.0255x slower
   navier-stokes                      x2      12.68348+-0.03432         12.67114+-0.00967       
   closure                                     0.47538+-0.00181          0.47409+-0.00272       
   jquery                                      7.02118+-0.04120          7.01439+-0.04609       
   gbemu                              x2     286.90147+-6.31100        278.03032+-5.27124         might be 1.0319x faster
   mandreel                           x2     195.16883+-0.60392        194.36253+-0.50723       
   pdfjs                              x2     134.29441+-0.84228    ^   107.20744+-0.84321       ^ definitely 1.2527x faster
   box2d                              x2      30.73129+-0.12063    ?    30.74297+-0.16862       ?

V8v7:
   &lt;arithmetic&gt;                                7.05194+-0.03238          7.04311+-0.01079         might be 1.0013x faster
   &lt;geometric&gt; *                               2.36319+-0.01291    ?     2.36572+-0.00942       ? might be 1.0011x slower
   &lt;harmonic&gt;                                  0.86159+-0.00680    ?     0.86480+-0.00766       ? might be 1.0037x slower

Octane including V8v7:
   &lt;arithmetic&gt;                               54.40460+-0.42715    ^    51.57172+-0.35589       ^ definitely 1.0549x faster
   &lt;geometric&gt; *                               7.82205+-0.02826    ^     7.67092+-0.01404       ^ definitely 1.0197x faster
   &lt;harmonic&gt;                                  1.24321+-0.00908    ?     1.24670+-0.00985       ? might be 1.0028x slower

                                                     Base                   UnshiftOpt                                    
Kraken:
   ai-astar                                    483.462+-4.054            481.843+-5.005         
   audio-beat-detection                        195.527+-11.930     ?     197.143+-10.996        ?
   audio-dft                                   260.557+-1.592      ?     262.163+-0.610         ?
   audio-fft                                   117.010+-0.199      ?     117.039+-0.273         ?
   audio-oscillator                            244.856+-0.645            244.355+-0.865         
   imaging-darkroom                            285.666+-0.947            285.506+-1.183         
   imaging-desaturate                          200.736+-0.354            200.483+-0.227         
   imaging-gaussian-blur                       435.764+-0.605            435.714+-0.603         
   json-parse-financial                         62.927+-0.387      ?      63.055+-0.189         ?
   json-stringify-tinderbox                     80.967+-0.402             80.667+-0.324         
   stanford-crypto-aes                          89.317+-0.606      ?      90.517+-0.999         ? might be 1.0134x slower
   stanford-crypto-ccm                          85.535+-0.369      ?      85.815+-0.238         ?
   stanford-crypto-pbkdf2                      208.172+-1.008            207.635+-0.946         
   stanford-crypto-sha256-iterative             99.527+-0.444      ?      99.621+-0.417         ?

   &lt;arithmetic&gt; *                              203.573+-0.981      ?     203.683+-0.907         ? might be 1.0005x slower
   &lt;geometric&gt;                                 167.917+-0.735      ?     168.170+-0.661         ? might be 1.0015x slower
   &lt;harmonic&gt;                                  139.379+-0.450      ?     139.682+-0.427         ? might be 1.0022x slower

                                                     Base                   UnshiftOpt                                    
JSBench:
   amazon                                      18.6667+-0.3128     ?     18.7500+-0.2874        ?
   facebook                                    73.4167+-1.4453     ?     73.8333+-1.3770        ?
   google                                      91.8333+-0.7082           91.7500+-0.7232        
   twitter                                     54.9167+-0.1834           54.4167+-0.3272        
   yahoo                                       23.0000+-0.0000     ?     23.2500+-0.2874        ? might be 1.0109x slower

   &lt;arithmetic&gt; *                              52.3667+-0.3901     ?     52.4000+-0.4018        ? might be 1.0006x slower
   &lt;geometric&gt;                                 43.6714+-0.2153     ?     43.7665+-0.2934        ? might be 1.0022x slower
   &lt;harmonic&gt;                                  35.7634+-0.2066     ?     35.9193+-0.2928        ? might be 1.0044x slower

                                                     Base                   UnshiftOpt                                    
JSRegress:
   adapt-to-double-divide                      73.0738+-0.1438           73.0585+-0.1970        
   aliased-arguments-getbyval                   0.8723+-0.0121            0.8723+-0.0099        
   allocate-big-object                          4.0945+-1.4557            3.6423+-1.2375          might be 1.1242x faster
   arity-mismatch-inlining                      0.6920+-0.0142     ?      0.7248+-0.0451        ? might be 1.0474x slower
   big-int-mul                                  8.8438+-1.0023            8.7682+-1.0091        
   boolean-test                                 3.4274+-0.0152     ?      3.4368+-0.0074        ?
   cast-int-to-double                          12.4430+-0.0512     ?     12.4569+-0.0544        ?
   cfg-simplify                                 3.0893+-0.0068     ?      3.0934+-0.0123        ?
   cmpeq-obj-to-obj-other                       9.0467+-0.1588     ?      9.2484+-0.1687        ? might be 1.0223x slower
   constant-test                                6.9192+-0.0548            6.8756+-0.0115        
   direct-arguments-getbyval                    0.7965+-0.0093            0.7961+-0.0110        
   double-pollution-getbyval                    9.2394+-0.0108     ?      9.2564+-0.0260        ?
   double-pollution-putbyoffset                 5.3846+-0.8091            5.3254+-0.7926          might be 1.0111x faster
   external-arguments-getbyval                  1.9645+-0.1569     ?      1.9850+-0.1661        ? might be 1.0105x slower
   external-arguments-putbyval                  3.7186+-0.3413            3.6394+-0.3638          might be 1.0218x faster
   Float32Array-matrix-mult                    12.3239+-0.7644     ?     12.6120+-0.8141        ? might be 1.0234x slower
   fold-double-to-int                          20.8663+-0.1262           20.7966+-0.0961        
   function-dot-apply                           2.6230+-0.0081     ?      2.6493+-0.0244        ? might be 1.0100x slower
   function-test                                3.8375+-0.0459            3.8356+-0.0467        
   indexed-properties-in-objects                3.5964+-0.0183     ?      3.6296+-0.0417        ?
   inline-arguments-access                      1.1932+-0.0329            1.1886+-0.0146        
   inline-arguments-local-escape               18.6463+-0.6293           18.5442+-0.1713        
   int-overflow-local                          85.5216+-0.2483     ?     85.5880+-0.2436        ?
   Int16Array-bubble-sort                      66.9978+-1.5906     ?     67.5916+-2.1150        ?
   Int16Array-load-int-mul                      1.8024+-0.0092     ?      1.8174+-0.0146        ?
   Int8Array-load                               4.6186+-0.1022            4.6064+-0.0712        
   integer-divide                              12.9638+-0.0717           12.9484+-0.0411        
   method-on-number                           182.4060+-0.6054     ?    185.9722+-3.0797        ? might be 1.0196x slower
   new-array-dead                              23.4450+-0.1019           23.4385+-0.0991        
   new-array-push                              10.7090+-3.2304     ?     10.8295+-3.3065        ? might be 1.0112x slower
   number-test                                  3.3650+-0.0135     ?      3.3891+-0.0355        ?
   object-test                                  3.7599+-0.0318     ?      3.7814+-0.0400        ?
   poly-stricteq                               84.2638+-1.2666           83.2393+-0.1524          might be 1.0123x faster
   rare-osr-exit-on-local                     137.3691+-0.2507          137.2561+-0.1932        
   simple-activation-demo                      31.4492+-0.5116           30.9943+-0.5030          might be 1.0147x faster
   slow-convergence                            72.8972+-0.3993           72.6256+-0.4252        
   sparse-conditional                           1.0892+-0.0098     ?      1.0904+-0.0091        ?
   string-hash                                  4.6249+-0.4814     ?      4.6360+-0.5094        ?
   string-test                                  3.3305+-0.0313            3.3231+-0.0192        
   tear-off-arguments                           3.1053+-0.0266            3.0822+-0.0131        
   to-int32-boolean                            23.1521+-0.0255     ?     23.1936+-0.0846        ?
   undefined-test                               3.5517+-0.0218     ?      3.5860+-0.0589        ?

   &lt;arithmetic&gt;                                23.0265+-0.1780     ?     23.0815+-0.1591        ? might be 1.0024x slower
   &lt;geometric&gt; *                                7.7670+-0.1299            7.7661+-0.1252          might be 1.0001x faster
   &lt;harmonic&gt;                                   3.4972+-0.0224     ?      3.5112+-0.0396        ? might be 1.0040x slower

                                                     Base                   UnshiftOpt                                    
DSP:
   filtrr-posterize-tint                       42.7914+-0.1800     ?     43.1624+-0.2714        ?
   filtrr-tint-contrast-sat-bright             64.0433+-0.3528           63.7483+-0.2926        
   filtrr-tint-sat-adj-contr-mult              80.7600+-1.1376     ?     81.0677+-1.0036        ?
   filtrr-blur-overlay-sat-contr              225.2779+-7.4716          224.8127+-7.0852        
   filtrr-sat-blur-mult-sharpen-contr         246.0099+-1.9833          245.9871+-1.1113        
   filtrr-sepia-bias                           29.1553+-0.4512     ?     29.1689+-0.4793        ?
   route9-vp8                         x5     1159.8174+-4.5878         1157.9030+-6.9694        
   starfield                          x5     1132.2744+-6.5787         1125.2117+-4.0868        
   zynaps-quake3                      x5     1638.8412+-10.3403        1629.3045+-13.8232       
   zynaps-mandelbrot                  x5      949.1073+-5.6078     ?    958.7376+-4.5850        ? might be 1.0101x slower

   &lt;arithmetic&gt;                               964.9323+-2.5486          963.2204+-3.4773          might be 1.0018x faster
   &lt;geometric&gt; *                              648.1368+-1.3753          647.8374+-1.6353          might be 1.0005x faster
   &lt;harmonic&gt;                                 233.7241+-1.5693     ?    234.1014+-1.3999        ? might be 1.0016x slower

                                                     Base                   UnshiftOpt                                    
BrowsermarkJS:
   array_blur                                 13.46028+-0.03228    !    13.56296+-0.06393       ! definitely 1.0076x slower
   array_weighted                              0.00618+-0.00005          0.00616+-0.00004       
   string_chat                                 0.01554+-0.00007    ?     0.01560+-0.00005       ?
   string_filter                               0.01819+-0.00012          0.01815+-0.00023       
   string_weighted                             0.01165+-0.00008    ?     0.01170+-0.00009       ?

   &lt;arithmetic&gt;                                2.70237+-0.00644    !     2.72291+-0.01281       ! definitely 1.0076x slower
   &lt;geometric&gt; *                               0.04871+-0.00011    ?     0.04879+-0.00020       ? might be 1.0017x slower
   &lt;harmonic&gt;                                  0.01363+-0.00005          0.01362+-0.00007         might be 1.0007x faster

                                                     Base                   UnshiftOpt                                    
BrowsermarkDOM:
   advanced_search                             1.08540+-0.01474          1.08518+-0.01076       
   create_source                               3.49763+-0.78096    ?     3.49837+-0.78237       ?
   dynamic_create                              3.53932+-0.82359          3.53063+-0.81326       
   search                                      0.10536+-0.00081    ?     0.10641+-0.00059       ?

   &lt;arithmetic&gt;                                2.05693+-0.40116          2.05515+-0.39906         might be 1.0009x faster
   &lt;geometric&gt; *                               1.07348+-0.12882    ?     1.07567+-0.12848       ? might be 1.0020x slower
   &lt;harmonic&gt;                                  0.36168+-0.00589    ?     0.36476+-0.00575       ? might be 1.0085x slower

                                                     Base                   UnshiftOpt                                    
All benchmarks:
   &lt;arithmetic&gt;                               202.7938+-0.5797          202.0491+-0.7009          might be 1.0037x faster
   &lt;geometric&gt;                                 19.6040+-0.1509           19.5300+-0.1440          might be 1.0038x faster
   &lt;harmonic&gt;                                   0.3717+-0.0014            0.3716+-0.0016          might be 1.0002x faster

                                                     Base                   UnshiftOpt                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                             22.4142+-0.2480           22.3653+-0.2352          might be 1.0022x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728744</commentid>
    <comment_count>2</comment_count>
      <attachid>165819</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-09-26 10:58:12 -0700</bug_when>
    <thetext>Comment on attachment 165819
Patch

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

&gt; Source/JavaScriptCore/runtime/ArrayPrototype.cpp:245
&gt; -    if (!header &amp;&amp; isJSArray(thisObj) &amp;&amp; asArray(thisObj)-&gt;unshiftCount(exec, count))
&gt; +    if (isJSArray(thisObj) &amp;&amp; asArray(thisObj)-&gt;unshiftCount(exec, header, count))

You&apos;ll have to rebase this against my recent bugfix to this line of code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>728798</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-26 11:37:04 -0700</bug_when>
    <thetext>Committed r129676: &lt;http://trac.webkit.org/changeset/129676&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165819</attachid>
            <date>2012-09-26 09:12:37 -0700</date>
            <delta_ts>2012-09-26 10:58:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>97691.patch</filename>
            <type>text/plain</type>
            <size>8247</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTI5NjUxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDEyLTA5LTI2ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhYmlsaXR5IGZvciBKU0FycmF5Ojp1bnNoaWZ0Q291bnQgdG8gdW5zaGlmdCBpbiBt
aWRkbGUgb2YgYW4gYXJyYXkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTk3NjkxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQ2hhbmdlZCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQgYW5kIHVuc2hpZnRDb3VudFNs
b3dDYXNlIHRvIGhhbmRsZSB1bnNoaWZ0aW5nIGZyb20gdGhlIG1pZGRsZSBvZiBhbgorICAgICAg
ICBhcnJheS4gIERlcGVuZGluZyBvbiB3aGVyZSB0aGUgdW5zaGlmdCBwb2ludCBpcywgZWl0aGVy
IHRoZSBmcm9udCBwYXJ0IG9mIHRoZSBhcnJheSB3aWxsIGJlIG1vdmVkCisgICAgICAgICJsZWZ0
IiBvciB0aGUgYmFjayBwYXJ0IHdpbGwgYmUgbW92ZWQgcmlnaHQuICBHaXZlbiB0aGF0IHVuc2hp
ZnRDb3VudCBvbmx5IHdvcmtzIG9uIGNvbnRpZ3VvdXMKKyAgICAgICAgYXJyYXlzIGl0IGlzIHNh
ZmUgdG8gdXNlIG1lbW1vdmUgZm9yIHRoZSBtb3Zlcy4KKworICAgICAgICBUaGlzIGNoYW5nZSBp
cyB3b3J0aCAyNSUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb24gcGRmanMuICBJdCBkb2Vzbid0
IHNlZW0gdG8gaGF2ZSBhbnkgaW1wYWN0IG9uCisgICAgICAgIGFueSBvdGhlciBiZW5jaG1hcmtz
LgorCisgICAgICAgICogcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6
OnVuc2hpZnQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6
OkpTQXJyYXk6OnVuc2hpZnRDb3VudFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SlNBcnJheTo6
dW5zaGlmdENvdW50KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuaDoKKyAgICAgICAgKEpT
QXJyYXkpOgorCiAyMDEyLTA5LTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdt
YWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTI5NTkyLgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTI5NTIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIsNyArMjQyLDcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIHVuc2hpZnQoRXhlY1N0YXRlKiBleAogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgaWYgKCFoZWFkZXIgJiYgaXNKU0FycmF5KHRoaXNPYmopICYmIGFzQXJyYXkodGhp
c09iaiktPnVuc2hpZnRDb3VudChleGVjLCBjb3VudCkpCisgICAgaWYgKGlzSlNBcnJheSh0aGlz
T2JqKSAmJiBhc0FycmF5KHRoaXNPYmopLT51bnNoaWZ0Q291bnQoZXhlYywgaGVhZGVyLCBjb3Vu
dCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgayA9IGxlbmd0aCAtIGN1
cnJlbnRDb3VudDsgayA+IGhlYWRlcjsgLS1rKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gMTI5NTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0Niw3ICsy
NDYsNyBAQCB2b2lkIEpTQXJyYXk6OmdldE93bk5vbkluZGV4UHJvcGVydHlOYW1lCiB9CiAKIC8v
IFRoaXMgbWV0aG9kIG1ha2VzIHJvb20gaW4gdGhlIHZlY3RvciwgYnV0IGxlYXZlcyB0aGUgbmV3
IHNwYWNlIHVuY2xlYXJlZC4KLWJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjb3VudCkKK2Jvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50U2xvd0Nhc2UoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBib29sIGFkZFRvRnJv
bnQsIHVuc2lnbmVkIGNvdW50KQogewogICAgIEFycmF5U3RvcmFnZSogc3RvcmFnZSA9IGVuc3Vy
ZUFycmF5U3RvcmFnZShnbG9iYWxEYXRhKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHN0
b3JhZ2UtPmJ1dHRlcmZseSgpOwpAQCAtMjU0LDcgKzI1NCw3IEBAIGJvb2wgSlNBcnJheTo6dW5z
aGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNpZ25lZCBwcm9wZXJ0eVNpemUgPSBzdHJ1
Y3R1cmUoKS0+b3V0T2ZMaW5lU2l6ZSgpOwogCiAgICAgLy8gSWYgbm90LCB3ZSBzaG91bGQgaGF2
ZSBoYW5kbGVkIHRoaXMgb24gdGhlIGZhc3QgcGF0aC4KLSAgICBBU1NFUlQoY291bnQgPiBzdG9y
YWdlLT5tX2luZGV4Qmlhcyk7CisgICAgQVNTRVJUKCFhZGRUb0Zyb250IHx8IGNvdW50ID4gc3Rv
cmFnZS0+bV9pbmRleEJpYXMpOwogCiAgICAgLy8gU3RlcCAxOgogICAgIC8vIEdhdGhlciA0IGtl
eSBtZXRyaWNzOgpAQCAtMjc4LDcgKzI3OCw3IEBAIGJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50
U2xvd0Nhc2UoSlNHbG8KICAgICB1bnNpZ25lZCBkZXNpcmVkQ2FwYWNpdHkgPSBtaW4oTUFYX1NU
T1JBR0VfVkVDVE9SX0xFTkdUSCwgbWF4KEJBU0VfVkVDVE9SX0xFTiwgcmVxdWlyZWRWZWN0b3JM
ZW5ndGgpIDw8IDEpOwogCiAgICAgLy8gU3RlcCAyOgotICAgIC8vIFdlJ3JlIGVpdGhlciBnb2lu
ZyB0byBjaG9vc2UgdG8gYWxsb2NhdGUgYSBuZXcgQXJyYXlTdG9yYWdlLCBvciB3ZSdyZSBnb2lu
ZyB0byByZXVzZSB0aGUgZXhpc3Rpbmcgb24uCisgICAgLy8gV2UncmUgZWl0aGVyIGdvaW5nIHRv
IGNob29zZSB0byBhbGxvY2F0ZSBhIG5ldyBBcnJheVN0b3JhZ2UsIG9yIHdlJ3JlIGdvaW5nIHRv
IHJldXNlIHRoZSBleGlzdGluZyBvbmUuCiAKICAgICB2b2lkKiBuZXdBbGxvY0Jhc2UgPSAwOwog
ICAgIHVuc2lnbmVkIG5ld1N0b3JhZ2VDYXBhY2l0eTsKQEAgLTI5NywxMSArMjk3LDE0IEBAIGJv
b2wgSlNBcnJheTo6dW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG8KICAgICAvLyBXb3JrIG91dCB3
aGVyZSB3ZSdyZSBnb2luZyB0byBtb3ZlIHRoaW5ncyB0by4KIAogICAgIC8vIERldGVybWluZSBo
b3cgbXVjaCBvZiB0aGUgdmVjdG9yIHRvIHVzZSBhcyBwcmUtY2FwYWNpdHksIGFuZCBob3cgbXVj
aCBhcyBwb3N0LWNhcGFjaXR5LgorICAgIC8vIElmIHdlJ3JlIGFkZGluZyB0byB0aGUgZW5kLCB3
ZSdsbCBhZGQgYWxsIHRoZSBzcGFjZSB0byB0aGUgZW5kLgogICAgIC8vIElmIHRoZSB2ZWN0b3Ig
aGFkIG5vIGZyZWUgcG9zdC1jYXBhY2l0eSAobGVuZ3RoID49IG1fdmVjdG9yTGVuZ3RoKSwgZG9u
J3QgZ2l2ZSBpdCBhbnkuCiAgICAgLy8gSWYgaXQgZGlkLCB3ZSBjYWxjdWxhdGUgdGhlIGFtb3Vu
dCB0aGF0IHdpbGwgcmVtYWluIGJhc2VkIG9uIGFuIGF0b21pYyBkZWNheSAtIGxlYXZlIHRoZQog
ICAgIC8vIHZlY3RvciB3aXRoIGhhbGYgdGhlIHBvc3QtY2FwYWNpdHkgaXQgaGFkIHByZXZpb3Vz
bHkuCiAgICAgdW5zaWduZWQgcG9zdENhcGFjaXR5ID0gMDsKLSAgICBpZiAobGVuZ3RoIDwgc3Rv
cmFnZS0+dmVjdG9yTGVuZ3RoKCkpIHsKKyAgICBpZiAoIWFkZFRvRnJvbnQpCisgICAgICAgIHBv
c3RDYXBhY2l0eSA9IG1heChuZXdTdG9yYWdlQ2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0
aCwgY291bnQpOworICAgIGVsc2UgaWYgKGxlbmd0aCA8IHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgp
KSB7CiAgICAgICAgIC8vIEF0b21pYyBkZWNheSwgKyB0aGUgcG9zdC1jYXBhY2l0eSBjYW5ub3Qg
YmUgZ3JlYXRlciB0aGFuIHdoYXQgaXMgYXZhaWxhYmxlLgogICAgICAgICBwb3N0Q2FwYWNpdHkg
PSBtaW4oKHN0b3JhZ2UtPnZlY3Rvckxlbmd0aCgpIC0gbGVuZ3RoKSA+PiAxLCBuZXdTdG9yYWdl
Q2FwYWNpdHkgLSByZXF1aXJlZFZlY3Rvckxlbmd0aCk7CiAgICAgICAgIC8vIElmIHdlJ3JlIG1v
dmluZyBjb250ZW50cyB3aXRoaW4gdGhlIHNhbWUgYWxsb2NhdGlvbiwgdGhlIHBvc3QtY2FwYWNp
dHkgaXMgYmVpbmcgcmVkdWNlZC4KQEAgLTMxMiw4ICszMTUsMTIgQEAgYm9vbCBKU0FycmF5Ojp1
bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsbwogICAgIHVuc2lnbmVkIG5ld0luZGV4QmlhcyA9IG5l
d1N0b3JhZ2VDYXBhY2l0eSAtIG5ld1ZlY3Rvckxlbmd0aDsKIAogICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gQnV0dGVyZmx5Ojpmcm9tQmFzZShuZXdBbGxvY0Jhc2UsIG5ld0luZGV4Qmlh
cywgcHJvcGVydHlDYXBhY2l0eSk7Ci0gICAgCi0gICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPmFy
cmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNvdW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9m
KEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0aCk7CisKKyAgICBpZiAoYWRkVG9Gcm9udCkKKyAg
ICAgICAgbWVtbW92ZShuZXdCdXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvciArIGNv
dW50LCBzdG9yYWdlLT5tX3ZlY3Rvciwgc2l6ZW9mKEpTVmFsdWUpICogdXNlZFZlY3Rvckxlbmd0
aCk7CisgICAgZWxzZSBpZiAobmV3QWxsb2NCYXNlICE9IGJ1dHRlcmZseS0+YmFzZShzdHJ1Y3R1
cmUoKSkpCisgICAgICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92
ZWN0b3IsIHN0b3JhZ2UtPm1fdmVjdG9yLCBzaXplb2YoSlNWYWx1ZSkgKiB1c2VkVmVjdG9yTGVu
Z3RoKTsKKwogICAgIG1lbW1vdmUobmV3QnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHBy
b3BlcnR5U2l6ZSwgYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHByb3BlcnR5U2l6ZSwg
c2l6ZW9mKEpTVmFsdWUpICogcHJvcGVydHlTaXplICsgc2l6ZW9mKEluZGV4aW5nSGVhZGVyKSAr
IEFycmF5U3RvcmFnZTo6c2l6ZUZvcigwKSk7CiAgICAgCiAgICAgbmV3QnV0dGVyZmx5LT5hcnJh
eVN0b3JhZ2UoKS0+c2V0VmVjdG9yTGVuZ3RoKG5ld1ZlY3Rvckxlbmd0aCk7CkBAIC01MjgsNyAr
NTM1LDcgQEAgYm9vbCBKU0FycmF5OjpzaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYwogfQogCiAv
LyBSZXR1cm5zIHRydWUgaWYgdGhlIHVuc2hpZnQgY2FuIGJlIGhhbmRsZWQsIGZhbHNlIHRvIGZh
bGxiYWNrLiAgICAKLWJvb2wgSlNBcnJheTo6dW5zaGlmdENvdW50KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgY291bnQpCitib29sIEpTQXJyYXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4
ZWMsIHVuc2lnbmVkIHN0YXJ0SW5kZXgsIHVuc2lnbmVkIGNvdW50KQogewogICAgIEFycmF5U3Rv
cmFnZSogc3RvcmFnZSA9IGVuc3VyZUFycmF5U3RvcmFnZShleGVjLT5nbG9iYWxEYXRhKCkpOwog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwpAQCAtNTM4LDEyICs1NDUs
MTggQEAgYm9vbCBKU0FycmF5Ojp1bnNoaWZ0Q291bnQoRXhlY1N0YXRlKiBleAogICAgIGlmIChs
ZW5ndGggIT0gc3RvcmFnZS0+bV9udW1WYWx1ZXNJblZlY3RvciB8fCBzdG9yYWdlLT5pblNwYXJz
ZU1vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHN0b3JhZ2UtPm1faW5k
ZXhCaWFzID49IGNvdW50KSB7CisgICAgYm9vbCBtb3ZlRnJvbnQgPSAhc3RhcnRJbmRleCB8fCBz
dGFydEluZGV4IDwgbGVuZ3RoIC8gMjsKKworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0
b3JhZ2UtPnZlY3Rvckxlbmd0aCgpOworCisgICAgaWYgKG1vdmVGcm9udCAmJiBzdG9yYWdlLT5t
X2luZGV4QmlhcyA+PSBjb3VudCkgewogICAgICAgICBtX2J1dHRlcmZseSA9IHN0b3JhZ2UtPmJ1
dHRlcmZseSgpLT51bnNoaWZ0KHN0cnVjdHVyZSgpLCBjb3VudCk7CiAgICAgICAgIHN0b3JhZ2Ug
PSBtX2J1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCk7CiAgICAgICAgIHN0b3JhZ2UtPm1faW5kZXhC
aWFzIC09IGNvdW50OwotICAgICAgICBzdG9yYWdlLT5zZXRWZWN0b3JMZW5ndGgoc3RvcmFnZS0+
dmVjdG9yTGVuZ3RoKCkgKyBjb3VudCk7Ci0gICAgfSBlbHNlIGlmICh1bnNoaWZ0Q291bnRTbG93
Q2FzZShleGVjLT5nbG9iYWxEYXRhKCksIGNvdW50KSkKKyAgICAgICAgc3RvcmFnZS0+c2V0VmVj
dG9yTGVuZ3RoKHZlY3Rvckxlbmd0aCArIGNvdW50KTsKKyAgICB9IGVsc2UgaWYgKCFtb3ZlRnJv
bnQgJiYgdmVjdG9yTGVuZ3RoIC0gbGVuZ3RoID49IGNvdW50KQorICAgICAgICBzdG9yYWdlID0g
c3RvcmFnZS0+YnV0dGVyZmx5KCktPmFycmF5U3RvcmFnZSgpOworICAgIGVsc2UgaWYgKHVuc2hp
ZnRDb3VudFNsb3dDYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgbW92ZUZyb250LCBjb3VudCkpCiAg
ICAgICAgIHN0b3JhZ2UgPSBhcnJheVN0b3JhZ2UoKTsKICAgICBlbHNlIHsKICAgICAgICAgdGhy
b3dPdXRPZk1lbW9yeUVycm9yKGV4ZWMpOwpAQCAtNTUxLDggKzU2NCwxNiBAQCBib29sIEpTQXJy
YXk6OnVuc2hpZnRDb3VudChFeGVjU3RhdGUqIGV4CiAgICAgfQogCiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+KiB2ZWN0b3IgPSBzdG9yYWdlLT5tX3ZlY3RvcjsKKworICAgIGlmIChzdGFydElu
ZGV4KSB7CisgICAgICAgIGlmIChtb3ZlRnJvbnQpCisgICAgICAgICAgICBtZW1tb3ZlKHZlY3Rv
ciwgdmVjdG9yICsgY291bnQsIHN0YXJ0SW5kZXggKiBzaXplb2YoSlNWYWx1ZSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtZW1tb3ZlKHZlY3RvciArIHN0YXJ0SW5kZXggKyBjb3VudCwg
dmVjdG9yICsgc3RhcnRJbmRleCwgKGxlbmd0aCAtIHN0YXJ0SW5kZXgpICogc2l6ZW9mKEpTVmFs
dWUpKTsKKyAgICB9CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7IGkrKykK
LSAgICAgICAgdmVjdG9yW2ldLmNsZWFyKCk7CisgICAgICAgIHZlY3RvcltpICsgc3RhcnRJbmRl
eF0uY2xlYXIoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXkuaAkocmV2aXNpb24gMTI5NTIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlIHBvcChFeGVjU3RhdGUqKTsKIAog
ICAgICAgICBib29sIHNoaWZ0Q291bnQoRXhlY1N0YXRlKiwgdW5zaWduZWQgY291bnQpOwotICAg
ICAgICBib29sIHVuc2hpZnRDb3VudChFeGVjU3RhdGUqLCB1bnNpZ25lZCBjb3VudCk7CisgICAg
ICAgIGJvb2wgdW5zaGlmdENvdW50KEV4ZWNTdGF0ZSosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAK
ICAgICAgICAgdm9pZCBmaWxsQXJnTGlzdChFeGVjU3RhdGUqLCBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciYpOwogICAgICAgICB2b2lkIGNvcHlUb0FyZ3VtZW50cyhFeGVjU3RhdGUqLCBDYWxsRnJhbWUq
LCB1aW50MzJfdCBsZW5ndGgpOwpAQCAtMTAxLDcgKzEwMSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZvaWQgc2V0TGVuZ3RoV3JpdGFibGUoRXhlY1N0YXRlKiwgYm9vbCB3cml0YWJs
ZSk7CiAKLSAgICAgICAgYm9vbCB1bnNoaWZ0Q291bnRTbG93Q2FzZShKU0dsb2JhbERhdGEmLCB1
bnNpZ25lZCBjb3VudCk7CisgICAgICAgIGJvb2wgdW5zaGlmdENvdW50U2xvd0Nhc2UoSlNHbG9i
YWxEYXRhJiwgYm9vbCwgdW5zaWduZWQpOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgY29t
cGFjdEZvclNvcnRpbmcoSlNHbG9iYWxEYXRhJik7CiAgICAgfTsK
</data>
<flag name="review"
          id="177976"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>