<?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>126218</bug_id>
          
          <creation_ts>2013-12-24 11:29:28 -0800</creation_ts>
          <short_desc>DFG PhantomArguments shouldn&apos;t rely on a dead Phi graph</short_desc>
          <delta_ts>2013-12-25 15:42:04 -0800</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>113986</blocked>
    
    <blocked>125531</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>962780</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-24 11:29:28 -0800</bug_when>
    <thetext>Instead, an arguments alias variable should be live and its GetLocal&apos;s should be Phantom&apos;d appropriately.  This has the chance of being a regression in CPS form because we&apos;ll issue stores of empty into the stack, and then maybe even issue loads of that empty value.  But it will buy is a *lot* of sanity.

In particular, this will have a very nice behavior in SSA: PhantomArguments will just have the DFG behavior of JSValue() and the bytecode (OSR exit) behavior of rematerializing the arguments object.  The captured arguments variables will force the store of JSValue() while the uncaptured (i.e. aliased) ones will just cease to exist other than a MovHint of PhantomArguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962782</commentid>
    <comment_count>1</comment_count>
      <attachid>219975</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-24 11:59:36 -0800</bug_when>
    <thetext>Created attachment 219975
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962809</commentid>
    <comment_count>2</comment_count>
      <attachid>219982</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-24 13:35:48 -0800</bug_when>
    <thetext>Created attachment 219982
it runs things?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962833</commentid>
    <comment_count>3</comment_count>
      <attachid>219991</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 10:08:22 -0800</bug_when>
    <thetext>Created attachment 219991
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962854</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 11:05:38 -0800</bug_when>
    <thetext>This is totally neutral across the board.

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/OpenSource/WebKitBuild/Release/jsc (r161065)
&quot;FixPhantomArgs&quot; at /Volumes/Data/fromMiniMe/primary/OpenSource/WebKitBuild/Release/jsc (r161065)

Collected 10 samples per benchmark/VM, with 10 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               FixPhantomArgs                                  
SunSpider:
   3d-cube                                            7.7660+-0.0691     ?      7.7838+-0.0661        ?
   3d-morph                                           8.8207+-0.1042     ?      8.8695+-0.0699        ?
   3d-raytrace                                        9.0671+-0.1418            8.9412+-0.0867          might be 1.0141x faster
   access-binary-trees                                2.1233+-0.0197     ?      2.1344+-0.0424        ?
   access-fannkuch                                    7.9803+-0.0344            7.9760+-0.1021        
   access-nbody                                       4.2582+-0.0172            4.2572+-0.0088        
   access-nsieve                                      5.0351+-0.0403            4.9848+-0.0706          might be 1.0101x faster
   bitops-3bit-bits-in-byte                           1.8861+-0.0039     ?      1.9271+-0.0867        ? might be 1.0217x slower
   bitops-bits-in-byte                                7.2395+-0.1139            7.2134+-0.0933        
   bitops-bitwise-and                                 3.0821+-0.0426            3.0702+-0.0247        
   bitops-nsieve-bits                                 4.6427+-0.0493     ?      4.6661+-0.0206        ?
   controlflow-recursive                              3.1859+-0.0214            3.1768+-0.0182        
   crypto-aes                                         5.5292+-0.0124     !      5.5588+-0.0154        ! definitely 1.0054x slower
   crypto-md5                                         3.3553+-0.0296     ?      3.4162+-0.0797        ? might be 1.0181x slower
   crypto-sha1                                        3.0173+-0.0256            3.0085+-0.0078        
   date-format-tofte                                 11.8118+-0.1351     ?     12.0171+-0.1753        ? might be 1.0174x slower
   date-format-xparb                                  8.7946+-0.1633            8.6891+-0.1969          might be 1.0121x faster
   math-cordic                                        4.2776+-0.0302     ?      4.3744+-0.1757        ? might be 1.0226x slower
   math-partial-sums                                 10.1587+-0.0923     ?     10.2147+-0.1340        ?
   math-spectral-norm                                 2.7611+-0.0058     ?      2.7638+-0.0096        ?
   regexp-dna                                        12.9010+-0.1444     ?     12.9973+-0.1695        ?
   string-base64                                      5.7963+-0.0774            5.7777+-0.0587        
   string-fasta                                      10.5380+-0.1503           10.4526+-0.0829        
   string-tagcloud                                   15.5291+-0.1240     ?     15.5445+-0.1459        ?
   string-unpack-code                                31.0410+-0.1385     !     31.4369+-0.2355        ! definitely 1.0128x slower
   string-validate-input                              7.1424+-0.0366            7.0915+-0.1013        

   &lt;arithmetic&gt; *                                     7.6054+-0.0158     ?      7.6286+-0.0200        ? might be 1.0031x slower
   &lt;geometric&gt;                                        6.1028+-0.0108     ?      6.1164+-0.0149        ? might be 1.0022x slower
   &lt;harmonic&gt;                                         5.0100+-0.0110     ?      5.0266+-0.0199        ? might be 1.0033x slower

                                                        TipOfTree               FixPhantomArgs                                  
LongSpider:
   3d-cube                                         2686.5415+-5.1094         2685.7136+-6.1509        
   3d-morph                                        1508.8911+-16.3972        1501.2542+-1.8344        
   3d-raytrace                                     1518.2069+-12.9074    ?   1528.8047+-19.0566       ?
   access-binary-trees                             2443.9535+-13.2852        2441.1893+-10.5797       
   access-fannkuch                                  665.0165+-0.2839     ?    665.1871+-0.2476        ?
   access-nbody                                    1495.8355+-0.7271     ?   1496.8125+-2.8619        ?
   access-nsieve                                   1549.7407+-2.2498     ?   1550.4580+-3.4986        ?
   bitops-3bit-bits-in-byte                         126.0413+-0.1899          126.0210+-0.1186        
   bitops-bits-in-byte                              602.9749+-3.2729     ?    603.1399+-5.8048        ?
   bitops-nsieve-bits                              1050.1224+-1.0445         1049.8860+-1.0774        
   controlflow-recursive                           1472.5108+-0.4504     ?   1472.6738+-0.5504        ?
   crypto-aes                                      1664.8427+-5.5731         1660.3140+-3.9072        
   crypto-md5                                      1166.4220+-1.3871     ?   1166.7859+-1.9302        ?
   crypto-sha1                                     1606.8366+-4.1508         1605.8088+-4.9035        
   date-format-tofte                               1212.1227+-10.6261    ?   1221.3336+-7.0744        ?
   date-format-xparb                               1498.2135+-34.3698        1462.7239+-28.7013         might be 1.0243x faster
   math-cordic                                     1757.1904+-42.7892        1745.2505+-20.9316       
   math-partial-sums                               1308.2149+-2.1197     ?   1315.0856+-15.5850       ?
   math-spectral-norm                              1826.0040+-0.4815     ?   1826.1485+-0.7315        ?
   string-base64                                    589.8986+-2.4776          588.8341+-1.9824        
   string-fasta                                     993.0805+-3.4496     ?   1037.2658+-60.9962       ? might be 1.0445x slower
   string-tagcloud                                  391.6693+-2.1728          391.3601+-2.5639        

   &lt;arithmetic&gt;                                    1324.2877+-3.3222     ?   1324.6387+-3.3380        ? might be 1.0003x slower
   &lt;geometric&gt; *                                   1130.4850+-2.3655     ?   1131.4909+-3.2274        ? might be 1.0009x slower
   &lt;harmonic&gt;                                       819.2104+-1.0098     ?    819.8980+-1.7508        ? might be 1.0008x slower

                                                        TipOfTree               FixPhantomArgs                                  
V8Spider:
   crypto                                            79.3720+-0.2899     ?     79.4300+-0.2510        ?
   deltablue                                         98.5750+-0.6521           98.3793+-0.7620        
   earley-boyer                                      72.8843+-0.2721           72.8012+-0.2302        
   raytrace                                          44.2966+-0.1291           44.1868+-0.1412        
   regexp                                           101.9486+-1.5430          100.7952+-1.1217          might be 1.0114x faster
   richards                                         134.8117+-1.3526          133.5168+-1.3606        
   splay                                             46.3564+-0.5050           46.1523+-0.5123        

   &lt;arithmetic&gt;                                      82.6064+-0.3660           82.1803+-0.3042          might be 1.0052x faster
   &lt;geometric&gt; *                                     77.0269+-0.2971           76.6943+-0.2024          might be 1.0043x faster
   &lt;harmonic&gt;                                        71.5405+-0.2665           71.2766+-0.1713          might be 1.0037x faster

                                                        TipOfTree               FixPhantomArgs                                  
Octane and V8v7:
   encrypt                                           0.46558+-0.00032    ?     0.46568+-0.00031       ?
   decrypt                                           8.57466+-0.00613    ?     8.57863+-0.01781       ?
   deltablue                                x2       0.56331+-0.00332          0.56283+-0.00437       
   earley                                            0.91832+-0.00527    ^     0.90241+-0.00671       ^ definitely 1.0176x faster
   boyer                                            12.46841+-0.03875    ?    12.48986+-0.03335       ?
   raytrace                                 x2       4.25960+-0.02449    ?     4.32454+-0.04345       ? might be 1.0152x slower
   regexp                                   x2      32.90411+-0.14865    ?    33.08541+-0.75540       ?
   richards                                 x2       0.43727+-0.00726          0.43210+-0.01051         might be 1.0120x faster
   splay                                    x2       0.64170+-0.01011          0.63893+-0.00326       
   navier-stokes                            x2      10.70012+-0.00589         10.69908+-0.00321       
   closure                                           0.43360+-0.00284    ?     0.43434+-0.00067       ?
   jquery                                            6.35046+-0.00677    ?     6.36374+-0.01021       ?
   gbemu                                    x2      72.12393+-0.99714         71.41640+-0.93899       
   mandreel                                 x2     136.45621+-1.05608        136.32163+-0.55205       
   pdfjs                                    x2     102.12223+-0.22647    ?   102.35857+-0.33215       ?
   box2d                                    x2      34.75326+-0.12016    ?    34.99268+-0.48170       ?

V8v7:
   &lt;arithmetic&gt;                                      7.58995+-0.01946    ?     7.62015+-0.09336       ? might be 1.0040x slower
   &lt;geometric&gt; *                                     2.51525+-0.00833          2.51379+-0.01110         might be 1.0006x faster
   &lt;harmonic&gt;                                        1.03932+-0.00660          1.03371+-0.00796         might be 1.0054x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.50517+-0.14197         31.49612+-0.10176         might be 1.0003x faster
   &lt;geometric&gt; *                                     6.97699+-0.02263          6.97454+-0.01929         might be 1.0004x faster
   &lt;harmonic&gt;                                        1.44621+-0.00873          1.43986+-0.00952         might be 1.0044x faster

                                                        TipOfTree               FixPhantomArgs                                  
Kraken:
   ai-astar                                          493.958+-0.438      ?     494.348+-0.870         ?
   audio-beat-detection                              227.340+-2.486            224.686+-1.093           might be 1.0118x faster
   audio-dft                                         290.656+-1.503      ?     294.442+-6.316         ? might be 1.0130x slower
   audio-fft                                         130.827+-0.181      ?     130.876+-0.138         ?
   audio-oscillator                                  244.456+-0.348            244.130+-0.452         
   imaging-darkroom                                  287.799+-3.597            286.061+-0.944         
   imaging-desaturate                                158.484+-0.098      ?     159.203+-1.769         ?
   imaging-gaussian-blur                             362.897+-0.184            362.623+-0.152         
   json-parse-financial                               81.285+-0.306             81.248+-1.429         
   json-stringify-tinderbox                          103.853+-0.278      ?     103.949+-0.311         ?
   stanford-crypto-aes                                91.292+-0.724      ?      91.332+-0.961         ?
   stanford-crypto-ccm                               100.999+-2.226      ?     101.624+-0.910         ?
   stanford-crypto-pbkdf2                            257.469+-2.474      ?     258.836+-1.080         ?
   stanford-crypto-sha256-iterative                  113.941+-0.462      ?     114.840+-0.442         ?

   &lt;arithmetic&gt; *                                    210.376+-0.520      ?     210.586+-0.486         ? might be 1.0010x slower
   &lt;geometric&gt;                                       180.651+-0.457      ?     180.894+-0.406         ? might be 1.0013x slower
   &lt;harmonic&gt;                                        156.256+-0.407      ?     156.524+-0.462         ? might be 1.0017x slower

                                                        TipOfTree               FixPhantomArgs                                  
JSRegress:
   adapt-to-double-divide                            22.6768+-0.1155     ?     22.7438+-0.1208        ?
   aliased-arguments-getbyval                         0.9930+-0.0061     ?      0.9956+-0.0025        ?
   allocate-big-object                                3.0409+-0.0149     ?      3.0434+-0.0193        ?
   arity-mismatch-inlining                            0.9804+-0.0202            0.9668+-0.0069          might be 1.0140x faster
   array-access-polymorphic-structure                10.6953+-0.4952           10.4102+-0.4084          might be 1.0274x faster
   array-nonarray-polymorhpic-access                 58.1879+-0.2413           58.1229+-0.1850        
   array-with-double-add                              5.7944+-0.0181            5.7446+-0.0687        
   array-with-double-increment                        4.3274+-0.0349     ?      4.3528+-0.0160        ?
   array-with-double-mul-add                          6.8087+-0.0850     ?      6.8837+-0.0336        ? might be 1.0110x slower
   array-with-double-sum                              8.0501+-0.0772     ?      8.0743+-0.0548        ?
   array-with-int32-add-sub                          10.4124+-0.1171     ?     10.5226+-0.1007        ? might be 1.0106x slower
   array-with-int32-or-double-sum                     8.0081+-0.0184     ?      8.0357+-0.0487        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    118.7195+-0.8988     ?    119.3650+-1.0950        ?
   ArrayBuffer-DataView-alloc-long-lived             30.7013+-0.1663     ?     31.1260+-0.2666        ? might be 1.0138x slower
   ArrayBuffer-Int32Array-byteOffset                  6.0497+-0.0789            6.0088+-0.0969        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    215.4851+-1.7898          214.2148+-1.9703        
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.9588+-1.4260     ?    167.5831+-1.0247        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    119.1621+-1.3380     ?    119.3522+-1.3893        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     50.5233+-0.2475     ^     49.3379+-0.3472        ^ definitely 1.0240x faster
   ArrayBuffer-Int8Array-alloc-long-lived            30.4709+-0.1118     ?     31.1389+-0.6237        ? might be 1.0219x slower
   ArrayBuffer-Int8Array-alloc                       26.6814+-0.0919     ^     26.4946+-0.0934        ^ definitely 1.0070x faster
   asmjs_bool_bug                                     9.3067+-0.1117            9.2878+-0.0544        
   basic-set                                         20.0017+-0.1659           19.8301+-0.0798        
   big-int-mul                                        5.5126+-0.0633            5.4870+-0.0738        
   boolean-test                                       4.4484+-0.0194            4.4476+-0.0432        
   branch-fold                                        5.0073+-0.0240            5.0057+-0.0120        
   by-val-generic                                    12.7966+-0.1922           12.6076+-0.0921          might be 1.0150x faster
   captured-assignments                               0.6477+-0.0189     ?      0.6513+-0.0185        ?
   cast-int-to-double                                12.6280+-0.1562     ?     12.6349+-0.1399        ?
   cell-argument                                     16.1888+-0.4040           16.1845+-0.3401        
   cfg-simplify                                       3.9978+-0.0154     ?      4.0095+-0.0443        ?
   chain-custom-getter                              162.8769+-7.7251     ?    165.1910+-8.6207        ? might be 1.0142x slower
   chain-getter-access                              496.4887+-4.4623     ?    500.0294+-4.4702        ?
   cmpeq-obj-to-obj-other                            12.9900+-0.5681           12.5843+-0.3278          might be 1.0322x faster
   constant-test                                      8.9836+-0.0754            8.9121+-0.0819        
   DataView-custom-properties                       125.1733+-0.8466     ?    125.8328+-0.7798        ?
   delay-tear-off-arguments-strictmode                3.6667+-0.0575            3.6482+-0.0223        
   destructuring-arguments-length                   175.3200+-0.6886     ?    177.0569+-1.3527        ?
   destructuring-arguments                            8.8796+-0.0470     ?      8.9049+-0.0861        ?
   destructuring-swap                                 8.6296+-0.0463     ?      8.6966+-0.1355        ?
   direct-arguments-getbyval                          0.8716+-0.0048     ?      0.8723+-0.0052        ?
   double-get-by-val-out-of-bounds                    7.4148+-0.0466     ?      7.4196+-0.0655        ?
   double-pollution-getbyval                         11.0170+-0.0927     ?     11.1719+-0.0850        ? might be 1.0141x slower
   double-pollution-putbyoffset                       6.0687+-0.0266     ?      6.1067+-0.0263        ?
   double-to-int32-typed-array-no-inline              2.5832+-0.0063     ?      2.5949+-0.0136        ?
   double-to-int32-typed-array                        2.2185+-0.0141     ?      2.2202+-0.0118        ?
   double-to-uint32-typed-array-no-inline             2.7575+-0.0272     ?      2.7691+-0.0202        ?
   double-to-uint32-typed-array                       2.4375+-0.0080     ?      2.4499+-0.0192        ?
   empty-string-plus-int                             10.8779+-0.0505     !     11.0598+-0.0820        ! definitely 1.0167x slower
   emscripten-cube2hash                              55.1639+-0.2063     ?     55.5609+-0.3169        ?
   emscripten-memops                               7067.7158+-40.1270        7054.3774+-1.6713        
   external-arguments-getbyval                        2.1584+-0.0293     ?      2.1614+-0.0667        ?
   external-arguments-putbyval                        3.1195+-0.0148     ^      3.0388+-0.0155        ^ definitely 1.0266x faster
   fixed-typed-array-storage-var-index                1.4068+-0.0048     ?      1.4194+-0.0303        ?
   fixed-typed-array-storage                          0.9937+-0.0027     ?      0.9950+-0.0039        ?
   Float32Array-matrix-mult                           6.6158+-0.0746            6.6064+-0.0372        
   Float32Array-to-Float64Array-set                  92.8417+-0.5009     ?     92.8499+-0.7066        ?
   Float64Array-alloc-long-lived                    103.8309+-0.7400          103.5335+-0.4317        
   Float64Array-to-Int16Array-set                   117.0383+-1.0706          116.9439+-0.9990        
   fold-double-to-int                                20.5108+-0.1719     ?     20.7280+-0.1323        ? might be 1.0106x slower
   for-of-iterate-array-entries                       8.5553+-0.0745            8.5119+-0.0720        
   for-of-iterate-array-keys                          3.5052+-0.0378            3.4844+-0.0211        
   for-of-iterate-array-values                        2.9680+-0.0553     ?      2.9943+-0.0426        ?
   function-dot-apply                                 3.1853+-0.0141            3.1780+-0.0064        
   function-test                                      4.9390+-0.0591            4.9139+-0.0500        
   get-by-id-chain-from-try-block                     8.0311+-0.1162            8.0060+-0.1155        
   get-by-id-proto-or-self                           25.9219+-0.2450     ?     25.9595+-0.2880        ?
   get-by-id-self-or-proto                           23.4556+-0.5990     ?     23.9984+-0.6704        ? might be 1.0231x slower
   get-by-val-out-of-bounds                           7.2438+-0.0433            7.2275+-0.0456        
   get_callee_monomorphic                             5.1157+-0.1093     ^      4.9187+-0.0256        ^ definitely 1.0401x faster
   get_callee_polymorphic                             4.6983+-0.0236            4.6923+-0.0329        
   global-var-const-infer-fire-from-opt               1.0288+-0.0477     ?      1.0492+-0.0519        ? might be 1.0199x slower
   global-var-const-infer                             0.8359+-0.0402            0.8113+-0.0050          might be 1.0303x faster
   HashMap-put-get-iterate-keys                      42.0051+-0.1479     ?     42.1521+-0.1572        ?
   HashMap-put-get-iterate                           53.6649+-0.1846     ?     53.7829+-0.1953        ?
   HashMap-string-put-get-iterate                    50.9827+-0.3607     ?     51.6007+-0.5001        ? might be 1.0121x slower
   imul-double-only                                  17.8529+-0.1215     ?     18.2045+-0.9517        ? might be 1.0197x slower
   imul-int-only                                     15.0211+-0.0879           14.9696+-0.1210        
   imul-mixed                                        21.8166+-0.1315     ?     21.8642+-0.1843        ?
   in-four-cases                                     26.0067+-0.2498           25.9394+-0.1608        
   in-one-case-false                                 12.1194+-0.0948           12.0979+-0.0931        
   in-one-case-true                                  12.1290+-0.1634     ?     12.1457+-0.0757        ?
   in-two-cases                                      12.9115+-0.1157     ?     12.9285+-0.1036        ?
   indexed-properties-in-objects                      4.2238+-0.0056     ?      4.2328+-0.0232        ?
   infer-closure-const-then-mov-no-inline            15.3684+-0.0197     ?     15.3769+-0.0934        ?
   infer-closure-const-then-mov                      28.8427+-0.0864     ?     28.9592+-0.1262        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.8543+-0.1476           17.8237+-0.0921        
   infer-closure-const-then-put-to-scope             36.0917+-0.2513           35.9254+-0.1966        
   infer-closure-const-then-reenter-no-inline   
                                                     84.9865+-1.0257           84.3299+-0.1584        
   infer-closure-const-then-reenter                  36.1547+-0.2098     ?     36.2429+-0.2689        ?
   infer-one-time-closure-ten-vars                   29.0678+-0.1476           29.0211+-0.0148        
   infer-one-time-closure-two-vars                   28.8592+-0.1292           28.7132+-0.1253        
   infer-one-time-closure                            28.7211+-0.1216     ?     28.8351+-0.0773        ?
   infer-one-time-deep-closure                       58.6426+-0.1556           58.4432+-0.3502        
   inline-arguments-access                            1.6627+-0.0062     ?      1.6627+-0.0049        ?
   inline-arguments-local-escape                     22.9335+-0.1401     !     23.5250+-0.3041        ! definitely 1.0258x slower
   inline-get-scoped-var                              7.4548+-0.0825     ?      7.5004+-0.0814        ?
   inlined-put-by-id-transition                      15.4018+-0.2310     ?     15.4232+-0.2780        ?
   int-or-other-abs-then-get-by-val                   9.5015+-0.0227     ?      9.5634+-0.1117        ?
   int-or-other-abs-zero-then-get-by-val             37.3483+-0.2020     ?     38.0497+-0.5108        ? might be 1.0188x slower
   int-or-other-add-then-get-by-val                  10.6094+-0.0832           10.5916+-0.0569        
   int-or-other-add                                  10.9514+-0.1343     ?     11.0938+-0.0842        ? might be 1.0130x slower
   int-or-other-div-then-get-by-val                   6.3768+-0.0851     ?      6.3881+-0.0690        ?
   int-or-other-max-then-get-by-val                   8.7601+-0.1788            8.7435+-0.1414        
   int-or-other-min-then-get-by-val                   7.1698+-0.0827            7.0803+-0.0692          might be 1.0126x faster
   int-or-other-mod-then-get-by-val                   6.2127+-0.0864     ?      6.2746+-0.0136        ?
   int-or-other-mul-then-get-by-val                   6.6573+-0.0373            6.6326+-0.0786        
   int-or-other-neg-then-get-by-val                   7.9915+-0.0392            7.9713+-0.0722        
   int-or-other-neg-zero-then-get-by-val             36.9260+-0.1437     !     37.8607+-0.7512        ! definitely 1.0253x slower
   int-or-other-sub-then-get-by-val                  10.6305+-0.0398     ?     10.6693+-0.2003        ?
   int-or-other-sub                                   8.9623+-0.0544     ?      8.9938+-0.0390        ?
   int-overflow-local                                 6.4748+-0.0641            6.4732+-0.0773        
   Int16Array-alloc-long-lived                       67.5492+-0.4540     ?     67.7361+-0.6211        ?
   Int16Array-bubble-sort-with-byteLength            48.8819+-0.1475     ?     48.9307+-0.1462        ?
   Int16Array-bubble-sort                            47.8947+-0.0645     ?     47.9234+-0.0936        ?
   Int16Array-load-int-mul                            1.8128+-0.0045     ?      1.8195+-0.0175        ?
   Int16Array-to-Int32Array-set                      91.7280+-0.7889     ^     87.9221+-1.4166        ^ definitely 1.0433x faster
   Int32Array-alloc-huge-long-lived                 704.0833+-3.3333     ?    713.4588+-21.0510       ? might be 1.0133x slower
   Int32Array-alloc-huge                            811.9427+-7.7416          803.6376+-8.0320          might be 1.0103x faster
   Int32Array-alloc-large-long-lived                979.7629+-6.0312          975.5928+-8.2754        
   Int32Array-alloc-large                            45.2171+-0.8324           44.7919+-0.5213        
   Int32Array-alloc-long-lived                       80.7442+-0.4340     ?     80.8231+-0.7974        ?
   Int32Array-alloc                                   4.5234+-0.0119            4.5218+-0.0121        
   Int32Array-Int8Array-view-alloc                   15.4690+-0.3497           15.0958+-0.0495          might be 1.0247x faster
   int52-spill                                       12.7851+-0.1900     ?     12.9037+-0.1719        ?
   Int8Array-alloc-long-lived                        67.1097+-0.8682     ?     67.3375+-0.6994        ?
   Int8Array-load-with-byteLength                     5.0181+-0.0709     ?      5.0362+-0.0589        ?
   Int8Array-load                                     5.0444+-0.0668            5.0434+-0.0508        
   integer-divide                                    15.0970+-0.1186     ?     15.1750+-0.1453        ?
   integer-modulo                                     2.0859+-0.0190            2.0845+-0.0168        
   large-int-captured                                 9.7548+-0.1338            9.6921+-0.1089        
   large-int-neg                                     26.1759+-0.1713           26.1356+-0.1965        
   large-int                                         23.1457+-0.1848     ?     23.2052+-0.1715        ?
   logical-not                                       10.7148+-0.1338           10.6830+-0.1673        
   lots-of-fields                                    12.5156+-0.0956     ?     12.6589+-0.1211        ? might be 1.0114x slower
   make-indexed-storage                               4.3806+-0.0420     ?      4.3949+-0.0447        ?
   make-rope-cse                                      6.1124+-0.0799     ?      6.1400+-0.0649        ?
   marsaglia-larger-ints                            111.9167+-0.1709     ?    112.1023+-0.4333        ?
   marsaglia-osr-entry                               47.3563+-0.6066           46.9920+-0.1007        
   marsaglia                                        463.6394+-0.2430     ?    463.8329+-0.2006        ?
   method-on-number                                  29.8796+-0.4828     ?     29.8994+-0.4636        ?
   negative-zero-divide                               0.4226+-0.0021     ?      0.4252+-0.0036        ?
   negative-zero-modulo                               0.4097+-0.0046            0.4080+-0.0043        
   negative-zero-negate                               0.3998+-0.0205     ?      0.4133+-0.0263        ? might be 1.0338x slower
   nested-function-parsing-random                   380.6835+-0.2899     !    383.8564+-0.3589        ! definitely 1.0083x slower
   nested-function-parsing                           47.6788+-0.1183     ?     47.9179+-0.7056        ?
   new-array-buffer-dead                              3.7972+-0.0690            3.7572+-0.0181          might be 1.0106x faster
   new-array-buffer-push                             10.6629+-0.1391           10.6372+-0.1400        
   new-array-dead                                    28.5759+-0.3339     ?     28.6951+-0.3840        ?
   new-array-push                                     6.9562+-0.0577            6.9145+-0.0677        
   number-test                                        4.4043+-0.0174            4.3604+-0.0371          might be 1.0101x faster
   object-closure-call                               13.4375+-0.0532     ?     13.4398+-0.1073        ?
   object-test                                        4.7080+-0.0508     ?      4.7455+-0.0221        ?
   poly-stricteq                                     86.9410+-0.2549     ?     87.2935+-0.3967        ?
   polymorphic-structure                             20.5172+-0.1707     ?     21.1347+-0.9791        ? might be 1.0301x slower
   polyvariant-monomorphic-get-by-id                 11.9836+-0.1123     ?     12.0062+-0.1128        ?
   proto-custom-getter                              157.8107+-0.1160     ?    165.9059+-9.5398        ? might be 1.0513x slower
   proto-getter-access                              495.4808+-4.2091          494.9871+-4.8678        
   put-by-id                                         19.5005+-0.2528     ?     19.5198+-0.4916        ?
   put-by-val-large-index-blank-indexing-type   
                                                     21.0815+-0.4162     ?     21.5422+-0.3512        ? might be 1.0219x slower
   put-by-val-machine-int                             3.3680+-0.0202            3.3527+-0.0193        
   rare-osr-exit-on-local                            20.3211+-0.1272           20.2094+-0.1210        
   register-pressure-from-osr                        31.3528+-0.0993     ?     31.3828+-0.1441        ?
   simple-activation-demo                            35.2815+-0.1351     ?     35.3056+-0.1605        ?
   simple-custom-getter                             511.2143+-19.2674    ?    520.6592+-26.5717       ? might be 1.0185x slower
   simple-getter-access                             792.6900+-8.7511          786.8490+-6.0237        
   slow-array-profile-convergence                     4.0471+-0.0669     ?      4.1446+-0.0513        ? might be 1.0241x slower
   slow-convergence                                   4.4767+-0.0331     ?      4.4969+-0.0264        ?
   sparse-conditional                                 1.5068+-0.0413            1.4661+-0.0062          might be 1.0277x faster
   splice-to-remove                                  76.8165+-0.1263     ?     77.1012+-0.3557        ?
   stepanov_container                             10162.6873+-23.7691    ?  10180.1092+-19.0365       ?
   string-concat-object                               3.2364+-0.0287     ?      3.2374+-0.0261        ?
   string-concat-pair-object                          3.1706+-0.0299            3.1432+-0.0058        
   string-concat-pair-simple                         17.1866+-0.2869           17.0189+-0.3047        
   string-concat-simple                              17.2149+-0.2384     ?     17.2365+-0.3658        ?
   string-cons-repeat                                10.8412+-0.0394     ?     10.8530+-0.0321        ?
   string-cons-tower                                 11.3246+-0.0441           11.3228+-0.0632        
   string-equality                                   42.9110+-0.5420           42.6292+-0.1542        
   string-get-by-val-big-char                        12.6412+-0.0632     !     13.0174+-0.0557        ! definitely 1.0298x slower
   string-get-by-val-out-of-bounds-insane             5.8866+-0.0794            5.8453+-0.1574        
   string-get-by-val-out-of-bounds                    5.3389+-0.0110            5.3230+-0.0469        
   string-get-by-val                                  4.9054+-0.0367     ?      4.9126+-0.0778        ?
   string-hash                                        2.7725+-0.0019     ?      2.7839+-0.0147        ?
   string-long-ident-equality                        39.0961+-0.0927     ?     39.3818+-0.4762        ?
   string-repeat-arith                               50.1326+-0.3910     ?     50.5417+-0.6259        ?
   string-sub                                       105.3628+-0.6999          104.3914+-0.3518        
   string-test                                        4.3988+-0.0498            4.3961+-0.0332        
   string-var-equality                               70.1587+-0.1299     ?     70.4944+-0.8586        ?
   structure-hoist-over-transitions                   3.5343+-0.0211            3.5116+-0.0070        
   switch-char-constant                               3.5568+-0.0728            3.5040+-0.0172          might be 1.0150x faster
   switch-char                                        8.1912+-0.0355            8.1130+-0.1173        
   switch-constant                                    9.3946+-0.1392     ?      9.4016+-0.1343        ?
   switch-string-basic-big-var                       20.3680+-0.1033     ?     20.5570+-0.2663        ?
   switch-string-basic-big                           22.8355+-1.5174           21.8446+-1.0064          might be 1.0454x faster
   switch-string-basic-var                           20.3248+-0.0848           20.2953+-0.0998        
   switch-string-basic                               21.6143+-0.9773     ?     21.6177+-0.8661        ?
   switch-string-big-length-tower-var                29.0566+-0.1346     ?     29.1474+-0.2786        ?
   switch-string-length-tower-var                    21.9909+-0.1915           21.9248+-0.1063        
   switch-string-length-tower                        16.6782+-0.1987           16.5977+-0.0899        
   switch-string-short                               16.5967+-0.0494           16.5600+-0.1175        
   switch                                            13.6311+-0.1261     ?     13.6468+-0.1266        ?
   tear-off-arguments-simple                          2.3520+-0.0028     ?      2.4196+-0.0970        ? might be 1.0287x slower
   tear-off-arguments                                 3.6708+-0.0343            3.6443+-0.0100        
   temporal-structure                                17.1976+-0.0891     ?     17.2486+-0.0994        ?
   to-int32-boolean                                  21.5353+-0.1189     ?     21.5759+-0.1651        ?
   undefined-test                                     4.5906+-0.0425            4.5744+-0.0497        
   weird-inlining-const-prop                          2.3747+-0.0109     ?      2.4052+-0.0478        ? might be 1.0128x slower

   &lt;arithmetic&gt;                                     134.5332+-0.2184     ?    134.6471+-0.2635        ? might be 1.0008x slower
   &lt;geometric&gt; *                                     14.9033+-0.0156     ?     14.9154+-0.0177        ? might be 1.0008x slower
   &lt;harmonic&gt;                                         5.3338+-0.0188     ?      5.3420+-0.0259        ? might be 1.0015x slower

                                                        TipOfTree               FixPhantomArgs                                  
All benchmarks:
   &lt;arithmetic&gt;                                     203.7188+-0.2000     ?    203.8235+-0.3410        ? might be 1.0005x slower
   &lt;geometric&gt;                                       20.6652+-0.0152     ?     20.6806+-0.0194        ? might be 1.0007x slower
   &lt;harmonic&gt;                                         4.8559+-0.0154            4.8557+-0.0176          might be 1.0000x faster

                                                        TipOfTree               FixPhantomArgs                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.3734+-0.0462     ?     49.3823+-0.0520        ? might be 1.0002x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962865</commentid>
    <comment_count>5</comment_count>
      <attachid>219991</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-12-25 13:05:10 -0800</bug_when>
    <thetext>Comment on attachment 219991
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:8
&gt; +        This change dramatically rationalizes our handling of PhantomArguments (i.e.

&quot;dramatically rationalizes&quot; is an amazing phrase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>962886</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-25 15:42:04 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/161072</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219975</attachid>
            <date>2013-12-24 11:59:36 -0800</date>
            <delta_ts>2013-12-24 13:35:48 -0800</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>4683</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDIwLDIyICs0MjAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKLSAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgIW1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52
YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fY3JlYXRlc0FyZ3Vt
ZW50cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIC8vIFR1cm4gUGhhbnRvbUxvY2FscyBpbnRvIGp1c3QgR2V0TG9jYWxzLiBUaGlz
IHdpbGwgcHJlc2VydmUgdGhlIHRocmVhZGluZwotICAgICAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgbG9jYWwgdGhyb3VnaCB0byB0aGlzIHBvaW50LCBidXQgd2lsbCBhbGxvdyBpdCB0byBkaWUs
IGNhdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBPU1IgdG8ga25vdyBhYm91dCBp
dC4KLQotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRM
b2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQog
ICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC00NDgsMjEgKzQzMiw2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjYXNlIFBoYW50b206IHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gSXQncyBoaWdobHkgbGlrZWx5IHRoYXQgd2Ugd2lsbCBoYXZlIGEgUGhhbnRv
bSByZWZlcmVuY2luZyBlaXRoZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlQXJndW1l
bnRzLCBvciBhIGxvY2FsIG9wIGZvciB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLCBvciBhCi0gICAg
ICAgICAgICAgICAgICAgIC8vIGxvY2FsIG9wIGZvciBhbiBhcmd1bWVudHMtYWxpYXNlZCB2YXJp
YWJsZS4gSW4gYW55IG9mIHRob3NlIGNhc2VzLAotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBz
aG91bGQgcmVtb3ZlIHRoZSBwaGFudG9tIHJlZmVyZW5jZSwgc2luY2U6Ci0gICAgICAgICAgICAg
ICAgICAgIC8vIDEpIFBoYW50b21zIG9ubHkgZXhpc3QgdG8gYWlkIE9TUiBleGl0LiBCdXQgYXJn
dW1lbnRzIHNpbXBsaWZpY2F0aW9uCi0gICAgICAgICAgICAgICAgICAgIC8vICAgIGhhcyBpdHMg
b3duIE9TUiBleGl0IHN0b3J5LCB3aGljaCBpcyB0byBpbmZvcm0gT1NSIGV4aXQgdG8gcmVpZnkK
LSAgICAgICAgICAgICAgICAgICAgLy8gICAgdGhlIGFyZ3VtZW50cyBhcyBuZWNlc3NhcnkuCi0g
ICAgICAgICAgICAgICAgICAgIC8vIDIpIFRoZSBQaGFudG9tIG1heSBrZWVwIHRoZSBDcmVhdGVB
cmd1bWVudHMgbm9kZSBhbGl2ZSwgd2hpY2ggaXMKLSAgICAgICAgICAgICAgICAgICAgLy8gICAg
cHJlY2lzZWx5IHdoYXQgd2UgZG9uJ3Qgd2FudC4KLSAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IEFkamFjZW5jeUxpc3Q6OlNpemU7ICsraSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJlbW92ZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKG5vZGUs
IGkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAg
ICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKQEAgLTQ3MCw3ICs0MzksNiBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMShFZGdlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDg4LDggKzQ1Niwx
MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hp
bGQxKCkgPSBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGRyZW4uY2hpbGQyKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMigpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDIoKSA9IEVkZ2UoKTsKICAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsK
ICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IC0taW5kZXhJbkJsb2NrOyAvLyBGb3JjZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub3cg
dGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVudEJ5VmFsLgpAQCAtNTAzLDcgKzQ3NSwxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBF
ZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9k
ZS0+Y29kZU9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudHNMZW5ndGgpOwogICAgICAgICAgICAgICAgICAg
ICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgLS1pbmRleEluQmxvY2s7IC8v
IEZvcmNlIHJlY29uc2lkZXJhdGlvbiBvZiB0aGlzIG9wIG5vZXcgdGhhdCBpdCdzIGEgR2V0TXlB
cmd1bWVudHNMZW5ndGguCkBAIC01OTEsOCArNTY3LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219982</attachid>
            <date>2013-12-24 13:35:48 -0800</date>
            <delta_ts>2013-12-25 10:08:22 -0800</delta_ts>
            <desc>it runs things?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>14777</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk1LDE2ICszOTUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgICAgICAgICB8fCB1bm1vZGlmaWVkQXJndW1lbnRzUmVnaXN0ZXIobV9ncmFwaC5hcmd1
bWVudHNSZWdpc3RlckZvcihub2RlLT5jb2RlT3JpZ2luKSkgPT0gdmFyaWFibGVBY2Nlc3NEYXRh
LT5sb2NhbCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgc3Rv
cmUgaW50byBhIFZhcmlhYmxlQWNjZXNzRGF0YSogdGhhdCBpcyBtYXJrZWQgYXMKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYXJndW1lbnRzIGFsaWFzaW5nIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUq
IHRoYXQgZG9lcyBub3QgY3JlYXRlCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cywg
dGhlbiBmbGFnIHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGEgYXMgYmVpbmcgYW4KLSAgICAgICAgICAg
ICAgICAgICAgLy8gYXJndW1lbnRzLWFsaWFzZWQuIFRoaXMnbGwgbGV0IHRoZSBPU1IgZXhpdCBt
YWNoaW5lcnkgZG8gdGhlIHJpZ2h0Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoaW5ncy4gTm90
ZSBhbHNvIHRoYXQgdGhlIFNldExvY2FsIHNob3VsZCBiZWNvbWUgZGVhZCBhcyBzb29uIGFzCi0g
ICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlcGxhY2UgYWxsIHVzZXMgb2YgdGhpcyB2YXJpYWJs
ZSB3aXRoIEdldE15QXJndW1lbnRzTGVuZ3RoIGFuZAotICAgICAgICAgICAgICAgICAgICAvLyBH
ZXRNeUFyZ3VtZW50QnlWYWwuCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50
c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+bWVyZ2VJc0FyZ3VtZW50
c0FsaWFzKHRydWUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIApAQCAtNDIwLDIyICs0MTAsNiBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tTG9jYWw6IHsKLSAgICAgICAg
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAg
ICAgICAgICAgICAgICAgfHwgIW1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vz
c0RhdGEpLT52YWx1ZS5pc1ZhbGlkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IG1fY3Jl
YXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIC8vIFR1cm4gUGhhbnRvbUxvY2FscyBpbnRvIGp1c3QgR2V0TG9j
YWxzLiBUaGlzIHdpbGwgcHJlc2VydmUgdGhlIHRocmVhZGluZwotICAgICAgICAgICAgICAgICAg
ICAvLyBvZiB0aGUgbG9jYWwgdGhyb3VnaCB0byB0aGlzIHBvaW50LCBidXQgd2lsbCBhbGxvdyBp
dCB0byBkaWUsIGNhdXNpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gb25seSBPU1IgdG8ga25v
dyBhYm91dCBpdC4KLQotICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhHZXRMb2NhbCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIH0KLQogICAgICAgICAgICAgICAgIGNhc2UgRmx1c2g6IHsKICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgCkBAIC00NTksNyArNDMzLDcgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAvLyAyKSBUaGUgUGhhbnRvbSBtYXkga2VlcCB0
aGUgQ3JlYXRlQXJndW1lbnRzIG5vZGUgYWxpdmUsIHdoaWNoIGlzCiAgICAgICAgICAgICAgICAg
ICAgIC8vICAgIHByZWNpc2VseSB3aGF0IHdlIGRvbid0IHdhbnQuCiAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBBZGphY2VuY3lMaXN0OjpTaXplOyArK2kpCi0g
ICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVBcmd1bWVudHNSZWZlcmVuY2luZ1BoYW50b21D
aGlsZChub2RlLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldHlwZUFyZ3VtZW50c1Jl
ZmVyZW5jaW5nUGhhbnRvbUNoaWxkKG5vZGUsIGkpOwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDcwLDcgKzQ0
NCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQxKEVkZ2UoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBA
IC00ODgsOCArNDYxLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09L
VG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkcmVuLmNoaWxkMigpOwotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZDIoKSA9IEVkZ2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5jb2RlT3JpZ2luLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBu
b2RlLT5jaGlsZDEoKSA9IG5vZGUtPmNoaWxkMigpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDIoKSA9IEVkZ2UoKTsKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmRE
ZWZhdWx0RmxhZ3MoR2V0TXlBcmd1bWVudEJ5VmFsKTsKICAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3Jj
ZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub3cgdGhhdCBpdCdzIGEgR2V0TXlBcmd1bWVu
dEJ5VmFsLgpAQCAtNTAzLDcgKzQ3OSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
Y2hpbGQxKCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKEdldE15QXJndW1lbnRzTGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIC0taW5kZXhJbkJsb2NrOyAvLyBGb3Jj
ZSByZWNvbnNpZGVyYXRpb24gb2YgdGhpcyBvcCBub2V3IHRoYXQgaXQncyBhIEdldE15QXJndW1l
bnRzTGVuZ3RoLgpAQCAtNTgwLDggKzU1OSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJndW1lbnRzTm90Q3JlYXRlZCwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVPcmlnaW4pOwogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIGNvZGVPcmlnaW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZHJlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBQaGFudG9tLCBjb2RlT3JpZ2luLCBjaGlsZHJlbik7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC01OTEsOCArNTY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUtPmNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoUGhhbnRvbSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJl
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAKQEAgLTYyNyw2ICs2MDQsMTkgQEAgcHVibGljOgogICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm51bUJsb2Nr
cygpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9j
ayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7Cisg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAg
ICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpICE9IFBoYW50b20pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBB
ZGphY2VuY3lMaXN0OjpTaXplOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGRldHlwZUFyZ3Vt
ZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKG5vZGUsIGkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgICAgbV9n
cmFwaC5kZXRocmVhZCgpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2Zvcm0gPSBMb2FkU3RvcmU7
CkBAIC03NjQsMzUgKzc1NCwyMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcmVtb3ZlQXJndW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hp
bGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4KQorICAgIHZvaWQgZGV0eXBlQXJndW1l
bnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQoTm9kZSogbm9kZSwgdW5zaWduZWQgZWRnZUluZGV4
KQogICAgIHsKICAgICAgICAgRWRnZSBlZGdlID0gbm9kZS0+Y2hpbGRyZW4uY2hpbGQoZWRnZUlu
ZGV4KTsKICAgICAgICAgaWYgKCFlZGdlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAK
ICAgICAgICAgc3dpdGNoIChlZGdlLT5vcCgpKSB7Ci0gICAgICAgIGNhc2UgUGhpOiAvLyBBcmlz
ZXMgaWYgd2UgaGFkIENTRSBvbiBhIEdldExvY2FsIG9mIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIu
Ci0gICAgICAgIGNhc2UgR2V0TG9jYWw6IC8vIEFyaXNlcyBpZiB3ZSBoYWQgQ1NFIG9uIGFuIGFy
Z3VtZW50cyBhY2Nlc3MgdG8gYSB2YXJpYWJsZSBhbGlhc2VkIHRvIHRoZSBhcmd1bWVudHMuCi0g
ICAgICAgIGNhc2UgU2V0TG9jYWw6IHsgLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRM
b2NhbCBvZiB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLgorICAgICAgICBjYXNlIEdldExvY2FsOiB7
CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGVk
Z2UtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAgICAgYm9vbCBpc0RlYWRBcmd1bWVu
dHNSZWdpc3RlciA9Ci0gICAgICAgICAgICAgICAgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgp
ID09Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0
ZXJGb3IoZWRnZS0+Y29kZU9yaWdpbikKLSAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJn
dW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAg
ICAgICAgIGJvb2wgaXNBbGlhc2VkQXJndW1lbnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAg
ICF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKQotICAgICAgICAgICAgICAgICYmIG1f
YXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0RhdGEpLT52YWx1ZS5pc1ZhbGlk
KCkKLSAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2Ut
PmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIGlmICghaXNEZWFkQXJn
dW1lbnRzUmVnaXN0ZXIgJiYgIWlzQWxpYXNlZEFyZ3VtZW50c1JlZ2lzdGVyKQorICAgICAgICAg
ICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQXJndW1lbnRzQWxpYXMoKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnJlbW92ZUVkZ2UoZWRn
ZUluZGV4KTsKKyAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCkuc2V0
VXNlS2luZChVbnR5cGVkVXNlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6IHsgLy8gQXJpc2VzIGlmIHdl
IENTRSB0d28gR2V0TG9jYWxzIHRvIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIgYW5kIHRoZW4gQ1NF
IHRoZSBzZWNvbmQgdXNlIG9mIHRoZSBHZXRMb2NhbCB0byB0aGUgZmlyc3QuCi0gICAgICAgICAg
ICBpZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKGVkZ2UtPmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG5vZGUtPmNo
aWxkcmVuLnJlbW92ZUVkZ2UoZWRnZUluZGV4KTsKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1l
bnRzOiB7CisgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5jaGlsZChlZGdlSW5kZXgpLnNldFVz
ZUtpbmQoVW50eXBlZFVzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0
LmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
bHVzaEZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDkgQEAgdm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZsdQogICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6
CiAgICAgICAgIG91dC5wcmludCgiRmx1c2hlZEpTVmFsdWUiKTsKICAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKKyAgICAgICAgb3V0LnByaW50KCJGbHVzaGVkQXJn
dW1lbnRzIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CiAg
ICAgICAgIG91dC5wcmludCgiQ29uZmxpY3RpbmdGbHVzaCIpOwogICAgICAgICByZXR1cm47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lv
biAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgZW51bSBGbHVzaEZvcm1hdCB7CiAgICAg
Rmx1c2hlZENlbGwsCiAgICAgRmx1c2hlZEJvb2xlYW4sCiAgICAgRmx1c2hlZEpTVmFsdWUsCisg
ICAgRmx1c2hlZEFyZ3VtZW50cywKICAgICBDb25mbGljdGluZ0ZsdXNoCiB9OwogCkBAIC01Niw2
ICs1Nyw3IEBAIGlubGluZSBOb2RlRmxhZ3MgcmVzdWx0Rm9yKEZsdXNoRm9ybWF0IGYKICAgICBj
YXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgY2FzZSBDb25m
bGljdGluZ0ZsdXNoOgorICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKICAgICAgICAgcmV0dXJu
IE5vZGVSZXN1bHRKUzsKICAgICBjYXNlIEZsdXNoZWRJbnQzMjoKICAgICAgICAgcmV0dXJuIE5v
ZGVSZXN1bHRJbnQzMjsKQEAgLTc2LDYgKzc4LDcgQEAgaW5saW5lIFVzZUtpbmQgdXNlS2luZEZv
cihGbHVzaEZvcm1hdCBmbwogICAgIGNhc2UgRGVhZEZsdXNoOgogICAgIGNhc2UgRmx1c2hlZEpT
VmFsdWU6CiAgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgIGNhc2UgRmx1c2hlZEFyZ3Vt
ZW50czoKICAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CiAgICAgY2FzZSBGbHVzaGVkQ2VsbDoK
ICAgICAgICAgcmV0dXJuIENlbGxVc2U7CkBAIC0xMTAsNiArMTEzLDggQEAgaW5saW5lIERhdGFG
b3JtYXQgZGF0YUZvcm1hdEZvcihGbHVzaEZvcgogICAgICAgICByZXR1cm4gRGF0YUZvcm1hdENl
bGw7CiAgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKICAgICAgICAgcmV0dXJuIERhdGFGb3JtYXRC
b29sZWFuOworICAgIGNhc2UgRmx1c2hlZEFyZ3VtZW50czoKKyAgICAgICAgcmV0dXJuIERhdGFG
b3JtYXRBcmd1bWVudHM7CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgcmV0dXJuIERhdGFGb3JtYXREZWFkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjAz
NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAxLDE0ICsyMDAxLDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9qaXQuc3RvcmUzMih2YWx1
ZS50YWdHUFIoKSwgSklUQ29tcGlsZXI6OnRhZ0Zvcihub2RlLT5tYWNoaW5lTG9jYWwoKSkpOwog
ICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChE
YXRhRm9ybWF0SlMpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB3ZSdyZSBzdG9y
aW5nIGFuIGFyZ3VtZW50cyBvYmplY3QgdGhhdCBoYXMgYmVlbiBvcHRpbWl6ZWQgYXdheSwKLSAg
ICAgICAgICAgIC8vIG91ciB2YXJpYWJsZSBldmVudCBzdHJlYW0gZm9yIE9TUiBleGl0IG5vdyBy
ZWZsZWN0cyB0aGUgb3B0aW1pemVkCi0gICAgICAgICAgICAvLyB2YWx1ZSAoSlNWYWx1ZSgpKS4g
T24gdGhlIHNsb3cgcGF0aCwgd2Ugd2FudCBhbiBhcmd1bWVudHMgb2JqZWN0Ci0gICAgICAgICAg
ICAvLyBpbnN0ZWFkLiBXZSBhZGQgYW4gYWRkaXRpb25hbCBtb3ZlIGhpbnQgdG8gc2hvdyBPU1Ig
ZXhpdCB0aGF0IGl0Ci0gICAgICAgICAgICAvLyBuZWVkcyB0byByZWNvbnN0cnVjdCB0aGUgYXJn
dW1lbnRzIG9iamVjdC4KLSAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBQ
aGFudG9tQXJndW1lbnRzKQotICAgICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KG5vZGUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzE0LDE0ICsyMzE0LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbm9SZXN1bHQobm9k
ZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJlY29yZFNldExvY2FsKERhdGFGb3JtYXRK
Uyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIElmIHdlJ3JlIHN0b3JpbmcgYW4gYXJn
dW1lbnRzIG9iamVjdCB0aGF0IGhhcyBiZWVuIG9wdGltaXplZCBhd2F5LAotICAgICAgICAgICAg
Ly8gb3VyIHZhcmlhYmxlIGV2ZW50IHN0cmVhbSBmb3IgT1NSIGV4aXQgbm93IHJlZmxlY3RzIHRo
ZSBvcHRpbWl6ZWQKLSAgICAgICAgICAgIC8vIHZhbHVlIChKU1ZhbHVlKCkpLiBPbiB0aGUgc2xv
dyBwYXRoLCB3ZSB3YW50IGFuIGFyZ3VtZW50cyBvYmplY3QKLSAgICAgICAgICAgIC8vIGluc3Rl
YWQuIFdlIGFkZCBhbiBhZGRpdGlvbmFsIG1vdmUgaGludCB0byBzaG93IE9TUiBleGl0IHRoYXQg
aXQKLSAgICAgICAgICAgIC8vIG5lZWRzIHRvIHJlY29uc3RydWN0IHRoZSBhcmd1bWVudHMgb2Jq
ZWN0LgotICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5vcCgpID09IFBoYW50b21Bcmd1
bWVudHMpCi0gICAgICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQobm9kZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTYwMzcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0ODMsOSArMTQ4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDdXJyZW50QmxvY2sKICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgRGF0YUZvcm1hdCBm
b3JtYXQ7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+aXNBcmd1bWVudHNBbGlhcygpKQotICAgICAg
ICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEFyZ3VtZW50czsKLSAgICAgICAgZWxzZSBpZiAoIW5v
ZGUtPnJlZkNvdW50KCkpCisgICAgICAgIGlmICghbm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJlY29yZCBkZWFkIFNldExvY2FsJ3MuCiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1hdCA9IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZs
dXNoRm9ybWF0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVT
b3VyY2UuaAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGlj
OgogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtp
bmQpCiAgICAgICAgIDogbV9raW5kKHZhbHVlU291cmNlS2luZCkKICAgICB7Ci0gICAgICAgIEFT
U0VSVChraW5kKCkgPT0gQXJndW1lbnRzU291cmNlIHx8IGtpbmQoKSA9PSBTb3VyY2VJc0RlYWQp
OworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFyZ3VtZW50c1NvdXJjZSB8fCBraW5kKCkgPT0g
U291cmNlSXNEZWFkIHx8IGtpbmQoKSA9PSBBcmd1bWVudHNTb3VyY2UpOwogICAgIH0KICAgICAK
ICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShNaW5pZmllZElEIGlkKQpAQCAtMTU5LDYgKzE1OSw4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNr
LCB3aGVyZSk7CiAgICAgICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CiAgICAgICAgICAgICByZXR1
cm4gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjaywgd2hlcmUpOworICAgICAgICBjYXNlIEZs
dXNoZWRBcmd1bWVudHM6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQXJndW1lbnRz
U291cmNlKTsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMTYwMzcw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMzI4LDYgKzMyOCw5IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IEFTU0VSVChmaW5kKCkgPT0gdGhpcyk7CiAgICAgICAgIAorICAgICAgICBpZiAoaXNBcmd1bWVu
dHNBbGlhcygpKQorICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRBcmd1bWVudHM7CisgICAgICAg
IAogICAgICAgICBpZiAoIXNob3VsZFVuYm94SWZQb3NzaWJsZSgpKQogICAgICAgICAgICAgcmV0
dXJuIEZsdXNoZWRKU1ZhbHVlOwogICAgICAgICAKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2lubGluZS1hcmd1bWVudHMtYWxpYXNlZC1hY2Nlc3MuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lLWFyZ3Vt
ZW50cy1hbGlhc2VkLWFjY2Vzcy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZS1hcmd1bWVudHMtYWxpYXNlZC1hY2Nlc3MuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciBh
ID0gYXJndW1lbnRzOworICAgIHJldHVybiBhWzBdICsgYVsxXSArIGFbMl07Cit9CisKK2Z1bmN0
aW9uIGJhcihhLCBiLCBjKSB7CisgICAgcmV0dXJuIGZvbyhiLCBjLCA0Mik7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMjAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKDEsIDIs
IDMpOworICAgIGlmIChyZXN1bHQgIT0gNDcpCisgICAgICAgIHRocm93ICJCYWQgcmVzdWx0OiAi
ICsgcmVzdWx0OworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219991</attachid>
            <date>2013-12-25 10:08:22 -0800</date>
            <delta_ts>2013-12-25 13:05:10 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22263</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMDY1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcyIEBA
CisyMDEzLTEyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIFBoYW50b21Bcmd1bWVudHMgc2hvdWxkbid0IHJlbHkgb24gYSBkZWFkIFBoaSBncmFwaAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MjE4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBU
aGlzIGNoYW5nZSBkcmFtYXRpY2FsbHkgcmF0aW9uYWxpemVzIG91ciBoYW5kbGluZyBvZiBQaGFu
dG9tQXJndW1lbnRzIChpLmUuCisgICAgICAgIHNwZWN1bGF0aXZlIGVsaXNpb24gb2YgYXJndW1l
bnRzIG9iamVjdCBhbGxvY2F0aW9uKS4KKyAgICAgICAgCisgICAgICAgIEl0J3Mgbm93IHRoZSBj
YXNlIHRoYXQgaWYgd2UgZGVjaWRlIHRoYXQgd2UgY2FuIGVsaWRlIGFyZ3VtZW50cyBhbGxvY2F0
aW9uLCB3ZSBqdXN0CisgICAgICAgIHR1cm4gdGhlIGFyZ3VtZW50cy1jcmVhdGluZyBub2RlIGlu
dG8gYSBQaGFudG9tQXJndW1lbnRzIGFuZCBtYXJrIGFsbCBsb2NhbHMgdGhhdAorICAgICAgICBp
dCdzIHN0b3JlZCB0byBhcyBiZWluZyBhcmd1bWVudHMgYWxpYXNlcy4gQmVpbmcgYW4gYXJndW1l
bnRzIGFsaWFzIGFuZCBiZWluZyBhCisgICAgICAgIFBoYW50b21Bcmd1bWVudHMgbWVhbnMgYmFz
aWNhbGx5IHRoZSBzYW1lIHRoaW5nOiBpbiBERkcgZXhlY3V0aW9uIHlvdSBoYXZlIHRoZSBlbXB0
eQorICAgICAgICB2YWx1ZSwgb24gT1NSIGV4aXQgYW4gYXJndW1lbnRzIG9iamVjdCBpcyBhbGxv
Y2F0ZWQgaW4geW91ciBwbGFjZSwgYW5kIGFsbCBvcGVyYXRpb25zCisgICAgICAgIHRoYXQgdXNl
IHRoZSB2YWx1ZSBub3cganVzdCByZWZlciBkaXJlY3RseSB0byB0aGUgYWN0dWFsIGFyZ3VtZW50
cyBpbiB0aGUgY2FsbCBmcmFtZQorICAgICAgICBoZWFkZXIgKG9yIHRoZSBhcmd1bWVudHMgd2Ug
a25vdyB0aGF0IHdlIHBhc3NlZCB0byB0aGUgY2FsbCwgaW4gY2FzZSBvZiBpbmxpbmluZykuCisg
ICAgICAgIAorICAgICAgICBUaGlzIG1lYW5zIHRoYXQgd2Ugbm8gbG9uZ2VyIGhhdmUgYXJndW1l
bnRzIHNpbXBsaWZpY2F0aW9uIGNyZWF0aW5nIGEgZGVhZCBQaGkgZ3JhcGgKKyAgICAgICAgdGhh
dCB0aGVuIGhhcyB0byBiZSBpbnRlcnByZXRlZCBieSB0aGUgT1NSIGV4aXQgbG9naWMuIFRoYXQg
c29ydCBvZiBuZXZlciBtYWRlIGFueQorICAgICAgICBzZW5zZS4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgbWVhbnMgdGhhdCBQaGFudG9tQXJndW1lbnRzIG5vdyBoYXMgYSBjbGVhciBzdG9yeSBp
biBTU0E6IGJhc2ljYWxseSBTU0EganVzdAorICAgICAgICBnZXRzIHJpZCBvZiB0aGUgImxvY2Fs
cyIgYnV0IGV2ZXJ5dGhpbmcgZWxzZSBpcyB0aGUgc2FtZS4KKyAgICAgICAgCisgICAgICAgIEZp
bmFsbHksIHRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gbW9yZSBlYXNpbHkgZ2V0IHJpZCBvZiBmb3J3
YXJkIGV4aXRpbmcuIEFzIEkgd2FzCisgICAgICAgIHdvcmtpbmcgb24gdGhlIGNvZGUgdG8gZ2V0
IHJpZCBvZiBmb3J3YXJkIGV4aXRpbmcsIEkgcmVhbGl6ZWQgdGhhdCBJJ2QgaGF2ZSB0bworICAg
ICAgICBjYXJlZnVsbHkgcHJlc2VydmUgdGhlIHNwZWNpYWwgbWVhbmluZ3Mgb2YgTW92SGludCBh
bmQgU2V0TG9jYWwgaW4gdGhlIGNhc2Ugb2YKKyAgICAgICAgUGhhbnRvbUFyZ3VtZW50cy4gSXQg
d2FzIHJlYWxseSBiaXphcnJlOiBldmVuIHRoZSBzZW1hbnRpY3Mgb2YgTW92SGludCB3ZXJlIHRp
ZWQgdG8KKyAgICAgICAgb3VyIHNwZWNpZmljIHRyZWF0bWVudCBvZiBQaGFudG9tQXJndW1lbnRz
LiBBZnRlciB0aGlzIGNoYW5nZSB0aGlzIGlzIG5vIGxvbmdlciB0aGUKKyAgICAgICAgY2FzZS4K
KyAgICAgICAgCisgICAgICAgIE9uZSBvZiB0aGUgcmVhbGx5IGNvb2wgdGhpbmdzIGFib3V0IHRo
aXMgY2hhbmdlIGlzIHRoYXQgYXJndW1lbnRzIHJlaWZpY2F0aW9uIG5vdworICAgICAgICBqdXN0
IGJlY29tZXMgYSBzcGVjaWFsIGtpbmQgb2YgRmx1c2hGb3JtYXQuIFRoaXMgZnVydGhlciB1bmlm
aWVzIHRoaW5nczogaXQgbWVhbnMKKyAgICAgICAgdGhhdCBhIE1vdkhpbnQoUGhhbnRvbUFyZ3Vt
ZW50cykgYW5kIGEgU2V0TG9jYWwoUGhhbnRvbUFyZ3VtZW50cykgYm90aCBoYXZlIHRoZSBzYW1l
CisgICAgICAgIG1lYW5pbmcsIHNpbmNlIGJvdGggb2YgdGhlbSBkaWN0YXRlIHRoYXQgdGhlIHdh
eSB3ZSByZWNvdmVyIHRoZSBsb2NhbCBvbiBleGl0IGlzIGJ5CisgICAgICAgIHJlaWZ5aW5nIGFy
Z3VtZW50cy4gUHJldmlvdXNseSwgdGhlIFNldExvY2FsKFBoYW50b21Bcmd1bWVudHMpIGNhc2Ug
bmVlZGVkIHNvbWUKKyAgICAgICAgc3BlY2lhbCBoYW5kbGluZyB0byBhY2NvbXBsaXNoIHRoaXMu
CisgICAgICAgIAorICAgICAgICBBIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3
ZSB3aWxsIG5vdyBlbWl0IGNvZGUgdG8gc3RvcmUgdGhlIGVtcHR5IHZhbHVlCisgICAgICAgIGlu
dG8gYWxpYXNlZCBhcmd1bWVudHMgdmFyaWFibGVzLCBhbmQgd2Ugd2lsbCBldmVuIGVtaXQgY29k
ZSB0byBsb2FkIHRoYXQgZW1wdHkgdmFsdWUKKyAgICAgICAgYXMgd2VsbC4gQXMgZmFyIGFzIEkg
Y2FuIHRlbGwgdGhpcyBkb2Vzbid0IGNvc3QgYW55dGhpbmcsIHNpbmNlIFBoYW50b21Bcmd1bWVu
dHMgYXJlCisgICAgICAgIG1vc3QgcHJvZml0YWJsZSBpbiBjYXNlcyB3aGVyZSBpdCBhbGxvd3Mg
dXMgdG8gc2ltcGxpZnkgY29udHJvbCBmbG93IGFuZCBraWxsIHRoZQorICAgICAgICBhcmd1bWVu
dHMgbG9jYWxzIGVudGlyZWx5LiBPZiBjb3Vyc2UsIHRoaXMgaXNuJ3QgYW4gaXNzdWUgaW4gU1NB
IGZvcm0gc2luY2UgU1NBIGZvcm0KKyAgICAgICAgYWxzbyBlbGltaW5hdGVzIHRoZSBsb2NhbHMu
CisKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpkZXR5cGVBcmd1
bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZCk6CisgICAgICAgICogZGZnL0RGR0ZsdXNoRm9y
bWF0LmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R0ZsdXNoRm9ybWF0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6cmVzdWx0Rm9yKToKKyAgICAgICAg
KEpTQzo6REZHOjp1c2VLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6REZHOjpkYXRhRm9ybWF0Rm9y
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICog
ZGZnL0RGR1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OlZh
bHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6REZHOjpWYWx1ZVNvdXJjZTo6Zm9yRmx1c2hGb3Jt
YXQpOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpWYXJpYWJsZUFjY2Vzc0RhdGE6OmZsdXNoRm9ybWF0KToKKyAgICAgICAgKiBmdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
OjpidWlsZEV4aXRBcmd1bWVudHMpOgorCiAyMDEzLTEyLTIzICBPbGl2ZXIgSHVudCAgPG9saXZl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgUmVmYWN0b3IgUHV0UHJvcGVydHlTbG90IHRvIGJlIGF3
YXJlIG9mIGN1c3RvbSBwcm9wZXJ0aWVzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE2MTA2NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5NSwxNiArMzk1
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgfHwgdW5tb2RpZmllZEFyZ3Vt
ZW50c1JlZ2lzdGVyKG1fZ3JhcGguYXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS0+Y29kZU9yaWdp
bikpID09IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFibGVBY2Nlc3NE
YXRhLT5pc0NhcHR1cmVkKCkpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIHN0b3JlIGludG8gYSBWYXJpYWJsZUFjY2Vzc0RhdGEqIHRo
YXQgaXMgbWFya2VkIGFzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cyBhbGlhc2lu
ZyBmb3IgYW4gSW5saW5lQ2FsbEZyYW1lKiB0aGF0IGRvZXMgbm90IGNyZWF0ZQotICAgICAgICAg
ICAgICAgICAgICAvLyBhcmd1bWVudHMsIHRoZW4gZmxhZyB0aGUgVmFyaWFibGVBY2Nlc3NEYXRh
IGFzIGJlaW5nIGFuCi0gICAgICAgICAgICAgICAgICAgIC8vIGFyZ3VtZW50cy1hbGlhc2VkLiBU
aGlzJ2xsIGxldCB0aGUgT1NSIGV4aXQgbWFjaGluZXJ5IGRvIHRoZSByaWdodAotICAgICAgICAg
ICAgICAgICAgICAvLyB0aGluZ3MuIE5vdGUgYWxzbyB0aGF0IHRoZSBTZXRMb2NhbCBzaG91bGQg
YmVjb21lIGRlYWQgYXMgc29vbiBhcwotICAgICAgICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNl
IGFsbCB1c2VzIG9mIHRoaXMgdmFyaWFibGUgd2l0aCBHZXRNeUFyZ3VtZW50c0xlbmd0aCBhbmQK
LSAgICAgICAgICAgICAgICAgICAgLy8gR2V0TXlBcmd1bWVudEJ5VmFsLgotICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0
YSktPnZhbHVlLmlzVmFsaWQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFj
Y2Vzc0RhdGEtPm1lcmdlSXNBcmd1bWVudHNBbGlhcyh0cnVlKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTQy
MCwyMiArNDEwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbUxvY2FsOiB7Ci0gICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRh
LT5pc0NhcHR1cmVkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFtX2FyZ3VtZW50c0Fs
aWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCi0gICAgICAg
ICAgICAgICAgICAgICAgICB8fCBtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMobm9kZS0+Y29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAvLyBUdXJuIFBoYW50
b21Mb2NhbHMgaW50byBqdXN0IEdldExvY2Fscy4gVGhpcyB3aWxsIHByZXNlcnZlIHRoZSB0aHJl
YWRpbmcKLSAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIGxvY2FsIHRocm91Z2ggdG8gdGhp
cyBwb2ludCwgYnV0IHdpbGwgYWxsb3cgaXQgdG8gZGllLCBjYXVzaW5nCi0gICAgICAgICAgICAg
ICAgICAgIC8vIG9ubHkgT1NSIHRvIGtub3cgYWJvdXQgaXQuCi0KLSAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoR2V0TG9jYWwpOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAgICAgICAgICBjYXNlIEZs
dXNoOiB7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVB
Y2Nlc3NEYXRhID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgICAgICAgICAg
ICAgIApAQCAtNDU5LDcgKzQzMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgLy8g
MikgVGhlIFBoYW50b20gbWF5IGtlZXAgdGhlIENyZWF0ZUFyZ3VtZW50cyBub2RlIGFsaXZlLCB3
aGljaCBpcwogICAgICAgICAgICAgICAgICAgICAvLyAgICBwcmVjaXNlbHkgd2hhdCB3ZSBkb24n
dCB3YW50LgogICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRq
YWNlbmN5TGlzdDo6U2l6ZTsgKytpKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlQXJn
dW1lbnRzUmVmZXJlbmNpbmdQaGFudG9tQ2hpbGQobm9kZSwgaSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXR5cGVBcmd1bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZChub2RlLCBpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTQ3MCw3ICs0NDQsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0
VG9QaGFudG9tKCk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxk
MShFZGdlKCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIApAQCAtNDg4LDggKzQ2MSwxMSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQxKCkgPSBub2RlLT5jaGls
ZHJlbi5jaGlsZDIoKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uY2hpbGQy
KCkgPSBFZGdlKCk7CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2Rl
KAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRv
bSwgbm9kZS0+Y29kZU9yaWdpbiwgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDIoKTsK
KyAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQyKCkgPSBFZGdlKCk7CiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKEdldE15QXJndW1lbnRCeVZhbCk7
CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRoaXMgb3Agbm93
IHRoYXQgaXQncyBhIEdldE15QXJndW1lbnRCeVZhbC4KQEAgLTUwMyw3ICs0NzksMTAgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLmNoaWxkMSgpID0g
RWRnZSgpOworICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5v
ZGUtPmNvZGVPcmlnaW4sIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkMSgpID0gRWRnZSgpOwogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhHZXRNeUFyZ3VtZW50c0xlbmd0aCk7
CiAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAg
ICAtLWluZGV4SW5CbG9jazsgLy8gRm9yY2UgcmVjb25zaWRlcmF0aW9uIG9mIHRoaXMgb3Agbm9l
dyB0aGF0IGl0J3MgYSBHZXRNeUFyZ3VtZW50c0xlbmd0aC4KQEAgLTU4MCw4ICs1NTksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBD
aGVja0FyZ3VtZW50c05vdENyZWF0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlT3Jp
Z2luKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBjb2Rl
T3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4pOworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgY29kZU9yaWdpbiwg
Y2hpbGRyZW4pOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgY2hh
bmdlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTkxLDggKzU2OSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5j
b250YWlucyhub2RlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwotICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jaGlsZHJlbi5yZXNldCgpOworICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC02MjcsNiArNjA0LDE5IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICAgICAg
fQogICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9j
a0luZGV4IDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6
ZSgpOyArK2luZGV4SW5CbG9jaykgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3AoKSAhPSBQ
aGFudG9tKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgQWRqYWNlbmN5TGlzdDo6U2l6ZTsgKytpKQorICAgICAg
ICAgICAgICAgICAgICBkZXR5cGVBcmd1bWVudHNSZWZlcmVuY2luZ1BoYW50b21DaGlsZChub2Rl
LCBpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKGNo
YW5nZWQpIHsKICAgICAgICAgICAgIG1fZ3JhcGguZGV0aHJlYWQoKTsKICAgICAgICAgICAgIG1f
Z3JhcGgubV9mb3JtID0gTG9hZFN0b3JlOwpAQCAtNzY0LDM1ICs3NTQsMjMgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICB2b2lkIHJlbW92ZUFyZ3Vt
ZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUqIG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRl
eCkKKyAgICB2b2lkIGRldHlwZUFyZ3VtZW50c1JlZmVyZW5jaW5nUGhhbnRvbUNoaWxkKE5vZGUq
IG5vZGUsIHVuc2lnbmVkIGVkZ2VJbmRleCkKICAgICB7CiAgICAgICAgIEVkZ2UgZWRnZSA9IG5v
ZGUtPmNoaWxkcmVuLmNoaWxkKGVkZ2VJbmRleCk7CiAgICAgICAgIGlmICghZWRnZSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAoZWRnZS0+b3AoKSkgewot
ICAgICAgICBjYXNlIFBoaTogLy8gQXJpc2VzIGlmIHdlIGhhZCBDU0Ugb24gYSBHZXRMb2NhbCBv
ZiB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLgotICAgICAgICBjYXNlIEdldExvY2FsOiAvLyBBcmlz
ZXMgaWYgd2UgaGFkIENTRSBvbiBhbiBhcmd1bWVudHMgYWNjZXNzIHRvIGEgdmFyaWFibGUgYWxp
YXNlZCB0byB0aGUgYXJndW1lbnRzLgotICAgICAgICBjYXNlIFNldExvY2FsOiB7IC8vIEFyaXNl
cyBpZiB3ZSBoYWQgQ1NFIG9uIGEgR2V0TG9jYWwgb2YgdGhlIGFyZ3VtZW50cyByZWdpc3Rlci4K
KyAgICAgICAgY2FzZSBHZXRMb2NhbDogewogICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBlZGdlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgICAgIGJvb2wgaXNEZWFkQXJndW1lbnRzUmVnaXN0ZXIgPQotICAgICAgICAgICAgICAgIHZh
cmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSA9PQotICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGVkZ2UtPmNvZGVPcmlnaW4pCi0gICAgICAg
ICAgICAgICAgJiYgIW1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7Ci0gICAgICAgICAgICBib29sIGlzQWxpYXNlZEFyZ3VtZW50c1Jl
Z2lzdGVyID0KLSAgICAgICAgICAgICAgICAhdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVk
KCkKLSAgICAgICAgICAgICAgICAmJiBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVB
Y2Nlc3NEYXRhKS0+dmFsdWUuaXNWYWxpZCgpCi0gICAgICAgICAgICAgICAgJiYgIW1fY3JlYXRl
c0FyZ3VtZW50cy5jb250YWlucyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7Ci0g
ICAgICAgICAgICBpZiAoIWlzRGVhZEFyZ3VtZW50c1JlZ2lzdGVyICYmICFpc0FsaWFzZWRBcmd1
bWVudHNSZWdpc3RlcikKKyAgICAgICAgICAgIGlmICghdmFyaWFibGVBY2Nlc3NEYXRhLT5pc0Fy
Z3VtZW50c0FsaWFzKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBub2Rl
LT5jaGlsZHJlbi5yZW1vdmVFZGdlKGVkZ2VJbmRleCk7CisgICAgICAgICAgICBub2RlLT5jaGls
ZHJlbi5jaGlsZChlZGdlSW5kZXgpLnNldFVzZUtpbmQoVW50eXBlZFVzZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgQ3JlYXRlQXJn
dW1lbnRzOiB7IC8vIEFyaXNlcyBpZiB3ZSBDU0UgdHdvIEdldExvY2FscyB0byB0aGUgYXJndW1l
bnRzIHJlZ2lzdGVyIGFuZCB0aGVuIENTRSB0aGUgc2Vjb25kIHVzZSBvZiB0aGUgR2V0TG9jYWwg
dG8gdGhlIGZpcnN0LgotICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlu
cyhlZGdlLT5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5yZW1vdmVFZGdlKGVkZ2VJbmRleCk7Cisg
ICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogeworICAgICAgICAgICAgbm9kZS0+Y2hpbGRy
ZW4uY2hpbGQoZWRnZUluZGV4KS5zZXRVc2VLaW5kKFVudHlwZWRVc2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5jcHAJKHJldmlzaW9uIDE2MTA2NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Niw2ICs1Niw5IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGbHUK
ICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICBvdXQucHJpbnQoIkZsdXNoZWRKU1Zh
bHVlIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CisgICAg
ICAgIG91dC5wcmludCgiRmx1c2hlZEFyZ3VtZW50cyIpOworICAgICAgICByZXR1cm47CiAgICAg
Y2FzZSBDb25mbGljdGluZ0ZsdXNoOgogICAgICAgICBvdXQucHJpbnQoIkNvbmZsaWN0aW5nRmx1
c2giKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGbHVzaEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmx1c2hGb3JtYXQuaAkocmV2aXNpb24gMTYxMDY1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBA
IGVudW0gRmx1c2hGb3JtYXQgewogICAgIEZsdXNoZWRDZWxsLAogICAgIEZsdXNoZWRCb29sZWFu
LAogICAgIEZsdXNoZWRKU1ZhbHVlLAorICAgIEZsdXNoZWRBcmd1bWVudHMsCiAgICAgQ29uZmxp
Y3RpbmdGbHVzaAogfTsKIApAQCAtNTYsNiArNTcsNyBAQCBpbmxpbmUgTm9kZUZsYWdzIHJlc3Vs
dEZvcihGbHVzaEZvcm1hdCBmCiAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICBjYXNlIEZs
dXNoZWRDZWxsOgogICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICBjYXNlIEZsdXNoZWRB
cmd1bWVudHM6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SlM7CiAgICAgY2FzZSBGbHVzaGVk
SW50MzI6CiAgICAgICAgIHJldHVybiBOb2RlUmVzdWx0SW50MzI7CkBAIC03Niw2ICs3OCw3IEBA
IGlubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm8KICAgICBjYXNlIERlYWRG
bHVzaDoKICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgIGNhc2UgQ29uZmxpY3RpbmdGbHVz
aDoKKyAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CiAgICAgICAgIHJldHVybiBVbnR5cGVkVXNl
OwogICAgIGNhc2UgRmx1c2hlZENlbGw6CiAgICAgICAgIHJldHVybiBDZWxsVXNlOwpAQCAtMTEw
LDYgKzExMyw4IEBAIGlubGluZSBEYXRhRm9ybWF0IGRhdGFGb3JtYXRGb3IoRmx1c2hGb3IKICAg
ICAgICAgcmV0dXJuIERhdGFGb3JtYXRDZWxsOwogICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CiAg
ICAgICAgIHJldHVybiBEYXRhRm9ybWF0Qm9vbGVhbjsKKyAgICBjYXNlIEZsdXNoZWRBcmd1bWVu
dHM6CisgICAgICAgIHJldHVybiBEYXRhRm9ybWF0QXJndW1lbnRzOwogICAgIH0KICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBEYXRhRm9ybWF0RGVhZDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMTYxMDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk4OSwxNCAr
MTk4OSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIodmFsdWUudGFnR1BSKCksIEpJVENvbXBpbGVyOjp0YWdGb3Io
bm9kZS0+bWFjaGluZUxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAg
ICAgICAgICAgcmVjb3JkU2V0TG9jYWwoRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gSWYgd2UncmUgc3RvcmluZyBhbiBhcmd1bWVudHMgb2JqZWN0IHRoYXQgaGFz
IGJlZW4gb3B0aW1pemVkIGF3YXksCi0gICAgICAgICAgICAvLyBvdXIgdmFyaWFibGUgZXZlbnQg
c3RyZWFtIGZvciBPU1IgZXhpdCBub3cgcmVmbGVjdHMgdGhlIG9wdGltaXplZAotICAgICAgICAg
ICAgLy8gdmFsdWUgKEpTVmFsdWUoKSkuIE9uIHRoZSBzbG93IHBhdGgsIHdlIHdhbnQgYW4gYXJn
dW1lbnRzIG9iamVjdAotICAgICAgICAgICAgLy8gaW5zdGVhZC4gV2UgYWRkIGFuIGFkZGl0aW9u
YWwgbW92ZSBoaW50IHRvIHNob3cgT1NSIGV4aXQgdGhhdCBpdAotICAgICAgICAgICAgLy8gbmVl
ZHMgdG8gcmVjb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyBvYmplY3QuCi0gICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50cykKLSAgICAgICAgICAgICAg
ICBjb21waWxlTW92SGludChub2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTYxMDY1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI5
OSwyMCArMjI5OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgRmx1c2hlZEpTVmFsdWU6IHsKKyAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICAg
ICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOiB7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZTY0KHZh
bHVlLmdwcigpLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLT5tYWNoaW5lTG9jYWwoKSkp
OwogICAgICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJlY29yZFNldExvY2FsKERhdGFGb3JtYXRKUyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IC8vIElmIHdlJ3JlIHN0b3JpbmcgYW4gYXJndW1lbnRzIG9iamVjdCB0aGF0IGhhcyBiZWVuIG9w
dGltaXplZCBhd2F5LAotICAgICAgICAgICAgLy8gb3VyIHZhcmlhYmxlIGV2ZW50IHN0cmVhbSBm
b3IgT1NSIGV4aXQgbm93IHJlZmxlY3RzIHRoZSBvcHRpbWl6ZWQKLSAgICAgICAgICAgIC8vIHZh
bHVlIChKU1ZhbHVlKCkpLiBPbiB0aGUgc2xvdyBwYXRoLCB3ZSB3YW50IGFuIGFyZ3VtZW50cyBv
YmplY3QKLSAgICAgICAgICAgIC8vIGluc3RlYWQuIFdlIGFkZCBhbiBhZGRpdGlvbmFsIG1vdmUg
aGludCB0byBzaG93IE9TUiBleGl0IHRoYXQgaXQKLSAgICAgICAgICAgIC8vIG5lZWRzIHRvIHJl
Y29uc3RydWN0IHRoZSBhcmd1bWVudHMgb2JqZWN0LgotICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLT5vcCgpID09IFBoYW50b21Bcmd1bWVudHMpCi0gICAgICAgICAgICAgICAgY29tcGls
ZU1vdkhpbnQobm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAkocmV2aXNpb24gMTYxMDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MzYsOSArMTQzNiw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgCiAgICAg
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0Rh
dGEoKTsKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlmICh2YXJpYWJsZS0+
aXNBcmd1bWVudHNBbGlhcygpKQotICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEFyZ3Vt
ZW50czsKLSAgICAgICAgZWxzZSBpZiAoIW5vZGUtPnJlZkNvdW50KCkpCisgICAgICAgIGlmICgh
bm9kZS0+cmVmQ291bnQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBObyBuZWVkIHRvIHJl
Y29yZCBkZWFkIFNldExvY2FsJ3MuCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1hdCA9
IGRhdGFGb3JtYXRGb3IodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTYxMDY1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKFZh
bHVlU291cmNlS2luZCB2YWx1ZVNvdXJjZUtpbmQpCiAgICAgICAgIDogbV9raW5kKHZhbHVlU291
cmNlS2luZCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gQXJndW1lbnRzU291cmNl
IHx8IGtpbmQoKSA9PSBTb3VyY2VJc0RlYWQpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFy
Z3VtZW50c1NvdXJjZSB8fCBraW5kKCkgPT0gU291cmNlSXNEZWFkIHx8IGtpbmQoKSA9PSBBcmd1
bWVudHNTb3VyY2UpOwogICAgIH0KICAgICAKICAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShNaW5p
ZmllZElEIGlkKQpAQCAtMTU5LDYgKzE1OSw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHJldHVy
biBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNrLCB3aGVyZSk7CiAgICAgICAgIGNhc2UgRmx1c2hl
ZEJvb2xlYW46CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFj
aywgd2hlcmUpOworICAgICAgICBjYXNlIEZsdXNoZWRBcmd1bWVudHM6CisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVTb3VyY2UoQXJndW1lbnRzU291cmNlKTsKICAgICAgICAgfQogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2Uo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaAkocmV2aXNpb24gMTYxMDY1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzI4LDYgKzMyOCw5
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIEFTU0VSVChmaW5kKCkgPT0gdGhpcyk7CiAgICAg
ICAgIAorICAgICAgICBpZiAoaXNBcmd1bWVudHNBbGlhcygpKQorICAgICAgICAgICAgcmV0dXJu
IEZsdXNoZWRBcmd1bWVudHM7CisgICAgICAgIAogICAgICAgICBpZiAoIXNob3VsZFVuYm94SWZQ
b3NzaWJsZSgpKQogICAgICAgICAgICAgcmV0dXJuIEZsdXNoZWRKU1ZhbHVlOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCShyZXZpc2lvbiAxNjEwNjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIwOSw2ICs0MjA5LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6CiAgICAgICAgICAgICAgICAg
ZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoZmx1c2gudmly
dHVhbFJlZ2lzdGVyKCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBGbHVzaGVkQXJndW1lbnRzOgorICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTg2CisgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE2MTA2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE5IEBACisyMDEzLTEyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgREZHIFBoYW50b21Bcmd1bWVudHMgc2hvdWxkbid0IHJlbHkgb24gYSBkZWFkIFBo
aSBncmFwaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI2MjE4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBBZGRlZCBhIHRlc3QgZm9yIGFuIG9idmlvdXMgY2FzZSB0aGF0IEkgZG9uJ3QgdGhp
bmsgd2UgaGFkIGNvdmVyYWdlIGZvciBpbgorICAgICAgICBtaWNyb2JlbmNobWFya3MuIE9mIGNv
dXJzZSwgdGhpcyBjYXNlIHdhcyBhbHJlYWR5IGNvdmVyZWQgYnkgbW9yZSBjb21wbGV4IHRlc3Rz
LgorCisgICAgICAgICoganMvcmVncmVzcy9pbmxpbmUtYXJndW1lbnRzLWFsaWFzZWQtYWNjZXNz
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmxpbmUtYXJndW1l
bnRzLWFsaWFzZWQtYWNjZXNzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2lubGluZS1hcmd1bWVudHMtYWxpYXNlZC1hY2Nlc3MuanM6IEFkZGVkLgorICAg
ICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMTMtMTItMjQgIFJ5b3N1a2UgTml3YSAg
PHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIHRoZSB0ZXN0IGV4cGVjdGF0aW9u
cyBhZGRlZCBhZnRlciByMTYxMDUxIG5vdyB0aGF0IHRoZSBjaGFuZ2VzZXQgaGFzIGJlZW4gcm9s
bGVkIG91dC4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lLWFyZ3VtZW50cy1h
bGlhc2VkLWFjY2Vzcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmxpbmUtYXJndW1lbnRzLWFsaWFzZWQtYWNjZXNzLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lLWFyZ3VtZW50cy1hbGlh
c2VkLWFjY2Vzcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL2lubGluZS1hcmd1bWVudHMtYWxpYXNlZC1hY2Nlc3MKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvaW5saW5lLWFyZ3VtZW50cy1hbGlhc2VkLWFjY2Vzcy5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lLWFyZ3VtZW50cy1hbGlhc2VkLWFj
Y2Vzcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmUt
YXJndW1lbnRzLWFsaWFzZWQtYWNjZXNzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5saW5lLWFy
Z3VtZW50cy1hbGlhc2VkLWFjY2Vzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmUtYXJndW1lbnRzLWFsaWFz
ZWQtYWNjZXNzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2lubGluZS1hcmd1bWVudHMtYWxpYXNlZC1hY2Nlc3MuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmUtYXJndW1lbnRzLWFs
aWFzZWQtYWNjZXNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKK2Z1bmN0aW9u
IGZvbygpIHsKKyAgICB2YXIgYSA9IGFyZ3VtZW50czsKKyAgICByZXR1cm4gYVswXSArIGFbMV0g
KyBhWzJdOworfQorCitmdW5jdGlvbiBiYXIoYSwgYiwgYykgeworICAgIHJldHVybiBmb28oYiwg
YywgNDIpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDIwMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGJhcigxLCAyLCAzKTsKKyAgICBpZiAocmVzdWx0ICE9IDQ3KQorICAgICAgICB0
aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30K
</data>
<flag name="review"
          id="243658"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>