<?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>115301</bug_id>
          
          <creation_ts>2013-04-27 00:08:25 -0700</creation_ts>
          <short_desc>fourthTier: SymbolTable should be thread-safe</short_desc>
          <delta_ts>2013-04-27 16:13:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>buildbot</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>ggaren</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>philn</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>882149</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 00:08:25 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882150</commentid>
    <comment_count>1</comment_count>
      <attachid>199896</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 00:08:55 -0700</bug_when>
    <thetext>Created attachment 199896
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882151</commentid>
    <comment_count>2</comment_count>
      <attachid>199897</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 00:25:21 -0700</bug_when>
    <thetext>Created attachment 199897
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882152</commentid>
    <comment_count>3</comment_count>
      <attachid>199897</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-04-27 00:31:32 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass qt-wk2-ews (qt-wk2):
Output: http://webkit-queues.appspot.com/results/56828</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882153</commentid>
    <comment_count>4</comment_count>
      <attachid>199897</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-04-27 00:32:27 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass qt-ews (qt):
Output: http://webkit-queues.appspot.com/results/173248</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882154</commentid>
    <comment_count>5</comment_count>
      <attachid>199897</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-27 00:39:53 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/183476</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882155</commentid>
    <comment_count>6</comment_count>
      <attachid>199897</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-27 00:41:52 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/239024</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882156</commentid>
    <comment_count>7</comment_count>
      <attachid>199897</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-04-27 00:51:10 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass mac-wk2-ews (mac-wk2):
Output: http://webkit-queues.appspot.com/results/58697</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882157</commentid>
    <comment_count>8</comment_count>
      <attachid>199897</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-04-27 00:56:06 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/37478</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882158</commentid>
    <comment_count>9</comment_count>
      <attachid>199897</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-04-27 01:03:01 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/51283</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882161</commentid>
    <comment_count>10</comment_count>
      <attachid>199897</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-04-27 01:15:56 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

Attachment 199897 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/153472</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882164</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 01:51:26 -0700</bug_when>
    <thetext>A near flawless victory of EWS destruction! ;-)  Too bad this patch is for the FTL branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882193</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 11:16:39 -0700</bug_when>
    <thetext>As expected, this has neutral performance:


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r149236)
&quot;LockedSymTab&quot; at /Volumes/Data/fromMiniMe/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r149236)

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.

                                                     TipOfTree                LockedSymTab                                   
SunSpider:
   3d-cube                                         9.4853+-0.1687            9.4708+-0.1534        
   3d-morph                                        8.8450+-0.1732     ?      8.8513+-0.1364        ?
   3d-raytrace                                    10.5321+-0.1532     ?     10.5752+-0.1833        ?
   access-binary-trees                             1.8999+-0.0079     ?      1.9032+-0.0063        ?
   access-fannkuch                                 7.8547+-0.1363            7.8521+-0.1087        
   access-nbody                                    4.7085+-0.0093            4.6971+-0.0403        
   access-nsieve                                   4.9781+-0.0629            4.9242+-0.0830          might be 1.0110x faster
   bitops-3bit-bits-in-byte                        1.8504+-0.0099     ?      1.8538+-0.0110        ?
   bitops-bits-in-byte                             7.1578+-0.1013            7.1349+-0.1033        
   bitops-bitwise-and                              2.8015+-0.0589            2.7942+-0.0783        
   bitops-nsieve-bits                              4.7981+-0.0170            4.7400+-0.0833          might be 1.0122x faster
   controlflow-recursive                           3.1646+-0.0494            3.1490+-0.0484        
   crypto-aes                                      7.8315+-0.1485     ?      7.9136+-0.1312        ? might be 1.0105x slower
   crypto-md5                                      4.2016+-0.0411     ?      4.2054+-0.0336        ?
   crypto-sha1                                     3.3061+-0.0154     ?      3.3242+-0.0264        ?
   date-format-tofte                              15.3321+-0.2272           15.1823+-0.1580        
   date-format-xparb                               9.4408+-0.1932     ?      9.8244+-0.3991        ? might be 1.0406x slower
   math-cordic                                     4.0593+-0.0104     ?      4.0606+-0.0073        ?
   math-partial-sums                              12.5430+-0.1325     ?     12.6080+-0.1354        ?
   math-spectral-norm                              3.1746+-0.0110     ?      3.1756+-0.0128        ?
   regexp-dna                                     12.6929+-0.1829     ?     12.9468+-0.1918        ? might be 1.0200x slower
   string-base64                                   5.1346+-0.0648            5.0202+-0.1020          might be 1.0228x faster
   string-fasta                                   10.8201+-0.1367     ?     10.8693+-0.1156        ?
   string-tagcloud                                14.7043+-0.4384           14.2581+-0.2455          might be 1.0313x faster
   string-unpack-code                             28.2888+-0.1585     ?     28.3793+-0.1470        ?
   string-validate-input                           7.4476+-0.1724            7.2448+-0.1799          might be 1.0280x faster

   &lt;arithmetic&gt; *                                  7.9636+-0.0633            7.9599+-0.0661          might be 1.0005x faster
   &lt;geometric&gt;                                     6.4131+-0.0391            6.4053+-0.0456          might be 1.0012x faster
   &lt;harmonic&gt;                                      5.1716+-0.0223            5.1638+-0.0278          might be 1.0015x faster

                                                     TipOfTree                LockedSymTab                                   
V8Spider:
   crypto                                         87.4193+-0.2684     ?     87.8282+-0.2366        ?
   deltablue                                     132.0028+-0.4315     ?    132.2209+-0.8015        ?
   earley-boyer                                   84.0875+-0.4977           83.3908+-0.3244        
   raytrace                                       62.1315+-0.2003     ?     62.4411+-0.2595        ?
   regexp                                        102.8483+-0.7213          102.5691+-0.6543        
   richards                                      118.9806+-0.6528     ?    119.8726+-0.5321        ?
   splay                                          49.1056+-0.3912           48.9985+-0.2025        

   &lt;arithmetic&gt;                                   90.9394+-0.1446     ?     91.0459+-0.2269        ? might be 1.0012x slower
   &lt;geometric&gt; *                                  86.4951+-0.1148     ?     86.5646+-0.1915        ? might be 1.0008x slower
   &lt;harmonic&gt;                                     81.8715+-0.1351     ?     81.9102+-0.1678        ? might be 1.0005x slower

                                                     TipOfTree                LockedSymTab                                   
Octane and V8v7:
   encrypt                                        0.47012+-0.00122    ?     0.47013+-0.00098       ?
   decrypt                                        8.70860+-0.02957          8.68786+-0.02463       
   deltablue                             x2       0.61039+-0.00436          0.60705+-0.00092       
   earley                                         0.91475+-0.00305    ?     0.91992+-0.01022       ?
   boyer                                         12.85130+-0.04347    ?    12.85830+-0.04491       ?
   raytrace                              x2       4.42646+-0.00697    ?     4.43799+-0.00919       ?
   regexp                                x2      32.50308+-0.18186    ?    32.82752+-0.19594       ?
   richards                              x2       0.30974+-0.00053          0.30908+-0.00072       
   splay                                 x2       0.66233+-0.03966          0.66164+-0.03646       
   navier-stokes                         x2      10.83210+-0.03376         10.80770+-0.02305       
   closure                                        0.30775+-0.03515    ?     0.30954+-0.03500       ?
   jquery                                         4.42657+-0.55281    ?     4.42716+-0.54569       ?
   gbemu                                 x2     251.55537+-17.48037       251.45155+-17.33567      
   box2d                                 x2      31.71124+-0.11451    ?    31.71913+-0.08318       ?

V8v7:
   &lt;arithmetic&gt;                                   7.60206+-0.02771    ?     7.63989+-0.02754       ? might be 1.0050x slower
   &lt;geometric&gt; *                                  2.46183+-0.01854    ?     2.46305+-0.01721       ? might be 1.0005x slower
   &lt;harmonic&gt;                                     0.94767+-0.00964          0.94625+-0.00881         might be 1.0015x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                  31.49548+-1.59774    ?    31.51437+-1.58646       ? might be 1.0006x slower
   &lt;geometric&gt; *                                  4.41154+-0.06019    ?     4.41442+-0.05873       ? might be 1.0007x slower
   &lt;harmonic&gt;                                     1.07220+-0.01789          1.07200+-0.01732         might be 1.0002x faster

                                                     TipOfTree                LockedSymTab                                   
Kraken:
   ai-astar                                       493.343+-0.742      ?     494.385+-1.354         ?
   audio-beat-detection                           245.441+-0.939            244.624+-1.173         
   audio-dft                                      323.669+-1.803            323.412+-2.170         
   audio-fft                                      143.650+-0.405            143.629+-0.387         
   audio-oscillator                               234.800+-0.983      ?     235.006+-1.184         ?
   imaging-darkroom                               294.261+-1.558            292.652+-1.150         
   imaging-desaturate                             160.446+-0.280      ?     160.465+-0.479         ?
   imaging-gaussian-blur                          397.865+-0.406      !     399.320+-0.900         ! definitely 1.0037x slower
   json-parse-financial                            80.970+-0.222             80.818+-0.159         
   json-stringify-tinderbox                       101.720+-0.414            101.709+-0.316         
   stanford-crypto-aes                            238.505+-1.177            236.723+-1.854         
   stanford-crypto-ccm                            110.943+-0.344      ?     111.361+-0.210         ?
   stanford-crypto-pbkdf2                         274.398+-1.227      ?     276.021+-1.161         ?
   stanford-crypto-sha256-iterative               115.787+-0.181      !     116.302+-0.271         ! definitely 1.0044x slower

   &lt;arithmetic&gt; *                                 229.700+-0.245      ?     229.745+-0.426         ? might be 1.0002x slower
   &lt;geometric&gt;                                    200.687+-0.215      ?     200.710+-0.352         ? might be 1.0001x slower
   &lt;harmonic&gt;                                     174.507+-0.186      ?     174.550+-0.265         ? might be 1.0002x slower

                                                     TipOfTree                LockedSymTab                                   
JSRegress:
   adapt-to-double-divide                         22.6772+-0.1209           22.5509+-0.1286        
   aliased-arguments-getbyval                      0.9256+-0.0106            0.9221+-0.0097        
   allocate-big-object                             2.5439+-0.0353     ?      2.5527+-0.0388        ?
   arity-mismatch-inlining                         0.7839+-0.0128            0.7770+-0.0156        
   array-access-polymorphic-structure              7.1247+-0.1087            7.0338+-0.1338          might be 1.0129x faster
   array-with-double-add                           5.8482+-0.0954     ?      5.8645+-0.0584        ?
   array-with-double-increment                     4.2005+-0.0894            4.1053+-0.0103          might be 1.0232x faster
   array-with-double-mul-add                       7.0661+-0.0948     ?      7.1388+-0.0993        ? might be 1.0103x slower
   array-with-double-sum                           7.9927+-0.0909            7.8818+-0.1171          might be 1.0141x faster
   array-with-int32-add-sub                       10.5986+-0.1282           10.4619+-0.1108          might be 1.0131x faster
   array-with-int32-or-double-sum                  8.1077+-0.0851            8.0732+-0.0899        
   big-int-mul                                     4.9740+-0.0615     ?      4.9908+-0.0487        ?
   boolean-test                                    4.4304+-0.0610     ?      4.4344+-0.0619        ?
   cast-int-to-double                             14.0254+-0.1403     ?     14.0896+-0.1509        ?
   cell-argument                                  14.5879+-0.1147           14.4835+-0.0913        
   cfg-simplify                                    4.0328+-0.0845            4.0114+-0.0317        
   cmpeq-obj-to-obj-other                         11.5532+-0.1712     ^     11.0827+-0.1869        ^ definitely 1.0425x faster
   constant-test                                   8.5107+-0.1471     ?      8.5506+-0.1349        ?
   direct-arguments-getbyval                       0.8496+-0.0109     ?      0.8500+-0.0094        ?
   double-pollution-getbyval                      10.7973+-0.1073     ?     10.8190+-0.1513        ?
   double-pollution-putbyoffset                    5.0945+-0.0896            5.0583+-0.0340        
   empty-string-plus-int                          11.0503+-0.2076     ?     11.0643+-0.2151        ?
   external-arguments-getbyval                     2.2301+-0.0334     ?      2.2312+-0.0322        ?
   external-arguments-putbyval                     3.2857+-0.0201     ?      3.3349+-0.0764        ? might be 1.0150x slower
   Float32Array-matrix-mult                       14.6364+-0.1432     ^     14.3423+-0.1131        ^ definitely 1.0205x faster
   fold-double-to-int                             22.3196+-0.2973           22.1905+-0.2795        
   function-dot-apply                              3.1942+-0.0105     ?      3.1969+-0.0082        ?
   function-test                                   5.0442+-0.0747     ?      5.0656+-0.0415        ?
   get-by-id-chain-from-try-block                  7.4422+-0.0989            7.3854+-0.0906        
   HashMap-put-get-iterate-keys                   96.5506+-1.2191     ?     97.1141+-0.6602        ?
   HashMap-put-get-iterate                        98.4338+-0.7239     ?     99.0688+-0.8952        ?
   HashMap-string-put-get-iterate                 73.8042+-0.3793     ?     74.4451+-0.8219        ?
   indexed-properties-in-objects                   4.5787+-0.0689     ?      4.5916+-0.0189        ?
   inline-arguments-access                         1.2662+-0.0079            1.2643+-0.0074        
   inline-arguments-local-escape                  23.3145+-0.1568     ?     23.4913+-0.1096        ?
   inline-get-scoped-var                           6.5831+-0.1067     ?      6.6033+-0.1011        ?
   inlined-put-by-id-transition                   16.7702+-0.2042           16.4514+-0.1639          might be 1.0194x faster
   int-or-other-abs-then-get-by-val                8.9707+-0.0925            8.8569+-0.1044          might be 1.0129x faster
   int-or-other-abs-zero-then-get-by-val          37.2793+-0.1553     ?     37.9880+-0.9653        ? might be 1.0190x slower
   int-or-other-add-then-get-by-val               10.3761+-0.1206           10.2648+-0.1026          might be 1.0108x faster
   int-or-other-add                               10.5281+-0.1058     ?     10.5379+-0.1308        ?
   int-or-other-div-then-get-by-val                8.0005+-0.0959     ?      8.0417+-0.1075        ?
   int-or-other-max-then-get-by-val               10.0047+-0.2603     ?     10.1012+-0.1366        ?
   int-or-other-min-then-get-by-val                8.2734+-0.1158            8.1754+-0.0921          might be 1.0120x faster
   int-or-other-mod-then-get-by-val                8.1264+-0.0845            8.0642+-0.0857        
   int-or-other-mul-then-get-by-val                7.2610+-0.0979     ?      7.2645+-0.0973        ?
   int-or-other-neg-then-get-by-val                8.1614+-0.1402            8.0649+-0.0891          might be 1.0120x faster
   int-or-other-neg-zero-then-get-by-val          36.5605+-0.2255           36.5384+-0.1223        
   int-or-other-sub-then-get-by-val               10.2852+-0.1406     ?     10.3753+-0.1161        ?
   int-or-other-sub                                8.3548+-0.0704            8.2582+-0.1099          might be 1.0117x faster
   int-overflow-local                             12.9406+-0.0864     ?     13.0106+-0.0855        ?
   Int16Array-bubble-sort                         49.5605+-0.1955           49.5395+-0.1528        
   Int16Array-load-int-mul                         1.8958+-0.0062     ?      1.9040+-0.0081        ?
   Int8Array-load                                  4.8306+-0.0633     ?      4.8629+-0.0594        ?
   integer-divide                                 15.2532+-0.1342           15.1747+-0.1242        
   integer-modulo                                  2.1141+-0.0159            2.1138+-0.0158        
   make-indexed-storage                            3.9144+-0.0368            3.9099+-0.0372        
   method-on-number                               23.7926+-0.2728     ?     24.0895+-0.3485        ? might be 1.0125x slower
   nested-function-parsing-random                382.1898+-13.2124         381.5689+-13.1304       
   nested-function-parsing                        47.7541+-1.1281     ?     47.8574+-1.0886        ?
   new-array-buffer-dead                           3.6334+-0.0120     ?      3.6366+-0.0114        ?
   new-array-buffer-push                          10.5347+-0.1709     ?     10.6120+-0.1056        ?
   new-array-dead                                 28.3748+-0.1203           28.3088+-0.0863        
   new-array-push                                  7.0678+-0.1366            7.0317+-0.1022        
   number-test                                     4.3368+-0.0582     ?      4.3399+-0.0536        ?
   object-closure-call                             8.3207+-0.0937     ?      8.4598+-0.1156        ? might be 1.0167x slower
   object-test                                     4.8699+-0.0864     ?      4.9424+-0.0532        ? might be 1.0149x slower
   poly-stricteq                                  90.9276+-0.1412     !     92.0319+-0.8518        ! definitely 1.0121x slower
   polymorphic-structure                          20.1326+-0.0886     ?     20.1810+-0.1050        ?
   polyvariant-monomorphic-get-by-id              12.6289+-0.0950           12.6071+-0.1238        
   rare-osr-exit-on-local                         20.8056+-0.1292           20.7675+-0.1310        
   register-pressure-from-osr                     31.6120+-0.1071     ?     31.7152+-0.1346        ?
   simple-activation-demo                         34.5070+-0.1194     ?     34.5641+-0.1351        ?
   slow-array-profile-convergence                  4.3345+-0.0165            4.3195+-0.0142        
   slow-convergence                                3.8316+-0.0110            3.8230+-0.0098        
   sparse-conditional                              1.3315+-0.0174     ?      1.3420+-0.0094        ?
   splice-to-remove                               50.4484+-0.2022     ?     51.0209+-0.5762        ? might be 1.0113x slower
   string-concat-object                            2.7388+-0.0412     ?      2.7569+-0.0337        ?
   string-concat-pair-object                       2.6782+-0.0143     !      2.7395+-0.0464        ! definitely 1.0229x slower
   string-concat-pair-simple                      17.3284+-0.2873           17.2926+-0.1884        
   string-concat-simple                           17.3269+-0.2673           17.3249+-0.2672        
   string-cons-repeat                             10.1490+-0.0308     ?     10.1797+-0.0453        ?
   string-cons-tower                              10.9721+-0.0344     ?     11.0561+-0.0840        ?
   string-equality                               106.0078+-1.1518     ?    106.4500+-1.6264        ?
   string-hash                                     2.6662+-0.0089     ?      2.6750+-0.0100        ?
   string-repeat-arith                            47.0378+-0.2420     ?     47.3012+-0.3184        ?
   string-sub                                     90.0675+-0.4973           89.6221+-0.6720        
   string-test                                     4.3258+-0.0472            4.2769+-0.0302          might be 1.0114x faster
   structure-hoist-over-transitions                3.2836+-0.0259     ?      3.3721+-0.1236        ? might be 1.0270x slower
   tear-off-arguments-simple                       1.7930+-0.0112     ?      1.8036+-0.0132        ?
   tear-off-arguments                              3.4020+-0.0108     ?      3.4037+-0.0088        ?
   temporal-structure                             20.9846+-0.1256     ?     21.1803+-0.4286        ?
   to-int32-boolean                               30.7233+-0.1404           30.7000+-0.1225        
   undefined-test                                  4.5769+-0.0413     ?      4.5834+-0.0371        ?

   &lt;arithmetic&gt;                                   21.0363+-0.1585     ?     21.0698+-0.1436        ? might be 1.0016x slower
   &lt;geometric&gt; *                                   9.4827+-0.0265     ?      9.4852+-0.0225        ? might be 1.0003x slower
   &lt;harmonic&gt;                                      5.2306+-0.0181     ?      5.2325+-0.0156        ? might be 1.0003x slower

                                                     TipOfTree                LockedSymTab                                   
All benchmarks:
   &lt;arithmetic&gt;                                   41.2868+-0.3174     ?     41.3164+-0.3178        ? might be 1.0007x slower
   &lt;geometric&gt;                                    11.4830+-0.0498     ?     11.4841+-0.0493        ? might be 1.0001x slower
   &lt;harmonic&gt;                                      3.7309+-0.0326            3.7305+-0.0312          might be 1.0001x faster

                                                     TipOfTree                LockedSymTab                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                23.1283+-0.1145     ?     23.1351+-0.1191        ? might be 1.0003x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882245</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-27 15:21:58 -0700</bug_when>
    <thetext>The SymbolTable itself -- excluding Watchpoints -- is immutable after byte-compilation. It must be so in order to maintain lots of different invariants held by arguments objects, closures, and compiled code. It feels a little strange to go out of our way to make mutation thread-safe when it&apos;s not safe at all.

Can take advantage of this by ASSERTing that mutation doesn&apos;t happen, instead of adding guards for thread-safe mutation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882246</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 15:28:13 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; The SymbolTable itself -- excluding Watchpoints -- is immutable after byte-compilation. It must be so in order to maintain lots of different invariants held by arguments objects, closures, and compiled code. It feels a little strange to go out of our way to make mutation thread-safe when it&apos;s not safe at all.

Really?  What about a second script tag?

&gt; 
&gt; Can take advantage of this by ASSERTing that mutation doesn&apos;t happen, instead of adding guards for thread-safe mutation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882249</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-27 15:38:43 -0700</bug_when>
    <thetext>Oops! I forgot about the global object&apos;s symbol table. That is mutable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882252</commentid>
    <comment_count>16</comment_count>
      <attachid>199897</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-27 15:48:34 -0700</bug_when>
    <thetext>Comment on attachment 199897
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>882262</commentid>
    <comment_count>17</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-27 16:13:55 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/149248</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199896</attachid>
            <date>2013-04-27 00:08:55 -0700</date>
            <delta_ts>2013-04-27 00:25:21 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>12642</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM5NywxMCArMzM5NywxNCBAQCBib29sIENvZGVC
bG9jazo6dXNlc09wY29kZShPcGNvZGVJRCBvcGNvCiAKIFN0cmluZyBDb2RlQmxvY2s6Om5hbWVG
b3JSZWdpc3RlcihpbnQgcmVnaXN0ZXJOdW1iZXIpCiB7Ci0gICAgU3ltYm9sVGFibGU6Oml0ZXJh
dG9yIGVuZCA9IHN5bWJvbFRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoU3ltYm9sVGFibGU6Oml0
ZXJhdG9yIHB0ciA9IHN5bWJvbFRhYmxlKCktPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7
Ci0gICAgICAgIGlmIChwdHItPnZhbHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpCisg
ICAgU3ltYm9sVGFibGU6OkxvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKKyAg
ICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBlbmQgPSBzeW1ib2xUYWJsZSgpLT5lbmQobG9j
a2VyKTsKKyAgICBmb3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIHB0ciA9IHN5bWJvbFRh
YmxlKCktPmJlZ2luKGxvY2tlcik7IHB0ciAhPSBlbmQ7ICsrcHRyKSB7CisgICAgICAgIGlmIChw
dHItPnZhbHVlLmdldEluZGV4KCkgPT0gcmVnaXN0ZXJOdW1iZXIpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBUaGlzIHdvbid0IHdvcmsgZnJvbSB0aGUgY29tcGlsYXRpb24gdGhyZWFkLgorICAg
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNTMw
MAogICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwdHItPmtleSk7CisgICAgICAgIH0KICAgICB9
CiAgICAgaWYgKG5lZWRzQWN0aXZhdGlvbigpICYmIHJlZ2lzdGVyTnVtYmVyID09IGFjdGl2YXRp
b25SZWdpc3RlcigpKQogICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJhY3RpdmF0aW9uIik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTQ5MjE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxMSw5ICsyMTEsMTAgQEAgUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlKAogCiBib29sIEJ5dGVjb2RlR2VuZXJhdG9yOjphZGRWYXIoY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIGJvb2wgaXNDb25zdGFudCwgUmVnaXN0ZXJJRComIHIwKQogeworICAgIFN5bWJv
bFRhYmxlOjpMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCkubV9sb2NrKTsKICAgICBpbnQgaW5k
ZXggPSBtX2NhbGxlZVJlZ2lzdGVycy5zaXplKCk7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdF
bnRyeShpbmRleCwgaXNDb25zdGFudCA/IFJlYWRPbmx5IDogMCk7Ci0gICAgU3ltYm9sVGFibGU6
OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChpZGVudC5pbXBsKCksIG5ld0Vu
dHJ5KTsKKyAgICBTeW1ib2xUYWJsZTo6TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFi
bGUoKS5hZGQobG9ja2VyLCBpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKIAogICAgIGlmICghcmVz
dWx0LmlzTmV3RW50cnkpIHsKICAgICAgICAgcjAgPSAmcmVnaXN0ZXJGb3IocmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS5nZXRJbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYzLDEx
ICszNjMsMTIgQEAgaW50IFByb2dyYW1FeGVjdXRhYmxlOjphZGRHbG9iYWxWYXIoSlNHbAogICAg
IC8vIFRyeSB0byBzaGFyZSB0aGUgc3ltYm9sVGFibGUgaWYgcG9zc2libGUKICAgICBTaGFyZWRT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAg
ICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTW9kZSk7Ci0gICAgaW50IGluZGV4ID0gc3ltYm9sVGFi
bGUtPnNpemUoKTsKKyAgICBTeW1ib2xUYWJsZTo6TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+
bV9sb2NrKTsKKyAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS0+c2l6ZShsb2NrZXIpOwogICAg
IFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkoaW5kZXgsIChjb25zdGFudE1vZGUgPT0gSXNDb25z
dGFudCkgPyBSZWFkT25seSA6IDApOwogICAgIGlmIChmdW5jdGlvbk1vZGUgPT0gSXNGdW5jdGlv
blRvU3BlY2lhbGl6ZSkKICAgICAgICAgbmV3RW50cnkuYXR0ZW1wdFRvV2F0Y2goKTsKLSAgICBT
eW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxlLT5hZGQoaWRlbnQuaW1w
bCgpLCBuZXdFbnRyeSk7CisgICAgU3ltYm9sVGFibGU6OkFkZFJlc3VsdCByZXN1bHQgPSBzeW1i
b2xUYWJsZS0+YWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CiAgICAgaWYgKCFy
ZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLm5vdGlm
eVdyaXRlKCk7CiAgICAgICAgIGluZGV4ID0gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXRJbmRl
eCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FjdGl2YXRp
b24uY3BwCShyZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0FjdGl2YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsMTMgKzExMywxNiBAQCB2
b2lkIEpTQWN0aXZhdGlvbjo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0CiAgICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcyAmJiAhdGhpc09iamVjdC0+aXNUb3JuT2ZmKCkpCiAg
ICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5hcmd1bWVudHMp
OwogCi0gICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYg
bW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywg
aXQtPmtleS5nZXQoKSkpOworICAgIHsKKyAgICAgICAgU3ltYm9sVGFibGU6OkxvY2tlciBsb2Nr
ZXIodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKKyAgICAgICAgU3ltYm9sVGFi
bGU6Ok1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxv
Y2tlcik7CisgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlz
T2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
KyAgICAgICAgICAgIGlmIChpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0gJiYg
bW9kZSAhPSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkKGl0LT52YWx1ZSkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJ
ZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKKyAgICAgICAgfQogICAgIH0KICAgICAv
LyBTa2lwIHRoZSBKU1ZhcmlhYmxlT2JqZWN0IGltcGxlbWVudGF0aW9uIG9mIGdldE93bk5vbklu
ZGV4UHJvcGVydHlOYW1lcwogICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFt
ZXModGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShy
ZXZpc2lvbiAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJv
bFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDkgQEAgaW5saW5lIGJv
b2wgc3ltYm9sVGFibGVHZXQoCiAgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwotICAgIFN5bWJv
bFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVi
bGljTmFtZSgpKTsKLSAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKKyAgICBTeW1i
b2xUYWJsZTo6TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAgIFN5bWJvbFRh
YmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKGxvY2tlciwgcHJvcGVy
dHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKGxv
Y2tlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0
IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CkBAIC04
Nyw4ICs4OCw5IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxl
T2JqZWN0VHlwZSogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0g
Km9iamVjdC0+c3ltYm9sVGFibGUoKTsKLSAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9
IHN5bWJvbFRhYmxlLmZpbmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgaWYgKGl0
ZXIgPT0gc3ltYm9sVGFibGUuZW5kKCkpCisgICAgU3ltYm9sVGFibGU6OkxvY2tlciBsb2NrZXIo
c3ltYm9sVGFibGUubV9sb2NrKTsKKyAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVy
ID0gc3ltYm9sVGFibGUuZmluZChsb2NrZXIsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOwor
ICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlLmVuZChsb2NrZXIpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgU3ltYm9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwog
ICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwpAQCAtMTAzLDggKzEwNSw5IEBAIGlubGluZSBi
b29sIHN5bWJvbFRhYmxlR2V0KAogICAgIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKIHsKICAgICBT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwotICAgIFN5
bWJvbFRhYmxlOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUu
cHVibGljTmFtZSgpKTsKLSAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKKyAgICBT
eW1ib2xUYWJsZTo6TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAgIFN5bWJv
bFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKGxvY2tlciwgcHJv
cGVydHlOYW1lLnB1YmxpY05hbWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5k
KGxvY2tlcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpG
YXN0IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CkBA
IC0xMjEsMjEgKzEyNCwyOSBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICBWTSYg
dm0gPSBleGVjLT52bSgpOwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKICAgICAKLSAgICBTeW1ib2xUYWJs
ZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwotICAgIFN5bWJvbFRhYmxl
OjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFt
ZSgpKTsKLSAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGJvb2wgd2FzRmF0OwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFz
dEVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0RmFzdCh3YXNGYXQpOwotICAgIEFTU0VSVCghZmFzdEVu
dHJ5LmlzTnVsbCgpKTsKLSAgICBpZiAoZmFzdEVudHJ5LmlzUmVhZE9ubHkoKSkgewotICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgeworICAgICAgICBTeW1i
b2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOworICAgICAgICBT
eW1ib2xUYWJsZTo6TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAgICAgICBT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChsb2NrZXIs
IHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgICAgICBpZiAoaXRlciA9PSBzeW1ib2xU
YWJsZS5lbmQobG9ja2VyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYm9v
bCB3YXNGYXQ7CisgICAgICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFzdEVudHJ5ID0gaXRl
ci0+dmFsdWUuZ2V0RmFzdCh3YXNGYXQpOworICAgICAgICBBU1NFUlQoIWZhc3RFbnRyeS5pc051
bGwoKSk7CisgICAgICAgIGlmIChmYXN0RW50cnkuaXNSZWFkT25seSgpKSB7CisgICAgICAgICAg
ICBpZiAoc2hvdWxkVGhyb3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywg
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChVTkxJS0VMWSh3YXNGYXQpKQorICAgICAg
ICAgICAgaXRlci0+dmFsdWUubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+
cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgfQotICAgIGlmIChVTkxJS0VM
WSh3YXNGYXQpKQotICAgICAgICBpdGVyLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwotICAgIG9iamVj
dC0+cmVnaXN0ZXJBdChmYXN0RW50cnkuZ2V0SW5kZXgoKSkuc2V0KHZtLCBvYmplY3QsIHZhbHVl
KTsKKyAgICAvLyBJJ2QgcHJlZmVyIHdlIG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJh
cnJpZXJzLCBzaW5jZSBJIHByZWZlciB0byByZXNlcnZlCisgICAgLy8gdGhlIHJpZ2h0IGZvciBi
YXJyaWVycyB0byBiZSBhYmxlIHRvIHRyaWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9s
ZCBWTQorICAgIC8vIGxvY2tzIHdoaWxlIEdDJ2luZy4KKyAgICByZWctPnNldCh2bSwgb2JqZWN0
LCB2YWx1ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0NSwxNSArMTU2LDIxIEBAIGlu
bGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkg
fHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKLSAgICAKLSAgICBT
eW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS0+ZmluZChw
cm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICBpZiAoaXRlciA9PSBvYmplY3QtPnN5bWJv
bFRhYmxlKCktPmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVF
bnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKLSAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsK
LSAgICBlbnRyeS5ub3RpZnlXcml0ZSgpOwotICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmli
dXRlcyk7Ci0gICAgb2JqZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldCh2bSwg
b2JqZWN0LCB2YWx1ZSk7CisKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7Cisg
ICAgeworICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xU
YWJsZSgpOworICAgICAgICBTeW1ib2xUYWJsZTo6TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5t
X2xvY2spOworICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9s
VGFibGUuZmluZChsb2NrZXIsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgICAgICBp
ZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQobG9ja2VyKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKKyAg
ICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CisgICAgICAgIGVudHJ5Lm5vdGlmeVdyaXRl
KCk7CisgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgICAgIHJl
ZyA9ICZvYmplY3QtPnJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgfQorICAgIHJl
Zy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNp
b24gMTQ5MjE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCw1ICs5OCw4IEBAIFN5bWJvbFRhYmxlRW50cnk6OkZh
dEVudHJ5KiBTeW1ib2xUYWJsZUUKICAgICByZXR1cm4gZW50cnk7CiB9CiAKK1N5bWJvbFRhYmxl
OjpTeW1ib2xUYWJsZSgpIHsgfQorU3ltYm9sVGFibGU6On5TeW1ib2xUYWJsZSgpIHsgfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxNDkyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDky
IEBAIHN0cnVjdCBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0cyA6IEhhc2gKICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKIH07CiAKLXR5cGVkZWYgSGFzaE1h
cDxSZWZQdHI8U3RyaW5nSW1wbD4sIFN5bWJvbFRhYmxlRW50cnksIElkZW50aWZpZXJSZXBIYXNo
LCBIYXNoVHJhaXRzPFJlZlB0cjxTdHJpbmdJbXBsPiA+LCBTeW1ib2xUYWJsZUluZGV4SGFzaFRy
YWl0cz4gU3ltYm9sVGFibGU7CitjbGFzcyBTeW1ib2xUYWJsZSB7CitwdWJsaWM6CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFJlZlB0cjxTdHJpbmdJbXBsPiwgU3ltYm9sVGFibGVFbnRyeSwgSWRlbnRp
ZmllclJlcEhhc2gsIEhhc2hUcmFpdHM8UmVmUHRyPFN0cmluZ0ltcGw+ID4sIFN5bWJvbFRhYmxl
SW5kZXhIYXNoVHJhaXRzPiBNYXA7CisgICAgdHlwZWRlZiBCeXRlU3BpbkxvY2sgTG9jazsKKyAg
ICB0eXBlZGVmIEJ5dGVTcGluTG9ja2VyIExvY2tlcjsKKworICAgIFN5bWJvbFRhYmxlKCk7Cisg
ICAgflN5bWJvbFRhYmxlKCk7CisgICAgCisgICAgLy8gWW91IG11c3QgaG9sZCB0aGUgbG9jayB1
bnRpbCBhZnRlciB5b3UncmUgZG9uZSB3aXRoIHRoZSBpdGVyYXRvci4KKyAgICBNYXA6Oml0ZXJh
dG9yIGZpbmQoY29uc3QgTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbWFwLmZpbmQoa2V5KTsKKyAgICB9CisgICAgCisgICAgU3ltYm9sVGFibGVFbnRy
eSBnZXQoY29uc3QgTG9ja2VyJiwgU3RyaW5nSW1wbCoga2V5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fbWFwLmdldChrZXkpOworICAgIH0KKyAgICAKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGdl
dChTdHJpbmdJbXBsKiBrZXkpCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyKG1fbG9jayk7
CisgICAgICAgIHJldHVybiBnZXQobG9ja2VyLCBrZXkpOworICAgIH0KKyAgICAKKyAgICBTeW1i
b2xUYWJsZUVudHJ5IGlubGluZUdldChjb25zdCBMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXkpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9tYXAuaW5saW5lR2V0KGtleSk7CisgICAgfQorICAgIAor
ICAgIFN5bWJvbFRhYmxlRW50cnkgaW5saW5lR2V0KFN0cmluZ0ltcGwqIGtleSkKKyAgICB7Cisg
ICAgICAgIExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIGlubGluZUdldChr
ZXkpOworICAgIH0KKyAgICAKKyAgICBNYXA6Oml0ZXJhdG9yIGJlZ2luKGNvbnN0IExvY2tlciYp
CisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAuYmVnaW4oKTsKKyAgICB9CisgICAgCisgICAg
TWFwOjppdGVyYXRvciBlbmQoY29uc3QgTG9ja2VyJikKKyAgICB7CisgICAgICAgIHJldHVybiBt
X21hcC5lbmQoKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoY29uc3QgTG9ja2VyJikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC5zaXplKCk7CisgICAgfQorICAgIAor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIExvY2tlciBsb2NrZXIobV9s
b2NrKTsKKyAgICAgICAgcmV0dXJuIHNpemUobG9ja2VyKTsKKyAgICB9CisgICAgCisgICAgTWFw
OjpBZGRSZXN1bHQgYWRkKGNvbnN0IExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3lt
Ym9sVGFibGVFbnRyeSYgZW50cnkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAuYWRkKGtl
eSwgZW50cnkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZChTdHJpbmdJbXBsKiBrZXksIGNv
bnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tl
cihtX2xvY2spOworICAgICAgICBhZGQobG9ja2VyLCBrZXksIGVudHJ5KTsKKyAgICB9CisgICAg
CisgICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNvbnN0IExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwg
Y29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCisgICAgeworICAgICAgICByZXR1cm4gbV9t
YXAuc2V0KGtleSwgZW50cnkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChTdHJpbmdJbXBs
KiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5KQorICAgIHsKKyAgICAgICAgTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBzZXQobG9ja2VyLCBrZXksIGVudHJ5KTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIE1hcCBtX21hcDsKK3B1YmxpYzoKKyAgICBtdXRhYmxl
IEJ5dGVTcGluTG9jayBtX2xvY2s7Cit9OworCiAKIGNsYXNzIFNoYXJlZFN5bWJvbFRhYmxlIDog
cHVibGljIEpTQ2VsbCwgcHVibGljIFN5bWJvbFRhYmxlIHsKIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199897</attachid>
            <date>2013-04-27 00:25:21 -0700</date>
            <delta_ts>2013-04-27 15:48:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17695</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ5MjM2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBA
CisyMDEzLTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogU3ltYm9sVGFibGUgc2hvdWxkIGJlIHRocmVhZC1zYWZlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUzMDEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1ha2VzIFN5bWJv
bFRhYmxlIHRocmVhZC1zYWZlLiBSZWxpZXMgb24gU3ltYm9sVGFibGVFbnRyeSBhbHJlYWR5IGJl
aW5nIGltbXV0YWJsZSwKKyAgICAgICAgb3RoZXIgdGhhbiB0aGUgV2F0Y2hwb2ludFNldDsgYnV0
IHRoZSBXYXRjaHBvaW50U2V0IGFscmVhZHkgaGFzIGEgcmlnaHRlb3VzCisgICAgICAgIGNvbmN1
cnJlbmN5IHByb3RvY29sLiBTbywgdGhpcyBwYXRjaCBqdXN0IHByb3RlY3RzIHRoZSBTeW1ib2xU
YWJsZSdzIEhhc2hNYXAuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6Om5hbWVGb3JSZWdpc3Rlcik6CisgICAgICAgICogYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5l
cmF0b3I6OmFkZFZhcik6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZ3JhbUV4ZWN1dGFibGU6OmFkZEdsb2JhbFZhcik6CisgICAgICAgICogcnVu
dGltZS9KU0FjdGl2YXRpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0FjdGl2YXRpb246OmdldE93
bk5vbkluZGV4UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU0M6OkpTQWN0aXZhdGlvbjo6c3lt
Ym9sVGFibGVQdXRXaXRoQXR0cmlidXRlcyk6CisgICAgICAgICogcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3du
Tm9uSW5kZXhQcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaDoKKyAgICAgICAgKEpTQzo6c3ltYm9sVGFibGVHZXQpOgorICAgICAgICAoSlNDOjpz
eW1ib2xUYWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0
ZXMpOgorICAgICAgICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpT
eW1ib2xUYWJsZTo6U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6flN5
bWJvbFRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL1N5bWJvbFRhYmxlLmg6CisgICAgICAgIChT
eW1ib2xUYWJsZSk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpmaW5kKToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6OmdldCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjppbmxp
bmVHZXQpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlND
OjpTeW1ib2xUYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OnNpemUpOgor
ICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6YWRkKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFi
bGU6OnNldCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpjb250YWlucyk6CisKIDIwMTMt
MDQtMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaW5k
ZW50YXRpb24gb2YgU3ltYm9sVGFibGUuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE0OTIxNikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzk3
LDEwICszMzk3LDE0IEBAIGJvb2wgQ29kZUJsb2NrOjp1c2VzT3Bjb2RlKE9wY29kZUlEIG9wY28K
IAogU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKGludCByZWdpc3Rlck51bWJlcikK
IHsKLSAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgZW5kID0gc3ltYm9sVGFibGUoKS0+ZW5kKCk7
Ci0gICAgZm9yIChTeW1ib2xUYWJsZTo6aXRlcmF0b3IgcHRyID0gc3ltYm9sVGFibGUoKS0+YmVn
aW4oKTsgcHRyICE9IGVuZDsgKytwdHIpIHsKLSAgICAgICAgaWYgKHB0ci0+dmFsdWUuZ2V0SW5k
ZXgoKSA9PSByZWdpc3Rlck51bWJlcikKKyAgICBTeW1ib2xUYWJsZTo6TG9ja2VyIGxvY2tlcihz
eW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVu
ZCA9IHN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOworICAgIGZvciAoU3ltYm9sVGFibGU6Ok1h
cDo6aXRlcmF0b3IgcHRyID0gc3ltYm9sVGFibGUoKS0+YmVnaW4obG9ja2VyKTsgcHRyICE9IGVu
ZDsgKytwdHIpIHsKKyAgICAgICAgaWYgKHB0ci0+dmFsdWUuZ2V0SW5kZXgoKSA9PSByZWdpc3Rl
ck51bWJlcikgeworICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgd29uJ3Qgd29yayBmcm9tIHRo
ZSBjb21waWxhdGlvbiB0aHJlYWQuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MzAwCiAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHB0
ci0+a2V5KTsKKyAgICAgICAgfQogICAgIH0KICAgICBpZiAobmVlZHNBY3RpdmF0aW9uKCkgJiYg
cmVnaXN0ZXJOdW1iZXIgPT0gYWN0aXZhdGlvblJlZ2lzdGVyKCkpCiAgICAgICAgIHJldHVybiBB
U0NJSUxpdGVyYWwoImFjdGl2YXRpb24iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAxNDkyMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjExLDkgKzIxMSwxMCBAQCBQYXJzZXJF
cnJvciBCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoCiAKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0
b3I6OmFkZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgYm9vbCBpc0NvbnN0YW50LCBSZWdp
c3RlcklEKiYgcjApCiB7CisgICAgU3ltYm9sVGFibGU6OkxvY2tlciBsb2NrZXIoc3ltYm9sVGFi
bGUoKS5tX2xvY2spOwogICAgIGludCBpbmRleCA9IG1fY2FsbGVlUmVnaXN0ZXJzLnNpemUoKTsK
ICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KGluZGV4LCBpc0NvbnN0YW50ID8gUmVhZE9u
bHkgOiAwKTsKLSAgICBTeW1ib2xUYWJsZTo6QWRkUmVzdWx0IHJlc3VsdCA9IHN5bWJvbFRhYmxl
KCkuYWRkKGlkZW50LmltcGwoKSwgbmV3RW50cnkpOworICAgIFN5bWJvbFRhYmxlOjpNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBzeW1ib2xUYWJsZSgpLmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwg
bmV3RW50cnkpOwogCiAgICAgaWYgKCFyZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICByMCA9
ICZyZWdpc3RlckZvcihyZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldEluZGV4KCkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9u
IDE0OTIxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjMsMTEgKzM2MywxMiBAQCBpbnQgUHJvZ3JhbUV4ZWN1dGFi
bGU6OmFkZEdsb2JhbFZhcihKU0dsCiAgICAgLy8gVHJ5IHRvIHNoYXJlIHRoZSBzeW1ib2xUYWJs
ZSBpZiBwb3NzaWJsZQogICAgIFNoYXJlZFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGdsb2Jh
bE9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICBVTlVTRURfUEFSQU0oZnVuY3Rpb25Nb2RlKTsK
LSAgICBpbnQgaW5kZXggPSBzeW1ib2xUYWJsZS0+c2l6ZSgpOworICAgIFN5bWJvbFRhYmxlOjpM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAgIGludCBpbmRleCA9IHN5bWJv
bFRhYmxlLT5zaXplKGxvY2tlcik7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShpbmRl
eCwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7CiAgICAgaWYg
KGZ1bmN0aW9uTW9kZSA9PSBJc0Z1bmN0aW9uVG9TcGVjaWFsaXplKQogICAgICAgICBuZXdFbnRy
eS5hdHRlbXB0VG9XYXRjaCgpOwotICAgIFN5bWJvbFRhYmxlOjpBZGRSZXN1bHQgcmVzdWx0ID0g
c3ltYm9sVGFibGUtPmFkZChpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKKyAgICBTeW1ib2xUYWJs
ZTo6TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gc3ltYm9sVGFibGUtPmFkZChsb2NrZXIsIGlkZW50
LmltcGwoKSwgbmV3RW50cnkpOwogICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpIHsKICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwogICAgICAgICBpbmRleCA9
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0SW5kZXgoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQWN0aXZhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkocmV2aXNpb24gMTQ5MjE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBY3RpdmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTEzLDEzICsxMTMsMTYgQEAgdm9pZCBKU0FjdGl2YXRpb246OmdldE93bk5v
bkluZGV4UHJvcGVydAogICAgIGlmIChtb2RlID09IEluY2x1ZGVEb250RW51bVByb3BlcnRpZXMg
JiYgIXRoaXNPYmplY3QtPmlzVG9ybk9mZigpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuYXJndW1lbnRzKTsKIAotICAgIFN5bWJvbFRhYmxlOjpjb25z
dF9pdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5lbmQoKTsKLSAgICBm
b3IgKFN5bWJvbFRhYmxlOjpjb25zdF9pdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlKCktPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIXRoaXNPYmplY3Qt
PmlzVmFsaWQoaXQtPnZhbHVlKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBwcm9w
ZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsKKyAgICB7Cisg
ICAgICAgIFN5bWJvbFRhYmxlOjpMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJvbFRhYmxl
KCktPm1fbG9jayk7CisgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9IHRo
aXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOworICAgICAgICBmb3IgKFN5bWJv
bFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVn
aW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnZhbHVl
LmdldEF0dHJpYnV0ZXMoKSAmIERvbnRFbnVtICYmIG1vZGUgIT0gSW5jbHVkZURvbnRFbnVtUHJv
cGVydGllcykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICghdGhp
c09iamVjdC0+aXNWYWxpZChpdC0+dmFsdWUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBpdC0+a2V5Lmdl
dCgpKSk7CisgICAgICAgIH0KICAgICB9CiAgICAgLy8gU2tpcCB0aGUgSlNWYXJpYWJsZU9iamVj
dCBpbXBsZW1lbnRhdGlvbiBvZiBnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXMKICAgICBKU09i
amVjdDo6Z2V0T3duTm9uSW5kZXhQcm9wZXJ0eU5hbWVzKHRoaXNPYmplY3QsIGV4ZWMsIHByb3Bl
cnR5TmFtZXMsIG1vZGUpOwpAQCAtMTI5LDE2ICsxMzIsMjEgQEAgaW5saW5lIGJvb2wgSlNBY3Rp
dmF0aW9uOjpzeW1ib2xUYWJsZVB1dAogewogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkg
fHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCi0gICAgU3lt
Ym9sVGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFt
ZS5wdWJsaWNOYW1lKCkpOwotICAgIGlmIChpdGVyID09IHN5bWJvbFRhYmxlKCktPmVuZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVy
LT52YWx1ZTsKLSAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBpZiAoIWlzVmFsaWQo
ZW50cnkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBlbnRyeS5zZXRBdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpOwotICAgIHJlZ2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSkuc2V0KHZtLCB0
aGlzLCB2YWx1ZSk7CisgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIHsK
KyAgICAgICAgU3ltYm9sVGFibGU6OkxvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS0+bV9sb2Nr
KTsKKyAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxl
KCktPmZpbmQobG9ja2VyLCBwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKKyAgICAgICAgaWYg
KGl0ZXIgPT0gc3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7Cisg
ICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOworICAgICAgICBpZiAoIWlzVmFsaWQoZW50
cnkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZW50cnku
c2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICAgICAgcmVnID0gJnJlZ2lzdGVyQXQoZW50
cnkuZ2V0SW5kZXgoKSk7CisgICAgfQorICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuY3BwCShyZXZpc2lvbiAxNDkyMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjAsMTAgKzYwLDEzIEBAIGJvb2wgSlNTeW1ib2xUYWJsZU9iamVjdDo6
ZGVsZXRlUHJvcGVydHkKIHZvaWQgSlNTeW1ib2xUYWJsZU9iamVjdDo6Z2V0T3duTm9uSW5kZXhQ
cm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlO
YW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpT
U3ltYm9sVGFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTeW1ib2xUYWJsZU9iamVj
dCo+KG9iamVjdCk7Ci0gICAgU3ltYm9sVGFibGU6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoU3ltYm9sVGFibGU6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+YmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICghKGl0LT52YWx1ZS5nZXRBdHRyaWJ1dGVzKCkgJiBE
b250RW51bSkgfHwgKG1vZGUgPT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykpCi0gICAgICAg
ICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIGl0LT5rZXkuZ2V0KCkpKTsK
KyAgICB7CisgICAgICAgIFN5bWJvbFRhYmxlOjpMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9y
IGVuZCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOworICAgICAgICBm
b3IgKFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ID0gdGhpc09iamVjdC0+c3ltYm9sVGFi
bGUoKS0+YmVnaW4obG9ja2VyKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpZiAo
IShpdC0+dmFsdWUuZ2V0QXR0cmlidXRlcygpICYgRG9udEVudW0pIHx8IChtb2RlID09IEluY2x1
ZGVEb250RW51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRk
KElkZW50aWZpZXIoZXhlYywgaXQtPmtleS5nZXQoKSkpOworICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIEpTT2JqZWN0OjpnZXRPd25Ob25JbmRleFByb3BlcnR5TmFtZXModGhpc09iamVjdCwg
ZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxNDkyMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDggKzczLDkgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVH
ZXQoCiAgICAgU3ltYm9sVGFibGVPYmplY3RUeXBlKiBvYmplY3QsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwotICAgIFN5bWJvbFRhYmxlOjppdGVyYXRv
ciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAg
ICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKKyAgICBTeW1ib2xUYWJsZTo6TG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKGxvY2tlciwgcHJvcGVydHlOYW1lLnB1YmxpY05h
bWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKGxvY2tlcikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRlci0+
dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CkBAIC04Nyw4ICs4OCw5IEBAIGlu
bGluZSBib29sIHN5bWJvbFRhYmxlR2V0KAogICAgIFN5bWJvbFRhYmxlT2JqZWN0VHlwZSogb2Jq
ZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9s
VGFibGUoKTsKLSAgICBTeW1ib2xUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlLmZp
bmQocHJvcGVydHlOYW1lLnB1YmxpY05hbWUoKSk7Ci0gICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFi
bGUuZW5kKCkpCisgICAgU3ltYm9sVGFibGU6OkxvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9s
b2NrKTsKKyAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUu
ZmluZChsb2NrZXIsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgIGlmIChpdGVyID09
IHN5bWJvbFRhYmxlLmVuZChsb2NrZXIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgU3lt
Ym9sVGFibGVFbnRyeTo6RmFzdCBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgIEFTU0VSVCghZW50
cnkuaXNOdWxsKCkpOwpAQCAtMTAzLDggKzEwNSw5IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxl
R2V0KAogICAgIGJvb2wmIHNsb3RJc1dyaXRlYWJsZSkKIHsKICAgICBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwotICAgIFN5bWJvbFRhYmxlOjppdGVy
YXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsK
LSAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKKyAgICBTeW1ib2xUYWJsZTo6TG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZS5maW5kKGxvY2tlciwgcHJvcGVydHlOYW1lLnB1Ymxp
Y05hbWUoKSk7CisgICAgaWYgKGl0ZXIgPT0gc3ltYm9sVGFibGUuZW5kKGxvY2tlcikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBTeW1ib2xUYWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXRl
ci0+dmFsdWU7CiAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7CkBAIC0xMjEsMjEgKzEyNCwy
OSBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0g
SGVhcDo6aGVhcChvYmplY3QpKTsKICAgICAKLSAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUg
PSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwotICAgIFN5bWJvbFRhYmxlOjppdGVyYXRvciBpdGVy
ID0gc3ltYm9sVGFibGUuZmluZChwcm9wZXJ0eU5hbWUucHVibGljTmFtZSgpKTsKLSAgICBpZiAo
aXRlciA9PSBzeW1ib2xUYWJsZS5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGJv
b2wgd2FzRmF0OwotICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFzdEVudHJ5ID0gaXRlci0+
dmFsdWUuZ2V0RmFzdCh3YXNGYXQpOwotICAgIEFTU0VSVCghZmFzdEVudHJ5LmlzTnVsbCgpKTsK
LSAgICBpZiAoZmFzdEVudHJ5LmlzUmVhZE9ubHkoKSkgewotICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCi0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQ
cm9wZXJ0eVdyaXRlRXJyb3IpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBXcml0ZUJhcnJp
ZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgeworICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOworICAgICAgICBTeW1ib2xUYWJsZTo6TG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAgICAgICBTeW1ib2xUYWJsZTo6TWFw
OjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChsb2NrZXIsIHByb3BlcnR5TmFtZS5w
dWJsaWNOYW1lKCkpOworICAgICAgICBpZiAoaXRlciA9PSBzeW1ib2xUYWJsZS5lbmQobG9ja2Vy
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgYm9vbCB3YXNGYXQ7CisgICAg
ICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZmFzdEVudHJ5ID0gaXRlci0+dmFsdWUuZ2V0RmFz
dCh3YXNGYXQpOworICAgICAgICBBU1NFUlQoIWZhc3RFbnRyeS5pc051bGwoKSk7CisgICAgICAg
IGlmIChmYXN0RW50cnkuaXNSZWFkT25seSgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkVGhy
b3cpCisgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRv
bmx5UHJvcGVydHlXcml0ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIGlmIChVTkxJS0VMWSh3YXNGYXQpKQorICAgICAgICAgICAgaXRlci0+dmFs
dWUubm90aWZ5V3JpdGUoKTsKKyAgICAgICAgcmVnID0gJm9iamVjdC0+cmVnaXN0ZXJBdChmYXN0
RW50cnkuZ2V0SW5kZXgoKSk7CiAgICAgfQotICAgIGlmIChVTkxJS0VMWSh3YXNGYXQpKQotICAg
ICAgICBpdGVyLT52YWx1ZS5ub3RpZnlXcml0ZSgpOwotICAgIG9iamVjdC0+cmVnaXN0ZXJBdChm
YXN0RW50cnkuZ2V0SW5kZXgoKSkuc2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICAvLyBJJ2Qg
cHJlZmVyIHdlIG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJzLCBzaW5jZSBJ
IHByZWZlciB0byByZXNlcnZlCisgICAgLy8gdGhlIHJpZ2h0IGZvciBiYXJyaWVycyB0byBiZSBh
YmxlIHRvIHRyaWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9sZCBWTQorICAgIC8vIGxv
Y2tzIHdoaWxlIEdDJ2luZy4KKyAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTE0NSwxNSArMTU2LDIxIEBAIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKQogewogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2
YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKLSAgICAKLSAgICBTeW1ib2xUYWJsZTo6aXRl
cmF0b3IgaXRlciA9IG9iamVjdC0+c3ltYm9sVGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUucHVi
bGljTmFtZSgpKTsKLSAgICBpZiAoaXRlciA9PSBvYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBp
dGVyLT52YWx1ZTsKLSAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICBlbnRyeS5ub3Rp
ZnlXcml0ZSgpOwotICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Ci0gICAgb2Jq
ZWN0LT5yZWdpc3RlckF0KGVudHJ5LmdldEluZGV4KCkpLnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7
CisKKyAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgeworICAgICAgICBT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOworICAgICAg
ICBTeW1ib2xUYWJsZTo6TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOworICAgICAg
ICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUuZmluZChsb2Nr
ZXIsIHByb3BlcnR5TmFtZS5wdWJsaWNOYW1lKCkpOworICAgICAgICBpZiAoaXRlciA9PSBzeW1i
b2xUYWJsZS5lbmQobG9ja2VyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
U3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgQVNTRVJUKCFl
bnRyeS5pc051bGwoKSk7CisgICAgICAgIGVudHJ5Lm5vdGlmeVdyaXRlKCk7CisgICAgICAgIGVu
dHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgICAgIHJlZyA9ICZvYmplY3QtPnJl
Z2lzdGVyQXQoZW50cnkuZ2V0SW5kZXgoKSk7CisgICAgfQorICAgIHJlZy0+c2V0KHZtLCBvYmpl
Y3QsIHZhbHVlKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTQ5MjE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05OCw1ICs5OCw4IEBAIFN5bWJvbFRhYmxlRW50cnk6OkZhdEVudHJ5KiBTeW1ib2xU
YWJsZUUKICAgICByZXR1cm4gZW50cnk7CiB9CiAKK1N5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZSgp
IHsgfQorU3ltYm9sVGFibGU6On5TeW1ib2xUYWJsZSgpIHsgfQorCiB9IC8vIG5hbWVzcGFjZSBK
U0MKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
CShyZXZpc2lvbiAxNDkyMzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDEwMyBAQCBzdHJ1Y3QgU3lt
Ym9sVGFibGVJbmRleEhhc2hUcmFpdHMgOiBIYXNoCiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7CiB9OwogCi10eXBlZGVmIEhhc2hNYXA8UmVmUHRyPFN0cmlu
Z0ltcGw+LCBTeW1ib2xUYWJsZUVudHJ5LCBJZGVudGlmaWVyUmVwSGFzaCwgSGFzaFRyYWl0czxS
ZWZQdHI8U3RyaW5nSW1wbD4gPiwgU3ltYm9sVGFibGVJbmRleEhhc2hUcmFpdHM+IFN5bWJvbFRh
YmxlOworY2xhc3MgU3ltYm9sVGFibGUgeworcHVibGljOgorICAgIHR5cGVkZWYgSGFzaE1hcDxS
ZWZQdHI8U3RyaW5nSW1wbD4sIFN5bWJvbFRhYmxlRW50cnksIElkZW50aWZpZXJSZXBIYXNoLCBI
YXNoVHJhaXRzPFJlZlB0cjxTdHJpbmdJbXBsPiA+LCBTeW1ib2xUYWJsZUluZGV4SGFzaFRyYWl0
cz4gTWFwOworICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7CisgICAgdHlwZWRlZiBCeXRl
U3BpbkxvY2tlciBMb2NrZXI7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTeW1ib2xUYWJsZSgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5TeW1ib2xUYWJsZSgpOworICAgIAorICAgIC8vIFlv
dSBtdXN0IGhvbGQgdGhlIGxvY2sgdW50aWwgYWZ0ZXIgeW91J3JlIGRvbmUgd2l0aCB0aGUgaXRl
cmF0b3IuCisgICAgTWFwOjppdGVyYXRvciBmaW5kKGNvbnN0IExvY2tlciYsIFN0cmluZ0ltcGwq
IGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC5maW5kKGtleSk7CisgICAgfQorICAg
IAorICAgIFN5bWJvbFRhYmxlRW50cnkgZ2V0KGNvbnN0IExvY2tlciYsIFN0cmluZ0ltcGwqIGtl
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC5nZXQoa2V5KTsKKyAgICB9CisgICAgCisg
ICAgU3ltYm9sVGFibGVFbnRyeSBnZXQoU3RyaW5nSW1wbCoga2V5KQorICAgIHsKKyAgICAgICAg
TG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICByZXR1cm4gZ2V0KGxvY2tlciwga2V5KTsK
KyAgICB9CisgICAgCisgICAgU3ltYm9sVGFibGVFbnRyeSBpbmxpbmVHZXQoY29uc3QgTG9ja2Vy
JiwgU3RyaW5nSW1wbCoga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbWFwLmlubGluZUdl
dChrZXkpOworICAgIH0KKyAgICAKKyAgICBTeW1ib2xUYWJsZUVudHJ5IGlubGluZUdldChTdHJp
bmdJbXBsKiBrZXkpCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
ICAgIHJldHVybiBpbmxpbmVHZXQobG9ja2VyLCBrZXkpOworICAgIH0KKyAgICAKKyAgICBNYXA6
Oml0ZXJhdG9yIGJlZ2luKGNvbnN0IExvY2tlciYpCisgICAgeworICAgICAgICByZXR1cm4gbV9t
YXAuYmVnaW4oKTsKKyAgICB9CisgICAgCisgICAgTWFwOjppdGVyYXRvciBlbmQoY29uc3QgTG9j
a2VyJikKKyAgICB7CisgICAgICAgIHJldHVybiBtX21hcC5lbmQoKTsKKyAgICB9CisgICAgCisg
ICAgc2l6ZV90IHNpemUoY29uc3QgTG9ja2VyJikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX21hcC5zaXplKCk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIHNpemUo
bG9ja2VyKTsKKyAgICB9CisgICAgCisgICAgTWFwOjpBZGRSZXN1bHQgYWRkKGNvbnN0IExvY2tl
ciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAuYWRkKGtleSwgZW50cnkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFkZChTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5
KQorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAgICBhZGQobG9j
a2VyLCBrZXksIGVudHJ5KTsKKyAgICB9CisgICAgCisgICAgTWFwOjpBZGRSZXN1bHQgc2V0KGNv
bnN0IExvY2tlciYsIFN0cmluZ0ltcGwqIGtleSwgY29uc3QgU3ltYm9sVGFibGVFbnRyeSYgZW50
cnkpCisgICAgeworICAgICAgICByZXR1cm4gbV9tYXAuc2V0KGtleSwgZW50cnkpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldChTdHJpbmdJbXBsKiBrZXksIGNvbnN0IFN5bWJvbFRhYmxlRW50
cnkmIGVudHJ5KQorICAgIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgICAg
ICBzZXQobG9ja2VyLCBrZXksIGVudHJ5KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWlu
cyhjb25zdCBMb2NrZXImLCBTdHJpbmdJbXBsKiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4g
bV9tYXAuY29udGFpbnMoa2V5KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWlucyhTdHJp
bmdJbXBsKiBrZXkpCisgICAgeworICAgICAgICBMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAg
ICAgIHJldHVybiBjb250YWlucyhsb2NrZXIsIGtleSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICBNYXAgbV9tYXA7CitwdWJsaWM6CisgICAgbXV0YWJsZSBCeXRlU3BpbkxvY2sgbV9sb2Nr
OworfTsKKwogCiBjbGFzcyBTaGFyZWRTeW1ib2xUYWJsZSA6IHB1YmxpYyBKU0NlbGwsIHB1Ymxp
YyBTeW1ib2xUYWJsZSB7CiBwdWJsaWM6Cg==
</data>
<flag name="review"
          id="221400"
          type_id="1"
          status="+"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="221401"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
      

    </bug>

</bugzilla>