<?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>125523</bug_id>
          
          <creation_ts>2013-12-10 11:00:08 -0800</creation_ts>
          <short_desc>Rationalize DFG DCE</short_desc>
          <delta_ts>2014-01-02 12:12:17 -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>
          <dependson>125531</dependson>
          <blocked>125519</blocked>
    
    <blocked>126239</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>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>958420</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-10 11:00:08 -0800</bug_when>
    <thetext>The current DFG DCE has some holes:

- It&apos;s generally unsound with respect to forward-exiting nodes.

- It intentionally avoids many opportunities for DCE, thereby masking the above bug, bug probably costing us some performance.

We should be more aggressive about DCE especially when it&apos;s sound to do so, and we should make it work right for forward exits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>958421</commentid>
    <comment_count>1</comment_count>
      <attachid>218882</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-10 11:00:45 -0800</bug_when>
    <thetext>Created attachment 218882
work in progress

I&apos;m basically fixing bugs and then writing tests which reveal more bugs.

It&apos;s kind of fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959951</commentid>
    <comment_count>2</comment_count>
      <attachid>219283</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-15 14:27:30 -0800</bug_when>
    <thetext>Created attachment 219283
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963607</commentid>
    <comment_count>3</comment_count>
      <attachid>220186</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-01 09:47:32 -0800</bug_when>
    <thetext>Created attachment 220186
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963776</commentid>
    <comment_count>4</comment_count>
      <attachid>220186</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-02 10:26:26 -0800</bug_when>
    <thetext>Comment on attachment 220186
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963777</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-02 10:28:27 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 220186 [details])
&gt; r=me

You mentioned you wrote tests that revealed these bugs. Where are they?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963778</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-02 10:31:16 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 220186 [details] [details])
&gt; &gt; r=me
&gt; 
&gt; You mentioned you wrote tests that revealed these bugs. Where are they?

Already landed in http://trac.webkit.org/changeset/161126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963779</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-01-02 10:32:13 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; (From update of attachment 220186 [details] [details] [details])
&gt; &gt; &gt; r=me
&gt; &gt; 
&gt; &gt; You mentioned you wrote tests that revealed these bugs. Where are they?
&gt; 
&gt; Already landed in http://trac.webkit.org/changeset/161126

Boomshockalocka.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963827</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-02 12:11:30 -0800</bug_when>
    <thetext>These performance numbers are amusing.


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 (r161126)
&quot;DCE&quot; at /Volumes/Data/fromMiniMe/tertiary/OpenSource/WebKitBuild/Release/jsc (r161126)

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                    DCE                                        
SunSpider:
   3d-cube                                            8.1320+-0.0595     ^      7.6937+-0.0753        ^ definitely 1.0570x faster
   3d-morph                                           8.8562+-0.1206            8.8468+-0.0710        
   3d-raytrace                                        9.5668+-0.0715            9.4886+-0.1086        
   access-binary-trees                                2.1611+-0.0539            2.1427+-0.0184        
   access-fannkuch                                    8.1500+-0.0614            8.0368+-0.0836          might be 1.0141x faster
   access-nbody                                       4.2495+-0.0444     ?      4.2820+-0.0612        ?
   access-nsieve                                      5.0173+-0.0289     ?      5.0355+-0.0764        ?
   bitops-3bit-bits-in-byte                           2.0006+-0.0246     ?      2.0126+-0.0419        ?
   bitops-bits-in-byte                                7.1954+-0.0622            7.1838+-0.0709        
   bitops-bitwise-and                                 3.0898+-0.0322            3.0650+-0.0459        
   bitops-nsieve-bits                                 4.7083+-0.0139     !      5.2769+-0.0226        ! definitely 1.1208x slower
   controlflow-recursive                              3.2210+-0.0543            3.1919+-0.0292        
   crypto-aes                                         5.6242+-0.0692            5.5986+-0.0223        
   crypto-md5                                         3.4149+-0.0277            3.3888+-0.0151        
   crypto-sha1                                        3.0272+-0.0075     ?      3.0329+-0.0204        ?
   date-format-tofte                                 11.8652+-0.1693     ?     11.9735+-0.1451        ?
   date-format-xparb                                  8.8528+-0.0729     ?      9.1841+-0.2584        ? might be 1.0374x slower
   math-cordic                                        4.3948+-0.1352            4.3590+-0.1254        
   math-partial-sums                                 10.3029+-0.0710           10.3012+-0.0967        
   math-spectral-norm                                 2.7991+-0.0266            2.7938+-0.0070        
   regexp-dna                                        13.0390+-0.1332           13.0283+-0.1046        
   string-base64                                      5.6473+-0.0358            5.6342+-0.0500        
   string-fasta                                      10.4253+-0.0884           10.4026+-0.0867        
   string-tagcloud                                   15.7119+-0.0732           15.5803+-0.0867        
   string-unpack-code                                31.3378+-0.2592     ?     31.3383+-0.1334        ?
   string-validate-input                              7.0740+-0.0547     ?      7.1454+-0.1526        ? might be 1.0101x slower

   &lt;arithmetic&gt; *                                     7.6871+-0.0147     ?      7.6930+-0.0156        ? might be 1.0008x slower
   &lt;geometric&gt;                                        6.1749+-0.0195     ?      6.1859+-0.0161        ? might be 1.0018x slower
   &lt;harmonic&gt;                                         5.0842+-0.0248     ?      5.0932+-0.0186        ? might be 1.0018x slower

                                                        TipOfTree                    DCE                                        
LongSpider:
   3d-cube                                         2675.6902+-9.5222     ^   2135.7886+-8.7532        ^ definitely 1.2528x faster
   3d-morph                                        1496.3218+-1.6131     ?   1499.4468+-7.1538        ?
   3d-raytrace                                     1506.0730+-8.5439         1504.3271+-4.4835        
   access-binary-trees                             2467.2312+-9.2616     ?   2482.3215+-8.7034        ?
   access-fannkuch                                  657.0691+-0.6737          656.1850+-2.7354        
   access-nbody                                    1499.3143+-4.6995         1496.5226+-1.7041        
   access-nsieve                                   1554.4675+-5.2996         1552.1214+-5.0934        
   bitops-3bit-bits-in-byte                         126.0117+-0.1696     ?    126.2113+-0.1503        ?
   bitops-bits-in-byte                              598.5246+-3.6344     ?    602.3112+-4.2488        ?
   bitops-nsieve-bits                              1051.9732+-2.1172     !   1149.9595+-2.2812        ! definitely 1.0931x slower
   controlflow-recursive                           1474.1888+-0.7479         1473.4970+-0.4625        
   crypto-aes                                      1659.8341+-10.3354        1657.6107+-2.5116        
   crypto-md5                                      1241.3078+-0.7803     ?   1241.5600+-3.1818        ?
   crypto-sha1                                     1630.2178+-6.9962         1626.3382+-5.2377        
   date-format-tofte                               1197.6947+-8.5854     ?   1219.8375+-14.9319       ? might be 1.0185x slower
   date-format-xparb                               1465.6775+-21.1772    ?   1497.4755+-22.6356       ? might be 1.0217x slower
   math-cordic                                     1736.4209+-0.4231     ?   1760.4699+-52.5357       ? might be 1.0138x slower
   math-partial-sums                               1307.9766+-2.7588         1304.7951+-2.5959        
   math-spectral-norm                              1826.1313+-0.5136     ?   1826.8634+-0.7156        ?
   string-base64                                    506.0616+-2.1053          504.7036+-2.5044        
   string-fasta                                     988.4543+-3.2385     !    996.6150+-3.4076        ! definitely 1.0083x slower
   string-tagcloud                                  391.0838+-2.3348          389.1763+-1.2255        

   &lt;arithmetic&gt;                                    1320.8057+-1.1452     ^   1304.7335+-2.0746        ^ definitely 1.0123x faster
   &lt;geometric&gt; *                                   1122.6361+-1.0896     ^   1118.6245+-1.3779        ^ definitely 1.0036x faster
   &lt;harmonic&gt;                                       810.2759+-0.9796     ?    811.2115+-0.5234        ? might be 1.0012x slower

                                                        TipOfTree                    DCE                                        
V8Spider:
   crypto                                            80.3342+-0.9145           79.4921+-0.3032          might be 1.0106x faster
   deltablue                                        100.5419+-0.6083           99.6720+-0.7963        
   earley-boyer                                      73.8694+-0.3580           73.6717+-1.0037        
   raytrace                                          45.8973+-0.1791           45.6676+-0.2451        
   regexp                                           100.6413+-0.2185     ^    100.0988+-0.2613        ^ definitely 1.0054x faster
   richards                                         131.4713+-1.3796     ?    132.5271+-1.4034        ?
   splay                                             46.0539+-0.3213     ?     46.1576+-0.4904        ?

   &lt;arithmetic&gt;                                      82.6870+-0.1628           82.4695+-0.2822          might be 1.0026x faster
   &lt;geometric&gt; *                                     77.4268+-0.1198           77.1818+-0.2234          might be 1.0032x faster
   &lt;harmonic&gt;                                        72.1776+-0.1149           71.9455+-0.2089          might be 1.0032x faster

                                                        TipOfTree                    DCE                                        
Octane and V8v7:
   encrypt                                           0.46873+-0.00052    ^     0.46550+-0.00040       ^ definitely 1.0069x faster
   decrypt                                           8.59196+-0.01228          8.58423+-0.01822       
   deltablue                                x2       0.57708+-0.01611          0.57054+-0.00630         might be 1.0115x faster
   earley                                            0.91690+-0.00671          0.90526+-0.00567         might be 1.0129x faster
   boyer                                            12.47120+-0.04893    ?    12.60686+-0.23651       ? might be 1.0109x slower
   raytrace                                 x2       4.28358+-0.03112    ?     4.30765+-0.02617       ?
   regexp                                   x2      32.95508+-0.15442         32.87670+-0.19189       
   richards                                 x2       0.43680+-0.00667          0.43480+-0.00470       
   splay                                    x2       0.63218+-0.00565          0.62878+-0.00259       
   navier-stokes                            x2      10.70258+-0.00512    ?    10.70921+-0.00921       ?
   closure                                           0.43163+-0.00209    ?     0.43412+-0.00102       ?
   jquery                                            6.33786+-0.01548    ?     6.36299+-0.00970       ?
   gbemu                                    x2      71.68342+-1.16220         71.12748+-0.49741       
   mandreel                                 x2     136.44194+-1.56943        135.34330+-0.54006       
   pdfjs                                    x2     101.93407+-0.24648    ^   101.41015+-0.22285       ^ definitely 1.0052x faster
   box2d                                    x2      34.87811+-0.14200         34.86526+-0.19230       

V8v7:
   &lt;arithmetic&gt;                                      7.60146+-0.01806          7.60108+-0.02210         might be 1.0001x faster
   &lt;geometric&gt; *                                     2.52119+-0.01383          2.51425+-0.00265         might be 1.0028x faster
   &lt;harmonic&gt;                                        1.04250+-0.01005          1.03571+-0.00285         might be 1.0066x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                     31.47184+-0.11227         31.30410+-0.07115         might be 1.0054x faster
   &lt;geometric&gt; *                                     6.98285+-0.02704          6.96234+-0.00672         might be 1.0029x faster
   &lt;harmonic&gt;                                        1.44908+-0.01183          1.44212+-0.00361         might be 1.0048x faster

                                                        TipOfTree                    DCE                                        
Kraken:
   ai-astar                                          494.502+-0.566      ?     494.564+-0.541         ?
   audio-beat-detection                              225.736+-0.790      ?     226.589+-3.620         ?
   audio-dft                                         289.631+-1.258            289.521+-0.737         
   audio-fft                                         130.842+-0.182            130.801+-0.217         
   audio-oscillator                                  244.344+-0.364            244.341+-0.264         
   imaging-darkroom                                  285.905+-0.718      ?     286.349+-0.764         ?
   imaging-desaturate                                158.405+-0.242      ?     158.508+-0.208         ?
   imaging-gaussian-blur                             363.021+-0.276            362.979+-0.166         
   json-parse-financial                               79.870+-0.204      !      81.111+-0.343         ! definitely 1.0155x slower
   json-stringify-tinderbox                          103.794+-0.357      ?     104.679+-1.411         ?
   stanford-crypto-aes                                91.179+-0.690      ?      91.701+-0.544         ?
   stanford-crypto-ccm                               101.162+-0.810            100.020+-1.655           might be 1.0114x faster
   stanford-crypto-pbkdf2                            261.753+-1.743            261.565+-1.270         
   stanford-crypto-sha256-iterative                  114.651+-1.437            113.760+-0.271         

   &lt;arithmetic&gt; *                                    210.343+-0.255      ?     210.463+-0.271         ? might be 1.0006x slower
   &lt;geometric&gt;                                       180.506+-0.291      ?     180.695+-0.218         ? might be 1.0010x slower
   &lt;harmonic&gt;                                        155.971+-0.313      ?     156.264+-0.268         ? might be 1.0019x slower

                                                        TipOfTree                    DCE                                        
JSRegress:
   adapt-to-double-divide                            22.8593+-0.0926           22.8114+-0.1012        
   aliased-arguments-getbyval                         1.0122+-0.0041            1.0090+-0.0042        
   allocate-big-object                                3.0523+-0.0166     ?      3.0718+-0.0214        ?
   arity-mismatch-inlining                            0.9869+-0.0086            0.9831+-0.0145        
   array-access-polymorphic-structure                10.0803+-0.1024           10.0572+-0.0927        
   array-nonarray-polymorhpic-access                 60.5396+-4.5513           58.1722+-0.1349          might be 1.0407x faster
   array-with-double-add                              5.8038+-0.0221            5.8036+-0.0193        
   array-with-double-increment                        4.4030+-0.0447            4.3366+-0.0454          might be 1.0153x faster
   array-with-double-mul-add                          6.8688+-0.0539            6.8233+-0.0718        
   array-with-double-sum                              8.1067+-0.0539            8.0504+-0.0214        
   array-with-int32-add-sub                          10.4534+-0.1007     ?     10.5273+-0.0834        ?
   array-with-int32-or-double-sum                     8.0266+-0.0713            8.0098+-0.0120        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    117.7381+-1.0657     ?    120.0707+-2.0613        ? might be 1.0198x slower
   ArrayBuffer-DataView-alloc-long-lived             31.5309+-0.1607     !     32.6938+-0.4080        ! definitely 1.0369x slower
   ArrayBuffer-Int32Array-byteOffset                  6.0505+-0.0152            6.0299+-0.0429        
   ArrayBuffer-Int8Array-alloc-huge-long-lived   
                                                    214.3850+-2.6423     ?    214.9787+-2.2152        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived-fragmented   
                                                    166.0585+-1.1524     ?    166.8090+-0.7698        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    118.4252+-1.5455     ?    119.8844+-0.8694        ? might be 1.0123x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     47.8146+-0.1994     !     48.8319+-0.4367        ! definitely 1.0213x slower
   ArrayBuffer-Int8Array-alloc-long-lived            30.4448+-0.2339     !     31.2534+-0.3940        ! definitely 1.0266x slower
   ArrayBuffer-Int8Array-alloc                       26.4802+-0.1498     ?     27.3137+-0.7239        ? might be 1.0315x slower
   asmjs_bool_bug                                     9.2674+-0.0683     ?      9.3199+-0.1088        ?
   basic-set                                         19.8975+-0.1973           19.8824+-0.1379        
   big-int-mul                                        5.5806+-0.0301     ?      5.5947+-0.0297        ?
   boolean-test                                       4.4702+-0.0540     ?      4.4843+-0.0183        ?
   branch-fold                                        5.0226+-0.0161     ^      4.9255+-0.0111        ^ definitely 1.0197x faster
   by-val-generic                                    12.3751+-0.1158     ?     12.6058+-0.1538        ? might be 1.0186x slower
   captured-assignments                               0.6586+-0.0263            0.6506+-0.0218          might be 1.0123x faster
   cast-int-to-double                                12.6064+-0.1147           12.4681+-0.1117          might be 1.0111x faster
   cell-argument                                     15.9950+-0.4319     ?     16.1763+-0.3030        ? might be 1.0113x slower
   cfg-simplify                                       3.9878+-0.0491     ?      4.0090+-0.0076        ?
   chain-custom-getter                              157.8128+-0.1168     ?    160.6441+-5.6036        ? might be 1.0179x slower
   chain-getter-access                              487.5037+-5.3657     ?    487.9003+-4.3024        ?
   cmpeq-obj-to-obj-other                            12.7324+-0.5777           12.6502+-0.3113        
   constant-test                                      8.9413+-0.0702     ?      8.9579+-0.1125        ?
   DataView-custom-properties                       135.1934+-0.7461     !    137.0848+-1.0515        ! definitely 1.0140x slower
   delay-tear-off-arguments-strictmode                3.6904+-0.0205            3.6813+-0.0076        
   destructuring-arguments-length                   172.6619+-1.1707     !    175.5115+-1.2995        ! definitely 1.0165x slower
   destructuring-arguments                            8.9256+-0.0916            8.9091+-0.0694        
   destructuring-swap                                 8.6853+-0.1108     ?      8.7186+-0.1006        ?
   direct-arguments-getbyval                          0.8777+-0.0043     ?      0.8789+-0.0041        ?
   double-get-by-val-out-of-bounds                    7.6496+-0.0754     ?      7.6708+-0.1086        ?
   double-pollution-getbyval                         11.0966+-0.1477     ?     11.1479+-0.0583        ?
   double-pollution-putbyoffset                       6.1260+-0.0391     ?      6.1777+-0.0690        ?
   double-to-int32-typed-array-no-inline              2.6452+-0.0107            2.6387+-0.0083        
   double-to-int32-typed-array                        2.2887+-0.0110     ?      2.3040+-0.0176        ?
   double-to-uint32-typed-array-no-inline             2.8068+-0.0090            2.8048+-0.0050        
   double-to-uint32-typed-array                       2.5637+-0.0055     ?      2.5653+-0.0078        ?
   empty-string-plus-int                             10.8567+-0.0828     !     11.0459+-0.0816        ! definitely 1.0174x slower
   emscripten-cube2hash                              55.4918+-0.1372     ?     55.5970+-0.2883        ?
   emscripten-memops                               7053.6782+-11.7968    ?   7074.9394+-39.5886       ?
   external-arguments-getbyval                        2.1720+-0.0265            2.1574+-0.0171        
   external-arguments-putbyval                        3.1975+-0.1490            3.0694+-0.0107          might be 1.0417x faster
   fixed-typed-array-storage-var-index                1.4187+-0.0050            1.4164+-0.0050        
   fixed-typed-array-storage                          1.0180+-0.0193            1.0073+-0.0049          might be 1.0106x faster
   Float32Array-matrix-mult                           6.3944+-0.0400     ?      6.4376+-0.0715        ?
   Float32Array-to-Float64Array-set                  93.9259+-1.2488           92.8899+-0.8880          might be 1.0112x faster
   Float64Array-alloc-long-lived                    103.7096+-0.7528     ?    104.0691+-0.5559        ?
   Float64Array-to-Int16Array-set                   118.6830+-0.6956          118.1415+-0.3536        
   fold-double-to-int                                20.5385+-0.1986           20.3307+-0.1971          might be 1.0102x faster
   for-of-iterate-array-entries                       8.8238+-0.1682            8.6866+-0.1287          might be 1.0158x faster
   for-of-iterate-array-keys                          3.4340+-0.0306            3.4311+-0.0346        
   for-of-iterate-array-values                        3.0181+-0.1249            2.9730+-0.0407          might be 1.0152x faster
   function-dot-apply                                 3.1571+-0.0549            3.1384+-0.0210        
   function-test                                      4.9095+-0.0328     ?      4.9124+-0.0974        ?
   get-by-id-chain-from-try-block                     7.9251+-0.1155     ?      7.9501+-0.1239        ?
   get-by-id-proto-or-self                           25.9705+-0.2477           25.9295+-0.1509        
   get-by-id-self-or-proto                           24.0295+-0.6459     ?     24.1772+-0.5920        ?
   get-by-val-out-of-bounds                           7.4542+-0.0844     ?      7.4570+-0.1115        ?
   get_callee_monomorphic                             4.9742+-0.0964     ?      5.0257+-0.0181        ? might be 1.0103x slower
   get_callee_polymorphic                             4.8357+-0.0128     ?      4.8574+-0.0284        ?
   global-var-const-infer-fire-from-opt               1.0424+-0.0679            1.0340+-0.0470        
   global-var-const-infer                             0.8168+-0.0099            0.8163+-0.0043        
   HashMap-put-get-iterate-keys                      42.8648+-0.3976     ?     43.2785+-0.7633        ?
   HashMap-put-get-iterate                           54.8255+-0.7414     ?     55.2225+-0.8674        ?
   HashMap-string-put-get-iterate                    50.6311+-0.2401     !     51.8862+-0.3626        ! definitely 1.0248x slower
   imul-double-only                                  17.7317+-0.1549     ?     17.7727+-0.1732        ?
   imul-int-only                                     14.8317+-0.0981     ?     15.0552+-0.1474        ? might be 1.0151x slower
   imul-mixed                                        21.8837+-0.1313     ?     21.9063+-0.0887        ?
   in-four-cases                                     25.9271+-0.0909     ?     25.9371+-0.0267        ?
   in-one-case-false                                 12.1547+-0.1459           12.1154+-0.1306        
   in-one-case-true                                  12.0932+-0.1329     ?     12.1537+-0.1059        ?
   in-two-cases                                      12.8499+-0.0799     ?     12.9063+-0.1555        ?
   indexed-properties-in-objects                      4.2403+-0.0161            4.2172+-0.0388        
   infer-closure-const-then-mov-no-inline            15.3670+-0.1335           15.2985+-0.1004        
   infer-closure-const-then-mov                      28.8862+-0.1233     ?     28.9677+-0.0798        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.7502+-0.0594     ?     17.7759+-0.0612        ?
   infer-closure-const-then-put-to-scope             36.1183+-0.1365     ?     36.2132+-0.2550        ?
   infer-closure-const-then-reenter-no-inline   
                                                     84.3414+-0.1172     ?     84.3630+-0.0975        ?
   infer-closure-const-then-reenter                  36.1757+-0.1739           36.1609+-0.1712        
   infer-one-time-closure-ten-vars                   29.0554+-0.1007     ?     29.0760+-0.1582        ?
   infer-one-time-closure-two-vars                   28.8878+-0.1133           28.8606+-0.0969        
   infer-one-time-closure                            28.8332+-0.1413           28.8123+-0.1073        
   infer-one-time-deep-closure                       58.3487+-0.3317     ?     58.4854+-0.1330        ?
   inline-arguments-access                            1.7127+-0.0070     ?      1.7156+-0.0287        ?
   inline-arguments-aliased-access                    1.8594+-0.0556            1.8419+-0.0427        
   inline-arguments-local-escape                     22.3383+-0.1726     !     23.5935+-0.2988        ! definitely 1.0562x slower
   inline-get-scoped-var                              7.5385+-0.0882            7.4632+-0.0859          might be 1.0101x faster
   inlined-put-by-id-transition                      15.2620+-0.3443     ?     15.6009+-0.3636        ? might be 1.0222x slower
   int-or-other-abs-then-get-by-val                   9.5044+-0.0741     ?      9.5774+-0.1180        ?
   int-or-other-abs-zero-then-get-by-val             37.3098+-0.0212     ?     37.3962+-0.1415        ?
   int-or-other-add-then-get-by-val                  10.6016+-0.1098           10.5979+-0.1135        
   int-or-other-add                                  10.9370+-0.0684     ?     11.0034+-0.0973        ?
   int-or-other-div-then-get-by-val                   6.4366+-0.0240            6.3775+-0.1153        
   int-or-other-max-then-get-by-val                   8.9063+-0.1989            8.8128+-0.0978          might be 1.0106x faster
   int-or-other-min-then-get-by-val                   7.1263+-0.0399     ?      7.1772+-0.1137        ?
   int-or-other-mod-then-get-by-val                   6.2755+-0.0427     ?      6.2781+-0.0151        ?
   int-or-other-mul-then-get-by-val                   6.6869+-0.0359            6.6251+-0.0751        
   int-or-other-neg-then-get-by-val                   7.9903+-0.0728     ?      8.0467+-0.0772        ?
   int-or-other-neg-zero-then-get-by-val             37.0052+-0.1844     ?     37.0304+-0.2505        ?
   int-or-other-sub-then-get-by-val                  10.6947+-0.0621           10.5641+-0.1227          might be 1.0124x faster
   int-or-other-sub                                   8.9484+-0.0893     ?      9.0058+-0.0536        ?
   int-overflow-local                                 6.5227+-0.0752     ?      6.5610+-0.0239        ?
   Int16Array-alloc-long-lived                       68.4768+-0.6734           68.0106+-0.3640        
   Int16Array-bubble-sort-with-byteLength            48.8377+-0.0864     ?     48.9661+-0.1100        ?
   Int16Array-bubble-sort                            48.0762+-0.3035           47.9708+-0.2400        
   Int16Array-load-int-mul                            1.8204+-0.0052     ?      1.8430+-0.0509        ? might be 1.0124x slower
   Int16Array-to-Int32Array-set                      88.9717+-0.6498     !     91.4866+-0.8540        ! definitely 1.0283x slower
   Int32Array-alloc-huge-long-lived                 703.7717+-2.5505     ?    705.3508+-4.9291        ?
   Int32Array-alloc-huge                            807.8832+-9.0868     ?    810.0925+-6.2381        ?
   Int32Array-alloc-large-long-lived                980.7650+-9.1557          975.3432+-13.9233       
   Int32Array-alloc-large                            44.6800+-0.8181     ?     45.4107+-0.5286        ? might be 1.0164x slower
   Int32Array-alloc-long-lived                       80.8176+-0.7152           80.5018+-0.5334        
   Int32Array-alloc                                   4.5302+-0.0092     ?      4.5434+-0.0094        ?
   Int32Array-Int8Array-view-alloc                   15.3166+-0.1997           15.0432+-0.0968          might be 1.0182x faster
   int52-spill                                       12.6114+-0.2053     !     13.0172+-0.0959        ! definitely 1.0322x slower
   Int8Array-alloc-long-lived                        66.8033+-0.7250     ?     67.2700+-0.5596        ?
   Int8Array-load-with-byteLength                     5.0690+-0.0073            5.0371+-0.0655        
   Int8Array-load                                     5.0646+-0.0157            5.0067+-0.0664          might be 1.0116x faster
   integer-divide                                    15.1049+-0.1350           15.0654+-0.0765        
   integer-modulo                                     2.0531+-0.0124     ?      2.0622+-0.0160        ?
   large-int-captured                                 9.8604+-0.1046     !     10.0750+-0.0953        ! definitely 1.0218x slower
   large-int-neg                                     26.2066+-0.1656     ?     26.3054+-0.1489        ?
   large-int                                         23.0784+-0.1363     ?     23.1353+-0.1114        ?
   logical-not                                       10.8477+-0.1825           10.6363+-0.2759          might be 1.0199x faster
   lots-of-fields                                    12.4652+-0.1081     ?     12.4762+-0.0832        ?
   make-indexed-storage                               4.2821+-0.1720     ?      4.2848+-0.1355        ?
   make-rope-cse                                      6.1791+-0.0759            6.1192+-0.0919        
   marsaglia-larger-ints                            111.8697+-0.0945     ?    112.0377+-0.2764        ?
   marsaglia-osr-entry                               47.0722+-0.0476           47.0576+-0.1018        
   marsaglia                                        463.6651+-0.5580          463.6609+-0.2434        
   method-on-number                                  30.2155+-0.7317           29.9918+-0.4068        
   negative-zero-divide                               0.4249+-0.0018            0.4249+-0.0016        
   negative-zero-modulo                               0.4131+-0.0097            0.4106+-0.0021        
   negative-zero-negate                               0.3908+-0.0023     ?      0.4014+-0.0211        ? might be 1.0272x slower
   nested-function-parsing-random                   380.9223+-0.4684     !    386.2527+-0.4867        ! definitely 1.0140x slower
   nested-function-parsing                           47.4592+-0.1365           47.4522+-0.0944        
   new-array-buffer-dead                              3.7884+-0.0170     ?      3.8020+-0.0288        ?
   new-array-buffer-push                             10.6601+-0.1205           10.5779+-0.1388        
   new-array-dead                                    28.6397+-0.1908           28.5429+-0.0684        
   new-array-push                                     6.9986+-0.0795            6.9821+-0.0655        
   number-test                                        4.4257+-0.0311     ?      4.4411+-0.0233        ?
   object-closure-call                               13.5417+-0.1035           13.4970+-0.1196        
   object-test                                        4.8097+-0.0305            4.7873+-0.0399        
   poly-stricteq                                     87.8392+-2.9136           87.5109+-1.0741        
   polymorphic-structure                             21.0910+-0.3142     ?     21.2537+-0.3102        ?
   polyvariant-monomorphic-get-by-id                 11.9544+-0.0994     ?     12.0284+-0.1206        ?
   proto-custom-getter                              157.8363+-0.1937          157.7810+-0.1205        
   proto-getter-access                              490.1356+-5.5485     ?    492.0925+-8.3112        ?
   put-by-id                                         19.6103+-0.3958           19.5849+-0.3579        
   put-by-val-large-index-blank-indexing-type   
                                                     20.6630+-0.1114     ?     20.7681+-0.2149        ?
   put-by-val-machine-int                             3.3644+-0.0065            3.3636+-0.0064        
   rare-osr-exit-on-local                            20.2145+-0.0741     ?     20.2439+-0.1306        ?
   register-pressure-from-osr                        31.4152+-0.1191           31.4148+-0.0791        
   simple-activation-demo                            35.1895+-0.0742     ?     35.3089+-0.1711        ?
   simple-custom-getter                             509.8198+-21.6940    ?    512.4283+-21.6634       ?
   simple-getter-access                             781.7272+-8.0181     ?    792.5346+-9.3028        ? might be 1.0138x slower
   slow-array-profile-convergence                     4.0938+-0.0093     ?      4.1161+-0.0357        ?
   slow-convergence                                   4.5775+-0.0179            4.5761+-0.0276        
   sparse-conditional                                 1.4903+-0.0145            1.4866+-0.0077        
   splice-to-remove                                  77.1941+-0.1392     ^     76.9320+-0.1089        ^ definitely 1.0034x faster
   stepanov_container                             10217.8075+-29.3011    ?  10218.7680+-51.0035       ?
   string-concat-object                               3.2541+-0.0507            3.2522+-0.0421        
   string-concat-pair-object                          3.1801+-0.0353     ?      3.1873+-0.0311        ?
   string-concat-pair-simple                         17.3315+-0.2676           17.1496+-0.3443          might be 1.0106x faster
   string-concat-simple                              17.6057+-0.4271           17.4161+-0.2204          might be 1.0109x faster
   string-cons-repeat                                10.8365+-0.0405     ?     10.8591+-0.0258        ?
   string-cons-tower                                 11.3451+-0.0619     ?     11.3542+-0.0687        ?
   string-equality                                   42.7404+-0.1089     ?     42.9544+-0.3919        ?
   string-get-by-val-big-char                        12.6438+-0.1147     !     13.0120+-0.2304        ! definitely 1.0291x slower
   string-get-by-val-out-of-bounds-insane             5.9141+-0.1524            5.7602+-0.0838          might be 1.0267x faster
   string-get-by-val-out-of-bounds                    5.3204+-0.0620            5.3118+-0.0694        
   string-get-by-val                                  4.9320+-0.0266     ?      4.9509+-0.0188        ?
   string-hash                                        2.7850+-0.0047     ?      2.7869+-0.0034        ?
   string-long-ident-equality                        39.1290+-0.0656           39.0690+-0.0785        
   string-repeat-arith                               50.1005+-0.4834           49.9090+-0.2352        
   string-sub                                       105.2518+-0.6855     ^    103.6332+-0.4101        ^ definitely 1.0156x faster
   string-test                                        4.4101+-0.0252            4.3985+-0.0303        
   string-var-equality                               70.1130+-0.2520           70.0406+-0.2593        
   structure-hoist-over-transitions                   3.5274+-0.0086     ?      3.5293+-0.0174        ?
   switch-char-constant                               3.5053+-0.0133     ?      3.5455+-0.0624        ? might be 1.0115x slower
   switch-char                                        8.1342+-0.0810            8.1338+-0.1008        
   switch-constant                                    9.4414+-0.1131            9.3922+-0.1172        
   switch-string-basic-big-var                       20.6388+-0.1413           20.5182+-0.0633        
   switch-string-basic-big                           21.4133+-0.1823     ?     22.0182+-1.1166        ? might be 1.0282x slower
   switch-string-basic-var                           20.3709+-0.1107           20.2532+-0.1068        
   switch-string-basic                               22.0349+-0.6061           21.9281+-0.4823        
   switch-string-big-length-tower-var                28.9752+-0.1711     ?     29.0535+-0.1864        ?
   switch-string-length-tower-var                    21.9839+-0.1965           21.9323+-0.0961        
   switch-string-length-tower                        16.5716+-0.1015           16.5509+-0.0950        
   switch-string-short                               16.6856+-0.1292           16.6261+-0.1348        
   switch                                            13.6412+-0.1041     ?     13.7697+-0.2146        ?
   tear-off-arguments-simple                          2.4758+-0.0289     ^      2.4151+-0.0047        ^ definitely 1.0251x faster
   tear-off-arguments                                 3.7056+-0.0190            3.7012+-0.0050        
   temporal-structure                                17.1373+-0.0865     ?     17.1549+-0.0746        ?
   to-int32-boolean                                  21.7958+-0.2581           21.5461+-0.1318          might be 1.0116x faster
   undefined-test                                     4.6073+-0.0438     ?      4.6493+-0.0356        ?
   weird-inlining-const-prop                          2.4606+-0.0833            2.4073+-0.0086          might be 1.0221x faster

   &lt;arithmetic&gt;                                     133.9567+-0.2813     ?    134.2444+-0.3872        ? might be 1.0021x slower
   &lt;geometric&gt; *                                     14.7848+-0.0135     ?     14.8030+-0.0100        ? might be 1.0012x slower
   &lt;harmonic&gt;                                         5.3116+-0.0166            5.3092+-0.0164          might be 1.0005x faster

                                                        TipOfTree                    DCE                                        
All benchmarks:
   &lt;arithmetic&gt;                                     202.8464+-0.2198     ^    201.8636+-0.3949        ^ definitely 1.0049x faster
   &lt;geometric&gt;                                       20.5436+-0.0156     ?     20.5530+-0.0086        ? might be 1.0005x slower
   &lt;harmonic&gt;                                         4.8533+-0.0168            4.8460+-0.0109          might be 1.0015x faster

                                                        TipOfTree                    DCE                                        
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.3867+-0.0370     ^     49.3281+-0.0210        ^ definitely 1.0012x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963828</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-02 12:12:17 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/161218</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>218882</attachid>
            <date>2013-12-10 11:00:45 -0800</date>
            <delta_ts>2013-12-15 14:27:30 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>15882</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2MDM3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQwLDcgKzM0MCwxOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBWYWx1
ZUFkZDoKKyAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQobm9kZS0+
YmluYXJ5VXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1ZSBsZWZ0
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSByaWdo
dCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CkBAIC0zNjgsOSArMzgwLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9
PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
Y2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3Ry
aW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZp
c2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIwMyw3ICsxMjAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBwdXJl
OiB0aGVzZSBhcmUgcHVyZSwgYW5kIGNhbgogICAgICAgICAvLyBiZSBDU0UnZCwgc28gbG9uZyBh
cyB0aGUgcHJlZGljdGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCi0gICAgICAgIGNhc2UgVmFsdWVB
ZGQ6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NF
cToKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDI1
ICsyMDQsMTEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
IGNhc2UgSW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgorICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgIHJlYWQo
V29ybGQpOwogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5k
KCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0g
ICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgcmVhZChXb3JsZCk7Ci0gICAgICAgICAgICB3
cml0ZShXb3JsZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2
aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxNSArMTY1LDIxIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051
bWJlciBpcyBkZWFkIGJ1dCBpdHMKICAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7
IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgorICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2Vu
ZXJhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgcGVybWl0c09TUkJhY2t3YXJkUmV3
aXJpbmcobm9kZS0+Y2hpbGQxKCktPm9wKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhh
dCBVSW50MzJUb051bWJlciBnb3QgZm9sZGVkIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgLy8g
Y29uc3RhbnQ7IHRoYXQncyB3aHkgdGhlICFoYXNDb25zdGFudCgpIGNoZWNrIGlzIGhlcmUuCiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5l
cmF0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbm9kZS0+Y2hpbGQxKCktPmhhc0Nv
bnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKFpvbWJpZUhpbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTE4OSw2ICsxOTUsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3Vt
ZW50czoKKyAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVzZSBpbnRhY3QuCisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2MDM3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MiwxMSArMTUyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUlu
dGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChBcml0aEFkZCk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNl
Pihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChBcml0aEFkZCk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NDgsNyAr
NjQ4LDYgQEAgcHVibGljOgogICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU1pZ2h0
Q2xvYmJlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICBjYXNlIENvbXBhcmVM
ZXNzOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCwyMiArMTE4LDIyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhJbnQ1MlRvRG91YmxlLCBOb2RlUmVzdWx0TnVtYmVyKSBc
CiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMuICovXAotICAg
IG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAot
ICAgIG1hY3JvKEFyaXRoU3ViLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAotICAgIG1hY3JvKEFyaXRoTmVnYXRlLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTXVsLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoSU11bCwgTm9kZVJlc3VsdEludDMyIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoRGl2LCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTW9kLCBOb2RlUmVzdWx0TnVtYmVyIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoQWJzLCBOb2RlUmVzdWx0TnVtYmVy
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTWluLCBOb2RlUmVzdWx0TnVt
YmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTWF4LCBOb2RlUmVzdWx0
TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoU3FydCwgTm9kZVJl
c3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aFNpbiwgTm9k
ZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aENvcywg
Tm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhBcml0aEFk
ZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoU3ViLCBOb2RlUmVzdWx0TnVt
YmVyKSBcCisgICAgbWFjcm8oQXJpdGhOZWdhdGUsIE5vZGVSZXN1bHROdW1iZXIpIFwKKyAgICBt
YWNybyhBcml0aE11bCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoSU11bCwg
Tm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oQXJpdGhEaXYsIE5vZGVSZXN1bHROdW1iZXIp
IFwKKyAgICBtYWNybyhBcml0aE1vZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFy
aXRoQWJzLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhNaW4sIE5vZGVSZXN1
bHROdW1iZXIpIFwKKyAgICBtYWNybyhBcml0aE1heCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAg
IG1hY3JvKEFyaXRoU3FydCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoU2lu
LCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhDb3MsIE5vZGVSZXN1bHROdW1i
ZXIpIFwKICAgICBcCiAgICAgLyogQWRkIG9mIHZhbHVlcyBtYXkgZWl0aGVyIGJlIGFyaXRobWV0
aWMsIG9yIHJlc3VsdCBpbiBzdHJpbmcgY29uY2F0ZW5hdGlvbi4gKi9cCi0gICAgbWFjcm8oVmFs
dWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVy
KSBcCisgICAgbWFjcm8oVmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKICAgICAvKiBQcm9wZXJ0eSBhY2Nlc3MuICov
XAogICAgIC8qIFB1dEJ5VmFsQWxpYXMgaW5kaWNhdGVzIGEgJ3B1dCcgYWxpYXNlcyBhIHByaW9y
IHdyaXRlIHRvIHRoZSBzYW1lIHByb3BlcnR5LiAqL1wKQEAgLTMyMCw2ICszMjAsNyBAQCBpbmxp
bmUgYm9vbCBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhOCiAgICAgY2FzZSBJZGVudGl0eToK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBJbnQzMlRvRG91YmxlOgogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAg
ICAgY2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMwLDI4ICsxNDMwLDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZUNvbXBhcgogICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2RlKiBub2RlKQotewotICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKLQotICAgIEdQUlJlZyBvcDFUYWdHUFIgPSBvcDEudGFnR1BSKCk7Ci0g
ICAgR1BSUmVnIG9wMVBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwotICAgIEdQUlJlZyBv
cDJUYWdHUFIgPSBvcDIudGFnR1BSKCk7Ci0gICAgR1BSUmVnIG9wMlBheWxvYWRHUFIgPSBvcDIu
cGF5bG9hZEdQUigpOwotCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAKLSAgICBHUFJSZXN1
bHQyIHJlc3VsdFRhZyh0aGlzKTsKLSAgICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsK
LSAgICBpZiAoaXNLbm93bk5vdE51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25v
d25Ob3ROdW1iZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXls
b2FkLmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9wMlRhZ0dQUiwgb3AyUGF5bG9h
ZEdQUik7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRk
LCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG9wMVRhZ0dQUiwgb3AxUGF5
bG9hZEdQUiwgb3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKTsKLSAgICAKLSAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci19Ci0KIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5v
ZGVVc2UpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAgLTIxMDAsNyArMjA3OCwyOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCi0gICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBHUFJS
ZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQ
UiA9IG9wMS5wYXlsb2FkR1BSKCk7CisgICAgICAgIEdQUlJlZyBvcDJUYWdHUFIgPSBvcDIudGFn
R1BSKCk7CisgICAgICAgIEdQUlJlZyBvcDJQYXlsb2FkR1BSID0gb3AyLnBheWxvYWRHUFIoKTsK
KyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgICAgICBH
UFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxv
YWQodGhpcyk7CisgICAgICAgIGlmIChpc0tub3duTm90TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkgfHwgaXNLbm93bk5vdE51bWJlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFn
LmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9w
MlRhZ0dQUiwgb3AyUGF5bG9hZEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9h
ZC5ncHIoKSwgb3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSLCBvcDJUYWdHUFIsIG9wMlBheWxvYWRH
UFIpOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJl
c3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBj
YXNlIEFyaXRoQWRkOgogICAgICAgICBjb21waWxlQWRkKG5vZGUpOwogICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxNSwyNSArMTgxNSw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVDb21wYXIKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2RlKiBub2RlKQotewotICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAKLSAgICBHUFJSZWcgb3AxR1BSID0g
b3AxLmdwcigpOwotICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7Ci0gICAgCi0gICAgZmx1
c2hSZWdpc3RlcnMoKTsKLSAgICAKLSAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIGlm
IChpc0tub3duTm90TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNLbm93bk5vdE51
bWJlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3AyR1BSKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdC5n
cHIoKSwgb3AxR1BSLCBvcDJHUFIpOwotICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3Ro
ZXJMb2dpY2FsTm90KEVkZ2Ugbm9kZVVzZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlVXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMjQzMCw3ICsyNDEx
LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFZhbHVlQWRkOgorICAgIGNhc2UgVmFs
dWVBZGQ6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgCisgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICAKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgaWYg
KGlzS25vd25Ob3ROdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc0tub3duTm90TnVt
YmVyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3AyR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFk
ZCwgcmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7CisgICAgICAgIAorICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY29tcGlsZUFkZChub2RlKTsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MjUsMTIg
KzI4MjUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgVW50eXBlZFVzZTogewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKLSAgICAgICAgY29t
cGlsZVZhbHVlQWRkKG5vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDE2MDM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzNyw3ICsxOTM3LDYgQEAg
cHVibGljOgogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1
YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9kZSk7
CiAgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0
Q2hpbGQpOwotICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVM
b2dpY2FsTm90KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdFcXVhbGl0eShOb2RlKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw4ICsyNjYsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICAgICAgY29tcGlsZVBoYW50b20o
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBj
YXNlIFZhbHVlQWRkOgorICAgICAgICAgICAgY29tcGlsZVZhbHVlQWRkKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgICAgIGNvbXBpbGVBZGRT
dWIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFyaXRoU3ViOgpAQCAtNzcz
LDYgKzc3NSwxOSBAQCBwcml2YXRlOgogICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBtX25vZGUsIHNwZWN1bGF0ZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGls
ZVZhbHVlQWRkKCkKKyAgICB7CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb247
CisgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiBTcGVjRnVsbE51bWJlcikKKyAgICAgICAgICAgICYmICEobV9zdGF0ZS5mb3JOb2RlKG1fbm9k
ZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG9wZXJh
dGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25WYWxldUFkZDsKKyAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uKSwgbV9jYWxsRnJh
bWUsCisgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUFkZFN1
YigpCiAgICAgewogICAgICAgICBib29sIGlzU3ViID0gIG1fbm9kZS0+b3AoKSA9PSBBcml0aFN1
YjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1pbnQzMi10
by1kb3VibGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9kZWFkLWludDMyLXRvLWRvdWJsZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1pbnQzMi10by1kb3VibGUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorZnVuY3Rpb24gZm9vKGludCwgbykgeworICAgIHZhciB4
ID0gaW50OworICAgIG8uZiA9IHg7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkK
KyAgICAgICAgeCArPSAwLjU7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwOyArK2kpCisgICAgZm9vKDQyLCB7fSk7CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219283</attachid>
            <date>2013-12-15 14:27:30 -0800</date>
            <delta_ts>2014-01-01 09:47:32 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16539</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2MDM3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQwLDcgKzM0MCwxOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBWYWx1
ZUFkZDoKKyAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAgIEpTVmFsdWUgbGVmdCA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CisgICAgICAgIEpTVmFsdWUgcmlnaHQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBpZiAobGVmdCAmJiByaWdodCAm
JiBsZWZ0LmlzTnVtYmVyKCkgJiYgcmlnaHQuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgSlNWYWx1ZShsZWZ0LmFzTnVtYmVyKCkgKyByaWdodC5hc051bWJlcigp
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQobm9kZS0+
YmluYXJ5VXNlS2luZCgpID09IFVudHlwZWRVc2UpOworICAgICAgICBjbG9iYmVyV29ybGQobm9k
ZS0+Y29kZU9yaWdpbiwgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAogICAgIGNhc2UgQXJpdGhBZGQ6IHsKICAgICAgICAgSlNWYWx1ZSBsZWZ0
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSByaWdo
dCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CkBAIC0zNjgsOSArMzgwLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9
PSBWYWx1ZUFkZCk7Ci0gICAgICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+Y29kZU9yaWdpbiwg
Y2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjU3Ry
aW5nIHwgU3BlY0J5dGVjb2RlTnVtYmVyKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZp
c2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIwMyw3ICsxMjAzLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIAogICAgICAgICAvLyBIYW5kbGUgbm9kZXMgdGhhdCBhcmUgY29uZGl0aW9uYWxseSBwdXJl
OiB0aGVzZSBhcmUgcHVyZSwgYW5kIGNhbgogICAgICAgICAvLyBiZSBDU0UnZCwgc28gbG9uZyBh
cyB0aGUgcHJlZGljdGlvbiBpcyB0aGUgb25lIHdlIHdhbnQuCi0gICAgICAgIGNhc2UgVmFsdWVB
ZGQ6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NF
cToKICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDI1
ICsyMDQsMTEgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAg
IGNhc2UgSW46CiAgICAgY2FzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aFNhZmU6CiAgICAgY2FzZSBH
ZXRNeUFyZ3VtZW50QnlWYWxTYWZlOgorICAgIGNhc2UgVmFsdWVBZGQ6CiAgICAgICAgIHJlYWQo
V29ybGQpOwogICAgICAgICB3cml0ZShXb3JsZCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
Ci0gICAgY2FzZSBWYWx1ZUFkZDoKLSAgICAgICAgc3dpdGNoIChub2RlLT5iaW5hcnlVc2VLaW5k
KCkpIHsKLSAgICAgICAgY2FzZSBJbnQzMlVzZToKLSAgICAgICAgY2FzZSBOdW1iZXJVc2U6Ci0g
ICAgICAgIGNhc2UgTWFjaGluZUludFVzZToKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2FzZSBVbnR5cGVkVXNlOgotICAgICAgICAgICAgcmVhZChXb3JsZCk7Ci0gICAgICAgICAgICB3
cml0ZShXb3JsZCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgogICAgICAgICByZWFk
KEFic3RyYWN0SGVhcChWYXJpYWJsZXMsIEpTU3RhY2s6OkNhbGxlZSkpOwogICAgICAgICByZXR1
cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RDRVBoYXNlLmNwcAkocmV2
aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEQ0VQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSwxNSArMTY1LDIxIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLndpbGxOb3RIYXZlQ2hlY2soKSkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhhdCBVSW50MzJUb051
bWJlciBpcyBkZWFkIGJ1dCBpdHMKICAgICAgICAgICAgICAgICAgICAgLy8gY2hpbGQgaXNuJ3Q7
IGlmIHNvIHRoZW4gd2Ugc2hvdWxkIE1vdkhpbnQgdGhlIGNoaWxkLgorICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2Vu
ZXJhdGUoKQogICAgICAgICAgICAgICAgICAgICAgICAgJiYgcGVybWl0c09TUkJhY2t3YXJkUmV3
aXJpbmcobm9kZS0+Y2hpbGQxKCktPm9wKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y2hpbGQxKCkgPSBub2RlLT5jaGlsZDEoKS0+Y2hpbGQxKCk7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBDb25zaWRlciB0aGUgcG9zc2liaWxpdHkgdGhh
dCBVSW50MzJUb051bWJlciBnb3QgZm9sZGVkIHRvIGEKKyAgICAgICAgICAgICAgICAgICAgLy8g
Y29uc3RhbnQ7IHRoYXQncyB3aHkgdGhlICFoYXNDb25zdGFudCgpIGNoZWNrIGlzIGhlcmUuCiAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDEoKS0+c2hvdWxkR2VuZXJhdGUo
KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMSgpLT5zaG91bGRHZW5l
cmF0ZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbm9kZS0+Y2hpbGQxKCktPmhhc0Nv
bnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVs
dEZsYWdzKFpvbWJpZUhpbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQx
KCkgPSBFZGdlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoTW92SGludCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTE4OSw2ICsxOTUsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3Vt
ZW50czoKKyAgICAgICAgICAgICAgICAvLyBMZWF2ZSB0aGVzZSBpbnRhY3QuCisgICAgICAgICAg
ICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2MDM3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1MiwxMSArMTUyLDE2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBjYXNlIFZhbHVlQWRkOiB7Ci0gICAgICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUlu
dGVnZXJBZGQobm9kZSkpCisgICAgICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQo
bm9kZSkpIHsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChBcml0aEFkZCk7CisgICAgICAg
ICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRT
cGVjdWxhdGVOdW1iZXJFeHBlY3RpbmdEZWZpbmVkKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNl
Pihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJVc2U+KG5v
ZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcChBcml0aEFkZCk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlKTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NDgsNyAr
NjQ4LDYgQEAgcHVibGljOgogICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU1pZ2h0
Q2xvYmJlcikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICBjYXNlIFZhbHVlQWRkOgogICAgICAgICBjYXNlIENvbXBhcmVM
ZXNzOgogICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAgIGNhc2UgQ29tcGFyZUdy
ZWF0ZXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZp
c2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCwyMiArMTE4LDIyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKICAgICBtYWNybyhJbnQ1MlRvRG91YmxlLCBOb2RlUmVzdWx0TnVtYmVyKSBc
CiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBhcml0aG1ldGljIG9wZXJhdGlvbnMuICovXAotICAg
IG1hY3JvKEFyaXRoQWRkLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAot
ICAgIG1hY3JvKEFyaXRoU3ViLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAotICAgIG1hY3JvKEFyaXRoTmVnYXRlLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RHZW5l
cmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTXVsLCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoSU11bCwgTm9kZVJlc3VsdEludDMyIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoRGl2LCBOb2RlUmVzdWx0TnVtYmVyIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTW9kLCBOb2RlUmVzdWx0TnVtYmVyIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoQWJzLCBOb2RlUmVzdWx0TnVtYmVy
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTWluLCBOb2RlUmVzdWx0TnVt
YmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoTWF4LCBOb2RlUmVzdWx0
TnVtYmVyIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKEFyaXRoU3FydCwgTm9kZVJl
c3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aFNpbiwgTm9k
ZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aENvcywg
Tm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhBcml0aEFk
ZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoU3ViLCBOb2RlUmVzdWx0TnVt
YmVyKSBcCisgICAgbWFjcm8oQXJpdGhOZWdhdGUsIE5vZGVSZXN1bHROdW1iZXIpIFwKKyAgICBt
YWNybyhBcml0aE11bCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoSU11bCwg
Tm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFjcm8oQXJpdGhEaXYsIE5vZGVSZXN1bHROdW1iZXIp
IFwKKyAgICBtYWNybyhBcml0aE1vZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFy
aXRoQWJzLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhNaW4sIE5vZGVSZXN1
bHROdW1iZXIpIFwKKyAgICBtYWNybyhBcml0aE1heCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAg
IG1hY3JvKEFyaXRoU3FydCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoU2lu
LCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhDb3MsIE5vZGVSZXN1bHROdW1i
ZXIpIFwKICAgICBcCiAgICAgLyogQWRkIG9mIHZhbHVlcyBtYXkgZWl0aGVyIGJlIGFyaXRobWV0
aWMsIG9yIHJlc3VsdCBpbiBzdHJpbmcgY29uY2F0ZW5hdGlvbi4gKi9cCi0gICAgbWFjcm8oVmFs
dWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVy
KSBcCisgICAgbWFjcm8oVmFsdWVBZGQsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUg
fCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIFwKICAgICAvKiBQcm9wZXJ0eSBhY2Nlc3MuICov
XAogICAgIC8qIFB1dEJ5VmFsQWxpYXMgaW5kaWNhdGVzIGEgJ3B1dCcgYWxpYXNlcyBhIHByaW9y
IHdyaXRlIHRvIHRoZSBzYW1lIHByb3BlcnR5LiAqL1wKQEAgLTMyMCw2ICszMjAsNyBAQCBpbmxp
bmUgYm9vbCBwZXJtaXRzT1NSQmFja3dhcmRSZXdpcmluZyhOCiAgICAgY2FzZSBJZGVudGl0eToK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgY2FzZSBJbnQzMlRvRG91YmxlOgogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CiAg
ICAgY2FzZSBJbnQ1MlRvVmFsdWU6CiAgICAgY2FzZSBJbnQ1MlRvRG91YmxlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiAxNjAzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMwLDI4ICsxNDMwLDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZUNvbXBhcgogICAgIGJvb2xlYW5S
ZXN1bHQocmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2RlKiBub2RlKQotewotICAgIEpTVmFsdWVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUtPmNoaWxkMigpKTsKLQotICAgIEdQUlJlZyBvcDFUYWdHUFIgPSBvcDEudGFnR1BSKCk7Ci0g
ICAgR1BSUmVnIG9wMVBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwotICAgIEdQUlJlZyBv
cDJUYWdHUFIgPSBvcDIudGFnR1BSKCk7Ci0gICAgR1BSUmVnIG9wMlBheWxvYWRHUFIgPSBvcDIu
cGF5bG9hZEdQUigpOwotCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAKLSAgICBHUFJSZXN1
bHQyIHJlc3VsdFRhZyh0aGlzKTsKLSAgICBHUFJSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsK
LSAgICBpZiAoaXNLbm93bk5vdE51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25v
d25Ob3ROdW1iZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgY2FsbE9wZXJhdGlv
bihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXls
b2FkLmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9wMlRhZ0dQUiwgb3AyUGF5bG9h
ZEdQUik7Ci0gICAgZWxzZQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRk
LCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG9wMVRhZ0dQUiwgb3AxUGF5
bG9hZEdQUiwgb3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKTsKLSAgICAKLSAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbm9kZSk7Ci19Ci0KIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIG5v
ZGVVc2UpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZVVzZSwgTWFudWFs
T3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAgLTIxMDAsNyArMjA3OCwyOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCi0gICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIFZhbHVlQWRkOiB7CisgICAgICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEpTVmFsdWVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAorICAgICAgICBHUFJS
ZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOworICAgICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQ
UiA9IG9wMS5wYXlsb2FkR1BSKCk7CisgICAgICAgIEdQUlJlZyBvcDJUYWdHUFIgPSBvcDIudGFn
R1BSKCk7CisgICAgICAgIEdQUlJlZyBvcDJQYXlsb2FkR1BSID0gb3AyLnBheWxvYWRHUFIoKTsK
KyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgICAgICBH
UFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdFBheWxv
YWQodGhpcyk7CisgICAgICAgIGlmIChpc0tub3duTm90TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKSkgfHwgaXNLbm93bk5vdE51bWJlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0VGFn
LmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIG9w
MlRhZ0dQUiwgb3AyUGF5bG9hZEdQUik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9h
ZC5ncHIoKSwgb3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSLCBvcDJUYWdHUFIsIG9wMlBheWxvYWRH
UFIpOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJl
c3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBj
YXNlIEFyaXRoQWRkOgogICAgICAgICBjb21waWxlQWRkKG5vZGUpOwogICAgICAgICBicmVhazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgxNSwyNSArMTgxNSw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVDb21wYXIKICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2RlKiBub2RlKQotewotICAgIEpT
VmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgSlNWYWx1ZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKLSAgICAKLSAgICBHUFJSZWcgb3AxR1BSID0g
b3AxLmdwcigpOwotICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7Ci0gICAgCi0gICAgZmx1
c2hSZWdpc3RlcnMoKTsKLSAgICAKLSAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIGlm
IChpc0tub3duTm90TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNLbm93bk5vdE51
bWJlcihub2RlLT5jaGlsZDIoKS5ub2RlKCkpKQotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3AyR1BSKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdC5n
cHIoKSwgb3AxR1BSLCBvcDJHUFIpOwotICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3Ro
ZXJMb2dpY2FsTm90KEVkZ2Ugbm9kZVVzZSkKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlVXNlLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwpAQCAtMjQzMCw3ICsyNDEx
LDI1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
YnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFZhbHVlQWRkOgorICAgIGNhc2UgVmFs
dWVBZGQ6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAg
ICAgICAgCisgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CisgICAgICAgIEdQUlJl
ZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICAKKyAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgaWYg
KGlzS25vd25Ob3ROdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc0tub3duTm90TnVt
YmVyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyLCByZXN1bHQuZ3ByKCksIG9wMUdQUiwgb3AyR1BSKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFk
ZCwgcmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7CisgICAgICAgIAorICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCiAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY29tcGlsZUFkZChub2RlKTsKICAg
ICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MjUsMTIg
KzI4MjUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKE5vZGUqIG5vCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgVW50eXBlZFVzZTogewotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKLSAgICAgICAgY29t
cGlsZVZhbHVlQWRkKG5vZGUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKICAg
ICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAg
ICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHJldmlzaW9uIDE2MDM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzNyw3ICsxOTM3LDYgQEAg
cHVibGljOgogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0VG9PYmplY3RPck90aGVyRXF1
YWxpdHkoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCwgTm9kZSogYnJhbmNoTm9kZSk7
CiAgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0
Q2hpbGQpOwotICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVPYmplY3RPck90aGVyTG9naWNhbE5vdChFZGdlIHZhbHVlKTsKICAgICB2b2lkIGNvbXBpbGVM
b2dpY2FsTm90KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVTdHJpbmdFcXVhbGl0eShOb2RlKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkocmV2aXNpb24gMTYwMzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Niw4ICsyNjYsMTAgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBQaGFudG9tOgogICAgICAgICAgICAgY29tcGlsZVBoYW50b20o
KTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFyaXRoQWRkOgogICAgICAgICBj
YXNlIFZhbHVlQWRkOgorICAgICAgICAgICAgY29tcGlsZVZhbHVlQWRkKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgICAgIGNvbXBpbGVBZGRT
dWIoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFyaXRoU3ViOgpAQCAtNzcz
LDYgKzc3NSwxOSBAQCBwcml2YXRlOgogICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTiht
X2dyYXBoLCBtX25vZGUsIHNwZWN1bGF0ZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY29tcGls
ZVZhbHVlQWRkKCkKKyAgICB7CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb247
CisgICAgICAgIGlmICghKG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMSgpKS5tX3R5cGUg
JiBTcGVjRnVsbE51bWJlcikKKyAgICAgICAgICAgICYmICEobV9zdGF0ZS5mb3JOb2RlKG1fbm9k
ZS0+Y2hpbGQyKCkpLm1fdHlwZSAmIFNwZWNGdWxsTnVtYmVyKSkKKyAgICAgICAgICAgIG9wZXJh
dGlvbiA9IG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvcGVyYXRpb24gPSBvcGVyYXRpb25WYWxldUFkZDsKKyAgICAgICAgc2V0SlNWYWx1ZSh2
bUNhbGwoCisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uKSwgbV9jYWxsRnJh
bWUsCisgICAgICAgICAgICBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgY29tcGlsZUFkZFN1
YigpCiAgICAgewogICAgICAgICBib29sIGlzU3ViID0gIG1fbm9kZS0+b3AoKSA9PSBBcml0aFN1
YjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1pbnQzMi10
by1kb3VibGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9kZWFkLWludDMyLXRvLWRvdWJsZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC1pbnQzMi10by1kb3VibGUuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKGludCwgbykgeworICAgIHZhciB4
ID0gaW50OworICAgIG8uZiA9IHg7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkK
KyAgICAgICAgeCArPSAwLjU7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwOyArK2kpCisgICAgZm9vKDQyLCB7fSk7CisKK3ZhciBvID0ge2c6IDQzfTsKK2Zv
byg0Nywgbyk7CitpZiAoby5mICE9IDQ3KQorICAgIHRocm93ICJFcnJvcjogby5mIGlzICIgKyBv
LmY7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RlYWQtdWludDMy
LXRvLW51bWJlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2RlYWQtdWludDMyLXRvLW51bWJlci5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGVhZC11aW50MzItdG8tbnVtYmVyLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhLCBvKSB7CisgICAgdmFy
IHggPSBhID4+PiAwOworICAgIG8uZiA9IHggfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwOyArK2kpCisgICAgICAgIHgrKzsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICBmb28oNDIsIHt9KTsKKwordmFyIG8gPSB7ZzogNDN9
OworZm9vKDQ3LCBvKTsKK2lmIChvLmYgIT0gNDcpCisgICAgdGhyb3cgIkVycm9yOiBvLmYgaXMg
IiArIG8uZjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>220186</attachid>
            <date>2014-01-01 09:47:32 -0800</date>
            <delta_ts>2014-01-02 10:26:26 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22225</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYxMTg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBA
CisyMDE0LTAxLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmF0aW9uYWxpemUgREZHIERDRQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI1NTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBBZGRzIHRoZSBhYmlsaXR5IHRvIERDRSBtb3JlIHRoaW5ncy4g
SXQncyBub3cgdGhlIGNhc2UgdGhhdCBpZiBhIG5vZGUgaXMgY29tcGxldGVseQorICAgICAgICBw
dXJlLCB3ZSBjbGVhciBOb2RlTXVzdEdlbmVyYXRlIGFuZCB0aGUgbm9kZSBiZWNvbWVzIGEgRENF
IGNhbmRpZGF0ZS4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAq
IGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6Cisg
ICAgICAgICogZGZnL0RGR0RDRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEQ0VQaGFz
ZTo6Y2xlYW5WYXJpYWJsZXMpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjbG9iYmVyc1dvcmxkKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQWRkKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
VmFsdWVBZGQpOgorCiAyMDEzLTEyLTMwICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTYxMTU3LCByMTYx
MTU4LCByMTYxMTYwLCByMTYxMTYxLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24g
MTYxMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNDAsNyArMzQwLDE5IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgfQog
ICAgICAgICAKLSAgICBjYXNlIFZhbHVlQWRkOgorICAgIGNhc2UgVmFsdWVBZGQ6IHsKKyAgICAg
ICAgSlNWYWx1ZSBsZWZ0ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAg
ICAgSlNWYWx1ZSByaWdodCA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAg
ICAgIGlmIChsZWZ0ICYmIHJpZ2h0ICYmIGxlZnQuaXNOdW1iZXIoKSAmJiByaWdodC5pc051bWJl
cigpKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBKU1ZhbHVlKGxlZnQuYXNOdW1i
ZXIoKSArIHJpZ2h0LmFzTnVtYmVyKCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIEFTU0VSVChub2RlLT5iaW5hcnlVc2VLaW5kKCkgPT0gVW50eXBlZFVzZSk7Cisg
ICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9iYmVyTGltaXQpOworICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY1N0cmluZyB8IFNwZWNCeXRlY29kZU51bWJl
cik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcml0aEFkZDog
ewogICAgICAgICBKU1ZhbHVlIGxlZnQgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgp
OwogICAgICAgICBKU1ZhbHVlIHJpZ2h0ID0gZm9yTm9kZShub2RlLT5jaGlsZDIoKSkudmFsdWUo
KTsKQEAgLTM2OCw5ICszODAsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNEb3VibGUp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChub2RlLT5vcCgpID09IFZhbHVlQWRkKTsKLSAgICAgICAgICAgIGNsb2JiZXJX
b3JsZChub2RlLT5jb2RlT3JpZ2luLCBjbG9iYmVyTGltaXQpOwotICAgICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNTdHJpbmcgfCBTcGVjQnl0ZWNvZGVOdW1iZXIpOworICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM5LDcgKzEyMzks
NiBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgIC8vIEhhbmRsZSBub2RlcyB0aGF0
IGFyZSBjb25kaXRpb25hbGx5IHB1cmU6IHRoZXNlIGFyZSBwdXJlLCBhbmQgY2FuCiAgICAgICAg
IC8vIGJlIENTRSdkLCBzbyBsb25nIGFzIHRoZSBwcmVkaWN0aW9uIGlzIHRoZSBvbmUgd2Ugd2Fu
dC4KLSAgICAgICAgY2FzZSBWYWx1ZUFkZDoKICAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKICAg
ICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgICAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9u
IDE2MTEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMDQsMjUgKzIwNCwxMSBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBJbjoKICAgICBjYXNlIEdldE15QXJndW1lbnRz
TGVuZ3RoU2FmZToKICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbFNhZmU6CisgICAgY2FzZSBW
YWx1ZUFkZDoKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKFdvcmxkKTsKICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBzd2l0
Y2ggKG5vZGUtPmJpbmFyeVVzZUtpbmQoKSkgewotICAgICAgICBjYXNlIEludDMyVXNlOgotICAg
ICAgICBjYXNlIE51bWJlclVzZToKLSAgICAgICAgY2FzZSBNYWNoaW5lSW50VXNlOgotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIFVudHlwZWRVc2U6Ci0gICAgICAgICAgICByZWFk
KFdvcmxkKTsKLSAgICAgICAgICAgIHdyaXRlKFdvcmxkKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBH
ZXRDYWxsZWU6CiAgICAgICAgIHJlYWQoQWJzdHJhY3RIZWFwKFZhcmlhYmxlcywgSlNTdGFjazo6
Q2FsbGVlKSk7CiAgICAgICAgIHJldHVybjsKQEAgLTU3OSwzMCArNTY1LDE3IEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgfQogICAgICAgICByZXR1
cm47CiAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZUVxOgogICAgIGNhc2UgQ29tcGFyZUxlc3M6
CiAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CiAgICAg
Y2FzZSBDb21wYXJlR3JlYXRlckVxOgotICAgICAgICBpZiAoZ3JhcGguaXNQcmVkaWN0ZWROdW1l
cmljYWwobm9kZSkpCisgICAgICAgIGlmICghbm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlwZWRV
c2UpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByZWFkKFdvcmxkKTsKICAgICAgICAg
d3JpdGUoV29ybGQpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAotICAgIGNhc2UgQ29tcGFy
ZUVxOgotICAgICAgICBpZiAoZ3JhcGguaXNQcmVkaWN0ZWROdW1lcmljYWwobm9kZSkKLSAgICAg
ICAgICAgIHx8IG5vZGUtPmlzQmluYXJ5VXNlS2luZChTdHJpbmdVc2UpCi0gICAgICAgICAgICB8
fCBub2RlLT5pc0JpbmFyeVVzZUtpbmQoU3RyaW5nSWRlbnRVc2UpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0g
T2JqZWN0VXNlIHx8IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBPYmplY3RPck90aGVyVXNl
KQotICAgICAgICAgICAgJiYgKG5vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBPYmplY3RVc2Ug
fHwgbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IE9iamVjdE9yT3RoZXJVc2UpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgcmVhZChXb3JsZCk7Ci0gICAgICAgIHdy
aXRlKFdvcmxkKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKICAgICBjYXNlIFRvU3RyaW5n
OgogICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBj
YXNlIFN0cmluZ09iamVjdFVzZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RENFUGhhc2UuY3BwCShyZXZpc2lvbiAxNjExMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RDRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDcgKzI1OSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAobm9kZS0+
b3AoKSA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEo
KS5ub2RlKCk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gUGhpKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBQaGkgfHwgbm9kZS0+b3AoKSA9PSBT
ZXRBcmd1bWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
IHsKICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGVzW2ldID0gbm9kZTsKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2MTEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1NCwxMSArMTU0LDE2
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhbHVl
QWRkOiB7Ci0gICAgICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpCisg
ICAgICAgICAgICBpZiAoYXR0ZW1wdFRvTWFrZUludGVnZXJBZGQobm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICBub2RlLT5zZXRPcChBcml0aEFkZCk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xl
YXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZU51bWJlckV4cGVjdGluZ0RlZmluZWQobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBu
b2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxOdW1iZXJV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBmaXhFZGdlPE51bWJlclVzZT4o
bm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wKEFyaXRoQWRkKTsK
KyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKQEAgLTMyNiwxNyArMzMxLDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxJbnQzMlVzZT4o
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8SW50MzJVc2U+KG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoZW5hYmxlSW50NTIoKQogICAgICAgICAgICAgICAg
ICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZU1hY2hpbmVJbnQobm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBub2RlLT5jaGlsZDIoKS5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNYWNo
aW5lSW50VXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxNYWNo
aW5lSW50VXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJG
bGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZU51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCksIG5vZGUtPmNoaWxkMigpLm5vZGUo
KSkpIHsKICAgICAgICAgICAgICAgICBmaXhFZGdlPE51bWJlclVzZT4obm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8TnVtYmVyVXNlPihub2RlLT5jaGlsZDIoKSk7Cisg
ICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNs
b2JiZXJzV29ybGQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKG5vZGUtPm9wKCkgIT0gQ29tcGFyZUVxKQpAQCAtMzQ0LDMxICszNTIsMzcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVCb29sZWFu
KG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgbm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkgewogICAgICAg
ICAgICAgICAgIGZpeEVkZ2U8Qm9vbGVhblVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgICAgIGZpeEVkZ2U8Qm9vbGVhblVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAg
ICAgIG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxk
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nSWRlbnQoKSAmJiBub2RlLT5j
aGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nSWRlbnQoKSkgewogICAgICAgICAgICAgICAg
IGZpeEVkZ2U8U3RyaW5nSWRlbnRVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAg
ICBmaXhFZGdlPFN0cmluZ0lkZW50VXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+Y2xlYXJGbGFncyhOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVTdHJpbmcoKSAmJiBub2RlLT5jaGlsZDIo
KS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkgJiYgR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnMg
Pj0gNykgewogICAgICAgICAgICAgICAgIGZpeEVkZ2U8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KG5vZGUtPmNoaWxkMigpKTsK
KyAgICAgICAgICAgICAgICBub2RlLT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYm
IG5vZGUtPmNoaWxkMigpLT5zaG91bGRTcGVjdWxhdGVPYmplY3QoKSkgewogICAgICAgICAgICAg
ICAgIGZpeEVkZ2U8T2JqZWN0VXNlPihub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAg
Zml4RWRnZTxPYmplY3RVc2U+KG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICBub2Rl
LT5jbGVhckZsYWdzKE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobm9kZS0+
Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU9iamVjdCgpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3RPck90aGVyKCkpIHsKICAgICAgICAgICAgICAgICBmaXhFZGdlPE9i
amVjdFVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8T2JqZWN0
T3JPdGhlclVzZT4obm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgICAgIG5vZGUtPmNsZWFy
RmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEo
KS0+c2hvdWxkU3BlY3VsYXRlT2JqZWN0T3JPdGhlcigpICYmIG5vZGUtPmNoaWxkMigpLT5zaG91
bGRTcGVjdWxhdGVPYmplY3QoKSkgewogICAgICAgICAgICAgICAgIGZpeEVkZ2U8T2JqZWN0T3JP
dGhlclVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIGZpeEVkZ2U8T2JqZWN0
VXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgbm9kZS0+Y2xlYXJGbGFncyhO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNjExMjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0OCwxMyArNjQ4LDYg
QEAgcHVibGljOgogICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYgTm9kZU1pZ2h0Q2xvYmJl
cikpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewotICAgICAgICBjYXNlIFZhbHVlQWRkOgotICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgot
ICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6
Ci0gICAgICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXJFcToKLSAgICAgICAgY2FzZSBDb21wYXJlRXE6
Ci0gICAgICAgICAgICByZXR1cm4gIWlzUHJlZGljdGVkTnVtZXJpY2FsKG5vZGUpOwogICAgICAg
ICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgICAgICBj
YXNlIFB1dEJ5VmFsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAkocmV2aXNpb24gMTYxMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMiArOTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEludmFsaWRhdGlvblBvaW50LCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgXAogICAgIC8qIE5vZGVzIGZvciBiaXR3aXNlIG9wZXJhdGlvbnMuICov
XAotICAgIG1hY3JvKEJpdEFuZCwgTm9kZVJlc3VsdEludDMyIHwgTm9kZU11c3RHZW5lcmF0ZSkg
XAotICAgIG1hY3JvKEJpdE9yLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
Ci0gICAgbWFjcm8oQml0WG9yLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
Ci0gICAgbWFjcm8oQml0TFNoaWZ0LCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCi0gICAgbWFjcm8oQml0UlNoaWZ0LCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdlbmVy
YXRlKSBcCi0gICAgbWFjcm8oQml0VVJTaGlmdCwgTm9kZVJlc3VsdEludDMyIHwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAorICAgIG1hY3JvKEJpdEFuZCwgTm9kZVJlc3VsdEludDMyKSBcCisgICAgbWFj
cm8oQml0T3IsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEJpdFhvciwgTm9kZVJlc3Vs
dEludDMyKSBcCisgICAgbWFjcm8oQml0TFNoaWZ0LCBOb2RlUmVzdWx0SW50MzIpIFwKKyAgICBt
YWNybyhCaXRSU2hpZnQsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEJpdFVSU2hpZnQs
IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIC8qIEJpdHdpc2Ugb3BlcmF0b3JzIGNhbGwgVG9JbnQz
MiBvbiB0aGVpciBvcGVyYW5kcy4gKi9cCiAgICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVz
dWx0SW50MzIpIFwKICAgICAvKiBVc2VkIHRvIGJveCB0aGUgcmVzdWx0IG9mIFVSU2hpZnQgbm9k
ZXMgKHJlc3VsdCBoYXMgcmFuZ2UgMC4uMl4zMi0xKS4gKi9cCkBAIC0xMTgsMjIgKzExOCwyMiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oSW50NTJUb0RvdWJs
ZSwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgYXJpdGhtZXRp
YyBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhBcml0aEFkZCwgTm9kZVJlc3VsdE51bWJlciB8
IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aFN1YiwgTm9kZVJlc3VsdE51bWJl
ciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aE5lZ2F0ZSwgTm9kZVJlc3Vs
dE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aE11bCwgTm9kZVJl
c3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aElNdWwsIE5v
ZGVSZXN1bHRJbnQzMiB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aERpdiwg
Tm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0aE1v
ZCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhBcml0
aEFicywgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNybyhB
cml0aE1pbiwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBtYWNy
byhBcml0aE1heCwgTm9kZVJlc3VsdE51bWJlciB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICBt
YWNybyhBcml0aFNxcnQsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0g
ICAgbWFjcm8oQXJpdGhTaW4sIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
Ci0gICAgbWFjcm8oQXJpdGhDb3MsIE5vZGVSZXN1bHROdW1iZXIgfCBOb2RlTXVzdEdlbmVyYXRl
KSBcCisgICAgbWFjcm8oQXJpdGhBZGQsIE5vZGVSZXN1bHROdW1iZXIpIFwKKyAgICBtYWNybyhB
cml0aFN1YiwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFyaXRoTmVnYXRlLCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhNdWwsIE5vZGVSZXN1bHROdW1iZXIpIFwK
KyAgICBtYWNybyhBcml0aElNdWwsIE5vZGVSZXN1bHRJbnQzMikgXAorICAgIG1hY3JvKEFyaXRo
RGl2LCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhNb2QsIE5vZGVSZXN1bHRO
dW1iZXIpIFwKKyAgICBtYWNybyhBcml0aEFicywgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1h
Y3JvKEFyaXRoTWluLCBOb2RlUmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhNYXgsIE5v
ZGVSZXN1bHROdW1iZXIpIFwKKyAgICBtYWNybyhBcml0aFNxcnQsIE5vZGVSZXN1bHROdW1iZXIp
IFwKKyAgICBtYWNybyhBcml0aFNpbiwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3JvKEFy
aXRoQ29zLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgXAogICAgIC8qIEFkZCBvZiB2YWx1ZXMg
bWF5IGVpdGhlciBiZSBhcml0aG1ldGljLCBvciByZXN1bHQgaW4gc3RyaW5nIGNvbmNhdGVuYXRp
b24uICovXAotICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVy
YXRlIHwgTm9kZU1pZ2h0Q2xvYmJlcikgXAorICAgIG1hY3JvKFZhbHVlQWRkLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBcCiAgICAg
LyogUHJvcGVydHkgYWNjZXNzLiAqL1wKICAgICAvKiBQdXRCeVZhbEFsaWFzIGluZGljYXRlcyBh
ICdwdXQnIGFsaWFzZXMgYSBwcmlvciB3cml0ZSB0byB0aGUgc2FtZSBwcm9wZXJ0eS4gKi9cCkBA
IC0yMDgsMTIgKzIwOCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
bWFjcm8oU3RyaW5nRnJvbUNoYXJDb2RlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBcCiAgICAgLyog
Tm9kZXMgZm9yIGNvbXBhcmlzb24gb3BlcmF0aW9ucy4gKi9cCi0gICAgbWFjcm8oQ29tcGFyZUxl
c3MsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2Ji
ZXIpIFwKLSAgICBtYWNybyhDb21wYXJlTGVzc0VxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVN
dXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCi0gICAgbWFjcm8oQ29tcGFyZUdyZWF0
ZXIsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVNaWdodENsb2Ji
ZXIpIFwKLSAgICBtYWNybyhDb21wYXJlR3JlYXRlckVxLCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVyKSBcCi0gICAgbWFjcm8oQ29tcGFyZUVx
LCBOb2RlUmVzdWx0Qm9vbGVhbiB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlTWlnaHRDbG9iYmVy
KSBcCi0gICAgbWFjcm8oQ29tcGFyZUVxQ29uc3RhbnQsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKENvbXBhcmVMZXNzLCBOb2RlUmVzdWx0Qm9vbGVh
biB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKENv
bXBhcmVMZXNzRXEsIE5vZGVSZXN1bHRCb29sZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVD
bG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oQ29tcGFyZUdyZWF0ZXIsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8o
Q29tcGFyZUdyZWF0ZXJFcSwgTm9kZVJlc3VsdEJvb2xlYW4gfCBOb2RlTXVzdEdlbmVyYXRlIHwg
Tm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhDb21wYXJlRXEsIE5vZGVSZXN1bHRCb29s
ZWFuIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8o
Q29tcGFyZUVxQ29uc3RhbnQsIE5vZGVSZXN1bHRCb29sZWFuKSBcCiAgICAgbWFjcm8oQ29tcGFy
ZVN0cmljdEVxLCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIG1hY3JvKENvbXBhcmVTdHJpY3RF
cUNvbnN0YW50LCBOb2RlUmVzdWx0Qm9vbGVhbikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTYxMTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxOCwyOCArMTQxOCw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVDb21wYXIKICAgICBib29sZWFuUmVzdWx0KHJl
c3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKLXsKLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGls
ZDIoKSk7Ci0KLSAgICBHUFJSZWcgb3AxVGFnR1BSID0gb3AxLnRhZ0dQUigpOwotICAgIEdQUlJl
ZyBvcDFQYXlsb2FkR1BSID0gb3AxLnBheWxvYWRHUFIoKTsKLSAgICBHUFJSZWcgb3AyVGFnR1BS
ID0gb3AyLnRhZ0dQUigpOwotICAgIEdQUlJlZyBvcDJQYXlsb2FkR1BSID0gb3AyLnBheWxvYWRH
UFIoKTsKLQotICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAgCi0gICAgR1BSUmVzdWx0MiByZXN1
bHRUYWcodGhpcyk7Ci0gICAgR1BSUmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7Ci0gICAgaWYg
KGlzS25vd25Ob3ROdW1iZXIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSB8fCBpc0tub3duTm90TnVt
YmVyKG5vZGUtPmNoaWxkMigpLm5vZGUoKSkpCi0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIo
KSwgb3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSLCBvcDJUYWdHUFIsIG9wMlBheWxvYWRHUFIpOwot
ICAgIGVsc2UKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1ZUFkZCwgcmVzdWx0
VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIs
IG9wMlRhZ0dQUiwgb3AyUGF5bG9hZEdQUik7Ci0gICAgCi0gICAganNWYWx1ZVJlc3VsdChyZXN1
bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG5vZGUpOwotfQotCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSBub2RlVXNlKQog
ewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVVc2UsIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CkBAIC0yMDcyLDcgKzIwNTAsMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAg
IGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBWYWx1ZUFkZDogeworICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBv
cDIodGhpcywgbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIG9wMVRh
Z0dQUiA9IG9wMS50YWdHUFIoKTsKKyAgICAgICAgR1BSUmVnIG9wMVBheWxvYWRHUFIgPSBvcDEu
cGF5bG9hZEdQUigpOworICAgICAgICBHUFJSZWcgb3AyVGFnR1BSID0gb3AyLnRhZ0dQUigpOwor
ICAgICAgICBHUFJSZWcgb3AyUGF5bG9hZEdQUiA9IG9wMi5wYXlsb2FkR1BSKCk7CisgICAgICAg
IAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICAKKyAgICAgICAgR1BSUmVzdWx0
MiByZXN1bHRUYWcodGhpcyk7CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMp
OworICAgICAgICBpZiAoaXNLbm93bk5vdE51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8
IGlzS25vd25Ob3ROdW1iZXIobm9kZS0+Y2hpbGQyKCkubm9kZSgpKSkKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGROb3ROdW1iZXIsIHJlc3VsdFRhZy5ncHIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSwgb3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSLCBvcDJUYWdHUFIs
IG9wMlBheWxvYWRHUFIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblZhbHVlQWRkLCByZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCks
IG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiwgb3AyVGFnR1BSLCBvcDJQYXlsb2FkR1BSKTsKKyAg
ICAgICAgCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXls
b2FkLmdwcigpLCBub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBBcml0
aEFkZDoKICAgICAgICAgY29tcGlsZUFkZChub2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHJldmlzaW9uIDE2MTEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MDYsMjUgKzE4MDYsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQ29tcGFyCiAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHQuZ3ByKCksIG5vZGUsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogfQogCi12b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kZSogbm9kZSkKLXsKLSAgICBKU1ZhbHVlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0
aGlzLCBub2RlLT5jaGlsZDIoKSk7Ci0gICAgCi0gICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIo
KTsKLSAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwotICAgIAotICAgIGZsdXNoUmVnaXN0
ZXJzKCk7Ci0gICAgCi0gICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICBpZiAoaXNLbm93
bk5vdE51bWJlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpIHx8IGlzS25vd25Ob3ROdW1iZXIobm9k
ZS0+Y2hpbGQyKCkubm9kZSgpKSkKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25WYWx1
ZUFkZE5vdE51bWJlciwgcmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7Ci0gICAgZWxzZQot
ICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkLCByZXN1bHQuZ3ByKCksIG9w
MUdQUiwgb3AyR1BSKTsKLSAgICAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9k
ZSk7Ci19Ci0KIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNh
bE5vdChFZGdlIG5vZGVVc2UpCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZVVzZSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uKTsKQEAgLTI0MDMsNyArMjM4NCwyNSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIFZhbHVlQWRkOiB7
CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIG9wMih0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIAor
ICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOworICAgICAgICBHUFJSZWcgb3AyR1BS
ID0gb3AyLmdwcigpOworICAgICAgICAKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAg
ICAgCisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIGlmIChpc0tub3du
Tm90TnVtYmVyKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkgfHwgaXNLbm93bk5vdE51bWJlcihub2Rl
LT5jaGlsZDIoKS5ub2RlKCkpKQorICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25W
YWx1ZUFkZE5vdE51bWJlciwgcmVzdWx0LmdwcigpLCBvcDFHUFIsIG9wMkdQUik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3Vs
dC5ncHIoKSwgb3AxR1BSLCBvcDJHUFIpOworICAgICAgICAKKyAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAog
ICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgIGNvbXBpbGVBZGQobm9kZSk7CiAgICAgICAgIGJy
ZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHJldmlzaW9uIDE2MTEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjg1LDEyICsyNjg1LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFkZChOb2RlKiBubwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFVudHlwZWRVc2U6IHsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQobm9kZS0+b3AoKSA9PSBWYWx1ZUFkZCk7Ci0gICAgICAgIGNvbXBpbGVWYWx1
ZUFkZChub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAgICAgCiAgICAgZGVmYXVs
dDoKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAxNjExMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NjYsNyArMTk2Niw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdFRvT2JqZWN0T3JPdGhlckVxdWFsaXR5KEVk
Z2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQsIE5vZGUqIGJyYW5jaE5vZGUpOwogICAgIHZv
aWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVPYmplY3RU
b09iamVjdE9yT3RoZXJFcXVhbGl0eShFZGdlIGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkKTsK
LSAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3QoRWRnZSB2YWx1ZSk7CiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5v
dChOb2RlKik7CiAgICAgdm9pZCBjb21waWxlU3RyaW5nRXF1YWxpdHkoTm9kZSopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJl
dmlzaW9uIDE2MTEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsOCArMjYxLDEwIEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgUGhhbnRvbToKICAgICAgICAgICAgIGNvbXBpbGVQaGFudG9tKCk7CiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBcml0aEFkZDoKICAgICAgICAgY2FzZSBWYWx1
ZUFkZDoKKyAgICAgICAgICAgIGNvbXBpbGVWYWx1ZUFkZCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQXJpdGhBZGQ6CiAgICAgICAgICAgICBjb21waWxlQWRkU3ViKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBcml0aFN1YjoKQEAgLTc2Myw2ICs3NjUs
MTkgQEAgcHJpdmF0ZToKICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwg
bV9ub2RlLCBzcGVjdWxhdGUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVWYWx1ZUFk
ZCgpCisgICAgeworICAgICAgICBKX0pJVE9wZXJhdGlvbl9FSkogb3BlcmF0aW9uOworICAgICAg
ICBpZiAoIShtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0Z1
bGxOdW1iZXIpCisgICAgICAgICAgICAmJiAhKG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxk
MigpKS5tX3R5cGUgJiBTcGVjRnVsbE51bWJlcikpCisgICAgICAgICAgICBvcGVyYXRpb24gPSBv
cGVyYXRpb25WYWx1ZUFkZE5vdE51bWJlcjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3Bl
cmF0aW9uID0gb3BlcmF0aW9uVmFsZXVBZGQ7CisgICAgICAgIHNldEpTVmFsdWUodm1DYWxsKAor
ICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbiksIG1fY2FsbEZyYW1lLAorICAg
ICAgICAgICAgbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMigpKSkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGNvbXBpbGVBZGRTdWIoKQogICAg
IHsKICAgICAgICAgYm9vbCBpc1N1YiA9ICBtX25vZGUtPm9wKCkgPT0gQXJpdGhTdWI7Cg==
</data>
<flag name="review"
          id="243869"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>