<?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>147760</bug_id>
          
          <creation_ts>2015-08-06 17:49:28 -0700</creation_ts>
          <short_desc>Introduce put_by_id like IC into put_by_val when the given name is String or Symbol</short_desc>
          <delta_ts>2015-09-15 04:11:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>149158</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1115570</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-06 17:49:28 -0700</bug_when>
    <thetext>Apply https://bugs.webkit.org/show_bug.cgi?id=147480 optimization to put_by_val case.
It improves the performance of the code using ES6 Symbol.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115876</commentid>
    <comment_count>1</comment_count>
      <attachid>258527</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 14:17:27 -0700</bug_when>
    <thetext>Created attachment 258527
Patch

WIP: the logic is almost completed. I&apos;ll do a refactoring &amp; add tests (splitting out the ident guard in baseline code to the function etc.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115902</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 15:26:24 -0700</bug_when>
    <thetext>This will improve the following

var obj = {
  [key]: value
};

initializations at the same time :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115936</commentid>
    <comment_count>3</comment_count>
      <attachid>258544</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 16:53:02 -0700</bug_when>
    <thetext>Created attachment 258544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115938</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 16:59:14 -0700</bug_when>
    <thetext>Benchmark results.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on Yusukes-MacBook-Pro (MacBookPro11,3).

VMs tested:
&quot;master&quot; at /Users/yusukesuzuki/development/WebKit/WebKitBuild/master-for-put-by-val/Release/jsc
&quot;ic&quot; at /Users/yusukesuzuki/development/WebKit/WebKitBuild/put-by-val/Release/jsc

Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                          master                      ic                                        
SunSpider:
   3d-cube                                            4.6475+-0.5510            4.5507+-0.2860          might be 1.0213x faster
   3d-morph                                           5.3203+-0.0821     ?      5.4310+-0.5118        ? might be 1.0208x slower
   3d-raytrace                                        5.6584+-0.7394            5.4026+-0.4226          might be 1.0473x faster
   access-binary-trees                                1.9963+-0.1685            1.9078+-0.1089          might be 1.0464x faster
   access-fannkuch                                    5.4057+-0.2264     ?      5.5830+-0.3601        ? might be 1.0328x slower
   access-nbody                                       2.5447+-0.0383     ?      2.6700+-0.2888        ? might be 1.0492x slower
   access-nsieve                                      2.9828+-0.0873     ?      3.1432+-0.3277        ? might be 1.0538x slower
   bitops-3bit-bits-in-byte                           1.4982+-0.0742            1.4454+-0.0591          might be 1.0366x faster
   bitops-bits-in-byte                                3.2570+-0.0762     ?      3.3142+-0.1078        ? might be 1.0176x slower
   bitops-bitwise-and                                 2.1485+-0.3037            1.9880+-0.0391          might be 1.0807x faster
   bitops-nsieve-bits                                 2.9438+-0.0831            2.9420+-0.0261        
   controlflow-recursive                              2.0002+-0.1176     ?      2.0281+-0.1715        ? might be 1.0139x slower
   crypto-aes                                         3.8498+-0.2089     ?      4.0342+-0.4514        ? might be 1.0479x slower
   crypto-md5                                         2.4705+-0.1021     ?      2.5795+-0.1916        ? might be 1.0441x slower
   crypto-sha1                                        2.4130+-0.1983     ?      2.5687+-0.5378        ? might be 1.0645x slower
   date-format-tofte                                  6.7535+-0.2203     ?      6.7904+-0.2469        ?
   date-format-xparb                                  4.7384+-0.6966            4.5208+-0.2107          might be 1.0481x faster
   math-cordic                                        2.8754+-0.3016            2.7780+-0.0323          might be 1.0351x faster
   math-partial-sums                                  5.3906+-0.1271            5.3134+-0.1641          might be 1.0145x faster
   math-spectral-norm                                 1.8530+-0.0518            1.8110+-0.0554          might be 1.0232x faster
   regexp-dna                                         6.6661+-0.1668            6.5053+-0.2547          might be 1.0247x faster
   string-base64                                      4.3551+-0.2986     ?      4.3760+-0.1540        ?
   string-fasta                                       5.7739+-0.1392     ?      5.7973+-0.0913        ?
   string-tagcloud                                    8.2440+-0.3629     ?      8.2941+-0.4753        ?
   string-unpack-code                                20.2731+-0.5952     ?     20.5186+-0.8743        ? might be 1.0121x slower
   string-validate-input                              4.6454+-0.2557            4.6300+-0.3546        

   &lt;arithmetic&gt;                                       4.6425+-0.0577     ?      4.6509+-0.0370        ? might be 1.0018x slower

                                                          master                      ic                                        
LongSpider:
   3d-cube                                          790.6931+-13.5212         787.5883+-10.1992       
   3d-morph                                        1557.5891+-37.6890        1540.4322+-5.6723          might be 1.0111x faster
   3d-raytrace                                      640.2073+-11.8724    ?    642.3800+-6.6345        ?
   access-binary-trees                              834.2610+-7.5012          826.9417+-16.3687       
   access-fannkuch                                  283.0827+-10.2899    ?    283.9883+-5.2871        ?
   access-nbody                                     524.9025+-11.3726         524.0589+-6.5879        
   access-nsieve                                    364.8574+-20.5739         362.6217+-22.9277       
   bitops-3bit-bits-in-byte                          41.2823+-2.6050           41.0333+-0.7918        
   bitops-bits-in-byte                               81.5703+-2.0667     ?     81.7900+-1.6201        ?
   bitops-nsieve-bits                               414.2668+-11.9621    ?    421.4171+-9.9181        ? might be 1.0173x slower
   controlflow-recursive                            432.9592+-8.9942     ?    435.4891+-7.3905        ?
   crypto-aes                                       591.4529+-14.4930    ?    600.5972+-11.5379       ? might be 1.0155x slower
   crypto-md5                                       483.5461+-8.4535          481.2392+-3.3776        
   crypto-sha1                                      657.1677+-28.2210         650.8355+-6.2456        
   date-format-tofte                                517.4740+-5.5356     ?    519.7972+-4.6140        ?
   date-format-xparb                                640.6627+-5.5499     ?    645.3862+-4.8937        ?
   hash-map                                         154.9420+-2.8106     ?    155.7394+-2.9022        ?
   math-cordic                                      504.1088+-6.9831          498.2603+-6.9737          might be 1.0117x faster
   math-partial-sums                                505.8552+-5.5137          503.8810+-6.6426        
   math-spectral-norm                               567.8605+-8.4526     ?    570.8371+-7.9574        ?
   string-base64                                    355.7360+-8.6966     ?    358.8772+-13.1868       ?
   string-fasta                                     371.1290+-4.3836          369.3702+-6.7752        
   string-tagcloud                                  184.1840+-2.9461          183.5414+-3.3726        

   &lt;geometric&gt;                                      400.6519+-3.0585     ?    400.7128+-2.3267        ? might be 1.0002x slower

                                                          master                      ic                                        
V8Spider:
   crypto                                            49.8808+-3.4730     ?     51.0818+-2.9611        ? might be 1.0241x slower
   deltablue                                         82.6540+-4.0320     ?     87.5795+-11.8431       ? might be 1.0596x slower
   earley-boyer                                      39.6241+-1.1683     ?     39.9680+-0.9492        ?
   raytrace                                          29.6940+-3.4426     ?     29.8050+-0.9096        ?
   regexp                                            71.5437+-20.3625          63.4915+-1.5867          might be 1.1268x faster
   richards                                          71.1310+-2.1558     ?     71.3584+-1.4709        ?
   splay                                             32.9628+-1.7137     ?     35.0010+-1.3698        ? might be 1.0618x slower

   &lt;geometric&gt;                                       50.1934+-1.5189     ?     50.5430+-1.5713        ? might be 1.0070x slower

                                                          master                      ic                                        
Octane:
   encrypt                                           0.20858+-0.00695          0.20772+-0.00529       
   decrypt                                           3.55052+-0.10304          3.49026+-0.09273         might be 1.0173x faster
   deltablue                                x2       0.15801+-0.00199    ?     0.15917+-0.00111       ?
   earley                                            0.28187+-0.00428    ?     0.28201+-0.00501       ?
   boyer                                             4.29192+-0.17404    ?     4.32426+-0.27663       ?
   navier-stokes                            x2       5.12083+-0.08797    ?     5.17124+-0.10096       ?
   raytrace                                 x2       1.11400+-0.03343          1.04216+-0.10683         might be 1.0689x faster
   richards                                 x2       0.10178+-0.00182    ?     0.10476+-0.00515       ? might be 1.0293x slower
   splay                                    x2       0.35192+-0.01115          0.34540+-0.00302         might be 1.0188x faster
   regexp                                   x2      25.63553+-0.39604    !    26.44431+-0.34988       ! definitely 1.0315x slower
   pdfjs                                    x2      38.47738+-0.74088    ?    38.53297+-0.74144       ?
   mandreel                                 x2      45.99513+-1.43799    ?    46.45711+-1.72120       ? might be 1.0100x slower
   gbemu                                    x2      36.10856+-3.06677         34.82200+-0.56778         might be 1.0369x faster
   closure                                           0.57473+-0.00418    ?     0.57615+-0.00307       ?
   jquery                                            7.46465+-0.18401          7.36353+-0.16144         might be 1.0137x faster
   box2d                                    x2      10.26098+-0.28105    ?    10.31194+-0.17225       ?
   zlib                                     x2     392.32231+-7.39001        389.48822+-6.64758       
   typescript                               x2     664.83917+-26.82186   ?   677.30731+-20.06463      ? might be 1.0188x slower

   &lt;geometric&gt;                                       5.79189+-0.04609          5.78043+-0.03344         might be 1.0020x faster

                                                          master                      ic                                        
Kraken:
   ai-astar                                          241.365+-5.118            238.731+-14.272          might be 1.0110x faster
   audio-beat-detection                               59.148+-0.479             58.943+-0.492         
   audio-dft                                          97.255+-2.436      ?      99.207+-3.193         ? might be 1.0201x slower
   audio-fft                                          35.490+-0.199             35.489+-0.064         
   audio-oscillator                                   62.692+-0.703             62.353+-0.472         
   imaging-darkroom                                   60.752+-0.993             60.462+-0.494         
   imaging-desaturate                                 56.198+-0.811             54.646+-5.503           might be 1.0284x faster
   imaging-gaussian-blur                              85.531+-2.129             85.211+-1.705         
   json-parse-financial                               39.943+-0.670             39.793+-0.742         
   json-stringify-tinderbox                           23.121+-0.621      ?      24.341+-1.220         ? might be 1.0527x slower
   stanford-crypto-aes                                41.827+-0.675      ?      42.299+-1.026         ? might be 1.0113x slower
   stanford-crypto-ccm                                36.805+-4.181             35.615+-0.989           might be 1.0334x faster
   stanford-crypto-pbkdf2                             96.699+-1.800      ?      96.792+-1.776         ?
   stanford-crypto-sha256-iterative                   37.039+-0.777      ?      37.141+-0.543         ?

   &lt;arithmetic&gt;                                       69.562+-0.584             69.359+-1.025           might be 1.0029x faster

                                                          master                      ic                                        
JSRegress:
   abc-forward-loop-equal                            29.5349+-0.4325     ?     30.1417+-0.7411        ? might be 1.0205x slower
   abc-postfix-backward-loop                         30.3881+-1.8454           29.7782+-0.6846          might be 1.0205x faster
   abc-simple-backward-loop                          29.2748+-0.9834     ?     29.7107+-1.0847        ? might be 1.0149x slower
   abc-simple-forward-loop                           29.4175+-0.6109     ?     29.5807+-1.3308        ?
   abc-skippy-loop                                   21.0942+-0.9842     ?     21.4785+-0.8209        ? might be 1.0182x slower
   abs-boolean                                        2.4377+-0.0390     ?      2.4465+-0.1482        ?
   adapt-to-double-divide                            17.0712+-1.5894           16.5235+-0.4986          might be 1.0331x faster
   aliased-arguments-getbyval                         1.1270+-0.0960     ?      1.1277+-0.0559        ?
   allocate-big-object                                2.3806+-0.5520            2.3558+-0.2988          might be 1.0105x faster
   arguments-named-and-reflective                    10.9250+-0.2171     ?     10.9985+-0.1123        ?
   arguments-out-of-bounds                           10.2409+-0.4871           10.0610+-0.8294          might be 1.0179x faster
   arguments-strict-mode                              9.5701+-0.0788     ?      9.9498+-0.6374        ? might be 1.0397x slower
   arguments                                          8.4837+-0.1373            8.4786+-0.3615        
   arity-mismatch-inlining                            0.8566+-0.0383     ?      0.8638+-0.0807        ?
   array-access-polymorphic-structure                 5.9321+-0.0565            5.8259+-0.4725          might be 1.0182x faster
   array-nonarray-polymorhpic-access                 25.6738+-2.9647           24.9973+-0.4445          might be 1.0271x faster
   array-prototype-every                             74.7607+-0.7317     !     77.0168+-1.3753        ! definitely 1.0302x slower
   array-prototype-forEach                           76.3755+-3.8228     ?     76.5848+-1.6686        ?
   array-prototype-map                               84.6031+-3.8424     ?     84.9257+-1.1804        ?
   array-prototype-reduce                            71.3008+-0.8740     !     72.7335+-0.4567        ! definitely 1.0201x slower
   array-prototype-reduceRight                       70.7880+-0.3378     !     72.3152+-0.7542        ! definitely 1.0216x slower
   array-prototype-some                              75.0168+-1.2033     ?     77.4734+-2.3301        ? might be 1.0327x slower
   array-splice-contiguous                           21.6472+-1.4235     ?     21.6954+-3.2630        ?
   array-with-double-add                              3.4468+-0.2582            3.4083+-0.0832          might be 1.0113x faster
   array-with-double-increment                        3.1373+-0.4050            3.1258+-0.1265        
   array-with-double-mul-add                          4.2200+-0.1570     ?      4.2841+-0.1567        ? might be 1.0152x slower
   array-with-double-sum                              3.1790+-0.0181     ?      3.2094+-0.0800        ?
   array-with-int32-add-sub                           6.0376+-0.3826            5.9330+-0.2281          might be 1.0176x faster
   array-with-int32-or-double-sum                     3.1977+-0.0380     ?      3.2883+-0.1684        ? might be 1.0283x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     27.5721+-0.4786           27.1799+-0.2859          might be 1.0144x faster
   ArrayBuffer-DataView-alloc-long-lived             12.7885+-0.9658           12.4843+-0.3017          might be 1.0244x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6060+-0.0626     ?      3.6370+-0.1378        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     27.5753+-0.3262     ?     27.6735+-0.3342        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     22.3538+-3.6202           20.5285+-0.8385          might be 1.0889x faster
   ArrayBuffer-Int8Array-alloc-long-lived            11.7630+-0.4432     ?     11.8922+-0.4388        ? might be 1.0110x slower
   ArrayBuffer-Int8Array-alloc                       10.2290+-0.6987           10.2125+-0.0908        
   asmjs_bool_bug                                     7.3741+-0.2386     ?      7.3948+-0.5272        ?
   assign-custom-setter-polymorphic                   2.5842+-0.2781     ?      2.5860+-0.0752        ?
   assign-custom-setter                               3.5677+-0.1675     ?      3.6045+-0.1705        ? might be 1.0103x slower
   basic-set                                          8.1844+-0.2188     ?      8.4503+-0.7564        ? might be 1.0325x slower
   big-int-mul                                        3.5646+-0.0882     ?      3.5755+-0.2538        ?
   boolean-test                                       2.8558+-0.0346     ?      2.8853+-0.0761        ? might be 1.0103x slower
   branch-fold                                        3.6555+-0.0953            3.6146+-0.0345          might be 1.0113x faster
   branch-on-string-as-boolean                       16.6915+-0.7732     ?     16.7361+-1.7111        ?
   by-val-generic                                     6.2684+-0.7254     ^      2.4961+-0.2687        ^ definitely 2.5113x faster
   call-spread-apply                                 27.1887+-0.4604           27.0333+-0.7023        
   call-spread-call                                  21.2281+-0.2446     ?     21.7821+-0.5512        ? might be 1.0261x slower
   captured-assignments                               0.4021+-0.0034     ?      0.4115+-0.0232        ? might be 1.0234x slower
   cast-int-to-double                                 5.1140+-0.0789     ?      5.2098+-0.2577        ? might be 1.0187x slower
   cell-argument                                      6.7245+-0.7767            6.3568+-0.4255          might be 1.0579x faster
   cfg-simplify                                       2.8438+-0.2415            2.7834+-0.0855          might be 1.0217x faster
   chain-getter-access                                8.2030+-0.2021     ?      8.2617+-0.3916        ?
   cmpeq-obj-to-obj-other                            11.7332+-0.8180     ?     12.2717+-0.7339        ? might be 1.0459x slower
   constant-test                                      4.8991+-0.1095            4.8477+-0.0431          might be 1.0106x faster
   create-lots-of-functions                           9.4425+-0.7893            9.3236+-0.5627          might be 1.0128x faster
   cse-new-array-buffer                               2.2452+-0.2537            2.1927+-0.1405          might be 1.0239x faster
   cse-new-array                                      2.3092+-0.2842            2.2518+-0.1467          might be 1.0255x faster
   DataView-custom-properties                        31.9301+-0.9217     ?     32.0884+-0.6309        ?
   delay-tear-off-arguments-strictmode               12.9837+-0.3987     ?     13.0328+-0.9882        ?
   deltablue-varargs                                148.5550+-3.7878     ?    148.5592+-1.1082        ?
   destructuring-arguments                          167.8102+-3.7216          165.8862+-1.8769          might be 1.0116x faster
   destructuring-parameters-overridden-by-function   
                                                      0.4476+-0.0664            0.4343+-0.0290          might be 1.0305x faster
   destructuring-swap                                 4.7032+-0.1038     ?      4.7423+-0.0462        ?
   direct-arguments-getbyval                          1.1734+-0.1909            1.1034+-0.0831          might be 1.0634x faster
   div-boolean-double                                 5.4445+-0.1707            5.3592+-0.0598          might be 1.0159x faster
   div-boolean                                        8.5214+-0.5778            8.4855+-0.2853        
   double-get-by-val-out-of-bounds                    4.0983+-0.2070     ?      4.2200+-0.0727        ? might be 1.0297x slower
   double-pollution-getbyval                          8.8740+-0.3789     ?      8.9913+-0.3688        ? might be 1.0132x slower
   double-pollution-putbyoffset                       3.6915+-0.1230     ?      3.7455+-0.0925        ? might be 1.0146x slower
   double-real-use                                   27.3335+-3.1459           24.5205+-0.9451          might be 1.1147x faster
   double-to-int32-typed-array-no-inline              2.0599+-0.1598     ?      2.0674+-0.1083        ?
   double-to-int32-typed-array                        1.7359+-0.0900     ?      1.8422+-0.1020        ? might be 1.0612x slower
   double-to-uint32-typed-array-no-inline             2.1698+-0.0972     ?      2.1833+-0.1366        ?
   double-to-uint32-typed-array                       1.8335+-0.0348            1.8116+-0.0837          might be 1.0121x faster
   elidable-new-object-dag                           33.7630+-0.4547     ?     33.8813+-0.7400        ?
   elidable-new-object-roflcopter                    32.9035+-0.4113     ?     33.5746+-1.4670        ? might be 1.0204x slower
   elidable-new-object-then-call                     31.2815+-0.7437     ?     32.1315+-1.6459        ? might be 1.0272x slower
   elidable-new-object-tree                          36.0837+-0.5270     ?     36.5898+-0.5270        ? might be 1.0140x slower
   empty-string-plus-int                              5.0132+-0.4494            4.9120+-0.1849          might be 1.0206x faster
   emscripten-cube2hash                              26.1191+-2.2572     ?     32.4125+-17.6311       ? might be 1.2410x slower
   exit-length-on-plain-object                       12.8331+-0.2757     ?     13.5498+-2.3257        ? might be 1.0559x slower
   external-arguments-getbyval                        1.1732+-0.0919            1.1390+-0.0269          might be 1.0300x faster
   external-arguments-putbyval                        2.2215+-0.1638            2.0906+-0.0551          might be 1.0626x faster
   fixed-typed-array-storage-var-index                1.1741+-0.0366            1.1584+-0.0949          might be 1.0135x faster
   fixed-typed-array-storage                          0.8331+-0.0151     ?      0.8456+-0.0588        ? might be 1.0149x slower
   Float32Array-matrix-mult                           3.9724+-0.2496     ?      4.2046+-0.6259        ? might be 1.0584x slower
   Float32Array-to-Float64Array-set                  46.4340+-1.8513           45.9855+-0.5095        
   Float64Array-alloc-long-lived                     57.8806+-0.5310     ?     59.2067+-2.7125        ? might be 1.0229x slower
   Float64Array-to-Int16Array-set                    57.3400+-1.1764     ?     57.5569+-2.9608        ?
   fold-double-to-int                                12.8478+-0.2789     ?     12.9927+-0.3998        ? might be 1.0113x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.8593+-0.9260           10.4496+-0.9543          might be 1.0392x faster
   fold-get-by-id-to-multi-get-by-offset              9.1953+-0.6101            8.9050+-0.4934          might be 1.0326x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.9889+-1.5941     ?      8.1481+-1.0196        ? might be 1.0199x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.6398+-1.4592     ?      8.2047+-1.4644        ? might be 1.0739x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.5921+-0.6624     ?      7.8015+-0.7334        ? might be 1.0276x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.1060+-0.8363            5.7025+-2.1560          might be 1.0707x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.3265+-0.7296     ?      8.8616+-0.8983        ? might be 1.0643x slower
   fold-put-by-id-to-multi-put-by-offset              8.8688+-0.6047     ?      9.0264+-0.5612        ? might be 1.0178x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     69.8406+-8.3187     ^      9.6357+-1.0856        ^ definitely 7.2481x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     67.9573+-1.2614     ^      9.2725+-0.9941        ^ definitely 7.3289x faster
   fold-put-structure                                 5.5053+-0.2245            5.3703+-1.0037          might be 1.0251x faster
   for-of-iterate-array-entries                      11.8885+-0.6022           11.6631+-0.2542          might be 1.0193x faster
   for-of-iterate-array-keys                          3.4797+-0.4778            3.3845+-0.1672          might be 1.0281x faster
   for-of-iterate-array-values                        3.4235+-0.2666            3.2964+-0.0745          might be 1.0385x faster
   fround                                            18.8268+-1.3292     ?     18.9299+-1.5049        ?
   ftl-library-inlining-dataview                     57.0625+-0.7389     ?     58.6517+-3.7356        ? might be 1.0279x slower
   ftl-library-inlining                             110.3751+-3.6948          107.0713+-0.8819          might be 1.0309x faster
   function-dot-apply                                 2.0096+-0.0544            1.9819+-0.1589          might be 1.0140x faster
   function-test                                      2.6882+-0.0911     ?      2.7485+-0.0601        ? might be 1.0225x slower
   function-with-eval                               105.1115+-1.9907     ?    108.6945+-7.2032        ? might be 1.0341x slower
   gcse-poly-get-less-obvious                        14.5170+-0.2764     ?     14.6887+-0.6267        ? might be 1.0118x slower
   gcse-poly-get                                     14.4799+-0.1592     ?     14.5538+-0.5983        ?
   gcse                                               3.8489+-0.0369            3.8278+-0.1016        
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6028+-0.0603     ?      2.6510+-0.1233        ? might be 1.0185x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.9005+-0.3137            5.8845+-0.2495        
   get-by-id-chain-from-try-block                     5.5987+-0.2719            5.5679+-0.2395        
   get-by-id-check-structure-elimination              4.5008+-0.2586     ?      4.5802+-0.2081        ? might be 1.0176x slower
   get-by-id-proto-or-self                           15.1098+-1.9108           15.1002+-2.4520        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8992+-0.0423            2.8879+-0.0307        
   get-by-id-self-or-proto                           14.8160+-0.2843           14.6068+-0.5636          might be 1.0143x faster
   get-by-val-out-of-bounds                           3.9662+-0.0958            3.9138+-0.2395          might be 1.0134x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.9312+-0.2184            2.8314+-0.0657          might be 1.0352x faster
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.2715+-0.0856            6.1059+-0.1838          might be 1.0271x faster
   get-by-val-with-string-chain-from-try-block   
                                                      5.7194+-0.4913     ?      5.7660+-0.2722        ?
   get-by-val-with-string-check-structure-elimination   
                                                      5.2401+-0.2867     ?      5.2834+-0.2692        ?
   get-by-val-with-string-proto-or-self              14.4730+-0.9660     ?     15.9333+-2.0632        ? might be 1.1009x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.2435+-0.1516     ?      3.2851+-0.1247        ? might be 1.0128x slower
   get-by-val-with-string-self-or-proto              15.3465+-0.7423           15.2483+-1.2232        
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.1494+-0.0215     ^      3.0704+-0.0202        ^ definitely 1.0257x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.4795+-0.1190     ?     12.6082+-0.5383        ? might be 1.0103x slower
   get-by-val-with-symbol-chain-from-try-block   
                                                      6.0428+-0.4681            5.7552+-0.1620          might be 1.0500x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.1862+-0.1103     ?     11.2457+-0.1554        ?
   get-by-val-with-symbol-proto-or-self              14.3878+-0.3968     ?     15.7057+-1.5625        ? might be 1.0916x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.0758+-0.1681            3.9822+-0.1200          might be 1.0235x faster
   get-by-val-with-symbol-self-or-proto              15.0103+-0.4396     ?     15.4728+-2.1162        ? might be 1.0308x slower
   get_callee_monomorphic                             2.2325+-0.2578     ?      2.5499+-0.4474        ? might be 1.1422x slower
   get_callee_polymorphic                             3.4028+-0.2955            3.1222+-0.3155          might be 1.0899x faster
   getter-no-activation                               4.8585+-0.1482     ?      5.0676+-0.1189        ? might be 1.0430x slower
   getter-prototype                                   9.9545+-0.3941            9.7632+-0.1259          might be 1.0196x faster
   getter-richards                                  111.5101+-7.7128          109.7234+-11.8151         might be 1.0163x faster
   getter                                             5.4523+-0.5704     ?      5.6300+-0.3193        ? might be 1.0326x slower
   global-object-access-with-mutating-structure   
                                                      5.5941+-0.1928            5.4665+-0.0791          might be 1.0233x faster
   global-var-const-infer-fire-from-opt               0.9236+-0.1014            0.8497+-0.1439          might be 1.0870x faster
   global-var-const-infer                             0.8198+-0.2162            0.7594+-0.1267          might be 1.0796x faster
   HashMap-put-get-iterate-keys                      25.7578+-1.4465     ?     25.8965+-2.9974        ?
   HashMap-put-get-iterate                           26.8336+-2.6816           25.9932+-1.4584          might be 1.0323x faster
   HashMap-string-put-get-iterate                    24.7007+-0.5839           24.5601+-1.3033        
   hoist-make-rope                                    8.3106+-1.4499     ?      8.8516+-0.8678        ? might be 1.0651x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.3356+-0.3144            4.1443+-0.1073          might be 1.0462x faster
   hoist-poly-check-structure                         3.2967+-0.0220            3.2790+-0.0419        
   imul-double-only                                   6.7305+-0.5226            6.4955+-0.1644          might be 1.0362x faster
   imul-int-only                                      8.0777+-0.1375            7.9585+-0.4733          might be 1.0150x faster
   imul-mixed                                         7.0861+-0.5583            6.5967+-0.8987          might be 1.0742x faster
   in-four-cases                                     17.7265+-0.3689     ?     18.0688+-1.0787        ? might be 1.0193x slower
   in-one-case-false                                  9.3591+-0.2055            9.3472+-0.3952        
   in-one-case-true                                   9.3726+-0.1403     ?      9.6580+-0.6407        ? might be 1.0305x slower
   in-two-cases                                       9.7679+-0.5754     ?     10.0560+-0.8268        ? might be 1.0295x slower
   indexed-properties-in-objects                      2.8676+-0.0556            2.8490+-0.1347        
   infer-closure-const-then-mov-no-inline             3.1601+-0.3501            3.0872+-0.1413          might be 1.0236x faster
   infer-closure-const-then-mov                      17.1642+-0.6288     ?     17.2238+-0.7206        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.9243+-0.7506           11.7864+-0.6306          might be 1.0117x faster
   infer-closure-const-then-put-to-scope             22.0120+-1.0148           21.9213+-0.9968        
   infer-closure-const-then-reenter-no-inline   
                                                     50.9547+-0.4195     ?     51.0400+-0.9705        ?
   infer-closure-const-then-reenter                  23.4171+-2.4238           22.7385+-1.8945          might be 1.0298x faster
   infer-constant-global-property                     3.4180+-0.0220     ?      3.5208+-0.1751        ? might be 1.0301x slower
   infer-constant-property                            2.6411+-0.0819     ?      2.6980+-0.2028        ? might be 1.0216x slower
   infer-one-time-closure-ten-vars                    8.8879+-0.7656            8.2870+-0.3480          might be 1.0725x faster
   infer-one-time-closure-two-vars                    8.2109+-0.8290     ?      8.2318+-0.2320        ?
   infer-one-time-closure                             7.9412+-0.1566            7.8170+-0.2550          might be 1.0159x faster
   infer-one-time-deep-closure                       12.9716+-1.1414     ?     13.3140+-1.3430        ? might be 1.0264x slower
   inline-arguments-access                            3.6853+-0.3814     ?      3.7426+-0.2307        ? might be 1.0155x slower
   inline-arguments-aliased-access                    3.8002+-0.3319            3.7708+-0.5180        
   inline-arguments-local-escape                      3.9166+-1.2548            3.6365+-0.0565          might be 1.0770x faster
   inline-get-scoped-var                              4.7989+-0.3730            4.6271+-0.1841          might be 1.0371x faster
   inlined-put-by-id-transition                      10.2325+-0.5806           10.0850+-1.0722          might be 1.0146x faster
   inlined-put-by-val-with-string-transition   
                                                    116.7754+-2.4339     ^     73.8770+-1.3856        ^ definitely 1.5807x faster
   inlined-put-by-val-with-symbol-transition   
                                                    117.3695+-5.2318     ^     73.1078+-3.7026        ^ definitely 1.6054x faster
   int-or-other-abs-then-get-by-val                   4.8240+-0.1962     ?      4.8371+-0.0296        ?
   int-or-other-abs-zero-then-get-by-val             16.4916+-1.5400           16.1529+-0.4335          might be 1.0210x faster
   int-or-other-add-then-get-by-val                   4.1135+-0.0731     ?      4.3105+-0.5752        ? might be 1.0479x slower
   int-or-other-add                                   5.0170+-0.4011     ?      5.0503+-0.1563        ?
   int-or-other-div-then-get-by-val                   3.9658+-0.4530            3.7502+-0.0436          might be 1.0575x faster
   int-or-other-max-then-get-by-val                   4.0077+-0.1418     ?      4.0280+-0.0392        ?
   int-or-other-min-then-get-by-val                   3.9775+-0.0696     ?      4.0277+-0.0495        ? might be 1.0126x slower
   int-or-other-mod-then-get-by-val                   3.5260+-0.0796     ?      3.5715+-0.1012        ? might be 1.0129x slower
   int-or-other-mul-then-get-by-val                   3.7001+-0.1977            3.5883+-0.0786          might be 1.0311x faster
   int-or-other-neg-then-get-by-val                   4.5601+-0.0357     ?      4.5957+-0.1938        ?
   int-or-other-neg-zero-then-get-by-val             16.2615+-0.4468     ?     16.3633+-0.3358        ?
   int-or-other-sub-then-get-by-val                   4.2277+-0.1296            4.1367+-0.1389          might be 1.0220x faster
   int-or-other-sub                                   3.5087+-0.1709            3.4546+-0.0296          might be 1.0157x faster
   int-overflow-local                                 4.3159+-0.0184     ?      4.3990+-0.2582        ? might be 1.0192x slower
   Int16Array-alloc-long-lived                       42.6980+-0.6805     ?     43.4661+-2.7291        ? might be 1.0180x slower
   Int16Array-bubble-sort-with-byteLength            17.9260+-0.4888           17.8195+-0.2841        
   Int16Array-bubble-sort                            17.7511+-0.3038           17.7039+-0.6157        
   Int16Array-load-int-mul                            1.4377+-0.0674     ?      1.4573+-0.1137        ? might be 1.0136x slower
   Int16Array-to-Int32Array-set                      44.2071+-2.3429           44.1066+-1.0505        
   Int32Array-alloc-large                            12.5785+-1.5008           12.2800+-0.5478          might be 1.0243x faster
   Int32Array-alloc-long-lived                       47.2896+-0.1587     ?     47.6088+-0.8994        ?
   Int32Array-alloc                                   2.7808+-0.2902     ?      3.1058+-0.5186        ? might be 1.1169x slower
   Int32Array-Int8Array-view-alloc                    6.5502+-0.6617            6.4050+-0.3096          might be 1.0227x faster
   int52-spill                                        4.7968+-0.3822     ?      4.8315+-0.5359        ?
   Int8Array-alloc-long-lived                        37.8353+-1.1782     ?     38.5478+-2.0139        ? might be 1.0188x slower
   Int8Array-load-with-byteLength                     3.4713+-0.1658     ?      3.5471+-0.1702        ? might be 1.0218x slower
   Int8Array-load                                     3.4377+-0.0952            3.4271+-0.0497        
   integer-divide                                    10.5970+-0.1915           10.4896+-0.0201          might be 1.0102x faster
   integer-modulo                                     1.6333+-0.0932     ?      1.6638+-0.0940        ? might be 1.0187x slower
   is-boolean-fold-tricky                             3.7549+-0.1465     ?      3.8073+-0.1057        ? might be 1.0139x slower
   is-boolean-fold                                    2.6329+-0.1655            2.6001+-0.0226          might be 1.0126x faster
   is-function-fold-tricky-internal-function   
                                                      9.8508+-0.0780     ?      9.9405+-0.2325        ?
   is-function-fold-tricky                            4.2671+-0.1643            4.2640+-0.1124        
   is-function-fold                                   2.6531+-0.0809     ?      2.6567+-0.0253        ?
   is-number-fold-tricky                              4.0046+-0.0080     ?      4.1213+-0.2342        ? might be 1.0291x slower
   is-number-fold                                     2.6912+-0.1877            2.6353+-0.0317          might be 1.0212x faster
   is-object-or-null-fold-functions                   2.6500+-0.0114            2.6355+-0.0144        
   is-object-or-null-fold-less-tricky                 4.1417+-0.1409            4.0935+-0.0407          might be 1.0118x faster
   is-object-or-null-fold-tricky                      5.3962+-0.2265            5.3470+-0.1937        
   is-object-or-null-fold                             2.6531+-0.0709     ?      2.6613+-0.0586        ?
   is-object-or-null-trickier-function                4.1988+-0.1661     ?      4.2360+-0.1100        ?
   is-object-or-null-trickier-internal-function   
                                                     10.6475+-0.4213     ?     10.9593+-0.4468        ? might be 1.0293x slower
   is-object-or-null-tricky-function                  4.1293+-0.0657     ?      4.4148+-0.7151        ? might be 1.0691x slower
   is-object-or-null-tricky-internal-function   
                                                      7.7068+-0.2938     ?      7.8894+-0.1648        ? might be 1.0237x slower
   is-string-fold-tricky                              4.1323+-0.2152            4.0641+-0.0571          might be 1.0168x faster
   is-string-fold                                     2.6721+-0.0869            2.6204+-0.0404          might be 1.0197x faster
   is-undefined-fold-tricky                           3.5257+-0.3867            3.4009+-0.1710          might be 1.0367x faster
   is-undefined-fold                                  2.6155+-0.0517     ?      2.6495+-0.1051        ? might be 1.0130x slower
   JSONP-negative-0                                   0.2363+-0.0142            0.2353+-0.0044        
   large-int-captured                                 3.9695+-0.4701     ?      4.1597+-0.1657        ? might be 1.0479x slower
   large-int-neg                                     14.5143+-0.6395     ?     14.6890+-1.2079        ? might be 1.0120x slower
   large-int                                         14.0668+-0.4977           13.8688+-0.2750          might be 1.0143x faster
   load-varargs-elimination                          22.1437+-2.7113           21.5668+-0.2185          might be 1.0268x faster
   logical-not-weird-types                            2.9127+-0.1013     ?      2.9623+-0.3469        ? might be 1.0170x slower
   logical-not                                        4.3538+-0.3106            4.3154+-0.1838        
   lots-of-fields                                     9.2769+-0.1711            9.2155+-0.4540        
   make-indexed-storage                               2.9728+-0.5521            2.7891+-0.2653          might be 1.0659x faster
   make-rope-cse                                      3.6066+-0.1953            3.5837+-0.1173        
   marsaglia-larger-ints                             35.0770+-4.1575           33.1194+-1.0845          might be 1.0591x faster
   marsaglia-osr-entry                               21.3315+-0.5130           21.2500+-1.0071        
   math-with-out-of-bounds-array-values              22.5037+-0.6514           22.1960+-0.8350          might be 1.0139x faster
   max-boolean                                        2.7035+-0.1005            2.6807+-0.0655        
   method-on-number                                  16.6373+-1.6709     ?     17.3488+-0.6858        ? might be 1.0428x slower
   min-boolean                                        2.6571+-0.0977            2.6252+-0.1030          might be 1.0121x faster
   minus-boolean-double                               3.1398+-0.1416     ?      3.2175+-0.2144        ? might be 1.0247x slower
   minus-boolean                                      2.3416+-0.1565     ?      2.3867+-0.0604        ? might be 1.0193x slower
   misc-strict-eq                                    31.3822+-0.8639     ?     32.4614+-5.1709        ? might be 1.0344x slower
   mod-boolean-double                                11.5531+-0.9867           11.3576+-0.2836          might be 1.0172x faster
   mod-boolean                                        8.7325+-0.5172            8.4885+-0.3454          might be 1.0287x faster
   mul-boolean-double                                 3.8400+-0.4311            3.6964+-0.2600          might be 1.0389x faster
   mul-boolean                                        2.8243+-0.1040     ?      2.8593+-0.1003        ? might be 1.0124x slower
   neg-boolean                                        3.1446+-0.0633     ?      3.1582+-0.1319        ?
   negative-zero-divide                               0.3218+-0.0410            0.3141+-0.0124          might be 1.0245x faster
   negative-zero-modulo                               0.3303+-0.0194     ?      0.3368+-0.0406        ? might be 1.0198x slower
   negative-zero-negate                               0.2988+-0.0209     ?      0.3047+-0.0207        ? might be 1.0198x slower
   nested-function-parsing                           44.9730+-2.9306           43.8319+-1.1484          might be 1.0260x faster
   new-array-buffer-dead                             88.8590+-1.7404     ?     89.0490+-1.0686        ?
   new-array-buffer-push                              5.8459+-0.1367     ?      6.1324+-0.5649        ? might be 1.0490x slower
   new-array-dead                                    13.4521+-1.2281     ?     14.3281+-1.7657        ? might be 1.0651x slower
   new-array-push                                     3.4800+-0.4174            3.3615+-0.1541          might be 1.0353x faster
   no-inline-constructor                             30.9245+-0.7907     ?     31.7120+-0.5224        ? might be 1.0255x slower
   number-test                                        2.8687+-0.1844     ?      3.0593+-0.6453        ? might be 1.0664x slower
   object-closure-call                                4.8638+-0.1018     ?      4.9463+-0.3351        ? might be 1.0170x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.2043+-0.5557            3.7700+-0.2982          might be 1.1152x faster
   object-test                                        2.6872+-0.1957     ?      2.7119+-0.1968        ?
   obvious-sink-pathology-taken                     101.2792+-1.9549     ?    101.7896+-2.4232        ?
   obvious-sink-pathology                            95.6417+-1.2993     ?     96.0343+-1.2033        ?
   obviously-elidable-new-object                     28.9707+-1.2022           28.5012+-0.5308          might be 1.0165x faster
   plus-boolean-arith                                 2.4132+-0.1272     ?      2.4982+-0.3660        ? might be 1.0352x slower
   plus-boolean-double                                3.1204+-0.0889     ?      3.1349+-0.0757        ?
   plus-boolean                                       2.5878+-0.0498            2.5855+-0.0937        
   poly-chain-access-different-prototypes-simple   
                                                      3.4817+-0.4857            3.3397+-0.1470          might be 1.0425x faster
   poly-chain-access-different-prototypes             2.9945+-0.2889            2.8622+-0.0429          might be 1.0462x faster
   poly-chain-access-simpler                          3.2988+-0.1656     ?      3.3156+-0.0844        ?
   poly-chain-access                                  3.3250+-0.1037            3.3011+-0.1687        
   poly-stricteq                                     50.8918+-0.8355     ?     51.1739+-2.6064        ?
   polymorphic-array-call                             1.5161+-0.7965            1.3165+-0.4333          might be 1.1517x faster
   polymorphic-get-by-id                              2.8755+-0.0859            2.8725+-0.1487        
   polymorphic-put-by-id                             26.0439+-3.1919           25.4847+-0.9879          might be 1.0219x faster
   polymorphic-put-by-val-with-string               352.8145+-9.3221     ^     26.5709+-1.2105        ^ definitely 13.2782x faster
   polymorphic-put-by-val-with-symbol               383.7432+-13.0210    ^     26.8412+-0.7089        ^ definitely 14.2968x faster
   polymorphic-structure                             13.5208+-0.5404           13.2847+-0.1485          might be 1.0178x faster
   polyvariant-monomorphic-get-by-id                  7.1394+-0.3818            6.4504+-0.5165          might be 1.1068x faster
   proto-getter-access                                8.2629+-0.0766            8.1108+-0.2481          might be 1.0188x faster
   prototype-access-with-mutating-prototype           5.6054+-0.6033            5.5956+-0.6121        
   put-by-id-replace-and-transition                   7.5640+-0.1934     ?      8.2190+-1.9564        ? might be 1.0866x slower
   put-by-id-slightly-polymorphic                     2.6350+-0.0469     ?      2.6422+-0.0238        ?
   put-by-id                                          9.7262+-0.4133            9.6785+-0.1797        
   put-by-val-direct                                  0.3211+-0.0186            0.3175+-0.0119          might be 1.0113x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.4305+-0.3740     ?      5.4499+-0.2635        ?
   put-by-val-machine-int                             2.4521+-0.1370     ?      2.5720+-0.3364        ? might be 1.0489x slower
   put-by-val-with-string-replace-and-transition   
                                                     82.3823+-3.1861     ^     10.0022+-0.1648        ^ definitely 8.2364x faster
   put-by-val-with-string-slightly-polymorphic   
                                                     34.4847+-3.4010     ^      2.8877+-0.0404        ^ definitely 11.9420x faster
   put-by-val-with-string                            81.0162+-2.7781     ^     10.1260+-0.4184        ^ definitely 8.0008x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     83.6551+-1.9612     ^     11.5535+-0.3602        ^ definitely 7.2407x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                     32.7045+-0.5333     ^      3.0827+-0.1037        ^ definitely 10.6090x faster
   put-by-val-with-symbol                            85.2364+-4.8715     ^     10.0714+-0.0405        ^ definitely 8.4632x faster
   rare-osr-exit-on-local                            14.8043+-0.1225           14.6819+-0.3379        
   register-pressure-from-osr                        17.4568+-1.8593           16.7767+-0.4667          might be 1.0405x faster
   repeat-multi-get-by-offset                        22.1917+-1.1454     ?     22.9281+-3.1813        ? might be 1.0332x slower
   setter-prototype                                   7.4170+-0.2628     ?      7.4594+-0.2758        ?
   setter                                             5.7578+-1.0798            5.4188+-0.9561          might be 1.0626x faster
   simple-activation-demo                            25.0657+-0.6325           24.8707+-0.6061        
   simple-getter-access                              10.5906+-0.5183     ?     10.7297+-0.1945        ? might be 1.0131x slower
   simple-poly-call-nested                            8.7751+-0.4777            8.6422+-0.3684          might be 1.0154x faster
   simple-poly-call                                   1.2280+-0.0619     ?      1.3392+-0.1803        ? might be 1.0906x slower
   sin-boolean                                       17.9934+-1.3795     ?     18.0703+-0.7855        ?
   singleton-scope                                   61.6225+-1.0441           61.3861+-0.5588        
   sink-function                                      9.2559+-0.6395     ?      9.7679+-0.3116        ? might be 1.0553x slower
   sink-huge-activation                              16.0507+-0.2070     ?     16.1722+-0.7151        ?
   sinkable-new-object-dag                           54.8903+-0.5898     ?     56.0470+-1.8273        ? might be 1.0211x slower
   sinkable-new-object-taken                         42.8010+-0.9374           42.6833+-0.8835        
   sinkable-new-object                               29.9671+-1.0126           29.5977+-1.3147          might be 1.0125x faster
   slow-array-profile-convergence                     2.5003+-0.3042            2.3951+-0.2621          might be 1.0439x faster
   slow-convergence                                   2.3795+-0.1281     ?      2.3818+-0.1473        ?
   slow-ternaries                                    17.8581+-0.7963     ?     17.9630+-0.4831        ?
   sorting-benchmark                                 17.4950+-0.5517     ?     18.9676+-2.9041        ? might be 1.0842x slower
   sparse-conditional                                 1.1497+-0.1221            1.1280+-0.0349          might be 1.0193x faster
   splice-to-remove                                  12.4685+-0.5337           12.4149+-0.3987        
   string-char-code-at                               14.6117+-0.4076     ?     14.8188+-0.3967        ? might be 1.0142x slower
   string-concat-object                               2.1628+-0.0573     ?      2.1902+-0.2725        ? might be 1.0127x slower
   string-concat-pair-object                          2.0870+-0.1590     ?      2.1306+-0.0502        ? might be 1.0209x slower
   string-concat-pair-simple                          9.2293+-0.4726            9.2056+-0.5249        
   string-concat-simple                               9.1588+-0.1390     ?      9.5969+-1.0112        ? might be 1.0478x slower
   string-cons-repeat                                 6.8117+-0.8631            6.7598+-0.3876        
   string-cons-tower                                  6.6593+-0.3479     ?      6.9427+-0.5752        ? might be 1.0426x slower
   string-equality                                   15.3721+-0.2111     ?     16.0795+-1.3242        ? might be 1.0460x slower
   string-get-by-val-big-char                         6.6597+-0.0834     ?      6.8694+-0.3734        ? might be 1.0315x slower
   string-get-by-val-out-of-bounds-insane             3.3699+-0.1818            3.3461+-0.1859        
   string-get-by-val-out-of-bounds                    4.1163+-0.1203            4.0862+-0.1727        
   string-get-by-val                                  2.8268+-0.0967            2.8076+-0.0271        
   string-hash                                        2.0060+-0.5613            1.8235+-0.0405          might be 1.1001x faster
   string-long-ident-equality                        12.7754+-0.2796           12.6277+-0.0607          might be 1.0117x faster
   string-out-of-bounds                              10.5608+-0.3894           10.5372+-0.5208        
   string-repeat-arith                               28.3465+-0.4683     ?     28.3585+-3.0672        ?
   string-sub                                        54.1116+-0.5113     ?     54.2802+-0.6925        ?
   string-test                                        2.7214+-0.0241     ?      2.7413+-0.0791        ?
   string-var-equality                               26.3129+-1.0060     ?     26.6157+-0.7633        ? might be 1.0115x slower
   structure-hoist-over-transitions                   2.3541+-0.0813     ?      2.4064+-0.1342        ? might be 1.0222x slower
   substring-concat-weird                            36.5792+-1.5353           36.4404+-0.3594        
   substring-concat                                  40.1810+-0.8617           39.2656+-0.8914          might be 1.0233x faster
   substring                                         46.3281+-2.9666           45.6537+-0.8225          might be 1.0148x faster
   switch-char-constant                               2.7122+-0.0387            2.6750+-0.1355          might be 1.0139x faster
   switch-char                                        6.0180+-1.1527     ?      6.7151+-0.8783        ? might be 1.1158x slower
   switch-constant                                    7.7316+-0.4554     ?      7.7471+-0.9145        ?
   switch-string-basic-big-var                       15.9236+-0.3200     ?     16.4187+-2.2855        ? might be 1.0311x slower
   switch-string-basic-big                           15.3672+-0.1546           15.3292+-0.4505        
   switch-string-basic-var                           13.4644+-0.1687     ?     13.5225+-0.7999        ?
   switch-string-basic                               13.7495+-1.5260           13.0030+-0.1442          might be 1.0574x faster
   switch-string-big-length-tower-var                18.5561+-1.1132           18.4691+-0.4692        
   switch-string-length-tower-var                    13.5162+-0.5104     ?     13.5606+-0.5612        ?
   switch-string-length-tower                        11.9597+-0.1803     ?     11.9985+-0.3331        ?
   switch-string-short                               11.9335+-0.2098     ?     12.0862+-0.2588        ? might be 1.0128x slower
   switch                                            12.3829+-0.4430           11.9535+-0.3162          might be 1.0359x faster
   tear-off-arguments-simple                          3.2495+-0.4838            3.1082+-0.0374          might be 1.0455x faster
   tear-off-arguments                                 3.9863+-0.2201     ?      4.3047+-0.6400        ? might be 1.0799x slower
   temporal-structure                                12.6881+-1.6001           12.4362+-0.2905          might be 1.0203x faster
   to-int32-boolean                                  13.5078+-0.3953           13.3716+-0.5710          might be 1.0102x faster
   try-catch-get-by-val-cloned-arguments             15.4977+-2.2536           14.6653+-0.1008          might be 1.0568x faster
   try-catch-get-by-val-direct-arguments              6.4634+-0.5740     ?      6.6069+-0.3359        ? might be 1.0222x slower
   try-catch-get-by-val-scoped-arguments              8.0182+-0.2541            7.7623+-0.5478          might be 1.0330x faster
   typed-array-get-set-by-val-profiling              28.5938+-1.7224           27.8309+-0.6035          might be 1.0274x faster
   undefined-property-access                        229.1655+-3.5638          228.0268+-0.2822        
   undefined-test                                     3.0630+-0.7535            2.8225+-0.0537          might be 1.0852x faster
   unprofiled-licm                                   14.4825+-0.8009           14.4584+-0.4307        
   varargs-call                                      13.7110+-0.2849     ?     14.2435+-1.1361        ? might be 1.0388x slower
   varargs-construct-inline                          22.4163+-0.3904           22.1120+-0.4696          might be 1.0138x faster
   varargs-construct                                 20.1051+-0.1352     ?     20.5405+-0.5869        ? might be 1.0217x slower
   varargs-inline                                     8.6788+-0.3512     ?      9.0713+-0.6238        ? might be 1.0452x slower
   varargs-strict-mode                                9.3748+-0.2786            9.2004+-0.1886          might be 1.0190x faster
   varargs                                            9.0817+-0.2209            9.0712+-0.0866        
   weird-inlining-const-prop                          2.0727+-0.2098     ?      2.0750+-0.1201        ?

   &lt;geometric&gt;                                        8.3689+-0.0325     ^      7.8379+-0.0320        ^ definitely 1.0678x faster

                                                          master                      ic                                        
Geomean of preferred means:
   &lt;scaled-result&gt;                                   26.0810+-0.0780     ^     25.8149+-0.1876        ^ definitely 1.0103x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115939</commentid>
    <comment_count>5</comment_count>
      <attachid>258546</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 17:00:59 -0700</bug_when>
    <thetext>Created attachment 258546
Patch

rebased the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115955</commentid>
    <comment_count>6</comment_count>
      <attachid>258551</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 18:44:26 -0700</bug_when>
    <thetext>Created attachment 258551
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115957</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 18:54:15 -0700</bug_when>
    <thetext>Leverage byValInfo-&gt;slowPathCount in these cached Id path.
It throws away put-by-val performance regressions.

There&apos;s no performance regression. And for synthetic ones, we can see significant performance improvements.
This optimization will encourage ES6 Symbols and computed properties, like

var object = { [key]: value }


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on Yusukes-MacBook-Pro (MacBookPro11,3).

VMs tested:
&quot;master&quot; at /Users/yusukesuzuki/development/WebKit/WebKitBuild/master-for-put-by-val/Release/jsc
&quot;ic&quot; at /Users/yusukesuzuki/development/WebKit/WebKitBuild/put-by-val/Release/jsc

Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                          master                      ic                                        
SunSpider:
   3d-cube                                            4.6110+-0.2586            4.5530+-0.1024          might be 1.0127x faster
   3d-morph                                           5.2496+-0.2538     ?      5.3008+-0.3525        ?
   3d-raytrace                                        5.3762+-0.4505            5.3630+-0.3617        
   access-binary-trees                                2.0767+-0.0825            2.0555+-0.1932          might be 1.0103x faster
   access-fannkuch                                    5.5440+-0.1497     ?      5.7629+-0.5321        ? might be 1.0395x slower
   access-nbody                                       2.5516+-0.1703     ?      2.6977+-0.4622        ? might be 1.0573x slower
   access-nsieve                                      3.1447+-0.1490            3.0239+-0.0680          might be 1.0399x faster
   bitops-3bit-bits-in-byte                           1.5470+-0.1111            1.4727+-0.0542          might be 1.0504x faster
   bitops-bits-in-byte                                3.3249+-0.0970            3.2793+-0.1802          might be 1.0139x faster
   bitops-bitwise-and                                 2.0297+-0.0428     ?      2.0673+-0.2376        ? might be 1.0185x slower
   bitops-nsieve-bits                                 2.9330+-0.0557     ?      2.9714+-0.1249        ? might be 1.0131x slower
   controlflow-recursive                              2.1381+-0.0708            2.0273+-0.0706          might be 1.0546x faster
   crypto-aes                                         3.9095+-0.1959     ?      4.0664+-0.6038        ? might be 1.0401x slower
   crypto-md5                                         2.7053+-0.2011            2.4968+-0.0936          might be 1.0835x faster
   crypto-sha1                                        2.4725+-0.3360     ?      2.5139+-0.0745        ? might be 1.0168x slower
   date-format-tofte                                  6.8247+-0.3900     ?      6.8788+-0.3018        ?
   date-format-xparb                                  4.6035+-0.2513            4.5864+-0.1254        
   math-cordic                                        2.8327+-0.0769            2.8243+-0.0724        
   math-partial-sums                                  5.3962+-0.3497            5.2763+-0.0872          might be 1.0227x faster
   math-spectral-norm                                 1.8260+-0.0786            1.8098+-0.0498        
   regexp-dna                                         6.4604+-0.0921            6.3359+-0.1521          might be 1.0197x faster
   string-base64                                      4.4004+-0.1654            4.2919+-0.0508          might be 1.0253x faster
   string-fasta                                       5.8106+-0.1160            5.7965+-0.2166        
   string-tagcloud                                    8.1837+-0.1425     ?      8.3093+-0.2099        ? might be 1.0153x slower
   string-unpack-code                                21.2210+-0.4956           20.7268+-0.9441          might be 1.0238x faster
   string-validate-input                              4.6554+-0.1421            4.5181+-0.0689          might be 1.0304x faster

   &lt;arithmetic&gt;                                       4.6857+-0.0444            4.6541+-0.0462          might be 1.0068x faster

                                                          master                      ic                                        
LongSpider:
   3d-cube                                          793.4137+-28.5571         779.8162+-1.8580          might be 1.0174x faster
   3d-morph                                        1536.8100+-9.9839         1530.7363+-7.9783        
   3d-raytrace                                      626.3002+-1.9250     ?    631.2438+-9.5650        ?
   access-binary-trees                              815.5217+-7.2649          807.2051+-11.7540         might be 1.0103x faster
   access-fannkuch                                  282.4557+-1.4984     ?    286.8719+-13.9092       ? might be 1.0156x slower
   access-nbody                                     517.7501+-1.4263     ?    523.4939+-16.7127       ? might be 1.0111x slower
   access-nsieve                                    371.0728+-25.7076         363.0216+-8.9741          might be 1.0222x faster
   bitops-3bit-bits-in-byte                          40.8128+-0.7342     ?     40.9683+-0.7450        ?
   bitops-bits-in-byte                               75.4478+-1.2256     ?     76.8477+-2.6333        ? might be 1.0186x slower
   bitops-nsieve-bits                               414.4860+-11.2225         414.2703+-17.0280       
   controlflow-recursive                            426.2650+-3.4753     ?    428.6634+-0.6052        ?
   crypto-aes                                       587.1618+-5.2531     ?    589.8830+-8.6121        ?
   crypto-md5                                       507.6640+-11.3110         503.1090+-16.8425       
   crypto-sha1                                      646.7902+-1.7814     ?    650.1407+-9.2547        ?
   date-format-tofte                                519.4733+-9.7951     ?    527.3456+-11.2524       ? might be 1.0152x slower
   date-format-xparb                                639.9252+-5.7083          638.1006+-12.0633       
   hash-map                                         156.7858+-8.1974          154.6903+-2.5655          might be 1.0135x faster
   math-cordic                                      500.7775+-6.2904     ?    502.6120+-9.2441        ?
   math-partial-sums                                487.6621+-40.7226         476.2833+-4.3613          might be 1.0239x faster
   math-spectral-norm                               566.4171+-8.2178          562.7213+-1.9696        
   string-base64                                    354.3502+-4.8115     ?    355.1102+-9.9737        ?
   string-fasta                                     368.4639+-2.4151          362.8258+-4.3029          might be 1.0155x faster
   string-tagcloud                                  181.3590+-3.6526     ?    183.0856+-4.8647        ?

   &lt;geometric&gt;                                      397.3372+-1.6767          396.9677+-2.9797          might be 1.0009x faster

                                                          master                      ic                                        
V8Spider:
   crypto                                            49.9987+-1.7307     ?     50.1380+-2.7564        ?
   deltablue                                         85.2797+-7.3987     ?     90.8008+-2.7051        ? might be 1.0647x slower
   earley-boyer                                      40.8061+-1.8009           40.2130+-0.6843          might be 1.0147x faster
   raytrace                                          30.4333+-1.6771           29.1196+-1.7421          might be 1.0451x faster
   regexp                                            63.2512+-1.2643           63.1186+-1.5820        
   richards                                          71.5418+-6.2622           69.8928+-2.0689          might be 1.0236x faster
   splay                                             34.2780+-1.3294     ?     35.3563+-2.2980        ? might be 1.0315x slower

   &lt;geometric&gt;                                       50.3366+-0.9743     ?     50.4352+-0.8964        ? might be 1.0020x slower

                                                          master                      ic                                        
Octane:
   encrypt                                           0.20844+-0.00190    ?     0.20947+-0.00227       ?
   decrypt                                           3.43818+-0.01470    ?     3.44745+-0.04044       ?
   deltablue                                x2       0.15833+-0.00227          0.15744+-0.00123       
   earley                                            0.28198+-0.00508    ?     0.28215+-0.00522       ?
   boyer                                             4.22686+-0.04528    ?     4.32261+-0.20904       ? might be 1.0227x slower
   navier-stokes                            x2       5.08685+-0.07102    ?     5.13387+-0.20480       ?
   raytrace                                 x2       1.05286+-0.06577    ?     1.06027+-0.09406       ?
   richards                                 x2       0.10141+-0.00151    ?     0.10367+-0.00283       ? might be 1.0223x slower
   splay                                    x2       0.35151+-0.00502          0.34610+-0.00394         might be 1.0156x faster
   regexp                                   x2      25.62353+-0.67615         25.27060+-0.57687         might be 1.0140x faster
   pdfjs                                    x2      38.38040+-0.21680    ?    38.45736+-0.60860       ?
   mandreel                                 x2      45.47939+-0.68815    ?    45.74709+-0.86948       ?
   gbemu                                    x2      34.86560+-0.29811    ?    35.70812+-1.23824       ? might be 1.0242x slower
   closure                                           0.57971+-0.00455          0.57731+-0.00686       
   jquery                                            7.35889+-0.03863    ?     7.36952+-0.00905       ?
   box2d                                    x2      10.31713+-0.12775         10.25901+-0.11313       
   zlib                                     x2     382.64616+-32.05315   ?   388.95809+-14.22319      ? might be 1.0165x slower
   typescript                               x2     674.90784+-31.23544       674.14502+-20.76814      

   &lt;geometric&gt;                                       5.73566+-0.01918    ?     5.75804+-0.04203       ? might be 1.0039x slower

                                                          master                      ic                                        
Kraken:
   ai-astar                                          240.491+-5.543            236.988+-11.448          might be 1.0148x faster
   audio-beat-detection                               59.313+-1.303      ?      59.672+-0.827         ?
   audio-dft                                         101.749+-9.906      ?     101.875+-4.321         ?
   audio-fft                                          35.552+-0.114      ?      36.307+-2.298         ? might be 1.0212x slower
   audio-oscillator                                   63.029+-2.677             62.376+-0.223           might be 1.0105x faster
   imaging-darkroom                                   60.529+-0.447      ?      60.642+-1.115         ?
   imaging-desaturate                                 56.381+-0.415             54.547+-4.319           might be 1.0336x faster
   imaging-gaussian-blur                              85.198+-1.559      ?      88.684+-9.203         ? might be 1.0409x slower
   json-parse-financial                               39.431+-0.831             39.300+-0.590         
   json-stringify-tinderbox                           23.853+-1.334             23.774+-0.782         
   stanford-crypto-aes                                42.543+-1.363             42.081+-1.296           might be 1.0110x faster
   stanford-crypto-ccm                                40.615+-19.059            34.907+-2.458           might be 1.1635x faster
   stanford-crypto-pbkdf2                             96.527+-1.298      ?     101.129+-6.774         ? might be 1.0477x slower
   stanford-crypto-sha256-iterative                   37.316+-0.307      ?      38.612+-4.004         ? might be 1.0347x slower

   &lt;arithmetic&gt;                                       70.180+-2.410             70.064+-2.083           might be 1.0017x faster

                                                          master                      ic                                        
JSRegress:
   abc-forward-loop-equal                            29.6027+-0.8427           29.4940+-0.9439        
   abc-postfix-backward-loop                         30.1005+-0.9838           29.9091+-0.7314        
   abc-simple-backward-loop                          29.0019+-0.3365     ?     29.4962+-1.0677        ? might be 1.0170x slower
   abc-simple-forward-loop                           29.4216+-0.7351     ?     29.5641+-0.9528        ?
   abc-skippy-loop                                   23.0599+-3.1730           21.5892+-0.7283          might be 1.0681x faster
   abs-boolean                                        2.4587+-0.0635            2.4528+-0.0091        
   adapt-to-double-divide                            16.5740+-1.2061           16.4300+-0.6275        
   aliased-arguments-getbyval                         1.1813+-0.1498            1.1111+-0.0380          might be 1.0632x faster
   allocate-big-object                                2.3939+-0.3973     ?      2.5241+-0.1344        ? might be 1.0544x slower
   arguments-named-and-reflective                    10.8132+-0.3844     ?     10.8554+-0.2082        ?
   arguments-out-of-bounds                            9.8085+-0.1019     ?     10.1405+-0.8127        ? might be 1.0338x slower
   arguments-strict-mode                              9.5280+-0.3350     ?      9.7950+-0.1545        ? might be 1.0280x slower
   arguments                                          8.3906+-0.4119     ?      8.5326+-0.3739        ? might be 1.0169x slower
   arity-mismatch-inlining                            1.0264+-0.6236            0.8348+-0.0796          might be 1.2295x faster
   array-access-polymorphic-structure                 6.0865+-0.5064            5.9287+-0.1238          might be 1.0266x faster
   array-nonarray-polymorhpic-access                 25.0085+-0.9059           24.8210+-0.9713        
   array-prototype-every                             76.7864+-0.2965     ^     76.3371+-0.1405        ^ definitely 1.0059x faster
   array-prototype-forEach                           75.5010+-0.3142           74.8917+-0.4673        
   array-prototype-map                               84.8572+-0.8004           83.8193+-2.1007          might be 1.0124x faster
   array-prototype-reduce                            72.4004+-0.6158           71.5593+-0.3378          might be 1.0118x faster
   array-prototype-reduceRight                       73.5502+-2.9887           71.4883+-0.9306          might be 1.0288x faster
   array-prototype-some                              78.3344+-4.8900           77.5605+-3.3940        
   array-splice-contiguous                           21.5842+-0.8441           20.5626+-0.8408          might be 1.0497x faster
   array-with-double-add                              3.4706+-0.1187            3.4651+-0.2213        
   array-with-double-increment                        3.1335+-0.1814            3.0751+-0.0160          might be 1.0190x faster
   array-with-double-mul-add                          4.2440+-0.2302     ?      4.2681+-0.1251        ?
   array-with-double-sum                              3.2264+-0.1355            3.1889+-0.0466          might be 1.0118x faster
   array-with-int32-add-sub                           5.7910+-0.2453     ?      5.9775+-0.1013        ? might be 1.0322x slower
   array-with-int32-or-double-sum                     3.2529+-0.1157            3.2495+-0.0297        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     27.0646+-0.4098           27.0440+-0.7682        
   ArrayBuffer-DataView-alloc-long-lived             13.2420+-1.5049           12.8705+-0.6466          might be 1.0289x faster
   ArrayBuffer-Int32Array-byteOffset                  3.6187+-0.0668     ?      3.6617+-0.2640        ? might be 1.0119x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     27.4819+-0.5442     ?     27.5218+-0.0221        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.7316+-0.8518           20.5146+-0.2727          might be 1.0106x faster
   ArrayBuffer-Int8Array-alloc-long-lived            13.5737+-1.9011           12.6281+-1.0971          might be 1.0749x faster
   ArrayBuffer-Int8Array-alloc                       10.2805+-0.5955     ?     10.9620+-1.2143        ? might be 1.0663x slower
   asmjs_bool_bug                                     7.2403+-0.1313     ?      7.4224+-0.5056        ? might be 1.0252x slower
   assign-custom-setter-polymorphic                   2.5180+-0.3374     ?      2.5905+-0.1916        ? might be 1.0288x slower
   assign-custom-setter                               3.5245+-0.2524            3.3347+-0.0322          might be 1.0569x faster
   basic-set                                          7.8433+-0.1915            7.8104+-0.2319        
   big-int-mul                                        3.4476+-0.0769     ?      3.4782+-0.1259        ?
   boolean-test                                       2.8865+-0.0945            2.8768+-0.0355        
   branch-fold                                        3.6255+-0.0383     ?      3.7035+-0.1792        ? might be 1.0215x slower
   branch-on-string-as-boolean                       16.9207+-0.2689           16.9190+-0.2813        
   by-val-generic                                     6.3497+-0.2360     ^      2.3013+-0.1321        ^ definitely 2.7592x faster
   call-spread-apply                                 26.5962+-0.5654           26.5776+-0.6805        
   call-spread-call                                  21.5210+-1.2144     ?     21.7841+-0.1006        ? might be 1.0122x slower
   captured-assignments                               0.4255+-0.0339            0.3942+-0.0164          might be 1.0793x faster
   cast-int-to-double                                 5.5365+-1.1834            5.3498+-0.3958          might be 1.0349x faster
   cell-argument                                      6.5525+-0.6078            6.5468+-0.6521        
   cfg-simplify                                       2.7952+-0.1278     ?      2.8091+-0.1133        ?
   chain-getter-access                                8.1425+-0.0754     ?      8.2031+-0.1956        ?
   cmpeq-obj-to-obj-other                            12.5519+-0.6915           11.7645+-2.7257          might be 1.0669x faster
   constant-test                                      4.8746+-0.1235     ?      4.9147+-0.1921        ?
   create-lots-of-functions                           9.5984+-1.3850            9.3627+-0.6145          might be 1.0252x faster
   cse-new-array-buffer                               2.1868+-0.1190            2.1472+-0.3188          might be 1.0184x faster
   cse-new-array                                      2.3494+-0.1701            2.2454+-0.2027          might be 1.0463x faster
   DataView-custom-properties                        32.3731+-0.8592           31.8456+-0.5045          might be 1.0166x faster
   delay-tear-off-arguments-strictmode               12.3215+-0.1808     ?     12.7900+-1.0473        ? might be 1.0380x slower
   deltablue-varargs                                149.1277+-1.1687     ?    151.8160+-4.7431        ? might be 1.0180x slower
   destructuring-arguments                          167.5294+-5.5606          164.7269+-0.9166          might be 1.0170x faster
   destructuring-parameters-overridden-by-function   
                                                      0.4771+-0.1141            0.4402+-0.0431          might be 1.0837x faster
   destructuring-swap                                 4.7137+-0.0357     ?      4.8137+-0.1040        ? might be 1.0212x slower
   direct-arguments-getbyval                          1.1108+-0.0345     ?      1.1958+-0.2109        ? might be 1.0765x slower
   div-boolean-double                                 5.4399+-0.1457            5.3850+-0.0544          might be 1.0102x faster
   div-boolean                                        8.3686+-0.2194     ?      8.4500+-0.2383        ?
   double-get-by-val-out-of-bounds                    4.2805+-0.4870            4.0977+-0.1230          might be 1.0446x faster
   double-pollution-getbyval                          8.7812+-0.0572     ?      8.8528+-0.2183        ?
   double-pollution-putbyoffset                       3.8027+-0.2276            3.6227+-0.1344          might be 1.0497x faster
   double-real-use                                   25.4166+-2.9800     ?     25.5195+-3.5607        ?
   double-to-int32-typed-array-no-inline              2.0755+-0.0479            2.0726+-0.0965        
   double-to-int32-typed-array                        1.7766+-0.0293     ?      1.7879+-0.1440        ?
   double-to-uint32-typed-array-no-inline             2.1171+-0.0260     ?      2.1200+-0.1020        ?
   double-to-uint32-typed-array                       1.8613+-0.0741     ?      1.9135+-0.1302        ? might be 1.0280x slower
   elidable-new-object-dag                           33.7334+-0.4795     ?     33.8478+-0.4943        ?
   elidable-new-object-roflcopter                    33.3395+-0.4312           33.2436+-0.5341        
   elidable-new-object-then-call                     31.7417+-0.5705           31.1071+-2.1042          might be 1.0204x faster
   elidable-new-object-tree                          37.8663+-1.1710           37.1163+-0.4281          might be 1.0202x faster
   empty-string-plus-int                              4.9412+-0.5871            4.8378+-0.1534          might be 1.0214x faster
   emscripten-cube2hash                              26.2280+-2.2907     ?     30.0833+-12.1144       ? might be 1.1470x slower
   exit-length-on-plain-object                       12.8395+-0.2411           12.5593+-0.4780          might be 1.0223x faster
   external-arguments-getbyval                        1.1553+-0.0231     ?      1.1630+-0.0769        ?
   external-arguments-putbyval                        2.2350+-0.2979            2.1983+-0.0576          might be 1.0167x faster
   fixed-typed-array-storage-var-index                1.1647+-0.0714            1.1492+-0.0802          might be 1.0134x faster
   fixed-typed-array-storage                          0.8732+-0.0339            0.8625+-0.0443          might be 1.0125x faster
   Float32Array-matrix-mult                           3.9515+-0.0880     ?      4.2126+-0.3339        ? might be 1.0661x slower
   Float32Array-to-Float64Array-set                  47.2201+-0.3312     ^     45.7769+-0.5825        ^ definitely 1.0315x faster
   Float64Array-alloc-long-lived                     58.0226+-0.6399     ?     58.2520+-0.2601        ?
   Float64Array-to-Int16Array-set                    56.4713+-0.4054     ?     57.5864+-1.2502        ? might be 1.0197x slower
   fold-double-to-int                                12.9063+-0.3385     ?     13.1258+-0.5133        ? might be 1.0170x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.9520+-0.5436           10.3846+-0.9998          might be 1.0546x faster
   fold-get-by-id-to-multi-get-by-offset              9.3873+-0.6626            8.3970+-2.0448          might be 1.1179x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.7089+-0.9243     ?      9.0277+-0.5512        ? might be 1.0366x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.5157+-0.4872     ?      8.0903+-1.5728        ? might be 1.0765x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.8795+-0.7333            7.5596+-0.9728          might be 1.0423x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.1548+-1.8105            4.6422+-2.1106          might be 1.1104x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.8376+-1.5614            8.3023+-0.5199          might be 1.0645x faster
   fold-put-by-id-to-multi-put-by-offset              8.6062+-0.7649     ?      8.9911+-0.9906        ? might be 1.0447x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     67.3643+-3.0387     ^      9.4009+-0.7271        ^ definitely 7.1657x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     66.8249+-1.6586     ^      9.3521+-0.6415        ^ definitely 7.1455x faster
   fold-put-structure                                 5.5856+-1.7418     ?      5.9985+-0.2625        ? might be 1.0739x slower
   for-of-iterate-array-entries                      11.7137+-0.2403           11.3141+-0.2820          might be 1.0353x faster
   for-of-iterate-array-keys                          3.7169+-0.8672            3.5993+-0.3172          might be 1.0327x faster
   for-of-iterate-array-values                        3.3723+-0.1677     ?      3.7827+-0.6664        ? might be 1.1217x slower
   fround                                            18.9152+-0.5867     ?     19.8879+-1.2328        ? might be 1.0514x slower
   ftl-library-inlining-dataview                     57.9307+-1.0538           57.1646+-0.2409          might be 1.0134x faster
   ftl-library-inlining                             109.2048+-0.3419     ?    110.4962+-1.0693        ? might be 1.0118x slower
   function-dot-apply                                 2.0403+-0.0505            1.9878+-0.0505          might be 1.0264x faster
   function-test                                      2.7062+-0.0547     ?      2.7675+-0.1178        ? might be 1.0226x slower
   function-with-eval                               103.8721+-1.2978     ?    105.4785+-0.3958        ? might be 1.0155x slower
   gcse-poly-get-less-obvious                        14.5305+-0.6317           14.5255+-0.4147        
   gcse-poly-get                                     16.4726+-0.3777           16.4145+-0.7760        
   gcse                                               3.8152+-0.0469     ?      3.9211+-0.3729        ? might be 1.0278x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6031+-0.0393     ?      2.6050+-0.0592        ?
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.0638+-0.6275     ?      6.2859+-1.0627        ? might be 1.0366x slower
   get-by-id-chain-from-try-block                     5.4541+-0.1324     ?      5.5377+-0.2504        ? might be 1.0153x slower
   get-by-id-check-structure-elimination              4.6000+-0.2907            4.5267+-0.1308          might be 1.0162x faster
   get-by-id-proto-or-self                           14.8049+-1.8851     ?     15.8771+-2.8208        ? might be 1.0724x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8961+-0.1085            2.8665+-0.0331          might be 1.0103x faster
   get-by-id-self-or-proto                           14.4600+-0.5328     ?     15.7133+-1.8987        ? might be 1.0867x slower
   get-by-val-out-of-bounds                           4.2115+-0.5745            4.1115+-0.2703          might be 1.0243x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.8085+-0.0521            2.7894+-0.0411        
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.5964+-1.4926            6.2104+-0.2093          might be 1.0622x faster
   get-by-val-with-string-chain-from-try-block   
                                                      6.3497+-1.1129            5.9166+-0.3515          might be 1.0732x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.1848+-0.1764            5.1080+-0.0954          might be 1.0150x faster
   get-by-val-with-string-proto-or-self              14.7969+-0.4005     ?     15.5211+-2.1642        ? might be 1.0489x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.1897+-0.0178     ?      3.2040+-0.0896        ?
   get-by-val-with-string-self-or-proto              14.6060+-0.2735     ?     15.3127+-2.9933        ? might be 1.0484x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0743+-0.2133            3.0740+-0.0579        
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.5497+-0.4306     ?     12.5562+-0.2078        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.7888+-0.3170     ?      5.7945+-0.3163        ?
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.2458+-0.1100     ?     11.2637+-0.2185        ?
   get-by-val-with-symbol-proto-or-self              14.9417+-0.9737           14.8297+-0.3053        
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.0136+-0.3179            3.9988+-0.2111        
   get-by-val-with-symbol-self-or-proto              15.3256+-2.2573     ?     15.5142+-2.3386        ? might be 1.0123x slower
   get_callee_monomorphic                             2.3480+-0.2747            2.2870+-0.2013          might be 1.0267x faster
   get_callee_polymorphic                             3.2233+-0.0577     ?      3.5060+-0.5314        ? might be 1.0877x slower
   getter-no-activation                               4.9577+-0.3610     ?      4.9637+-0.3111        ?
   getter-prototype                                   9.8403+-0.1802     ?      9.9677+-0.4027        ? might be 1.0129x slower
   getter-richards                                  114.8677+-10.1534         113.5707+-11.8297         might be 1.0114x faster
   getter                                             5.7976+-0.3218            5.6006+-0.9122          might be 1.0352x faster
   global-object-access-with-mutating-structure   
                                                      5.5773+-0.1113            5.5562+-0.1018        
   global-var-const-infer-fire-from-opt               0.9005+-0.1881            0.8447+-0.0540          might be 1.0660x faster
   global-var-const-infer                             0.6877+-0.0586     ?      0.7439+-0.0520        ? might be 1.0817x slower
   HashMap-put-get-iterate-keys                      25.9265+-3.1180     ?     27.1320+-3.7075        ? might be 1.0465x slower
   HashMap-put-get-iterate                           26.1425+-1.9203           25.9260+-2.5323        
   HashMap-string-put-get-iterate                    24.1339+-0.5905     ?     25.0225+-1.3449        ? might be 1.0368x slower
   hoist-make-rope                                    8.7113+-1.1605     ?      9.0999+-0.9124        ? might be 1.0446x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.1611+-0.2979            4.1285+-0.1275        
   hoist-poly-check-structure                         3.4672+-0.5058            3.3218+-0.1095          might be 1.0438x faster
   imul-double-only                                   6.5516+-0.1444     ?      6.9959+-0.5197        ? might be 1.0678x slower
   imul-int-only                                      8.0688+-0.3728            8.0450+-0.6080        
   imul-mixed                                         6.8715+-0.6499            6.7954+-0.1998          might be 1.0112x faster
   in-four-cases                                     17.6362+-0.2252     ?     17.9702+-0.6334        ? might be 1.0189x slower
   in-one-case-false                                  9.4830+-0.1609     ?      9.5490+-0.2518        ?
   in-one-case-true                                   9.7847+-0.8095            9.7187+-0.4157        
   in-two-cases                                      10.5125+-1.3344            9.9337+-0.4063          might be 1.0583x faster
   indexed-properties-in-objects                      2.8282+-0.0528     ?      2.8836+-0.1007        ? might be 1.0196x slower
   infer-closure-const-then-mov-no-inline             3.0240+-0.0379     ?      3.0517+-0.0299        ?
   infer-closure-const-then-mov                      17.7538+-0.7280           17.3597+-1.4026          might be 1.0227x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.2629+-0.5173           11.2134+-0.5000        
   infer-closure-const-then-put-to-scope             22.4878+-0.8617           21.4604+-0.8726          might be 1.0479x faster
   infer-closure-const-then-reenter-no-inline   
                                                     50.5512+-0.2501     ?     51.3043+-3.1133        ? might be 1.0149x slower
   infer-closure-const-then-reenter                  23.1052+-3.3069     ?     23.3792+-3.3867        ? might be 1.0119x slower
   infer-constant-global-property                     3.4670+-0.1472            3.4232+-0.0467          might be 1.0128x faster
   infer-constant-property                            2.6425+-0.0747     ?      2.6732+-0.1336        ? might be 1.0116x slower
   infer-one-time-closure-ten-vars                    8.6277+-0.5838            8.4818+-0.6779          might be 1.0172x faster
   infer-one-time-closure-two-vars                    8.2723+-0.4036            8.0453+-0.2802          might be 1.0282x faster
   infer-one-time-closure                             8.0640+-0.1567     ?      8.0855+-0.2236        ?
   infer-one-time-deep-closure                       13.1748+-0.7058           13.0330+-1.0551          might be 1.0109x faster
   inline-arguments-access                            3.7421+-0.4543            3.6223+-0.1667          might be 1.0331x faster
   inline-arguments-aliased-access                    3.6545+-0.2181            3.6235+-0.2389        
   inline-arguments-local-escape                      4.0335+-0.7115            3.8375+-0.5888          might be 1.0511x faster
   inline-get-scoped-var                              4.9543+-0.5506            4.6768+-0.0864          might be 1.0593x faster
   inlined-put-by-id-transition                      11.1263+-1.0189           10.5570+-1.4713          might be 1.0539x faster
   inlined-put-by-val-with-string-transition   
                                                    113.3862+-1.4036     ^     73.3654+-1.6418        ^ definitely 1.5455x faster
   inlined-put-by-val-with-symbol-transition   
                                                    116.1099+-1.8085     ^     72.7617+-1.1073        ^ definitely 1.5958x faster
   int-or-other-abs-then-get-by-val                   4.8110+-0.0764     ?      4.9390+-0.3984        ? might be 1.0266x slower
   int-or-other-abs-zero-then-get-by-val             18.0853+-5.8032           16.3715+-1.1820          might be 1.1047x faster
   int-or-other-add-then-get-by-val                   4.2315+-0.2771            4.1371+-0.2450          might be 1.0228x faster
   int-or-other-add                                   4.9647+-0.1534     ?      4.9847+-0.2172        ?
   int-or-other-div-then-get-by-val                   3.7111+-0.0730     ?      3.8430+-0.3513        ? might be 1.0356x slower
   int-or-other-max-then-get-by-val                   4.0529+-0.2012            4.0245+-0.1486        
   int-or-other-min-then-get-by-val                   4.1238+-0.2244     ?      4.1412+-0.2652        ?
   int-or-other-mod-then-get-by-val                   3.6034+-0.5050     ?      3.6573+-0.2111        ? might be 1.0150x slower
   int-or-other-mul-then-get-by-val                   3.7545+-0.1828            3.6014+-0.1657          might be 1.0425x faster
   int-or-other-neg-then-get-by-val                   4.4993+-0.0452     ?      4.6274+-0.1583        ? might be 1.0285x slower
   int-or-other-neg-zero-then-get-by-val             16.1445+-0.1329     ?     16.2324+-0.1310        ?
   int-or-other-sub-then-get-by-val                   4.1742+-0.1669            4.0835+-0.1195          might be 1.0222x faster
   int-or-other-sub                                   3.4584+-0.1815            3.4049+-0.0282          might be 1.0157x faster
   int-overflow-local                                 4.3369+-0.2684     ?      4.3532+-0.1598        ?
   Int16Array-alloc-long-lived                       42.0009+-0.8206     ?     42.4072+-1.1132        ?
   Int16Array-bubble-sort-with-byteLength            17.9250+-0.5501     ?     18.1835+-1.0359        ? might be 1.0144x slower
   Int16Array-bubble-sort                            18.0875+-0.6791           18.0641+-0.5452        
   Int16Array-load-int-mul                            1.4167+-0.0171     ?      1.4268+-0.0143        ?
   Int16Array-to-Int32Array-set                      43.5646+-0.7894     ?     43.7563+-0.1871        ?
   Int32Array-alloc-large                            12.2767+-0.2897           12.1706+-0.4123        
   Int32Array-alloc-long-lived                       47.6408+-1.3253     ?     47.8192+-0.9320        ?
   Int32Array-alloc                                   2.7613+-0.2504     ?      2.8663+-0.3608        ? might be 1.0380x slower
   Int32Array-Int8Array-view-alloc                    6.5758+-0.8034            6.2656+-0.1734          might be 1.0495x faster
   int52-spill                                        4.5895+-0.0761     ?      4.7632+-0.5120        ? might be 1.0378x slower
   Int8Array-alloc-long-lived                        37.9097+-1.6570     ?     38.1652+-1.7913        ?
   Int8Array-load-with-byteLength                     3.5231+-0.1843            3.4588+-0.1262          might be 1.0186x faster
   Int8Array-load                                     3.4854+-0.2354            3.4274+-0.1154          might be 1.0169x faster
   integer-divide                                    10.7545+-0.4604           10.5811+-0.1928          might be 1.0164x faster
   integer-modulo                                     1.6625+-0.1352            1.6620+-0.0820        
   is-boolean-fold-tricky                             3.8705+-0.2600            3.7728+-0.0605          might be 1.0259x faster
   is-boolean-fold                                    2.6549+-0.1121            2.6466+-0.0526        
   is-function-fold-tricky-internal-function   
                                                     10.4236+-0.4810           10.2070+-0.4766          might be 1.0212x faster
   is-function-fold-tricky                            4.2142+-0.2513     ?      4.2355+-0.1608        ?
   is-function-fold                                   2.6730+-0.0298            2.6389+-0.0449          might be 1.0129x faster
   is-number-fold-tricky                              4.0383+-0.0972     ?      4.2274+-0.3982        ? might be 1.0468x slower
   is-number-fold                                     2.6166+-0.0221     ?      2.6320+-0.0283        ?
   is-object-or-null-fold-functions                   2.6602+-0.0361     ?      2.7557+-0.1277        ? might be 1.0359x slower
   is-object-or-null-fold-less-tricky                 4.1884+-0.2149            4.1195+-0.0787          might be 1.0167x faster
   is-object-or-null-fold-tricky                      5.3125+-0.3828     ?      5.3710+-0.2273        ? might be 1.0110x slower
   is-object-or-null-fold                             2.7052+-0.1323            2.6432+-0.0217          might be 1.0234x faster
   is-object-or-null-trickier-function                4.2444+-0.1916            4.1558+-0.1136          might be 1.0213x faster
   is-object-or-null-trickier-internal-function   
                                                     10.7703+-0.1671           10.4895+-0.2393          might be 1.0268x faster
   is-object-or-null-tricky-function                  4.1735+-0.1947     ?      4.1779+-0.2423        ?
   is-object-or-null-tricky-internal-function   
                                                      8.1657+-0.6859            7.8463+-0.1177          might be 1.0407x faster
   is-string-fold-tricky                              4.1450+-0.2770            4.1444+-0.1397        
   is-string-fold                                     2.7498+-0.3033            2.6587+-0.0721          might be 1.0343x faster
   is-undefined-fold-tricky                           3.5466+-0.6788            3.3407+-0.1377          might be 1.0616x faster
   is-undefined-fold                                  2.7822+-0.4768            2.7507+-0.2112          might be 1.0114x faster
   JSONP-negative-0                                   0.2421+-0.0208            0.2359+-0.0080          might be 1.0261x faster
   large-int-captured                                 3.9287+-0.0896            3.8875+-0.2568          might be 1.0106x faster
   large-int-neg                                     15.0695+-0.8174           14.3917+-0.5343          might be 1.0471x faster
   large-int                                         13.8679+-1.0574           13.8184+-0.6922        
   load-varargs-elimination                          21.3115+-0.7325     ?     21.6716+-1.2830        ? might be 1.0169x slower
   logical-not-weird-types                            2.8860+-0.0482     ?      2.9739+-0.1057        ? might be 1.0304x slower
   logical-not                                        4.4067+-0.4597            4.3975+-0.2587        
   lots-of-fields                                     9.7744+-0.7337            9.3702+-0.2458          might be 1.0431x faster
   make-indexed-storage                               2.7749+-0.2513     ?      2.8377+-0.1723        ? might be 1.0226x slower
   make-rope-cse                                      3.6221+-0.3308     ?      3.6872+-0.4260        ? might be 1.0180x slower
   marsaglia-larger-ints                             32.8582+-1.4857           32.8297+-0.8434        
   marsaglia-osr-entry                               21.0968+-0.5994           21.0175+-0.5314        
   math-with-out-of-bounds-array-values              22.3522+-0.3272           22.1957+-1.2707        
   max-boolean                                        2.6750+-0.0870     ?      2.7963+-0.1585        ? might be 1.0453x slower
   method-on-number                                  16.9793+-0.8133     ?     17.6854+-2.4706        ? might be 1.0416x slower
   min-boolean                                        2.7689+-0.5062            2.7238+-0.1011          might be 1.0165x faster
   minus-boolean-double                               3.0845+-0.0150     ?      3.2867+-0.4091        ? might be 1.0656x slower
   minus-boolean                                      2.3653+-0.0720     ?      2.3893+-0.1667        ? might be 1.0101x slower
   misc-strict-eq                                    31.0974+-0.9296     ?     32.0834+-2.0100        ? might be 1.0317x slower
   mod-boolean-double                                11.2999+-0.1217     ?     11.3871+-0.3012        ?
   mod-boolean                                        8.4781+-0.1938     ?      8.6068+-0.6478        ? might be 1.0152x slower
   mul-boolean-double                                 3.6824+-0.0288            3.6316+-0.1026          might be 1.0140x faster
   mul-boolean                                        2.8253+-0.0382            2.8154+-0.0597        
   neg-boolean                                        3.1895+-0.1613            3.1228+-0.0564          might be 1.0213x faster
   negative-zero-divide                               0.3293+-0.0330            0.3228+-0.0396          might be 1.0200x faster
   negative-zero-modulo                               0.3110+-0.0048     ?      0.3219+-0.0159        ? might be 1.0351x slower
   negative-zero-negate                               0.2980+-0.0151            0.2936+-0.0057          might be 1.0148x faster
   nested-function-parsing                           44.6381+-2.4254     ?     45.2202+-1.6092        ? might be 1.0130x slower
   new-array-buffer-dead                             89.3569+-1.5199           88.4921+-1.0186        
   new-array-buffer-push                              6.1260+-0.6262            6.0811+-0.5831        
   new-array-dead                                    14.0870+-1.3740     ?     14.1985+-1.2770        ?
   new-array-push                                     3.6223+-0.4650            3.5285+-0.3420          might be 1.0266x faster
   no-inline-constructor                             31.1506+-1.0236     ?     31.3271+-0.9717        ?
   number-test                                        2.9226+-0.1579            2.9020+-0.0461        
   object-closure-call                                4.9434+-0.0558     ?      5.0468+-0.2696        ? might be 1.0209x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.0510+-0.3939            4.0193+-0.6355        
   object-test                                        2.6308+-0.0982     ?      2.7098+-0.0940        ? might be 1.0300x slower
   obvious-sink-pathology-taken                     100.2952+-1.0604     ?    100.3145+-1.7063        ?
   obvious-sink-pathology                            95.2581+-2.2774     ?     95.7946+-1.9824        ?
   obviously-elidable-new-object                     28.7877+-0.8610     ?     29.0135+-0.4509        ?
   plus-boolean-arith                                 2.3928+-0.0369     ?      2.4257+-0.1482        ? might be 1.0138x slower
   plus-boolean-double                                3.1740+-0.1786            3.1130+-0.0531          might be 1.0196x faster
   plus-boolean                                       2.5600+-0.1148     ?      2.5635+-0.0566        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.3170+-0.2063     ?      3.3499+-0.3353        ?
   poly-chain-access-different-prototypes             2.8423+-0.0118     ?      2.8576+-0.0717        ?
   poly-chain-access-simpler                          3.2687+-0.1203     ?      3.3287+-0.1828        ? might be 1.0184x slower
   poly-chain-access                                  3.3256+-0.0767     ?      3.3311+-0.2120        ?
   poly-stricteq                                     50.2608+-0.3420     ?     51.0299+-0.9434        ? might be 1.0153x slower
   polymorphic-array-call                             1.2607+-0.0807     ?      1.3193+-0.1890        ? might be 1.0465x slower
   polymorphic-get-by-id                              2.8309+-0.0692     ?      2.8414+-0.0320        ?
   polymorphic-put-by-id                             26.3010+-1.7205           26.1827+-0.8560        
   polymorphic-put-by-val-with-string               347.0945+-2.7703     ^     26.1200+-0.8491        ^ definitely 13.2885x faster
   polymorphic-put-by-val-with-symbol               372.2051+-3.0216     ^     26.6349+-1.3042        ^ definitely 13.9743x faster
   polymorphic-structure                             13.7191+-0.5529           13.2135+-0.3319          might be 1.0383x faster
   polyvariant-monomorphic-get-by-id                  6.3325+-0.5065     ?      6.7582+-1.4725        ? might be 1.0672x slower
   proto-getter-access                                8.1990+-0.0577     ?      8.2671+-0.3011        ?
   prototype-access-with-mutating-prototype           5.4700+-0.2801     ?      5.6260+-0.3016        ? might be 1.0285x slower
   put-by-id-replace-and-transition                   7.6046+-0.6959            7.5691+-0.5006        
   put-by-id-slightly-polymorphic                     2.6623+-0.0640     ?      2.7487+-0.1513        ? might be 1.0325x slower
   put-by-id                                          9.7677+-0.5993            9.5922+-0.3781          might be 1.0183x faster
   put-by-val-direct                                  0.3233+-0.0106            0.3223+-0.0059        
   put-by-val-large-index-blank-indexing-type   
                                                      5.3585+-0.4454     ?      5.3826+-0.2138        ?
   put-by-val-machine-int                             2.4592+-0.3946            2.4158+-0.2271          might be 1.0180x faster
   put-by-val-with-string-replace-and-transition   
                                                     82.1268+-0.6568     ^      9.8768+-0.1012        ^ definitely 8.3151x faster
   put-by-val-with-string-slightly-polymorphic   
                                                     33.9094+-1.3237     ^      2.9073+-0.0732        ^ definitely 11.6633x faster
   put-by-val-with-string                            81.8883+-2.7360     ^     10.4738+-1.1512        ^ definitely 7.8184x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     84.0939+-2.0663     ^     11.4930+-0.2402        ^ definitely 7.3169x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                     33.0390+-0.9403     ^      3.0850+-0.0368        ^ definitely 10.7095x faster
   put-by-val-with-symbol                            82.5089+-1.9175     ^     10.3378+-0.7775        ^ definitely 7.9813x faster
   rare-osr-exit-on-local                            14.6685+-0.1695           14.4926+-0.3668          might be 1.0121x faster
   register-pressure-from-osr                        16.8158+-0.7339           16.5345+-0.0654          might be 1.0170x faster
   repeat-multi-get-by-offset                        22.0790+-0.4222     ?     22.3140+-0.9117        ? might be 1.0106x slower
   setter-prototype                                   7.4984+-0.0985            7.4271+-0.2781        
   setter                                             5.6747+-0.4469            5.6543+-0.9037        
   simple-activation-demo                            25.0185+-0.9079           24.5759+-0.4718          might be 1.0180x faster
   simple-getter-access                              10.5988+-0.3795           10.5464+-0.7052        
   simple-poly-call-nested                            8.8995+-0.9170     ?      9.0424+-0.6458        ? might be 1.0161x slower
   simple-poly-call                                   1.2449+-0.0295     ?      1.2553+-0.0235        ?
   sin-boolean                                       17.7567+-1.1361     ?     18.2839+-1.3364        ? might be 1.0297x slower
   singleton-scope                                   62.0372+-3.3555           61.0024+-0.0955          might be 1.0170x faster
   sink-function                                      9.3923+-1.3323            9.1417+-1.1722          might be 1.0274x faster
   sink-huge-activation                              16.2344+-1.4302     ?     16.8748+-0.8064        ? might be 1.0394x slower
   sinkable-new-object-dag                           56.4569+-2.3289     ?     56.7988+-2.6039        ?
   sinkable-new-object-taken                         42.8121+-0.7554     ?     43.1985+-1.0962        ?
   sinkable-new-object                               29.5342+-0.6030     ?     29.5790+-1.2025        ?
   slow-array-profile-convergence                     2.6356+-0.1668     ?      2.6638+-0.2151        ? might be 1.0107x slower
   slow-convergence                                   2.3696+-0.0481     ?      2.3895+-0.0395        ?
   slow-ternaries                                    18.4711+-0.7682           17.7951+-0.4864          might be 1.0380x faster
   sorting-benchmark                                 18.3444+-1.2466           17.4111+-0.8316          might be 1.0536x faster
   sparse-conditional                                 1.1342+-0.0849     ?      1.1506+-0.0581        ? might be 1.0145x slower
   splice-to-remove                                  12.7028+-0.1211     ?     13.0920+-1.6156        ? might be 1.0306x slower
   string-char-code-at                               14.4113+-0.3250     ?     14.8785+-1.1738        ? might be 1.0324x slower
   string-concat-object                               2.1118+-0.2502     ?      2.1458+-0.1096        ? might be 1.0161x slower
   string-concat-pair-object                          2.1250+-0.1471            2.1235+-0.0920        
   string-concat-pair-simple                          9.1883+-0.2785     ?      9.5192+-1.2150        ? might be 1.0360x slower
   string-concat-simple                               9.2237+-0.3577     ?      9.5431+-0.7862        ? might be 1.0346x slower
   string-cons-repeat                                 6.6276+-0.2320     ?      6.8430+-0.9132        ? might be 1.0325x slower
   string-cons-tower                                  7.0973+-1.2354            6.6324+-0.3105          might be 1.0701x faster
   string-equality                                   15.7510+-1.1156           15.2397+-0.3823          might be 1.0335x faster
   string-get-by-val-big-char                         6.7985+-0.1488            6.7749+-0.0735        
   string-get-by-val-out-of-bounds-insane             3.3576+-0.1454     ?      3.6055+-0.4356        ? might be 1.0738x slower
   string-get-by-val-out-of-bounds                    4.1022+-0.2514            4.0830+-0.1206        
   string-get-by-val                                  2.8293+-0.0453     ?      2.8391+-0.0366        ?
   string-hash                                        1.8494+-0.0948     ?      1.8549+-0.0853        ?
   string-long-ident-equality                        13.0720+-0.4405           12.8554+-0.2820          might be 1.0168x faster
   string-out-of-bounds                              10.5159+-0.0687     ?     10.6107+-0.3589        ?
   string-repeat-arith                               27.8732+-0.6778     ?     28.1156+-2.9581        ?
   string-sub                                        53.8840+-0.8533     ?     55.1418+-1.1956        ? might be 1.0233x slower
   string-test                                        2.7975+-0.1458            2.7520+-0.0193          might be 1.0165x faster
   string-var-equality                               27.3619+-3.1291           26.5005+-0.3071          might be 1.0325x faster
   structure-hoist-over-transitions                   2.5017+-0.0222     ^      2.3370+-0.1386        ^ definitely 1.0705x faster
   substring-concat-weird                            35.9796+-0.3193     ?     36.4424+-1.2511        ? might be 1.0129x slower
   substring-concat                                  39.8892+-1.1752     ?     40.0070+-1.1516        ?
   substring                                         44.8927+-0.9225     ?     45.0358+-2.5027        ?
   switch-char-constant                               2.6666+-0.0729     ?      2.7071+-0.0871        ? might be 1.0152x slower
   switch-char                                        5.8698+-0.7257     ?      5.9965+-1.2431        ? might be 1.0216x slower
   switch-constant                                    7.2552+-0.4254            7.2294+-0.9170        
   switch-string-basic-big-var                       16.9783+-1.0945           16.3705+-0.7798          might be 1.0371x faster
   switch-string-basic-big                           15.2438+-0.4688           15.1955+-0.3987        
   switch-string-basic-var                           13.8026+-0.9479     ?     13.8973+-1.4688        ?
   switch-string-basic                               13.0893+-0.3455           12.8968+-0.1470          might be 1.0149x faster
   switch-string-big-length-tower-var                18.1971+-0.5536     ?     18.4243+-1.3055        ? might be 1.0125x slower
   switch-string-length-tower-var                    13.4628+-0.5775     ?     13.5397+-0.7655        ?
   switch-string-length-tower                        11.8712+-0.2715           11.6989+-0.2518          might be 1.0147x faster
   switch-string-short                               11.9656+-0.4675     ?     12.0554+-0.4843        ?
   switch                                            11.5325+-1.5852           11.0663+-1.1102          might be 1.0421x faster
   tear-off-arguments-simple                          3.1132+-0.2823            3.0938+-0.1393        
   tear-off-arguments                                 4.0973+-0.1610            4.0001+-0.2346          might be 1.0243x faster
   temporal-structure                                12.1111+-0.3492     ?     12.4185+-0.6006        ? might be 1.0254x slower
   to-int32-boolean                                  13.6293+-0.5905           13.3713+-0.2321          might be 1.0193x faster
   try-catch-get-by-val-cloned-arguments             14.9572+-1.0514           14.5673+-0.8545          might be 1.0268x faster
   try-catch-get-by-val-direct-arguments              6.9178+-0.5014            6.7596+-0.5410          might be 1.0234x faster
   try-catch-get-by-val-scoped-arguments              7.5878+-0.1259     ?      7.7501+-0.0756        ? might be 1.0214x slower
   typed-array-get-set-by-val-profiling              27.6730+-0.8255     ?     27.7745+-0.7715        ?
   undefined-property-access                        227.8707+-3.2734     ?    228.7683+-3.6007        ?
   undefined-test                                     2.8542+-0.0424     ?      2.8637+-0.0592        ?
   unprofiled-licm                                   14.5680+-0.0987           14.3264+-0.5493          might be 1.0169x faster
   varargs-call                                      14.1927+-0.4219           14.0600+-0.1391        
   varargs-construct-inline                          22.4153+-0.4712     ?     23.2830+-2.7364        ? might be 1.0387x slower
   varargs-construct                                 21.2656+-1.5936           20.7715+-1.0167          might be 1.0238x faster
   varargs-inline                                     8.6055+-0.3692            8.3737+-0.0559          might be 1.0277x faster
   varargs-strict-mode                                9.3329+-0.4125     ?      9.3442+-0.4394        ?
   varargs                                            9.3035+-0.2133            9.1206+-0.0768          might be 1.0201x faster
   weird-inlining-const-prop                          2.0820+-0.0880     ?      2.1813+-0.1202        ? might be 1.0477x slower

   &lt;geometric&gt;                                        8.3777+-0.0165     ^      7.8343+-0.0303        ^ definitely 1.0694x faster

                                                          master                      ic                                        
Geomean of preferred means:
   &lt;scaled-result&gt;                                   26.0979+-0.0672     ^     25.7930+-0.1007        ^ definitely 1.0118x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115960</commentid>
    <comment_count>8</comment_count>
      <attachid>258551</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-07 19:06:31 -0700</bug_when>
    <thetext>Comment on attachment 258551
Patch

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

Added comments.

&gt; Source/JavaScriptCore/jit/JIT.h:376
&gt; +        // Property is in regT1, base is in regT0. regT2 contains indecing type.

Fixed the existing comment.

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:492
&gt;      emitGetVirtualRegister(value, regT2);

I think this code is a little bit fragile.
It does not reload regT0. So this slow path implicitly requires regT0 (base) is not broken.

Current implementation and this patch carefully follow this.
But in the future, I think it may be a problem. What do you think of?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116138</commentid>
    <comment_count>9</comment_count>
      <attachid>258551</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-09 16:46:58 -0700</bug_when>
    <thetext>Comment on attachment 258551
Patch

Let&apos;s wait the ARMv7 regression fix in get_by_val side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116155</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-09 19:07:25 -0700</bug_when>
    <thetext>Maybe, I found the issue in get_by_val. The get_by_val patch is already updated.
I&apos;ll also update the patch for put_by_val (this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116157</commentid>
    <comment_count>11</comment_count>
      <attachid>258603</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-09 19:10:14 -0700</bug_when>
    <thetext>Created attachment 258603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116485</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-10 21:58:06 -0700</bug_when>
    <thetext>After get_by_val patch is landed, I&apos;ll update this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116821</commentid>
    <comment_count>13</comment_count>
      <attachid>258791</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-11 18:48:16 -0700</bug_when>
    <thetext>Created attachment 258791
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116822</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-11 18:50:06 -0700</bug_when>
    <thetext>Updated the patch based on the re-landed get_by_id.
And took the benchmark results.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, and JSRegress on Yusukes-MacBook-Pro (MacBookPro11,3).

VMs tested:
&quot;master&quot; at /Users/yusukesuzuki/development/WebKit/WebKitBuild/master-for-put-by-val2/Release/jsc
&quot;ic&quot; at /Users/yusukesuzuki/development/WebKit/WebKitBuild/put-by-val2/Release/jsc

Collected 4 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample measurements.
Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to get microsecond-level
timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                          master                      ic                                        
SunSpider:
   3d-cube                                            4.7835+-0.5591            4.4779+-0.1199          might be 1.0682x faster
   3d-morph                                           5.3038+-0.3490     ?      5.3253+-0.1222        ?
   3d-raytrace                                        5.2064+-0.0976            5.1981+-0.1543        
   access-binary-trees                                2.0060+-0.1707     ?      2.0084+-0.0905        ?
   access-fannkuch                                    5.3506+-0.0372     ?      5.4952+-0.3686        ? might be 1.0270x slower
   access-nbody                                       2.5628+-0.1533     ?      2.7791+-0.4369        ? might be 1.0844x slower
   access-nsieve                                      3.0410+-0.0521     ?      3.0533+-0.0223        ?
   bitops-3bit-bits-in-byte                           1.5109+-0.0321     ?      1.5114+-0.0093        ?
   bitops-bits-in-byte                                3.2692+-0.1319     ?      3.4105+-0.3805        ? might be 1.0432x slower
   bitops-bitwise-and                                 2.1240+-0.2787            2.0894+-0.0828          might be 1.0166x faster
   bitops-nsieve-bits                                 3.0065+-0.0397            2.9736+-0.0719          might be 1.0111x faster
   controlflow-recursive                              2.1304+-0.2298            2.0568+-0.0440          might be 1.0358x faster
   crypto-aes                                         3.9330+-0.2145            3.8384+-0.1323          might be 1.0247x faster
   crypto-md5                                         2.5499+-0.1870            2.5096+-0.0863          might be 1.0161x faster
   crypto-sha1                                        2.4342+-0.1486            2.3925+-0.3334          might be 1.0174x faster
   date-format-tofte                                  6.7337+-0.3100     ?      6.8147+-0.6416        ? might be 1.0120x slower
   date-format-xparb                                  4.8481+-0.6275     ?      4.8704+-0.4374        ?
   math-cordic                                        2.9142+-0.2000            2.8021+-0.0669          might be 1.0400x faster
   math-partial-sums                                  5.4690+-0.3496     ?      5.6627+-0.3550        ? might be 1.0354x slower
   math-spectral-norm                                 1.8002+-0.0520     ?      1.8686+-0.0894        ? might be 1.0380x slower
   regexp-dna                                         6.4941+-0.3978     ?      6.6597+-0.4474        ? might be 1.0255x slower
   string-base64                                      4.2899+-0.1804     ?      4.4785+-0.1496        ? might be 1.0440x slower
   string-fasta                                       5.8869+-0.5296            5.8682+-0.2599        
   string-tagcloud                                    8.2486+-0.1421     ?      8.4874+-0.4279        ? might be 1.0290x slower
   string-unpack-code                                20.2062+-0.8355           20.1170+-1.0379        
   string-validate-input                              4.4922+-0.1832     ?      4.5705+-0.2283        ? might be 1.0174x slower

   &lt;arithmetic&gt;                                       4.6383+-0.0602     ?      4.6661+-0.0201        ? might be 1.0060x slower

                                                          master                      ic                                        
LongSpider:
   3d-cube                                          836.7552+-21.1275         825.9297+-12.5855         might be 1.0131x faster
   3d-morph                                        1591.0110+-25.0360        1568.2533+-43.6683         might be 1.0145x faster
   3d-raytrace                                      638.2565+-10.1632         635.1079+-2.2422        
   access-binary-trees                              829.3503+-12.8978         813.8387+-12.6002         might be 1.0191x faster
   access-fannkuch                                  288.4608+-17.1326         283.2131+-4.0566          might be 1.0185x faster
   access-nbody                                     531.5117+-16.5735         527.1596+-2.0257        
   access-nsieve                                    366.1274+-15.6535         353.0670+-5.2621          might be 1.0370x faster
   bitops-3bit-bits-in-byte                          41.5374+-0.9329           41.0822+-1.0646          might be 1.0111x faster
   bitops-bits-in-byte                               76.2415+-1.6024     ?     77.8485+-7.6517        ? might be 1.0211x slower
   bitops-nsieve-bits                               419.6123+-8.1158          417.9985+-13.4044       
   controlflow-recursive                            437.7810+-9.6306     ?    446.6322+-19.3754       ? might be 1.0202x slower
   crypto-aes                                       586.2492+-20.7943    ?    588.6061+-8.8953        ?
   crypto-md5                                       514.0322+-12.2882    ?    514.8079+-4.4898        ?
   crypto-sha1                                      659.1471+-13.0666         654.7419+-7.4059        
   date-format-tofte                                525.7767+-11.7798    ?    530.5687+-6.6339        ?
   date-format-xparb                                649.4663+-25.1015    ?    668.0705+-19.4707       ? might be 1.0286x slower
   hash-map                                         154.3851+-1.9257     ?    157.0092+-3.0970        ? might be 1.0170x slower
   math-cordic                                      511.1750+-20.4265    ?    515.4603+-26.1989       ?
   math-partial-sums                                483.0878+-16.1252    ?    490.2812+-28.8804       ? might be 1.0149x slower
   math-spectral-norm                               581.1895+-16.5583         577.5945+-12.6434       
   string-base64                                    361.8380+-23.2236    ?    365.1520+-9.2779        ?
   string-fasta                                     376.2711+-16.0314         376.2357+-9.9593        
   string-tagcloud                                  182.0363+-2.8089     ?    182.9106+-3.6161        ?

   &lt;geometric&gt;                                      403.3920+-4.1372          403.3043+-0.9130          might be 1.0002x faster

                                                          master                      ic                                        
V8Spider:
   crypto                                            55.1956+-14.4310          50.3163+-5.3156          might be 1.0970x faster
   deltablue                                         85.9770+-5.5507           85.3022+-4.1440        
   earley-boyer                                      41.2180+-0.8925     ?     41.8600+-1.6824        ? might be 1.0156x slower
   raytrace                                          22.4794+-1.7199     ?     22.8006+-1.3126        ? might be 1.0143x slower
   regexp                                            63.9345+-1.2980     ?     65.6663+-5.8255        ? might be 1.0271x slower
   richards                                          72.1068+-3.7155           67.8063+-3.3647          might be 1.0634x faster
   splay                                             34.1846+-2.4154     ?     34.4920+-2.8545        ?

   &lt;geometric&gt;                                       49.0741+-1.6272           48.4447+-1.1064          might be 1.0130x faster

                                                          master                      ic                                        
Octane:
   encrypt                                           0.21421+-0.00603          0.20935+-0.00618         might be 1.0232x faster
   decrypt                                           3.57799+-0.11175          3.48727+-0.04912         might be 1.0260x faster
   deltablue                                x2       0.16268+-0.00398          0.16230+-0.00112       
   earley                                            0.28575+-0.00680    ?     0.28999+-0.00585       ? might be 1.0148x slower
   boyer                                             4.35322+-0.13898          4.32301+-0.05973       
   navier-stokes                            x2       5.21784+-0.09176          5.21643+-0.11716       
   raytrace                                 x2       1.97286+-0.01838    ?     1.99568+-0.12019       ? might be 1.0116x slower
   richards                                 x2       0.10452+-0.00092          0.10368+-0.00121       
   splay                                    x2       0.35860+-0.00601          0.35659+-0.00527       
   regexp                                   x2      25.65626+-0.70289    ?    26.31369+-1.37888       ? might be 1.0256x slower
   pdfjs                                    x2      38.12845+-0.54274         37.98097+-1.10631       
   mandreel                                 x2      46.74470+-1.80375         46.45316+-0.60075       
   gbemu                                    x2      34.97553+-0.40030    ?    35.26762+-0.83678       ?
   closure                                           0.58308+-0.01259    ?     0.58309+-0.01992       ?
   jquery                                            7.49882+-0.09725    ?     7.50566+-0.12799       ?
   box2d                                    x2      10.70757+-0.23400         10.59347+-0.52388         might be 1.0108x faster
   zlib                                     x2     390.90666+-4.75406        388.78428+-18.95888      
   typescript                               x2     672.88867+-17.18580       666.72113+-19.73900      

   &lt;geometric&gt;                                       6.08223+-0.02855          6.07091+-0.04520         might be 1.0019x faster

                                                          master                      ic                                        
Kraken:
   ai-astar                                          241.117+-7.959            231.522+-14.969          might be 1.0414x faster
   audio-beat-detection                               59.446+-2.556             58.669+-0.465           might be 1.0132x faster
   audio-dft                                         100.214+-3.446             99.731+-2.004         
   audio-fft                                          35.846+-1.470             35.840+-1.046         
   audio-oscillator                                   62.492+-0.705             62.162+-0.646         
   imaging-darkroom                                   62.781+-2.483             62.728+-2.706         
   imaging-desaturate                                 54.959+-5.119             52.586+-5.405           might be 1.0451x faster
   imaging-gaussian-blur                              86.772+-2.336      ?      87.670+-8.535         ? might be 1.0103x slower
   json-parse-financial                               39.164+-0.883      ?      40.080+-2.983         ? might be 1.0234x slower
   json-stringify-tinderbox                           23.330+-2.530             22.873+-1.343           might be 1.0200x faster
   stanford-crypto-aes                                43.454+-4.654             42.908+-2.826           might be 1.0127x faster
   stanford-crypto-ccm                                36.002+-2.521             33.758+-1.286           might be 1.0665x faster
   stanford-crypto-pbkdf2                             96.904+-1.164      ?      96.915+-0.692         ?
   stanford-crypto-sha256-iterative                   36.997+-0.138      ?      38.177+-3.517         ? might be 1.0319x slower

   &lt;arithmetic&gt;                                       69.963+-0.829             68.973+-1.304           might be 1.0144x faster

                                                          master                      ic                                        
JSRegress:
   abc-forward-loop-equal                            30.4207+-3.5186     ?     30.5726+-3.4041        ?
   abc-postfix-backward-loop                         29.9561+-1.2690           29.5468+-0.6558          might be 1.0139x faster
   abc-simple-backward-loop                          29.3508+-0.6684     ?     29.3897+-0.5446        ?
   abc-simple-forward-loop                           31.0605+-3.9489           29.3627+-0.5205          might be 1.0578x faster
   abc-skippy-loop                                   21.3950+-0.2645           21.2120+-0.5378        
   abs-boolean                                        2.4594+-0.0739            2.4310+-0.0890          might be 1.0117x faster
   adapt-to-double-divide                            16.2418+-0.3320     ?     16.3345+-0.2607        ?
   aliased-arguments-getbyval                         1.0784+-0.0582     ?      1.1391+-0.1609        ? might be 1.0563x slower
   allocate-big-object                                2.3633+-0.2604            2.2996+-0.2606          might be 1.0277x faster
   arguments-named-and-reflective                    10.8646+-0.4054     ?     11.4717+-0.7606        ? might be 1.0559x slower
   arguments-out-of-bounds                            9.9646+-0.1798            9.8777+-0.2948        
   arguments-strict-mode                              9.8131+-0.2641            9.7419+-0.4836        
   arguments                                          8.5242+-0.2313     ?      8.5884+-0.4305        ?
   arity-mismatch-inlining                            0.7850+-0.0177     ?      0.8494+-0.0880        ? might be 1.0820x slower
   array-access-polymorphic-structure                 5.9320+-0.1598     ?      6.0162+-0.2467        ? might be 1.0142x slower
   array-nonarray-polymorhpic-access                 25.7030+-0.9099           25.0843+-0.8578          might be 1.0247x faster
   array-prototype-every                             78.1331+-4.1022           76.7127+-2.0246          might be 1.0185x faster
   array-prototype-forEach                           78.1376+-7.4765           76.4438+-3.7932          might be 1.0222x faster
   array-prototype-map                               84.9015+-2.7479           83.5514+-0.6070          might be 1.0162x faster
   array-prototype-reduce                            75.4710+-2.4078           73.9355+-4.0163          might be 1.0208x faster
   array-prototype-reduceRight                       71.9142+-0.8738     ?     72.5513+-2.1015        ?
   array-prototype-some                              79.9095+-6.5887           78.9946+-6.4999          might be 1.0116x faster
   array-splice-contiguous                           21.4260+-2.2243     ?     21.5881+-1.6655        ?
   array-with-double-add                              3.4188+-0.0797            3.3737+-0.1089          might be 1.0134x faster
   array-with-double-increment                        3.0841+-0.1138            3.0259+-0.0826          might be 1.0192x faster
   array-with-double-mul-add                          4.2560+-0.1190            4.2313+-0.2312        
   array-with-double-sum                              3.1935+-0.1519            3.1841+-0.0544        
   array-with-int32-add-sub                           5.9498+-0.1457     ?      6.2513+-0.6280        ? might be 1.0507x slower
   array-with-int32-or-double-sum                     3.2075+-0.0797     ?      3.2999+-0.1784        ? might be 1.0288x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     28.1344+-1.6305           27.7024+-1.3283          might be 1.0156x faster
   ArrayBuffer-DataView-alloc-long-lived             12.7703+-0.5118     ?     13.8033+-1.6346        ? might be 1.0809x slower
   ArrayBuffer-Int32Array-byteOffset                  3.9716+-0.6315            3.6786+-0.1577          might be 1.0796x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     28.1896+-0.4280           27.9351+-1.0130        
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     21.2855+-2.0320     ?     21.3679+-2.8557        ?
   ArrayBuffer-Int8Array-alloc-long-lived            11.9618+-0.4369     ?     12.8780+-2.6246        ? might be 1.0766x slower
   ArrayBuffer-Int8Array-alloc                       10.2737+-0.2155           10.2128+-0.0523        
   asmjs_bool_bug                                     7.4133+-0.3734            7.2629+-0.2664          might be 1.0207x faster
   assign-custom-setter-polymorphic                   2.5928+-0.0529            2.5612+-0.1955          might be 1.0123x faster
   assign-custom-setter                               3.5731+-0.1231     ?      3.6130+-0.0895        ? might be 1.0112x slower
   basic-set                                          8.1888+-0.7573            8.0779+-0.1569          might be 1.0137x faster
   big-int-mul                                        3.4426+-0.0473     ?      3.5802+-0.2839        ? might be 1.0400x slower
   boolean-test                                       2.9168+-0.1325            2.9041+-0.0878        
   branch-fold                                        3.6099+-0.0085     ?      3.6455+-0.0920        ?
   branch-on-string-as-boolean                       16.5435+-1.3815     ?     16.6172+-0.3361        ?
   by-val-generic                                     6.1494+-0.2529     ^      2.3788+-0.0672        ^ definitely 2.5850x faster
   call-spread-apply                                 27.1583+-0.8721     ?     27.5195+-1.1494        ? might be 1.0133x slower
   call-spread-call                                  21.6077+-1.0263           21.4613+-0.1214        
   captured-assignments                               0.4230+-0.0482     ?      0.4371+-0.0507        ? might be 1.0332x slower
   cast-int-to-double                                 5.1988+-0.2215            5.1699+-0.0803        
   cell-argument                                      6.5638+-0.6700            6.4894+-0.3780          might be 1.0115x faster
   cfg-simplify                                       2.7955+-0.2164     ?      2.9313+-0.2660        ? might be 1.0486x slower
   chain-getter-access                                8.1899+-0.0975     ?      8.2327+-0.2559        ?
   cmpeq-obj-to-obj-other                            11.6490+-1.1922     ?     12.1970+-0.4902        ? might be 1.0470x slower
   constant-test                                      4.9000+-0.1166     ?      4.9820+-0.2738        ? might be 1.0167x slower
   create-lots-of-functions                           9.2545+-0.6019            9.1605+-0.4207          might be 1.0103x faster
   cse-new-array-buffer                               2.2281+-0.1439     ?      2.2944+-0.1643        ? might be 1.0298x slower
   cse-new-array                                      2.4084+-0.1203            2.2503+-0.1633          might be 1.0702x faster
   DataView-custom-properties                        32.9791+-1.4437           32.7305+-1.4116        
   delay-tear-off-arguments-strictmode               12.5924+-0.6279           12.4738+-0.5537        
   deltablue-varargs                                154.4465+-7.5656          150.8955+-1.9331          might be 1.0235x faster
   destructuring-arguments                          167.0574+-3.8066          166.1065+-3.8138        
   destructuring-parameters-overridden-by-function   
                                                      0.4642+-0.0107            0.4486+-0.0394          might be 1.0347x faster
   destructuring-swap                                 4.8234+-0.2418            4.7875+-0.1475        
   direct-arguments-getbyval                          1.1297+-0.0798            1.0782+-0.0484          might be 1.0477x faster
   div-boolean-double                                 5.4870+-0.1795            5.4182+-0.0497          might be 1.0127x faster
   div-boolean                                        8.2973+-0.0702            8.2812+-0.0899        
   double-get-by-val-out-of-bounds                    4.1185+-0.2260     ?      4.2694+-0.1431        ? might be 1.0366x slower
   double-pollution-getbyval                          8.9418+-0.2861     ?      8.9512+-0.1227        ?
   double-pollution-putbyoffset                       3.9677+-0.5194            3.8873+-0.3436          might be 1.0207x faster
   double-real-use                                   26.6407+-5.0986           26.0117+-2.6696          might be 1.0242x faster
   double-to-int32-typed-array-no-inline              2.2863+-0.2830            2.0938+-0.0492          might be 1.0920x faster
   double-to-int32-typed-array                        1.8185+-0.0406            1.8158+-0.1062        
   double-to-uint32-typed-array-no-inline             2.1180+-0.1020     ?      2.2241+-0.0402        ? might be 1.0501x slower
   double-to-uint32-typed-array                       2.0063+-0.2366            1.9377+-0.2243          might be 1.0354x faster
   elidable-new-object-dag                           35.1503+-2.3967           34.1964+-1.1448          might be 1.0279x faster
   elidable-new-object-roflcopter                    32.9814+-0.4673     ?     33.8122+-1.6499        ? might be 1.0252x slower
   elidable-new-object-then-call                     31.8503+-1.1228           31.1902+-0.3429          might be 1.0212x faster
   elidable-new-object-tree                          37.4989+-0.9130     ?     37.8619+-1.5898        ?
   empty-string-plus-int                              4.8240+-0.0916            4.7968+-0.1696        
   emscripten-cube2hash                              26.4540+-3.8103     ?     27.4030+-3.1305        ? might be 1.0359x slower
   exit-length-on-plain-object                       12.6080+-0.4229     ?     12.8876+-0.4479        ? might be 1.0222x slower
   external-arguments-getbyval                        1.1917+-0.1491            1.1469+-0.0154          might be 1.0390x faster
   external-arguments-putbyval                        2.2283+-0.1147            2.2181+-0.1335        
   fixed-typed-array-storage-var-index                1.1945+-0.0704            1.1547+-0.0479          might be 1.0345x faster
   fixed-typed-array-storage                          0.8625+-0.0246            0.8294+-0.0467          might be 1.0399x faster
   Float32Array-matrix-mult                           4.2921+-0.4402            4.0438+-0.3149          might be 1.0614x faster
   Float32Array-to-Float64Array-set                  45.8997+-1.2373     ?     47.0768+-2.0671        ? might be 1.0256x slower
   Float64Array-alloc-long-lived                     58.4412+-1.4192     ?     58.5718+-1.3157        ?
   Float64Array-to-Int16Array-set                    59.3593+-4.0435           59.3320+-1.7569        
   fold-double-to-int                                12.7600+-0.3215     ?     12.7770+-0.4392        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.9481+-1.2141            9.6530+-1.1566          might be 1.1342x faster
   fold-get-by-id-to-multi-get-by-offset              9.3643+-0.5576            9.0266+-0.3310          might be 1.0374x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.5377+-1.5213            7.7426+-1.8286          might be 1.1027x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      7.9885+-1.5092            7.9015+-2.2351          might be 1.0110x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      7.9266+-1.3812     ?      8.2106+-0.4392        ? might be 1.0358x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      5.9677+-1.2023     ?      6.0640+-0.5600        ? might be 1.0161x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.6280+-1.2961            8.2563+-0.6696          might be 1.0450x faster
   fold-put-by-id-to-multi-put-by-offset              9.0149+-0.8574     ?      9.1357+-0.3271        ? might be 1.0134x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     66.4464+-2.0151     ^      9.0206+-1.1966        ^ definitely 7.3661x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     69.3903+-4.1105     ^      9.1848+-1.0785        ^ definitely 7.5549x faster
   fold-put-structure                                 6.0617+-0.7470            5.7636+-0.5138          might be 1.0517x faster
   for-of-iterate-array-entries                      11.6996+-0.2994           11.6213+-0.3773        
   for-of-iterate-array-keys                          3.3269+-0.0299            3.3098+-0.1325        
   for-of-iterate-array-values                        3.4129+-0.1981            3.3538+-0.1552          might be 1.0176x faster
   fround                                            19.8466+-0.4911           19.4609+-0.8974          might be 1.0198x faster
   ftl-library-inlining-dataview                     58.8506+-3.5593           57.8617+-1.8893          might be 1.0171x faster
   ftl-library-inlining                             112.7565+-2.7984          110.2152+-3.8195          might be 1.0231x faster
   function-dot-apply                                 2.0640+-0.1262            2.0005+-0.0410          might be 1.0317x faster
   function-test                                      2.6644+-0.1344     ?      2.7072+-0.2407        ? might be 1.0161x slower
   function-with-eval                               108.7946+-5.3004          106.7708+-1.3764          might be 1.0190x faster
   gcse-poly-get-less-obvious                        14.5932+-0.1884           14.5314+-0.1702        
   gcse-poly-get                                     16.5972+-0.8657           16.5384+-0.6985        
   gcse                                               3.8281+-0.0435     ?      3.8981+-0.2483        ? might be 1.0183x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.6221+-0.0970            2.5762+-0.0360          might be 1.0178x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1367+-0.3695            5.9647+-0.0529          might be 1.0288x faster
   get-by-id-chain-from-try-block                     5.5568+-0.3376     ?      5.7222+-0.2092        ? might be 1.0298x slower
   get-by-id-check-structure-elimination              4.4759+-0.3030     ?      4.7421+-1.0019        ? might be 1.0595x slower
   get-by-id-proto-or-self                           14.5833+-0.5900     ?     15.0490+-0.8913        ? might be 1.0319x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8776+-0.0396     ?      2.9685+-0.1420        ? might be 1.0316x slower
   get-by-id-self-or-proto                           14.6407+-0.4343     ?     15.5737+-1.6295        ? might be 1.0637x slower
   get-by-val-out-of-bounds                           4.0728+-0.2882            4.0267+-0.3145          might be 1.0114x faster
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.8942+-0.0968            2.8776+-0.1237        
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.2343+-0.1063            6.2162+-0.0831        
   get-by-val-with-string-chain-from-try-block   
                                                      5.7051+-0.4995            5.5408+-0.0784          might be 1.0296x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.2142+-0.1461            5.1998+-0.1782        
   get-by-val-with-string-proto-or-self              14.7446+-0.4795           14.6557+-0.6380        
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.1765+-0.1339     ?      3.2645+-0.1719        ? might be 1.0277x slower
   get-by-val-with-string-self-or-proto              16.0129+-2.4384           15.9579+-2.4149        
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0168+-0.0548     ?      3.0315+-0.0376        ?
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.5020+-0.1487     ?     12.5836+-0.1556        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.6441+-0.1045            5.6306+-0.1031        
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.5818+-0.5928           11.3604+-0.4770          might be 1.0195x faster
   get-by-val-with-symbol-proto-or-self              14.8860+-0.2004     ?     15.1407+-1.6836        ? might be 1.0171x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.0162+-0.1118     ?      4.0366+-0.2368        ?
   get-by-val-with-symbol-self-or-proto              14.8101+-0.8663     ?     15.6434+-1.5701        ? might be 1.0563x slower
   get_callee_monomorphic                             2.5562+-0.6468            2.4752+-0.2525          might be 1.0327x faster
   get_callee_polymorphic                             3.2980+-0.1991            3.1816+-0.2178          might be 1.0366x faster
   getter-no-activation                               4.8550+-0.2324     ?      5.1459+-0.4497        ? might be 1.0599x slower
   getter-prototype                                  10.0082+-0.3072     ?     10.1360+-1.0966        ? might be 1.0128x slower
   getter-richards                                  121.3746+-9.8202     ?    124.8890+-4.0976        ? might be 1.0290x slower
   getter                                             5.4423+-0.4604            5.2927+-0.0975          might be 1.0283x faster
   global-object-access-with-mutating-structure   
                                                      5.6146+-0.5311     ?      5.7203+-0.1983        ? might be 1.0188x slower
   global-var-const-infer-fire-from-opt               0.8462+-0.1737     ?      0.9050+-0.1021        ? might be 1.0695x slower
   global-var-const-infer                             0.7635+-0.1149            0.7018+-0.0469          might be 1.0880x faster
   HashMap-put-get-iterate-keys                      27.4141+-2.7462           25.5320+-3.3546          might be 1.0737x faster
   HashMap-put-get-iterate                           26.6028+-0.7866     ?     26.7569+-2.0420        ?
   HashMap-string-put-get-iterate                    24.8033+-0.2596     ?     25.4359+-1.7637        ? might be 1.0255x slower
   hoist-make-rope                                    8.0048+-1.3946     ?      8.2037+-1.5820        ? might be 1.0248x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.1225+-0.0434     ?      4.4717+-0.5218        ? might be 1.0847x slower
   hoist-poly-check-structure                         3.3285+-0.2082     ?      3.3333+-0.0976        ?
   imul-double-only                                   6.7031+-0.2838     ?      6.8803+-0.2693        ? might be 1.0264x slower
   imul-int-only                                      7.9868+-0.4347            7.9595+-0.5232        
   imul-mixed                                         6.6873+-0.6495            6.5135+-0.3703          might be 1.0267x faster
   in-four-cases                                     17.7727+-0.5785     ?     17.8608+-1.2742        ?
   in-one-case-false                                  9.3367+-0.2883            9.3104+-0.3333        
   in-one-case-true                                   9.3683+-0.3129            9.3635+-0.3227        
   in-two-cases                                       9.7913+-0.2443            9.7766+-0.1341        
   indexed-properties-in-objects                      2.8030+-0.0333            2.7928+-0.0404        
   infer-closure-const-then-mov-no-inline             3.2415+-0.3664     ?      3.7240+-0.6667        ? might be 1.1489x slower
   infer-closure-const-then-mov                      17.5105+-1.1719     ?     17.6900+-0.2938        ? might be 1.0103x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.6285+-1.1157           11.2753+-0.4030          might be 1.0313x faster
   infer-closure-const-then-put-to-scope             21.9205+-0.5546     ?     21.9351+-0.7701        ?
   infer-closure-const-then-reenter-no-inline   
                                                     51.6376+-1.2520     ?     53.3860+-6.6140        ? might be 1.0339x slower
   infer-closure-const-then-reenter                  23.3280+-3.3668           22.2540+-1.0271          might be 1.0483x faster
   infer-constant-global-property                     3.4418+-0.1357     ?      3.6636+-0.5436        ? might be 1.0644x slower
   infer-constant-property                            2.6674+-0.1393            2.6190+-0.0691          might be 1.0185x faster
   infer-one-time-closure-ten-vars                    8.7757+-1.1701            8.4888+-0.3970          might be 1.0338x faster
   infer-one-time-closure-two-vars                    7.9174+-0.2729     ?      8.3086+-0.4876        ? might be 1.0494x slower
   infer-one-time-closure                             8.1741+-0.8396            8.1252+-0.7522        
   infer-one-time-deep-closure                       12.8452+-0.3913     ?     12.8685+-0.6968        ?
   inline-arguments-access                            3.7232+-0.3493            3.6741+-0.2809          might be 1.0134x faster
   inline-arguments-aliased-access                    3.6613+-0.1769     ?      3.7440+-0.2030        ? might be 1.0226x slower
   inline-arguments-local-escape                      3.6514+-0.1854     ?      3.6514+-0.1585        ?
   inline-get-scoped-var                              4.9023+-0.3562            4.8287+-0.0636          might be 1.0152x faster
   inlined-put-by-id-transition                      10.2627+-0.3884            9.8281+-1.0958          might be 1.0442x faster
   inlined-put-by-val-with-string-transition   
                                                    113.4969+-2.9352     ^     75.2108+-1.6511        ^ definitely 1.5091x faster
   inlined-put-by-val-with-symbol-transition   
                                                    115.8724+-1.5557     ^     72.8320+-1.1636        ^ definitely 1.5910x faster
   int-or-other-abs-then-get-by-val                   4.8403+-0.0837     ?      4.9946+-0.2007        ? might be 1.0319x slower
   int-or-other-abs-zero-then-get-by-val             16.3602+-0.2597           16.2937+-0.3449        
   int-or-other-add-then-get-by-val                   4.1599+-0.0867     ?      4.1654+-0.0890        ?
   int-or-other-add                                   5.0682+-0.3340            4.9832+-0.3326          might be 1.0171x faster
   int-or-other-div-then-get-by-val                   3.8398+-0.2257            3.8215+-0.1520        
   int-or-other-max-then-get-by-val                   4.1185+-0.1425     ?      4.1250+-0.2253        ?
   int-or-other-min-then-get-by-val                   4.0475+-0.0271     ?      4.1122+-0.1682        ? might be 1.0160x slower
   int-or-other-mod-then-get-by-val                   3.7261+-0.1946            3.5557+-0.1226          might be 1.0479x faster
   int-or-other-mul-then-get-by-val                   3.7337+-0.1787     ?      3.7847+-0.2092        ? might be 1.0137x slower
   int-or-other-neg-then-get-by-val                   4.5055+-0.1435     ?      4.5714+-0.2538        ? might be 1.0146x slower
   int-or-other-neg-zero-then-get-by-val             16.6490+-0.7155           16.3929+-1.3004          might be 1.0156x faster
   int-or-other-sub-then-get-by-val                   4.2081+-0.1585            4.1754+-0.1862        
   int-or-other-sub                                   3.5267+-0.1883            3.4370+-0.0400          might be 1.0261x faster
   int-overflow-local                                 4.4567+-0.4171            4.3351+-0.0814          might be 1.0280x faster
   Int16Array-alloc-long-lived                       43.0228+-1.5034           43.0153+-1.6439        
   Int16Array-bubble-sort-with-byteLength            20.0147+-0.5400     ^     18.0602+-0.5974        ^ definitely 1.1082x faster
   Int16Array-bubble-sort                            20.2470+-2.2290           18.0142+-0.7518          might be 1.1239x faster
   Int16Array-load-int-mul                            1.4462+-0.0774     ?      1.4872+-0.1126        ? might be 1.0283x slower
   Int16Array-to-Int32Array-set                      45.2297+-3.6748           43.4820+-0.5739          might be 1.0402x faster
   Int32Array-alloc-large                            12.3084+-0.9543     ?     12.3715+-0.7181        ?
   Int32Array-alloc-long-lived                       48.1345+-2.3172           47.7355+-1.1425        
   Int32Array-alloc                                   2.6729+-0.2375     ?      2.8467+-0.3669        ? might be 1.0651x slower
   Int32Array-Int8Array-view-alloc                    6.2802+-0.1626     ?      6.4185+-0.5336        ? might be 1.0220x slower
   int52-spill                                        4.7600+-0.1683            4.6898+-0.1810          might be 1.0150x faster
   Int8Array-alloc-long-lived                        37.8097+-1.4122     ?     38.2945+-1.4213        ? might be 1.0128x slower
   Int8Array-load-with-byteLength                     3.5747+-0.2141     ?      3.5778+-0.1805        ?
   Int8Array-load                                     3.4385+-0.1602            3.4382+-0.0611        
   integer-divide                                    10.6865+-0.1968           10.5795+-0.0496          might be 1.0101x faster
   integer-modulo                                     1.6740+-0.1441     ?      1.6763+-0.0371        ?
   is-boolean-fold-tricky                             3.9280+-0.5351            3.7242+-0.0715          might be 1.0547x faster
   is-boolean-fold                                    2.6158+-0.0345     ?      2.6631+-0.0867        ? might be 1.0181x slower
   is-function-fold-tricky-internal-function   
                                                      9.9630+-0.2591     ?     10.0500+-0.1926        ?
   is-function-fold-tricky                            4.2075+-0.2905            4.0880+-0.0589          might be 1.0292x faster
   is-function-fold                                   2.6428+-0.0509            2.6298+-0.1222        
   is-number-fold-tricky                              4.0707+-0.2041     ?      4.0734+-0.1177        ?
   is-number-fold                                     2.7197+-0.1813            2.6761+-0.1556          might be 1.0163x faster
   is-object-or-null-fold-functions                   2.8170+-0.4480            2.6567+-0.0172          might be 1.0603x faster
   is-object-or-null-fold-less-tricky                 4.1339+-0.1980     ?      4.2045+-0.1731        ? might be 1.0171x slower
   is-object-or-null-fold-tricky                      5.5187+-0.2800            5.2793+-0.1054          might be 1.0454x faster
   is-object-or-null-fold                             2.7286+-0.1072            2.6480+-0.0284          might be 1.0304x faster
   is-object-or-null-trickier-function                4.2444+-0.0516            4.2431+-0.2746        
   is-object-or-null-trickier-internal-function   
                                                     10.6367+-0.3694           10.4359+-0.1287          might be 1.0192x faster
   is-object-or-null-tricky-function                  4.3088+-0.5403            4.2480+-0.2286          might be 1.0143x faster
   is-object-or-null-tricky-internal-function   
                                                      7.7950+-0.1434     ?      7.8079+-0.2492        ?
   is-string-fold-tricky                              4.1037+-0.2519            4.0950+-0.1644        
   is-string-fold                                     2.6072+-0.0672     ?      2.7101+-0.1028        ? might be 1.0395x slower
   is-undefined-fold-tricky                           3.2855+-0.0337     ?      3.2945+-0.1271        ?
   is-undefined-fold                                  2.6392+-0.1220     ?      2.6809+-0.1197        ? might be 1.0158x slower
   JSONP-negative-0                                   0.2442+-0.0083     ?      0.2455+-0.0131        ?
   large-int-captured                                 3.8880+-0.4350            3.8615+-0.1630        
   large-int-neg                                     14.3981+-0.1985     ?     15.3138+-1.1064        ? might be 1.0636x slower
   large-int                                         14.4443+-1.5970           13.8995+-0.3446          might be 1.0392x faster
   load-varargs-elimination                          22.1561+-1.5405           20.8760+-0.5470          might be 1.0613x faster
   logical-not-weird-types                            2.9675+-0.1324            2.9150+-0.0775          might be 1.0180x faster
   logical-not                                        4.3093+-0.0574     ?      4.3489+-0.1351        ?
   lots-of-fields                                     9.4321+-0.2805     ?      9.5175+-0.6506        ?
   make-indexed-storage                               2.7640+-0.2955     ?      2.8398+-0.1465        ? might be 1.0274x slower
   make-rope-cse                                      3.9323+-0.2983            3.6565+-0.2885          might be 1.0754x faster
   marsaglia-larger-ints                             32.9594+-2.6742           32.6393+-0.5669        
   marsaglia-osr-entry                               21.2010+-0.8463     ?     22.2730+-2.1657        ? might be 1.0506x slower
   math-with-out-of-bounds-array-values              22.8708+-3.1505           22.2825+-0.3013          might be 1.0264x faster
   max-boolean                                        2.7102+-0.0614     ?      2.7190+-0.1102        ?
   method-on-number                                  16.6821+-0.1489     ?     18.1460+-2.2751        ? might be 1.0878x slower
   min-boolean                                        2.7454+-0.0787     ?      2.7633+-0.1292        ?
   minus-boolean-double                               3.1472+-0.1426            3.1260+-0.0744        
   minus-boolean                                      2.2997+-0.0613     ?      2.5505+-0.4292        ? might be 1.1090x slower
   misc-strict-eq                                    31.2397+-0.5981           31.2242+-1.0330        
   mod-boolean-double                                11.5528+-0.4133           11.3300+-0.3689          might be 1.0197x faster
   mod-boolean                                        8.4568+-0.2518     ?      8.6425+-0.4129        ? might be 1.0220x slower
   mul-boolean-double                                 3.6710+-0.0654     ?      3.7640+-0.2778        ? might be 1.0253x slower
   mul-boolean                                        2.7670+-0.0547     ?      2.8477+-0.0861        ? might be 1.0292x slower
   neg-boolean                                        3.1082+-0.0785            3.0692+-0.0709          might be 1.0127x faster
   negative-zero-divide                               0.3542+-0.0732            0.3186+-0.0040          might be 1.1119x faster
   negative-zero-modulo                               0.3535+-0.0320            0.3228+-0.0050          might be 1.0949x faster
   negative-zero-negate                               0.3101+-0.0263            0.3085+-0.0263        
   nested-function-parsing                           42.9380+-0.8578     ?     43.1874+-3.3770        ?
   new-array-buffer-dead                             89.7038+-1.6329           88.6490+-0.5644          might be 1.0119x faster
   new-array-buffer-push                              5.9844+-0.3940            5.9097+-0.4161          might be 1.0126x faster
   new-array-dead                                    13.9341+-0.7371           13.8020+-0.8735        
   new-array-push                                     3.5596+-0.2698            3.4985+-0.2288          might be 1.0175x faster
   no-inline-constructor                             32.2123+-1.9255           31.5076+-0.6167          might be 1.0224x faster
   number-test                                        2.8126+-0.0326     ?      2.8601+-0.0716        ? might be 1.0169x slower
   object-closure-call                                5.0543+-0.4320            5.0018+-0.4305          might be 1.0105x faster
   object-get-own-property-symbols-on-large-array   
                                                      3.8403+-0.2344            3.5911+-0.1806          might be 1.0694x faster
   object-test                                        2.5922+-0.0936     ?      2.6271+-0.0536        ? might be 1.0135x slower
   obvious-sink-pathology-taken                     101.8335+-2.2668          101.0276+-0.5741        
   obvious-sink-pathology                            96.9016+-0.6491           96.8526+-1.6090        
   obviously-elidable-new-object                     29.2731+-2.0336           27.8242+-2.1716          might be 1.0521x faster
   plus-boolean-arith                                 2.4063+-0.1132            2.3744+-0.0493          might be 1.0134x faster
   plus-boolean-double                                3.1262+-0.2352            3.0864+-0.0911          might be 1.0129x faster
   plus-boolean                                       2.5908+-0.0624     ?      2.5991+-0.1603        ?
   poly-chain-access-different-prototypes-simple   
                                                      3.2959+-0.1144            3.2343+-0.1098          might be 1.0190x faster
   poly-chain-access-different-prototypes             2.8756+-0.0483     ?      2.9127+-0.0600        ? might be 1.0129x slower
   poly-chain-access-simpler                          3.3681+-0.3544            3.2745+-0.1212          might be 1.0286x faster
   poly-chain-access                                  3.3468+-0.1107            3.3390+-0.0364        
   poly-stricteq                                     51.2652+-0.9369     ?     51.3693+-1.3195        ?
   polymorphic-array-call                             1.2632+-0.0658     ?      1.3308+-0.0772        ? might be 1.0535x slower
   polymorphic-get-by-id                              2.7952+-0.0789     ?      2.7968+-0.0690        ?
   polymorphic-put-by-id                             25.8075+-1.1297           25.3528+-1.7042          might be 1.0179x faster
   polymorphic-put-by-val-with-string               363.6154+-9.6330     ^     27.8351+-2.9592        ^ definitely 13.0632x faster
   polymorphic-put-by-val-with-symbol               389.7329+-16.8297    ^     26.5987+-0.9531        ^ definitely 14.6523x faster
   polymorphic-structure                             13.5520+-0.0862           13.3789+-0.1740          might be 1.0129x faster
   polyvariant-monomorphic-get-by-id                  6.6448+-0.6484            6.4723+-0.5253          might be 1.0267x faster
   proto-getter-access                                8.1575+-0.2432     ?      8.1928+-0.1704        ?
   prototype-access-with-mutating-prototype           5.4362+-0.4054     ?      5.7037+-0.7029        ? might be 1.0492x slower
   put-by-id-replace-and-transition                   7.7102+-0.5653            7.0806+-0.4895          might be 1.0889x faster
   put-by-id-slightly-polymorphic                     2.7327+-0.1866            2.7192+-0.1200        
   put-by-id                                          9.6223+-0.2077     ?      9.7433+-0.4443        ? might be 1.0126x slower
   put-by-val-direct                                  0.3199+-0.0167     ?      0.3469+-0.0534        ? might be 1.0845x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.2581+-0.4053     ?      5.5893+-0.3809        ? might be 1.0630x slower
   put-by-val-machine-int                             2.3729+-0.1866     ?      2.3870+-0.1882        ?
   put-by-val-with-string-replace-and-transition   
                                                     87.7953+-5.9126     ^     10.1464+-0.3603        ^ definitely 8.6529x faster
   put-by-val-with-string-slightly-polymorphic   
                                                     33.6233+-1.0861     ^      2.8926+-0.2251        ^ definitely 11.6240x faster
   put-by-val-with-string                            86.0762+-6.6056     ^     10.3429+-1.1055        ^ definitely 8.3223x faster
   put-by-val-with-symbol-replace-and-transition   
                                                     87.9910+-9.1864     ^     11.4424+-0.3748        ^ definitely 7.6899x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                     32.9027+-1.1053     ^      3.0971+-0.1209        ^ definitely 10.6237x faster
   put-by-val-with-symbol                            82.1315+-1.1424     ^     10.2524+-0.5991        ^ definitely 8.0110x faster
   rare-osr-exit-on-local                            14.9467+-0.3756           14.9382+-0.3717        
   register-pressure-from-osr                        16.7762+-0.9383     ?     16.9037+-0.3588        ?
   repeat-multi-get-by-offset                        22.8320+-2.2132           22.4648+-0.7937          might be 1.0163x faster
   setter-prototype                                   7.4230+-0.1434     ?      7.5397+-0.3293        ? might be 1.0157x slower
   setter                                             5.4998+-0.5423     ?      5.8981+-0.5576        ? might be 1.0724x slower
   simple-activation-demo                            25.1650+-1.1333     ?     25.3315+-1.7973        ?
   simple-getter-access                              10.7664+-0.8219           10.5552+-0.3087          might be 1.0200x faster
   simple-poly-call-nested                            8.4214+-0.3904     ?      8.4803+-1.4038        ?
   simple-poly-call                                   1.2958+-0.0921            1.2657+-0.1790          might be 1.0237x faster
   sin-boolean                                       17.9883+-0.5439     ?     18.1531+-0.7382        ?
   singleton-scope                                   63.6418+-4.0311           61.8835+-1.3434          might be 1.0284x faster
   sink-function                                      9.8258+-0.4924            9.7692+-0.6748        
   sink-huge-activation                              15.9443+-0.6513     ?     16.0815+-1.0086        ?
   sinkable-new-object-dag                           56.6597+-1.3592           55.4562+-0.6962          might be 1.0217x faster
   sinkable-new-object-taken                         42.9341+-0.6443     ?     43.5657+-2.2804        ? might be 1.0147x slower
   sinkable-new-object                               30.3599+-2.0341           29.6320+-0.7412          might be 1.0246x faster
   slow-array-profile-convergence                     2.7775+-0.4832            2.7106+-0.2497          might be 1.0247x faster
   slow-convergence                                   2.5590+-0.3282            2.4441+-0.1049          might be 1.0470x faster
   slow-ternaries                                    17.8310+-0.7020     ?     18.0041+-0.2527        ?
   sorting-benchmark                                 17.7008+-1.1402     ?     18.6253+-3.3963        ? might be 1.0522x slower
   sparse-conditional                                 1.1530+-0.0669     ?      1.1700+-0.0366        ? might be 1.0148x slower
   splice-to-remove                                  12.6245+-0.8439           12.1635+-0.5963          might be 1.0379x faster
   string-char-code-at                               14.5536+-0.2931     ?     14.7928+-0.4039        ? might be 1.0164x slower
   string-concat-object                               2.2286+-0.2026            2.1703+-0.2057          might be 1.0269x faster
   string-concat-pair-object                          2.3052+-0.2176            2.0967+-0.2825          might be 1.0995x faster
   string-concat-pair-simple                          9.1679+-0.3148     ?      9.3113+-0.3154        ? might be 1.0156x slower
   string-concat-simple                               9.4254+-0.4866            9.2645+-0.2957          might be 1.0174x faster
   string-cons-repeat                                 6.7887+-1.3811            6.5272+-0.1456          might be 1.0401x faster
   string-cons-tower                                  7.5748+-2.3902            6.7133+-0.5477          might be 1.1283x faster
   string-equality                                   16.1498+-2.3893           15.5743+-0.4963          might be 1.0370x faster
   string-get-by-val-big-char                         6.9600+-0.4176            6.7378+-0.0894          might be 1.0330x faster
   string-get-by-val-out-of-bounds-insane             3.4255+-0.3439            3.3853+-0.2539          might be 1.0119x faster
   string-get-by-val-out-of-bounds                    4.0610+-0.2671     ?      4.0889+-0.1711        ?
   string-get-by-val                                  2.7915+-0.0743     ?      2.9331+-0.2236        ? might be 1.0507x slower
   string-hash                                        1.8417+-0.0296     ?      1.9033+-0.1347        ? might be 1.0334x slower
   string-long-ident-equality                        12.7574+-0.3292     ?     13.3976+-1.4838        ? might be 1.0502x slower
   string-out-of-bounds                              10.4902+-0.4300           10.2953+-0.1293          might be 1.0189x faster
   string-repeat-arith                               28.9441+-3.5250           28.2797+-1.0284          might be 1.0235x faster
   string-sub                                        56.2777+-1.2771           54.6345+-1.4681          might be 1.0301x faster
   string-test                                        2.7452+-0.0371            2.7245+-0.0936        
   string-var-equality                               27.4783+-3.0983           27.3992+-3.2982        
   structure-hoist-over-transitions                   2.3610+-0.1594     ?      2.4357+-0.1107        ? might be 1.0316x slower
   substring-concat-weird                            36.4015+-0.7329     ?     37.2979+-2.6875        ? might be 1.0246x slower
   substring-concat                                  41.5767+-4.0379           39.4585+-0.8074          might be 1.0537x faster
   substring                                         46.5780+-1.9989           46.3568+-4.0786        
   switch-char-constant                               2.7561+-0.1282     ?      2.7746+-0.0504        ?
   switch-char                                        6.2315+-0.6797            5.9367+-1.0066          might be 1.0497x faster
   switch-constant                                    7.2404+-0.1664     ?      7.2517+-0.6493        ?
   switch-string-basic-big-var                       16.4704+-0.8372     ?     16.7288+-1.3050        ? might be 1.0157x slower
   switch-string-basic-big                           15.6505+-1.0940           15.3030+-0.2589          might be 1.0227x faster
   switch-string-basic-var                           13.3815+-0.2674     ?     13.6429+-0.6771        ? might be 1.0195x slower
   switch-string-basic                               13.2849+-0.7692     ?     13.2880+-0.4919        ?
   switch-string-big-length-tower-var                18.1430+-0.1587     ?     18.1996+-0.4947        ?
   switch-string-length-tower-var                    13.7699+-1.2697     ?     13.8521+-1.8614        ?
   switch-string-length-tower                        12.1495+-0.1803           12.0515+-0.3668        
   switch-string-short                               12.0372+-0.3859     ?     12.1193+-0.2723        ?
   switch                                            11.4389+-0.4885     ?     11.7690+-1.1770        ? might be 1.0289x slower
   tear-off-arguments-simple                          2.9457+-0.1369            2.9124+-0.2543          might be 1.0115x faster
   tear-off-arguments                                 4.0392+-0.2020     ?      4.2564+-0.1024        ? might be 1.0538x slower
   temporal-structure                                12.3824+-0.3336           12.1137+-0.1337          might be 1.0222x faster
   to-int32-boolean                                  13.7756+-1.1365           13.4539+-0.1519          might be 1.0239x faster
   try-catch-get-by-val-cloned-arguments             14.6117+-0.7250           14.4850+-0.9222        
   try-catch-get-by-val-direct-arguments              6.8022+-0.4926            6.2780+-0.1237          might be 1.0835x faster
   try-catch-get-by-val-scoped-arguments              7.8057+-0.7513            7.5796+-0.1226          might be 1.0298x faster
   typed-array-get-set-by-val-profiling              27.6259+-0.8796     ?     27.6599+-1.4222        ?
   undefined-property-access                        233.3607+-9.6968          232.7073+-2.8755        
   undefined-test                                     2.8510+-0.0436     ?      2.8795+-0.1710        ?
   unprofiled-licm                                   14.5299+-0.4930           14.2424+-0.8414          might be 1.0202x faster
   varargs-call                                      14.1352+-0.3861           14.1260+-0.2976        
   varargs-construct-inline                          23.1499+-2.6409           22.6848+-1.0342          might be 1.0205x faster
   varargs-construct                                 20.1577+-0.9943     ?     20.5761+-0.3606        ? might be 1.0208x slower
   varargs-inline                                     8.6895+-0.6069            8.5875+-0.2457          might be 1.0119x faster
   varargs-strict-mode                                9.4213+-0.2786            9.1904+-0.3502          might be 1.0251x faster
   varargs                                            9.4245+-0.7268            9.2122+-0.2051          might be 1.0230x faster
   weird-inlining-const-prop                          2.1864+-0.2612     ?      2.4000+-0.4780        ? might be 1.0977x slower

   &lt;geometric&gt;                                        8.4161+-0.0189     ^      7.8552+-0.0353        ^ definitely 1.0714x faster

                                                          master                      ic                                        
Geomean of preferred means:
   &lt;scaled-result&gt;                                   26.2713+-0.1074     ^     25.8708+-0.0888        ^ definitely 1.0155x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116823</commentid>
    <comment_count>15</comment_count>
      <attachid>258791</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-11 18:56:10 -0700</bug_when>
    <thetext>Comment on attachment 258791
Patch

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

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:493
&gt; +    emitGetVirtualRegister(base, regT0);

In this slow path, only |base| register was not reloaded.

Essentially, this line is not needed.
Since the current fast path carefully reserve the content of the |base|. So this line is not needed.
But I think missing this line may cause some problems in the future.

Since this is the slow path and the slow path is already slow, taking the conservative implementation (inserting this line) is not bad I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1117010</commentid>
    <comment_count>16</comment_count>
      <attachid>258791</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-12 12:10:25 -0700</bug_when>
    <thetext>Comment on attachment 258791
Patch

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

&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:452
&gt; +    doneCases.append(jump());

Here, in get_by_val, doneCases are split into fastDoneCase and nextHotPathCase.
But since put_by_val has no difference between done and nextHotPath, we just link the all successful cases to done label.
Is it preferable keeping them split?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119320</commentid>
    <comment_count>17</comment_count>
      <attachid>258791</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-20 12:40:26 -0700</bug_when>
    <thetext>Comment on attachment 258791
Patch

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

&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:452
&gt;&gt; +    doneCases.append(jump());
&gt; 
&gt; Here, in get_by_val, doneCases are split into fastDoneCase and nextHotPathCase.
&gt; But since put_by_val has no difference between done and nextHotPath, we just link the all successful cases to done label.
&gt; Is it preferable keeping them split?

I think this is fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119325</commentid>
    <comment_count>18</comment_count>
      <attachid>258791</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-20 13:02:07 -0700</bug_when>
    <thetext>Comment on attachment 258791
Patch

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

Thank you for your review.

&gt;&gt;&gt; Source/JavaScriptCore/jit/JITPropertyAccess.cpp:452
&gt;&gt;&gt; +    doneCases.append(jump());
&gt;&gt; 
&gt;&gt; Here, in get_by_val, doneCases are split into fastDoneCase and nextHotPathCase.
&gt;&gt; But since put_by_val has no difference between done and nextHotPath, we just link the all successful cases to done label.
&gt;&gt; Is it preferable keeping them split?
&gt; 
&gt; I think this is fine.

I see :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119326</commentid>
    <comment_count>19</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-20 13:18:53 -0700</bug_when>
    <thetext>Committed r188696: &lt;http://trac.webkit.org/changeset/188696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119505</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-08-20 17:51:46 -0700</bug_when>
    <thetext>It appears that this change caused the tests below to fail on 32bit iOS.  

    jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-int16array.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-int32array-overflow-values.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-int32array.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-int8array.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-uint16array.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-uint32array-overflow-values.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-uint32array.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-uint8array.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/dfg-uint8clampedarray.js.layout-no-llint
    jsc-layout-tests.yaml/js/script-tests/regress-141098.js.layout-no-llint

In all cases, the tests crash because they run out of executable memory.  Here is the traceback of one of the test:
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: Ran out of executable memory while allocating 1484 bytes.
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 1   0x433c4f JSC::LinkBuffer::allocate(unsigned long, void*, JSC::JITCompilationEffort)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 2   0x433cdd void JSC::LinkBuffer::copyCompactAndLinkCode&lt;unsigned short&gt;(JSC::MacroAssembler&amp;, void*, JSC::JITCompilationEffort)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 3   0x35df49 JSC::JIT::privateCompile(JSC::JITCompilationEffort)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 4   0x2fc531 JSC::ScriptExecutable::prepareForExecutionImpl(JSC::ExecState*, JSC::JSFunction*, JSC::JSScope*, JSC::CodeSpecializationKind)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 5   0x3560cd JSC::Interpreter::execute(JSC::EvalExecutable*, JSC::ExecState*, JSC::JSValue, JSC::JSScope*)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 6   0x355f63 JSC::eval(JSC::ExecState*)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 7   0x37cfaf operationCallEval
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 8   0x7c45495
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 9   0x7c3fb99
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 10  0x4490d1 vmEntryToJavaScript
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 11  0x36af0b JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 12  0x358c31 JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 13  0x1fda8f JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 14  0x795f1 jscmain(int, char**)
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 15  0x7910b main
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 16  0x34191873 &lt;redacted&gt;
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: ./test_script_855: line 2: 13988 Segmentation fault: 11  &quot;$@&quot; /System/Library/Frameworks/JavaScriptCore.framework/Resources/jsc --useFTLJIT\=false --enableFunctionDotArguments\=true --useLLInt\=false resources/standalone-pre.js dfg-float32array.js resources/standalone-post.js
[2015-08-20 15:42:00] INFO: jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: ERROR: Unexpected exit code: 139

Given that all of these failures are when testing with the LLInt turned off, they are benign.  With the LLInt on, these out of memory errors would cause the JavaScript code being compiled to execute in the LLInt.  Also, it is quite possible that we wouldn&apos;t be using that much executable memory in the first place.

I filed &lt;https://bugs.webkit.org/show_bug.cgi?id=148273&gt; to change these tests to not run the &quot;no-llint&quot; variants on iOS 32 bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119520</commentid>
    <comment_count>21</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-08-20 18:05:40 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; It appears that this change caused the tests below to fail on 32bit iOS.  
&gt; 
&gt;     jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint
&gt;     jsc-layout-tests.yaml/js/script-tests/dfg-int16array.js.layout-no-llint
&gt;    
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-int32array-overflow-values.js.
&gt; layout-no-llint
&gt;     jsc-layout-tests.yaml/js/script-tests/dfg-int32array.js.layout-no-llint
&gt;     jsc-layout-tests.yaml/js/script-tests/dfg-int8array.js.layout-no-llint
&gt;     jsc-layout-tests.yaml/js/script-tests/dfg-uint16array.js.layout-no-llint
&gt;    
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-uint32array-overflow-values.js.
&gt; layout-no-llint
&gt;     jsc-layout-tests.yaml/js/script-tests/dfg-uint32array.js.layout-no-llint
&gt;     jsc-layout-tests.yaml/js/script-tests/dfg-uint8array.js.layout-no-llint
&gt;    
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-uint8clampedarray.js.layout-no-
&gt; llint
&gt;     jsc-layout-tests.yaml/js/script-tests/regress-141098.js.layout-no-llint
&gt; 
&gt; In all cases, the tests crash because they run out of executable memory. 
&gt; Here is the traceback of one of the test:
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; Ran out of executable memory while allocating 1484 bytes.
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 1
&gt; 0x433c4f JSC::LinkBuffer::allocate(unsigned long, void*,
&gt; JSC::JITCompilationEffort)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 2
&gt; 0x433cdd void JSC::LinkBuffer::copyCompactAndLinkCode&lt;unsigned
&gt; short&gt;(JSC::MacroAssembler&amp;, void*, JSC::JITCompilationEffort)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 3
&gt; 0x35df49 JSC::JIT::privateCompile(JSC::JITCompilationEffort)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 4
&gt; 0x2fc531 JSC::ScriptExecutable::prepareForExecutionImpl(JSC::ExecState*,
&gt; JSC::JSFunction*, JSC::JSScope*, JSC::CodeSpecializationKind)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 5
&gt; 0x3560cd JSC::Interpreter::execute(JSC::EvalExecutable*, JSC::ExecState*,
&gt; JSC::JSValue, JSC::JSScope*)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 6
&gt; 0x355f63 JSC::eval(JSC::ExecState*)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 7
&gt; 0x37cfaf operationCallEval
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 8
&gt; 0x7c45495
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint: 9
&gt; 0x7c3fb99
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; 10  0x4490d1 vmEntryToJavaScript
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; 11  0x36af0b JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; 12  0x358c31 JSC::Interpreter::execute(JSC::ProgramExecutable*,
&gt; JSC::ExecState*, JSC::JSObject*)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; 13  0x1fda8f JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;,
&gt; JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; 14  0x795f1 jscmain(int, char**)
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; 15  0x7910b main
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; 16  0x34191873 &lt;redacted&gt;
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; ./test_script_855: line 2: 13988 Segmentation fault: 11  &quot;$@&quot;
&gt; /System/Library/Frameworks/JavaScriptCore.framework/Resources/jsc
&gt; --useFTLJIT\=false --enableFunctionDotArguments\=true --useLLInt\=false
&gt; resources/standalone-pre.js dfg-float32array.js resources/standalone-post.js
&gt; [2015-08-20 15:42:00] INFO:
&gt; jsc-layout-tests.yaml/js/script-tests/dfg-float32array.js.layout-no-llint:
&gt; ERROR: Unexpected exit code: 139
&gt; 
&gt; Given that all of these failures are when testing with the LLInt turned off,
&gt; they are benign.  With the LLInt on, these out of memory errors would cause
&gt; the JavaScript code being compiled to execute in the LLInt.  Also, it is
&gt; quite possible that we wouldn&apos;t be using that much executable memory in the
&gt; first place.
&gt; 
&gt; I filed &lt;https://bugs.webkit.org/show_bug.cgi?id=148273&gt; to change these
&gt; tests to not run the &quot;no-llint&quot; variants on iOS 32 bit.

Thank you. I&apos;ll investigate it soon.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258527</attachid>
            <date>2015-08-07 14:17:27 -0700</date>
            <delta_ts>2015-08-07 16:52:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147760-20150807141716.patch</filename>
            <type>text/plain</type>
            <size>31134</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MTEwOTE1YTk3ZWJkMGU4YzhlZGIzOWI0YmNkODYzODgxMTMxNmMyLi5hZmUwYjRmNmQ4NTE2ZTVi
Yzk4NzAzY2EwMjhkODRiNTAwNzQ0N2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzMiBAQAorMjAxNS0wOC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgcHV0X2J5X2lkIGxpa2UgSUMgaW50byBwdXRfYnlf
dmFsIHdoZW4gdGhlIGdpdmVuIG5hbWUgaXMgU3RyaW5nIG9yIFN5bWJvbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NzYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5
VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlf
dmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hl
ZElkKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwpOgorCiAyMDE1LTA4LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgogCiAgICAgICAgIEFkZCBNYWNyb0Fzc2VtYmxlcjo6cGF0Y2hhYmxlQnJhbmNoNjQg
YW5kIGZpeCBBUk02NCdzIHBhdGNoYWJsZUJyYW5jaFB0cgogICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NzYxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAppbmRleCBjYzVkYTNiMTliNzllN2Yx
NmY2OTE2OTcxMDYzM2VmZDcxZTRmMTQ3Li5iZmEyOWU0MjFlMDZlMTYxYmVkNzMzY2UyZTY0NzFi
MjJkYTFhZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCkBAIC0xMzQsNiArMTM0LDEzIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBt
CiB9CiAKICNpZiBFTkFCTEUoSklUKQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxv
Y2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBjb21w
dXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8s
IHVpZCwKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEobG9ja2Vy
LCBiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKTsKK30KKwogUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCiAgICAgY29uc3QgQ29u
Y3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBDYWxs
TGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAppbmRleCA2NTJjY2MxOGEwMmZi
MzkxM2U1NmE5YTBhMmE4YjU0NTE1ZDk5MDQ0Li5iMDQ3MzQ3MmE3MTg2ZjdjNTVjMGFhMDYyYzFh
OGNjYjE3NzcxYjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkU3RhdHVzLmgKQEAgLTc0LDYgKzc0LDEwIEBAIGNsYXNzIFB1dEJ5SWRTdGF0dXMgewogICAg
IHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KTsKICAg
ICAKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxp
bmVCbG9jaywgQ29kZUJsb2NrKiBkZmdCbG9jaywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLCBT
dHViSW5mb01hcCYgZGZnTWFwLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsK
KworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisjZW5kaWYKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
dGU7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKaW5kZXggMjY4YTc1NzZiYzM2NjcyNmEwNmM4OGIxZmMwYmUzNDNlZmMwZTdjMy4u
Nzk0YjNiMDQ4NzI1NjNiNmRlZDVmNjFhOWY0NTFkZTI5NjNmOTMzYyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTM0MzQsMTggKzM0
MzQsNDAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkK
ICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKICAgICAgICAgY2FzZSBvcF9wdXRf
YnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0KLSAgICAgICAgICAgIEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQ
cm9maWxlLCBBcnJheTo6V3JpdGUpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBw
cm9wZXJ0eSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9w
ZXJ0eSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7Ci0gICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZCgwKTsgLy8gTGVhdmUgcm9vbSBmb3IgcHJvcGVydHkgc3RvcmFnZS4KLSAg
ICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2ZSByb29tIGZvciBsZW5ndGguCi0g
ICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3Bjb2RlSUQgPT0gb3BfcHV0X2J5
X3ZhbF9kaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2Rl
LmFzV29yZCgpKSwgT3BJbmZvKDApKTsKKyAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBvcGNv
ZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKKyAgICAgICAgICAgIGJvb2wgY29tcGlsZWRB
c1B1dEJ5SWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1f
bG9jayk7CisgICAgICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0
YWNrVG9wLT5tX2J5VmFsSW5mb3MuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5i
eXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVj
b2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21l
cyBudWxsLgorICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5m
b3JtYXRpb24uCisgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAmJiBieVZhbEluZm8tPnN0
dWJJbmZvICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aCAmJiAhbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMo
KS5lbnN1cmUoYnlWYWxJbmZvLT5jYWNoZWRJZC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAg
ICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZp
ZXJOdW1iZXJdOworCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwg
T3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBQdXRCeUlkU3Rh
dHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1
cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUHV0
QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJl
Y3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFjb21waWxlZEFzUHV0QnlJZCkgeworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1v
ZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBB
cnJheTo6V3JpdGUpOworCisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7Cisg
ICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOworICAgICAgICAgICAgICAg
IGFkZFZhckFyZ0NoaWxkKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCgw
KTsgLy8gTGVhdmUgcm9vbSBmb3IgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZCgwKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3RoLgorICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBpc0RpcmVjdCA/IFB1dEJ5VmFsRGlyZWN0IDog
UHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkpOworICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggOTAxMDhhZjE1ZGViN2QwNmEzYjRiNzVj
M2VmOWUxZjFiYTlkNWE5ZC4uZGJhZGVlOTYyODVmOGZlNWFlYzU0ODMwYzMwYmJmMGIzMzA4MzY3
NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0yMzEsNiArMjMxLDEzIEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGlj
IHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorICAg
ICAgICB7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAg
aml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChieVZhbEluZm8sIHJl
dHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIH0KKwogICAgICAg
ICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNKiB2bSwgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNjEsNiArMjY4LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1
cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxl
R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgY29uc3Qg
SWRlbnRpZmllciYpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJ
bmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQ
dHIsIFB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImKTsKIAogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJ
VEFycmF5TW9kZSk7CiAKQEAgLTM2NSw3ICszNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNo
YWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1p
dEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMg
aW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUu
CisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdU
MiBjb250YWlucyBpbmRlY2luZyB0eXBlLgogICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUg
aXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAogICAgICAgICAv
LyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVh
ZHkgcHJvZmlsZWQuCiAgICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCkBAIC0zODcs
NiArMzk1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRGbG9hdFR5
cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5
cGVkQXJyYXlUeXBlKTsKIAogICAgICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGVtaXRHZXRCeVZh
bFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiosIGNvbnN0IElkZW50aWZpZXImLCBKdW1wTGlzdCYg
ZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsKKyAgICAgICAgSklUUHV0QnlJZEdlbmVy
YXRvciBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rpb24qLCBQdXRLaW5kLCBjb25z
dCBJZGVudGlmaWVyJiwgSnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcyk7
CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUgeyBNYXlCZUZpbmFsLCBLbm93bk5vdEZp
bmFsIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCmlu
ZGV4IDRiOWUyNGE4YWI4ZGE2ZThkYzEyNjNhM2Y5YWI4ZTY4MTYwZDIxZjQuLjg3OGYyMWU5NzM5
NTQ0OGY0ZjdhMTY5MzY0ZWVlZWJjODFhNjQ2NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNDc4LDEwICs0NzgsMTYgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmoKICAgICBiYXNlLT5wdXREaXJlY3Qodm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVj
b2RlKHZhbHVlKSk7CiB9CiAKK0FMV0FZU19JTkxJTkUgc3RhdGljIGJvb2wgaXNTdHJpbmdPclN5
bWJvbChKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS5pc1N0cmluZygpIHx8IHZh
bHVlLmlzU3ltYm9sKCk7Cit9CisKIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFs
dWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0o
KTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgeworICAgICAgICBieVZh
bEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3Jp
cHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpKSB7CiAgICAg
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKQEAgLTQ5Mywx
MyArNDk5LDE5IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsCiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVlLnB1dEJ5SW5kZXgoY2FsbEZyYW1lLCBp
LCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShj
YWxsRnJhbWUpOwotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkgeyAv
LyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4K
LSAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAgICAgICAgICAgYmFzZVZhbHVlLnB1dChj
YWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0
dXJuOwogICAgIH0KKworICAgIGF1dG8gcHJvcGVydHkgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtl
eShjYWxsRnJhbWUpOworICAgIC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcg
dGhyZXcgYW4gZXhjZXB0aW9uLgorICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNT
dHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVy
dHkpKQorICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3Ry
aWN0TW9kZSgpKTsKKyAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVl
LCBzbG90KTsKIH0KIAogc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2
YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCkBAIC01MDcsNiArNTE5LDcgQEAgc3RhdGljIHZv
aWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2Jq
ZWN0LCBKU1ZhbHVlIHMKICAgICBib29sIGlzU3RyaWN0TW9kZSA9IGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPmlzU3RyaWN0TW9kZSgpOwogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMy
KCkpKSB7CiAgICAgICAgIC8vIERlc3BpdGUgaXRzIG5hbWUsIEpTVmFsdWU6OmlzVUludDMyIHdp
bGwgcmV0dXJuIHRydWUgb25seSBmb3IgcG9zaXRpdmUgYm94ZWQgaW50MzJfdDsgYWxsIHRob3Nl
IHZhbHVlcyBhcmUgdmFsaWQgYXJyYXkgaW5kaWNlcy4KKyAgICAgICAgYnlWYWxJbmZvLT50b29r
U2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJfdCBpbmRleCA9IHN1YnNjcmlwdC5hc1VJ
bnQzMigpOwogICAgICAgICBBU1NFUlQoaXNJbmRleChpbmRleCkpOwogICAgICAgICBpZiAoYmFz
ZU9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5Rm9yUHV0RGlyZWN0KGluZGV4KSkgewpAQCAtNTIz
LDYgKzUzNiw3IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZy
YW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzCiAgICAgICAgIGRvdWJsZSBzdWJz
Y3JpcHRBc0RvdWJsZSA9IHN1YnNjcmlwdC5hc0RvdWJsZSgpOwogICAgICAgICB1aW50MzJfdCBz
dWJzY3JpcHRBc1VJbnQzMiA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihzdWJzY3JpcHRBc0RvdWJs
ZSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHRBc0RvdWJsZSA9PSBzdWJzY3JpcHRBc1VJbnQzMiAm
JiBpc0luZGV4KHN1YnNjcmlwdEFzVUludDMyKSkgeworICAgICAgICAgICAgYnlWYWxJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5k
ZXgoY2FsbEZyYW1lLCBzdWJzY3JpcHRBc1VJbnQzMiwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/
IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNTMzLDE0ICs1NDcsMjAgQEAg
c3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0
KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHMKICAgICBpZiAoY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlv
bigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4
ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpCisgICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRl
eCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7CisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQ
YXRoID0gdHJ1ZTsKICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1l
LCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0RGlyZWN0SW5kZXhT
aG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwotICAgIGVsc2Ugewot
ICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBpc1N0cmljdE1vZGUpOwot
ICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eSwg
dmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgaWYgKGJ5VmFsSW5m
by0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZv
LT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRo
ID0gdHJ1ZTsKKworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGlzU3RyaWN0
TW9kZSk7CisgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVy
dHksIHZhbHVlLCBzbG90KTsKIH0KLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwg
QnlWYWxJbmZvKiBieVZhbEluZm8pCisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKQEAgLTU4
NSwxMCArNjA1LDI0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbChFeGVj
U3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlCiAgICAgICAgIH0KICAgICB9
CiAKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNTdHJpbmdPclN5bWJvbChzdWJz
Y3JpcHQpKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2Ny
aXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisKKyAgICAgICAgaWYgKCFzdWJzY3JpcHQuaXNTdHJp
bmcoKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgICAgICBBU1NFUlQo
ZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKCFi
eVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFs
V2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0dXJuQWRk
cmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBOb3REaXJlY3QsIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGV4ZWMt
PmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgICAgIGJhc2VWYWx1ZS5wdXQoZXhl
YywgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
ICAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5m
byk7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbChFeGVj
U3RhdGUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9
IGNhbGxGcmFtZS0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
Y2FsbEZyYW1lKTsKQEAgLTYzMiw2ICs2NjYsMjggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkRpcmVjdFB1dEJ5VmFsKEV4ZWNTdGF0ZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZQog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorCisgICAgaWYgKGJhc2VWYWx1ZS5pc09i
amVjdCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgeworICAgICAgICBKU09iamVj
dCogYmFzZU9iamVjdCA9IGpzQ2FzdDxKU09iamVjdCo+KGJhc2VWYWx1ZSk7CisgICAgICAgIGNv
bnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoY2Fs
bEZyYW1lKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChw
cm9wZXJ0eU5hbWUpOworCisgICAgICAgIGlmICghc3Vic2NyaXB0LmlzU3RyaW5nKCkgfHwgIWlu
ZGV4KSB7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOwor
ICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoJnZtLCBjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9B
RERSRVNTKSwgRGlyZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKTsK
KyAgICAgICAgaWYgKGluZGV4KQorICAgICAgICAgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0SW5k
ZXgoY2FsbEZyYW1lLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0
RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmpl
Y3QsIGlzU3RyaWN0TW9kZSk7CisgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoY2Fs
bEZyYW1lLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgZGlyZWN0UHV0QnlWYWwoY2FsbEZyYW1lLCBvYmpl
Y3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CiB9CiAKQEAgLTE0NzMsNyArMTUyOSw3
IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNl
VmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCCiAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogCiAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKLSAgICBp
ZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiBieVZhbEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5
KQorICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChzdWJz
Y3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQogICAgICAgICBieVZh
bEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICByZXR1cm4gYmFzZVZhbHVlLmdldChl
eGVjLCBwcm9wZXJ0eSk7CkBAIC0xNTM3LDcgKzE1OTMsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSgogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYm
IChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCBzdWJzY3JpcHQuaXNTdHJpbmcoKSkpIHsKKyAgICBp
ZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpKSB7
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJv
cGVydHlLZXkoZXhlYyk7CiAKICAgICAgICAgaWYgKCFzdWJzY3JpcHQuaXNTdHJpbmcoKSB8fCAh
cGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5oCmluZGV4IGM2ZDI4YzZhM2ZkZDNlNmQ5ODUwODgzNzU1OWU1MTA5MjU1YWI4
YWUuLjc5MWU4ZDg1OWJiMTMwYWZmOTJmZTA1NzI4NmZmNzM2MzYyMTU2YmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yNjIsOCArMjYyLDggQEAgdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3QoRXhlY1N0
YXRlKiwgU3RydWN0dXJlU3R1YkkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlk
RGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29kZWRKU1ZhbHVlKSBX
VEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlW
YWxJbmZvKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVj
dFB1dEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplKEV4ZWNT
dGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5
VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5U
RVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxFdmFsKEV4
ZWNTdGF0ZSosIEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYTAwY2NiMjVlNTI5Nzg3OWQy
NjM0NTNiNjQ2YmIwZTM3ZDU5NmJlZi4uYWM0NzFhZWU1ZjM3N2MzZjExMzZiYzI4ZTAwYjdjNDZl
MzliMWMyYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKQEAgLTMwNywxMCArMzA3LDExIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFs
UmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOworICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleCA9IGVt
aXRQYXRjaGFibGVKdW1wSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsKKyAgICBhZGRTbG93
Q2FzZShub3RJbmRleCk7CiAgICAgLy8gU2VlIGNvbW1lbnQgaW4gb3BfZ2V0X2J5X3ZhbC4KICAg
ICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJ
Zk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhD
ZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4
aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogICAgIApAQCAtMzQxLDcgKzM0Miw3IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRp
b25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVP
ZmZzZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSkpOwor
ICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5
VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2Zp
bGUsIGRvbmUpKTsKIH0KIAogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91
c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQpAQCAtNDM0LDYgKzQzNSw0OCBA
QCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK0pJ
VFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBkb25lQ2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMp
Cit7CisgICAgLy8gYmFzZTogcmVnVDAKKyAgICAvLyBwcm9wZXJ0eTogcmVnVDEKKyAgICAvLyBz
Y3JhdGNoOiByZWdUMgorCisgICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7
CisKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDEpKTsKKyAg
ICBpZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVu
ZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0
dXJlSURPZmZzZXQoKSksIG1fdm0tPnN5bWJvbFN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDEsIFN5bWJvbDo6b2Zmc2V0T2ZQcml2YXRlTmFtZSgpKSwgcmVn
VDEpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0
dXJlKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVnVDEpOworICAgICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDEpKTsKKyAgICAgICAgc2xvd0Nh
c2VzLmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgQWRkcmVzcyhyZWdUMSwgU3RyaW5nSW1wbDo6
ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkp
KTsKKyAgICB9CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Qx
LCBUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKSk7CisKKyAgICAvLyBXcml0ZSBi
YXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBi
YXJyaWVyLAorICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKKworICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zm
c2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBEb250U3BpbGwsIG1fY29kZUJs
b2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7CisKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5z
dHViSW5mbygpLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZG9uZUNhc2VzLmFw
cGVuZChqdW1wKCkpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC00NDIsOCArNDg1LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXMKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCiAgICAgCiAgICAgSklUQXJyYXlNb2Rl
IG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CkBAIC00NjYsNyArNTA5LDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAg
IGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVy
YXRpb25QdXRCeVZhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QwLCByZWdUMSwgcmVnVDIs
IGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpA
QCAtMTEzOSw2ICsxMTgyLDM3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkCiAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0
QnlWYWxHZW5lcmljKSk7CiB9CiAKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQor
eworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKworICAgIEp1
bXBMaXN0IGRvbmVDYXNlczsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChjdXJyZW50SW5zdHJ1
Y3Rpb24sIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOworCisg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBw
YXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1
ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7
CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAu
bGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgZm9yIChj
b25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fY2FsbHMpIHsKKyAgICAgICAgaWYgKGNhbGxTaXRlLnRv
KQorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBGdW5jdGlvblB0
cihjYWxsU2l0ZS50bykpOworICAgIH0KKyAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOwor
CisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisg
ICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBwdXRf
YnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1
cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3Bl
cnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRh
dGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9
IHByb3BlcnR5TmFtZTsKKyAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7
CisKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25M
YWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOworfQorCisKIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCmluZGV4IGE4ZDY5YWNk
Y2Y2Nzc0OTRiOGVlNjJkMWUxMmFiOTJmNTg5Y2UwMDAuLmI3YmEyNmJjMTA3NmEwM2QwNjU2Mzc0
YzNiMjg2N2QzZjJiMmRhMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtMzIyLDggKzMyMiw5IEBAIHZvaWQgSklU
OjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICAKICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJl
Z1QyKTsKICAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZO
b3RKU0NlbGwoYmFzZSwgcmVnVDEpOworICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRj
aGFibGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpCisgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwogICAgIGVtaXRBcnJheVByb2ZpbGlu
Z1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDEsIHByb2ZpbGUpOwogICAgIGFuZDMyKFRydXN0ZWRJ
bW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QxKTsKICAgICAKQEAgLTM1NCw3ICszNTUsNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBt
X2J5dGVjb2RlT2Zmc2V0LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUs
IGRvbmUpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBt
b2RlLCBwcm9maWxlLCBkb25lKSk7CiB9CiAKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJp
Y0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRj
aGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKQEAgLTQ1Myw2
ICs0NTQsNTEgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXQKICAgICByZXR1cm4gc2xvd0Nhc2Vz
OwogfQogCitKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFB1dEtpbmQgcHV0S2luZCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYg
c2xvd0Nhc2VzKQoreworICAgIC8vIGJhc2U6IHRhZyhyZWdUMSksIHBheWxvYWQocmVnVDApCisg
ICAgLy8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCisKKyAgICBpbnQgYmFz
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1p
dEp1bXBJZk5vdEpTQ2VsbChyZWdUMykpOworICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2wo
KSkgeworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgbV92bS0+c3ltYm9s
U3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgU3ltYm9s
OjpvZmZzZXRPZlByaXZhdGVOYW1lKCkpLCByZWdUMik7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIs
IEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTU3RyaW5nOjpvZmZzZXRPZlZh
bHVlKCkpLCByZWdUMik7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMikpOworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJv
LCBBZGRyZXNzKHJlZ1QyLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMy
KFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkpOworICAgIH0KKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDIsIFRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1l
LmltcGwoKSkpKTsKKworICAgIC8vIFdyaXRlIGJhcnJpZXIgYnJlYWtzIHRoZSByZWdpc3RlcnMu
IFNvIGFmdGVyIGlzc3VpbmcgdGhlIHdyaXRlIGJhcnJpZXIsCisgICAgLy8gcmVsb2FkIHRoZSBy
ZWdpc3RlcnMuCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVy
QmFzZSk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAg
ICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJT
ZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5
KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVnVDEsIERvbnRTcGlsbCwgbV9j
b2RlQmxvY2stPmVjbWFNb2RlKCksIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRo
KCp0aGlzKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsK
KworICAgIC8vIEpJVFB1dEJ5SWRHZW5lcmF0b3Igb25seSBwcmVzZXJ2ZSB0aGUgdmFsdWUgYW5k
IHRoZSBiYXNlJ3MgcGF5bG9hZCwgd2UgaGF2ZSB0byByZWxvYWQgdGhlIHRhZy4KKyAgICBlbWl0
TG9hZFRhZyhiYXNlLCByZWdUMSk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdl
bi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMywgcmVnVDIsIHJlZ1Qx
LCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2Fs
bChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisK
KyAgICByZXR1cm4gZ2VuOworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKQEAgLTQ2MSw4ICs1MDcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJv
ZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9b
bV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RK
U0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8v
IGJhc2Ugbm90IGFycmF5IGNoZWNrCiAgICAgCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9v
c2VBcnJheU1vZGUocHJvZmlsZSk7CkBAIC01MDAsMTQgKzU0NiwxNCBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0NhcwogICAgIGFkZENhbGxBcmd1bWVudChyZWdUMSk7CiAgICAgYWRkQ2FsbEFyZ3Vt
ZW50KHJlZ1QwKTsKICAgICBhZGRDYWxsQXJndW1lbnQoVHJ1c3RlZEltbVB0cihieVZhbEluZm8p
KTsKLSAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVyYXRpb25QdXRCeVZhbCk7CisgICAgQ2Fs
bCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0RpcmVjdCA/IG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKICNl
bHNlCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVk
dWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3Qg
aGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KICAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVn
VDEpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2Fk
KHZhbHVlLCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNE
aXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbCA6IG9wZXJhdGlvblB1dEJ5VmFsLCByZWdU
MiwgcmVnVDEsIHJlZ1QzLCByZWdUMCwgcmVnVDUsIHJlZ1Q0LCBieVZhbEluZm8pOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZh
bE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDIsIHJlZ1QxLCByZWdU
MywgcmVnVDAsIHJlZ1Q1LCByZWdUNCwgYnlWYWxJbmZvKTsKICNlbmRpZgogCiAgICAgbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQg
PSBzbG93UGF0aDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258544</attachid>
            <date>2015-08-07 16:53:02 -0700</date>
            <delta_ts>2015-08-07 17:00:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147760-20150807165251.patch</filename>
            <type>text/plain</type>
            <size>71029</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA3
MTEwOTE1YTk3ZWJkMGU4YzhlZGIzOWI0YmNkODYzODgxMTMxNmMyLi5iMjU0ZmZkOWUzMmY5ZjIz
YjU2ZjgxYzE5MWUzYmU4MjI3ZjJmYTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSw1OSBAQAorMjAxNS0wOC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgcHV0X2J5X2lkIGxpa2UgSUMgaW50byBwdXRfYnlf
dmFsIHdoZW4gdGhlIGdpdmVuIG5hbWUgaXMgU3RyaW5nIG9yIFN5bWJvbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NzYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHB1dF9i
eV9pZCBJQyB0byBwdXRfYnlfdmFsIGJ5IGNhY2hpbmcgdGhlIG9uZSBjYW5kaWRhdGUgaWQsCisg
ICAgICAgIGl0IGlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSBnZXRfYnlfdmFsIElDIGV4dGVuc2lv
bi4KKyAgICAgICAgSXQgd2lsbCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiBFUzYgU3ltYm9scyBhbmQg
RVM2IGNvbXB1dGVkIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBsaXRlcmFscy4KKworICAgICAg
ICBJbiB0aGlzIHBhdGNoLCB3ZSBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQ2hlY2tJZGVudCBhbmQg
UHV0QnlJZCAvIFB1dEJ5VmFsIGluIERGRywKKyAgICAgICAgc28gdGhpcyBwYXRjaCBkb2VzIG5v
dCBjaGFuZ2UgRlRMIGJlY2F1c2UgdGhlIGFib3ZlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc3Vw
cG9ydGVkIGluIEZUTC4KKworICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdElkZW50aWZpZXJDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJ
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLWJyZWFrLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAg
ICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctZ2VuZXJhdGVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKGdl
bjEpOgorICAgICAgICAoZ2VuMik6CisgICAgICAgIChhc3NpZ24pOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWdlbmVyaWMuanM6IEFkZGVkLgorICAgICAg
ICAoc2hvdWxkQmUpOgorICAgICAgICAoYXNzaWduKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVhay5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRC
ZSk6CisgICAgICAgIChhc3NpZ24pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLWdlbmVyaWMuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAg
ICAgICAoYXNzaWduKToKKwogMjAxNS0wOC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4KIAogICAgICAgICBBZGQgTWFjcm9Bc3NlbWJsZXI6OnBhdGNoYWJsZUJyYW5j
aDY0IGFuZCBmaXggQVJNNjQncyBwYXRjaGFibGVCcmFuY2hQdHIKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzc2MQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKaW5kZXggY2M1ZGEzYjE5Yjc5
ZTdmMTZmNjkxNjk3MTA2MzNlZmQ3MWU0ZjE0Ny4uYmZhMjllNDIxZTA2ZTE2MWJlZDczM2NlMmU2
NDcxYjIyZGExYWUwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
dXRCeUlkU3RhdHVzLmNwcApAQCAtMTM0LDYgKzEzNCwxMyBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01h
cCYgbQogfQogCiAjaWYgRU5BQkxFKEpJVCkKK1B1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29k
ZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVP
cmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICByZXR1cm4g
Y29tcHV0ZUZvclN0dWJJbmZvKAorICAgICAgICBsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIHN0dWJJ
bmZvLCB1aWQsCisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKGxv
Y2tlciwgYmFzZWxpbmVCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSk7Cit9CisKIFB1
dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKAogICAgIGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCiAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwg
Q2FsbExpbmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBjYWxsRXhpdFNpdGVEYXRhKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKaW5kZXggNjUyY2NjMThh
MDJmYjM5MTNlNTZhOWEwYTJhOGI1NDUxNWQ5OTA0NC4uYjA0NzM0NzJhNzE4NmY3YzU1YzBhYTA2
MmMxYThjY2IxNzc3MWI4NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1B1dEJ5SWRTdGF0dXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFN0YXR1cy5oCkBAIC03NCw2ICs3NCwxMCBAQCBjbGFzcyBQdXRCeUlkU3RhdHVzIHsK
ICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKEpTR2xvYmFsT2JqZWN0KiwgY29u
c3QgU3RydWN0dXJlU2V0JiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCwgYm9vbCBpc0RpcmVjdCk7
CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJh
c2VsaW5lQmxvY2ssIENvZGVCbG9jayogZGZnQmxvY2ssIFN0dWJJbmZvTWFwJiBiYXNlbGluZU1h
cCwgU3R1YkluZm9NYXAmIGRmZ01hcCwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVG
b3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGlu
ZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpOworI2VuZGlmCiAgICAgCiAgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X3N0YXRlOyB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCmluZGV4IDI2OGE3NTc2YmMzNjY3MjZhMDZjODhiMWZjMGJlMzQzZWZjMGU3
YzMuLjc5NGIzYjA0ODcyNTYzYjZkZWQ1ZjYxYTlmNDUxZGUyOTYzZjkzM2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0zNDM0LDE4
ICszNDM0LDQwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGlt
aXQpCiAgICAgICAgIGNhc2Ugb3BfcHV0X2J5X3ZhbF9kaXJlY3Q6CiAgICAgICAgIGNhc2Ugb3Bf
cHV0X2J5X3ZhbDogewogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotCi0gICAgICAgICAgICBBcnJh
eU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZSwgQXJyYXk6OldyaXRlKTsKLSAgICAgICAgICAgIAogICAgICAgICAgICAgTm9k
ZSogcHJvcGVydHkgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIE5vZGUqIHZhbHVlID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2UpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
cHJvcGVydHkpOwotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwotICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoMCk7IC8vIExlYXZlIHJvb20gZm9yIHByb3BlcnR5IHN0b3JhZ2Uu
Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCgwKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3Ro
LgotICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wY29kZUlEID09IG9wX3B1
dF9ieV92YWxfZGlyZWN0ID8gUHV0QnlWYWxEaXJlY3QgOiBQdXRCeVZhbCwgT3BJbmZvKGFycmF5
TW9kZS5hc1dvcmQoKSksIE9wSW5mbygwKSk7CisgICAgICAgICAgICBib29sIGlzRGlyZWN0ID0g
b3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CisgICAgICAgICAgICBib29sIGNvbXBp
bGVkQXNQdXRCeUlkID0gZmFsc2U7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5tX2xvY2spOworICAgICAgICAgICAgICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9pbmxp
bmVTdGFja1RvcC0+bV9ieVZhbEluZm9zLmdldChDb2RlT3JpZ2luKGN1cnJlbnRDb2RlT3JpZ2lu
KCkuYnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGVuIHRoZSBi
eXRlY29kZSBpcyBub3QgY29tcGlsZWQgaW4gdGhlIGJhc2VsaW5lIEpJVCwgYnlWYWxJbmZvIGJl
Y29tZXMgbnVsbC4KKyAgICAgICAgICAgICAgICAvLyBBdCB0aGF0IHRpbWUsIHRoZXJlIGlzIG5v
IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgIGlmIChieVZhbEluZm8gJiYgYnlWYWxJbmZv
LT5zdHViSW5mbyAmJiAhYnlWYWxJbmZvLT50b29rU2xvd1BhdGggJiYgIW1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZElkZW50KSkg
eworICAgICAgICAgICAgICAgICAgICBjb21waWxlZEFzUHV0QnlJZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2dyYXBoLmlkZW50aWZp
ZXJzKCkuZW5zdXJlKGJ5VmFsSW5mby0+Y2FjaGVkSWQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKKworICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrSWRl
bnQsIE9wSW5mbyh1aWQpLCBwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJ
ZFN0YXR1cyBwdXRCeUlkU3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KAorICAgICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBieVZhbEluZm8tPnN0dWJJbmZv
LCBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworCisgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZVB1dEJ5SWQoYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFsdWUsIHB1dEJ5SWRTdGF0dXMsIGlz
RGlyZWN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghY29tcGlsZWRBc1B1dEJ5SWQpIHsKKyAgICAgICAgICAgICAgICBBcnJheU1vZGUgYXJy
YXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmls
ZSwgQXJyYXk6OldyaXRlKTsKKworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGJhc2Up
OworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKKyAgICAgICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoMCk7IC8vIExlYXZlIHJvb20gZm9yIHByb3BlcnR5IHN0b3JhZ2UuCisgICAgICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoMCk7IC8vIExlYXZlIHJvb20gZm9yIGxlbmd0aC4KKyAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgaXNEaXJlY3QgPyBQdXRCeVZhbERpcmVj
dCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKDApKTsKKyAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfcHV0X2J5X3ZhbCk7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDkwMTA4YWYxNWRlYjdkMDZhM2I0
Yjc1YzNlZjllMWYxYmE5ZDVhOWQuLmZiODI3Yzk1MDRlZTkyMjJmYzY2ODQ1NzJlOGVkMjg3MTU3
MmJmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjMxLDYgKzIzMSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1dEJ5VmFsKGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKICAgICAgICAgfQogCisgICAgICAgIHN0
YXRpYyB2b2lkIGNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChWTSogdm0sIENvZGVCbG9jayog
Y29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5B
ZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkK
KyAgICAgICAgeworICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsKKyAgICAgICAg
ICAgIGppdC5tX2J5dGVjb2RlT2Zmc2V0ID0gYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworICAg
ICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICB9CisKICAg
ICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShWTSogdm0sIENvZGVC
bG9jayogY29kZUJsb2NrLCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzLCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogICAgICAgICB7CiAgICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOwpAQCAtMjYxLDYgKzI2OCw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiwg
UmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIGNv
bnN0IElkZW50aWZpZXImKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5
VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CisgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qLCBSZXR1cm5BZGRy
ZXNzUHRyLCBQdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAgICAgICAgdm9pZCBwcml2
YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRy
LCBKSVRBcnJheU1vZGUpOwogCkBAIC0zNjUsNyArMzczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5R2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1bXBMaXN0
IGVtaXRGbG9hdFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAm
IGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgCi0gICAgICAgIC8vIFByb3BlcnR5
IGlzIGluIHJlZ1QwLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0
eXBlLgorICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMSwgYmFzZSBpcyBpbiByZWdUMC4g
cmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KICAgICAgICAgLy8gVGhlIHZhbHVlIHRvIHN0
b3JlIGlzIG5vdCB5ZXQgbG9hZGVkLiBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQKICAgICAg
ICAgLy8gemVyby1leHRlbmRlZC4gQmFzZSBpcyBjZWxsIGNoZWNrZWQuIFN0cnVjdHVyZSBpcyBh
bHJlYWR5IHByb2ZpbGVkLgogICAgICAgICAvLyByZXR1cm5zIHRoZSBzbG93IGNhc2VzLgpAQCAt
Mzg2LDcgKzM5NCwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1pdElu
dFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUs
IFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheVB1
dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5
cGUpOwogCisgICAgICAgIC8vIElkZW50aWZpZXIgY2hlY2sgaGVscGVyIGZvciBHZXRCeVZhbCBh
bmQgUHV0QnlWYWwuCisgICAgICAgIHZvaWQgZW1pdElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklE
IGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3QgSWRlbnRpZmllciYsIEp1bXBMaXN0JiBz
bG93Q2FzZXMpOworCiAgICAgICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZW1pdEdldEJ5VmFsV2l0
aENhY2hlZElkKEluc3RydWN0aW9uKiwgY29uc3QgSWRlbnRpZmllciYsIEp1bXBMaXN0JiBkb25l
Q2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpOworICAgICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiosIFB1dEtpbmQsIGNvbnN0IElk
ZW50aWZpZXImLCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsKIAog
ICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwg
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXgg
NGI5ZTI0YThhYjhkYTZlOGRjMTI2M2EzZjlhYjhlNjgxNjBkMjFmNC4uNWQ4YTYwMjBhOGRmMTY5
Y2VhYWE1MzYxZTY3NTQ4MjRjZGI5MzE0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC00NzgsMTAgKzQ3OCwxNiBAQCB2b2lkIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iagogICAgIGJhc2UtPnB1dERpcmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUo
dmFsdWUpKTsKIH0KIAorQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBpc1N0cmluZ09yU3ltYm9s
KEpTVmFsdWUgdmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlLmlzU3RyaW5nKCkgfHwgdmFsdWUu
aXNTeW1ib2woKTsKK30KKwogc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwg
QnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwog
ICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CisgICAgICAgIGJ5VmFsSW5m
by0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5h
c1VJbnQzMigpOwogICAgICAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwpAQCAtNDkzLDEzICs0
OTksMTkgQEAgc3RhdGljIHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFs
dWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwKICAgICAgICAgICAgIH0KICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICBiYXNlVmFsdWUucHV0QnlJbmRleChjYWxsRnJhbWUsIGksIHZh
bHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxG
cmFtZSk7Ci0gICAgICAgIGlmICghY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKSB7IC8vIERv
bid0IHB1dCB0byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgotICAg
ICAgICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKSk7Ci0gICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxG
cmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm47
CiAgICAgfQorCisgICAgYXV0byBwcm9wZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNh
bGxGcmFtZSk7CisgICAgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJl
dyBhbiBleGNlcHRpb24uCisgICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmlu
Z09yU3ltYm9sKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkp
CisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIFB1dFByb3Bl
cnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RN
b2RlKCkpOworICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNs
b3QpOwogfQogCiBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVl
LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKQEAgLTUwNyw2ICs1MTksNyBAQCBzdGF0aWMgdm9pZCBk
aXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEpTVmFsdWUgcwogICAgIGJvb2wgaXNTdHJpY3RNb2RlID0gY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkp
IHsKICAgICAgICAgLy8gRGVzcGl0ZSBpdHMgbmFtZSwgSlNWYWx1ZTo6aXNVSW50MzIgd2lsbCBy
ZXR1cm4gdHJ1ZSBvbmx5IGZvciBwb3NpdGl2ZSBib3hlZCBpbnQzMl90OyBhbGwgdGhvc2UgdmFs
dWVzIGFyZSB2YWxpZCBhcnJheSBpbmRpY2VzLgorICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CiAgICAgICAgIHVpbnQzMl90IGluZGV4ID0gc3Vic2NyaXB0LmFzVUludDMy
KCk7CiAgICAgICAgIEFTU0VSVChpc0luZGV4KGluZGV4KSk7CiAgICAgICAgIGlmIChiYXNlT2Jq
ZWN0LT5jYW5TZXRJbmRleFF1aWNrbHlGb3JQdXREaXJlY3QoaW5kZXgpKSB7CkBAIC01MjMsNiAr
NTM2LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHMKICAgICAgICAgZG91YmxlIHN1YnNjcmlw
dEFzRG91YmxlID0gc3Vic2NyaXB0LmFzRG91YmxlKCk7CiAgICAgICAgIHVpbnQzMl90IHN1YnNj
cmlwdEFzVUludDMyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHN1YnNjcmlwdEFzRG91YmxlKTsK
ICAgICAgICAgaWYgKHN1YnNjcmlwdEFzRG91YmxlID09IHN1YnNjcmlwdEFzVUludDMyICYmIGlz
SW5kZXgoc3Vic2NyaXB0QXNVSW50MzIpKSB7CisgICAgICAgICAgICBieVZhbEluZm8tPnRvb2tT
bG93UGF0aCA9IHRydWU7CiAgICAgICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChj
YWxsRnJhbWUsIHN1YnNjcmlwdEFzVUludDMyLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0
RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC01MzMsMTQgKzU0NywyMCBAQCBzdGF0
aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGJh
c2VPYmplY3QsIEpTVmFsdWUgcwogICAgIGlmIChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBw
YXJzZUluZGV4KHByb3BlcnR5KSkKKyAgICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0g
cGFyc2VJbmRleChwcm9wZXJ0eSkpIHsKKyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGgg
PSB0cnVlOwogICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIGlu
ZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBpc1N0cmljdE1vZGUgPyBQdXREaXJlY3RJbmRleFNob3Vs
ZFRocm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIGlzU3RyaWN0TW9kZSk7Ci0gICAg
ICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdChjYWxsRnJhbWUtPnZtKCksIHByb3BlcnR5LCB2YWx1
ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBpZiAoYnlWYWxJbmZvLT5z
dHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNh
Y2hlZElkICE9IHByb3BlcnR5KSkKKyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOworCisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgaXNTdHJpY3RNb2Rl
KTsKKyAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eSwg
dmFsdWUsIHNsb3QpOwogfQotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4
ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
T3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwpAQCAtNTg1LDEw
ICs2MDUsMjQgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4ZWNTdGF0
ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UKICAgICAgICAgfQogICAgIH0KIAor
ICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlw
dCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQu
dG9Qcm9wZXJ0eUtleShleGVjKTsKKworICAgICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygp
IHx8ICFwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChleGVj
LT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFs
SW5mby0+c3R1YlJvdXRpbmUpOworICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIE5vdERpcmVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgfQorCisgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZXhlYy0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICAgICAgYmFzZVZhbHVlLnB1dChleGVjLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAg
IHB1dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsK
IH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsKEV4ZWNTdGF0
ZSogY2FsbEZyYW1lLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5
VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gY2Fs
bEZyYW1lLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBjYWxs
RnJhbWUpOwpAQCAtNjMyLDYgKzY2NiwyNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
RGlyZWN0UHV0QnlWYWwoRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisKKyAgICBpZiAoaXNTdHJpbmdPclN5bWJvbChz
dWJzY3JpcHQpKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKKyAgICAgICAgT3B0aW9uYWw8dWludDMy
X3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpOworCisgICAgICAgIGlmICghc3Vi
c2NyaXB0LmlzU3RyaW5nKCkgfHwgIWluZGV4KSB7CisgICAgICAgICAgICBBU1NFUlQoY2FsbEZy
YW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5
VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAgICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxX
aXRoQ2FjaGVkSWQoJnZtLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5pc1N0cmljdE1vZGUoKTsKKyAgICAgICAgaWYgKGluZGV4KQorICAgICAgICAgICAg
b2JqZWN0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAw
LCBpc1N0cmljdE1vZGUgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5k
ZXhTaG91bGROb3RUaHJvdyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3Qob2JqZWN0LCBpc1N0cmljdE1vZGUpOworICAgICAgICAgICAgb2JqZWN0LT5w
dXREaXJlY3QoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBzbG90KTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgZGlyZWN0UHV0QnlWYWwoY2Fs
bEZyYW1lLCBvYmplY3QsIHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CiB9CiAKQEAgLTE0
NzMsNyArMTUyOCw3IEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCCiAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwogCiAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNl
dCgpKTsKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiBieVZhbEluZm8tPmNhY2hlZElk
ICE9IHByb3BlcnR5KQorICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdP
clN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQog
ICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICByZXR1cm4gYmFz
ZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7CkBAIC0xNTM3LDcgKzE1OTIsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSgogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpICYmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCBzdWJzY3JpcHQuaXNTdHJpbmco
KSkpIHsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNTdHJpbmdPclN5bWJvbChz
dWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CiAKICAgICAgICAgaWYgKCFzdWJzY3JpcHQuaXNT
dHJpbmcoKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IGM2ZDI4YzZhM2ZkZDNlNmQ5ODUwODgzNzU1
OWU1MTA5MjU1YWI4YWUuLjc5MWU4ZDg1OWJiMTMwYWZmOTJmZTA1NzI4NmZmNzM2MzYyMTU2YmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yNjIsOCAr
MjYyLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWls
ZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29k
ZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9w
dGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbElu
Zm8qKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkNhbGxFdmFsKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYTAwY2Ni
MjVlNTI5Nzg3OWQyNjM0NTNiNjQ2YmIwZTM3ZDU5NmJlZi4uYmEzN2I0ZDdkZGFhYzg0NzBjNjAx
YWJlMDAyY2I5Y2FjNzM1ZDg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTIwOCwxNiArMjA4LDcgQEAgSklUR2V0QnlJZEdlbmVy
YXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW8KICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
IAogICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMSkpOwotICAg
IGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5k
KGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1
cmVJRE9mZnNldCgpKSwgbV92bS0+c3ltYm9sU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAgIGxv
YWRQdHIoQWRkcmVzcyhyZWdUMSwgU3ltYm9sOjpvZmZzZXRPZlByaXZhdGVOYW1lKCkpLCByZWdU
Myk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1
cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IG1fdm0tPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3Mo
cmVnVDEsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMykpOwotICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBBZGRyZXNzKHJlZ1QzLCBTdHJpbmdJbXBsOjpm
bGFnc09mZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkp
OwotICAgIH0KLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDMs
IFRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpKTsKKyAgICBlbWl0SWRlbnRpZmll
ckNoZWNrKHJlZ1QxLCByZWdUMywgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwogCiAgICAgSklU
R2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1f
Ynl0ZWNvZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLApAQCAtMzA3
LDEwICsyOTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxv
Y2stPmFkZEJ5VmFsSW5mbygpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwg
cmVnVDAsIHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRp
YXRlSW50ZWdlcihyZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKKyAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJ
Zk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEpOworICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsK
ICAgICAvLyBTZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgogICAgIHplcm9FeHRlbmQzMlRv
UHRyKHJlZ1QxLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1Qw
LCBiYXNlKTsKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1Qy
LCBwcm9maWxlKTsKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCBy
ZWdUMik7CiAgICAgCkBAIC0zNDEsNyArMzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAogICAgIExhYmVsIGRv
bmUgPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5
VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxl
SnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lKSk7CisgICAgbV9ieVZhbENvbXBp
bGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVj
b2RlT2Zmc2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSkpOwogfQog
CiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhp
bmdUeXBlIGluZGV4aW5nU2hhcGUpCkBAIC00MzQsNiArNDI2LDM5IEBAIEpJVDo6SnVtcExpc3Qg
SklUOjplbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUGF0CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAorSklUUHV0QnlJZEdlbmVyYXRv
ciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcykKK3sKKyAgICAvLyBiYXNl
OiByZWdUMAorICAgIC8vIHByb3BlcnR5OiByZWdUMQorICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCisK
KyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIHNsb3dDYXNl
cy5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMSkpOworICAgIGVtaXRJZGVudGlmaWVy
Q2hlY2socmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CisKKyAgICAvLyBX
cml0ZSBiYXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3
cml0ZSBiYXJyaWVyLAorICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRXcml0
ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0R2V0Vmly
dHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKKworICAgIEpJVFB1dEJ5
SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVj
b2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNW
YWx1ZVJlZ3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBEb250U3BpbGwsIG1f
Y29kZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0
aCgqdGhpcyk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgTGFiZWwgY29s
ZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7
CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCks
IGdlbi5zdHViSW5mbygpLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZG9uZUNh
c2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC00NDIsOCArNDY3LDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXMKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CiAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAg
bGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawor
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCiAgICAgCiAgICAgSklUQXJy
YXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CkBAIC00NjYsNyArNDkxLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHBy
b3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIp
OwogICAgIGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50
SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwg
OiBvcGVyYXRpb25QdXRCeVZhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QwLCByZWdUMSwg
cmVnVDIsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJ
bnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBj
YWxsOwpAQCAtOTg4LDYgKzEwMTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlND
ZWxsKiBvd25lcikKICNlbmRpZiAvLyBFTkFCTEUoR0dDKQogfQogCit2b2lkIEpJVDo6ZW1pdElk
ZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3Qg
SWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAgIGlm
IChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhjZWxsLCBKU0NlbGw6OnN0cnVjdHVyZUlE
T2Zmc2V0KCkpLCBtX3ZtLT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgbG9hZFB0
cihBZGRyZXNzKGNlbGwsIFN5bWJvbDo6b2Zmc2V0T2ZQcml2YXRlTmFtZSgpKSwgc2NyYXRjaCk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUo
Tm90RXF1YWwsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgbV92
bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjZWxs
LCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoKSk7CisgICAgICAgIHNsb3dDYXNl
cy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIEFkZHJlc3Moc2NyYXRjaCwgU3RyaW5nSW1wbDo6
ZmxhZ3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkp
KTsKKyAgICB9CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHNjcmF0
Y2gsIFRydXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpKTsKK30KKwogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CkBAIC0xMTM5LDYgKzExNzgsMzcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWQKICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKIH0K
IAordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRL
aW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
ICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OworCisgICAgSnVtcExpc3QgZG9uZUNhc2VzOwor
ICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0g
ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKGN1cnJlbnRJbnN0cnVjdGlvbiwgcHV0S2luZCwgcHJv
cGVydHlOYW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7CisKKyAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xv
d0Nhc2VzLCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZy
b21FeGVjdXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0
KGJ5VmFsSW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5s
aW5rKGRvbmVDYXNlcywgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRl
IDogbV9jYWxscykgeworICAgICAgICBpZiAoY2FsbFNpdGUudG8pCisgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGNhbGxTaXRlLmZyb20sIEZ1bmN0aW9uUHRyKGNhbGxTaXRlLnRvKSk7Cisg
ICAgfQorICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlcik7CisKKyAgICBieVZhbEluZm8tPnN0
dWJSb3V0aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgbV9jb2RlQmxvY2ss
IHBhdGNoQnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3aXRoIGNhY2hl
ZCBwcm9wZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIChwdXRL
aW5kID09IERpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRm
OCgpLmRhdGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNz
LnZhbHVlKCkpKTsKKyAgICBieVZhbEluZm8tPmNhY2hlZElkID0gcHJvcGVydHlOYW1lOworICAg
IGJ5VmFsSW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKKworICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
YnlWYWxJbmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1
YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIocHV0S2luZCA9PSBEaXJlY3Qg
PyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVy
aWMpKTsKK30KKworCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5
VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBKdW1wTGlz
dCBzbG93Q2FzZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCBhOGQ2OWFjZGNmNjc3NDk0YjhlZTYyZDFlMTJhYjky
ZjU4OWNlMDAwLi5jMThhZjkwMWVmY2FlZjVjMTAyNjViNjlkYWZmOTYwODE1NjVkNDNhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKQEAgLTI0OCwxNiArMjQ4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRH
ZXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW8KICAgICAv
LyBzY3JhdGNoOiByZWdUNAogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SlND
ZWxsKHJlZ1QzKSk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAg
IHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qy
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBtX3ZtLT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0
KCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTeW1ib2w6Om9mZnNldE9mUHJp
dmF0ZU5hbWUoKSksIHJlZ1Q0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgbV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlZ1Q0
KTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Q0KSk7
Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIEFkZHJlc3MocmVn
VDQsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6
ZmxhZ0lzQXRvbWljKCkpKSk7Ci0gICAgfQotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoUHRy
KE5vdEVxdWFsLCByZWdUNCwgVHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSkpOwor
ICAgIGVtaXRJZGVudGlmaWVyQ2hlY2socmVnVDIsIHJlZ1Q0LCBwcm9wZXJ0eU5hbWUsIHNsb3dD
YXNlcyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxv
Y2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVn
aXN0ZXJzKCksCkBAIC0zMjIsOCArMzEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3Zh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAogICAgIGVtaXRMb2FkMihi
YXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwogICAgIAotICAgIGFk
ZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkludDMyVGFnKSkpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CisgICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleCA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVx
dWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgYWRkU2xv
d0Nhc2Uobm90SW5kZXgpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdU
MCwgcmVnVDEsIHByb2ZpbGUpOwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBl
TWFzayksIHJlZ1QxKTsKICAgICAKQEAgLTM1NCw3ICszNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgCiAgICAg
TGFiZWwgZG9uZSA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5h
cHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBQ
YXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUpKTsKKyAgICBtX2J5
VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8s
IG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25l
KSk7CiB9CiAKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKQEAgLTQ1Myw2ICs0NDUsNDIgQEAgSklUOjpK
dW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBQYXQKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCitKSVRQdXRCeUlk
R2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAg
IC8vIGJhc2U6IHRhZyhyZWdUMSksIHBheWxvYWQocmVnVDApCisgICAgLy8gcHJvcGVydHk6IHRh
ZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCisKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChy
ZWdUMykpOworICAgIGVtaXRJZGVudGlmaWVyQ2hlY2socmVnVDIsIHJlZ1QyLCBwcm9wZXJ0eU5h
bWUsIHNsb3dDYXNlcyk7CisKKyAgICAvLyBXcml0ZSBiYXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0
ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBiYXJyaWVyLAorICAgIC8vIHJlbG9hZCB0
aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZp
bHRlckJhc2UpOworICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CisgICAgZW1pdExv
YWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CisKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigK
KyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lz
dGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2Fk
T25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIHJlZ1QxLCBEb250U3BpbGws
IG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0
UGF0aCgqdGhpcyk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhp
cyk7CisKKyAgICAvLyBKSVRQdXRCeUlkR2VuZXJhdG9yIG9ubHkgcHJlc2VydmUgdGhlIHZhbHVl
IGFuZCB0aGUgYmFzZSdzIHBheWxvYWQsIHdlIGhhdmUgdG8gcmVsb2FkIHRoZSB0YWcuCisgICAg
ZW1pdExvYWRUYWcoYmFzZSwgcmVnVDEpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlv
bihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMsIHJlZ1QyLCBy
ZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkp
OworCisgICAgcmV0dXJuIGdlbjsKK30KKwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CkBAIC00NjEsOCArNDg5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMK
ICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJh
eVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25J
bmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua1Ns
b3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlm
Tm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKKyAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawogICAgIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0g
Y2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwpAQCAtNTAwLDE0ICs1MjgsMTQgQEAgdm9pZCBKSVQ6
OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXMKICAgICBhZGRDYWxsQXJndW1lbnQocmVnVDEpOwogICAgIGFkZENhbGxB
cmd1bWVudChyZWdUMCk7CiAgICAgYWRkQ2FsbEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoYnlWYWxJ
bmZvKSk7Ci0gICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0Rp
cmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsIDogb3BlcmF0aW9uUHV0QnlWYWwpOworICAg
IENhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaXNEaXJlY3QgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7
CiAjZWxzZQogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRv
IHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxk
bid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIs
IHJlZ1QxKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0
TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9u
KGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVyYXRpb25QdXRCeVZhbCwg
cmVnVDIsIHJlZ1QxLCByZWdUMywgcmVnVDAsIHJlZ1Q1LCByZWdUNCwgYnlWYWxJbmZvKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0
QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QyLCByZWdUMSwg
cmVnVDMsIHJlZ1QwLCByZWdUNSwgcmVnVDQsIGJ5VmFsSW5mbyk7CiAjZW5kaWYKIAogICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFy
Z2V0ID0gc2xvd1BhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctYnJlYWsuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctYnJlYWsuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWVlNjRjYWZlZWJjZmY3ODQzYWM1N2Q5MTI1NGViNjNiNWJiZDYzMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13
aXRoLXN0cmluZy1icmVhay5qcwpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9u
IGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVl
OworfQorbm9JbmxpbmUoYXNzaWduKTsKKwordmFyIHN0cmluZyA9ICdoZWxsbyc7Citmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0ID0ge307CisgICAgaWYg
KGkgPT09IDEwMDAwKSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIDQyLCA0Mik7CisgICAgICAg
IHNob3VsZEJlKG9iamVjdFs0Ml0sIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0LmhlbGxv
LCB1bmRlZmluZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIHN0cmlu
ZywgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rbc3RyaW5nXSwgNDIpOworICAgIH0KK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLWdlbmVyYXRlZC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmF0ZWQuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzFmNDNhZDNiMDUyZWM1MmZjZDU4M2Y5NzY5NDA1YzUxMDQyNTFhMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy1nZW5lcmF0ZWQuanMKQEAgLTAsMCArMSwzNCBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0
dWFsLCBleHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiBn
ZW4xKHZhbHVlKQoreworICAgIHJldHVybiAnaGUnICsgdmFsdWU7Cit9Citub0lubGluZShnZW4x
KTsKKworZnVuY3Rpb24gZ2VuMih2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgKyAnbGQnOwor
fQorbm9JbmxpbmUoZ2VuMik7CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVl
KQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIG9iamVjdCA9IHt9Owor
ICAgIGlmIChpICUgMiA9PT0gMCkgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBnZW4xKCdsbG8n
KSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QuaGVsbG8sIDQyKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBhc3NpZ24ob2JqZWN0LCBnZW4yKCd3b3InKSwgNDIpOworICAgICAgICBzaG91
bGRCZShvYmplY3Qud29ybGQsIDQyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJpYy5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy1nZW5lcmljLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2ZmY4MTE2MDQ2MjllNmU3YjZjOGE4Njg4NjI4
OGI2Y2MxOTE5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJpYy5qcwpAQCAtMCwwICsxLDI1
IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyAr
IGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQorewor
ICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwordmFyIHN0
cmluZyA9ICdoZWxsbyc7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2
YXIgb2JqZWN0ID0ge307CisgICAgaWYgKGkgPT09IDEwMDAwKSB7CisgICAgICAgIGFzc2lnbihv
YmplY3QsICd0ZXN0aW5nJywgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QudGVzdGluZywg
NDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QuaGVsbG8sIHVuZGVmaW5lZCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgYXNzaWduKG9iamVjdCwgc3RyaW5nLCA0Mik7CisgICAgICAgIHNob3Vs
ZEJlKG9iamVjdFtzdHJpbmddLCA0Mik7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtYnJlYWsu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1z
eW1ib2wtYnJlYWsuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU0ODUxMTE0NDUzYTQ0YTAyZTg4NTg1NTRiZjE2
ZjNlNDdhNTcwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVhay5qcwpAQCAtMCwwICsxLDI1IEBA
CitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFj
dHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQoreworICAg
IG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwordmFyIGtleSA9
IFN5bWJvbCgpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMTsgKytpKSB7CisgICAgdmFyIG9i
amVjdCA9IHt9OworICAgIGlmIChpID09PSAxMDAwMCkgeworICAgICAgICB2YXIga2V5MiA9IDQy
OworICAgICAgICBhc3NpZ24ob2JqZWN0LCBrZXkyLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9i
amVjdFtrZXkyXSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rba2V5XSwgdW5kZWZpbmVk
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBrZXksIDQyKTsKKyAgICAg
ICAgc2hvdWxkQmUob2JqZWN0W2tleV0sIDQyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtZ2Vu
ZXJpYy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC1nZW5lcmljLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmYzRkMThkNDAxZmE3MGYwMWM5ODg4
MTA4M2NlMDBiMzMyZTc1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtZ2VuZXJpYy5qcwpAQCAtMCww
ICsxLDI1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlm
IChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1
ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVl
KQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwor
dmFyIGtleSA9IFN5bWJvbCgpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMTsgKytpKSB7Cisg
ICAgdmFyIG9iamVjdCA9IHt9OworICAgIGlmIChpID09PSAxMDAwMCkgeworICAgICAgICB2YXIg
a2V5MiA9IFN5bWJvbCgpOworICAgICAgICBhc3NpZ24ob2JqZWN0LCBrZXkyLCA0Mik7CisgICAg
ICAgIHNob3VsZEJlKG9iamVjdFtrZXkyXSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rb
a2V5XSwgdW5kZWZpbmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBr
ZXksIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0W2tleV0sIDQyKTsKKyAgICB9Cit9CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
aW5kZXggZmZmMmZlZDY2MGVkMzM4ZDAxMDRkODllZTY5NjQ0OWFmZWQxMDMwZC4uNzM2OTUwOGNi
YjMzNDAzMGExYTkzNDUzNWU5NTAxNTM5MzM4OGE3ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisy
MDE1LTA4LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAg
ICAgIEludHJvZHVjZSBwdXRfYnlfaWQgbGlrZSBJQyBpbnRvIHB1dF9ieV92YWwgd2hlbiB0aGUg
Z2l2ZW4gbmFtZSBpcyBTdHJpbmcgb3IgU3ltYm9sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc3NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3ludGhldGljIHRlc3RzIGZvciBwdXQtYnktdmFs
LiBKdXN0IG1ha2UgcHV0LWJ5LWlkIHRlc3RzIHVzaW5nIHN5bWJvbCAvIHN0cmluZy4KKworICAg
ICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1
dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2Zv
bGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRv
LW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2lu
bGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3BvbHlt
b3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlv
bi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5z
aXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGlj
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1
dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiBq
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVs
dGktcHV0LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoZnUp
OgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxp
bmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorICAgICAgICAoRm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAoRm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBo
aWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVw
bGFjZS1hbmQtdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qczog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRo
LXN0cmluZy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxh
Y2UtYW5kLXRyYW5zaXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanM6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1z
eW1ib2wuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMTUt
MDgtMDcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAg
aW9zLXNpbS1kZXByZWNhdGVkL2lwaG9uZS9mYXN0L2V2ZW50cy90b3VjaC8gYWxyZWFkeSBleGlz
dGVkIGluIGZhc3QvZXZlbnRzL3RvdWNoLCBzbyByZW1vdmUgdGhlbS4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRp
LXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xk
LXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjlkMzc2Zjc2Mjc5ZjhjMzZjNjlmMjBhMzM1MTc4ZmEwMDY3N2NiNwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsMTAgQEAKK0pTUmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGkt
cHV0LWJ5LW9mZnNldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1i
eS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5odG1sIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5
LW9mZnNldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkNTIzNTcwZTY0YWU5YjNjM2EzNDFiMDRiZGY2ZTdm
MzNjYjkwNjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQt
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNl
dC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mMTdkY2UzYjRmMjc0NmI0NDgwMzI5ODM5MTc0NDQ4MmFlOWEyYjJhCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wt
dG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNS
ZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5
bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZWE5Mjc3MDg0M2JkYmFkMGM2M2ViNjllYzZkNDRjZGFiMTMxNDY1ZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLXB1dC1i
eS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGlu
ZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRp
b24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxM2JlNmYyZDA4MDY2N2NjYTk5MzI5MGM3MjEz
YjZiNjlkZDAxOTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
bGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRy
YW5zaXRpb24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
aW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5iOTAzMjZhNDM0ZDk2Y2Q0MDA2OWNmMzRiN2U0M2Q0NTcyMzhmNzk5Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJp
bmctdHJhbnNpdGlvbi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmlu
Zy10cmFuc2l0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRy
YW5zaXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1
dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzM0ZDVmNWJkYzdhMzBkMDRiN2M0MWIzNDYxZTNjMDNjZWU5YWE3NAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmxp
bmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1i
b2wtdHJhbnNpdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhZGU0ZTlmODU0NDA5NmE1MjMwODFlMmM2
NTU0NDNmODY5NTQwMjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0bWwKQEAgLTAsMCAr
MSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
aW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5
bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjA3M2MxOTkzMDNjZTM0NzQyZGE4NWU4MTk1OWIwODdhOTAzN2U1NQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN0cmluZy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdy
ZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sIGIv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5n
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjQ5OTI1OGYyZTJlZGVkMWVkZjQzZjBhM2QzMjc3MDY4ZTIwMzJk
NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMt
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12
YWwtd2l0aC1zdHJpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjA4NDU1MTQyZTFh
YWE5Y2Q1MTdlM2U3OWUzYjJkZWVmNjU0ZDNlZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwt
d2l0aC1zeW1ib2wKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhj
ZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMt
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5
bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGMyY2U4MDdl
MTc3OWUwOWZiYWYxYjdjNjcxMGI2NmZhNGNmZDVhNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1s
CkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmM3ZTI2
MWI3NzJiZTA1ODU3NDRkZmI0YjQxY2JlNzE1MjhlM2MxZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNl
LWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0
LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jZTI0OTMzNDVhODUwNjk1NGNiYjgzNzE2YTg5NGUyOWUwYTJiNzkyCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1y
ZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1i
eS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmRlYmIxZjczNjcxYjg0YTdmY2E1ODNhOWM3ODUyNTI5ZDcxZjg4NzAKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFj
ZS1hbmQtdHJhbnNpdGlvbi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVw
bGFjZS1hbmQtdHJhbnNpdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xp
Z2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40MmQ4ZmUyMWU4NGRjMDNjOWYwNzI0MDYyMWYwMTk2NmZkZDI4YjZiCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitK
U1JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYworCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdo
dGx5LXBvbHltb3JwaGljLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwt
d2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jZjNkZDdm
NzJkZDlhNjE2NTA3MDgxNzIyYmE3ZTVlODgwMmViNzBhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHlt
b3JwaGljLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5
bW9ycGhpYy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcuaHRtbCBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVh
N2JiOWUyZDA1YjVkMDUzNTNiNjJkN2M5YzFhN2MyNjUzMjRkMzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcuaHRtbApAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5
bWJvbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0
aC1zeW1ib2wtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVkMDVjMjVjYTYxZjlhNjExZmE1ZjZi
MDZlNjI1MzJmNmUxNzJjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1i
b2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTEzYjk0
NTg1NmY0YjFmOGQ5ZmYxMzIxZmFlNzZiNTFkM2JjZTc2NgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10
cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNp
dGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNzVmMjY2MDhkZTk1MTJh
OGY0YmFjMzM2MzFhZTVjZjcwYTllOWZhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24u
aHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRp
b24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGlj
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5
bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWJjNWZj
YTU3OTQ1MmRkNDAwMmRkZWRmY2ZkNTQxNjRkNGEzNzNmZAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5
bW9ycGhpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3B1dC1ieS12
YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5o
dG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdo
dGx5LXBvbHltb3JwaGljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQwNDY1NzI1MjUwMTQwNmYyN2MwNzI0
YTlkYmQ0MGFlNWFlODgyYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5odG1sCkBAIC0w
LDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRl
c3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1
dC1ieS12YWwtd2l0aC1zeW1ib2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDEyOGJjY2Q0YmQ0NzQ0Y2Rj
YTE3Y2JlYTBjNWIzNTQwYTUwOGU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1z
dHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnkt
b2Zmc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOWFkYjI5NWNjZTRiNGQ3Mzc0N2UyYjI5NTI3MDQ1ZDMy
MTllZjYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5q
cwpAQCAtMCwwICsxLDQ3IEBACit2YXIgZSA9ICJlIiwgZiA9ICJmIiwgZyA9ICJnIjsKK2Z1bmN0
aW9uIGZvbyhvKSB7CisgICAgb1tmXSA9IDE7Cit9CisKK2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICBv
W2VdID0gMjsKK30KKworZnVuY3Rpb24gYmFyKGZ1bmMsIG8pIHsKKyAgICBmdW5jKG8pOworfQor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIHZhciBvID0ge307CisgICAg
b1siaSIgKyBpXSA9IDQyOworICAgIGZvbyhvKTsKKyAgICBmdSh7W2ZdOjEsIFtlXToyfSk7Cisg
ICAgZnUoe1tlXToxLCBbZl06MiwgW2ddOjN9KTsKK30KKyAgICAKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwOyArK2kpIHsKKyAgICBiYXIoZm9vLCB7W2ZdOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24o
KSB7IH0sIG51bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOwor
fQorICAgIAorKGZ1bmN0aW9uKGZ1bmMsIG8sIHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAg
ICAgICAgZnUobyk7CisgICAgICAgIGJhcihmdW5jLCBvKTsKKyAgICAgICAgdmFyIHRtcCA9IG87
CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAob1tlXSAh
PSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIgKyBvW2VdOwor
ICAgIGlmIChvW2ZdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8u
ZjogIiArIG9bZl07CisgICAgaWYgKHBbZV0gIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgaW4gcC5lOiAiICsgcFtlXTsKKyAgICBpZiAocFtmXSAhPSAxKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmY6ICIgKyBwW2ZdOworfSkoZm9vLCB7W2ZdOjQy
LCBbZV06MjN9LCB7W2VdOjIzLCBbZl06NDIsIFtnXToxMDB9KTsKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9m
ZnNldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZTAyNjE1M2E5NWQ4YmJkYWIyNDYwZjAzMGQwOWEwMzllN2Ux
ODg0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuanMK
QEAgLTAsMCArMSw0NyBAQAordmFyIGUgPSBTeW1ib2woKSwgZiA9IFN5bWJvbCgpLCBnID0gU3lt
Ym9sKCk7CitmdW5jdGlvbiBmb28obykgeworICAgIG9bZl0gPSAxOworfQorCitmdW5jdGlvbiBm
dShvKSB7CisgICAgb1tlXSA9IDI7Cit9CisKK2Z1bmN0aW9uIGJhcihmdW5jLCBvKSB7CisgICAg
ZnVuYyhvKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICB2YXIg
byA9IHt9OworICAgIG9bImkiICsgaV0gPSA0MjsKKyAgICBmb28obyk7CisgICAgZnUoe1tmXTox
LCBbZV06Mn0pOworICAgIGZ1KHtbZV06MSwgW2ZdOjIsIFtnXTozfSk7Cit9CisgICAgCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgYmFyKGZvbywge1tmXToxfSk7CisgICAg
YmFyKGZ1bmN0aW9uKCkgeyB9LCBudWxsKTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IHJldHVybiA0
MiB9LCBudWxsKTsKK30KKyAgICAKKyhmdW5jdGlvbihmdW5jLCBvLCBwKSB7CisgICAgdmFyIHJl
c3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bjsgKytpKSB7CisgICAgICAgIGZ1KG8pOworICAgICAgICBiYXIoZnVuYywgbyk7CisgICAgICAg
IHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9Cisg
ICAgaWYgKG9bZV0gIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5l
OiAiICsgb1tlXTsKKyAgICBpZiAob1tmXSAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBpbiBvLmY6ICIgKyBvW2ZdOworICAgIGlmIChwW2VdICE9IDIpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIGluIHAuZTogIiArIHBbZV07CisgICAgaWYgKHBbZl0gIT0g
MSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gcC5mOiAiICsgcFtmXTsKK30p
KGZvbywge1tmXTo0MiwgW2VdOjIzfSwge1tlXToyMywgW2ZdOjQyLCBbZ106MTAwfSk7CisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZWQtcHV0
LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24u
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uN2JmNDJlZjQ5ZWQxODgwMjNhMTQ0NTZhYTg1YjE0MWY2MzkzOWFlMQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lu
bGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmpzCkBAIC0wLDAgKzEsNDAg
QEAKK3ZhciB4ID0gIngiOwordmFyIHkgPSAieSI7Cit2YXIgYSA9ICJhIjsKK3ZhciBiID0gImIi
OwordmFyIGMgPSAiYyI7Cit2YXIgZCA9ICJkIjsKK3ZhciBlID0gImUiOwordmFyIGYgPSAiZiI7
Cit2YXIgZyA9ICJnIjsKK3ZhciBoID0gImgiOwordmFyIGkgPSAiaSI7CisKK2Z1bmN0aW9uIGZv
byhvKSB7CisgICAgb1t4XSA9IDE7CisgICAgb1t5XSA9IDI7CisgICAgb1thXSA9IDM7CisgICAg
b1tiXSA9IDQ7CisgICAgb1tjXSA9IDU7CisgICAgb1tkXSA9IDY7CisgICAgb1tlXSA9IDc7Cisg
ICAgb1tmXSA9IDg7CisgICAgb1tnXSA9IDk7CisgICAgb1toXSA9IDEwOworICAgIG9baV0gPSAx
MTsKK30KKworZnVuY3Rpb24gRm9vKCkgeworICAgIGZvbyh0aGlzKTsKK30KKwordmFyIHJlc3Vs
dCA9IDA7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICBmb28oe1tm
XTo0Mn0pOworICAgIHJlc3VsdCArPSAobmV3IEZvbygpKVt4XTsKK30KKworaWYgKHJlc3VsdCAh
PSAxMDAwMDApCisgICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZWQtcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjc3MWU3YjMwOTY5NDdiMzlmNDgyODQ5YTZkNDFmYjk2MjZlNTBiYQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZWQt
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmpzCkBAIC0wLDAgKzEsNDAgQEAKK3Zh
ciB4ID0gU3ltYm9sKCk7Cit2YXIgeSA9IFN5bWJvbCgpOwordmFyIGEgPSBTeW1ib2woKTsKK3Zh
ciBiID0gU3ltYm9sKCk7Cit2YXIgYyA9IFN5bWJvbCgpOwordmFyIGQgPSBTeW1ib2woKTsKK3Zh
ciBlID0gU3ltYm9sKCk7Cit2YXIgZiA9IFN5bWJvbCgpOwordmFyIGcgPSBTeW1ib2woKTsKK3Zh
ciBoID0gU3ltYm9sKCk7Cit2YXIgaSA9IFN5bWJvbCgpOworCitmdW5jdGlvbiBmb28obykgewor
ICAgIG9beF0gPSAxOworICAgIG9beV0gPSAyOworICAgIG9bYV0gPSAzOworICAgIG9bYl0gPSA0
OworICAgIG9bY10gPSA1OworICAgIG9bZF0gPSA2OworICAgIG9bZV0gPSA3OworICAgIG9bZl0g
PSA4OworICAgIG9bZ10gPSA5OworICAgIG9baF0gPSAxMDsKKyAgICBvW2ldID0gMTE7Cit9CisK
K2Z1bmN0aW9uIEZvbygpIHsKKyAgICBmb28odGhpcyk7Cit9CisKK3ZhciByZXN1bHQgPSAwOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgZm9vKHtbZl06NDJ9KTsK
KyAgICByZXN1bHQgKz0gKG5ldyBGb28oKSlbeF07Cit9CisKK2lmIChyZXN1bHQgIT0gMTAwMDAw
KQorICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1v
cnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYzIyZThjMDBkY2M5
NTM2ZjVlODY3NzdmYzZhNWY4MTBiY2VmNzFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy5qcwpAQCAtMCwwICsxLDI2IEBACit2YXIgZiA9ICJmIiwgZyA9ICJnIiwgaCA9ICJoIjsK
KworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQor
ICAgICAgICBvW2ZdID0gKG9bZl0gfCAwKSArIDQyOworfQorCitub0lubGluZShmb28pOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIG9iamVjdDsKKyAgICBp
ZiAoKGkgJSAzKSA9PSAwKQorICAgICAgICBvYmplY3QgPSB7W2ddOjN9OworICAgIGVsc2UgaWYg
KChpICUgMykgPT0gMSkKKyAgICAgICAgb2JqZWN0ID0ge1tmXToxLCBbZ106Mn07CisgICAgZWxz
ZSBpZiAoKGkgJSAzKSA9PSAyKQorICAgICAgICBvYmplY3QgPSB7W2ddOjEsIFtmXToyfTsKKyAg
ICBmb28ob2JqZWN0KTsKKyAgICBpZiAob2JqZWN0W2ZdICE9IDQyICogMTAwICsgKGkgJSAzKSkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiArIGkgKyAiOiAiICsg
b2JqZWN0W2ZdOworfQorCit2YXIgciA9IHtbZ106MywgW2hdOjQsIFtmXTo1fTsKK2ZvbyhyKTsK
K2lmIChyW2ZdICE9IDUgKyA0MiAqIDEwMCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
YXQgZW5kOiAiICsgcltmXTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMgYi9MYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU3MmQwZTg5MDMyM2U3YTYyM2FlY2VhMDU0NGE5YzkxMDEy
OGQ0YzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmpzCkBAIC0wLDAgKzEsMjYg
QEAKK3ZhciBmID0gU3ltYm9sKCksIGcgPSBTeW1ib2woKSwgaCA9IFN5bWJvbCgpOworCitmdW5j
dGlvbiBmb28obykgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAg
IG9bZl0gPSAob1tmXSB8IDApICsgNDI7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0OworICAgIGlmICgoaSAl
IDMpID09IDApCisgICAgICAgIG9iamVjdCA9IHtbZ106M307CisgICAgZWxzZSBpZiAoKGkgJSAz
KSA9PSAxKQorICAgICAgICBvYmplY3QgPSB7W2ZdOjEsIFtnXToyfTsKKyAgICBlbHNlIGlmICgo
aSAlIDMpID09IDIpCisgICAgICAgIG9iamVjdCA9IHtbZ106MSwgW2ZdOjJ9OworICAgIGZvbyhv
YmplY3QpOworICAgIGlmIChvYmplY3RbZl0gIT0gNDIgKiAxMDAgKyAoaSAlIDMpKQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyBvYmplY3Rb
Zl07Cit9CisKK3ZhciByID0ge1tnXTozLCBbaF06NCwgW2ZdOjV9OworZm9vKHIpOworaWYgKHJb
Zl0gIT0gNSArIDQyICogMTAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6
ICIgKyByW2ZdOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmpzIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1y
ZXBsYWNlLWFuZC10cmFuc2l0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiMjMzN2M5NDNkNGJjYTE2OGQ5
NDYxMDAwN2IxZDgwOGM4ZWQ5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRy
YW5zaXRpb24uanMKQEAgLTAsMCArMSwxNCBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBmID0g
ImYiLCBnID0gImciOworICAgIHZhciBvOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBpZiAoaSAmIDEpCisgICAgICAgICAg
ICBvID0ge1tmXTogMX07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG8gPSB7W2ZdOiAxLCBb
Z106IDJ9OworICAgICAgICBvW2ddID0gaTsKKyAgICB9CisgICAgaWYgKG9bZ10gIT0gbiAtIDEp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIG8uZzogIiArIG9bZ107Cit9KSgp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcyBiL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9s
eW1vcnBoaWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFjYzQxZGRlNDhkMThhN2Y3MDkyNDE0OWZkMDUyMjVi
OWYzOGE2OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuanMKQEAg
LTAsMCArMSwxNiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBmID0gImYiLCBnID0gImciOwor
ICAgIHZhciBvID0ge1tmXTogMSwgW2ddOiAyfTsKKyAgICB2YXIgcCA9IHtbZl06IDF9OworICAg
IHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAg
ICAgICBvW2ZdID0gaTsKKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBwOworICAg
ICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAob1tmXSAhPSBuIC0gMikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgb2Ygby5mOiAiICsgb1tmXTsKKyAgICBpZiAocFtmXSAhPSBu
IC0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiB2YWQgdmFsdWUgb2YgcC5mOiAiICsgcFtmXTsK
K30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjNmYTEwMDRkNWY5
MWJjZGVjOThmZWFkNDJlN2Q0YzVhZjBiNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qcwpAQCAt
MCwwICsxLDIwIEBACit2YXIgZiA9ICJmIjsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvW2Zd
ID0gNDI7Cit9CisKK2Z1bmN0aW9uIGJhcihvKSB7CisgICAgb1tmXSA9IDg0OworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgIHZhciBvID0ge307CisgICAgZm9v
KG8pOworICAgIGlmIChvW2ZdICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGV4cGVjdGVk
IDQyLCBnb3QgIiArIG9bZl07CisgICAgYmFyKG8pCisgICAgaWYgKG9bZl0gIT0gODQpCisgICAg
ICAgIHRocm93ICJFcnJvcjogZXhwZWN0ZWQgODQsIGdvdCAiICsgb1tmXTsKK30KKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0
aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmNhNmEyM2JiOTgzNzAyYTMwODA1Njk2OTFkMmNiMWU5ZjA3NzZm
NzAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMKQEAgLTAs
MCArMSwxNCBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBmID0gU3ltYm9sKCksIGcgPSBTeW1i
b2woKTsKKyAgICB2YXIgbzsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgaWYgKGkgJiAxKQorICAgICAgICAgICAgbyA9IHtb
Zl06IDF9OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvID0ge1tmXTogMSwgW2ddOiAyfTsK
KyAgICAgICAgb1tnXSA9IGk7CisgICAgfQorICAgIGlmIChvW2ddICE9IG4gLSAxKQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBvLmc6ICIgKyBvW2ddOworfSkoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0
aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGlj
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmVlNTBkOWE1MGYyYjQ2ZjVhNjIzNTFhMDQ5NjEyODRhMmVjZDQ2ZDAK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9w
dXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmpzCkBAIC0wLDAgKzEs
MTYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgZiA9IFN5bWJvbCgpLCBnID0gU3ltYm9sKCk7
CisgICAgdmFyIG8gPSB7W2ZdOiAxLCBbZ106IDJ9OworICAgIHZhciBwID0ge1tmXTogMX07Cisg
ICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgICAgIG9bZl0gPSBpOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7Cisg
ICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChvW2ZdICE9IG4gLSAyKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBvLmY6ICIgKyBvW2ZdOworICAgIGlmIChwW2ZdICE9
IG4gLSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IHZhZCB2YWx1ZSBvZiBwLmY6ICIgKyBwW2Zd
OworfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1ODhiYTc4ZDhm
Y2ZiYWZkOTkxMzM1NzcwNWM0NmM0NzcwZDVmZTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmpzCkBA
IC0wLDAgKzEsMjAgQEAKK3ZhciBmID0gU3ltYm9sKCJDb2NvYSIpOworCitmdW5jdGlvbiBmb28o
bykgeworICAgIG9bZl0gPSA0MjsKK30KKworZnVuY3Rpb24gYmFyKG8pIHsKKyAgICBvW2ZdID0g
ODQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgdmFyIG8g
PSB7fTsKKyAgICBmb28obyk7CisgICAgaWYgKG9bZl0gIT0gNDIpCisgICAgICAgIHRocm93ICJF
cnJvcjogZXhwZWN0ZWQgNDIsIGdvdCAiICsgb1tmXTsKKyAgICBiYXIobykKKyAgICBpZiAob1tm
XSAhPSA4NCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBleHBlY3RlZCA4NCwgZ290ICIgKyBvW2Zd
OworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258546</attachid>
            <date>2015-08-07 17:00:59 -0700</date>
            <delta_ts>2015-08-07 18:44:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147760-20150807170049.patch</filename>
            <type>text/plain</type>
            <size>70877</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MzM5MTdmZmFlOWI0YzZiZDU0NDk0MGRjNjdiMzZmYTgzMDQ4NTU3Li4zYTU2YTBjYWZiYTIyZDMw
Nzg3NzVlYTQyZDBlMTMwZGY4YTZlMGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1NyBAQAorMjAxNS0wOC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgcHV0X2J5X2lkIGxpa2UgSUMgaW50byBwdXRfYnlf
dmFsIHdoZW4gdGhlIGdpdmVuIG5hbWUgaXMgU3RyaW5nIG9yIFN5bWJvbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NzYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHB1dF9i
eV9pZCBJQyB0byBwdXRfYnlfdmFsIGJ5IGNhY2hpbmcgdGhlIG9uZSBjYW5kaWRhdGUgaWQsCisg
ICAgICAgIGl0IGlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSBnZXRfYnlfdmFsIElDIGV4dGVuc2lv
bi4KKyAgICAgICAgSXQgd2lsbCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiBFUzYgU3ltYm9scyBhbmQg
RVM2IGNvbXB1dGVkIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBsaXRlcmFscy4KKworICAgICAg
ICBJbiB0aGlzIHBhdGNoLCB3ZSBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQ2hlY2tJZGVudCBhbmQg
UHV0QnlJZCAvIFB1dEJ5VmFsIGluIERGRywKKyAgICAgICAgc28gdGhpcyBwYXRjaCBkb2VzIG5v
dCBjaGFuZ2UgRlRMIGJlY2F1c2UgdGhlIGFib3ZlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc3Vw
cG9ydGVkIGluIEZUTC4KKworICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgor
ICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAg
ICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIChKU0M6OmdldEJ5VmFsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9i
eV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdElkZW50aWZpZXJDaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNj
ZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJ
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLWJyZWFrLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAg
ICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctZ2VuZXJhdGVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKGdl
bjEpOgorICAgICAgICAoZ2VuMik6CisgICAgICAgIChhc3NpZ24pOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWdlbmVyaWMuanM6IEFkZGVkLgorICAgICAg
ICAoc2hvdWxkQmUpOgorICAgICAgICAoYXNzaWduKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVhay5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRC
ZSk6CisgICAgICAgIChhc3NpZ24pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLWdlbmVyaWMuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAg
ICAgICAoYXNzaWduKToKKwogMjAxNS0wOC0wNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEJ1aWxkIG1vcmUgdGVzdGluZyBiaW5hcmllcyB3
aXRoIENNYWtlIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAppbmRleCBjYzVkYTNiMTliNzllN2YxNmY2OTE2OTcxMDYzM2Vm
ZDcxZTRmMTQ3Li5iZmEyOWU0MjFlMDZlMTYxYmVkNzMzY2UyZTY0NzFiMjJkYTFhZTAwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCkBA
IC0xMzQsNiArMTM0LDEzIEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
cihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtCiB9CiAKICNpZiBFTkFC
TEUoSklUKQorUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8o
Y29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxv
Y2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8o
CisgICAgICAgIGxvY2tlciwgYmFzZWxpbmVCbG9jaywgc3R1YkluZm8sIHVpZCwKKyAgICAgICAg
Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEobG9ja2VyLCBiYXNlbGluZUJsb2Nr
LCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKTsKK30KKwogUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCiAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYgbG9ja2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywKICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhp
dFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAppbmRleCA2NTJjY2MxOGEwMmZiMzkxM2U1NmE5YTBhMmE4
YjU0NTE1ZDk5MDQ0Li5iMDQ3MzQ3MmE3MTg2ZjdjNTVjMGFhMDYyYzFhOGNjYjE3NzcxYjg2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKQEAg
LTc0LDYgKzc0LDEwIEBAIGNsYXNzIFB1dEJ5SWRTdGF0dXMgewogICAgIHN0YXRpYyBQdXRCeUlk
U3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9iYWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkLCBib29sIGlzRGlyZWN0KTsKICAgICAKICAgICBzdGF0aWMg
UHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgQ29kZUJs
b2NrKiBkZmdCbG9jaywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLCBTdHViSW5mb01hcCYgZGZn
TWFwLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworI2lmIEVOQUJMRShK
SVQpCisgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENv
bmN1cnJlbnRKSVRMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisjZW5kaWYKICAg
ICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXgg
MjY4YTc1NzZiYzM2NjcyNmEwNmM4OGIxZmMwYmUzNDNlZmMwZTdjMy4uNzk0YjNiMDQ4NzI1NjNi
NmRlZDVmNjFhOWY0NTFkZTI5NjNmOTMzYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTM0MzQsMTggKzM0MzQsNDAgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBv
cF9wdXRfYnlfdmFsX2RpcmVjdDoKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CiAgICAg
ICAgICAgICBOb2RlKiBiYXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKSk7Ci0KLSAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBn
ZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6
V3JpdGUpOwotICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgTm9kZSogdmFsdWUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoYmFzZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7Ci0gICAgICAg
ICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1ZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCgw
KTsgLy8gTGVhdmUgcm9vbSBmb3IgcHJvcGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKDApOyAvLyBMZWF2ZSByb29tIGZvciBsZW5ndGguCi0gICAgICAgICAgICBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgb3Bjb2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QgPyBQ
dXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJ
bmZvKDApKTsKKyAgICAgICAgICAgIGJvb2wgaXNEaXJlY3QgPSBvcGNvZGVJRCA9PSBvcF9wdXRf
YnlfdmFsX2RpcmVjdDsKKyAgICAgICAgICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5SWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAg
ICAgICAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2J5VmFs
SW5mb3MuZ2V0KENvZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KSk7
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21w
aWxlZCBpbiB0aGUgYmFzZWxpbmUgSklULCBieVZhbEluZm8gYmVjb21lcyBudWxsLgorICAgICAg
ICAgICAgICAgIC8vIEF0IHRoYXQgdGltZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uCisgICAg
ICAgICAgICAgICAgaWYgKGJ5VmFsSW5mbyAmJiBieVZhbEluZm8tPnN0dWJJbmZvICYmICFieVZh
bEluZm8tPnRvb2tTbG93UGF0aCAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkSWRlbnQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbXBpbGVkQXNQdXRCeUlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgaWRlbnRpZmllck51bWJlciA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoYnlWYWxJ
bmZvLT5jYWNoZWRJZC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworCisg
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHBy
b3BlcnR5KTsKKworICAgICAgICAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0
dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2lu
KCksIHVpZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVu
dGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFjb21waWxlZEFzUHV0
QnlJZCkgeworICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1v
ZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUpOwor
CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQocHJvcGVydHkpOworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxk
KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCgwKTsgLy8gTGVhdmUgcm9v
bSBmb3IgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCgw
KTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVuZ3RoLgorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgo
Tm9kZTo6VmFyQXJnLCBpc0RpcmVjdCA/IFB1dEJ5VmFsRGlyZWN0IDogUHV0QnlWYWwsIE9wSW5m
byhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkpOworICAgICAgICAgICAgfQogCiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9wdXRfYnlfdmFsKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKaW5kZXggOTAxMDhhZjE1ZGViN2QwNmEzYjRiNzVjM2VmOWUxZjFiYTlkNWE5
ZC4uZmI4MjdjOTUwNGVlOTIyMmZjNjY4NDU3MmU4ZWQyODcxNTcyYmZmNiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCkBAIC0yMzEsNiArMjMxLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNz
LCBhcnJheU1vZGUpOwogICAgICAgICB9CiAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkKFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0
S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorICAgICAgICB7CisgICAgICAg
ICAgICBKSVQgaml0KHZtLCBjb2RlQmxvY2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVP
ZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1
dEtpbmQsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgdm9pZCBj
b21waWxlSGFzSW5kZXhlZFByb3BlcnR5KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNv
ZGVCbG9jayk7CkBAIC0yNjEsNiArMjY4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgY29uc3QgSWRlbnRpZmllciYpOwog
ICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRk
cmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKKyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIGNv
bnN0IElkZW50aWZpZXImKTsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlSGFzSW5kZXhl
ZFByb3BlcnR5KEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAK
QEAgLTM2NSw3ICszNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1p
dEludFR5cGVkQXJyYXlHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJh
eUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJh
eVR5cGUpOwogICAgICAgICAKLSAgICAgICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2Ug
aXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAgIC8vIFBy
b3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRl
Y2luZyB0eXBlLgogICAgICAgICAvLyBUaGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2Fk
ZWQuIFByb3BlcnR5IGlzIGludC1jaGVja2VkIGFuZAogICAgICAgICAvLyB6ZXJvLWV4dGVuZGVk
LiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4gU3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuCiAg
ICAgICAgIC8vIHJldHVybnMgdGhlIHNsb3cgY2FzZXMuCkBAIC0zODYsNyArMzk0LDExIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFs
KEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwog
ICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
LCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAKKyAgICAgICAgLy8g
SWRlbnRpZmllciBjaGVjayBoZWxwZXIgZm9yIEdldEJ5VmFsIGFuZCBQdXRCeVZhbC4KKyAgICAg
ICAgdm9pZCBlbWl0SWRlbnRpZmllckNoZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBz
Y3JhdGNoLCBjb25zdCBJZGVudGlmaWVyJiwgSnVtcExpc3QmIHNsb3dDYXNlcyk7CisKICAgICAg
ICAgSklUR2V0QnlJZEdlbmVyYXRvciBlbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rp
b24qLCBjb25zdCBJZGVudGlmaWVyJiwgSnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNs
b3dDYXNlcyk7CisgICAgICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZW1pdFB1dEJ5VmFsV2l0aENh
Y2hlZElkKEluc3RydWN0aW9uKiwgUHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYsIEp1bXBMaXN0
JiBkb25lQ2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpOwogCiAgICAgICAgIGVudW0gRmluYWxP
YmplY3RNb2RlIHsgTWF5QmVGaW5hbCwgS25vd25Ob3RGaW5hbCB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAppbmRleCA3YWU0M2YwYTBhOWE1ZWE3MTJj
OWJiMDRjOTJkMjYwOTIzYmQ3MzU0Li5iZjdmNjU2NTQxYzY3ZmIwOGM5MjA0ZDBhNTUyYWY5OTNj
NjUyYzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAK
QEAgLTQ3OCwxMCArNDc4LDE2IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWFsbG9j
YXRlU3RvcmFnZUFuZEZpbmlzaFB1dChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqCiAgICAgYmFzZS0+
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIEpTVmFsdWU6OmRlY29kZSh2YWx1ZSkpOwogfQogCitBTFdB
WVNfSU5MSU5FIHN0YXRpYyBib29sIGlzU3RyaW5nT3JTeW1ib2woSlNWYWx1ZSB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gdmFsdWUuaXNTdHJpbmcoKSB8fCB2YWx1ZS5pc1N5bWJvbCgpOworfQorCiBz
dGF0aWMgdm9pZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFs
dWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bykKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAgaWYgKExJS0VMWShzdWJz
Y3JpcHQuaXNVSW50MzIoKSkpIHsKKyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOwogICAgICAgICB1aW50MzJfdCBpID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAgICAg
IGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSkgewogICAgICAgICAgICAgSlNPYmplY3QqIG9iamVj
dCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7CkBAIC00OTMsMTMgKzQ5OSwxOSBAQCBzdGF0aWMgdm9p
ZCBwdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgc3Vic2NyaXB0LAogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAg
IGJhc2VWYWx1ZS5wdXRCeUluZGV4KGNhbGxGcmFtZSwgaSwgdmFsdWUsIGNhbGxGcmFtZS0+Y29k
ZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhdXRvIHBy
b3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKLSAgICAgICAgaWYg
KCFjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpIHsgLy8gRG9uJ3QgcHV0IHRvIGFuIG9iamVj
dCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCi0gICAgICAgICAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpKTsKLSAgICAgICAgICAgIGJhc2VWYWx1ZS5wdXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFs
dWUsIHNsb3QpOwotICAgICAgICB9CisgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBhdXRv
IHByb3BlcnR5ID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoY2FsbEZyYW1lKTsKKyAgICAvLyBE
b24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3RyaW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KKyAg
ICBpZiAoY2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIWlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0
KSB8fCBieVZhbEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5KSkKKyAgICAgICAgYnlWYWxJbmZv
LT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZh
bHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7CisgICAgYmFzZVZh
bHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9CiAKIHN0YXRpYyB2
b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9i
amVjdCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvKQpAQCAtNTA3LDYgKzUxOSw3IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5VmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBzCiAgICAgYm9v
bCBpc1N0cmljdE1vZGUgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKTsK
ICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJbnQzMigpKSkgewogICAgICAgICAvLyBEZXNw
aXRlIGl0cyBuYW1lLCBKU1ZhbHVlOjppc1VJbnQzMiB3aWxsIHJldHVybiB0cnVlIG9ubHkgZm9y
IHBvc2l0aXZlIGJveGVkIGludDMyX3Q7IGFsbCB0aG9zZSB2YWx1ZXMgYXJlIHZhbGlkIGFycmF5
IGluZGljZXMuCisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAg
ICAgdWludDMyX3QgaW5kZXggPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgQVNTRVJU
KGlzSW5kZXgoaW5kZXgpKTsKICAgICAgICAgaWYgKGJhc2VPYmplY3QtPmNhblNldEluZGV4UXVp
Y2tseUZvclB1dERpcmVjdChpbmRleCkpIHsKQEAgLTUyMyw2ICs1MzYsNyBAQCBzdGF0aWMgdm9p
ZCBkaXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIEpTVmFsdWUgcwogICAgICAgICBkb3VibGUgc3Vic2NyaXB0QXNEb3VibGUgPSBzdWJzY3Jp
cHQuYXNEb3VibGUoKTsKICAgICAgICAgdWludDMyX3Qgc3Vic2NyaXB0QXNVSW50MzIgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oc3Vic2NyaXB0QXNEb3VibGUpOwogICAgICAgICBpZiAoc3Vic2Ny
aXB0QXNEb3VibGUgPT0gc3Vic2NyaXB0QXNVSW50MzIgJiYgaXNJbmRleChzdWJzY3JpcHRBc1VJ
bnQzMikpIHsKKyAgICAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGNhbGxGcmFtZSwgc3Vic2NyaXB0
QXNVSW50MzIsIHZhbHVlLCAwLCBpc1N0cmljdE1vZGUgPyBQdXREaXJlY3RJbmRleFNob3VsZFRo
cm93IDogUHV0RGlyZWN0SW5kZXhTaG91bGROb3RUaHJvdyk7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTUzMywxNCArNTQ3LDIwIEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1dEJ5
VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1ZSBz
CiAgICAgaWYgKGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkp
KQorICAgIGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5
KSkgeworICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIGJh
c2VPYmplY3QtPnB1dERpcmVjdEluZGV4KGNhbGxGcmFtZSwgaW5kZXgudmFsdWUoKSwgdmFsdWUs
IDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJ
bmRleFNob3VsZE5vdFRocm93KTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoYmFzZU9iamVjdCwgaXNTdHJpY3RNb2RlKTsKLSAgICAgICAgYmFzZU9iamVjdC0+cHV0
RGlyZWN0KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKKyAgICAgICAg
cmV0dXJuOwogICAgIH0KKworICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJp
bmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkp
KQorICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CisKKyAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBpc1N0cmljdE1vZGUpOworICAgIGJhc2VPYmplY3Qt
PnB1dERpcmVjdChjYWxsRnJhbWUtPnZtKCksIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CiB9Ci12
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZVZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2Ny
aXB0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQor
Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CkBAIC01ODUsMTAgKzYwNSwyNCBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkQmFzZQogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgeworICAgICAgICBjb25z
dCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMp
OworCisgICAgICAgIGlmICghc3Vic2NyaXB0LmlzU3RyaW5nKCkgfHwgIXBhcnNlSW5kZXgocHJv
cGVydHlOYW1lKSkgeworICAgICAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29k
ZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7
CisgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGV4ZWMt
PmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgTm90RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBleGVjLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RN
b2RlKCkpOworICAgICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUs
IHNsb3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgcHV0QnlWYWwoZXhlYywgYmFz
ZVZhbHVlLCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8pOwogfQogCi12b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwoRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3Rh
dGUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZh
bEluZm8qIGJ5VmFsSW5mbykKIHsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGNhbGxGcmFtZSk7CkBAIC02MzIsNiAr
NjY2LDI3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbChFeGVj
U3RhdGUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KKworICAgIGlmIChpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkpIHsKKyAgICAg
ICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtl
eShjYWxsRnJhbWUpOworICAgICAgICBPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSk7CisKKyAgICAgICAgaWYgKCFzdWJzY3JpcHQuaXNTdHJpbmcoKSB8
fCAhaW5kZXgpIHsKKyAgICAgICAgICAgIEFTU0VSVChjYWxsRnJhbWUtPmxvY2F0aW9uQXNCeXRl
Y29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGlu
ZSk7CisgICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGNh
bGxGcmFtZS0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVU
VVJOX0FERFJFU1MpLCBEaXJlY3QsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIGlzU3RyaWN0TW9kZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9k
ZSgpOworICAgICAgICBpZiAoaW5kZXgpCisgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdElu
ZGV4KGNhbGxGcmFtZSwgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1
dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChvYmplY3Qs
IGlzU3RyaWN0TW9kZSk7CisgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChjYWxsRnJhbWUt
PnZtKCksIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBkaXJlY3RQdXRCeVZhbChjYWxsRnJhbWUsIG9iamVjdCwgc3Vi
c2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKIH0KIApAQCAtMTQ1OCw3ICsxNTEzLDcgQEAgc3Rh
dGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
SlNWYWx1ZSBzdWJzY3JpcHQsIEIKICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAg
ICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwotICAgIGlmIChieVZh
bEluZm8tPnN0dWJJbmZvICYmIGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpCisgICAg
aWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkg
fHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCiAgICAgICAgIGJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoID0gdHJ1ZTsKIAogICAgIHJldHVybiBiYXNlVmFsdWUuZ2V0KGV4ZWMsIHBy
b3BlcnR5KTsKQEAgLTE1MjIsNyArMTU3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgKHN1YnNj
cmlwdC5pc1N5bWJvbCgpIHx8IHN1YnNjcmlwdC5pc1N0cmluZygpKSkgeworICAgIGlmIChiYXNl
VmFsdWUuaXNPYmplY3QoKSAmJiBpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkpIHsKICAgICAg
ICAgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtl
eShleGVjKTsKIAogICAgICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygpIHx8ICFwYXJzZUlu
ZGV4KHByb3BlcnR5TmFtZSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmgKaW5kZXggM2Q4M2Y1OTBkY2Y5MTgwM2EzNDQ4YmEwODNiMmY5MmJjYmU4NGY5Yi4uNTkx
N2U0N2JjNTcwNzczYmM3ZjVmZTk0NGZjMzkwM2UxOTdlZmE2OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTI2Miw4ICsyNjIsOCBAQCB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmVTdHViSQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlY3RT
dHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3Ry
aW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiwgSlNPYmpl
Y3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRF
Uk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbChFeGVjU3RhdGUqLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8q
KSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlW
YWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwg
RW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZv
KikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBF
bmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsK
IEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uQ2FsbEV2YWwoRXhlY1N0YXRl
KiwgRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCBhMDBjY2IyNWU1Mjk3ODc5ZDI2MzQ1M2I2
NDZiYjBlMzdkNTk2YmVmLi5iYTM3YjRkN2RkYWFjODQ3MGM2MDFhYmUwMDJjYjljYWM3MzVkODRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNw
cApAQCAtMjA4LDE2ICsyMDgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5
VmFsV2l0aENhY2hlZElkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3RpbwogICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogCiAgICAgc2xvd0Nhc2VzLmFw
cGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QxKSk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZS5p
c1N5bWJvbCgpKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBtX3Zt
LT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBTeW1ib2w6Om9mZnNldE9mUHJpdmF0ZU5hbWUoKSksIHJlZ1QzKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgbV92bS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgSlNTdHJpbmc6Om9m
ZnNldE9mVmFsdWUoKSksIHJlZ1QzKTsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QzKSk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVz
dDMyKFplcm8sIEFkZHJlc3MocmVnVDMsIFN0cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLCBUcnVz
dGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lzQXRvbWljKCkpKSk7Ci0gICAgfQotICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbVB0cihwcm9w
ZXJ0eU5hbWUuaW1wbCgpKSkpOworICAgIGVtaXRJZGVudGlmaWVyQ2hlY2socmVnVDEsIHJlZ1Qz
LCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdl
bigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJl
Z2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCkBAIC0zMDcsMTAgKzI5OCwxMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7
CiAKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhiYXNlLCByZWdUMCwgcHJvcGVydHksIHJl
Z1QxKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbW1lZGlhdGVJbnRlZ2VyKHJlZ1QxKTsK
KyAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOworICAgIFBhdGNo
YWJsZUp1bXAgbm90SW5kZXggPSBlbWl0UGF0Y2hhYmxlSnVtcElmTm90SW1tZWRpYXRlSW50ZWdl
cihyZWdUMSk7CisgICAgYWRkU2xvd0Nhc2Uobm90SW5kZXgpOwogICAgIC8vIFNlZSBjb21tZW50
IGluIG9wX2dldF9ieV92YWwuCiAgICAgemVyb0V4dGVuZDMyVG9QdHIocmVnVDEsIHJlZ1QxKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2UpOwogICAgIGVtaXRB
cnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVnVDIsIHByb2ZpbGUpOwogICAgIGFu
ZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayksIHJlZ1QyKTsKICAgICAKQEAgLTM0
MSw3ICszMzMsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgCiAgICAgTGFiZWwgZG9uZSA9IGxhYmVsKCk7CiAgICAg
Ci0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8o
YnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBQYXRjaGFibGVKdW1wKCksIGJhZFR5cGUsIG1v
ZGUsIHByb2ZpbGUsIGRvbmUpKTsKKyAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4
LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lKSk7CiB9CiAKIEpJVDo6SnVtcExpc3QgSklU
OjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKQEAgLTQzNCw2ICs0MjYsMzkgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXQKICAgICByZXR1
cm4gc2xvd0Nhc2VzOwogfQogCitKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFs
V2l0aENhY2hlZElkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFB1dEtpbmQgcHV0
S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgZG9uZUNhc2Vz
LCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAgIC8vIGJhc2U6IHJlZ1QwCisgICAgLy8gcHJv
cGVydHk6IHJlZ1QxCisgICAgLy8gc2NyYXRjaDogcmVnVDIKKworICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAgc2xvd0Nhc2VzLmFwcGVuZChlbWl0SnVtcElm
Tm90SlNDZWxsKHJlZ1QxKSk7CisgICAgZW1pdElkZW50aWZpZXJDaGVjayhyZWdUMSwgcmVnVDEs
IHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKKworICAgIC8vIFdyaXRlIGJhcnJpZXIgYnJlYWtz
IHRoZSByZWdpc3RlcnMuIFNvIGFmdGVyIGlzc3VpbmcgdGhlIHdyaXRlIGJhcnJpZXIsCisgICAg
Ly8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1
ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOworICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2Us
IHJlZ1QwLCB2YWx1ZSwgcmVnVDEpOworCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCisg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3Rl
clNldDo6c3BlY2lhbFJlZ2lzdGVycygpLAorICAgICAgICBKU1ZhbHVlUmVncyhyZWdUMCksIEpT
VmFsdWVSZWdzKHJlZ1QxKSwgcmVnVDIsIERvbnRTcGlsbCwgbV9jb2RlQmxvY2stPmVjbWFNb2Rl
KCksIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBkb25l
Q2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwo
KTsKKyAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKKworICAgIENhbGwgY2FsbCA9
IGNhbGxPcGVyYXRpb24oZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHJl
Z1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7
CisKKyAgICByZXR1cm4gZ2VuOworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3Zh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKQEAgLTQ0Miw4ICs0NjcsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0
X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhcwog
ICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5
UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbklu
Zm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAotICAgIGxpbmtTbG93Q2Fz
ZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpT
Q2VsbChpdGVyLCBiYXNlKTsgLy8gYmFzZSBjZWxsIGNoZWNrCisgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8g
YmFzZSBub3QgYXJyYXkgY2hlY2sKICAgICAKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29z
ZUFycmF5TW9kZShwcm9maWxlKTsKQEAgLTQ2Niw3ICs0OTEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0NhcwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocHJvcGVydHksIHJlZ1QxKTsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMik7CiAgICAgYm9vbCBpc0RpcmVj
dCA9IG1faW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNv
ZGUpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0OwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbCA6IG9wZXJhdGlvblB1dEJ5VmFs
LCByZWdUMCwgcmVnVDEsIHJlZ1QyLCBieVZhbEluZm8pOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsK
IAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNs
b3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5
VmFsSW5zdHJ1Y3Rpb25JbmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CkBAIC05ODgsNiArMTAx
MywyMCBAQCB2b2lkIEpJVDo6ZW1pdFdyaXRlQmFycmllcihKU0NlbGwqIG93bmVyKQogI2VuZGlm
IC8vIEVOQUJMRShHR0MpCiB9CiAKK3ZvaWQgSklUOjplbWl0SWRlbnRpZmllckNoZWNrKFJlZ2lz
dGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCit7CisgICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5
bWJvbCgpKSB7CisgICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKE5vdEVx
dWFsLCBBZGRyZXNzKGNlbGwsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG1fdm0tPnN5
bWJvbFN0cnVjdHVyZS5nZXQoKSkpOworICAgICAgICBsb2FkUHRyKEFkZHJlc3MoY2VsbCwgU3lt
Ym9sOjpvZmZzZXRPZlByaXZhdGVOYW1lKCkpLCBzY3JhdGNoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhj
ZWxsLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBtX3ZtLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNlbGwsIEpTU3RyaW5nOjpvZmZzZXRP
ZlZhbHVlKCkpLCBzY3JhdGNoKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0
UHRyKFplcm8sIHNjcmF0Y2gpKTsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0
MzIoWmVybywgQWRkcmVzcyhzY3JhdGNoLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwgVHJ1
c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkpOworICAgIH0KKyAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbVB0cihw
cm9wZXJ0eU5hbWUuaW1wbCgpKSkpOworfQorCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
LCBKSVRBcnJheU1vZGUgYXJyYXlNb2RlKQogewogICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5m
by0+Ynl0ZWNvZGVJbmRleDsKQEAgLTExMzksNiArMTE3OCwzNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZAogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2Vu
ZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOwogfQogCit2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSkKK3sKKyAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
ID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7CisKKyAgICBKdW1wTGlzdCBkb25lQ2FzZXM7CisgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOworCisgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4gPSBlbWl0UHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoY3VycmVudEluc3RydWN0aW9uLCBwdXRLaW5kLCBwcm9wZXJ0eU5hbWUsIGRvbmVDYXNl
cywgc2xvd0Nhc2VzKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fY29kZUJs
b2NrLT5tX2xvY2spOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fdm0sICp0aGlzLCBt
X2NvZGVCbG9jayk7CisgICAgcGF0Y2hCdWZmZXIubGluayhzbG93Q2FzZXMsIENvZGVMb2NhdGlv
bkxhYmVsKE1hY3JvQXNzZW1ibGVyQ29kZVB0cjo6Y3JlYXRlRnJvbUV4ZWN1dGFibGVBZGRyZXNz
KHJldHVybkFkZHJlc3MudmFsdWUoKSkpLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5yZXR1cm5B
ZGRyZXNzVG9TbG93UGF0aCkpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZG9uZUNhc2VzLCBieVZh
bEluZm8tPmJhZFR5cGVKdW1wLmxhYmVsQXRPZmZzZXQoYnlWYWxJbmZvLT5iYWRUeXBlSnVtcFRv
RG9uZSkpOworICAgIGZvciAoY29uc3QgYXV0byYgY2FsbFNpdGUgOiBtX2NhbGxzKSB7CisgICAg
ICAgIGlmIChjYWxsU2l0ZS50bykKKyAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbFNp
dGUuZnJvbSwgRnVuY3Rpb25QdHIoY2FsbFNpdGUudG8pKTsKKyAgICB9CisgICAgZ2VuLmZpbmFs
aXplKHBhdGNoQnVmZmVyKTsKKworICAgIGJ5VmFsSW5mby0+c3R1YlJvdXRpbmUgPSBGSU5BTEla
RV9DT0RFX0ZPUl9TVFVCKAorICAgICAgICBtX2NvZGVCbG9jaywgcGF0Y2hCdWZmZXIsCisgICAg
ICAgICgiQmFzZWxpbmUgcHV0X2J5X3ZhbCVzIHdpdGggY2FjaGVkIHByb3BlcnR5IG5hbWUgJyVz
JyBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwIiwgKHB1dEtpbmQgPT0gRGlyZWN0KSA/ICJf
ZGlyZWN0IiA6ICIiLCBwcm9wZXJ0eU5hbWUuaW1wbCgpLT51dGY4KCkuZGF0YSgpLCB0b0NTdHJp
bmcoKm1fY29kZUJsb2NrKS5kYXRhKCksIHJldHVybkFkZHJlc3MudmFsdWUoKSkpOworICAgIGJ5
VmFsSW5mby0+Y2FjaGVkSWQgPSBwcm9wZXJ0eU5hbWU7CisgICAgYnlWYWxJbmZvLT5zdHViSW5m
byA9IGdlbi5zdHViSW5mbygpOworCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhieVZhbEluZm8tPm5vdEluZGV4
SnVtcCwgQ29kZUxvY2F0aW9uTGFiZWwoYnlWYWxJbmZvLT5zdHViUm91dGluZS0+Y29kZSgpLmNv
ZGUoKSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihwdXRLaW5kID09IERpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1
dEJ5VmFsR2VuZXJpYyA6IG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykpOworfQorCisKIEpJVDo6
SnVtcExpc3QgSklUOjplbWl0RGlyZWN0QXJndW1lbnRzR2V0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKQogewogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CmluZGV4IGE4ZDY5YWNkY2Y2Nzc0OTRiOGVlNjJkMWUxMmFiOTJmNTg5Y2UwMDAuLmMxOGFmOTAx
ZWZjYWVmNWMxMDI2NWI2OWRhZmY5NjA4MTU2NWQ0M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtMjQ4LDE2ICsy
NDgsNyBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3RpbwogICAgIC8vIHNjcmF0Y2g6IHJlZ1Q0CiAK
ICAgICBzbG93Q2FzZXMuYXBwZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDMpKTsKLSAgICBp
ZiAocHJvcGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChi
cmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJl
SURPZmZzZXQoKSksIG1fdm0tPnN5bWJvbFN0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICBsb2Fk
UHRyKEFkZHJlc3MocmVnVDIsIFN5bWJvbDo6b2Zmc2V0T2ZQcml2YXRlTmFtZSgpKSwgcmVnVDQp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJl
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBt
X3ZtLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJl
Z1QyLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVnVDQpOwotICAgICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDQpKTsKLSAgICAgICAgc2xvd0Nhc2Vz
LmFwcGVuZChicmFuY2hUZXN0MzIoWmVybywgQWRkcmVzcyhyZWdUNCwgU3RyaW5nSW1wbDo6Zmxh
Z3NPZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkpKTsK
LSAgICB9Ci0gICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1Q0LCBU
cnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKSk7CisgICAgZW1pdElkZW50aWZpZXJD
aGVjayhyZWdUMiwgcmVnVDQsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKIAogICAgIEpJVEdl
dEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5
dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKQEAgLTMyMiw4
ICszMTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QzLCByZWdUMik7CiAgICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAg
ZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKKyAgICBQYXRjaGFibGVK
dW1wIG5vdEluZGV4ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7CiAg
ICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgcHJvZmlsZSk7
CiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEpOwogICAg
IApAQCAtMzU0LDcgKzM0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwo
KTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0
aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFk
VHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8u
YXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwg
bm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUpKTsKIH0KIAogSklUOjpKdW1w
TGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRl
eGluZ1NoYXBlKQpAQCAtNDUzLDYgKzQ0NSw0MiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFy
cmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdAog
ICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK0pJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
UHV0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUHV0
S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBk
b25lQ2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCit7CisgICAgLy8gYmFzZTogdGFnKHJlZ1Qx
KSwgcGF5bG9hZChyZWdUMCkKKyAgICAvLyBwcm9wZXJ0eTogdGFnKHJlZ1QzKSwgcGF5bG9hZChy
ZWdUMikKKworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworCisgICAg
c2xvd0Nhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QzKSk7CisgICAgZW1pdElk
ZW50aWZpZXJDaGVjayhyZWdUMiwgcmVnVDIsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKKwor
ICAgIC8vIFdyaXRlIGJhcnJpZXIgYnJlYWtzIHRoZSByZWdpc3RlcnMuIFNvIGFmdGVyIGlzc3Vp
bmcgdGhlIHdyaXRlIGJhcnJpZXIsCisgICAgLy8gcmVsb2FkIHRoZSByZWdpc3RlcnMuCisgICAg
ZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxkRmlsdGVyQmFzZSk7CisgICAgZW1p
dExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJl
Z1QyKTsKKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9j
aywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdp
c3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVnVDEsIERvbnRTcGlsbCwgbV9jb2RlQmxvY2stPmVjbWFN
b2RlKCksIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZhc3RQYXRoKCp0aGlzKTsKKyAgICBk
b25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFi
ZWwoKTsKKyAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsKKworICAgIC8vIEpJVFB1
dEJ5SWRHZW5lcmF0b3Igb25seSBwcmVzZXJ2ZSB0aGUgdmFsdWUgYW5kIHRoZSBiYXNlJ3MgcGF5
bG9hZCwgd2UgaGF2ZSB0byByZWxvYWQgdGhlIHRhZy4KKyAgICBlbWl0TG9hZFRhZyhiYXNlLCBy
ZWdUMSk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMywgcmVnVDIsIHJlZ1QxLCByZWdUMCwgcHJvcGVy
dHlOYW1lLmltcGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2lu
LCBjYWxsKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICByZXR1cm4gZ2Vu
OworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKQEAgLTQ2
MSw4ICs0ODksOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIEFycmF5UHJvZmlsZSog
cHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZTsKICAgICBCeVZh
bEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0
aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHBy
b3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFz
ZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVy
dHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5
IGNoZWNrCiAgICAgCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJv
ZmlsZSk7CkBAIC01MDAsMTQgKzUyOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAg
IGFkZENhbGxBcmd1bWVudChyZWdUMSk7CiAgICAgYWRkQ2FsbEFyZ3VtZW50KHJlZ1QwKTsKICAg
ICBhZGRDYWxsQXJndW1lbnQoVHJ1c3RlZEltbVB0cihieVZhbEluZm8pKTsKLSAgICBDYWxsIGNh
bGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGly
ZWN0UHV0QnlWYWwgOiBvcGVyYXRpb25QdXRCeVZhbCk7CisgICAgQ2FsbCBjYWxsID0gYXBwZW5k
Q2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFs
T3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKTsKICNlbHNlCiAgICAgLy8gVGhl
IHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3
YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91bGRuJ3QgaGFwcGVuIG9uIG90aGVy
IHBsYXRmb3Jtcy4KICAgICBlbWl0TG9hZChiYXNlLCByZWdUMiwgcmVnVDEpOwogICAgIGVtaXRM
b2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUNSwg
cmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRp
b25EaXJlY3RQdXRCeVZhbCA6IG9wZXJhdGlvblB1dEJ5VmFsLCByZWdUMiwgcmVnVDEsIHJlZ1Qz
LCByZWdUMCwgcmVnVDUsIHJlZ1Q0LCBieVZhbEluZm8pOworICAgIENhbGwgY2FsbCA9IGNhbGxP
cGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3Bl
cmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDIsIHJlZ1QxLCByZWdUMywgcmVnVDAsIHJlZ1Q1
LCByZWdUNCwgYnlWYWxJbmZvKTsKICNlbmRpZgogCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5m
b1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhUYXJnZXQgPSBzbG93UGF0aDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13
aXRoLXN0cmluZy1icmVhay5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy1icmVhay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZWU2NGNhZmVlYmNm
Zjc4NDNhYzU3ZDkxMjU0ZWI2M2I1YmJkNjMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWJyZWFrLmpz
CkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7
CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcign
YmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgbmFt
ZSwgdmFsdWUpCit7CisgICAgb2JqZWN0W25hbWVdID0gdmFsdWU7Cit9Citub0lubGluZShhc3Np
Z24pOworCit2YXIgc3RyaW5nID0gJ2hlbGxvJzsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDE7
ICsraSkgeworICAgIHZhciBvYmplY3QgPSB7fTsKKyAgICBpZiAoaSA9PT0gMTAwMDApIHsKKyAg
ICAgICAgYXNzaWduKG9iamVjdCwgNDIsIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0WzQy
XSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QuaGVsbG8sIHVuZGVmaW5lZCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgYXNzaWduKG9iamVjdCwgc3RyaW5nLCA0Mik7CisgICAgICAgIHNo
b3VsZEJlKG9iamVjdFtzdHJpbmddLCA0Mik7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZ2Vu
ZXJhdGVkLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLWdlbmVyYXRlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMWY0M2FkM2IwNTJlYzUyZmNk
NTgzZjk3Njk0MDVjNTEwNDI1MWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWdlbmVyYXRlZC5qcwpA
QCAtMCwwICsxLDM0IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQorewor
ICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Jh
ZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGdlbjEodmFsdWUpCit7CisgICAg
cmV0dXJuICdoZScgKyB2YWx1ZTsKK30KK25vSW5saW5lKGdlbjEpOworCitmdW5jdGlvbiBnZW4y
KHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSArICdsZCc7Cit9Citub0lubGluZShnZW4yKTsK
KworZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFsdWUpCit7CisgICAgb2JqZWN0W25h
bWVdID0gdmFsdWU7Cit9Citub0lubGluZShhc3NpZ24pOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0ID0ge307CisgICAgaWYgKGkgJSAyID09PSAw
KSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIGdlbjEoJ2xsbycpLCA0Mik7CisgICAgICAgIHNo
b3VsZEJlKG9iamVjdC5oZWxsbywgNDIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2lnbihv
YmplY3QsIGdlbjIoJ3dvcicpLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdC53b3JsZCwg
NDIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmljLmpzIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWdlbmVyaWMuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTZmZjgxMTYwNDYyOWU2ZTdiNmM4YTg2ODg2Mjg4YjZjYzE5MTk1MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZh
bC13aXRoLXN0cmluZy1nZW5lcmljLmpzCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVu
Y3Rpb24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFsdWUpCit7CisgICAgb2JqZWN0W25hbWVdID0g
dmFsdWU7Cit9Citub0lubGluZShhc3NpZ24pOworCit2YXIgc3RyaW5nID0gJ2hlbGxvJzsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDE7ICsraSkgeworICAgIHZhciBvYmplY3QgPSB7fTsKKyAg
ICBpZiAoaSA9PT0gMTAwMDApIHsKKyAgICAgICAgYXNzaWduKG9iamVjdCwgJ3Rlc3RpbmcnLCA0
Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdC50ZXN0aW5nLCA0Mik7CisgICAgICAgIHNob3Vs
ZEJlKG9iamVjdC5oZWxsbywgdW5kZWZpbmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3Np
Z24ob2JqZWN0LCBzdHJpbmcsIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0W3N0cmluZ10s
IDQyKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVhay5qcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVhay5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kNTQ4NTExMTQ0NTNhNDRhMDJlODg1ODU1NGJmMTZmM2U0N2E1NzA0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLWJyZWFrLmpzCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIHNob3VsZEJl
KGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rp
b24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFsdWUpCit7CisgICAgb2JqZWN0W25hbWVdID0gdmFs
dWU7Cit9Citub0lubGluZShhc3NpZ24pOworCit2YXIga2V5ID0gU3ltYm9sKCk7Citmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0ID0ge307CisgICAgaWYg
KGkgPT09IDEwMDAwKSB7CisgICAgICAgIHZhciBrZXkyID0gNDI7CisgICAgICAgIGFzc2lnbihv
YmplY3QsIGtleTIsIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0W2tleTJdLCA0Mik7Cisg
ICAgICAgIHNob3VsZEJlKG9iamVjdFtrZXldLCB1bmRlZmluZWQpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGFzc2lnbihvYmplY3QsIGtleSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rb
a2V5XSwgNDIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1nZW5lcmljLmpzIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWdlbmVyaWMu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWZjNGQxOGQ0MDFmYTcwZjAxYzk4ODgxMDgzY2UwMGIzMzJlNzUxMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC1nZW5lcmljLmpzCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9u
IHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0
ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30K
KworZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFsdWUpCit7CisgICAgb2JqZWN0W25h
bWVdID0gdmFsdWU7Cit9Citub0lubGluZShhc3NpZ24pOworCit2YXIga2V5ID0gU3ltYm9sKCk7
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0ID0ge307
CisgICAgaWYgKGkgPT09IDEwMDAwKSB7CisgICAgICAgIHZhciBrZXkyID0gU3ltYm9sKCk7Cisg
ICAgICAgIGFzc2lnbihvYmplY3QsIGtleTIsIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0
W2tleTJdLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdFtrZXldLCB1bmRlZmluZWQpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIGtleSwgNDIpOworICAgICAgICBz
aG91bGRCZShvYmplY3Rba2V5XSwgNDIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxZDUwYTgzN2ZjNjFk
ZDgwNzA5NmQ4MjEwYjBlZGZmZTFjNWQwYzgyLi45NGZhNzAwZjJiNzlhODExYzRkY2VlMjI5YTVk
YWI3ZTU0NWI1N2EyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTUtMDgtMDcgIFl1c3VrZSBT
dXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgSW50cm9kdWNlIHB1dF9i
eV9pZCBsaWtlIElDIGludG8gcHV0X2J5X3ZhbCB3aGVuIHRoZSBnaXZlbiBuYW1lIGlzIFN0cmlu
ZyBvciBTeW1ib2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0Nzc2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBzeW50aGV0aWMgdGVzdHMgZm9yIHB1dC1ieS12YWwuIEp1c3QgbWFrZSBwdXQtYnkt
aWQgdGVzdHMgdXNpbmcgc3ltYm9sIC8gc3RyaW5nLgorCisgICAgICAgICoganMvcmVncmVzcy9m
b2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNl
dC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnkt
dmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5saW5lZC1wdXQt
YnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLXRyYW5zaXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9w
b2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcG9s
eW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJh
bnNpdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9y
cGhpYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZh
bC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcuaHRtbDogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5k
LXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1
dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9s
eW1vcnBoaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1i
eS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmlu
Zy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgIChmdSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmpz
OiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChmdSk6CisgICAgICAgIChiYXIpOgor
ICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRo
LXN0cmluZy10cmFuc2l0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChG
b28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZWQtcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAg
ICAgIChGb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGlj
LXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9u
LmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLmpzOiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzOiBBZGRlZC4K
KyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5q
czogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5qczogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKwogMjAxNS0wOC0wNyAgTXlsZXMgQy4gTWF4
ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIFRlc3QgZ2FyZGVu
aW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13
aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1i
eS1vZmZzZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY5ZDM3NmY3NjI3OWY4YzM2YzY5ZjIw
YTMzNTE3OGZhMDA2NzdjYjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZz
ZXQuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZDUyMzU3MGU2NGFl
OWIzYzNhMzQxYjA0YmRmNmU3ZjMzY2I5MDYxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5
LW9mZnNldC5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0
aS1wdXQtYnktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRv
LW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjE3ZGNlM2I0ZjI3NDZiNDQ4MDMyOTgzOTE3NDQ0ODJhZTlh
MmIyYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQt
YnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8t
bXVsdGktcHV0LWJ5LW9mZnNldAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xk
LXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5odG1sIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGkt
cHV0LWJ5LW9mZnNldC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhOTI3NzA4NDNiZGJhZDBjNjNlYjY5ZWM2
ZDQ0Y2RhYjEzMTQ2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwK
QEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZz
ZXQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13
aXRoLXN0cmluZy10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTNiZTZmMmQw
ODA2NjdjY2E5OTMyOTBjNzIxM2I2YjY5ZGQwMTk5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lubGluZWQtcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmh0bWwgYi9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0
aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjkwMzI2YTQzNGQ5NmNkNDAwNjljZjM0YjdlNDNkNDU3MjM4
Zjc5OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uaHRtbApAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmxpbmVkLXB1
dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24tZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMzNGQ1ZjViZGM3YTMwZDA0YjdjNDFiMzQ2MWUzYzAzY2VlOWFh
NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1w
dXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41YWRlNGU5
Zjg1NDQwOTZhNTIzMDgxZTJjNjU1NDQzZjg2OTU0MDIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNp
dGlvbi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVU
Ri8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0
aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0
aC1zdHJpbmctZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYwNzNjMTk5MzAzY2UzNDc0MmRhODVl
ODE5NTliMDg3YTkwMzdlNTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5n
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwt
d2l0aC1zdHJpbmcuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0OTkyNThmMmUyZWRlZDFlZGY0
M2YwYTNkMzI3NzA2OGUyMDMyZDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuaHRtbApAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9w
b2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMt
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmYwODQ1NTE0MmUxYWFhOWNkNTE3ZTNlNzllM2IyZGVlZjY1NGQzZWQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwt
d2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wb2x5
bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuaHRtbCBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjhjMmNlODA3ZTE3NzllMDlmYmFmMWI3YzY3MTBiNjZmYTRjZmQ1YTUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjZjN2UyNjFiNzcyYmUwNTg1NzQ0ZGZiNGI0MWNiZTcxNTI4ZTNjMWQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1z
dHJpbmctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwt
d2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNp
dGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2UyNDkzMzQ1YTg1MDY5NTRjYmI4MzcxNmE4
OTRlMjllMGEyYjc5MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBs
YWNlLWFuZC10cmFuc2l0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKwor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1i
eS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRp
b24uaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kZWJiMWY3MzY3MWI4NGE3ZmNhNTgzYTljNzg1MjUyOWQ3MWY4
ODcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uaHRtbApAQCAtMCwwICsxLDEyIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9y
cGhpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDJkOGZlMjFlODRkYzAzYzlmMDcyNDA2MjFm
MDE5NjZmZGQyOGI2YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0
bHktcG9seW1vcnBoaWMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZh
bC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5odG1sIGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uY2YzZGQ3ZjcyZGQ5YTYxNjUwNzA4MTcyMmJhN2U1ZTg4MDJlYjcwYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQ
RSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1z
dHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lYTdiYjllMmQwNWI1ZDA1MzUzYjYyZDdjOWMxYTdjMjY1MzI0ZDM2
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDA1
YzI1Y2E2MWY5YTYxMWZhNWY2YjA2ZTYyNTMyZjZlMTcyYzNmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbAorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxh
Y2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
dXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmExM2I5NDU4NTZmNGIxZjhkOWZmMTMyMWZhZTc2YjUxZDNiY2U3NjYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1z
eW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlv
bgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhy
b3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzc1ZjI2NjA4ZGU5NTEyYThmNGJhYzMzNjMxYWU1Y2Y3MGE5ZTlmYQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBs
YWNlLWFuZC10cmFuc2l0aW9uLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1y
ZXBsYWNlLWFuZC10cmFuc2l0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1z
bGlnaHRseS1wb2x5bW9ycGhpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjFiYzVmY2E1Nzk0NTJkZDQwMDJkZGVkZmNmZDU0MTY0ZDRhMzczZmQKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1z
eW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xp
Z2h0bHktcG9seW1vcnBoaWMuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkMDQ2
NTcyNTI1MDE0MDZmMjdjMDcyNGE5ZGJkNDBhZTVhZTg4MmMKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9s
eW1vcnBoaWMuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBv
bHltb3JwaGljLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1sIGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2QxMjhiY2NkNGJkNDc0NGNkY2ExN2NiZWEwYzViMzU0MGE1MDhlOQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1sCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9s
ZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuanMgYi9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJp
bmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YjlhZGIyOTVjY2U0YjRk
NzM3NDdlMmIyOTUyNzA0NWQzMjE5ZWY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11
bHRpLXB1dC1ieS1vZmZzZXQuanMKQEAgLTAsMCArMSw0NyBAQAordmFyIGUgPSAiZSIsIGYgPSAi
ZiIsIGcgPSAiZyI7CitmdW5jdGlvbiBmb28obykgeworICAgIG9bZl0gPSAxOworfQorCitmdW5j
dGlvbiBmdShvKSB7CisgICAgb1tlXSA9IDI7Cit9CisKK2Z1bmN0aW9uIGJhcihmdW5jLCBvKSB7
CisgICAgZnVuYyhvKTsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAg
ICB2YXIgbyA9IHt9OworICAgIG9bImkiICsgaV0gPSA0MjsKKyAgICBmb28obyk7CisgICAgZnUo
e1tmXToxLCBbZV06Mn0pOworICAgIGZ1KHtbZV06MSwgW2ZdOjIsIFtnXTozfSk7Cit9CisgICAg
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgYmFyKGZvbywge1tmXToxfSk7
CisgICAgYmFyKGZ1bmN0aW9uKCkgeyB9LCBudWxsKTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IHJl
dHVybiA0MiB9LCBudWxsKTsKK30KKyAgICAKKyhmdW5jdGlvbihmdW5jLCBvLCBwKSB7CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbjsgKytpKSB7CisgICAgICAgIGZ1KG8pOworICAgICAgICBiYXIoZnVuYywgbyk7Cisg
ICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAg
ICB9CisgICAgaWYgKG9bZV0gIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUg
aW4gby5lOiAiICsgb1tlXTsKKyAgICBpZiAob1tmXSAhPSAxKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZSBpbiBvLmY6ICIgKyBvW2ZdOworICAgIGlmIChwW2VdICE9IDIpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIHAuZTogIiArIHBbZV07CisgICAgaWYgKHBb
Zl0gIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gcC5mOiAiICsgcFtm
XTsKK30pKGZvbywge1tmXTo0MiwgW2VdOjIzfSwge1tlXToyMywgW2ZdOjQyLCBbZ106MTAwfSk7
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQt
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzIGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGUwMjYxNTNhOTVkOGJiZGFi
MjQ2MGYwMzBkMDlhMDM5ZTdlMTg4NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0
aS1wdXQtYnktb2Zmc2V0LmpzCkBAIC0wLDAgKzEsNDcgQEAKK3ZhciBlID0gU3ltYm9sKCksIGYg
PSBTeW1ib2woKSwgZyA9IFN5bWJvbCgpOworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvW2ZdID0g
MTsKK30KKworZnVuY3Rpb24gZnUobykgeworICAgIG9bZV0gPSAyOworfQorCitmdW5jdGlvbiBi
YXIoZnVuYywgbykgeworICAgIGZ1bmMobyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBvWyJpIiArIGldID0gNDI7CisgICAgZm9v
KG8pOworICAgIGZ1KHtbZl06MSwgW2VdOjJ9KTsKKyAgICBmdSh7W2VdOjEsIFtmXToyLCBbZ106
M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIGJhcihm
b28sIHtbZl06MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmFyKGZ1
bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rpb24oZnVuYywg
bywgcCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBmdShvKTsKKyAgICAgICAgYmFy
KGZ1bmMsIG8pOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAg
IHAgPSB0bXA7CisgICAgfQorICAgIGlmIChvW2VdICE9IDIpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIGluIG8uZTogIiArIG9bZV07CisgICAgaWYgKG9bZl0gIT0gMSkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5mOiAiICsgb1tmXTsKKyAgICBpZiAocFtl
XSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmU6ICIgKyBwW2Vd
OworICAgIGlmIChwW2ZdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGlu
IHAuZjogIiArIHBbZl07Cit9KShmb28sIHtbZl06NDIsIFtlXToyM30sIHtbZV06MjMsIFtmXTo0
MiwgW2ddOjEwMH0pOworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5qcyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRo
LXN0cmluZy10cmFuc2l0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdiZjQyZWY0OWVkMTg4MDIzYTE0NDU2
YWE4NWIxNDFmNjM5MzlhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bi5qcwpAQCAtMCwwICsxLDQwIEBACit2YXIgeCA9ICJ4IjsKK3ZhciB5ID0gInkiOwordmFyIGEg
PSAiYSI7Cit2YXIgYiA9ICJiIjsKK3ZhciBjID0gImMiOwordmFyIGQgPSAiZCI7Cit2YXIgZSA9
ICJlIjsKK3ZhciBmID0gImYiOwordmFyIGcgPSAiZyI7Cit2YXIgaCA9ICJoIjsKK3ZhciBpID0g
ImkiOworCitmdW5jdGlvbiBmb28obykgeworICAgIG9beF0gPSAxOworICAgIG9beV0gPSAyOwor
ICAgIG9bYV0gPSAzOworICAgIG9bYl0gPSA0OworICAgIG9bY10gPSA1OworICAgIG9bZF0gPSA2
OworICAgIG9bZV0gPSA3OworICAgIG9bZl0gPSA4OworICAgIG9bZ10gPSA5OworICAgIG9baF0g
PSAxMDsKKyAgICBvW2ldID0gMTE7Cit9CisKK2Z1bmN0aW9uIEZvbygpIHsKKyAgICBmb28odGhp
cyk7Cit9CisKK3ZhciByZXN1bHQgPSAwOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsg
KytpKSB7CisgICAgZm9vKHtbZl06NDJ9KTsKKyAgICByZXN1bHQgKz0gKG5ldyBGb28oKSlbeF07
Cit9CisKK2lmIChyZXN1bHQgIT0gMTAwMDAwKQorICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qcyBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC10cmFuc2l0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI3NzFlN2IzMDk2OTQ3YjM5ZjQ4Mjg0OWE2ZDQx
ZmI5NjI2ZTUwYmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qcwpA
QCAtMCwwICsxLDQwIEBACit2YXIgeCA9IFN5bWJvbCgpOwordmFyIHkgPSBTeW1ib2woKTsKK3Zh
ciBhID0gU3ltYm9sKCk7Cit2YXIgYiA9IFN5bWJvbCgpOwordmFyIGMgPSBTeW1ib2woKTsKK3Zh
ciBkID0gU3ltYm9sKCk7Cit2YXIgZSA9IFN5bWJvbCgpOwordmFyIGYgPSBTeW1ib2woKTsKK3Zh
ciBnID0gU3ltYm9sKCk7Cit2YXIgaCA9IFN5bWJvbCgpOwordmFyIGkgPSBTeW1ib2woKTsKKwor
ZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvW3hdID0gMTsKKyAgICBvW3ldID0gMjsKKyAgICBvW2Fd
ID0gMzsKKyAgICBvW2JdID0gNDsKKyAgICBvW2NdID0gNTsKKyAgICBvW2RdID0gNjsKKyAgICBv
W2VdID0gNzsKKyAgICBvW2ZdID0gODsKKyAgICBvW2ddID0gOTsKKyAgICBvW2hdID0gMTA7Cisg
ICAgb1tpXSA9IDExOworfQorCitmdW5jdGlvbiBGb28oKSB7CisgICAgZm9vKHRoaXMpOworfQor
Cit2YXIgcmVzdWx0ID0gMDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewor
ICAgIGZvbyh7W2ZdOjQyfSk7CisgICAgcmVzdWx0ICs9IChuZXcgRm9vKCkpW3hdOworfQorCitp
ZiAocmVzdWx0ICE9IDEwMDAwMCkKKyAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1v
cnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZWMyMmU4YzAwZGNjOTUzNmY1ZTg2Nzc3ZmM2YTVmODEwYmNlZjcxYwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGlj
LXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuanMKQEAgLTAsMCArMSwyNiBAQAordmFyIGYgPSAiZiIs
IGcgPSAiZyIsIGggPSAiaCI7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgb1tmXSA9IChvW2ZdIHwgMCkgKyA0MjsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAg
IHZhciBvYmplY3Q7CisgICAgaWYgKChpICUgMykgPT0gMCkKKyAgICAgICAgb2JqZWN0ID0ge1tn
XTozfTsKKyAgICBlbHNlIGlmICgoaSAlIDMpID09IDEpCisgICAgICAgIG9iamVjdCA9IHtbZl06
MSwgW2ddOjJ9OworICAgIGVsc2UgaWYgKChpICUgMykgPT0gMikKKyAgICAgICAgb2JqZWN0ID0g
e1tnXToxLCBbZl06Mn07CisgICAgZm9vKG9iamVjdCk7CisgICAgaWYgKG9iamVjdFtmXSAhPSA0
MiAqIDEwMCArIChpICUgMykpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3Ig
aSA9ICIgKyBpICsgIjogIiArIG9iamVjdFtmXTsKK30KKwordmFyIHIgPSB7W2ddOjMsIFtoXTo0
LCBbZl06NX07Citmb28ocik7CitpZiAocltmXSAhPSA1ICsgNDIgKiAxMDApCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJbZl07CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBo
aWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzJkMGU4OTAzMjNlN2E2
MjNhZWNlYTA1NDRhOWM5MTAxMjhkNGMyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC5qcwpAQCAtMCwwICsxLDI2IEBACit2YXIgZiA9IFN5bWJvbCgpLCBnID0gU3ltYm9sKCksIGgg
PSBTeW1ib2woKTsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDsgKytpKQorICAgICAgICBvW2ZdID0gKG9bZl0gfCAwKSArIDQyOworfQorCitub0lubGlu
ZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIG9i
amVjdDsKKyAgICBpZiAoKGkgJSAzKSA9PSAwKQorICAgICAgICBvYmplY3QgPSB7W2ddOjN9Owor
ICAgIGVsc2UgaWYgKChpICUgMykgPT0gMSkKKyAgICAgICAgb2JqZWN0ID0ge1tmXToxLCBbZ106
Mn07CisgICAgZWxzZSBpZiAoKGkgJSAzKSA9PSAyKQorICAgICAgICBvYmplY3QgPSB7W2ddOjEs
IFtmXToyfTsKKyAgICBmb28ob2JqZWN0KTsKKyAgICBpZiAob2JqZWN0W2ZdICE9IDQyICogMTAw
ICsgKGkgJSAzKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGZvciBpID0gIiAr
IGkgKyAiOiAiICsgb2JqZWN0W2ZdOworfQorCit2YXIgciA9IHtbZ106MywgW2hdOjQsIFtmXTo1
fTsKK2ZvbyhyKTsKK2lmIChyW2ZdICE9IDUgKyA0MiAqIDEwMCkKKyAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcltmXTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQt
dHJhbnNpdGlvbi5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1i
eS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
YjIzMzdjOTQzZDRiY2ExNjhkOTQ2MTAwMDdiMWQ4MDhjOGVkOWFjCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmpzCkBAIC0wLDAgKzEsMTQgQEAKKyhmdW5jdGlv
bigpIHsKKyAgICB2YXIgZiA9ICJmIiwgZyA9ICJnIjsKKyAgICB2YXIgbzsKKyAgICB2YXIgbiA9
IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgaWYg
KGkgJiAxKQorICAgICAgICAgICAgbyA9IHtbZl06IDF9OworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvID0ge1tmXTogMSwgW2ddOiAyfTsKKyAgICAgICAgb1tnXSA9IGk7CisgICAgfQorICAg
IGlmIChvW2ddICE9IG4gLSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBv
Lmc6ICIgKyBvW2ddOworfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMu
anMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhY2M0MWRkZTQ4ZDE4
YTdmNzA5MjQxNDlmZDA1MjI1YjlmMzhhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5
LXBvbHltb3JwaGljLmpzCkBAIC0wLDAgKzEsMTYgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIg
ZiA9ICJmIiwgZyA9ICJnIjsKKyAgICB2YXIgbyA9IHtbZl06IDEsIFtnXTogMn07CisgICAgdmFy
IHAgPSB7W2ZdOiAxfTsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBuOyArK2kpIHsKKyAgICAgICAgb1tmXSA9IGk7CisgICAgICAgIHZhciB0bXAgPSBvOwor
ICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKG9bZl0gIT0g
biAtIDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIG8uZjogIiArIG9bZl07
CisgICAgaWYgKHBbZl0gIT0gbiAtIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogdmFkIHZhbHVl
IG9mIHAuZjogIiArIHBbZl07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qcyBiL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZjYzZmExMDA0ZDVmOTFiY2RlYzk4ZmVhZDQyZTdkNGM1YWYwYjUyOQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwt
d2l0aC1zdHJpbmcuanMKQEAgLTAsMCArMSwyMCBAQAordmFyIGYgPSAiZiI7CisKK2Z1bmN0aW9u
IGZvbyhvKSB7CisgICAgb1tmXSA9IDQyOworfQorCitmdW5jdGlvbiBiYXIobykgeworICAgIG9b
Zl0gPSA4NDsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICB2
YXIgbyA9IHt9OworICAgIGZvbyhvKTsKKyAgICBpZiAob1tmXSAhPSA0MikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBleHBlY3RlZCA0MiwgZ290ICIgKyBvW2ZdOworICAgIGJhcihvKQorICAgIGlm
IChvW2ZdICE9IDg0KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGV4cGVjdGVkIDg0LCBnb3QgIiAr
IG9bZl07Cit9CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wt
cmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTZhMjNiYjk4MzcwMmEzMDgw
NTY5NjkxZDJjYjFlOWYwNzc2ZjcwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10
cmFuc2l0aW9uLmpzCkBAIC0wLDAgKzEsMTQgQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgZiA9
IFN5bWJvbCgpLCBnID0gU3ltYm9sKCk7CisgICAgdmFyIG87CisgICAgdmFyIG4gPSAxMDAwMDAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGlmIChpICYgMSkK
KyAgICAgICAgICAgIG8gPSB7W2ZdOiAxfTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbyA9
IHtbZl06IDEsIFtnXTogMn07CisgICAgICAgIG9bZ10gPSBpOworICAgIH0KKyAgICBpZiAob1tn
XSAhPSBuIC0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2Ygby5nOiAiICsg
b1tnXTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmpzIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1z
bGlnaHRseS1wb2x5bW9ycGhpYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZTUwZDlhNTBmMmI0NmY1YTYyMzUx
YTA0OTYxMjg0YTJlY2Q0NmQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9y
cGhpYy5qcwpAQCAtMCwwICsxLDE2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGYgPSBTeW1i
b2woKSwgZyA9IFN5bWJvbCgpOworICAgIHZhciBvID0ge1tmXTogMSwgW2ddOiAyfTsKKyAgICB2
YXIgcCA9IHtbZl06IDF9OworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgeworICAgICAgICBvW2ZdID0gaTsKKyAgICAgICAgdmFyIHRtcCA9IG87
CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAob1tmXSAh
PSBuIC0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2Ygby5mOiAiICsgb1tm
XTsKKyAgICBpZiAocFtmXSAhPSBuIC0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiB2YWQgdmFs
dWUgb2YgcC5mOiAiICsgcFtmXTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmpzIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41NTg4YmE3OGQ4ZmNmYmFmZDk5MTMzNTc3MDVjNDZjNDc3MGQ1ZmU2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC5qcwpAQCAtMCwwICsxLDIwIEBACit2YXIgZiA9IFN5bWJvbCgiQ29jb2Ei
KTsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvW2ZdID0gNDI7Cit9CisKK2Z1bmN0aW9uIGJh
cihvKSB7CisgICAgb1tmXSA9IDg0OworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7
ICsraSkgeworICAgIHZhciBvID0ge307CisgICAgZm9vKG8pOworICAgIGlmIChvW2ZdICE9IDQy
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGV4cGVjdGVkIDQyLCBnb3QgIiArIG9bZl07CisgICAg
YmFyKG8pCisgICAgaWYgKG9bZl0gIT0gODQpCisgICAgICAgIHRocm93ICJFcnJvcjogZXhwZWN0
ZWQgODQsIGdvdCAiICsgb1tmXTsKK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258551</attachid>
            <date>2015-08-07 18:44:26 -0700</date>
            <delta_ts>2015-08-09 19:10:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147760-20150807184416.patch</filename>
            <type>text/plain</type>
            <size>84969</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MzM5MTdmZmFlOWI0YzZiZDU0NDk0MGRjNjdiMzZmYTgzMDQ4NTU3Li40NTkyNTgwYzkzNjc4NWRj
YmRmOWMwZWRlNWRhYzkxZjliODc0ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxNS0wOC0wNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgcHV0X2J5X2lkIGxpa2UgSUMgaW50byBwdXRfYnlf
dmFsIHdoZW4gdGhlIGdpdmVuIG5hbWUgaXMgU3RyaW5nIG9yIFN5bWJvbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NzYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHB1dF9i
eV9pZCBJQyB0byBwdXRfYnlfdmFsIGJ5IGNhY2hpbmcgdGhlIG9uZSBjYW5kaWRhdGUgaWQsCisg
ICAgICAgIGl0IGlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSBnZXRfYnlfdmFsIElDIGV4dGVuc2lv
bi4KKyAgICAgICAgSXQgd2lsbCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiBFUzYgU3ltYm9scyBhbmQg
RVM2IGNvbXB1dGVkIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBsaXRlcmFscy4KKworICAgICAg
ICBJbiB0aGlzIHBhdGNoLCB3ZSBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQ2hlY2tJZGVudCBhbmQg
UHV0QnlJZCAvIFB1dEJ5VmFsIGluIERGRywKKyAgICAgICAgc28gdGhpcyBwYXRjaCBkb2VzIG5v
dCBjaGFuZ2UgRlRMIGJlY2F1c2UgdGhlIGFib3ZlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc3Vw
cG9ydGVkIGluIEZUTC4KKworICAgICAgICBBbmQgdGhpcyBwYXRjaCBhbHNvIGluY2x1ZGVzIHJl
ZmFjdG9yaW5nIHRvIGxldmVyYWdlIGJ5VmFsSW5mby0+c2xvd1BhdGhDb3VudCBpbiB0aGUgY2Fj
aGVkIElkIHBhdGguCisKKyAgICAgICAgUGVyZm9ybWFuY2UgcmVzdWx0cyByZXBvcnQgdGhlcmUn
cyBubyByZWdyZXNzaW9uIGluIHRoZSBleGlzdGluZyB0ZXN0cy4gQW5kIGluIHRoZSBzeW50aGV0
aWMKKyAgICAgICAgYmVuY2htYXJrcyBjcmVhdGVkIGJ5IG1vZGlmeWluZyBwdXQtYnktaWQgdG8g
cHV0LWJ5LXZhbCwgd2UgY2FuIHNlZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQorICAgICAgICBp
bXByb3ZlbWVudHMgdXAgdG8gMTMuOXguCisKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdldEJ5VmFs
T3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0QnlWYWxX
aXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
SWRlbnRpZmllckNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctYnJlYWsuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoYXNzaWdu
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmF0
ZWQuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoZ2VuMSk6CisgICAg
ICAgIChnZW4yKToKKyAgICAgICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1
dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJpYy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRC
ZSk6CisgICAgICAgIChhc3NpZ24pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLWJyZWFrLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAg
ICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1i
b2wtZ2VuZXJpYy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChhc3Np
Z24pOgorCiAyMDE1LTA4LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQnVpbGQgbW9yZSB0ZXN0aW5nIGJpbmFyaWVzIHdpdGggQ01ha2Ug
b24gV2luZG93cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCmluZGV4IGNjNWRhM2IxOWI3OWU3ZjE2ZjY5MTY5NzEwNjMzZWZkNzFlNGYxNDcu
LmJmYTI5ZTQyMWUwNmUxNjFiZWQ3MzNjZTJlNjQ3MWIyMmRhMWFlMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKQEAgLTEzNCw2ICsx
MzQsMTMgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG0KIH0KIAogI2lmIEVOQUJMRShKSVQpCitQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAg
bG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAorICAgICAgICBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCkpOworfQorCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbygKICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIs
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAog
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5oCmluZGV4IDY1MmNjYzE4YTAyZmIzOTEzZTU2YTlhMGEyYThiNTQ1MTVkOTkw
NDQuLmIwNDczNDcyYTcxODZmN2M1NWMwYWEwNjJjMWE4Y2NiMTc3NzFiODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApAQCAtNzQsNiArNzQs
MTAgQEAgY2xhc3MgUHV0QnlJZFN0YXR1cyB7CiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29t
cHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Js
b2NrLCBTdHViSW5mb01hcCYgYmFzZWxpbmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVP
cmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBz
dGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBD
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyNlbmRpZgogICAgIAogICAgIFN0
YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAyNjhhNzU3NmJj
MzY2NzI2YTA2Yzg4YjFmYzBiZTM0M2VmYzBlN2MzLi43OTRiM2IwNDg3MjU2M2I2ZGVkNWY2MWE5
ZjQ1MWRlMjk2M2Y5MzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcApAQCAtMzQzNCwxOCArMzQzNCw0MCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX3B1dF9ieV92
YWxfZGlyZWN0OgogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKICAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKLQotICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9k
ZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7Ci0g
ICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsK
LSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKLSAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKHZhbHVlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2
ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
MCk7IC8vIExlYXZlIHJvb20gZm9yIGxlbmd0aC4KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9k
ZTo6VmFyQXJnLCBvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCA/IFB1dEJ5VmFsRGly
ZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkpOwor
ICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGly
ZWN0OworICAgICAgICAgICAgYm9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYnlWYWxJbmZvcy5nZXQo
Q29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRo
ZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCisgICAgICAgICAgICAgICAg
Ly8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvICYmIGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgIWJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGls
ZWRBc1B1dEJ5SWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShieVZhbEluZm8tPmNhY2hl
ZElkLmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwor
CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsK
KworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7Cisg
ICAgICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7CisKKyAgICAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwor
ICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2ZSByb29tIGZvciBwcm9w
ZXJ0eSBzdG9yYWdlLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2
ZSByb29tIGZvciBsZW5ndGguCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIGlzRGlyZWN0ID8gUHV0QnlWYWxEaXJlY3QgOiBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9k
ZS5hc1dvcmQoKSksIE9wSW5mbygwKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAppbmRleCA5MDEwOGFmMTVkZWI3ZDA2YTNiNGI3NWMzZWY5ZTFmMWJhOWQ1YTlkLi5mYjgyN2M5
NTA0ZWU5MjIyZmM2Njg0NTcyZThlZDI4NzE1NzJiZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKQEAgLTIzMSw2ICsyMzEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9k
ZSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsK
QEAgLTI2MSw2ICsyNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9k
ZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOworICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgY29uc3QgSWRlbnRp
ZmllciYpOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIApAQCAtMzY1LDcg
KzM3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRB
cnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAg
ICAgICAgIAotICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdU
MC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KKyAgICAgICAgLy8gUHJvcGVydHkgaXMg
aW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUu
CiAgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVy
dHkgaXMgaW50LWNoZWNrZWQgYW5kCiAgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMg
Y2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KICAgICAgICAgLy8g
cmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KQEAgLTM4Niw3ICszOTQsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1
bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKIAorICAgICAgICAvLyBJZGVudGlmaWVy
IGNoZWNrIGhlbHBlciBmb3IgR2V0QnlWYWwgYW5kIFB1dEJ5VmFsLgorICAgICAgICB2b2lkIGVt
aXRJZGVudGlmaWVyQ2hlY2soUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0Y2gsIGNv
bnN0IElkZW50aWZpZXImLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsKKwogICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiosIGNvbnN0
IElkZW50aWZpZXImLCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsK
KyAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoSW5z
dHJ1Y3Rpb24qLCBQdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiwgSnVtcExpc3QmIGRvbmVDYXNl
cywgSnVtcExpc3QmIHNsb3dDYXNlcyk7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUg
eyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDdhZTQzZjBhMGE5YTVlYTcxMmM5YmIwNGM5MmQy
NjA5MjNiZDczNTQuLmY5MDllNjE1MGU0NmVjYmQ3ZDg3ZWY1Yzg3MDg5MjIzYmYwNmQ1M2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNDc4LDEw
ICs0NzgsMTYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdl
QW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmoKICAgICBiYXNlLT5wdXREaXJlY3Qo
dm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKK0FMV0FZU19JTkxJTkUg
c3RhdGljIGJvb2wgaXNTdHJpbmdPclN5bWJvbChKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biB2YWx1ZS5pc1N0cmluZygpIHx8IHZhbHVlLmlzU3ltYm9sKCk7Cit9CisKIHN0YXRpYyB2b2lk
IHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAg
IFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJ
bnQzMigpKSkgeworICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAg
ICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKQEAgLTQ5MywxMyArNDk5LDE5IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3Jp
cHQsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVl
LnB1dEJ5SW5kZXgoY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcHJvcGVydHkgPSBz
dWJzY3JpcHQudG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOwotICAgICAgICBpZiAoIWNhbGxGcmFt
ZS0+dm0oKS5leGNlcHRpb24oKSkgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3Ry
aW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGF1dG8gcHJvcGVydHkg
PSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOworICAgIC8vIERvbid0IHB1dCB0
byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgorICAgIGlmIChjYWxs
RnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChieVZh
bEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFs
SW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQorICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CisKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICBiYXNlVmFsdWUucHV0KGNh
bGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAogc3RhdGljIHZvaWQgZGlyZWN0
UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1Zh
bHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCkBAIC01
MDcsNiArNTE5LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHMKICAgICBib29sIGlzU3RyaWN0
TW9kZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOwogICAgIGlmIChM
SUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIC8vIERlc3BpdGUgaXRzIG5h
bWUsIEpTVmFsdWU6OmlzVUludDMyIHdpbGwgcmV0dXJuIHRydWUgb25seSBmb3IgcG9zaXRpdmUg
Ym94ZWQgaW50MzJfdDsgYWxsIHRob3NlIHZhbHVlcyBhcmUgdmFsaWQgYXJyYXkgaW5kaWNlcy4K
KyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJf
dCBpbmRleCA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBBU1NFUlQoaXNJbmRleChp
bmRleCkpOwogICAgICAgICBpZiAoYmFzZU9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5Rm9yUHV0
RGlyZWN0KGluZGV4KSkgewpAQCAtNTIzLDYgKzUzNiw3IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1
ZSBzCiAgICAgICAgIGRvdWJsZSBzdWJzY3JpcHRBc0RvdWJsZSA9IHN1YnNjcmlwdC5hc0RvdWJs
ZSgpOwogICAgICAgICB1aW50MzJfdCBzdWJzY3JpcHRBc1VJbnQzMiA9IHN0YXRpY19jYXN0PHVp
bnQzMl90PihzdWJzY3JpcHRBc0RvdWJsZSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHRBc0RvdWJs
ZSA9PSBzdWJzY3JpcHRBc1VJbnQzMiAmJiBpc0luZGV4KHN1YnNjcmlwdEFzVUludDMyKSkgewor
ICAgICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICAgICAg
YmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCBzdWJzY3JpcHRBc1VJbnQzMiwg
dmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXRE
aXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtNTMzLDI2ICs1NDcsMzQgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHMKICAgICBpZiAo
Y2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpCisgICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7CisgICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgYmFzZU9iamVjdC0+
cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgMCwgaXNTdHJp
Y3RNb2RlID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxk
Tm90VGhyb3cpOwotICAgIGVsc2UgewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
T2JqZWN0LCBpc1N0cmljdE1vZGUpOwotICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoY2Fs
bEZyYW1lLT52bSgpLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CiAg
ICAgfQorCisgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3ltYm9s
KHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCisgICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VPYmplY3QsIGlzU3RyaWN0TW9kZSk7CisgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0
KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCisKK2VudW0gY2xh
c3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKKyAgICBOb3RPcHRpbWl6ZWQsCisgICAgT3B0aW1pemVk
LAorICAgIEdpdmVVcCwKK307CisKK3N0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlW
YWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6
aW5nIGF0IGFsbC4KKyAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CiAKLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKIAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQz
MigpKSB7Ci0gICAgICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgog
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICAgICAg
Ym9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOwogCiAgICAgICAgIEFTU0VSVChleGVjLT5sb2NhdGlv
bkFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91
dGluZSk7CkBAIC01NjYsNDMgKzU4OCw2NCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZQogICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7Ci0g
ICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICAgICAgICAgIEpJVDo6
Y29tcGlsZVB1dEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQg
PSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIGlmICghZGlkT3B0aW1pemUpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIHRh
a2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFr
ZSBzdXJlIHdlCi0gICAgICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4g
T3IsIGlmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdAotICAgICAg
ICAgICAgLy8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2Fp
dCB1bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2VzCi0gICAgICAgICAgICAvLyB3aGVyZSB3ZSBzZWUg
bm9uLWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMg
d29ydGggb2YKLSAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlIHRo
YXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLgotICAgICAgICAgICAgaWYgKCsr
YnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwCi0gICAgICAgICAgICAgICAgfHwgb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgewotICAgICAgICAgICAgICAgIC8vIERv
bid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhleGVjLT5jb2RlQmxvY2soKSwgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVU
VVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZl
IHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVu
IHdhaXQgdW50aWwgMTAgdGltZXMuCisgICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0g
T3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50
eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8oKSkKKyAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOworICAgIH0KKworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSAmJiBpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICAg
ICAgaWYgKCFzdWJzY3JpcHQuaXNTdHJpbmcoKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkp
OworICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICAgICAg
ICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2Nr
KCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUs
IHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CisgICAgaWYgKG9wdGltaXphdGlvblJlc3Vs
dCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCkgeworICAgICAgICAvLyBJZiB3ZSB0
YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1h
a2Ugc3VyZSB3ZQorICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9y
IGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCisgICAgICAgIC8vIG9i
amVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3Ig
dXMgdG8gb2JzZXJ2ZQorICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5
bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCisgICAgICAgIC8vIHRo
ZSByZXN1bHQgaXMgR2l2ZVVwLgorICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291
bnQgPj0gMTApCisgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKKyAgICB9CisKKyAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0Owog
fQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwoRXhlY1N0YXRl
KiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJ
bmZvKiBieVZhbEluZm8pCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxPcHRp
bWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBjYWxsRnJhbWUpOwotICAg
IAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVj
dCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBp
ZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBv
cHRpbWl6aW5nIGF0IGFsbC4KLSAgICAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworICAg
IGlmICh0cnlQdXRCeVZhbE9wdGltaXplKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpHaXZlVXApIHsKKyAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1p
emUuCisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKyAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYykpOworICAgIH0KKyAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIGJ5VmFsSW5mbyk7Cit9CisKK3N0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpT
VmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQoreworICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQg
YWxsLgorICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKKworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAK
LSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5sb2Nh
dGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHVi
Um91dGluZSk7CiAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVj
dHVyZSh2bSk7CkBAIC02MTAsMjkgKzY1Myw2MCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWwoRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlCiAg
ICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJyYXlNb2RlKSAmJiBhcnJheU1v
ZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAg
ICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihs
b2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29t
cGlsZURpcmVjdFB1dEJ5VmFsKCZ2bSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7Ci0gICAg
ICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICAgICAgICAgIEpJVDo6Y29t
cGlsZURpcmVjdFB1dEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFkaWRPcHRpbWl6ZSkgewotICAgICAgICAgICAg
Ly8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hp
bmcgdGhlbiBtYWtlIHN1cmUgd2UKLSAgICAgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0
YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2Jq
ZWN0Ci0gICAgICAgICAgICAvLyB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9u
J3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLiBGb3IgY2FzZXMKLSAgICAgICAgICAgIC8vIHdo
ZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAg
aXRlcmF0aW9ucyB3b3J0aCBvZgotICAgICAgICAgICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRv
IG9ic2VydmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuCi0gICAgICAg
ICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAKLSAgICAgICAgICAgICAg
ICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFJldHVybkFk
ZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgZmFp
bGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRl
eGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCisgICAgICAgIGlm
IChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYg
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKKyAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOworICAgIH0gZWxzZSBp
ZiAoaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgICAg
IE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKKwor
ICAgICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygpIHx8ICFpbmRleCkgeworICAgICAgICAg
ICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAg
IEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CisgICAgICAgICAgICBKSVQ6OmNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIERpcmVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICB9
CiAgICAgfQotICAgIGRpcmVjdFB1dEJ5VmFsKGNhbGxGcmFtZSwgb2JqZWN0LCBzdWJzY3JpcHQs
IHZhbHVlLCBieVZhbEluZm8pOworCisgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRp
bWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCkgeworICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cg
cGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3
ZQorICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdo
ZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCisgICAgICAgIC8vIG9iamVjdHMsIHRo
aXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2Jz
ZXJ2ZQorICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4g
V2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCisgICAgICAgIC8vIHRoZSByZXN1bHQg
aXMgR2l2ZVVwLgorICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAp
CisgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcDsKKyAgICB9CisKKyAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworfQorCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8pCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZh
bHVlLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOworICAgIGlmICh0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKGV4ZWMsIG9iamVjdCwgc3Vi
c2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkg
PT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKKyAgICAgICAgLy8gRG9uJ3QgZXZlciB0
cnkgdG8gb3B0aW1pemUuCisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
KyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBS
ZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYykpOworICAgIH0KKworICAgIGRpcmVjdFB1dEJ5VmFsKGV4
ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCkBA
IC0xNDU4LDM2ICsxNTMyLDIxIEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29k
ZU9mZnNldCgpKTsKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiBieVZhbEluZm8tPmNh
Y2hlZElkICE9IHByb3BlcnR5KQorICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNT
dHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVy
dHkpKQogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICByZXR1
cm4gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7CiB9CiAKLWV4dGVybiAiQyIgewotICAg
IAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCitzdGF0aWMgT3B0aW1p
emF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwotCi0gICAgSlNW
YWx1ZSByZXN1bHQgPSBnZXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KKyAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRp
bWl6aW5nIHRoaXMgYXQgYWxsLgorICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKIAotRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKLSAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKIAogICAgIGlm
IChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAg
IC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgdGhpcyBhdCBhbGwuCiAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgICAgICBib29sIGRpZE9w
dGltaXplID0gZmFsc2U7CiAKICAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29k
ZU9mZnNldCgpKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKQEAg
LTE1MDMsNDMgKzE1NjIsNjkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEoKICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZUdldEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwotICAgICAgICAg
ICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVH
ZXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CisgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoIWRpZE9wdGltaXplKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cg
cGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3
ZQotICAgICAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3
ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QKLSAgICAgICAgICAgIC8v
IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwg
MTAgdGltZXMuIEZvciBjYXNlcwotICAgICAgICAgICAgLy8gd2hlcmUgd2Ugc2VlIG5vbi1pbmRl
eC1pbnRlcmNlcHRpbmcgb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9m
Ci0gICAgICAgICAgICAvLyBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBn
ZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4KLSAgICAgICAgICAgIGlmICgrK2J5VmFsSW5m
by0+c2xvd1BhdGhDb3VudCA+PSAxMAotICAgICAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0
dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBldmVy
IHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCksIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBo
YXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBl
dmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCisgICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQg
IT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8oKSkKKyAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwogICAgIH0KIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSAmJiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7
CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2Ny
aXB0KSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlw
dC50b1Byb3BlcnR5S2V5KGV4ZWMpOwotCiAgICAgICAgIGlmICghc3Vic2NyaXB0LmlzU3RyaW5n
KCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgQVNTRVJUKGV4
ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlW
YWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbFdp
dGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5
VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICB9
CisgICAgfQogCi0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgICAg
IGJvb2wgaGFzUmVzdWx0ID0gYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdCA/
IHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCkpOworICAg
IGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQp
IHsKKyAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdp
dGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAgLy8gbmV2ZXIgbWFrZSB0
aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVy
Y2VwdGluZworICAgICAgICAvLyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29y
dGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUKKyAgICAgICAgLy8gdGhhdCB0aGUg
Z2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQg
ZXZlbiBpZgorICAgICAgICAvLyB0aGUgcmVzdWx0IGlzIEdpdmVVcC4KKyAgICAgICAgaWYgKCsr
YnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwKQorICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7CiAgICAgfQogCisgICAgcmV0dXJu
IG9wdGltaXphdGlvblJlc3VsdDsKK30KKworZXh0ZXJuICJDIiB7CisKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gZ2V0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MgPSBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyk7CisgICAg
aWYgKHRyeUdldEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcykgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKKyAg
ICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCisgICAgICAgIGJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KGV4ZWMtPmNvZGVCbG9jaygpLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihvcGVyYXRpb25H
ZXRCeVZhbEdlbmVyaWMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdl
dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlEZWZhdWx0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDNkODNmNTkwZGNmOTE4MDNhMzQ0OGJhMDgzYjJmOTJi
Y2JlODRmOWIuLjU5MTdlNDdiYzU3MDc3M2JjN2Y1ZmU5NDRmYzM5MDNlMTk3ZWZhNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yNjIsOCArMjYyLDgg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Qo
RXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxF
dmFsKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYTAwY2NiMjVlNTI5
Nzg3OWQyNjM0NTNiNjQ2YmIwZTM3ZDU5NmJlZi4uYmEzN2I0ZDdkZGFhYzg0NzBjNjAxYWJlMDAy
Y2I5Y2FjNzM1ZDg0ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKQEAgLTIwOCwxNiArMjA4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW8KICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAogICAg
IHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMSkpOwotICAgIGlmIChw
cm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgbV92bS0+c3ltYm9sU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgU3ltYm9sOjpvZmZzZXRPZlByaXZhdGVOYW1lKCkpLCByZWdUMyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG1fdm0t
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMykpOwotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBBZGRyZXNzKHJlZ1QzLCBTdHJpbmdJbXBsOjpmbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkpOwotICAg
IH0KLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpKTsKKyAgICBlbWl0SWRlbnRpZmllckNoZWNr
KHJlZ1QxLCByZWdUMywgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLApAQCAtMzA3LDEwICsy
OTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFk
ZEJ5VmFsSW5mbygpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAs
IHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKKyAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdElt
bWVkaWF0ZUludGVnZXIocmVnVDEpOworICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKICAgICAv
LyBTZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9m
aWxlKTsKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7
CiAgICAgCkBAIC0zNDEsNyArMzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAogICAgIExhYmVsIGRvbmUgPSBs
YWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29t
cGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgp
LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zm
c2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSkpOwogfQogCiBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBl
IGluZGV4aW5nU2hhcGUpCkBAIC00MzQsNiArNDI2LDM5IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAorSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6
OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExp
c3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcykKK3sKKyAgICAvLyBiYXNlOiByZWdU
MAorICAgIC8vIHByb3BlcnR5OiByZWdUMQorICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCisKKyAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIHNsb3dDYXNlcy5hcHBl
bmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMSkpOworICAgIGVtaXRJZGVudGlmaWVyQ2hlY2so
cmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CisKKyAgICAvLyBXcml0ZSBi
YXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBi
YXJyaWVyLAorICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKKworICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zm
c2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBEb250U3BpbGwsIG1fY29kZUJs
b2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7CisKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5z
dHViSW5mbygpLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZG9uZUNhc2VzLmFw
cGVuZChqdW1wKCkpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC00NDIsOCArNDY3LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXMKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCiAgICAgCiAgICAgSklUQXJyYXlNb2Rl
IG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CkBAIC00NjYsNyArNDkxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAg
IGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVy
YXRpb25QdXRCeVZhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QwLCByZWdUMSwgcmVnVDIs
IGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpA
QCAtOTg4LDYgKzEwMTMsMjAgQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcikKICNlbmRpZiAvLyBFTkFCTEUoR0dDKQogfQogCit2b2lkIEpJVDo6ZW1pdElkZW50aWZp
ZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAgIGlmIChwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0
cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhjZWxsLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBtX3ZtLT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGNlbGwsIFN5bWJvbDo6b2Zmc2V0T2ZQcml2YXRlTmFtZSgpKSwgc2NyYXRjaCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1
YWwsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgbV92bS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjZWxsLCBKU1N0
cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaCk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdFB0cihaZXJvLCBzY3JhdGNoKSk7CisgICAgICAgIHNsb3dDYXNlcy5hcHBl
bmQoYnJhbmNoVGVzdDMyKFplcm8sIEFkZHJlc3Moc2NyYXRjaCwgU3RyaW5nSW1wbDo6ZmxhZ3NP
ZmZzZXQoKSksIFRydXN0ZWRJbW0zMihTdHJpbmdJbXBsOjpmbGFnSXNBdG9taWMoKSkpKTsKKyAg
ICB9CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHNjcmF0Y2gsIFRy
dXN0ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpKTsKK30KKwogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIg
cmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9kZSkKIHsKICAgICBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2lu
KCkgKyBieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXg7CkBAIC0xMTM5LDYgKzExNzgsMzcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWwoQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWQKICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVu
Y3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJl
Y3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKIH0KIAordm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCit7CisgICAgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlW
YWxJbmZvLT5ieXRlY29kZUluZGV4OworCisgICAgSnVtcExpc3QgZG9uZUNhc2VzOworICAgIEp1
bXBMaXN0IHNsb3dDYXNlczsKKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2VuID0gZW1pdFB1
dEJ5VmFsV2l0aENhY2hlZElkKGN1cnJlbnRJbnN0cnVjdGlvbiwgcHV0S2luZCwgcHJvcGVydHlO
YW1lLCBkb25lQ2FzZXMsIHNsb3dDYXNlcyk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X3ZtLCAqdGhpcywgbV9jb2RlQmxvY2spOworICAgIHBhdGNoQnVmZmVyLmxpbmsoc2xvd0Nhc2Vz
LCBDb2RlTG9jYXRpb25MYWJlbChNYWNyb0Fzc2VtYmxlckNvZGVQdHI6OmNyZWF0ZUZyb21FeGVj
dXRhYmxlQWRkcmVzcyhyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS5sYWJlbEF0T2Zmc2V0KGJ5VmFs
SW5mby0+cmV0dXJuQWRkcmVzc1RvU2xvd1BhdGgpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGRv
bmVDYXNlcywgYnlWYWxJbmZvLT5iYWRUeXBlSnVtcC5sYWJlbEF0T2Zmc2V0KGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXBUb0RvbmUpKTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGNhbGxTaXRlIDogbV9j
YWxscykgeworICAgICAgICBpZiAoY2FsbFNpdGUudG8pCisgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGNhbGxTaXRlLmZyb20sIEZ1bmN0aW9uUHRyKGNhbGxTaXRlLnRvKSk7CisgICAgfQor
ICAgIGdlbi5maW5hbGl6ZShwYXRjaEJ1ZmZlcik7CisKKyAgICBieVZhbEluZm8tPnN0dWJSb3V0
aW5lID0gRklOQUxJWkVfQ09ERV9GT1JfU1RVQigKKyAgICAgICAgbV9jb2RlQmxvY2ssIHBhdGNo
QnVmZmVyLAorICAgICAgICAoIkJhc2VsaW5lIHB1dF9ieV92YWwlcyB3aXRoIGNhY2hlZCBwcm9w
ZXJ0eSBuYW1lICclcycgc3R1YiBmb3IgJXMsIHJldHVybiBwb2ludCAlcCIsIChwdXRLaW5kID09
IERpcmVjdCkgPyAiX2RpcmVjdCIgOiAiIiwgcHJvcGVydHlOYW1lLmltcGwoKS0+dXRmOCgpLmRh
dGEoKSwgdG9DU3RyaW5nKCptX2NvZGVCbG9jaykuZGF0YSgpLCByZXR1cm5BZGRyZXNzLnZhbHVl
KCkpKTsKKyAgICBieVZhbEluZm8tPmNhY2hlZElkID0gcHJvcGVydHlOYW1lOworICAgIGJ5VmFs
SW5mby0+c3R1YkluZm8gPSBnZW4uc3R1YkluZm8oKTsKKworICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoYnlWYWxJ
bmZvLT5ub3RJbmRleEp1bXAsIENvZGVMb2NhdGlvbkxhYmVsKGJ5VmFsSW5mby0+c3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVu
Y3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIocHV0S2luZCA9PSBEaXJlY3QgPyBvcGVy
YXRpb25EaXJlY3RQdXRCeVZhbEdlbmVyaWMgOiBvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsK
K30KKworCiBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdERpcmVjdEFyZ3VtZW50c0dldEJ5VmFsKElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKICAgICBKdW1wTGlzdCBzbG93
Q2FzZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2VzczMyXzY0LmNwcAppbmRleCBhOGQ2OWFjZGNmNjc3NDk0YjhlZTYyZDFlMTJhYjkyZjU4OWNl
MDAwLi5jMThhZjkwMWVmY2FlZjVjMTAyNjViNjlkYWZmOTYwODE1NjVkNDNhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
QEAgLTI0OCwxNiArMjQ4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZh
bFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW8KICAgICAvLyBzY3Jh
dGNoOiByZWdUNAogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJl
Z1QzKSk7Ci0gICAgaWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIHNsb3dD
YXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBtX3ZtLT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0KCkpKTsK
LSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBTeW1ib2w6Om9mZnNldE9mUHJpdmF0ZU5h
bWUoKSksIHJlZ1Q0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJy
YW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVJ
RE9mZnNldCgpKSwgbV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAgIGxvYWRQ
dHIoQWRkcmVzcyhyZWdUMiwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlZ1Q0KTsKLSAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Q0KSk7Ci0gICAg
ICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVzdDMyKFplcm8sIEFkZHJlc3MocmVnVDQsIFN0
cmluZ0ltcGw6OmZsYWdzT2Zmc2V0KCkpLCBUcnVzdGVkSW1tMzIoU3RyaW5nSW1wbDo6ZmxhZ0lz
QXRvbWljKCkpKSk7Ci0gICAgfQotICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVx
dWFsLCByZWdUNCwgVHJ1c3RlZEltbVB0cihwcm9wZXJ0eU5hbWUuaW1wbCgpKSkpOworICAgIGVt
aXRJZGVudGlmaWVyQ2hlY2socmVnVDIsIHJlZ1Q0LCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENv
ZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJz
KCksCkBAIC0zMjIsOCArMzEzLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCBy
ZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwogICAgIAotICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSkpOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7Cisg
ICAgUGF0Y2hhYmxlSnVtcCBub3RJbmRleCA9IHBhdGNoYWJsZUJyYW5jaDMyKE5vdEVxdWFsLCBy
ZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7CisgICAgYWRkU2xvd0Nhc2Uo
bm90SW5kZXgpOwogICAgIGVtaXRBcnJheVByb2ZpbGluZ1NpdGVXaXRoQ2VsbChyZWdUMCwgcmVn
VDEsIHByb2ZpbGUpOwogICAgIGFuZDMyKFRydXN0ZWRJbW0zMihJbmRleGluZ1NoYXBlTWFzayks
IHJlZ1QxKTsKICAgICAKQEAgLTM1NCw3ICszNDYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
YnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgCiAgICAgTGFiZWwg
ZG9uZSA9IGxhYmVsKCk7CiAgICAgCi0gICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQo
QnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBQYXRjaGFi
bGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUpKTsKKyAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0
ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lKSk7CiB9
CiAKIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdTaGFwZSkKQEAgLTQ1Myw2ICs0NDUsNDIgQEAgSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQYXQKICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCitKSVRQdXRCeUlkR2VuZXJh
dG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
LCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAgIC8vIGJh
c2U6IHRhZyhyZWdUMSksIHBheWxvYWQocmVnVDApCisgICAgLy8gcHJvcGVydHk6IHRhZyhyZWdU
MyksIHBheWxvYWQocmVnVDIpCisKKyAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKKworICAgIHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMykp
OworICAgIGVtaXRJZGVudGlmaWVyQ2hlY2socmVnVDIsIHJlZ1QyLCBwcm9wZXJ0eU5hbWUsIHNs
b3dDYXNlcyk7CisKKyAgICAvLyBXcml0ZSBiYXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBT
byBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBiYXJyaWVyLAorICAgIC8vIHJlbG9hZCB0aGUgcmVn
aXN0ZXJzLgorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlckJh
c2UpOworICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CisgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QzLCByZWdUMik7CisKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbigKKyAgICAg
ICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIFJlZ2lzdGVyU2V0
OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIHJlZ1QxLCBEb250U3BpbGwsIG1fY29k
ZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgq
dGhpcyk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgTGFiZWwgY29sZFBh
dGhCZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7CisK
KyAgICAvLyBKSVRQdXRCeUlkR2VuZXJhdG9yIG9ubHkgcHJlc2VydmUgdGhlIHZhbHVlIGFuZCB0
aGUgYmFzZSdzIHBheWxvYWQsIHdlIGhhdmUgdG8gcmVsb2FkIHRoZSB0YWcuCisgICAgZW1pdExv
YWRUYWcoYmFzZSwgcmVnVDEpOworCisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4u
c2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgcmVnVDMsIHJlZ1QyLCByZWdUMSwg
cmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisg
ICAgcmV0dXJuIGdlbjsKK30KKwogdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CkBAIC00NjEsOCArNDg5LDggQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBB
cnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2Zp
bGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21f
YnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCi0gICAgbGlua1Nsb3dDYXNl
KGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtTbG93Q2FzZUlmTm90SlND
ZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBi
YXNlIG5vdCBhcnJheSBjaGVjawogICAgIAogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3Nl
QXJyYXlNb2RlKHByb2ZpbGUpOwpAQCAtNTAwLDE0ICs1MjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXMKICAgICBhZGRDYWxsQXJndW1lbnQocmVnVDEpOwogICAgIGFkZENhbGxBcmd1bWVu
dChyZWdUMCk7CiAgICAgYWRkQ2FsbEFyZ3VtZW50KFRydXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSk7
Ci0gICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0RpcmVjdCA/
IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsIDogb3BlcmF0aW9uUHV0QnlWYWwpOworICAgIENhbGwg
Y2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soaXNEaXJlY3QgPyBvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSk7CiAjZWxz
ZQogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24gYmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVj
ZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAgLy8gU3dhcHBpbmcgc2hvdWxkbid0IGhh
cHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDIsIHJlZ1Qx
KTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGly
ZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVyYXRpb25QdXRCeVZhbCwgcmVnVDIs
IHJlZ1QxLCByZWdUMywgcmVnVDAsIHJlZ1Q1LCByZWdUNCwgYnlWYWxJbmZvKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QyLCByZWdUMSwgcmVnVDMs
IHJlZ1QwLCByZWdUNSwgcmVnVDQsIGJ5VmFsSW5mbyk7CiAjZW5kaWYKIAogICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0g
c2xvd1BhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3B1dC1ieS12YWwtd2l0aC1zdHJpbmctYnJlYWsuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctYnJlYWsuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NWVlNjRjYWZlZWJjZmY3ODQzYWM1N2Q5MTI1NGViNjNiNWJiZDYzMQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy1icmVhay5qcwpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWws
IGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2ln
bihvYmplY3QsIG5hbWUsIHZhbHVlKQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQor
bm9JbmxpbmUoYXNzaWduKTsKKwordmFyIHN0cmluZyA9ICdoZWxsbyc7Citmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0ID0ge307CisgICAgaWYgKGkgPT09
IDEwMDAwKSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIDQyLCA0Mik7CisgICAgICAgIHNob3Vs
ZEJlKG9iamVjdFs0Ml0sIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0LmhlbGxvLCB1bmRl
ZmluZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIHN0cmluZywgNDIp
OworICAgICAgICBzaG91bGRCZShvYmplY3Rbc3RyaW5nXSwgNDIpOworICAgIH0KK30KKwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLWdlbmVyYXRlZC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmF0ZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzFmNDNh
ZDNiMDUyZWM1MmZjZDU4M2Y5NzY5NDA1YzUxMDQyNTFhMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1n
ZW5lcmF0ZWQuanMKQEAgLTAsMCArMSwzNCBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBl
eHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiBnZW4xKHZh
bHVlKQoreworICAgIHJldHVybiAnaGUnICsgdmFsdWU7Cit9Citub0lubGluZShnZW4xKTsKKwor
ZnVuY3Rpb24gZ2VuMih2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUgKyAnbGQnOworfQorbm9J
bmxpbmUoZ2VuMik7CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQorewor
ICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIG9iamVjdCA9IHt9OworICAgIGlm
IChpICUgMiA9PT0gMCkgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBnZW4xKCdsbG8nKSwgNDIp
OworICAgICAgICBzaG91bGRCZShvYmplY3QuaGVsbG8sIDQyKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBhc3NpZ24ob2JqZWN0LCBnZW4yKCd3b3InKSwgNDIpOworICAgICAgICBzaG91bGRCZShv
YmplY3Qud29ybGQsIDQyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJpYy5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1n
ZW5lcmljLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2ZmY4MTE2MDQ2MjllNmU3YjZjOGE4Njg4NjI4OGI2Y2Mx
OTE5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJpYy5qcwpAQCAtMCwwICsxLDI1IEBACitm
dW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT09
IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVh
bCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQoreworICAgIG9i
amVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwordmFyIHN0cmluZyA9
ICdoZWxsbyc7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2YXIgb2Jq
ZWN0ID0ge307CisgICAgaWYgKGkgPT09IDEwMDAwKSB7CisgICAgICAgIGFzc2lnbihvYmplY3Qs
ICd0ZXN0aW5nJywgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QudGVzdGluZywgNDIpOwor
ICAgICAgICBzaG91bGRCZShvYmplY3QuaGVsbG8sIHVuZGVmaW5lZCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgYXNzaWduKG9iamVjdCwgc3RyaW5nLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9i
amVjdFtzdHJpbmddLCA0Mik7CisgICAgfQorfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtYnJlYWsuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wt
YnJlYWsuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU0ODUxMTE0NDUzYTQ0YTAyZTg4NTg1NTRiZjE2ZjNlNDdh
NTcwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVhay5qcwpAQCAtMCwwICsxLDI1IEBACitmdW5j
dGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT09IGV4
cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7
Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQoreworICAgIG9iamVj
dFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwordmFyIGtleSA9IFN5bWJv
bCgpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMTsgKytpKSB7CisgICAgdmFyIG9iamVjdCA9
IHt9OworICAgIGlmIChpID09PSAxMDAwMCkgeworICAgICAgICB2YXIga2V5MiA9IDQyOworICAg
ICAgICBhc3NpZ24ob2JqZWN0LCBrZXkyLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdFtr
ZXkyXSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rba2V5XSwgdW5kZWZpbmVkKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBrZXksIDQyKTsKKyAgICAgICAgc2hv
dWxkQmUob2JqZWN0W2tleV0sIDQyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtZ2VuZXJpYy5q
cyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5
bWJvbC1nZW5lcmljLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmYzRkMThkNDAxZmE3MGYwMWM5ODg4MTA4M2Nl
MDBiMzMyZTc1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtZ2VuZXJpYy5qcwpAQCAtMCwwICsxLDI1
IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1
YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyAr
IGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQorewor
ICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwordmFyIGtl
eSA9IFN5bWJvbCgpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMTsgKytpKSB7CisgICAgdmFy
IG9iamVjdCA9IHt9OworICAgIGlmIChpID09PSAxMDAwMCkgeworICAgICAgICB2YXIga2V5MiA9
IFN5bWJvbCgpOworICAgICAgICBhc3NpZ24ob2JqZWN0LCBrZXkyLCA0Mik7CisgICAgICAgIHNo
b3VsZEJlKG9iamVjdFtrZXkyXSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rba2V5XSwg
dW5kZWZpbmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBrZXksIDQy
KTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0W2tleV0sIDQyKTsKKyAgICB9Cit9CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MWQ1MGE4MzdmYzYxZGQ4MDcwOTZkODIxMGIwZWRmZmUxYzVkMGM4Mi4uOTRmYTcwMGYyYjc5YTgx
MWM0ZGNlZTIyOWE1ZGFiN2U1NDViNTdhMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE1LTA4
LTA3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIElu
dHJvZHVjZSBwdXRfYnlfaWQgbGlrZSBJQyBpbnRvIHB1dF9ieV92YWwgd2hlbiB0aGUgZ2l2ZW4g
bmFtZSBpcyBTdHJpbmcgb3IgU3ltYm9sCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDc3NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgc3ludGhldGljIHRlc3RzIGZvciBwdXQtYnktdmFsLiBKdXN0
IG1ha2UgcHV0LWJ5LWlkIHRlc3RzIHVzaW5nIHN5bWJvbCAvIHN0cmluZy4KKworICAgICAgICAq
IGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1v
ZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtcHV0
LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRp
LXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5z
aXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2lubGluZWQt
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13
aXRoLXN0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3BvbHltb3JwaGlj
LXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJl
cGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xp
Z2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRtbDogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24u
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12
YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorICAgICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiBqcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0
LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoZnUpOgorICAg
ICAgICAoYmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmVkLXB1
dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAgIChmb28p
OgorICAgICAgICAoRm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxp
bmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorICAgICAgICAoRm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1h
bmQtdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qczogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmlu
Zy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiBq
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5k
LXRyYW5zaXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanM6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wu
anM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMTUtMDgtMDcg
IE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFj
XSBUZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xk
LXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10
by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOWQzNzZmNzYy
NzlmOGMzNmM2OWYyMGEzMzUxNzhmYTAwNjc3Y2I3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0
LWJ5LW9mZnNldC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2ZvbGQt
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0CisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0
aS1wdXQtYnktb2Zmc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZGQ1MjM1NzBlNjRhZTliM2MzYTM0MWIwNGJkZjZlN2YzM2NiOTA2MQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRv
LW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1z
dHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1i
eS1vZmZzZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxN2RjZTNiNGYyNzQ2YjQ0ODAzMjk4
MzkxNzQ0NDgyYWU5YTJiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZz
ZXQuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTkyNzcwODQzYmRi
YWQwYzYzZWI2OWVjNmQ0NGNkYWIxMzE0NjVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5
LW9mZnNldC5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0
aS1wdXQtYnktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5n
LXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVk
LXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOTEzYmU2ZjJkMDgwNjY3Y2NhOTkzMjkwYzcyMTNiNmI2OWRkMDE5OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9p
bmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bi5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1z
dHJpbmctdHJhbnNpdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5MDMyNmE0MzRkOTZjZDQwMDY5Y2Yz
NGI3ZTQzZDQ1NzIzOGY3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmh0bWwKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFu
c2l0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzRkNWY1YmRjN2EzMGQwNGI3YzQxYjM0
NjFlM2MwM2NlZTlhYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC10cmFuc2l0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWFkZTRlOWY4NTQ0MDk2YTUyMzA4MWUyYzY1NTQ0M2Y4Njk1NDAyMwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLXRyYW5zaXRpb24uaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQ
VUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1z
eW1ib2wtdHJhbnNpdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1z
dHJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDczYzE5OTMw
M2NlMzQ3NDJkYTg1ZTgxOTU5YjA4N2E5MDM3ZTU1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZh
bC13aXRoLXN0cmluZworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhp
Yy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Bv
bHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NDk5MjU4
ZjJlMmVkZWQxZWRmNDNmMGEzZDMyNzcwNjhlMjAzMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0
bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mMDg0NTUxNDJlMWFhYTljZDUxN2UzZTc5ZTNiMmRlZWY2NTRk
M2VkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhp
Yy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitK
U1JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbAorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0
bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1z
eW1ib2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzJjZTgwN2UxNzc5ZTA5ZmJhZjFiN2M2NzEwYjY2ZmE0
Y2ZkNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9y
cGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5n
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzdlMjYxYjc3MmJlMDU4NTc0NGRmYjRiNDFjYmU3
MTUyOGUzYzFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQt
YnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxh
Y2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlMjQ5MzM0NWE4NTA2
OTU0Y2JiODM3MTZhODk0ZTI5ZTBhMmI3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlv
bi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3B1dC1ieS12YWwtd2l0
aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uaHRt
bCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNl
LWFuZC10cmFuc2l0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGViYjFmNzM2NzFiODRhN2ZjYTU4M2E5
Yzc4NTI1MjlkNzFmODg3MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWwKQEAg
LTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xp
Z2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZDhmZTIxZTg0ZGMw
M2M5ZjA3MjQwNjIxZjAxOTY2ZmRkMjhiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRtbCBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5
bW9ycGhpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmM2RkN2Y3MmRkOWE2MTY1MDcwODE3MjJiYTdlNWU4
ODAyZWI3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1i
eS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRtbApAQCAtMCwwICsxLDEy
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXQt
YnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWE3YmI5ZTJkMDViNWQwNTM1M2I2MmQ3Yzlj
MWE3YzI2NTMyNGQzNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWQwNWMyNWNhNjFmOWE2MTFmYTVmNmIwNmU2MjUzMmY2ZTE3MmMzZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3B1dC1ieS12YWwtd2l0
aC1zeW1ib2wKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9u
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTNiOTQ1ODU2ZjRiMWY4ZDlmZjEzMjFmYWU3NmI1
MWQzYmNlNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQt
YnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2Ut
YW5kLXRyYW5zaXRpb24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmM3NWYyNjYwOGRlOTUxMmE4ZjRiYWMzMzYzMWFlNWNmNzBhOWU5ZmEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0
aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1dC1ieS12YWwt
d2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwt
d2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGlj
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmM1ZmNhNTc5NDUyZGQ0MDAyZGRlZGZjZmQ1NDE2
NGQ0YTM3M2ZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQt
YnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1w
b2x5bW9ycGhpYworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45ZDA0NjU3MjUyNTAxNDA2ZjI3YzA3MjRhOWRiZDQwYWU1YWU4ODJjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXNsaWdodGx5LXBvbHltb3JwaGljLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wu
aHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjNkMTI4YmNjZDRiZDQ3NDRjZGNhMTdjYmVhMGM1YjM1NDBhNTA4ZTkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1z
eW1ib2wuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zm
c2V0LmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9sZC1wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI5
YWRiMjk1Y2NlNGI0ZDczNzQ3ZTJiMjk1MjcwNDVkMzIxOWVmNgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRo
LXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzCkBAIC0wLDAgKzEsNDcgQEAKK3ZhciBl
ID0gImUiLCBmID0gImYiLCBnID0gImciOworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvW2ZdID0g
MTsKK30KKworZnVuY3Rpb24gZnUobykgeworICAgIG9bZV0gPSAyOworfQorCitmdW5jdGlvbiBi
YXIoZnVuYywgbykgeworICAgIGZ1bmMobyk7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBvWyJpIiArIGldID0gNDI7CisgICAgZm9v
KG8pOworICAgIGZ1KHtbZl06MSwgW2VdOjJ9KTsKKyAgICBmdSh7W2VdOjEsIFtmXToyLCBbZ106
M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIGJhcihm
b28sIHtbZl06MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7CisgICAgYmFyKGZ1
bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rpb24oZnVuYywg
bywgcCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBmdShvKTsKKyAgICAgICAgYmFy
KGZ1bmMsIG8pOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAg
IHAgPSB0bXA7CisgICAgfQorICAgIGlmIChvW2VdICE9IDIpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlIGluIG8uZTogIiArIG9bZV07CisgICAgaWYgKG9bZl0gIT0gMSkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5mOiAiICsgb1tmXTsKKyAgICBpZiAocFtl
XSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmU6ICIgKyBwW2Vd
OworICAgIGlmIChwW2ZdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGlu
IHAuZjogIiArIHBbZl07Cit9KShmb28sIHtbZl06NDIsIFtlXToyM30sIHtbZV06MjMsIFtmXTo0
MiwgW2ddOjEwMH0pOworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNl
dC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhlMDI2
MTUzYTk1ZDhiYmRhYjI0NjBmMDMwZDA5YTAzOWU3ZTE4ODQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1z
eW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcwpAQCAtMCwwICsxLDQ3IEBACit2YXIgZSA9
IFN5bWJvbCgpLCBmID0gU3ltYm9sKCksIGcgPSBTeW1ib2woKTsKK2Z1bmN0aW9uIGZvbyhvKSB7
CisgICAgb1tmXSA9IDE7Cit9CisKK2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICBvW2VdID0gMjsKK30K
KworZnVuY3Rpb24gYmFyKGZ1bmMsIG8pIHsKKyAgICBmdW5jKG8pOworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIHZhciBvID0ge307CisgICAgb1siaSIgKyBpXSA9
IDQyOworICAgIGZvbyhvKTsKKyAgICBmdSh7W2ZdOjEsIFtlXToyfSk7CisgICAgZnUoe1tlXTox
LCBbZl06MiwgW2ddOjN9KTsKK30KKyAgICAKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kp
IHsKKyAgICBiYXIoZm9vLCB7W2ZdOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7IH0sIG51bGwp
OworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOworfQorICAgIAorKGZ1
bmN0aW9uKGZ1bmMsIG8sIHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2YXIgbiA9IDEw
MDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZnUobyk7
CisgICAgICAgIGJhcihmdW5jLCBvKTsKKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8g
PSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAob1tlXSAhPSAyKQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIgKyBvW2VdOworICAgIGlmIChvW2Zd
ICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZjogIiArIG9bZl07
CisgICAgaWYgKHBbZV0gIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4g
cC5lOiAiICsgcFtlXTsKKyAgICBpZiAocFtmXSAhPSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZSBpbiBwLmY6ICIgKyBwW2ZdOworfSkoZm9vLCB7W2ZdOjQyLCBbZV06MjN9LCB7
W2VdOjIzLCBbZl06NDIsIFtnXToxMDB9KTsKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5z
aXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmVkLXB1
dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43YmY0MmVmNDll
ZDE4ODAyM2ExNDQ1NmFhODViMTQxZjYzOTM5YWUxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXRyYW5zaXRpb24uanMKQEAgLTAsMCArMSw0MCBAQAordmFyIHggPSAieCI7Cit2YXIgeSA9
ICJ5IjsKK3ZhciBhID0gImEiOwordmFyIGIgPSAiYiI7Cit2YXIgYyA9ICJjIjsKK3ZhciBkID0g
ImQiOwordmFyIGUgPSAiZSI7Cit2YXIgZiA9ICJmIjsKK3ZhciBnID0gImciOwordmFyIGggPSAi
aCI7Cit2YXIgaSA9ICJpIjsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvW3hdID0gMTsKKyAg
ICBvW3ldID0gMjsKKyAgICBvW2FdID0gMzsKKyAgICBvW2JdID0gNDsKKyAgICBvW2NdID0gNTsK
KyAgICBvW2RdID0gNjsKKyAgICBvW2VdID0gNzsKKyAgICBvW2ZdID0gODsKKyAgICBvW2ddID0g
OTsKKyAgICBvW2hdID0gMTA7CisgICAgb1tpXSA9IDExOworfQorCitmdW5jdGlvbiBGb28oKSB7
CisgICAgZm9vKHRoaXMpOworfQorCit2YXIgcmVzdWx0ID0gMDsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDA7ICsraSkgeworICAgIGZvbyh7W2ZdOjQyfSk7CisgICAgcmVzdWx0ICs9IChu
ZXcgRm9vKCkpW3hdOworfQorCitpZiAocmVzdWx0ICE9IDEwMDAwMCkKKyAgICB0aHJvdyAiQmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24u
anMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzcxZTdiMzA5Njk0N2Iz
OWY0ODI4NDlhNmQ0MWZiOTYyNmU1MGJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRy
YW5zaXRpb24uanMKQEAgLTAsMCArMSw0MCBAQAordmFyIHggPSBTeW1ib2woKTsKK3ZhciB5ID0g
U3ltYm9sKCk7Cit2YXIgYSA9IFN5bWJvbCgpOwordmFyIGIgPSBTeW1ib2woKTsKK3ZhciBjID0g
U3ltYm9sKCk7Cit2YXIgZCA9IFN5bWJvbCgpOwordmFyIGUgPSBTeW1ib2woKTsKK3ZhciBmID0g
U3ltYm9sKCk7Cit2YXIgZyA9IFN5bWJvbCgpOwordmFyIGggPSBTeW1ib2woKTsKK3ZhciBpID0g
U3ltYm9sKCk7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgb1t4XSA9IDE7CisgICAgb1t5XSA9
IDI7CisgICAgb1thXSA9IDM7CisgICAgb1tiXSA9IDQ7CisgICAgb1tjXSA9IDU7CisgICAgb1tk
XSA9IDY7CisgICAgb1tlXSA9IDc7CisgICAgb1tmXSA9IDg7CisgICAgb1tnXSA9IDk7CisgICAg
b1toXSA9IDEwOworICAgIG9baV0gPSAxMTsKK30KKworZnVuY3Rpb24gRm9vKCkgeworICAgIGZv
byh0aGlzKTsKK30KKwordmFyIHJlc3VsdCA9IDA7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDAwOyArK2kpIHsKKyAgICBmb28oe1tmXTo0Mn0pOworICAgIHJlc3VsdCArPSAobmV3IEZvbygp
KVt4XTsKK30KKworaWYgKHJlc3VsdCAhPSAxMDAwMDApCisgICAgdGhyb3cgIkJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuanMgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmVjMjJlOGMwMGRjYzk1MzZmNWU4Njc3N2ZjNmE1ZjgxMGJjZWY3
MWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzCkBAIC0wLDAgKzEsMjYgQEAK
K3ZhciBmID0gImYiLCBnID0gImciLCBoID0gImgiOworCitmdW5jdGlvbiBmb28obykgeworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIG9bZl0gPSAob1tmXSB8IDAp
ICsgNDI7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
OyArK2kpIHsKKyAgICB2YXIgb2JqZWN0OworICAgIGlmICgoaSAlIDMpID09IDApCisgICAgICAg
IG9iamVjdCA9IHtbZ106M307CisgICAgZWxzZSBpZiAoKGkgJSAzKSA9PSAxKQorICAgICAgICBv
YmplY3QgPSB7W2ZdOjEsIFtnXToyfTsKKyAgICBlbHNlIGlmICgoaSAlIDMpID09IDIpCisgICAg
ICAgIG9iamVjdCA9IHtbZ106MSwgW2ZdOjJ9OworICAgIGZvbyhvYmplY3QpOworICAgIGlmIChv
YmplY3RbZl0gIT0gNDIgKiAxMDAgKyAoaSAlIDMpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyBvYmplY3RbZl07Cit9CisKK3ZhciByID0g
e1tnXTozLCBbaF06NCwgW2ZdOjV9OworZm9vKHIpOworaWYgKHJbZl0gIT0gNSArIDQyICogMTAw
KQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByW2ZdOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTcy
ZDBlODkwMzIzZTdhNjIzYWVjZWEwNTQ0YTljOTEwMTI4ZDRjMgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wuanMKQEAgLTAsMCArMSwyNiBAQAordmFyIGYgPSBTeW1ib2woKSwgZyA9
IFN5bWJvbCgpLCBoID0gU3ltYm9sKCk7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgb1tmXSA9IChvW2ZdIHwgMCkgKyA0MjsK
K30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkg
eworICAgIHZhciBvYmplY3Q7CisgICAgaWYgKChpICUgMykgPT0gMCkKKyAgICAgICAgb2JqZWN0
ID0ge1tnXTozfTsKKyAgICBlbHNlIGlmICgoaSAlIDMpID09IDEpCisgICAgICAgIG9iamVjdCA9
IHtbZl06MSwgW2ddOjJ9OworICAgIGVsc2UgaWYgKChpICUgMykgPT0gMikKKyAgICAgICAgb2Jq
ZWN0ID0ge1tnXToxLCBbZl06Mn07CisgICAgZm9vKG9iamVjdCk7CisgICAgaWYgKG9iamVjdFtm
XSAhPSA0MiAqIDEwMCArIChpICUgMykpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCBmb3IgaSA9ICIgKyBpICsgIjogIiArIG9iamVjdFtmXTsKK30KKwordmFyIHIgPSB7W2ddOjMs
IFtoXTo0LCBbZl06NX07Citmb28ocik7CitpZiAocltmXSAhPSA1ICsgNDIgKiAxMDApCisgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJbZl07CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5n
LXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uN2IyMzM3Yzk0M2Q0YmNhMTY4ZDk0NjEwMDA3YjFkODA4YzhlZDlhYwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1i
eS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcwpAQCAtMCwwICsxLDE0
IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGYgPSAiZiIsIGcgPSAiZyI7CisgICAgdmFyIG87
CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7
CisgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICAgIG8gPSB7W2ZdOiAxfTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbyA9IHtbZl06IDEsIFtnXTogMn07CisgICAgICAgIG9bZ10gPSBp
OworICAgIH0KKyAgICBpZiAob1tnXSAhPSBuIC0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWUgb2Ygby5nOiAiICsgb1tnXTsKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5
LXBvbHltb3JwaGljLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0
LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
YWNjNDFkZGU0OGQxOGE3ZjcwOTI0MTQ5ZmQwNTIyNWI5ZjM4YTY5Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcwpAQCAtMCwwICsxLDE2IEBACisoZnVuY3Rpb24o
KSB7CisgICAgdmFyIGYgPSAiZiIsIGcgPSAiZyI7CisgICAgdmFyIG8gPSB7W2ZdOiAxLCBbZ106
IDJ9OworICAgIHZhciBwID0ge1tmXTogMX07CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIG9bZl0gPSBpOworICAgICAgICB2
YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAg
IGlmIChvW2ZdICE9IG4gLSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBv
LmY6ICIgKyBvW2ZdOworICAgIGlmIChwW2ZdICE9IG4gLSAxKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IHZhZCB2YWx1ZSBvZiBwLmY6ICIgKyBwW2ZdOworfSkoKTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcuanMg
Yi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY2M2ZhMTAwNGQ1ZjkxYmNkZWM5OGZlYWQ0MmU3ZDRjNWFmMGI1
MjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzCkBAIC0wLDAgKzEsMjAgQEAKK3ZhciBmID0gImYi
OworCitmdW5jdGlvbiBmb28obykgeworICAgIG9bZl0gPSA0MjsKK30KKworZnVuY3Rpb24gYmFy
KG8pIHsKKyAgICBvW2ZdID0gODQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsg
KytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBmb28obyk7CisgICAgaWYgKG9bZl0gIT0gNDIp
CisgICAgICAgIHRocm93ICJFcnJvcjogZXhwZWN0ZWQgNDIsIGdvdCAiICsgb1tmXTsKKyAgICBi
YXIobykKKyAgICBpZiAob1tmXSAhPSA4NCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBleHBlY3Rl
ZCA4NCwgZ290ICIgKyBvW2ZdOworfQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5z
aXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2E2YTIz
YmI5ODM3MDJhMzA4MDU2OTY5MWQyY2IxZTlmMDc3NmY3MAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wt
cmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcwpAQCAtMCwwICsxLDE0IEBACisoZnVuY3Rpb24oKSB7
CisgICAgdmFyIGYgPSBTeW1ib2woKSwgZyA9IFN5bWJvbCgpOworICAgIHZhciBvOworICAgIHZh
ciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAg
ICBpZiAoaSAmIDEpCisgICAgICAgICAgICBvID0ge1tmXTogMX07CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG8gPSB7W2ZdOiAxLCBbZ106IDJ9OworICAgICAgICBvW2ddID0gaTsKKyAgICB9
CisgICAgaWYgKG9bZ10gIT0gbiAtIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
IG9mIG8uZzogIiArIG9bZ107Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9y
cGhpYy5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwt
d2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWU1MGQ5YTUw
ZjJiNDZmNWE2MjM1MWEwNDk2MTI4NGEyZWNkNDZkMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xp
Z2h0bHktcG9seW1vcnBoaWMuanMKQEAgLTAsMCArMSwxNiBAQAorKGZ1bmN0aW9uKCkgeworICAg
IHZhciBmID0gU3ltYm9sKCksIGcgPSBTeW1ib2woKTsKKyAgICB2YXIgbyA9IHtbZl06IDEsIFtn
XTogMn07CisgICAgdmFyIHAgPSB7W2ZdOiAxfTsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgb1tmXSA9IGk7CisgICAgICAg
IHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9Cisg
ICAgaWYgKG9bZl0gIT0gbiAtIDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9m
IG8uZjogIiArIG9bZl07CisgICAgaWYgKHBbZl0gIT0gbiAtIDEpCisgICAgICAgIHRocm93ICJF
cnJvcjogdmFkIHZhbHVlIG9mIHAuZjogIiArIHBbZl07Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5q
cyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1z
eW1ib2wuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU4OGJhNzhkOGZjZmJhZmQ5OTEzMzU3NzA1YzQ2YzQ3NzBk
NWZlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKQEAgLTAsMCArMSwyMCBAQAordmFyIGYgPSBT
eW1ib2woIkNvY29hIik7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgb1tmXSA9IDQyOworfQor
CitmdW5jdGlvbiBiYXIobykgeworICAgIG9bZl0gPSA4NDsKK30KKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IHt9OworICAgIGZvbyhvKTsKKyAgICBp
ZiAob1tmXSAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBleHBlY3RlZCA0MiwgZ290ICIg
KyBvW2ZdOworICAgIGJhcihvKQorICAgIGlmIChvW2ZdICE9IDg0KQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGV4cGVjdGVkIDg0LCBnb3QgIiArIG9bZl07Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258603</attachid>
            <date>2015-08-09 19:10:14 -0700</date>
            <delta_ts>2015-08-11 18:48:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147760-20150809190959.patch</filename>
            <type>text/plain</type>
            <size>84936</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MzM5MTdmZmFlOWI0YzZiZDU0NDk0MGRjNjdiMzZmYTgzMDQ4NTU3Li4yZmRkNjVjMTQ0OTIzNWQy
MmRkOGZhYjNhNzBmYjA5N2ZlY2ZmZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxNS0wOC0wOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgcHV0X2J5X2lkIGxpa2UgSUMgaW50byBwdXRfYnlf
dmFsIHdoZW4gdGhlIGdpdmVuIG5hbWUgaXMgU3RyaW5nIG9yIFN5bWJvbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NzYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHB1dF9i
eV9pZCBJQyB0byBwdXRfYnlfdmFsIGJ5IGNhY2hpbmcgdGhlIG9uZSBjYW5kaWRhdGUgaWQsCisg
ICAgICAgIGl0IGlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSBnZXRfYnlfdmFsIElDIGV4dGVuc2lv
bi4KKyAgICAgICAgSXQgd2lsbCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiBFUzYgU3ltYm9scyBhbmQg
RVM2IGNvbXB1dGVkIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBsaXRlcmFscy4KKworICAgICAg
ICBJbiB0aGlzIHBhdGNoLCB3ZSBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQ2hlY2tJZGVudCBhbmQg
UHV0QnlJZCAvIFB1dEJ5VmFsIGluIERGRywKKyAgICAgICAgc28gdGhpcyBwYXRjaCBkb2VzIG5v
dCBjaGFuZ2UgRlRMIGJlY2F1c2UgdGhlIGFib3ZlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc3Vw
cG9ydGVkIGluIEZUTC4KKworICAgICAgICBBbmQgdGhpcyBwYXRjaCBhbHNvIGluY2x1ZGVzIHJl
ZmFjdG9yaW5nIHRvIGxldmVyYWdlIGJ5VmFsSW5mby0+c2xvd1BhdGhDb3VudCBpbiB0aGUgY2Fj
aGVkIElkIHBhdGguCisKKyAgICAgICAgUGVyZm9ybWFuY2UgcmVzdWx0cyByZXBvcnQgdGhlcmUn
cyBubyByZWdyZXNzaW9uIGluIHRoZSBleGlzdGluZyB0ZXN0cy4gQW5kIGluIHRoZSBzeW50aGV0
aWMKKyAgICAgICAgYmVuY2htYXJrcyBjcmVhdGVkIGJ5IG1vZGlmeWluZyBwdXQtYnktaWQgdG8g
cHV0LWJ5LXZhbCwgd2UgY2FuIHNlZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQorICAgICAgICBp
bXByb3ZlbWVudHMgdXAgdG8gMTMuOXguCisKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdldEJ5VmFs
T3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0QnlWYWxX
aXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
SWRlbnRpZmllckNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctYnJlYWsuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoYXNzaWdu
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmF0
ZWQuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoZ2VuMSk6CisgICAg
ICAgIChnZW4yKToKKyAgICAgICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1
dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJpYy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRC
ZSk6CisgICAgICAgIChhc3NpZ24pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLWJyZWFrLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAg
ICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1i
b2wtZ2VuZXJpYy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChhc3Np
Z24pOgorCiAyMDE1LTA4LTA3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgQnVpbGQgbW9yZSB0ZXN0aW5nIGJpbmFyaWVzIHdpdGggQ01ha2Ug
b24gV2luZG93cwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCmluZGV4IGNjNWRhM2IxOWI3OWU3ZjE2ZjY5MTY5NzEwNjMzZWZkNzFlNGYxNDcu
LmJmYTI5ZTQyMWUwNmUxNjFiZWQ3MzNjZTJlNjQ3MWIyMmRhMWFlMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKQEAgLTEzNCw2ICsx
MzQsMTMgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9j
ayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9NYXAmIG0KIH0KIAogI2lmIEVOQUJMRShKSVQpCitQ
dXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpCit7CisgICAgcmV0dXJuIGNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAg
bG9ja2VyLCBiYXNlbGluZUJsb2NrLCBzdHViSW5mbywgdWlkLAorICAgICAgICBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YShsb2NrZXIsIGJhc2VsaW5lQmxvY2ssIGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCkpOworfQorCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mbygKICAgICBjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIs
IENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAog
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEg
Y2FsbEV4aXRTaXRlRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFN0YXR1cy5oCmluZGV4IDY1MmNjYzE4YTAyZmIzOTEzZTU2YTlhMGEyYThiNTQ1MTVkOTkw
NDQuLmIwNDczNDcyYTcxODZmN2M1NWMwYWEwNjJjMWE4Y2NiMTc3NzFiODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApAQCAtNzQsNiArNzQs
MTAgQEAgY2xhc3MgUHV0QnlJZFN0YXR1cyB7CiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29t
cHV0ZUZvcihKU0dsb2JhbE9iamVjdCosIGNvbnN0IFN0cnVjdHVyZVNldCYsIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQsIGJvb2wgaXNEaXJlY3QpOwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkU3Rh
dHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Js
b2NrLCBTdHViSW5mb01hcCYgYmFzZWxpbmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENvZGVP
cmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCisjaWYgRU5BQkxFKEpJVCkKKyAgICBz
dGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJ
VExvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBD
b2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyNlbmRpZgogICAgIAogICAgIFN0
YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQogICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAyNjhhNzU3NmJj
MzY2NzI2YTA2Yzg4YjFmYzBiZTM0M2VmYzBlN2MzLi43OTRiM2IwNDg3MjU2M2I2ZGVkNWY2MWE5
ZjQ1MWRlMjk2M2Y5MzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcApAQCAtMzQzNCwxOCArMzQzNCw0MCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICBjYXNlIG9wX3B1dF9ieV92
YWxfZGlyZWN0OgogICAgICAgICBjYXNlIG9wX3B1dF9ieV92YWw6IHsKICAgICAgICAgICAgIE5v
ZGUqIGJhc2UgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKLQotICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9k
ZShjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7Ci0g
ICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGUqIHByb3BlcnR5ID0gZ2V0KFZpcnR1YWxSZWdp
c3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsK
LSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHByb3BlcnR5KTsKLSAgICAgICAgICAgIGFkZFZh
ckFyZ0NoaWxkKHZhbHVlKTsKLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2
ZSByb29tIGZvciBwcm9wZXJ0eSBzdG9yYWdlLgotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
MCk7IC8vIExlYXZlIHJvb20gZm9yIGxlbmd0aC4KLSAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9k
ZTo6VmFyQXJnLCBvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdCA/IFB1dEJ5VmFsRGly
ZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8oMCkpOwor
ICAgICAgICAgICAgYm9vbCBpc0RpcmVjdCA9IG9wY29kZUlEID09IG9wX3B1dF9ieV92YWxfZGly
ZWN0OworICAgICAgICAgICAgYm9vbCBjb21waWxlZEFzUHV0QnlJZCA9IGZhbHNlOworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBC
eVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fYnlWYWxJbmZvcy5nZXQo
Q29kZU9yaWdpbihjdXJyZW50Q29kZU9yaWdpbigpLmJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogV2hlbiB0aGUgYnl0ZWNvZGUgaXMgbm90IGNvbXBpbGVkIGluIHRo
ZSBiYXNlbGluZSBKSVQsIGJ5VmFsSW5mbyBiZWNvbWVzIG51bGwuCisgICAgICAgICAgICAgICAg
Ly8gQXQgdGhhdCB0aW1lLCB0aGVyZSBpcyBubyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAg
ICBpZiAoYnlWYWxJbmZvICYmIGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgIWJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRJZGVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGls
ZWRBc1B1dEJ5SWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyID0gbV9ncmFwaC5pZGVudGlmaWVycygpLmVuc3VyZShieVZhbEluZm8tPmNhY2hl
ZElkLmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja0lkZW50LCBPcEluZm8odWlkKSwgcHJvcGVydHkpOwor
CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgcHV0QnlJZFN0YXR1cyA9IFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbygKKyAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYnlWYWxJbmZvLT5zdHViSW5mbywgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsK
KworICAgICAgICAgICAgICAgICAgICBoYW5kbGVQdXRCeUlkKGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhbHVlLCBwdXRCeUlkU3RhdHVzLCBpc0RpcmVjdCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWNvbXBpbGVkQXNQdXRCeUlkKSB7Cisg
ICAgICAgICAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZShjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGUsIEFycmF5OjpXcml0ZSk7CisKKyAgICAgICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChiYXNlKTsKKyAgICAgICAgICAgICAgICBhZGRWYXJBcmdD
aGlsZChwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQodmFsdWUpOwor
ICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2ZSByb29tIGZvciBwcm9w
ZXJ0eSBzdG9yYWdlLgorICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2
ZSByb29tIGZvciBsZW5ndGguCisgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIGlzRGlyZWN0ID8gUHV0QnlWYWxEaXJlY3QgOiBQdXRCeVZhbCwgT3BJbmZvKGFycmF5TW9k
ZS5hc1dvcmQoKSksIE9wSW5mbygwKSk7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5F
WFRfT1BDT0RFKG9wX3B1dF9ieV92YWwpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAppbmRleCA5MDEwOGFmMTVkZWI3ZDA2YTNiNGI3NWMzZWY5ZTFmMWJhOWQ1YTlkLi5mYjgyN2M5
NTA0ZWU5MjIyZmM2Njg0NTcyZThlZDI4NzE1NzJiZmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmgKQEAgLTIzMSw2ICsyMzEsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIGFycmF5TW9k
ZSk7CiAgICAgICAgIH0KIAorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlUHV0QnlWYWxXaXRo
Q2FjaGVkSWQoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgUHV0S2luZCBwdXRLaW5kLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEpJVCBq
aXQodm0sIGNvZGVCbG9jayk7CisgICAgICAgICAgICBqaXQubV9ieXRlY29kZU9mZnNldCA9IGJ5
VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZVB1
dEJ5VmFsV2l0aENhY2hlZElkKGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHV0S2luZCwgcHJv
cGVydHlOYW1lKTsKKyAgICAgICAgfQorCiAgICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVIYXNJ
bmRleGVkUHJvcGVydHkoVk0qIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQnlWYWxJbmZvKiBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFy
cmF5TW9kZSkKICAgICAgICAgewogICAgICAgICAgICAgSklUIGppdCh2bSwgY29kZUJsb2NrKTsK
QEAgLTI2MSw2ICsyNjgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyosIFJldHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9k
ZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZh
bEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBjb25zdCBJZGVudGlmaWVyJik7CiAgICAgICAgIHZv
aWQgcHJpdmF0ZUNvbXBpbGVQdXRCeVZhbChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBK
SVRBcnJheU1vZGUpOworICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgUHV0S2luZCwgY29uc3QgSWRlbnRp
ZmllciYpOwogCiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHko
QnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsKIApAQCAtMzY1LDcg
KzM3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKdW1wTGlzdCBlbWl0SW50VHlwZWRB
cnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRB
cnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0RmxvYXRUeXBlZEFycmF5R2V0QnlWYWwo
SW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAg
ICAgICAgIAotICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbiByZWdUMCwgYmFzZSBpcyBpbiByZWdU
MC4gcmVnVDIgY29udGFpbnMgaW5kZWNpbmcgdHlwZS4KKyAgICAgICAgLy8gUHJvcGVydHkgaXMg
aW4gcmVnVDEsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRhaW5zIGluZGVjaW5nIHR5cGUu
CiAgICAgICAgIC8vIFRoZSB2YWx1ZSB0byBzdG9yZSBpcyBub3QgeWV0IGxvYWRlZC4gUHJvcGVy
dHkgaXMgaW50LWNoZWNrZWQgYW5kCiAgICAgICAgIC8vIHplcm8tZXh0ZW5kZWQuIEJhc2UgaXMg
Y2VsbCBjaGVja2VkLiBTdHJ1Y3R1cmUgaXMgYWxyZWFkeSBwcm9maWxlZC4KICAgICAgICAgLy8g
cmV0dXJucyB0aGUgc2xvdyBjYXNlcy4KQEAgLTM4Niw3ICszOTQsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIEp1bXBMaXN0IGVtaXRJbnRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rp
b24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgICAgIEp1
bXBMaXN0IGVtaXRGbG9hdFR5cGVkQXJyYXlQdXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKIAorICAgICAgICAvLyBJZGVudGlmaWVy
IGNoZWNrIGhlbHBlciBmb3IgR2V0QnlWYWwgYW5kIFB1dEJ5VmFsLgorICAgICAgICB2b2lkIGVt
aXRJZGVudGlmaWVyQ2hlY2soUmVnaXN0ZXJJRCBjZWxsLCBSZWdpc3RlcklEIHNjcmF0Y2gsIGNv
bnN0IElkZW50aWZpZXImLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsKKwogICAgICAgICBKSVRHZXRC
eUlkR2VuZXJhdG9yIGVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiosIGNvbnN0
IElkZW50aWZpZXImLCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsK
KyAgICAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBlbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoSW5z
dHJ1Y3Rpb24qLCBQdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiwgSnVtcExpc3QmIGRvbmVDYXNl
cywgSnVtcExpc3QmIHNsb3dDYXNlcyk7CiAKICAgICAgICAgZW51bSBGaW5hbE9iamVjdE1vZGUg
eyBNYXlCZUZpbmFsLCBLbm93bk5vdEZpbmFsIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCmluZGV4IDdhZTQzZjBhMGE5YTVlYTcxMmM5YmIwNGM5MmQy
NjA5MjNiZDczNTQuLmY5MDllNjE1MGU0NmVjYmQ3ZDg3ZWY1Yzg3MDg5MjIzYmYwNmQ1M2UgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtNDc4LDEw
ICs0NzgsMTYgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdl
QW5kRmluaXNoUHV0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmoKICAgICBiYXNlLT5wdXREaXJlY3Qo
dm0sIG9mZnNldCwgSlNWYWx1ZTo6ZGVjb2RlKHZhbHVlKSk7CiB9CiAKK0FMV0FZU19JTkxJTkUg
c3RhdGljIGJvb2wgaXNTdHJpbmdPclN5bWJvbChKU1ZhbHVlIHZhbHVlKQoreworICAgIHJldHVy
biB2YWx1ZS5pc1N0cmluZygpIHx8IHZhbHVlLmlzU3ltYm9sKCk7Cit9CisKIHN0YXRpYyB2b2lk
IHB1dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1
ZSBzdWJzY3JpcHQsIEpTVmFsdWUgdmFsdWUsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQogewogICAg
IFZNJiB2bSA9IGNhbGxGcmFtZS0+dm0oKTsKICAgICBpZiAoTElLRUxZKHN1YnNjcmlwdC5pc1VJ
bnQzMigpKSkgeworICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAg
ICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNVSW50MzIoKTsKICAgICAgICAgaWYgKGJhc2VW
YWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QoYmFzZVZhbHVlKTsKQEAgLTQ5MywxMyArNDk5LDE5IEBAIHN0YXRpYyB2b2lkIHB1dEJ5VmFs
KENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3Jp
cHQsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYmFzZVZhbHVl
LnB1dEJ5SW5kZXgoY2FsbEZyYW1lLCBpLCB2YWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+
aXNTdHJpY3RNb2RlKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGF1dG8gcHJvcGVydHkgPSBz
dWJzY3JpcHQudG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOwotICAgICAgICBpZiAoIWNhbGxGcmFt
ZS0+dm0oKS5leGNlcHRpb24oKSkgeyAvLyBEb24ndCBwdXQgdG8gYW4gb2JqZWN0IGlmIHRvU3Ry
aW5nIHRocmV3IGFuIGV4Y2VwdGlvbi4KLSAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VWYWx1ZSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOwotICAg
ICAgICAgICAgYmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7
Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIGF1dG8gcHJvcGVydHkg
PSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShjYWxsRnJhbWUpOworICAgIC8vIERvbid0IHB1dCB0
byBhbiBvYmplY3QgaWYgdG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgorICAgIGlmIChjYWxs
RnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChieVZh
bEluZm8tPnN0dWJJbmZvICYmICghaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFs
SW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpKQorICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93
UGF0aCA9IHRydWU7CisKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGNhbGxG
cmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpKTsKKyAgICBiYXNlVmFsdWUucHV0KGNh
bGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KIAogc3RhdGljIHZvaWQgZGlyZWN0
UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1Zh
bHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCkBAIC01
MDcsNiArNTE5LDcgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHMKICAgICBib29sIGlzU3RyaWN0
TW9kZSA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPmlzU3RyaWN0TW9kZSgpOwogICAgIGlmIChM
SUtFTFkoc3Vic2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIC8vIERlc3BpdGUgaXRzIG5h
bWUsIEpTVmFsdWU6OmlzVUludDMyIHdpbGwgcmV0dXJuIHRydWUgb25seSBmb3IgcG9zaXRpdmUg
Ym94ZWQgaW50MzJfdDsgYWxsIHRob3NlIHZhbHVlcyBhcmUgdmFsaWQgYXJyYXkgaW5kaWNlcy4K
KyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICB1aW50MzJf
dCBpbmRleCA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBBU1NFUlQoaXNJbmRleChp
bmRleCkpOwogICAgICAgICBpZiAoYmFzZU9iamVjdC0+Y2FuU2V0SW5kZXhRdWlja2x5Rm9yUHV0
RGlyZWN0KGluZGV4KSkgewpAQCAtNTIzLDYgKzUzNiw3IEBAIHN0YXRpYyB2b2lkIGRpcmVjdFB1
dEJ5VmFsKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU09iamVjdCogYmFzZU9iamVjdCwgSlNWYWx1
ZSBzCiAgICAgICAgIGRvdWJsZSBzdWJzY3JpcHRBc0RvdWJsZSA9IHN1YnNjcmlwdC5hc0RvdWJs
ZSgpOwogICAgICAgICB1aW50MzJfdCBzdWJzY3JpcHRBc1VJbnQzMiA9IHN0YXRpY19jYXN0PHVp
bnQzMl90PihzdWJzY3JpcHRBc0RvdWJsZSk7CiAgICAgICAgIGlmIChzdWJzY3JpcHRBc0RvdWJs
ZSA9PSBzdWJzY3JpcHRBc1VJbnQzMiAmJiBpc0luZGV4KHN1YnNjcmlwdEFzVUludDMyKSkgewor
ICAgICAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICAgICAg
YmFzZU9iamVjdC0+cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCBzdWJzY3JpcHRBc1VJbnQzMiwg
dmFsdWUsIDAsIGlzU3RyaWN0TW9kZSA/IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXRE
aXJlY3RJbmRleFNob3VsZE5vdFRocm93KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQpAQCAtNTMzLDI2ICs1NDcsMzQgQEAgc3RhdGljIHZvaWQgZGlyZWN0UHV0QnlWYWwoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlIHMKICAgICBpZiAo
Y2FsbEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
T3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpCisgICAgaWYg
KE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHkpKSB7CisgICAg
ICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAgICAgYmFzZU9iamVjdC0+
cHV0RGlyZWN0SW5kZXgoY2FsbEZyYW1lLCBpbmRleC52YWx1ZSgpLCB2YWx1ZSwgMCwgaXNTdHJp
Y3RNb2RlID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6IFB1dERpcmVjdEluZGV4U2hvdWxk
Tm90VGhyb3cpOwotICAgIGVsc2UgewotICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNl
T2JqZWN0LCBpc1N0cmljdE1vZGUpOwotICAgICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3QoY2Fs
bEZyYW1lLT52bSgpLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOworICAgICAgICByZXR1cm47CiAg
ICAgfQorCisgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3ltYm9s
KHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCisgICAgICAg
IGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KGJhc2VPYmplY3QsIGlzU3RyaWN0TW9kZSk7CisgICAgYmFzZU9iamVjdC0+cHV0RGlyZWN0
KGNhbGxGcmFtZS0+dm0oKSwgcHJvcGVydHksIHZhbHVlLCBzbG90KTsKIH0KLXZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCisKK2VudW0gY2xh
c3MgT3B0aW1pemF0aW9uUmVzdWx0IHsKKyAgICBOb3RPcHRpbWl6ZWQsCisgICAgT3B0aW1pemVk
LAorICAgIEdpdmVVcCwKK307CisKK3N0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5UHV0QnlW
YWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRy
YWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRpbWl6
aW5nIGF0IGFsbC4KKyAgICBPcHRpbWl6YXRpb25SZXN1bHQgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpOb3RPcHRpbWl6ZWQ7CiAKLSAgICBKU1ZhbHVlIGJhc2VWYWx1
ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKLSAgICBKU1ZhbHVlIHN1YnNj
cmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKLSAgICBKU1ZhbHVlIHZh
bHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKIAogICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQz
MigpKSB7Ci0gICAgICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQgYWxsLgog
ICAgICAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICAgICAg
Ym9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOwogCiAgICAgICAgIEFTU0VSVChleGVjLT5sb2NhdGlv
bkFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91
dGluZSk7CkBAIC01NjYsNDMgKzU4OCw2NCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZQogICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAg
ICAgICAgSklUOjpjb21waWxlUHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7Ci0g
ICAgICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICAgICAgICAgIEpJVDo6
Y29tcGlsZVB1dEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQg
PSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogCi0gICAgICAgIGlmICghZGlkT3B0aW1pemUpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIHRh
a2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFr
ZSBzdXJlIHdlCi0gICAgICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4g
T3IsIGlmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdAotICAgICAg
ICAgICAgLy8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2Fp
dCB1bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2VzCi0gICAgICAgICAgICAvLyB3aGVyZSB3ZSBzZWUg
bm9uLWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMg
d29ydGggb2YKLSAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlIHRo
YXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLgotICAgICAgICAgICAgaWYgKCsr
YnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwCi0gICAgICAgICAgICAgICAgfHwgb2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RC
eUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgewotICAgICAgICAgICAgICAgIC8vIERv
bid0IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5
UmV0dXJuQWRkcmVzcyhleGVjLT5jb2RlQmxvY2soKSwgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVU
VVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25QdXRCeVZhbEdlbmVyaWMpKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZl
IHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVu
IHdhaXQgdW50aWwgMTAgdGltZXMuCisgICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0g
T3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50
eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5n
dGhJc05vdFplcm8oKSkKKyAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOworICAgIH0KKworICAgIGlmIChiYXNlVmFsdWUuaXNPYmplY3Qo
KSAmJiBpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgY29uc3QgSWRlbnRp
ZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAgICAg
ICAgaWYgKCFzdWJzY3JpcHQuaXNTdHJpbmcoKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
KSB7CisgICAgICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkp
OworICAgICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICAgICAg
ICAgIEpJVDo6Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2Nr
KCksIGJ5VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgTm90RGlyZWN0LCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRp
bWl6ZWQ7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUs
IHN1YnNjcmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CisgICAgaWYgKG9wdGltaXphdGlvblJlc3Vs
dCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCkgeworICAgICAgICAvLyBJZiB3ZSB0
YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1h
a2Ugc3VyZSB3ZQorICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9y
IGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCisgICAgICAgIC8vIG9i
amVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3Ig
dXMgdG8gb2JzZXJ2ZQorICAgICAgICAvLyB0aGF0IHRoZSBwdXRfYnlfdmFsIG1heSBiZSBwb2x5
bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCisgICAgICAgIC8vIHRo
ZSByZXN1bHQgaXMgR2l2ZVVwLgorICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291
bnQgPj0gMTApCisgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25S
ZXN1bHQ6OkdpdmVVcDsKKyAgICB9CisKKyAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0Owog
fQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwoRXhlY1N0YXRl
KiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJ
bmZvKiBieVZhbEluZm8pCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxPcHRp
bWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7Ci0gICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgp
OwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBjYWxsRnJhbWUpOwotICAg
IAorICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRy
YWNlcigmdm0sIGV4ZWMpOworCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2VWYWx1ZSk7CiAgICAgSlNWYWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7CiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwotICAgIFJFTEVBU0VfQVNTRVJUKGJhc2VWYWx1ZS5pc09iamVj
dCgpKTsKLSAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZVZhbHVlKTsKLSAgICBp
ZiAoc3Vic2NyaXB0LmlzSW50MzIoKSkgewotICAgICAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBv
cHRpbWl6aW5nIGF0IGFsbC4KLSAgICAgICAgYm9vbCBkaWRPcHRpbWl6ZSA9IGZhbHNlOworICAg
IGlmICh0cnlQdXRCeVZhbE9wdGltaXplKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkgPT0gT3B0aW1pemF0
aW9uUmVzdWx0OjpHaXZlVXApIHsKKyAgICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1p
emUuCisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKyAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNz
UHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFsR2Vu
ZXJpYykpOworICAgIH0KKyAgICBwdXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
dmFsdWUsIGJ5VmFsSW5mbyk7Cit9CisKK3N0YXRpYyBPcHRpbWl6YXRpb25SZXN1bHQgdHJ5RGly
ZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEpT
VmFsdWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKQoreworICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgYXQg
YWxsLgorICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6
YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKKworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAK
LSAgICAgICAgQVNTRVJUKGNhbGxGcmFtZS0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7CisgICAgICAgIEFTU0VSVChleGVjLT5sb2Nh
dGlvbkFzQnl0ZWNvZGVPZmZzZXQoKSk7CiAgICAgICAgIEFTU0VSVCghYnlWYWxJbmZvLT5zdHVi
Um91dGluZSk7CiAKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVj
dHVyZSh2bSk7CkBAIC02MTAsMjkgKzY1Myw2MCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWwoRXhlY1N0YXRlKiBjYWxsRnJhbWUsIEVuY29kZWRKU1ZhbHVlCiAg
ICAgICAgICAgICAvLyBBdHRlbXB0IHRvIG9wdGltaXplLgogICAgICAgICAgICAgSklUQXJyYXlN
b2RlIGFycmF5TW9kZSA9IGppdEFycmF5TW9kZUZvclN0cnVjdHVyZShzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgaWYgKGppdEFycmF5TW9kZVBlcm1pdHNQdXQoYXJyYXlNb2RlKSAmJiBhcnJheU1v
ZGUgIT0gYnlWYWxJbmZvLT5hcnJheU1vZGUpIHsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7CisgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKICAgICAgICAgICAgICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAg
ICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihs
b2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJVDo6Y29t
cGlsZURpcmVjdFB1dEJ5VmFsKCZ2bSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7Ci0gICAg
ICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICAgICAgICAgIEpJVDo6Y29t
cGlsZURpcmVjdFB1dEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0
dXJuQWRkcmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKCFkaWRPcHRpbWl6ZSkgewotICAgICAgICAgICAg
Ly8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hp
bmcgdGhlbiBtYWtlIHN1cmUgd2UKLSAgICAgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0
YWtlIGFnYWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2Jq
ZWN0Ci0gICAgICAgICAgICAvLyB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9u
J3QgZXZlbiB3YWl0IHVudGlsIDEwIHRpbWVzLiBGb3IgY2FzZXMKLSAgICAgICAgICAgIC8vIHdo
ZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAg
aXRlcmF0aW9ucyB3b3J0aCBvZgotICAgICAgICAgICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRv
IG9ic2VydmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuCi0gICAgICAg
ICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAKLSAgICAgICAgICAgICAg
ICB8fCBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICAgICAgY3Rp
UGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCksIFJldHVybkFk
ZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uRGlyZWN0
UHV0QnlWYWxHZW5lcmljKSk7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgd2UgZmFp
bGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRl
eGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCisgICAgICAgIGlm
IChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYg
b2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0
eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkKKyAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6R2l2ZVVwOworICAgIH0gZWxzZSBp
ZiAoaXNTdHJpbmdPclN5bWJvbChzdWJzY3JpcHQpKSB7CisgICAgICAgIGNvbnN0IElkZW50aWZp
ZXIgcHJvcGVydHlOYW1lID0gc3Vic2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7CisgICAgICAg
IE9wdGlvbmFsPHVpbnQzMl90PiBpbmRleCA9IHBhcnNlSW5kZXgocHJvcGVydHlOYW1lKTsKKwor
ICAgICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygpIHx8ICFpbmRleCkgeworICAgICAgICAg
ICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAg
IEFTU0VSVCghYnlWYWxJbmZvLT5zdHViUm91dGluZSk7CisgICAgICAgICAgICBKSVQ6OmNvbXBp
bGVQdXRCeVZhbFdpdGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8s
IHJldHVybkFkZHJlc3MsIERpcmVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICB9
CiAgICAgfQotICAgIGRpcmVjdFB1dEJ5VmFsKGNhbGxGcmFtZSwgb2JqZWN0LCBzdWJzY3JpcHQs
IHZhbHVlLCBieVZhbEluZm8pOworCisgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRp
bWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCkgeworICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cg
cGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3
ZQorICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdo
ZXJlIHdlIHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nCisgICAgICAgIC8vIG9iamVjdHMsIHRo
aXMgZ2l2ZXMgMTAgaXRlcmF0aW9ucyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2Jz
ZXJ2ZQorICAgICAgICAvLyB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4g
V2UgY291bnQgdXAgc2xvd1BhdGhDb3VudCBldmVuIGlmCisgICAgICAgIC8vIHRoZSByZXN1bHQg
aXMgR2l2ZVVwLgorICAgICAgICBpZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAp
CisgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Okdp
dmVVcDsKKyAgICB9CisKKyAgICByZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworfQorCit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRTdWJzY3JpcHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBi
eVZhbEluZm8pCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZh
bHVlLmlzT2JqZWN0KCkpOworICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFs
dWUpOworICAgIGlmICh0cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKGV4ZWMsIG9iamVjdCwgc3Vi
c2NyaXB0LCBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSkg
PT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKKyAgICAgICAgLy8gRG9uJ3QgZXZlciB0
cnkgdG8gb3B0aW1pemUuCisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
KyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBS
ZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsR2VuZXJpYykpOworICAgIH0KKworICAgIGRpcmVjdFB1dEJ5VmFsKGV4
ZWMsIG9iamVjdCwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRCYXNlVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCkBA
IC0xNDU4LDM2ICsxNTMyLDIxIEBAIHN0YXRpYyBKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFsdWUgc3Vic2NyaXB0LCBCCiAgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29k
ZU9mZnNldCgpKTsKLSAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiBieVZhbEluZm8tPmNh
Y2hlZElkICE9IHByb3BlcnR5KQorICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmICghaXNT
dHJpbmdPclN5bWJvbChzdWJzY3JpcHQpIHx8IGJ5VmFsSW5mby0+Y2FjaGVkSWQgIT0gcHJvcGVy
dHkpKQogICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAKICAgICByZXR1
cm4gYmFzZVZhbHVlLmdldChleGVjLCBwcm9wZXJ0eSk7CiB9CiAKLWV4dGVybiAiQyIgewotICAg
IAotRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMo
RXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCitzdGF0aWMgT3B0aW1p
emF0aW9uUmVzdWx0IHRyeUdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsK
LSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgSlNWYWx1
ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwotCi0gICAgSlNW
YWx1ZSByZXN1bHQgPSBnZXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlWYWxJ
bmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLX0KKyAgICAvLyBTZWUgaWYgaXQncyB3b3J0aCBvcHRp
bWl6aW5nIHRoaXMgYXQgYWxsLgorICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25S
ZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKIAotRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhl
YywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJz
Y3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQotewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7
Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIEpTVmFs
dWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKLSAgICBKU1ZhbHVl
IHN1YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKIAogICAgIGlm
IChiYXNlVmFsdWUuaXNPYmplY3QoKSAmJiBzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAg
IC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9wdGltaXppbmcgdGhpcyBhdCBhbGwuCiAgICAgICAgIEpT
T2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAgICAgICBib29sIGRpZE9w
dGltaXplID0gZmFsc2U7CiAKICAgICAgICAgQVNTRVJUKGV4ZWMtPmxvY2F0aW9uQXNCeXRlY29k
ZU9mZnNldCgpKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKQEAg
LTE1MDMsNDMgKzE1NjIsNjkgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25HZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEoKICAgICAgICAgICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAg
ICAgICAgICAgICAgYnlWYWxJbmZvLT5hcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihsb2NrZXIsIGNvZGVCbG9jaywgc3RydWN0dXJlKTsKIAotICAgICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZUdldEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBhcnJheU1vZGUpOwotICAgICAgICAg
ICAgICAgIGRpZE9wdGltaXplID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBKSVQ6OmNvbXBpbGVH
ZXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIHJldHVybkFkZHJlc3Ms
IGFycmF5TW9kZSk7CisgICAgICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1p
emF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAoIWRpZE9wdGltaXplKSB7Ci0gICAgICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cg
cGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3
ZQotICAgICAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3
ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QKLSAgICAgICAgICAgIC8v
IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBldmVuIHdhaXQgdW50aWwg
MTAgdGltZXMuIEZvciBjYXNlcwotICAgICAgICAgICAgLy8gd2hlcmUgd2Ugc2VlIG5vbi1pbmRl
eC1pbnRlcmNlcHRpbmcgb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9m
Ci0gICAgICAgICAgICAvLyBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBn
ZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4KLSAgICAgICAgICAgIGlmICgrK2J5VmFsSW5m
by0+c2xvd1BhdGhDb3VudCA+PSAxMAotICAgICAgICAgICAgICAgIHx8IG9iamVjdC0+c3RydWN0
dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBEb24ndCBldmVy
IHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCksIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERS
RVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgLy8gSWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBo
YXZlIHNvbWUgb2JqZWN0IHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhlbiBkb24ndCBl
dmVuIHdhaXQgdW50aWwgMTAgdGltZXMuCisgICAgICAgIGlmIChvcHRpbWl6YXRpb25SZXN1bHQg
IT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQgJiYgb2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5M
ZW5ndGhJc05vdFplcm8oKSkKKyAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGlt
aXphdGlvblJlc3VsdDo6R2l2ZVVwOwogICAgIH0KIAotICAgIGlmIChiYXNlVmFsdWUuaXNPYmpl
Y3QoKSAmJiAoc3Vic2NyaXB0LmlzU3ltYm9sKCkgfHwgc3Vic2NyaXB0LmlzU3RyaW5nKCkpKSB7
CisgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2Ny
aXB0KSkgewogICAgICAgICBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlw
dC50b1Byb3BlcnR5S2V5KGV4ZWMpOwotCiAgICAgICAgIGlmICghc3Vic2NyaXB0LmlzU3RyaW5n
KCkgfHwgIXBhcnNlSW5kZXgocHJvcGVydHlOYW1lKSkgewogICAgICAgICAgICAgQVNTRVJUKGV4
ZWMtPmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgICAgIEFTU0VSVCghYnlW
YWxJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBKSVQ6OmNvbXBpbGVHZXRCeVZhbFdp
dGhDYWNoZWRJZCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBieVZhbEluZm8sIFJldHVybkFkZHJl
c3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZUdldEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5
VmFsSW5mbywgcmV0dXJuQWRkcmVzcywgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgICAgIG9wdGlt
aXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICB9
CisgICAgfQogCi0gICAgICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSk7Ci0gICAgICAg
IGJvb2wgaGFzUmVzdWx0ID0gYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGhhc1Jlc3VsdCA/
IHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSA6IGpzVW5kZWZpbmVkKCkpOworICAg
IGlmIChvcHRpbWl6YXRpb25SZXN1bHQgIT0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQp
IHsKKyAgICAgICAgLy8gSWYgd2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdp
dGhvdXQgcGF0Y2hpbmcgdGhlbiBtYWtlIHN1cmUgd2UKKyAgICAgICAgLy8gbmV2ZXIgbWFrZSB0
aGF0IG1pc3Rha2UgYWdhaW4uIEZvciBjYXNlcyB3aGVyZSB3ZSBzZWUgbm9uLWluZGV4LWludGVy
Y2VwdGluZworICAgICAgICAvLyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29y
dGggb2Ygb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2VydmUKKyAgICAgICAgLy8gdGhhdCB0aGUg
Z2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuIFdlIGNvdW50IHVwIHNsb3dQYXRoQ291bnQg
ZXZlbiBpZgorICAgICAgICAvLyB0aGUgcmVzdWx0IGlzIEdpdmVVcC4KKyAgICAgICAgaWYgKCsr
YnlWYWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwKQorICAgICAgICAgICAgb3B0aW1pemF0aW9u
UmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7CiAgICAgfQogCisgICAgcmV0dXJu
IG9wdGltaXphdGlvblJlc3VsdDsKK30KKworZXh0ZXJuICJDIiB7CisKK0VuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2V0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3Jp
cHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Cisg
ICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIEpTVmFsdWUg
YmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVlIHN1
YnNjcmlwdCA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKwogICAgIEpTVmFs
dWUgcmVzdWx0ID0gZ2V0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5m
bywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKTsKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2V0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8q
IGJ5VmFsSW5mbykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKKyAgICBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MgPSBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyk7CisgICAg
aWYgKHRyeUdldEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcykgPT0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXApIHsKKyAg
ICAgICAgLy8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCisgICAgICAgIGJ5VmFsSW5mby0+
dG9va1Nsb3dQYXRoID0gdHJ1ZTsKKyAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNz
KGV4ZWMtPmNvZGVCbG9jaygpLCByZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihvcGVyYXRpb25H
ZXRCeVZhbEdlbmVyaWMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdl
dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBieVZhbEluZm8sIHJldHVybkFkZHJl
c3MpKTsKK30KKwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYXNJbmRl
eGVkUHJvcGVydHlEZWZhdWx0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJ
bmZvKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCmluZGV4IDNkODNmNTkwZGNmOTE4MDNhMzQ0OGJhMDgzYjJmOTJi
Y2JlODRmOWIuLjU5MTdlNDdiYzU3MDc3M2JjN2Y1ZmU5NDRmYzM5MDNlMTk3ZWZhNjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yNjIsOCArMjYyLDgg
QEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3RCdWlsZExpc3Qo
RXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZv
KiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFz
ZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChFeGVjU3RhdGUqLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKikgV1RGX0lOVEVSTkFMOwogdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlYWxsb2NhdGVTdG9yYWdlQW5kRmluaXNoUHV0KEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQsIEVuY29kZWRKU1Zh
bHVlKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWwo
RXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkRpcmVjdFB1dEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5mbyopIFdURl9JTlRF
Uk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXpl
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUsIEJ5VmFsSW5mbyopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkNhbGxF
dmFsKEV4ZWNTdGF0ZSosIEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYTAwY2NiMjVlNTI5
Nzg3OWQyNjM0NTNiNjQ2YmIwZTM3ZDU5NmJlZi4uY2IyOTNhYzdmMmQ3MzJmMzZiMWVmOTBlZWRj
ODE5MzNlYWU2NTNmNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKQEAgLTIwOCwxNiArMjA4LDcgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBK
SVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW8KICAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKIAogICAg
IHNsb3dDYXNlcy5hcHBlbmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMSkpOwotICAgIGlmIChw
cm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5j
aFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9m
ZnNldCgpKSwgbV92bS0+c3ltYm9sU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMSwgU3ltYm9sOjpvZmZzZXRPZlByaXZhdGVOYW1lKCkpLCByZWdUMyk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG1fdm0t
PnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEs
IEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCByZWdUMyk7Ci0gICAgICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMykpOwotICAgICAgICBzbG93Q2FzZXMuYXBw
ZW5kKGJyYW5jaFRlc3QzMihaZXJvLCBBZGRyZXNzKHJlZ1QzLCBTdHJpbmdJbXBsOjpmbGFnc09m
ZnNldCgpKSwgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkpOwotICAg
IH0KLSAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW1QdHIocHJvcGVydHlOYW1lLmltcGwoKSkpKTsKKyAgICBlbWl0SWRlbnRpZmllckNoZWNr
KHJlZ1QxLCByZWdUMywgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNv
ZGVPZmZzZXQpLCBSZWdpc3RlclNldDo6c3BlY2lhbFJlZ2lzdGVycygpLApAQCAtMzA3LDEwICsy
OTgsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFk
ZEJ5VmFsSW5mbygpOwogCiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcnMoYmFzZSwgcmVnVDAs
IHByb3BlcnR5LCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SW1tZWRpYXRlSW50
ZWdlcihyZWdUMSk7CisgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKKyAgICBQYXRjaGFibGVKdW1wIG5vdEluZGV4ID0gZW1pdFBhdGNoYWJsZUp1bXBJZk5vdElt
bWVkaWF0ZUludGVnZXIocmVnVDEpOworICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKICAgICAv
LyBTZWUgY29tbWVudCBpbiBvcF9nZXRfYnlfdmFsLgogICAgIHplcm9FeHRlbmQzMlRvUHRyKHJl
Z1QxLCByZWdUMSk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNl
KTsKICAgICBlbWl0QXJyYXlQcm9maWxpbmdTaXRlV2l0aENlbGwocmVnVDAsIHJlZ1QyLCBwcm9m
aWxlKTsKICAgICBhbmQzMihUcnVzdGVkSW1tMzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMik7
CiAgICAgCkBAIC0zNDEsNyArMzMzLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIAogICAgIExhYmVsIGRvbmUgPSBs
YWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29t
cGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgp
LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9u
SW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zm
c2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSkpOwogfQogCiBKSVQ6
Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBl
IGluZGV4aW5nU2hhcGUpCkBAIC00MzQsNiArNDI2LDM5IEBAIEpJVDo6SnVtcExpc3QgSklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
UGF0CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAorSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6
OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExp
c3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcykKK3sKKyAgICAvLyBiYXNlOiByZWdU
MAorICAgIC8vIHByb3BlcnR5OiByZWdUMQorICAgIC8vIHNjcmF0Y2g6IHJlZ1QyCisKKyAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKworICAgIHNsb3dDYXNlcy5hcHBl
bmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMSkpOworICAgIGVtaXRJZGVudGlmaWVyQ2hlY2so
cmVnVDEsIHJlZ1QxLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CisKKyAgICAvLyBXcml0ZSBi
YXJyaWVyIGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBi
YXJyaWVyLAorICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRXcml0ZUJhcnJp
ZXIoYmFzZSwgdmFsdWUsIFNob3VsZEZpbHRlclZhbHVlKTsKKyAgICBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhiYXNlLCByZWdUMCwgdmFsdWUsIHJlZ1QxKTsKKworICAgIEpJVFB1dEJ5SWRHZW5l
cmF0b3IgZ2VuKAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zm
c2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJl
Z3MocmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSksIHJlZ1QyLCBEb250U3BpbGwsIG1fY29kZUJs
b2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKKyAgICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhp
cyk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgTGFiZWwgY29sZFBhdGhC
ZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhpcyk7CisKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5z
dHViSW5mbygpLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZG9uZUNhc2VzLmFw
cGVuZChqdW1wKCkpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwogdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC00NDIsOCArNDY3LDggQEAgdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXMKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFs
Q29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87CiAKLSAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Ns
b3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nh
c2UoaXRlcik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCiAgICAgCiAgICAgSklUQXJyYXlNb2Rl
IG1vZGUgPSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CkBAIC00NjYsNyArNDkxLDcgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5
LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAg
IGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVy
YXRpb25QdXRCeVZhbCwgcmVnVDAsIHJlZ1QxLCByZWdUMiwgYnlWYWxJbmZvKTsKKyAgICBDYWxs
IGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxP
cHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUsIHJlZ1QwLCByZWdUMSwgcmVnVDIs
IGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNsb3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxh
dGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpA
QCAtOTg4LDYgKzEwMTMsMTggQEAgdm9pZCBKSVQ6OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBv
d25lcikKICNlbmRpZiAvLyBFTkFCTEUoR0dDKQogfQogCit2b2lkIEpJVDo6ZW1pdElkZW50aWZp
ZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgc2NyYXRjaCwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQoreworICAgIGlmIChwcm9w
ZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0
cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhjZWxsLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0
KCkpLCBtX3ZtLT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0KCkpKTsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGNlbGwsIFN5bWJvbDo6b2Zmc2V0T2ZQcml2YXRlTmFtZSgpKSwgc2NyYXRjaCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1
YWwsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgbV92bS0+c3Ry
aW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhjZWxsLCBKU1N0
cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRjaCk7CisgICAgfQorICAgIHNsb3dDYXNlcy5h
cHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tUHRyKHByb3BlcnR5
TmFtZS5pbXBsKCkpKSk7Cit9CisKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRl
Y29kZUluZGV4OwpAQCAtMTEzOSw2ICsxMTc2LDM3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDog
b3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9CiAKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQoreworICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRl
eDsKKworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsKKyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisK
KyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChj
dXJyZW50SW5zdHJ1Y3Rpb24sIHB1dEtpbmQsIHByb3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93
Q2FzZXMpOworCisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1f
bG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJs
b2NrKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNsb3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwo
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVGcm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJu
QWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNldChieVZhbEluZm8tPnJldHVybkFkZHJlc3NU
b1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+
YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZhbEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7
CisgICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0ZSA6IG1fY2FsbHMpIHsKKyAgICAgICAgaWYg
KGNhbGxTaXRlLnRvKQorICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9t
LCBGdW5jdGlvblB0cihjYWxsU2l0ZS50bykpOworICAgIH0KKyAgICBnZW4uZmluYWxpemUocGF0
Y2hCdWZmZXIpOworCisgICAgYnlWYWxJbmZvLT5zdHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVf
Rk9SX1NUVUIoCisgICAgICAgIG1fY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJC
YXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNoZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIg
Zm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3Qi
IDogIiIsIHByb3BlcnR5TmFtZS5pbXBsKCktPnV0ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9j
b2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVzcy52YWx1ZSgpKSk7CisgICAgYnlWYWxJbmZv
LT5jYWNoZWRJZCA9IHByb3BlcnR5TmFtZTsKKyAgICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2Vu
LnN0dWJJbmZvKCk7CisKKyAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBD
b2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKHB1dEtpbmQgPT0gRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxH
ZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7Cit9CisKKwogSklUOjpKdW1wTGlz
dCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXgg
YThkNjlhY2RjZjY3NzQ5NGI4ZWU2MmQxZTEyYWI5MmY1ODljZTAwMC4uNDA2NjJhZTNiZmY0ZTE0
MTEyOGYxMjQ2NzgzNDQ4NzU1NGEwNWVmYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCkBAIC0yNDcsMTcgKzI0Nyw4IEBA
IEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvCiAgICAgLy8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBh
eWxvYWQocmVnVDIpCiAgICAgLy8gc2NyYXRjaDogcmVnVDQKIAotICAgIHNsb3dDYXNlcy5hcHBl
bmQoZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMykpOwotICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNT
eW1ib2woKSkgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RF
cXVhbCwgQWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgbV92bS0+
c3ltYm9sU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMiwg
U3ltYm9sOjpvZmZzZXRPZlByaXZhdGVOYW1lKCkpLCByZWdUNCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIG1fdm0tPnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSkpOwotICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTU3RyaW5nOjpvZmZz
ZXRPZlZhbHVlKCkpLCByZWdUNCk7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUNCkpOwotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFRlc3Qz
MihaZXJvLCBBZGRyZXNzKHJlZ1Q0LCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwgVHJ1c3Rl
ZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJc0F0b21pYygpKSkpOwotICAgIH0KLSAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW1QdHIocHJvcGVy
dHlOYW1lLmltcGwoKSkpKTsKKyAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFs
LCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgZW1pdElkZW50
aWZpZXJDaGVjayhyZWdUMiwgcmVnVDQsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKIAogICAg
IEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdp
bihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKQEAg
LTMyMiw4ICszMTMsOSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCBy
ZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CiAgICAgCi0gICAgYWRkU2xvd0Nhc2UoYnJh
bmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKKyAgICBQYXRj
aGFibGVKdW1wIG5vdEluZGV4ID0gcGF0Y2hhYmxlQnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QzLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKKyAgICBhZGRTbG93Q2FzZShub3RJbmRl
eCk7CiAgICAgZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMSwgcHJv
ZmlsZSk7CiAgICAgYW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDEp
OwogICAgIApAQCAtMzU0LDcgKzM0Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAKICAgICBMYWJlbCBkb25lID0g
bGFiZWwoKTsKICAgICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENv
bXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1bXAo
KSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSkpOworICAgIG1fYnlWYWxDb21waWxhdGlv
bkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9m
ZnNldCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUpKTsKIH0KIAogSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1NoYXBlKQpAQCAtNDUzLDYgKzQ0NSw0MiBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK0pJVFB1dEJ5SWRHZW5lcmF0b3IgSklU
OjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBM
aXN0JiBkb25lQ2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCit7CisgICAgLy8gYmFzZTogdGFn
KHJlZ1QxKSwgcGF5bG9hZChyZWdUMCkKKyAgICAvLyBwcm9wZXJ0eTogdGFnKHJlZ1QzKSwgcGF5
bG9hZChyZWdUMikKKworICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKKyAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
CisgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgIGVtaXRJZGVudGlmaWVyQ2hlY2socmVnVDIs
IHJlZ1QyLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CisKKyAgICAvLyBXcml0ZSBiYXJyaWVy
IGJyZWFrcyB0aGUgcmVnaXN0ZXJzLiBTbyBhZnRlciBpc3N1aW5nIHRoZSB3cml0ZSBiYXJyaWVy
LAorICAgIC8vIHJlbG9hZCB0aGUgcmVnaXN0ZXJzLgorICAgIGVtaXRXcml0ZUJhcnJpZXIoYmFz
ZSwgdmFsdWUsIFNob3VsZEZpbHRlckJhc2UpOworICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCBy
ZWdUMCk7CisgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CisKKyAgICBKSVRQdXRC
eUlkR2VuZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRl
Y29kZU9mZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIEpT
VmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiks
IHJlZ1QxLCBEb250U3BpbGwsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKKyAg
ICBnZW4uZ2VuZXJhdGVGYXN0UGF0aCgqdGhpcyk7CisgICAgZG9uZUNhc2VzLmFwcGVuZChqdW1w
KCkpOworCisgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CisgICAgZ2VuLnNsb3dQ
YXRoSnVtcCgpLmxpbmsodGhpcyk7CisKKyAgICAvLyBKSVRQdXRCeUlkR2VuZXJhdG9yIG9ubHkg
cHJlc2VydmUgdGhlIHZhbHVlIGFuZCB0aGUgYmFzZSdzIHBheWxvYWQsIHdlIGhhdmUgdG8gcmVs
b2FkIHRoZSB0YWcuCisgICAgZW1pdExvYWRUYWcoYmFzZSwgcmVnVDEpOworCisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8o
KSwgcmVnVDMsIHJlZ1QyLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAg
IGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CisgICAgZG9uZUNh
c2VzLmFwcGVuZChqdW1wKCkpOworCisgICAgcmV0dXJuIGdlbjsKK30KKwogdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC00NjEsOCArNDg5LDggQEAgdm9pZCBK
SVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXMKICAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5ieVZhbEluZm87
CiAgICAgCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawog
ICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hl
Y2sKKyAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAg
bGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawogICAgIAogICAgIEpJ
VEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwpAQCAtNTAwLDE0ICs1
MjgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBhZGRDYWxsQXJndW1lbnQocmVn
VDEpOwogICAgIGFkZENhbGxBcmd1bWVudChyZWdUMCk7CiAgICAgYWRkQ2FsbEFyZ3VtZW50KFRy
dXN0ZWRJbW1QdHIoYnlWYWxJbmZvKSk7Ci0gICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVjayhpc0RpcmVjdCA/IG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsIDogb3BlcmF0
aW9uUHV0QnlWYWwpOworICAgIENhbGwgY2FsbCA9IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hl
Y2soaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9u
UHV0QnlWYWxPcHRpbWl6ZSk7CiAjZWxzZQogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24g
YmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAg
Ly8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCiAgICAgZW1p
dExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDMs
IHJlZ1QwKTsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDUsIHJlZ1Q0KTsKLSAgICBDYWxsIGNh
bGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBv
cGVyYXRpb25QdXRCeVZhbCwgcmVnVDIsIHJlZ1QxLCByZWdUMywgcmVnVDAsIHJlZ1Q1LCByZWdU
NCwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8g
b3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1p
emUsIHJlZ1QyLCByZWdUMSwgcmVnVDMsIHJlZ1QwLCByZWdUNSwgcmVnVDQsIGJ5VmFsSW5mbyk7
CiAjZW5kaWYKIAogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9u
SW5kZXhdLnNsb3dQYXRoVGFyZ2V0ID0gc2xvd1BhdGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctYnJlYWsuanMg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctYnJlYWsuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWVlNjRjYWZlZWJjZmY3ODQzYWM1N2Q5MTI1NGViNjNi
NWJiZDYzMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1icmVhay5qcwpAQCAtMCwwICsxLDI1IEBACitm
dW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT09
IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVh
bCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5hbWUsIHZhbHVlKQoreworICAgIG9i
amVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNzaWduKTsKKwordmFyIHN0cmluZyA9
ICdoZWxsbyc7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2YXIgb2Jq
ZWN0ID0ge307CisgICAgaWYgKGkgPT09IDEwMDAwKSB7CisgICAgICAgIGFzc2lnbihvYmplY3Qs
IDQyLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdFs0Ml0sIDQyKTsKKyAgICAgICAgc2hv
dWxkQmUob2JqZWN0LmhlbGxvLCB1bmRlZmluZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFz
c2lnbihvYmplY3QsIHN0cmluZywgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rbc3RyaW5n
XSwgNDIpOworICAgIH0KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWdlbmVyYXRlZC5qcyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmF0
ZWQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzFmNDNhZDNiMDUyZWM1MmZjZDU4M2Y5NzY5NDA1YzUxMDQyNTFh
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmF0ZWQuanMKQEAgLTAsMCArMSwzNCBAQAorZnVu
Y3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9PSBl
eHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwp
OworfQorCitmdW5jdGlvbiBnZW4xKHZhbHVlKQoreworICAgIHJldHVybiAnaGUnICsgdmFsdWU7
Cit9Citub0lubGluZShnZW4xKTsKKworZnVuY3Rpb24gZ2VuMih2YWx1ZSkKK3sKKyAgICByZXR1
cm4gdmFsdWUgKyAnbGQnOworfQorbm9JbmxpbmUoZ2VuMik7CisKK2Z1bmN0aW9uIGFzc2lnbihv
YmplY3QsIG5hbWUsIHZhbHVlKQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9J
bmxpbmUoYXNzaWduKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAg
dmFyIG9iamVjdCA9IHt9OworICAgIGlmIChpICUgMiA9PT0gMCkgeworICAgICAgICBhc3NpZ24o
b2JqZWN0LCBnZW4xKCdsbG8nKSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QuaGVsbG8s
IDQyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBnZW4yKCd3b3InKSwg
NDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Qud29ybGQsIDQyKTsKKyAgICB9Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0
aC1zdHJpbmctZ2VuZXJpYy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmljLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2ZmY4MTE2MDQ2
MjllNmU3YjZjOGE4Njg4NjI4OGI2Y2MxOTE5NTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJp
Yy5qcwpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVk
KQoreworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3Qs
IG5hbWUsIHZhbHVlKQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUo
YXNzaWduKTsKKwordmFyIHN0cmluZyA9ICdoZWxsbyc7Citmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAxOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0ID0ge307CisgICAgaWYgKGkgPT09IDEwMDAwKSB7
CisgICAgICAgIGFzc2lnbihvYmplY3QsICd0ZXN0aW5nJywgNDIpOworICAgICAgICBzaG91bGRC
ZShvYmplY3QudGVzdGluZywgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QuaGVsbG8sIHVu
ZGVmaW5lZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXNzaWduKG9iamVjdCwgc3RyaW5nLCA0
Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdFtzdHJpbmddLCA0Mik7CisgICAgfQorfQorCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwt
d2l0aC1zeW1ib2wtYnJlYWsuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtYnJlYWsuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDU0ODUxMTE0NDUz
YTQ0YTAyZTg4NTg1NTRiZjE2ZjNlNDdhNTcwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVhay5q
cwpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4cGVjdGVkKQor
eworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihvYmplY3QsIG5h
bWUsIHZhbHVlKQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9JbmxpbmUoYXNz
aWduKTsKKwordmFyIGtleSA9IFN5bWJvbCgpOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMTsg
KytpKSB7CisgICAgdmFyIG9iamVjdCA9IHt9OworICAgIGlmIChpID09PSAxMDAwMCkgeworICAg
ICAgICB2YXIga2V5MiA9IDQyOworICAgICAgICBhc3NpZ24ob2JqZWN0LCBrZXkyLCA0Mik7Cisg
ICAgICAgIHNob3VsZEJlKG9iamVjdFtrZXkyXSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmpl
Y3Rba2V5XSwgdW5kZWZpbmVkKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NpZ24ob2JqZWN0
LCBrZXksIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0W2tleV0sIDQyKTsKKyAgICB9Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12
YWwtd2l0aC1zeW1ib2wtZ2VuZXJpYy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1nZW5lcmljLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVmYzRk
MThkNDAxZmE3MGYwMWM5ODg4MTA4M2NlMDBiMzMyZTc1MTAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wt
Z2VuZXJpYy5qcwpAQCAtMCwwICsxLDI1IEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4
cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIGFzc2lnbihv
YmplY3QsIG5hbWUsIHZhbHVlKQoreworICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlOworfQorbm9J
bmxpbmUoYXNzaWduKTsKKwordmFyIGtleSA9IFN5bWJvbCgpOworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMTsgKytpKSB7CisgICAgdmFyIG9iamVjdCA9IHt9OworICAgIGlmIChpID09PSAxMDAw
MCkgeworICAgICAgICB2YXIga2V5MiA9IFN5bWJvbCgpOworICAgICAgICBhc3NpZ24ob2JqZWN0
LCBrZXkyLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdFtrZXkyXSwgNDIpOworICAgICAg
ICBzaG91bGRCZShvYmplY3Rba2V5XSwgdW5kZWZpbmVkKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBhc3NpZ24ob2JqZWN0LCBrZXksIDQyKTsKKyAgICAgICAgc2hvdWxkQmUob2JqZWN0W2tleV0s
IDQyKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMWQ1MGE4MzdmYzYxZGQ4MDcwOTZkODIxMGIwZWRmZmUx
YzVkMGM4Mi4uY2E0NmNmMTg4N2Y0ZjFkZmI5YTYwZTFjNTBlMDhkN2RlZGViYjVmYyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDY1IEBACisyMDE1LTA4LTA5ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgorCisgICAgICAgIEludHJvZHVjZSBwdXRfYnlfaWQgbGlrZSBJQyBpbnRvIHB1
dF9ieV92YWwgd2hlbiB0aGUgZ2l2ZW4gbmFtZSBpcyBTdHJpbmcgb3IgU3ltYm9sCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc3NjAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3ludGhldGljIHRl
c3RzIGZvciBwdXQtYnktdmFsLiBKdXN0IG1ha2UgcHV0LWJ5LWlkIHRlc3RzIHVzaW5nIHN5bWJv
bCAvIHN0cmluZy4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQt
Ynktb2Zmc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZm9sZC1wdXQtYnkt
dmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1t
dWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5s
aW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10
cmFuc2l0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5saW5lZC1wdXQt
YnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9u
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZh
bC13aXRoLXN0cmluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
cG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwt
d2l0aC1zeW1ib2wuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVw
bGFjZS1hbmQtdHJhbnNpdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1
dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0
bHktcG9seW1vcnBoaWMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNs
aWdodGx5LXBvbHltb3JwaGljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9m
ZnNldC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoZnUpOgorICAgICAgICAo
YmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwt
d2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qczogQWRkZWQuCisgICAgICAgIChm
b28pOgorICAgICAgICAoZnUpOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoRm9vKToKKyAgICAgICAgKiBqcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNp
dGlvbi5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoRm9vKToKKyAgICAgICAg
KiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12
YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRs
eS1wb2x5bW9ycGhpYy5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAg
ICAgICAoYmFyKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanM6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHkt
cG9seW1vcnBoaWMuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAg
ICAgKGJhcik6CisKIDIwMTUtMDgtMDcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBUZXN0IGdhcmRlbmluZwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGkt
cHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQt
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mOWQzNzZmNzYyNzlmOGMzNmM2OWYyMGEzMzUxNzhmYTAwNjc3Y2I3Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwt
d2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1w
dXQtYnktb2Zmc2V0CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnkt
b2Zmc2V0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQ1MjM1NzBlNjRhZTliM2MzYTM0MWIwNGJkZjZlN2Yz
M2NiOTA2MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApAQCAtMCww
ICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0
cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYxN2RjZTNiNGYyNzQ2YjQ0ODAzMjk4MzkxNzQ0NDgyYWU5YTJiMmEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10
by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Zm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lYTkyNzcwODQzYmRiYWQwYzYzZWI2OWVjNmQ0NGNkYWIxMzE0NjVlCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0
aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5l
ZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlv
bi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTEzYmU2ZjJkMDgwNjY3Y2NhOTkzMjkwYzcyMTNi
NmI2OWRkMDE5OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5s
aW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTAgQEAKK0pTUmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJh
bnNpdGlvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12
YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmI5MDMyNmE0MzRkOTZjZDQwMDY5Y2YzNGI3ZTQzZDQ1NzIzOGY3OTkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmlu
Zy10cmFuc2l0aW9uLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5n
LXRyYW5zaXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJh
bnNpdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MzRkNWY1YmRjN2EzMGQwNGI3YzQxYjM0NjFlM2MwM2NlZTlhYTc0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wt
dHJhbnNpdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lubGlu
ZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC10cmFuc2l0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFkZTRlOWY4NTQ0MDk2YTUyMzA4MWUyYzY1
NTQ0M2Y4Njk1NDAyMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
aW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uaHRtbApAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9p
bmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHlt
b3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mMDczYzE5OTMwM2NlMzQ3NDJkYTg1ZTgxOTU5YjA4N2E5MDM3ZTU1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQt
YnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jl
c3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZworCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0bWwgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42NDk5MjU4ZjJlMmVkZWQxZWRmNDNmMGEzZDMyNzcwNjhlMjAzMmQ1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZh
bC13aXRoLXN0cmluZy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1i
b2wtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQt
YnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDg0NTUxNDJlMWFh
YTljZDUxN2UzZTc5ZTNiMmRlZWY2NTRkM2VkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbAorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1w
dXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHlt
b3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzJjZTgwN2Ux
Nzc5ZTA5ZmJhZjFiN2M2NzEwYjY2ZmE0Y2ZkNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwK
QEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3Jp
cHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1
dC1ieS12YWwtd2l0aC1zdHJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzdlMjYx
Yjc3MmJlMDU4NTc0NGRmYjRiNDFjYmU3MTUyOGUzYzFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZworCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2Ut
YW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQt
YnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNlMjQ5MzM0NWE4NTA2OTU0Y2JiODM3MTZhODk0ZTI5ZTBhMmI3OTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJl
cGxhY2UtYW5kLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZGViYjFmNzM2NzFiODRhN2ZjYTU4M2E5Yzc4NTI1MjlkNzFmODg3MAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNl
LWFuZC10cmFuc2l0aW9uLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBs
YWNlLWFuZC10cmFuc2l0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGln
aHRseS1wb2x5bW9ycGhpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1
dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQyZDhmZTIxZTg0ZGMwM2M5ZjA3MjQwNjIxZjAxOTY2ZmRkMjhiNmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pT
UmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0
bHktcG9seW1vcnBoaWMuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13
aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmM2RkN2Y3
MmRkOWE2MTY1MDcwODE3MjJiYTdlNWU4ODAyZWI3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1v
cnBoaWMuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHlt
b3JwaGljLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sIGIvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWE3
YmI5ZTJkMDViNWQwNTM1M2I2MmQ3YzljMWE3YzI2NTMyNGQzNgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sCkBAIC0w
LDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VO
Ij4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRl
c3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWQwNWMyNWNhNjFmOWE2MTFmYTVmNmIw
NmU2MjUzMmY2ZTE3MmMzZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wKKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTNiOTQ1
ODU2ZjRiMWY4ZDlmZjEzMjFmYWU3NmI1MWQzYmNlNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRy
YW5zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnkt
dmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0
aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wt
cmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3NWYyNjYwOGRlOTUxMmE4
ZjRiYWMzMzYzMWFlNWNmNzBhOWU5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5o
dG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFRE
IEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlv
bi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmM1ZmNh
NTc5NDUyZGQ0MDAyZGRlZGZjZmQ1NDE2NGQ0YTM3M2ZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHlt
b3JwaGljLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcHV0LWJ5LXZh
bC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYworCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmh0
bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0
bHktcG9seW1vcnBoaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDA0NjU3MjUyNTAxNDA2ZjI3YzA3MjRh
OWRiZDQwYWU1YWU4ODJjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmh0bWwKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMTI4YmNjZDRiZDQ3NDRjZGNh
MTdjYmVhMGM1YjM1NDBhNTA4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1v
ZmZzZXQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI5YWRiMjk1Y2NlNGI0ZDczNzQ3ZTJiMjk1MjcwNDVkMzIx
OWVmNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmpz
CkBAIC0wLDAgKzEsNDcgQEAKK3ZhciBlID0gImUiLCBmID0gImYiLCBnID0gImciOworZnVuY3Rp
b24gZm9vKG8pIHsKKyAgICBvW2ZdID0gMTsKK30KKworZnVuY3Rpb24gZnUobykgeworICAgIG9b
ZV0gPSAyOworfQorCitmdW5jdGlvbiBiYXIoZnVuYywgbykgeworICAgIGZ1bmMobyk7Cit9CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBv
WyJpIiArIGldID0gNDI7CisgICAgZm9vKG8pOworICAgIGZ1KHtbZl06MSwgW2VdOjJ9KTsKKyAg
ICBmdSh7W2VdOjEsIFtmXToyLCBbZ106M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDA7ICsraSkgeworICAgIGJhcihmb28sIHtbZl06MX0pOworICAgIGJhcihmdW5jdGlvbigp
IHsgfSwgbnVsbCk7CisgICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9
CisgICAgCisoZnVuY3Rpb24oZnVuYywgbywgcCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAg
IHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAg
ICAgICBmdShvKTsKKyAgICAgICAgYmFyKGZ1bmMsIG8pOworICAgICAgICB2YXIgdG1wID0gbzsK
KyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChvW2VdICE9
IDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZTogIiArIG9bZV07Cisg
ICAgaWYgKG9bZl0gIT0gMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5m
OiAiICsgb1tmXTsKKyAgICBpZiAocFtlXSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZSBpbiBwLmU6ICIgKyBwW2VdOworICAgIGlmIChwW2ZdICE9IDEpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIGluIHAuZjogIiArIHBbZl07Cit9KShmb28sIHtbZl06NDIs
IFtlXToyM30sIHtbZV06MjMsIFtmXTo0MiwgW2ddOjEwMH0pOworCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1i
b2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zm
c2V0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjhlMDI2MTUzYTk1ZDhiYmRhYjI0NjBmMDMwZDA5YTAzOWU3ZTE4
ODQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcwpA
QCAtMCwwICsxLDQ3IEBACit2YXIgZSA9IFN5bWJvbCgpLCBmID0gU3ltYm9sKCksIGcgPSBTeW1i
b2woKTsKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgb1tmXSA9IDE7Cit9CisKK2Z1bmN0aW9uIGZ1
KG8pIHsKKyAgICBvW2VdID0gMjsKK30KKworZnVuY3Rpb24gYmFyKGZ1bmMsIG8pIHsKKyAgICBm
dW5jKG8pOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIHZhciBv
ID0ge307CisgICAgb1siaSIgKyBpXSA9IDQyOworICAgIGZvbyhvKTsKKyAgICBmdSh7W2ZdOjEs
IFtlXToyfSk7CisgICAgZnUoe1tlXToxLCBbZl06MiwgW2ddOjN9KTsKK30KKyAgICAKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICBiYXIoZm9vLCB7W2ZdOjF9KTsKKyAgICBi
YXIoZnVuY3Rpb24oKSB7IH0sIG51bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQy
IH0sIG51bGwpOworfQorICAgIAorKGZ1bmN0aW9uKGZ1bmMsIG8sIHApIHsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICAgICAgZnUobyk7CisgICAgICAgIGJhcihmdW5jLCBvKTsKKyAgICAgICAg
dmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAg
ICBpZiAob1tlXSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6
ICIgKyBvW2VdOworICAgIGlmIChvW2ZdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlIGluIG8uZjogIiArIG9bZl07CisgICAgaWYgKHBbZV0gIT0gMikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gcC5lOiAiICsgcFtlXTsKKyAgICBpZiAocFtmXSAhPSAx
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmY6ICIgKyBwW2ZdOworfSko
Zm9vLCB7W2ZdOjQyLCBbZV06MjN9LCB7W2VdOjIzLCBbZl06NDIsIFtnXToxMDB9KTsKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQt
YnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43YmY0MmVmNDllZDE4ODAyM2ExNDQ1NmFhODViMTQxZjYzOTM5YWUxCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5s
aW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uanMKQEAgLTAsMCArMSw0MCBA
QAordmFyIHggPSAieCI7Cit2YXIgeSA9ICJ5IjsKK3ZhciBhID0gImEiOwordmFyIGIgPSAiYiI7
Cit2YXIgYyA9ICJjIjsKK3ZhciBkID0gImQiOwordmFyIGUgPSAiZSI7Cit2YXIgZiA9ICJmIjsK
K3ZhciBnID0gImciOwordmFyIGggPSAiaCI7Cit2YXIgaSA9ICJpIjsKKworZnVuY3Rpb24gZm9v
KG8pIHsKKyAgICBvW3hdID0gMTsKKyAgICBvW3ldID0gMjsKKyAgICBvW2FdID0gMzsKKyAgICBv
W2JdID0gNDsKKyAgICBvW2NdID0gNTsKKyAgICBvW2RdID0gNjsKKyAgICBvW2VdID0gNzsKKyAg
ICBvW2ZdID0gODsKKyAgICBvW2ddID0gOTsKKyAgICBvW2hdID0gMTA7CisgICAgb1tpXSA9IDEx
OworfQorCitmdW5jdGlvbiBGb28oKSB7CisgICAgZm9vKHRoaXMpOworfQorCit2YXIgcmVzdWx0
ID0gMDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIGZvbyh7W2Zd
OjQyfSk7CisgICAgcmVzdWx0ICs9IChuZXcgRm9vKCkpW3hdOworfQorCitpZiAocmVzdWx0ICE9
IDEwMDAwMCkKKyAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNzcxZTdiMzA5Njk0N2IzOWY0ODI4NDlhNmQ0MWZiOTYyNmU1MGJhCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1w
dXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uanMKQEAgLTAsMCArMSw0MCBAQAordmFy
IHggPSBTeW1ib2woKTsKK3ZhciB5ID0gU3ltYm9sKCk7Cit2YXIgYSA9IFN5bWJvbCgpOwordmFy
IGIgPSBTeW1ib2woKTsKK3ZhciBjID0gU3ltYm9sKCk7Cit2YXIgZCA9IFN5bWJvbCgpOwordmFy
IGUgPSBTeW1ib2woKTsKK3ZhciBmID0gU3ltYm9sKCk7Cit2YXIgZyA9IFN5bWJvbCgpOwordmFy
IGggPSBTeW1ib2woKTsKK3ZhciBpID0gU3ltYm9sKCk7CisKK2Z1bmN0aW9uIGZvbyhvKSB7Cisg
ICAgb1t4XSA9IDE7CisgICAgb1t5XSA9IDI7CisgICAgb1thXSA9IDM7CisgICAgb1tiXSA9IDQ7
CisgICAgb1tjXSA9IDU7CisgICAgb1tkXSA9IDY7CisgICAgb1tlXSA9IDc7CisgICAgb1tmXSA9
IDg7CisgICAgb1tnXSA9IDk7CisgICAgb1toXSA9IDEwOworICAgIG9baV0gPSAxMTsKK30KKwor
ZnVuY3Rpb24gRm9vKCkgeworICAgIGZvbyh0aGlzKTsKK30KKwordmFyIHJlc3VsdCA9IDA7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICBmb28oe1tmXTo0Mn0pOwor
ICAgIHJlc3VsdCArPSAobmV3IEZvbygpKVt4XTsKK30KKworaWYgKHJlc3VsdCAhPSAxMDAwMDAp
CisgICAgdGhyb3cgIkJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0
aC1zdHJpbmcuanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9y
cGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjMjJlOGMwMGRjYzk1
MzZmNWU4Njc3N2ZjNmE1ZjgxMGJjZWY3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLmpzCkBAIC0wLDAgKzEsMjYgQEAKK3ZhciBmID0gImYiLCBnID0gImciLCBoID0gImgiOwor
CitmdW5jdGlvbiBmb28obykgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisg
ICAgICAgIG9bZl0gPSAob1tmXSB8IDApICsgNDI7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0OworICAgIGlm
ICgoaSAlIDMpID09IDApCisgICAgICAgIG9iamVjdCA9IHtbZ106M307CisgICAgZWxzZSBpZiAo
KGkgJSAzKSA9PSAxKQorICAgICAgICBvYmplY3QgPSB7W2ZdOjEsIFtnXToyfTsKKyAgICBlbHNl
IGlmICgoaSAlIDMpID09IDIpCisgICAgICAgIG9iamVjdCA9IHtbZ106MSwgW2ZdOjJ9OworICAg
IGZvbyhvYmplY3QpOworICAgIGlmIChvYmplY3RbZl0gIT0gNDIgKiAxMDAgKyAoaSAlIDMpKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyBv
YmplY3RbZl07Cit9CisKK3ZhciByID0ge1tnXTozLCBbaF06NCwgW2ZdOjV9OworZm9vKHIpOwor
aWYgKHJbZl0gIT0gNSArIDQyICogMTAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBh
dCBlbmQ6ICIgKyByW2ZdOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qcyBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1z
eW1ib2wuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTcyZDBlODkwMzIzZTdhNjIzYWVjZWEwNTQ0YTljOTEwMTI4
ZDRjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKQEAgLTAsMCArMSwyNiBA
QAordmFyIGYgPSBTeW1ib2woKSwgZyA9IFN5bWJvbCgpLCBoID0gU3ltYm9sKCk7CisKK2Z1bmN0
aW9uIGZvbyhvKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAg
b1tmXSA9IChvW2ZdIHwgMCkgKyA0MjsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciBvYmplY3Q7CisgICAgaWYgKChpICUg
MykgPT0gMCkKKyAgICAgICAgb2JqZWN0ID0ge1tnXTozfTsKKyAgICBlbHNlIGlmICgoaSAlIDMp
ID09IDEpCisgICAgICAgIG9iamVjdCA9IHtbZl06MSwgW2ddOjJ9OworICAgIGVsc2UgaWYgKChp
ICUgMykgPT0gMikKKyAgICAgICAgb2JqZWN0ID0ge1tnXToxLCBbZl06Mn07CisgICAgZm9vKG9i
amVjdCk7CisgICAgaWYgKG9iamVjdFtmXSAhPSA0MiAqIDEwMCArIChpICUgMykpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjogIiArIG9iamVjdFtm
XTsKK30KKwordmFyIHIgPSB7W2ddOjMsIFtoXTo0LCBbZl06NX07Citmb28ocik7CitpZiAocltm
XSAhPSA1ICsgNDIgKiAxMDApCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDog
IiArIHJbZl07CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMgYi9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJl
cGxhY2UtYW5kLXRyYW5zaXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2IyMzM3Yzk0M2Q0YmNhMTY4ZDk0
NjEwMDA3YjFkODA4YzhlZDlhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJh
bnNpdGlvbi5qcwpAQCAtMCwwICsxLDE0IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGYgPSAi
ZiIsIGcgPSAiZyI7CisgICAgdmFyIG87CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICAg
IG8gPSB7W2ZdOiAxfTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbyA9IHtbZl06IDEsIFtn
XTogMn07CisgICAgICAgIG9bZ10gPSBpOworICAgIH0KKyAgICBpZiAob1tnXSAhPSBuIC0gMSkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgb2Ygby5nOiAiICsgb1tnXTsKK30pKCk7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLmpzIGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5
bW9ycGhpYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YWNjNDFkZGU0OGQxOGE3ZjcwOTI0MTQ5ZmQwNTIyNWI5
ZjM4YTY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcwpAQCAt
MCwwICsxLDE2IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGYgPSAiZiIsIGcgPSAiZyI7Cisg
ICAgdmFyIG8gPSB7W2ZdOiAxLCBbZ106IDJ9OworICAgIHZhciBwID0ge1tmXTogMX07CisgICAg
dmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAg
ICAgIG9bZl0gPSBpOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAg
ICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChvW2ZdICE9IG4gLSAyKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBvZiBvLmY6ICIgKyBvW2ZdOworICAgIGlmIChwW2ZdICE9IG4g
LSAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IHZhZCB2YWx1ZSBvZiBwLmY6ICIgKyBwW2ZdOwor
fSkoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1
dC1ieS12YWwtd2l0aC1zdHJpbmcuanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2M2ZhMTAwNGQ1Zjkx
YmNkZWM5OGZlYWQ0MmU3ZDRjNWFmMGI1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzCkBAIC0w
LDAgKzEsMjAgQEAKK3ZhciBmID0gImYiOworCitmdW5jdGlvbiBmb28obykgeworICAgIG9bZl0g
PSA0MjsKK30KKworZnVuY3Rpb24gYmFyKG8pIHsKKyAgICBvW2ZdID0gODQ7Cit9CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBmb28o
byk7CisgICAgaWYgKG9bZl0gIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogZXhwZWN0ZWQg
NDIsIGdvdCAiICsgb1tmXTsKKyAgICBiYXIobykKKyAgICBpZiAob1tmXSAhPSA4NCkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBleHBlY3RlZCA4NCwgZ290ICIgKyBvW2ZdOworfQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRp
b24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uY2E2YTIzYmI5ODM3MDJhMzA4MDU2OTY5MWQyY2IxZTlmMDc3NmY3
MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcwpAQCAtMCww
ICsxLDE0IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGYgPSBTeW1ib2woKSwgZyA9IFN5bWJv
bCgpOworICAgIHZhciBvOworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgeworICAgICAgICBpZiAoaSAmIDEpCisgICAgICAgICAgICBvID0ge1tm
XTogMX07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG8gPSB7W2ZdOiAxLCBbZ106IDJ9Owor
ICAgICAgICBvW2ddID0gaTsKKyAgICB9CisgICAgaWYgKG9bZ10gIT0gbiAtIDEpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIG8uZzogIiArIG9bZ107Cit9KSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZWU1MGQ5YTUwZjJiNDZmNWE2MjM1MWEwNDk2MTI4NGEyZWNkNDZkMAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1
dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanMKQEAgLTAsMCArMSwx
NiBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBmID0gU3ltYm9sKCksIGcgPSBTeW1ib2woKTsK
KyAgICB2YXIgbyA9IHtbZl06IDEsIFtnXTogMn07CisgICAgdmFyIHAgPSB7W2ZdOiAxfTsKKyAg
ICB2YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAg
ICAgICAgb1tmXSA9IGk7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAg
ICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKG9bZl0gIT0gbiAtIDIpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIG9mIG8uZjogIiArIG9bZl07CisgICAgaWYgKHBbZl0gIT0g
biAtIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogdmFkIHZhbHVlIG9mIHAuZjogIiArIHBbZl07
Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU4OGJhNzhkOGZj
ZmJhZmQ5OTEzMzU3NzA1YzQ2YzQ3NzBkNWZlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKQEAg
LTAsMCArMSwyMCBAQAordmFyIGYgPSBTeW1ib2woIkNvY29hIik7CisKK2Z1bmN0aW9uIGZvbyhv
KSB7CisgICAgb1tmXSA9IDQyOworfQorCitmdW5jdGlvbiBiYXIobykgeworICAgIG9bZl0gPSA4
NDsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9
IHt9OworICAgIGZvbyhvKTsKKyAgICBpZiAob1tmXSAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBleHBlY3RlZCA0MiwgZ290ICIgKyBvW2ZdOworICAgIGJhcihvKQorICAgIGlmIChvW2Zd
ICE9IDg0KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGV4cGVjdGVkIDg0LCBnb3QgIiArIG9bZl07
Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258791</attachid>
            <date>2015-08-11 18:48:16 -0700</date>
            <delta_ts>2015-08-20 12:40:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-147760-20150811184801.patch</filename>
            <type>text/plain</type>
            <size>84579</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg4MzExCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
NzUzYWZiMjQ4YTY3MGE4NjIyMDcxZjE5ZDY1ZDA0OWFjZjJhNzFkLi4wNWJiZWUwMTBkZTkwM2I5
MGIwNGQwODhiYmQ0OTU1YzVlNmNkYmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAxNS0wOC0xMSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgcHV0X2J5X2lkIGxpa2UgSUMgaW50byBwdXRfYnlf
dmFsIHdoZW4gdGhlIGdpdmVuIG5hbWUgaXMgU3RyaW5nIG9yIFN5bWJvbAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NzYwCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHB1dF9i
eV9pZCBJQyB0byBwdXRfYnlfdmFsIGJ5IGNhY2hpbmcgdGhlIG9uZSBjYW5kaWRhdGUgaWQsCisg
ICAgICAgIGl0IGlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSBnZXRfYnlfdmFsIElDIGV4dGVuc2lv
bi4KKyAgICAgICAgSXQgd2lsbCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiBFUzYgU3ltYm9scyBhbmQg
RVM2IGNvbXB1dGVkIHByb3BlcnRpZXMgaW4gdGhlIG9iamVjdCBsaXRlcmFscy4KKworICAgICAg
ICBJbiB0aGlzIHBhdGNoLCB3ZSBsZXZlcmFnZSB0aGUgZXhpc3RpbmcgQ2hlY2tJZGVudCBhbmQg
UHV0QnlJZCAvIFB1dEJ5VmFsIGluIERGRywKKyAgICAgICAgc28gdGhpcyBwYXRjaCBkb2VzIG5v
dCBjaGFuZ2UgRlRMIGJlY2F1c2UgdGhlIGFib3ZlIG9wZXJhdGlvbnMgYXJlIGFscmVhZHkgc3Vw
cG9ydGVkIGluIEZUTC4KKworICAgICAgICBBbmQgdGhpcyBwYXRjaCBhbHNvIGluY2x1ZGVzIHJl
ZmFjdG9yaW5nIHRvIGxldmVyYWdlIGJ5VmFsSW5mby0+c2xvd1BhdGhDb3VudCBpbiB0aGUgY2Fj
aGVkIElkIHBhdGguCisKKyAgICAgICAgUGVyZm9ybWFuY2UgcmVzdWx0cyByZXBvcnQgdGhlcmUn
cyBubyByZWdyZXNzaW9uIGluIHRoZSBleGlzdGluZyB0ZXN0cy4gQW5kIGluIHRoZSBzeW50aGV0
aWMKKyAgICAgICAgYmVuY2htYXJrcyBjcmVhdGVkIGJ5IG1vZGlmeWluZyBwdXQtYnktaWQgdG8g
cHV0LWJ5LXZhbCwgd2UgY2FuIHNlZSBzaWduaWZpY2FudCBwZXJmb3JtYW5jZQorICAgICAgICBp
bXByb3ZlbWVudHMgdXAgdG8gMTMuOXguCisKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpnZXRCeVZhbCk6CisgICAgICAgIChKU0M6OnRyeUdldEJ5VmFs
T3B0aW1pemUpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2V0QnlWYWxX
aXRoQ2FjaGVkSWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
SWRlbnRpZmllckNoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
VmFsV2l0aENhY2hlZElkKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRQdXRCeVZhbFdpdGhDYWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJp
bmctYnJlYWsuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoYXNzaWdu
KToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmF0
ZWQuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAoZ2VuMSk6CisgICAg
ICAgIChnZW4yKToKKyAgICAgICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1
dC1ieS12YWwtd2l0aC1zdHJpbmctZ2VuZXJpYy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRC
ZSk6CisgICAgICAgIChhc3NpZ24pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLWJyZWFrLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAg
ICAgKGFzc2lnbik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1i
b2wtZ2VuZXJpYy5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgIChhc3Np
Z24pOgorCiAyMDE1LTA4LTExICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgog
CiAgICAgICAgIE1ha2UgQVNhbiBidWlsZCBub3QgZGVwZW5kIG9uIGFzYW4ueGNjb25maWcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAppbmRl
eCBjYzVkYTNiMTliNzllN2YxNmY2OTE2OTcxMDYzM2VmZDcxZTRmMTQ3Li5iZmEyOWU0MjFlMDZl
MTYxYmVkNzMzY2UyZTY0NzFiMjJkYTFhZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCkBAIC0xMzQsNiArMTM0LDEzIEBAIFB1dEJ5
SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIFN0dWJJbmZvTWFwJiBtCiB9CiAKICNpZiBFTkFCTEUoSklUKQorUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpJVExvY2tl
ciYgbG9ja2VyLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQor
eworICAgIHJldHVybiBjb21wdXRlRm9yU3R1YkluZm8oCisgICAgICAgIGxvY2tlciwgYmFzZWxp
bmVCbG9jaywgc3R1YkluZm8sIHVpZCwKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVF
eGl0U2l0ZURhdGEobG9ja2VyLCBiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgpKTsKK30KKwogUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1Yklu
Zm8oCiAgICAgY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkLCBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNhbGxFeGl0U2l0ZURh
dGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaApp
bmRleCA2NTJjY2MxOGEwMmZiMzkxM2U1NmE5YTBhMmE4YjU0NTE1ZDk5MDQ0Li5iMDQ3MzQ3MmE3
MTg2ZjdjNTVjMGFhMDYyYzFhOGNjYjE3NzcxYjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmgKQEAgLTc0LDYgKzc0LDEwIEBAIGNsYXNzIFB1
dEJ5SWRTdGF0dXMgewogICAgIHN0YXRpYyBQdXRCeUlkU3RhdHVzIGNvbXB1dGVGb3IoSlNHbG9i
YWxPYmplY3QqLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCBi
b29sIGlzRGlyZWN0KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFN0YXR1cyBjb21wdXRlRm9y
KENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgQ29kZUJsb2NrKiBkZmdCbG9jaywgU3R1YkluZm9N
YXAmIGJhc2VsaW5lTWFwLCBTdHViSW5mb01hcCYgZGZnTWFwLCBDb2RlT3JpZ2luLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKTsKKworI2lmIEVOQUJMRShKSVQpCisgICAgc3RhdGljIFB1dEJ5SWRT
dGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImLCBDb2Rl
QmxvY2sqIGJhc2VsaW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7CisjZW5kaWYKICAgICAKICAgICBTdGF0ZSBzdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggNzE1YTZhNWM2MjA0YzA2M2FjZmFkNjZl
OTAyMTk5Y2ZiMjA5MzlkMi4uZjc4ODNjN2JiMmNkYWQ1MGYzYjkyYzE4OWFjNzIyNTMzYmVkM2Jm
YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKQEAgLTM0MjAsMTggKzM0MjAsNDAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsX2RpcmVjdDoKICAg
ICAgICAgY2FzZSBvcF9wdXRfYnlfdmFsOiB7CiAgICAgICAgICAgICBOb2RlKiBiYXNlID0gZ2V0
KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Ci0KLSAg
ICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUpOwotICAgICAgICAgICAgCiAg
ICAgICAgICAgICBOb2RlKiBwcm9wZXJ0eSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTm9kZSogdmFsdWUgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoYmFzZSk7Ci0gICAgICAgICAgICBh
ZGRWYXJBcmdDaGlsZChwcm9wZXJ0eSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCh2YWx1
ZSk7Ci0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCgwKTsgLy8gTGVhdmUgcm9vbSBmb3IgcHJv
cGVydHkgc3RvcmFnZS4KLSAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKDApOyAvLyBMZWF2ZSBy
b29tIGZvciBsZW5ndGguCi0gICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3Bj
b2RlSUQgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3QgPyBQdXRCeVZhbERpcmVjdCA6IFB1dEJ5VmFs
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKDApKTsKKyAgICAgICAgICAgIGJv
b2wgaXNEaXJlY3QgPSBvcGNvZGVJRCA9PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKKyAgICAgICAg
ICAgIGJvb2wgY29tcGlsZWRBc1B1dEJ5SWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgQnlWYWxJbmZvKiBieVZh
bEluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX2J5VmFsSW5mb3MuZ2V0KENvZGVPcmlnaW4oY3Vy
cmVudENvZGVPcmlnaW4oKS5ieXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFdoZW4gdGhlIGJ5dGVjb2RlIGlzIG5vdCBjb21waWxlZCBpbiB0aGUgYmFzZWxpbmUgSklU
LCBieVZhbEluZm8gYmVjb21lcyBudWxsLgorICAgICAgICAgICAgICAgIC8vIEF0IHRoYXQgdGlt
ZSwgdGhlcmUgaXMgbm8gaW5mb3JtYXRpb24uCisgICAgICAgICAgICAgICAgaWYgKGJ5VmFsSW5m
byAmJiBieVZhbEluZm8tPnN0dWJJbmZvICYmICFieVZhbEluZm8tPnRvb2tTbG93UGF0aCAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgQmFkSWRlbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkQXNQdXRCeUlkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1f
Z3JhcGguaWRlbnRpZmllcnMoKS5lbnN1cmUoYnlWYWxJbmZvLT5jYWNoZWRJZC5pbXBsKCkpOwor
ICAgICAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVu
dGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworCisgICAgICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoQ2hlY2tJZGVudCwgT3BJbmZvKHVpZCksIHByb3BlcnR5KTsKKworICAgICAgICAgICAg
ICAgICAgICBQdXRCeUlkU3RhdHVzIHB1dEJ5SWRTdGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsIG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5VmFs
SW5mby0+c3R1YkluZm8sIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlUHV0QnlJZChiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YWx1ZSwgcHV0
QnlJZFN0YXR1cywgaXNEaXJlY3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKCFjb21waWxlZEFzUHV0QnlJZCkgeworICAgICAgICAgICAgICAg
IEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRd
LnUuYXJyYXlQcm9maWxlLCBBcnJheTo6V3JpdGUpOworCisgICAgICAgICAgICAgICAgYWRkVmFy
QXJnQ2hpbGQoYmFzZSk7CisgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQocHJvcGVydHkp
OworICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBhZGRWYXJBcmdDaGlsZCgwKTsgLy8gTGVhdmUgcm9vbSBmb3IgcHJvcGVydHkgc3RvcmFnZS4K
KyAgICAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZCgwKTsgLy8gTGVhdmUgcm9vbSBmb3IgbGVu
Z3RoLgorICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBpc0RpcmVjdCA/
IFB1dEJ5VmFsRGlyZWN0IDogUHV0QnlWYWwsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBP
cEluZm8oMCkpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9w
dXRfYnlfdmFsKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggODQxMWE3
ZWY2NWE5YzZiZGNjMTZiMzY0ZWIyOGU0MTAxNmI1ODU4Ni4uYzQ0ZmNjYTk5ZDI3ZjExZWFmMThj
YThhMmFlMzdiZGU4MWI2YTMzOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0yMzMsNiAr
MjMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxl
UHV0QnlWYWwoYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOwogICAgICAgICB9
CiAKKyAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKFZNKiB2
bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lKQorICAgICAgICB7CisgICAgICAgICAgICBKSVQgaml0KHZtLCBjb2RlQmxv
Y2spOworICAgICAgICAgICAgaml0Lm1fYnl0ZWNvZGVPZmZzZXQgPSBieVZhbEluZm8tPmJ5dGVj
b2RlSW5kZXg7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeVZhbFdpdGhDYWNo
ZWRJZChieVZhbEluZm8sIHJldHVybkFkZHJlc3MsIHB1dEtpbmQsIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIH0KKwogICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlSGFzSW5kZXhlZFByb3BlcnR5
KFZNKiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIEpJVCBqaXQodm0sIGNvZGVCbG9jayk7CkBAIC0yNjMsNiArMjcw
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeVZh
bChCeVZhbEluZm8qLCBSZXR1cm5BZGRyZXNzUHRyLCBKSVRBcnJheU1vZGUpOwogICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiwgUmV0dXJu
QWRkcmVzc1B0ciwgY29uc3QgSWRlbnRpZmllciYpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21w
aWxlUHV0QnlWYWwoQnlWYWxJbmZvKiwgUmV0dXJuQWRkcmVzc1B0ciwgSklUQXJyYXlNb2RlKTsK
KyAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5m
byosIFJldHVybkFkZHJlc3NQdHIsIFB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImKTsKIAogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFsSW5mbyosIFJl
dHVybkFkZHJlc3NQdHIsIEpJVEFycmF5TW9kZSk7CiAKQEAgLTM2Nyw3ICszNzUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChJ
bnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKICAg
ICAgICAgSnVtcExpc3QgZW1pdEZsb2F0VHlwZWRBcnJheUdldEJ5VmFsKEluc3RydWN0aW9uKiwg
UGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICAKLSAgICAg
ICAgLy8gUHJvcGVydHkgaXMgaW4gcmVnVDAsIGJhc2UgaXMgaW4gcmVnVDAuIHJlZ1QyIGNvbnRh
aW5zIGluZGVjaW5nIHR5cGUuCisgICAgICAgIC8vIFByb3BlcnR5IGlzIGluIHJlZ1QxLCBiYXNl
IGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRlY2luZyB0eXBlLgogICAgICAgICAvLyBU
aGUgdmFsdWUgdG8gc3RvcmUgaXMgbm90IHlldCBsb2FkZWQuIFByb3BlcnR5IGlzIGludC1jaGVj
a2VkIGFuZAogICAgICAgICAvLyB6ZXJvLWV4dGVuZGVkLiBCYXNlIGlzIGNlbGwgY2hlY2tlZC4g
U3RydWN0dXJlIGlzIGFscmVhZHkgcHJvZmlsZWQuCiAgICAgICAgIC8vIHJldHVybnMgdGhlIHNs
b3cgY2FzZXMuCkBAIC0zODgsNyArMzk2LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBK
dW1wTGlzdCBlbWl0SW50VHlwZWRBcnJheVB1dEJ5VmFsKEluc3RydWN0aW9uKiwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgVHlwZWRBcnJheVR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0Rmxv
YXRUeXBlZEFycmF5UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBl
LCBUeXBlZEFycmF5VHlwZSk7CiAKKyAgICAgICAgLy8gSWRlbnRpZmllciBjaGVjayBoZWxwZXIg
Zm9yIEdldEJ5VmFsIGFuZCBQdXRCeVZhbC4KKyAgICAgICAgdm9pZCBlbWl0SWRlbnRpZmllckNo
ZWNrKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBjb25zdCBJZGVudGlmaWVy
JiwgSnVtcExpc3QmIHNsb3dDYXNlcyk7CisKICAgICAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBl
bWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rpb24qLCBjb25zdCBJZGVudGlmaWVyJiwg
SnVtcCYgZmFzdERvbmVDYXNlLCBKdW1wJiBzbG93RG9uZUNhc2UsIEp1bXBMaXN0JiBzbG93Q2Fz
ZXMpOworICAgICAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJ
ZChJbnN0cnVjdGlvbiosIFB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImLCBKdW1wTGlzdCYgZG9u
ZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKTsKIAogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0
TW9kZSB7IE1heUJlRmluYWwsIEtub3duTm90RmluYWwgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggN2FlNDNmMGEwYTlhNWVhNzEyYzliYjA0
YzkyZDI2MDkyM2JkNzM1NC4uZjkwOWU2MTUwZTQ2ZWNiZDdkODdlZjVjODcwODkyMjNiZjA2ZDUz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBAIC00
NzgsMTAgKzQ3OCwxNiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0
b3JhZ2VBbmRGaW5pc2hQdXQoRXhlY1N0YXRlKiBleGVjLCBKU09iagogICAgIGJhc2UtPnB1dERp
cmVjdCh2bSwgb2Zmc2V0LCBKU1ZhbHVlOjpkZWNvZGUodmFsdWUpKTsKIH0KIAorQUxXQVlTX0lO
TElORSBzdGF0aWMgYm9vbCBpc1N0cmluZ09yU3ltYm9sKEpTVmFsdWUgdmFsdWUpCit7CisgICAg
cmV0dXJuIHZhbHVlLmlzU3RyaW5nKCkgfHwgdmFsdWUuaXNTeW1ib2woKTsKK30KKwogc3RhdGlj
IHZvaWQgcHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBK
U1ZhbHVlIHN1YnNjcmlwdCwgSlNWYWx1ZSB2YWx1ZSwgQnlWYWxJbmZvKiBieVZhbEluZm8pCiB7
CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52bSgpOwogICAgIGlmIChMSUtFTFkoc3Vic2NyaXB0
LmlzVUludDMyKCkpKSB7CisgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsK
ICAgICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAo
YmFzZVZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBh
c09iamVjdChiYXNlVmFsdWUpOwpAQCAtNDkzLDEzICs0OTksMTkgQEAgc3RhdGljIHZvaWQgcHV0
QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1
YnNjcmlwdCwKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBiYXNl
VmFsdWUucHV0QnlJbmRleChjYWxsRnJhbWUsIGksIHZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5pc1N0cmljdE1vZGUoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXV0byBwcm9wZXJ0
eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7Ci0gICAgICAgIGlmICghY2Fs
bEZyYW1lLT52bSgpLmV4Y2VwdGlvbigpKSB7IC8vIERvbid0IHB1dCB0byBhbiBvYmplY3QgaWYg
dG9TdHJpbmcgdGhyZXcgYW4gZXhjZXB0aW9uLgotICAgICAgICAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5pc1N0cmljdE1vZGUoKSk7
Ci0gICAgICAgICAgICBiYXNlVmFsdWUucHV0KGNhbGxGcmFtZSwgcHJvcGVydHksIHZhbHVlLCBz
bG90KTsKLSAgICAgICAgfQorICAgICAgICByZXR1cm47CiAgICAgfQorCisgICAgYXV0byBwcm9w
ZXJ0eSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGNhbGxGcmFtZSk7CisgICAgLy8gRG9uJ3Qg
cHV0IHRvIGFuIG9iamVjdCBpZiB0b1N0cmluZyB0aHJldyBhbiBleGNlcHRpb24uCisgICAgaWYg
KGNhbGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KGJ5VmFsSW5mby0+c3R1YkluZm8gJiYgKCFpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkgfHwg
YnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBwcm9wZXJ0eSkpCisgICAgICAgIGJ5VmFsSW5mby0+dG9v
a1Nsb3dQYXRoID0gdHJ1ZTsKKworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwg
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCkpOworICAgIGJhc2VWYWx1ZS5w
dXQoY2FsbEZyYW1lLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogfQogCiBzdGF0aWMgdm9pZCBk
aXJlY3RQdXRCeVZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IEpTVmFsdWUgc3Vic2NyaXB0LCBKU1ZhbHVlIHZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykK
QEAgLTUwNyw2ICs1MTksNyBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChDYWxsRnJhbWUq
IGNhbGxGcmFtZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgcwogICAgIGJvb2wgaXNT
dHJpY3RNb2RlID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAg
aWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAgICAgICAgLy8gRGVzcGl0ZSBp
dHMgbmFtZSwgSlNWYWx1ZTo6aXNVSW50MzIgd2lsbCByZXR1cm4gdHJ1ZSBvbmx5IGZvciBwb3Np
dGl2ZSBib3hlZCBpbnQzMl90OyBhbGwgdGhvc2UgdmFsdWVzIGFyZSB2YWxpZCBhcnJheSBpbmRp
Y2VzLgorICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAgIHVp
bnQzMl90IGluZGV4ID0gc3Vic2NyaXB0LmFzVUludDMyKCk7CiAgICAgICAgIEFTU0VSVChpc0lu
ZGV4KGluZGV4KSk7CiAgICAgICAgIGlmIChiYXNlT2JqZWN0LT5jYW5TZXRJbmRleFF1aWNrbHlG
b3JQdXREaXJlY3QoaW5kZXgpKSB7CkBAIC01MjMsNiArNTM2LDcgQEAgc3RhdGljIHZvaWQgZGly
ZWN0UHV0QnlWYWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBK
U1ZhbHVlIHMKICAgICAgICAgZG91YmxlIHN1YnNjcmlwdEFzRG91YmxlID0gc3Vic2NyaXB0LmFz
RG91YmxlKCk7CiAgICAgICAgIHVpbnQzMl90IHN1YnNjcmlwdEFzVUludDMyID0gc3RhdGljX2Nh
c3Q8dWludDMyX3Q+KHN1YnNjcmlwdEFzRG91YmxlKTsKICAgICAgICAgaWYgKHN1YnNjcmlwdEFz
RG91YmxlID09IHN1YnNjcmlwdEFzVUludDMyICYmIGlzSW5kZXgoc3Vic2NyaXB0QXNVSW50MzIp
KSB7CisgICAgICAgICAgICBieVZhbEluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgICAg
ICAgICBiYXNlT2JqZWN0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIHN1YnNjcmlwdEFzVUlu
dDMyLCB2YWx1ZSwgMCwgaXNTdHJpY3RNb2RlID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJvdyA6
IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CkBAIC01MzMsMjYgKzU0NywzNCBAQCBzdGF0aWMgdm9pZCBkaXJlY3RQdXRCeVZhbChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUgcwogICAg
IGlmIChjYWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChPcHRpb25hbDx1aW50MzJfdD4gaW5kZXggPSBwYXJzZUluZGV4KHByb3BlcnR5KSkKKyAg
ICBpZiAoT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eSkpIHsK
KyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgICAgICBiYXNlT2Jq
ZWN0LT5wdXREaXJlY3RJbmRleChjYWxsRnJhbWUsIGluZGV4LnZhbHVlKCksIHZhbHVlLCAwLCBp
c1N0cmljdE1vZGUgPyBQdXREaXJlY3RJbmRleFNob3VsZFRocm93IDogUHV0RGlyZWN0SW5kZXhT
aG91bGROb3RUaHJvdyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KGJhc2VPYmplY3QsIGlzU3RyaWN0TW9kZSk7Ci0gICAgICAgIGJhc2VPYmplY3QtPnB1dERpcmVj
dChjYWxsRnJhbWUtPnZtKCksIHByb3BlcnR5LCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVy
bjsKICAgICB9CisKKyAgICBpZiAoYnlWYWxJbmZvLT5zdHViSW5mbyAmJiAoIWlzU3RyaW5nT3JT
eW1ib2woc3Vic2NyaXB0KSB8fCBieVZhbEluZm8tPmNhY2hlZElkICE9IHByb3BlcnR5KSkKKyAg
ICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworCisgICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoYmFzZU9iamVjdCwgaXNTdHJpY3RNb2RlKTsKKyAgICBiYXNlT2JqZWN0LT5wdXRE
aXJlY3QoY2FsbEZyYW1lLT52bSgpLCBwcm9wZXJ0eSwgdmFsdWUsIHNsb3QpOwogfQotdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKKworZW51
bSBjbGFzcyBPcHRpbWl6YXRpb25SZXN1bHQgeworICAgIE5vdE9wdGltaXplZCwKKyAgICBPcHRp
bWl6ZWQsCisgICAgR2l2ZVVwLAorfTsKKworc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0cnlQ
dXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIEpTVmFs
dWUgc3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZy
YW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRoIG9w
dGltaXppbmcgYXQgYWxsLgorICAgIE9wdGltaXphdGlvblJlc3VsdCBvcHRpbWl6YXRpb25SZXN1
bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok5vdE9wdGltaXplZDsKIAotICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOwotICAgIEpTVmFsdWUg
c3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwotICAgIEpTVmFs
dWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwogCiAgICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5p
c0ludDMyKCkpIHsKLSAgICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyBhdCBh
bGwuCiAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwotICAg
ICAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7CiAKICAgICAgICAgQVNTRVJUKGV4ZWMtPmxv
Y2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0
dWJSb3V0aW5lKTsKQEAgLTU2Niw0MyArNTg4LDY0IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOwogICAgICAgICAgICAgICAgIGJ5VmFsSW5mby0+YXJyYXlQcm9maWxlLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBjb2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAKLSAgICAg
ICAgICAgICAgICBKSVQ6OmNvbXBpbGVQdXRCeVZhbCgmdm0sIGV4ZWMtPmNvZGVCbG9jaygpLCBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2Rl
KTsKLSAgICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CisgICAgICAgICAgICAgICAg
SklUOjpjb21waWxlUHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYnlWYWxJbmZvLCBy
ZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAgICAgICAgIG9wdGltaXphdGlvblJl
c3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKCFkaWRPcHRpbWl6ZSkgewotICAgICAgICAgICAgLy8gSWYg
d2UgdGFrZSBzbG93IHBhdGggbW9yZSB0aGFuIDEwIHRpbWVzIHdpdGhvdXQgcGF0Y2hpbmcgdGhl
biBtYWtlIHN1cmUgd2UKLSAgICAgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFn
YWluLiBPciwgaWYgd2UgZmFpbGVkIHRvIHBhdGNoIGFuZCB3ZSBoYXZlIHNvbWUgb2JqZWN0Ci0g
ICAgICAgICAgICAvLyB0aGF0IGludGVyY2VwdHMgaW5kZXhlZCBnZXQsIHRoZW4gZG9uJ3QgZXZl
biB3YWl0IHVudGlsIDEwIHRpbWVzLiBGb3IgY2FzZXMKLSAgICAgICAgICAgIC8vIHdoZXJlIHdl
IHNlZSBub24taW5kZXgtaW50ZXJjZXB0aW5nIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0
aW9ucyB3b3J0aCBvZgotICAgICAgICAgICAgLy8gb3Bwb3J0dW5pdHkgZm9yIHVzIHRvIG9ic2Vy
dmUgdGhhdCB0aGUgZ2V0X2J5X3ZhbCBtYXkgYmUgcG9seW1vcnBoaWMuCi0gICAgICAgICAgICBp
ZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTAKLSAgICAgICAgICAgICAgICB8fCBv
YmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5
U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKSB7Ci0gICAgICAgICAgICAgICAg
Ly8gRG9uJ3QgZXZlciB0cnkgdG8gb3B0aW1pemUuCi0gICAgICAgICAgICAgICAgY3RpUGF0Y2hD
YWxsQnlSZXR1cm5BZGRyZXNzKGV4ZWMtPmNvZGVCbG9jaygpLCBSZXR1cm5BZGRyZXNzUHRyKE9V
Ul9SRVRVUk5fQUREUkVTUyksIEZ1bmN0aW9uUHRyKG9wZXJhdGlvblB1dEJ5VmFsR2VuZXJpYykp
OwotICAgICAgICAgICAgfQorICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdl
IGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0
IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KKyAgICAgICAgaWYgKG9wdGltaXphdGlvblJlc3Vs
dCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2
bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hl
bkxlbmd0aElzTm90WmVybygpKQorICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0
aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7CisgICAgfQorCisgICAgaWYgKGJhc2VWYWx1ZS5pc09i
amVjdCgpICYmIGlzU3RyaW5nT3JTeW1ib2woc3Vic2NyaXB0KSkgeworICAgICAgICBjb25zdCBJ
ZGVudGlmaWVyIHByb3BlcnR5TmFtZSA9IHN1YnNjcmlwdC50b1Byb3BlcnR5S2V5KGV4ZWMpOwor
ICAgICAgICBpZiAoIXN1YnNjcmlwdC5pc1N0cmluZygpIHx8ICFwYXJzZUluZGV4KHByb3BlcnR5
TmFtZSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChleGVjLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZz
ZXQoKSk7CisgICAgICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUpOworICAg
ICAgICAgICAgSklUOjpjb21waWxlUHV0QnlWYWxXaXRoQ2FjaGVkSWQoJnZtLCBleGVjLT5jb2Rl
QmxvY2soKSwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBOb3REaXJlY3QsIHByb3BlcnR5TmFt
ZSk7CisgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6
Ok9wdGltaXplZDsKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1dEJ5VmFsKGV4ZWMsIGJhc2VW
YWx1ZSwgc3Vic2NyaXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKKyAgICBpZiAob3B0aW1pemF0aW9u
UmVzdWx0ICE9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkKSB7CisgICAgICAgIC8vIElm
IHdlIHRha2Ugc2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRo
ZW4gbWFrZSBzdXJlIHdlCisgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWlu
LiBGb3IgY2FzZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKKyAgICAgICAg
Ly8gb2JqZWN0cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5
IGZvciB1cyB0byBvYnNlcnZlCisgICAgICAgIC8vIHRoYXQgdGhlIHB1dF9ieV92YWwgbWF5IGJl
IHBvbHltb3JwaGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKKyAgICAgICAg
Ly8gdGhlIHJlc3VsdCBpcyBHaXZlVXAuCisgICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1Bh
dGhDb3VudCA+PSAxMCkKKyAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXph
dGlvblJlc3VsdDo6R2l2ZVVwOworICAgIH0KKworICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1
bHQ7CiB9CiAKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbChFeGVj
U3RhdGUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBC
eVZhbEluZm8qIGJ5VmFsSW5mbykKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1
ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKIHsKLSAgICBWTSYgdm0gPSBjYWxsRnJhbWUt
PnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGNhbGxGcmFtZSk7
Ci0gICAgCisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkQmFzZVZhbHVlKTsKICAgICBKU1ZhbHVlIHN1YnNjcmlwdCA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkU3Vic2NyaXB0KTsKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoYmFzZVZhbHVlLmlz
T2JqZWN0KCkpOwotICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlVmFsdWUpOwot
ICAgIGlmIChzdWJzY3JpcHQuaXNJbnQzMigpKSB7Ci0gICAgICAgIC8vIFNlZSBpZiBpdCdzIHdv
cnRoIG9wdGltaXppbmcgYXQgYWxsLgotICAgICAgICBib29sIGRpZE9wdGltaXplID0gZmFsc2U7
CisgICAgaWYgKHRyeVB1dEJ5VmFsT3B0aW1pemUoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQs
IGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpKSA9PSBPcHRp
bWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgeworICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBv
cHRpbWl6ZS4KKyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCksIFJldHVybkFk
ZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3BlcmF0aW9uUHV0QnlW
YWxHZW5lcmljKSk7CisgICAgfQorICAgIHB1dEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2Ny
aXB0LCB2YWx1ZSwgYnlWYWxJbmZvKTsKK30KKworc3RhdGljIE9wdGltaXphdGlvblJlc3VsdCB0
cnlEaXJlY3RQdXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqIG9iamVj
dCwgSlNWYWx1ZSBzdWJzY3JpcHQsIEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MpCit7CisgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemlu
ZyBhdCBhbGwuCisgICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXphdGlvblJlc3VsdCA9IE9w
dGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOworCisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKIAotICAgICAgICBBU1NFUlQoY2FsbEZyYW1lLT5sb2NhdGlvbkFzQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgaWYgKHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKKyAgICAgICAgQVNTRVJUKGV4ZWMt
PmxvY2F0aW9uQXNCeXRlY29kZU9mZnNldCgpKTsKICAgICAgICAgQVNTRVJUKCFieVZhbEluZm8t
PnN0dWJSb3V0aW5lKTsKIAogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG9iamVjdC0+
c3RydWN0dXJlKHZtKTsKQEAgLTYxMCwyOSArNjUzLDYwIEBAIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25EaXJlY3RQdXRCeVZhbChFeGVjU3RhdGUqIGNhbGxGcmFtZSwgRW5jb2RlZEpTVmFs
dWUKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gb3B0aW1pemUuCiAgICAgICAgICAgICBKSVRB
cnJheU1vZGUgYXJyYXlNb2RlID0gaml0QXJyYXlNb2RlRm9yU3RydWN0dXJlKHN0cnVjdHVyZSk7
CiAgICAgICAgICAgICBpZiAoaml0QXJyYXlNb2RlUGVybWl0c1B1dChhcnJheU1vZGUpICYmIGFy
cmF5TW9kZSAhPSBieVZhbEluZm8tPmFycmF5TW9kZSkgewotICAgICAgICAgICAgICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsKKyAgICAgICAgICAgICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwogICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAg
ICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAgICAgICAgSklU
Ojpjb21waWxlRGlyZWN0UHV0QnlWYWwoJnZtLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgYXJyYXlNb2RlKTsK
LSAgICAgICAgICAgICAgICBkaWRPcHRpbWl6ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgSklU
Ojpjb21waWxlRGlyZWN0UHV0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYnlWYWxJbmZv
LCByZXR1cm5BZGRyZXNzLCBhcnJheU1vZGUpOworICAgICAgICAgICAgICAgIG9wdGltaXphdGlv
blJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkOwogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoIWRpZE9wdGltaXplKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGltZXMgd2l0aG91dCBw
YXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQotICAgICAgICAgICAgLy8gbmV2ZXIgbWFrZSB0aGF0
IG1pc3Rha2UgYWdhaW4uIE9yLCBpZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29t
ZSBvYmplY3QKLSAgICAgICAgICAgIC8vIHRoYXQgaW50ZXJjZXB0cyBpbmRleGVkIGdldCwgdGhl
biBkb24ndCBldmVuIHdhaXQgdW50aWwgMTAgdGltZXMuIEZvciBjYXNlcwotICAgICAgICAgICAg
Ly8gd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcgb2JqZWN0cywgdGhpcyBnaXZl
cyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mCi0gICAgICAgICAgICAvLyBvcHBvcnR1bml0eSBmb3Ig
dXMgdG8gb2JzZXJ2ZSB0aGF0IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4KLSAg
ICAgICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+PSAxMAotICAgICAgICAg
ICAgICAgIHx8IG9iamVjdC0+c3RydWN0dXJlKHZtKS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0
T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCkpIHsKLSAgICAg
ICAgICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KLSAgICAgICAgICAgICAg
ICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoY2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgUmV0
dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25E
aXJlY3RQdXRCeVZhbEdlbmVyaWMpKTsKLSAgICAgICAgICAgIH0KKworICAgICAgICAvLyBJZiB3
ZSBmYWlsZWQgdG8gcGF0Y2ggYW5kIHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRz
IGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KKyAgICAg
ICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXpl
ZCAmJiBvYmplY3QtPnN0cnVjdHVyZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blBy
b3BlcnR5U2xvdEJ5SW5kZXhFdmVuV2hlbkxlbmd0aElzTm90WmVybygpKQorICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7CisgICAgfSBl
bHNlIGlmIChpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkpIHsKKyAgICAgICAgY29uc3QgSWRl
bnRpZmllciBwcm9wZXJ0eU5hbWUgPSBzdWJzY3JpcHQudG9Qcm9wZXJ0eUtleShleGVjKTsKKyAg
ICAgICAgT3B0aW9uYWw8dWludDMyX3Q+IGluZGV4ID0gcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUp
OworCisgICAgICAgIGlmICghc3Vic2NyaXB0LmlzU3RyaW5nKCkgfHwgIWluZGV4KSB7CisgICAg
ICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOworICAgICAg
ICAgICAgQVNTRVJUKCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKKyAgICAgICAgICAgIEpJVDo6
Y29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFs
SW5mbywgcmV0dXJuQWRkcmVzcywgRGlyZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAg
ICAgIH0KICAgICB9Ci0gICAgZGlyZWN0UHV0QnlWYWwoY2FsbEZyYW1lLCBvYmplY3QsIHN1YnNj
cmlwdCwgdmFsdWUsIGJ5VmFsSW5mbyk7CisKKyAgICBpZiAob3B0aW1pemF0aW9uUmVzdWx0ICE9
IE9wdGltaXphdGlvblJlc3VsdDo6T3B0aW1pemVkKSB7CisgICAgICAgIC8vIElmIHdlIHRha2Ug
c2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBz
dXJlIHdlCisgICAgICAgIC8vIG5ldmVyIG1ha2UgdGhhdCBtaXN0YWtlIGFnYWluLiBGb3IgY2Fz
ZXMgd2hlcmUgd2Ugc2VlIG5vbi1pbmRleC1pbnRlcmNlcHRpbmcKKyAgICAgICAgLy8gb2JqZWN0
cywgdGhpcyBnaXZlcyAxMCBpdGVyYXRpb25zIHdvcnRoIG9mIG9wcG9ydHVuaXR5IGZvciB1cyB0
byBvYnNlcnZlCisgICAgICAgIC8vIHRoYXQgdGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3Jw
aGljLiBXZSBjb3VudCB1cCBzbG93UGF0aENvdW50IGV2ZW4gaWYKKyAgICAgICAgLy8gdGhlIHJl
c3VsdCBpcyBHaXZlVXAuCisgICAgICAgIGlmICgrK2J5VmFsSW5mby0+c2xvd1BhdGhDb3VudCA+
PSAxMCkKKyAgICAgICAgICAgIG9wdGltaXphdGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3Vs
dDo6R2l2ZVVwOworICAgIH0KKworICAgIHJldHVybiBvcHRpbWl6YXRpb25SZXN1bHQ7Cit9CisK
K3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbE9wdGltaXplKEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFN1YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbElu
Zm8qIGJ5VmFsSW5mbykKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIEpTVmFsdWUgYmFzZVZhbHVl
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlVmFsdWUpOworICAgIEpTVmFsdWUgc3Vic2Ny
aXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIEpTVmFsdWUgdmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChi
YXNlVmFsdWUuaXNPYmplY3QoKSk7CisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJh
c2VWYWx1ZSk7CisgICAgaWYgKHRyeURpcmVjdFB1dEJ5VmFsT3B0aW1pemUoZXhlYywgb2JqZWN0
LCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJF
U1MpKSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkgeworICAgICAgICAvLyBEb24ndCBl
dmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgYnlWYWxJbmZvLT50b29rU2xvd1BhdGggPSB0
cnVlOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3MoZXhlYy0+Y29kZUJsb2Nr
KCksIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSwgRnVuY3Rpb25QdHIob3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKSk7CisgICAgfQorCisgICAgZGlyZWN0UHV0QnlW
YWwoZXhlYywgb2JqZWN0LCBzdWJzY3JpcHQsIHZhbHVlLCBieVZhbEluZm8pOwogfQogCiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2VWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBCeVZhbEluZm8qIGJ5VmFsSW5m
bykKQEAgLTE0NTgsMzYgKzE1MzIsMjEgQEAgc3RhdGljIEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgSlNWYWx1ZSBzdWJzY3JpcHQsIEIKICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5
dGVjb2RlT2Zmc2V0KCkpOwotICAgIGlmIChieVZhbEluZm8tPnN0dWJJbmZvICYmIGJ5VmFsSW5m
by0+Y2FjaGVkSWQgIT0gcHJvcGVydHkpCisgICAgaWYgKGJ5VmFsSW5mby0+c3R1YkluZm8gJiYg
KCFpc1N0cmluZ09yU3ltYm9sKHN1YnNjcmlwdCkgfHwgYnlWYWxJbmZvLT5jYWNoZWRJZCAhPSBw
cm9wZXJ0eSkpCiAgICAgICAgIGJ5VmFsSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKIAogICAg
IHJldHVybiBiYXNlVmFsdWUuZ2V0KGV4ZWMsIHByb3BlcnR5KTsKIH0KIAotZXh0ZXJuICJDIiB7
Ci0gICAgCi1FbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsR2Vu
ZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkU3Vic2NyaXB0LCBCeVZhbEluZm8qIGJ5VmFsSW5mbykKK3N0YXRpYyBP
cHRpbWl6YXRpb25SZXN1bHQgdHJ5R2V0QnlWYWxPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYmFzZVZhbHVlLCBKU1ZhbHVlIHN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8s
IFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKIHsKLSAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7Ci0gICAgSlNW
YWx1ZSBzdWJzY3JpcHQgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFN1YnNjcmlwdCk7Ci0KLSAg
ICBKU1ZhbHVlIHJlc3VsdCA9IGdldEJ5VmFsKGV4ZWMsIGJhc2VWYWx1ZSwgc3Vic2NyaXB0LCBi
eVZhbEluZm8sIFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKSk7Ci0gICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotfQorICAgIC8vIFNlZSBpZiBpdCdzIHdvcnRo
IG9wdGltaXppbmcgdGhpcyBhdCBhbGwuCisgICAgT3B0aW1pemF0aW9uUmVzdWx0IG9wdGltaXph
dGlvblJlc3VsdCA9IE9wdGltaXphdGlvblJlc3VsdDo6Tm90T3B0aW1pemVkOwogCi1FbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRl
KiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCi17CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAg
SlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwotICAgIEpT
VmFsdWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOwogCiAg
ICAgaWYgKGJhc2VWYWx1ZS5pc09iamVjdCgpICYmIHN1YnNjcmlwdC5pc0ludDMyKCkpIHsKLSAg
ICAgICAgLy8gU2VlIGlmIGl0J3Mgd29ydGggb3B0aW1pemluZyB0aGlzIGF0IGFsbC4KICAgICAg
ICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2VWYWx1ZSk7Ci0gICAgICAgIGJvb2wg
ZGlkT3B0aW1pemUgPSBmYWxzZTsKIAogICAgICAgICBBU1NFUlQoZXhlYy0+bG9jYXRpb25Bc0J5
dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICBBU1NFUlQoIWJ5VmFsSW5mby0+c3R1YlJvdXRpbmUp
OwpAQCAtMTUwMyw0MyArMTU2Miw2OSBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbkdldEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSgogICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgICAgICAgICBieVZhbEluZm8tPmFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKGxvY2tlciwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUpOwogCi0gICAgICAgICAgICAg
ICAgSklUOjpjb21waWxlR2V0QnlWYWwoJnZtLCBleGVjLT5jb2RlQmxvY2soKSwgYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUyksIGFycmF5TW9kZSk7Ci0gICAg
ICAgICAgICAgICAgZGlkT3B0aW1pemUgPSB0cnVlOworICAgICAgICAgICAgICAgIEpJVDo6Y29t
cGlsZUdldEJ5VmFsKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgcmV0dXJuQWRk
cmVzcywgYXJyYXlNb2RlKTsKKyAgICAgICAgICAgICAgICBvcHRpbWl6YXRpb25SZXN1bHQgPSBP
cHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIGlmICghZGlkT3B0aW1pemUpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIHRha2Ug
c2xvdyBwYXRoIG1vcmUgdGhhbiAxMCB0aW1lcyB3aXRob3V0IHBhdGNoaW5nIHRoZW4gbWFrZSBz
dXJlIHdlCi0gICAgICAgICAgICAvLyBuZXZlciBtYWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gT3Is
IGlmIHdlIGZhaWxlZCB0byBwYXRjaCBhbmQgd2UgaGF2ZSBzb21lIG9iamVjdAotICAgICAgICAg
ICAgLy8gdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRvbid0IGV2ZW4gd2FpdCB1
bnRpbCAxMCB0aW1lcy4gRm9yIGNhc2VzCi0gICAgICAgICAgICAvLyB3aGVyZSB3ZSBzZWUgbm9u
LWluZGV4LWludGVyY2VwdGluZyBvYmplY3RzLCB0aGlzIGdpdmVzIDEwIGl0ZXJhdGlvbnMgd29y
dGggb2YKLSAgICAgICAgICAgIC8vIG9wcG9ydHVuaXR5IGZvciB1cyB0byBvYnNlcnZlIHRoYXQg
dGhlIGdldF9ieV92YWwgbWF5IGJlIHBvbHltb3JwaGljLgotICAgICAgICAgICAgaWYgKCsrYnlW
YWxJbmZvLT5zbG93UGF0aENvdW50ID49IDEwCi0gICAgICAgICAgICAgICAgfHwgb2JqZWN0LT5z
dHJ1Y3R1cmUodm0pLT50eXBlSW5mbygpLmludGVyY2VwdHNHZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKSkgewotICAgICAgICAgICAgICAgIC8vIERvbid0
IGV2ZXIgdHJ5IHRvIG9wdGltaXplLgotICAgICAgICAgICAgICAgIGN0aVBhdGNoQ2FsbEJ5UmV0
dXJuQWRkcmVzcyhleGVjLT5jb2RlQmxvY2soKSwgUmV0dXJuQWRkcmVzc1B0cihPVVJfUkVUVVJO
X0FERFJFU1MpLCBGdW5jdGlvblB0cihvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMpKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvLyBJZiB3ZSBmYWlsZWQgdG8gcGF0Y2ggYW5k
IHdlIGhhdmUgc29tZSBvYmplY3QgdGhhdCBpbnRlcmNlcHRzIGluZGV4ZWQgZ2V0LCB0aGVuIGRv
bid0IGV2ZW4gd2FpdCB1bnRpbCAxMCB0aW1lcy4KKyAgICAgICAgaWYgKG9wdGltaXphdGlvblJl
c3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGltaXplZCAmJiBvYmplY3QtPnN0cnVjdHVy
ZSh2bSktPnR5cGVJbmZvKCkuaW50ZXJjZXB0c0dldE93blByb3BlcnR5U2xvdEJ5SW5kZXhFdmVu
V2hlbkxlbmd0aElzTm90WmVybygpKQorICAgICAgICAgICAgb3B0aW1pemF0aW9uUmVzdWx0ID0g
T3B0aW1pemF0aW9uUmVzdWx0OjpHaXZlVXA7CiAgICAgfQogCi0gICAgaWYgKGJhc2VWYWx1ZS5p
c09iamVjdCgpICYmIChzdWJzY3JpcHQuaXNTeW1ib2woKSB8fCBzdWJzY3JpcHQuaXNTdHJpbmco
KSkpIHsKKyAgICBpZiAoYmFzZVZhbHVlLmlzT2JqZWN0KCkgJiYgaXNTdHJpbmdPclN5bWJvbChz
dWJzY3JpcHQpKSB7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXIgcHJvcGVydHlOYW1lID0gc3Vi
c2NyaXB0LnRvUHJvcGVydHlLZXkoZXhlYyk7Ci0KICAgICAgICAgaWYgKCFzdWJzY3JpcHQuaXNT
dHJpbmcoKSB8fCAhcGFyc2VJbmRleChwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICBBU1NF
UlQoZXhlYy0+bG9jYXRpb25Bc0J5dGVjb2RlT2Zmc2V0KCkpOwogICAgICAgICAgICAgQVNTRVJU
KCFieVZhbEluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIEpJVDo6Y29tcGlsZUdldEJ5
VmFsV2l0aENhY2hlZElkKCZ2bSwgZXhlYy0+Y29kZUJsb2NrKCksIGJ5VmFsSW5mbywgUmV0dXJu
QWRkcmVzc1B0cihPVVJfUkVUVVJOX0FERFJFU1MpLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgSklUOjpjb21waWxlR2V0QnlWYWxXaXRoQ2FjaGVkSWQoJnZtLCBleGVjLT5jb2RlQmxvY2so
KSwgYnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzLCBwcm9wZXJ0eU5hbWUpOworICAgICAgICAgICAg
b3B0aW1pemF0aW9uUmVzdWx0ID0gT3B0aW1pemF0aW9uUmVzdWx0OjpPcHRpbWl6ZWQ7CiAgICAg
ICAgIH0KKyAgICB9CiAKLSAgICAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlKTsKLSAg
ICAgICAgYm9vbCBoYXNSZXN1bHQgPSBiYXNlVmFsdWUuZ2V0UHJvcGVydHlTbG90KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoaGFzUmVz
dWx0ID8gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpIDoganNVbmRlZmluZWQoKSk7
CisgICAgaWYgKG9wdGltaXphdGlvblJlc3VsdCAhPSBPcHRpbWl6YXRpb25SZXN1bHQ6Ok9wdGlt
aXplZCkgeworICAgICAgICAvLyBJZiB3ZSB0YWtlIHNsb3cgcGF0aCBtb3JlIHRoYW4gMTAgdGlt
ZXMgd2l0aG91dCBwYXRjaGluZyB0aGVuIG1ha2Ugc3VyZSB3ZQorICAgICAgICAvLyBuZXZlciBt
YWtlIHRoYXQgbWlzdGFrZSBhZ2Fpbi4gRm9yIGNhc2VzIHdoZXJlIHdlIHNlZSBub24taW5kZXgt
aW50ZXJjZXB0aW5nCisgICAgICAgIC8vIG9iamVjdHMsIHRoaXMgZ2l2ZXMgMTAgaXRlcmF0aW9u
cyB3b3J0aCBvZiBvcHBvcnR1bml0eSBmb3IgdXMgdG8gb2JzZXJ2ZQorICAgICAgICAvLyB0aGF0
IHRoZSBnZXRfYnlfdmFsIG1heSBiZSBwb2x5bW9ycGhpYy4gV2UgY291bnQgdXAgc2xvd1BhdGhD
b3VudCBldmVuIGlmCisgICAgICAgIC8vIHRoZSByZXN1bHQgaXMgR2l2ZVVwLgorICAgICAgICBp
ZiAoKytieVZhbEluZm8tPnNsb3dQYXRoQ291bnQgPj0gMTApCisgICAgICAgICAgICBvcHRpbWl6
YXRpb25SZXN1bHQgPSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcDsKICAgICB9CiAKKyAgICBy
ZXR1cm4gb3B0aW1pemF0aW9uUmVzdWx0OworfQorCitleHRlcm4gIkMiIHsKKworRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZXRCeVZhbEdlbmVyaWMoRXhlY1N0YXRlKiBl
eGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1
YnNjcmlwdCwgQnlWYWxJbmZvKiBieVZhbEluZm8pCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgSlNW
YWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFs
dWUgc3Vic2NyaXB0ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworCiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBnZXRCeVZhbChleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwgYnlW
YWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyKE9VUl9SRVRVUk5fQUREUkVTUykpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZXRCeVZhbE9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRTdWJzY3JpcHQsIEJ5VmFs
SW5mbyogYnlWYWxJbmZvKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgSlNWYWx1ZSBiYXNlVmFs
dWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIEpTVmFsdWUgc3Vic2NyaXB0
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRTdWJzY3JpcHQpOworICAgIFJldHVybkFkZHJlc3NQ
dHIgcmV0dXJuQWRkcmVzcyA9IFJldHVybkFkZHJlc3NQdHIoT1VSX1JFVFVSTl9BRERSRVNTKTsK
KyAgICBpZiAodHJ5R2V0QnlWYWxPcHRpbWl6ZShleGVjLCBiYXNlVmFsdWUsIHN1YnNjcmlwdCwg
YnlWYWxJbmZvLCByZXR1cm5BZGRyZXNzKSA9PSBPcHRpbWl6YXRpb25SZXN1bHQ6OkdpdmVVcCkg
eworICAgICAgICAvLyBEb24ndCBldmVyIHRyeSB0byBvcHRpbWl6ZS4KKyAgICAgICAgYnlWYWxJ
bmZvLT50b29rU2xvd1BhdGggPSB0cnVlOworICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFk
ZHJlc3MoZXhlYy0+Y29kZUJsb2NrKCksIHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKG9wZXJh
dGlvbkdldEJ5VmFsR2VuZXJpYykpOworICAgIH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZ2V0QnlWYWwoZXhlYywgYmFzZVZhbHVlLCBzdWJzY3JpcHQsIGJ5VmFsSW5mbywgcmV0dXJu
QWRkcmVzcykpOworfQorCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhh
c0luZGV4ZWRQcm9wZXJ0eURlZmF1bHQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFN1YnNjcmlwdCwgQnlWYWxJbmZvKiBi
eVZhbEluZm8pCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKaW5kZXggM2Q4M2Y1OTBkY2Y5MTgwM2EzNDQ4YmEwODNi
MmY5MmJjYmU4NGY5Yi4uNTkxN2U0N2JjNTcwNzczYmM3ZjVmZTk0NGZjMzkwM2UxOTdlZmE2OSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTI2Miw4ICsy
NjIsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxk
TGlzdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWREaXJlY3RTdHJpY3RCdWlsZExpc3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1
YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSos
IFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqKSBXVEZfSU5URVJOQUw7CiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVhbGxvY2F0ZVN0b3JhZ2VBbmRGaW5pc2hQdXQo
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU9mZnNldCwgRW5jb2Rl
ZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRK
U1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RG
X0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0
aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSwgQnlWYWxJbmZvKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5VmFsR2VuZXJpYyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBCeVZhbEluZm8qKSBXVEZfSU5URVJOQUw7CiB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEJ5VmFsSW5m
byopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Q2FsbEV2YWwoRXhlY1N0YXRlKiwgRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAppbmRleCAxNzJlMDEz
ZDUyYWM0YjQxMmI1ODM3OTBlMDA4Y2MzZjExMjVmYTRhLi40N2I4MDIwY2E1MTcxYjQyYTJhNWJm
YzY1NTk5MmQ1NjM2YzY2YzhjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMjEwLDE0ICsyMTAsNyBAQCBKSVRHZXRCeUlkR2VuZXJh
dG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3RpbwogICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwog
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QxKSk7Ci0gICAg
aWYgKHByb3BlcnR5TmFtZS5pc1N5bWJvbCgpKSB7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQo
YnJhbmNoU3RydWN0dXJlKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCBtX3ZtLT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QxLCBTeW1ib2w6Om9mZnNldE9mUHJpdmF0ZU5hbWUoKSksIHJlZ1Qz
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVy
ZShOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwg
bV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7Ci0gICAgICAgIGxvYWRQdHIoQWRkcmVzcyhy
ZWdUMSwgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHJlZ1QzKTsKLSAgICB9Ci0gICAgc2xv
d0Nhc2VzLmFwcGVuZChicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QzLCBUcnVzdGVkSW1tUHRyKHBy
b3BlcnR5TmFtZS5pbXBsKCkpKSk7CisgICAgZW1pdElkZW50aWZpZXJDaGVjayhyZWdUMSwgcmVn
VDMsIHByb3BlcnR5TmFtZSwgc2xvd0Nhc2VzKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Ig
Z2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwg
UmVnaXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKQEAgLTMwNywxMCArMzAwLDExIEBAIHZv
aWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8o
KTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJzKGJhc2UsIHJlZ1QwLCBwcm9wZXJ0eSwg
cmVnVDEpOwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEltbWVkaWF0ZUludGVnZXIocmVnVDEp
OworICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CisgICAgUGF0
Y2hhYmxlSnVtcCBub3RJbmRleCA9IGVtaXRQYXRjaGFibGVKdW1wSWZOb3RJbW1lZGlhdGVJbnRl
Z2VyKHJlZ1QxKTsKKyAgICBhZGRTbG93Q2FzZShub3RJbmRleCk7CiAgICAgLy8gU2VlIGNvbW1l
bnQgaW4gb3BfZ2V0X2J5X3ZhbC4KICAgICB6ZXJvRXh0ZW5kMzJUb1B0cihyZWdUMSwgcmVnVDEp
OwotICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZSk7CiAgICAgZW1p
dEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKHJlZ1QwLCByZWdUMiwgcHJvZmlsZSk7CiAgICAg
YW5kMzIoVHJ1c3RlZEltbTMyKEluZGV4aW5nU2hhcGVNYXNrKSwgcmVnVDIpOwogICAgIApAQCAt
MzQxLDcgKzMzNSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAKICAgICBMYWJlbCBkb25lID0gbGFiZWwoKTsKICAg
ICAKLSAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5m
byhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJsZUp1bXAoKSwgYmFkVHlwZSwg
bW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOworICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8u
YXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwg
bm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIGRvbmUpKTsKIH0KIAogSklU
OjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlw
ZSBpbmRleGluZ1NoYXBlKQpAQCAtNDM0LDYgKzQyOCwzOSBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKK0pJVFB1dEJ5SWRHZW5lcmF0b3IgSklU
OjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBM
aXN0JiBkb25lQ2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCit7CisgICAgLy8gYmFzZTogcmVn
VDAKKyAgICAvLyBwcm9wZXJ0eTogcmVnVDEKKyAgICAvLyBzY3JhdGNoOiByZWdUMgorCisgICAg
aW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2YWx1
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBzbG93Q2FzZXMuYXBw
ZW5kKGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDEpKTsKKyAgICBlbWl0SWRlbnRpZmllckNoZWNr
KHJlZ1QxLCByZWdUMSwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOworCisgICAgLy8gV3JpdGUg
YmFycmllciBicmVha3MgdGhlIHJlZ2lzdGVycy4gU28gYWZ0ZXIgaXNzdWluZyB0aGUgd3JpdGUg
YmFycmllciwKKyAgICAvLyByZWxvYWQgdGhlIHJlZ2lzdGVycy4KKyAgICBlbWl0V3JpdGVCYXJy
aWVyKGJhc2UsIHZhbHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CisgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3RlcnMoYmFzZSwgcmVnVDAsIHZhbHVlLCByZWdUMSk7CisKKyAgICBKSVRQdXRCeUlkR2Vu
ZXJhdG9yIGdlbigKKyAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIFJlZ2lzdGVyU2V0OjpzcGVjaWFsUmVnaXN0ZXJzKCksCisgICAgICAgIEpTVmFsdWVS
ZWdzKHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEpLCByZWdUMiwgRG9udFNwaWxsLCBtX2NvZGVC
bG9jay0+ZWNtYU1vZGUoKSwgcHV0S2luZCk7CisgICAgZ2VuLmdlbmVyYXRlRmFzdFBhdGgoKnRo
aXMpOworICAgIGRvbmVDYXNlcy5hcHBlbmQoanVtcCgpKTsKKworICAgIExhYmVsIGNvbGRQYXRo
QmVnaW4gPSBsYWJlbCgpOworICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOworCisg
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbihnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4u
c3R1YkluZm8oKSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBnZW4u
cmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOworICAgIGRvbmVDYXNlcy5h
cHBlbmQoanVtcCgpKTsKKworICAgIHJldHVybiBnZW47Cit9CisKIHZvaWQgSklUOjplbWl0U2xv
d19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwpAQCAtNDQyLDggKzQ2OSw4IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzCiAgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUuYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZh
bENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCi0g
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBwcm9wZXJ0eSBpbnQzMiBjaGVjawogICAgIGxpbmtT
bG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKKyAgICBs
aW5rU2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBiYXNlIG5vdCBhcnJheSBjaGVjawogICAgIAogICAgIEpJVEFycmF5TW9k
ZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwpAQCAtNDYzLDEwICs0OTAsMTEgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICAKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVs
KCk7CiAKKyAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHByb3BlcnR5LCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSwgcmVnVDIpOwogICAgIGJvb2wgaXNEaXJlY3QgPSBtX2ludGVycHJldGVy
LT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9wdXRfYnlf
dmFsX2RpcmVjdDsKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0ID8gb3Bl
cmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVyYXRpb25QdXRCeVZhbCwgcmVnVDAsIHJlZ1QxLCBy
ZWdUMiwgYnlWYWxJbmZvKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKGlzRGlyZWN0
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxPcHRpbWl6ZSA6IG9wZXJhdGlvblB1dEJ5VmFsT3B0
aW1pemUsIHJlZ1QwLCByZWdUMSwgcmVnVDIsIGJ5VmFsSW5mbyk7CiAKICAgICBtX2J5VmFsQ29t
cGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4XS5zbG93UGF0aFRhcmdldCA9IHNs
b3dQYXRoOwogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5k
ZXhdLnJldHVybkFkZHJlc3MgPSBjYWxsOwpAQCAtOTg4LDYgKzEwMTYsMTggQEAgdm9pZCBKSVQ6
OmVtaXRXcml0ZUJhcnJpZXIoSlNDZWxsKiBvd25lcikKICNlbmRpZiAvLyBFTkFCTEUoR0dDKQog
fQogCit2b2lkIEpJVDo6ZW1pdElkZW50aWZpZXJDaGVjayhSZWdpc3RlcklEIGNlbGwsIFJlZ2lz
dGVySUQgc2NyYXRjaCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYg
c2xvd0Nhc2VzKQoreworICAgIGlmIChwcm9wZXJ0eU5hbWUuaXNTeW1ib2woKSkgeworICAgICAg
ICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaFN0cnVjdHVyZShOb3RFcXVhbCwgQWRkcmVzcyhjZWxs
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBtX3ZtLT5zeW1ib2xTdHJ1Y3R1cmUuZ2V0
KCkpKTsKKyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGNlbGwsIFN5bWJvbDo6b2Zmc2V0T2ZQcml2
YXRlTmFtZSgpKSwgc2NyYXRjaCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2xvd0Nhc2VzLmFw
cGVuZChicmFuY2hTdHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MoY2VsbCwgSlNDZWxsOjpzdHJ1
Y3R1cmVJRE9mZnNldCgpKSwgbV92bS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKSk7CisgICAgICAg
IGxvYWRQdHIoQWRkcmVzcyhjZWxsLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc2NyYXRj
aCk7CisgICAgfQorICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoUHRyKE5vdEVxdWFsLCBzY3Jh
dGNoLCBUcnVzdGVkSW1tUHRyKHByb3BlcnR5TmFtZS5pbXBsKCkpKSk7Cit9CisKIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFycmF5TW9kZSBhcnJheU1vZGUpCiB7CiAgICAgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpICsgYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4OwpAQCAtMTE0Miw2ICsxMTgyLDM3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsKEJ5VmFsSW5mbyogYnlWYWxJbmZv
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxs
ZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGlzRGlyZWN0ID8gb3BlcmF0
aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5lcmljKSk7CiB9
CiAKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5m
byogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIFB1dEtpbmQgcHV0
S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4o
KSArIGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleDsKKworICAgIEp1bXBMaXN0IGRvbmVDYXNlczsK
KyAgICBKdW1wTGlzdCBzbG93Q2FzZXM7CisKKyAgICBKSVRQdXRCeUlkR2VuZXJhdG9yIGdlbiA9
IGVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChjdXJyZW50SW5zdHJ1Y3Rpb24sIHB1dEtpbmQsIHBy
b3BlcnR5TmFtZSwgZG9uZUNhc2VzLCBzbG93Q2FzZXMpOworCisgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV92bSwgKnRoaXMsIG1fY29kZUJsb2NrKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKHNs
b3dDYXNlcywgQ29kZUxvY2F0aW9uTGFiZWwoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOjpjcmVhdGVG
cm9tRXhlY3V0YWJsZUFkZHJlc3MocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSkubGFiZWxBdE9mZnNl
dChieVZhbEluZm8tPnJldHVybkFkZHJlc3NUb1Nsb3dQYXRoKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhkb25lQ2FzZXMsIGJ5VmFsSW5mby0+YmFkVHlwZUp1bXAubGFiZWxBdE9mZnNldChieVZh
bEluZm8tPmJhZFR5cGVKdW1wVG9Eb25lKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBjYWxsU2l0
ZSA6IG1fY2FsbHMpIHsKKyAgICAgICAgaWYgKGNhbGxTaXRlLnRvKQorICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhjYWxsU2l0ZS5mcm9tLCBGdW5jdGlvblB0cihjYWxsU2l0ZS50bykpOwor
ICAgIH0KKyAgICBnZW4uZmluYWxpemUocGF0Y2hCdWZmZXIpOworCisgICAgYnlWYWxJbmZvLT5z
dHViUm91dGluZSA9IEZJTkFMSVpFX0NPREVfRk9SX1NUVUIoCisgICAgICAgIG1fY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJCYXNlbGluZSBwdXRfYnlfdmFsJXMgd2l0aCBjYWNo
ZWQgcHJvcGVydHkgbmFtZSAnJXMnIHN0dWIgZm9yICVzLCByZXR1cm4gcG9pbnQgJXAiLCAocHV0
S2luZCA9PSBEaXJlY3QpID8gIl9kaXJlY3QiIDogIiIsIHByb3BlcnR5TmFtZS5pbXBsKCktPnV0
ZjgoKS5kYXRhKCksIHRvQ1N0cmluZygqbV9jb2RlQmxvY2spLmRhdGEoKSwgcmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSk7CisgICAgYnlWYWxJbmZvLT5jYWNoZWRJZCA9IHByb3BlcnR5TmFtZTsKKyAg
ICBieVZhbEluZm8tPnN0dWJJbmZvID0gZ2VuLnN0dWJJbmZvKCk7CisKKyAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGJ5VmFsSW5mby0+bm90SW5kZXhKdW1wLCBDb2RlTG9jYXRpb25MYWJlbChieVZhbEluZm8tPnN0
dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxs
ZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKHB1dEtpbmQgPT0gRGlyZWN0
ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWxHZW5lcmljIDogb3BlcmF0aW9uUHV0QnlWYWxHZW5l
cmljKSk7Cit9CisKKwogSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXREaXJlY3RBcmd1bWVudHNHZXRC
eVZhbChJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpCiB7CiAgICAgSnVtcExp
c3Qgc2xvd0Nhc2VzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggZmI5NTdhMjI2ZTg2MjUxYjZkMzZlNzcwYzlhY2Uz
NTJiMjA0OTliZS4uZWJjNGJkYmU5MTVlYzZmZTg1NTMwYmM0ZDgzM2U3MmU4ZDgwY2NjYyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCkBAIC0yNTAsMTQgKzI1MCw3IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0
R2V0QnlWYWxXaXRoQ2FjaGVkSWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvCiAgICAg
Ly8gc2NyYXRjaDogcmVnVDQKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKLSAgICBpZiAocHJv
cGVydHlOYW1lLmlzU3ltYm9sKCkpIHsKLSAgICAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hT
dHJ1Y3R1cmUoTm90RXF1YWwsIEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIG1fdm0tPnN5bWJvbFN0cnVjdHVyZS5nZXQoKSkpOwotICAgICAgICBsb2FkUHRyKEFk
ZHJlc3MocmVnVDIsIFN5bWJvbDo6b2Zmc2V0T2ZQcml2YXRlTmFtZSgpKSwgcmVnVDQpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoU3RydWN0dXJlKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QyLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBtX3ZtLT5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKTsKLSAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBK
U1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgcmVnVDQpOwotICAgIH0KLSAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDQsIFRydXN0ZWRJbW1QdHIocHJvcGVydHlO
YW1lLmltcGwoKSkpKTsKKyAgICBlbWl0SWRlbnRpZmllckNoZWNrKHJlZ1QyLCByZWdUNCwgcHJv
cGVydHlOYW1lLCBzbG93Q2FzZXMpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAg
ICAgICAgIG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBSZWdpc3Rl
clNldDo6c3BlY2lhbFJlZ2lzdGVycygpLApAQCAtMzIyLDggKzMxNSw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAK
ICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1Qy
KTsKICAgICAKLSAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoYmFzZSwgcmVnVDEpOworICAgIFBhdGNoYWJsZUp1bXAgbm90SW5kZXggPSBwYXRjaGFi
bGVCcmFuY2gzMihOb3RFcXVhbCwgcmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRh
ZykpOworICAgIGFkZFNsb3dDYXNlKG5vdEluZGV4KTsKICAgICBlbWl0QXJyYXlQcm9maWxpbmdT
aXRlV2l0aENlbGwocmVnVDAsIHJlZ1QxLCBwcm9maWxlKTsKICAgICBhbmQzMihUcnVzdGVkSW1t
MzIoSW5kZXhpbmdTaGFwZU1hc2spLCByZWdUMSk7CiAgICAgCkBAIC0zNTQsNyArMzQ4LDcgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIAogICAgIExhYmVsIGRvbmUgPSBsYWJlbCgpOwogICAgIAotICAgIG1fYnlWYWxD
b21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9i
eXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBkb25lKSk7CisgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21w
aWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJbmRleCwgYmFkVHlw
ZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9uZSkpOwogfQogCiBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUp
CkBAIC00NTMsNiArNDQ3LDQyIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0CiAgICAgcmV0dXJu
IHNsb3dDYXNlczsKIH0KIAorSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdp
dGhDYWNoZWRJZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQdXRLaW5kIHB1dEtp
bmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIGRvbmVDYXNlcywg
SnVtcExpc3QmIHNsb3dDYXNlcykKK3sKKyAgICAvLyBiYXNlOiB0YWcocmVnVDEpLCBwYXlsb2Fk
KHJlZ1QwKQorICAgIC8vIHByb3BlcnR5OiB0YWcocmVnVDMpLCBwYXlsb2FkKHJlZ1QyKQorCisg
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGludCB2
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisKKyAgICBzbG93Q2FzZXMu
YXBwZW5kKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNl
bGxUYWcpKSk7CisgICAgZW1pdElkZW50aWZpZXJDaGVjayhyZWdUMiwgcmVnVDIsIHByb3BlcnR5
TmFtZSwgc2xvd0Nhc2VzKTsKKworICAgIC8vIFdyaXRlIGJhcnJpZXIgYnJlYWtzIHRoZSByZWdp
c3RlcnMuIFNvIGFmdGVyIGlzc3VpbmcgdGhlIHdyaXRlIGJhcnJpZXIsCisgICAgLy8gcmVsb2Fk
IHRoZSByZWdpc3RlcnMuCisgICAgZW1pdFdyaXRlQmFycmllcihiYXNlLCB2YWx1ZSwgU2hvdWxk
RmlsdGVyQmFzZSk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKKyAgICBlbWl0
TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKKworICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2Vu
KAorICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgUmVn
aXN0ZXJTZXQ6OnNwZWNpYWxSZWdpc3RlcnMoKSwKKyAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxv
YWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSwgcmVnVDEsIERvbnRTcGls
bCwgbV9jb2RlQmxvY2stPmVjbWFNb2RlKCksIHB1dEtpbmQpOworICAgIGdlbi5nZW5lcmF0ZUZh
c3RQYXRoKCp0aGlzKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAoKSk7CisKKyAgICBMYWJl
bCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKKyAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0
aGlzKTsKKworICAgIC8vIEpJVFB1dEJ5SWRHZW5lcmF0b3Igb25seSBwcmVzZXJ2ZSB0aGUgdmFs
dWUgYW5kIHRoZSBiYXNlJ3MgcGF5bG9hZCwgd2UgaGF2ZSB0byByZWxvYWQgdGhlIHRhZy4KKyAg
ICBlbWl0TG9hZFRhZyhiYXNlLCByZWdUMSk7CisKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIGdlbi5zdHViSW5mbygpLCByZWdUMywgcmVnVDIs
IHJlZ1QxLCByZWdUMCwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKKyAgICBkb25lQ2FzZXMuYXBwZW5kKGp1bXAo
KSk7CisKKyAgICByZXR1cm4gZ2VuOworfQorCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKQEAgLTQ2MSw4ICs0OTEsOCBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
cHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
cwogICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51LmFy
cmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlv
bkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKICAgICAKLSAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIHByb3BlcnR5IGludDMyIGNoZWNrCiAgICAgbGlua1Nsb3dDYXNl
SWZOb3RKU0NlbGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjaworICAgIGxpbmtTbG93
Q2FzZShpdGVyKTsgLy8gcHJvcGVydHkgaW50MzIgY2hlY2sKICAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIGJhc2Ugbm90IGFycmF5IGNoZWNrCiAgICAgCiAgICAgSklUQXJyYXlNb2RlIG1vZGUg
PSBjaG9vc2VBcnJheU1vZGUocHJvZmlsZSk7CkBAIC01MDAsMTQgKzUzMCwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0NhcwogICAgIGFkZENhbGxBcmd1bWVudChyZWdUMSk7CiAgICAgYWRkQ2Fs
bEFyZ3VtZW50KHJlZ1QwKTsKICAgICBhZGRDYWxsQXJndW1lbnQoVHJ1c3RlZEltbVB0cihieVZh
bEluZm8pKTsKLSAgICBDYWxsIGNhbGwgPSBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGlz
RGlyZWN0ID8gb3BlcmF0aW9uRGlyZWN0UHV0QnlWYWwgOiBvcGVyYXRpb25QdXRCeVZhbCk7Cisg
ICAgQ2FsbCBjYWxsID0gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhpc0RpcmVjdCA/IG9w
ZXJhdGlvbkRpcmVjdFB1dEJ5VmFsT3B0aW1pemUgOiBvcGVyYXRpb25QdXRCeVZhbE9wdGltaXpl
KTsKICNlbHNlCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4g
dG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91
bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KICAgICBlbWl0TG9hZChiYXNlLCByZWdU
MiwgcmVnVDEpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMywgcmVnVDApOwogICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUNSwgcmVnVDQpOwotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQdXRCeVZhbCA6IG9wZXJhdGlvblB1dEJ5VmFs
LCByZWdUMiwgcmVnVDEsIHJlZ1QzLCByZWdUMCwgcmVnVDUsIHJlZ1Q0LCBieVZhbEluZm8pOwor
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oaXNEaXJlY3QgPyBvcGVyYXRpb25EaXJlY3RQ
dXRCeVZhbE9wdGltaXplIDogb3BlcmF0aW9uUHV0QnlWYWxPcHRpbWl6ZSwgcmVnVDIsIHJlZ1Qx
LCByZWdUMywgcmVnVDAsIHJlZ1Q1LCByZWdUNCwgYnlWYWxJbmZvKTsKICNlbmRpZgogCiAgICAg
bV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleF0uc2xvd1BhdGhU
YXJnZXQgPSBzbG93UGF0aDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1icmVhay5qcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1icmVhay5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41ZWU2NGNhZmVlYmNmZjc4NDNhYzU3ZDkxMjU0ZWI2M2I1YmJkNjMxCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLWJyZWFrLmpzCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIHNob3VsZEJl
KGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rp
b24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFsdWUpCit7CisgICAgb2JqZWN0W25hbWVdID0gdmFs
dWU7Cit9Citub0lubGluZShhc3NpZ24pOworCit2YXIgc3RyaW5nID0gJ2hlbGxvJzsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDE7ICsraSkgeworICAgIHZhciBvYmplY3QgPSB7fTsKKyAgICBp
ZiAoaSA9PT0gMTAwMDApIHsKKyAgICAgICAgYXNzaWduKG9iamVjdCwgNDIsIDQyKTsKKyAgICAg
ICAgc2hvdWxkQmUob2JqZWN0WzQyXSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3QuaGVs
bG8sIHVuZGVmaW5lZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXNzaWduKG9iamVjdCwgc3Ry
aW5nLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdFtzdHJpbmddLCA0Mik7CisgICAgfQor
fQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3B1dC1i
eS12YWwtd2l0aC1zdHJpbmctZ2VuZXJhdGVkLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWdlbmVyYXRlZC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMWY0M2FkM2IwNTJlYzUyZmNkNTgzZjk3Njk0MDVjNTEwNDI1MWEwCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLWdlbmVyYXRlZC5qcwpAQCAtMCwwICsxLDM0IEBACitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9u
IGdlbjEodmFsdWUpCit7CisgICAgcmV0dXJuICdoZScgKyB2YWx1ZTsKK30KK25vSW5saW5lKGdl
bjEpOworCitmdW5jdGlvbiBnZW4yKHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZSArICdsZCc7
Cit9Citub0lubGluZShnZW4yKTsKKworZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFs
dWUpCit7CisgICAgb2JqZWN0W25hbWVdID0gdmFsdWU7Cit9Citub0lubGluZShhc3NpZ24pOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0ID0ge307
CisgICAgaWYgKGkgJSAyID09PSAwKSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIGdlbjEoJ2xs
bycpLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdC5oZWxsbywgNDIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIGdlbjIoJ3dvcicpLCA0Mik7CisgICAgICAgIHNo
b3VsZEJlKG9iamVjdC53b3JsZCwgNDIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmlj
LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLWdlbmVyaWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTZmZjgxMTYwNDYyOWU2ZTdiNmM4YTg2ODg2
Mjg4YjZjYzE5MTk1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1nZW5lcmljLmpzCkBAIC0wLDAgKzEs
MjUgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFj
dHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAn
ICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFsdWUpCit7
CisgICAgb2JqZWN0W25hbWVdID0gdmFsdWU7Cit9Citub0lubGluZShhc3NpZ24pOworCit2YXIg
c3RyaW5nID0gJ2hlbGxvJzsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDE7ICsraSkgeworICAg
IHZhciBvYmplY3QgPSB7fTsKKyAgICBpZiAoaSA9PT0gMTAwMDApIHsKKyAgICAgICAgYXNzaWdu
KG9iamVjdCwgJ3Rlc3RpbmcnLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdC50ZXN0aW5n
LCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdC5oZWxsbywgdW5kZWZpbmVkKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBhc3NpZ24ob2JqZWN0LCBzdHJpbmcsIDQyKTsKKyAgICAgICAgc2hv
dWxkQmUob2JqZWN0W3N0cmluZ10sIDQyKTsKKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1icmVh
ay5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC1icmVhay5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNTQ4NTExMTQ0NTNhNDRhMDJlODg1ODU1NGJm
MTZmM2U0N2E1NzA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWJyZWFrLmpzCkBAIC0wLDAgKzEsMjUg
QEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVh
bCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsg
YWN0dWFsKTsKK30KKworZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFsdWUpCit7Cisg
ICAgb2JqZWN0W25hbWVdID0gdmFsdWU7Cit9Citub0lubGluZShhc3NpZ24pOworCit2YXIga2V5
ID0gU3ltYm9sKCk7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsKKyAgICB2YXIg
b2JqZWN0ID0ge307CisgICAgaWYgKGkgPT09IDEwMDAwKSB7CisgICAgICAgIHZhciBrZXkyID0g
NDI7CisgICAgICAgIGFzc2lnbihvYmplY3QsIGtleTIsIDQyKTsKKyAgICAgICAgc2hvdWxkQmUo
b2JqZWN0W2tleTJdLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVjdFtrZXldLCB1bmRlZmlu
ZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2lnbihvYmplY3QsIGtleSwgNDIpOworICAg
ICAgICBzaG91bGRCZShvYmplY3Rba2V5XSwgNDIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1n
ZW5lcmljLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLWdlbmVyaWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWZjNGQxOGQ0MDFmYTcwZjAxYzk4
ODgxMDgzY2UwMGIzMzJlNzUxMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1nZW5lcmljLmpzCkBAIC0w
LDAgKzEsMjUgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpCit7CisgICAg
aWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZh
bHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgbmFtZSwgdmFs
dWUpCit7CisgICAgb2JqZWN0W25hbWVdID0gdmFsdWU7Cit9Citub0lubGluZShhc3NpZ24pOwor
Cit2YXIga2V5ID0gU3ltYm9sKCk7Citmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAxOyArK2kpIHsK
KyAgICB2YXIgb2JqZWN0ID0ge307CisgICAgaWYgKGkgPT09IDEwMDAwKSB7CisgICAgICAgIHZh
ciBrZXkyID0gU3ltYm9sKCk7CisgICAgICAgIGFzc2lnbihvYmplY3QsIGtleTIsIDQyKTsKKyAg
ICAgICAgc2hvdWxkQmUob2JqZWN0W2tleTJdLCA0Mik7CisgICAgICAgIHNob3VsZEJlKG9iamVj
dFtrZXldLCB1bmRlZmluZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGFzc2lnbihvYmplY3Qs
IGtleSwgNDIpOworICAgICAgICBzaG91bGRCZShvYmplY3Rba2V5XSwgNDIpOworICAgIH0KK30K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0OTM3NjZiY2RjNmFkMGNlYjA2Mzc4YWFlMzU5MmM3YjkxODZhZGRkLi5kM2FhMGY1
ZWEzM2U2YjFiZGM0OGMxMjBhOTQ0MWRhNDI0YzQwZTNkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAK
KzIwMTUtMDgtMTEgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAg
ICAgICAgSW50cm9kdWNlIHB1dF9ieV9pZCBsaWtlIElDIGludG8gcHV0X2J5X3ZhbCB3aGVuIHRo
ZSBnaXZlbiBuYW1lIGlzIFN0cmluZyBvciBTeW1ib2wKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0Nzc2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzeW50aGV0aWMgdGVzdHMgZm9yIHB1dC1ieS12
YWwuIEp1c3QgbWFrZSBwdXQtYnktaWQgdGVzdHMgdXNpbmcgc3ltYm9sIC8gc3RyaW5nLgorCisg
ICAgICAgICoganMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGkt
cHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
Zm9sZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wt
dG8tbXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZz
ZXQuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwt
d2l0aC1zdHJpbmctdHJhbnNpdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1i
b2wtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
aW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uaHRtbDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQt
YnktdmFsLXdpdGgtc3RyaW5nLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcG9s
eW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1z
dHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0
aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0
cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmcu
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJh
bnNpdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0
aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBo
aWMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQt
cHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzOiBBZGRlZC4K
KyAgICAgICAgKGZvbyk6CisgICAgICAgIChmdSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1t
dWx0aS1wdXQtYnktb2Zmc2V0LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChm
dSk6CisgICAgICAgIChiYXIpOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lu
bGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisgICAgICAgIChGb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKGZvbyk6CisgICAgICAgIChGb28pOgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuanM6IEFkZGVkLgor
ICAgICAgICAoZm9vKToKKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9y
cGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6Cisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1y
ZXBsYWNlLWFuZC10cmFuc2l0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLmpz
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVw
bGFjZS1hbmQtdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5qczog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKwogMjAx
NS0wOC0xMSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAg
ICBXaW5kb3dzIHRlc3QgZ2FyZGVuaW5nLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRo
LXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
OWQzNzZmNzYyNzlmOGMzNmM2OWYyMGEzMzUxNzhmYTAwNjc3Y2I3Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdG8t
bXVsdGktcHV0LWJ5LW9mZnNldC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdy
ZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0CisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmlu
Zy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2Zv
bGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0Lmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGQ1MjM1NzBlNjRhZTliM2MzYTM0MWIwNGJkZjZlN2YzM2NiOTA2MQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12
YWwtd2l0aC1zdHJpbmctdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2ZvbGQtcHV0
LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11
bHRpLXB1dC1ieS1vZmZzZXQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxN2RjZTNiNGYyNzQ2
YjQ0ODAzMjk4MzkxNzQ0NDgyYWU5YTJiMmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnkt
b2Zmc2V0LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZm9sZC1wdXQt
YnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1
dC1ieS1vZmZzZXQuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZm9sZC1wdXQtYnktdmFs
LXdpdGgtc3ltYm9sLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYTky
NzcwODQzYmRiYWQwYzYzZWI2OWVjNmQ0NGNkYWIxMzE0NjVlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVs
dGktcHV0LWJ5LW9mZnNldC5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN5bWJv
bC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTEzYmU2ZjJkMDgwNjY3Y2NhOTkzMjkwYzcyMTNiNmI2OWRkMDE5OQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pT
UmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmct
dHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12
YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5MDMyNmE0MzRkOTZj
ZDQwMDY5Y2YzNGI3ZTQzZDQ1NzIzOGY3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10cmFuc2l0aW9uLmh0
bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5
bWJvbC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMzRkNWY1YmRjN2EzMGQw
NGI3YzQxYjM0NjFlM2MwM2NlZTlhYTc0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC10cmFuc2l0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
bGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2lubGluZWQtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10cmFuc2l0aW9uLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWFkZTRlOWY4NTQ0MDk2YTUyMzA4MWUyYzY1NTQ0M2Y4Njk1NDAyMwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5saW5lZC1wdXQtYnkt
dmFsLXdpdGgtc3ltYm9sLXRyYW5zaXRpb24uaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmxpbmVkLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12
YWwtd2l0aC1zdHJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5
bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
MDczYzE5OTMwM2NlMzQ3NDJkYTg1ZTgxOTU5YjA4N2E5MDM3ZTU1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcG9seW1vcnBoaWMt
cHV0LWJ5LXZhbC13aXRoLXN0cmluZworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
b2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42NDk5MjU4ZjJlMmVkZWQxZWRmNDNmMGEzZDMyNzcwNjhlMjAzMmQ1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgt
c3RyaW5nLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3lt
Ym9sLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMDg0NTUxNDJlMWFhYTljZDUxN2UzZTc5ZTNi
MmRlZWY2NTRkM2VkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
b2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvcG9seW1vcnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbAorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3BvbHltb3JwaGljLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzJjZTgwN2UxNzc5ZTA5ZmJhZjFiN2M2
NzEwYjY2ZmE0Y2ZkNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmh0bWwKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcG9seW1v
cnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1z
dHJpbmctZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YzdlMjYxYjc3MmJlMDU4NTc0NGRm
YjRiNDFjYmU3MTUyOGUzYzFkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEwIEBA
CitKU1JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZworCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24t
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNlMjQ5
MzM0NWE4NTA2OTU0Y2JiODM3MTZhODk0ZTI5ZTBhMmI3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQt
dHJhbnNpdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3B1dC1i
eS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5z
aXRpb24uaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmlu
Zy1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGViYjFmNzM2NzFiODRh
N2ZjYTU4M2E5Yzc4NTI1MjlkNzFmODg3MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0aW9u
Lmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1yZXBsYWNlLWFuZC10cmFuc2l0
aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhp
Yy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1z
dHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyZDhm
ZTIxZTg0ZGMwM2M5ZjA3MjQwNjIxZjAxOTY2ZmRkMjhiNmIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9s
eW1vcnBoaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnkt
dmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMu
aHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGln
aHRseS1wb2x5bW9ycGhpYy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmM2RkN2Y3MmRkOWE2MTY1MDcwODE3
MjJiYTdlNWU4ODAyZWI3MGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctc2xpZ2h0bHktcG9seW1vcnBoaWMuaHRtbApAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXNsaWdodGx5LXBvbHltb3JwaGljLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9w
dXQtYnktdmFsLXdpdGgtc3RyaW5nLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWE3YmI5ZTJkMDViNWQwNTM1
M2I2MmQ3YzljMWE3YzI2NTMyNGQzNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1dC1ieS12YWwt
d2l0aC1zdHJpbmcuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWQwNWMyNWNhNjFmOWE2MTFmYTVmNmIwNmU2MjUzMmY2ZTE3MmMz
ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3B1dC1i
eS12YWwtd2l0aC1zeW1ib2wKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5
LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10
cmFuc2l0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMTNiOTQ1ODU2ZjRiMWY4ZDlmZjEz
MjFmYWU3NmI1MWQzYmNlNzY2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24tZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9s
LXJlcGxhY2UtYW5kLXRyYW5zaXRpb24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1yZXBsYWNlLWFuZC10cmFuc2l0aW9uLmh0bWwgYi9MYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJh
bnNpdGlvbi5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM3NWYyNjYwOGRlOTUxMmE4ZjRiYWMzMzYzMWFlNWNm
NzBhOWU5ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1i
eS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5odG1sCkBAIC0wLDAgKzEs
MTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3B1
dC1ieS12YWwtd2l0aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1
dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBv
bHltb3JwaGljLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYmM1ZmNhNTc5NDUyZGQ0MDAyZGRl
ZGZjZmQ1NDE2NGQ0YTM3M2ZkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1z
bGlnaHRseS1wb2x5bW9ycGhpYworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQt
YnktdmFsLXdpdGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmh0bWwgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZDA0NjU3MjUyNTAxNDA2ZjI3YzA3MjRhOWRiZDQwYWU1YWU4ODJj
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9wdXQtYnktdmFsLXdp
dGgtc3ltYm9sLXNsaWdodGx5LXBvbHltb3JwaGljLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13
aXRoLXN5bWJvbC1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12YWwtd2l0
aC1zeW1ib2wuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvcHV0LWJ5LXZhbC13aXRoLXN5
bWJvbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkMTI4YmNjZDRiZDQ3NDRjZGNhMTdjYmVhMGM1YjM1NDBh
NTA4ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3B1dC1ieS12
YWwtd2l0aC1zeW1ib2wuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1w
dXQtYnktb2Zmc2V0LmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZm9s
ZC1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXRvLW11bHRpLXB1dC1ieS1vZmZzZXQuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNGI5YWRiMjk1Y2NlNGI0ZDczNzQ3ZTJiMjk1MjcwNDVkMzIxOWVmNgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQtcHV0LWJ5
LXZhbC13aXRoLXN0cmluZy10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzCkBAIC0wLDAgKzEsNDcg
QEAKK3ZhciBlID0gImUiLCBmID0gImYiLCBnID0gImciOworZnVuY3Rpb24gZm9vKG8pIHsKKyAg
ICBvW2ZdID0gMTsKK30KKworZnVuY3Rpb24gZnUobykgeworICAgIG9bZV0gPSAyOworfQorCitm
dW5jdGlvbiBiYXIoZnVuYywgbykgeworICAgIGZ1bmMobyk7Cit9CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBvWyJpIiArIGldID0gNDI7
CisgICAgZm9vKG8pOworICAgIGZ1KHtbZl06MSwgW2VdOjJ9KTsKKyAgICBmdSh7W2VdOjEsIFtm
XToyLCBbZ106M30pOworfQorICAgIAorZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgIGJhcihmb28sIHtbZl06MX0pOworICAgIGJhcihmdW5jdGlvbigpIHsgfSwgbnVsbCk7Cisg
ICAgYmFyKGZ1bmN0aW9uKCkgeyByZXR1cm4gNDIgfSwgbnVsbCk7Cit9CisgICAgCisoZnVuY3Rp
b24oZnVuYywgbywgcCkgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIHZhciBuID0gMTAwMDAw
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBmdShvKTsKKyAg
ICAgICAgYmFyKGZ1bmMsIG8pOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7
CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChvW2VdICE9IDIpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZTogIiArIG9bZV07CisgICAgaWYgKG9bZl0gIT0g
MSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWUgaW4gby5mOiAiICsgb1tmXTsKKyAg
ICBpZiAocFtlXSAhPSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmU6
ICIgKyBwW2VdOworICAgIGlmIChwW2ZdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlIGluIHAuZjogIiArIHBbZl07Cit9KShmb28sIHtbZl06NDIsIFtlXToyM30sIHtbZV06
MjMsIFtmXTo0MiwgW2ddOjEwMH0pOworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0
LWJ5LW9mZnNldC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2ZvbGQt
cHV0LWJ5LXZhbC13aXRoLXN5bWJvbC10by1tdWx0aS1wdXQtYnktb2Zmc2V0LmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhlMDI2MTUzYTk1ZDhiYmRhYjI0NjBmMDMwZDA5YTAzOWU3ZTE4ODQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9mb2xkLXB1dC1ieS12
YWwtd2l0aC1zeW1ib2wtdG8tbXVsdGktcHV0LWJ5LW9mZnNldC5qcwpAQCAtMCwwICsxLDQ3IEBA
Cit2YXIgZSA9IFN5bWJvbCgpLCBmID0gU3ltYm9sKCksIGcgPSBTeW1ib2woKTsKK2Z1bmN0aW9u
IGZvbyhvKSB7CisgICAgb1tmXSA9IDE7Cit9CisKK2Z1bmN0aW9uIGZ1KG8pIHsKKyAgICBvW2Vd
ID0gMjsKK30KKworZnVuY3Rpb24gYmFyKGZ1bmMsIG8pIHsKKyAgICBmdW5jKG8pOworfQorCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIHZhciBvID0ge307CisgICAgb1si
aSIgKyBpXSA9IDQyOworICAgIGZvbyhvKTsKKyAgICBmdSh7W2ZdOjEsIFtlXToyfSk7CisgICAg
ZnUoe1tlXToxLCBbZl06MiwgW2ddOjN9KTsKK30KKyAgICAKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwOyArK2kpIHsKKyAgICBiYXIoZm9vLCB7W2ZdOjF9KTsKKyAgICBiYXIoZnVuY3Rpb24oKSB7
IH0sIG51bGwpOworICAgIGJhcihmdW5jdGlvbigpIHsgcmV0dXJuIDQyIH0sIG51bGwpOworfQor
ICAgIAorKGZ1bmN0aW9uKGZ1bmMsIG8sIHApIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICB2
YXIgbiA9IDEwMDAwMDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAg
ICAgZnUobyk7CisgICAgICAgIGJhcihmdW5jLCBvKTsKKyAgICAgICAgdmFyIHRtcCA9IG87Cisg
ICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAob1tlXSAhPSAy
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBvLmU6ICIgKyBvW2VdOworICAg
IGlmIChvW2ZdICE9IDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlIGluIG8uZjog
IiArIG9bZl07CisgICAgaWYgKHBbZV0gIT0gMikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWUgaW4gcC5lOiAiICsgcFtlXTsKKyAgICBpZiAocFtmXSAhPSAxKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCB2YWx1ZSBpbiBwLmY6ICIgKyBwW2ZdOworfSkoZm9vLCB7W2ZdOjQyLCBb
ZV06MjN9LCB7W2VdOjIzLCBbZl06NDIsIFtnXToxMDB9KTsKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3Ry
aW5nLXRyYW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9p
bmxpbmVkLXB1dC1ieS12YWwtd2l0aC1zdHJpbmctdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
YmY0MmVmNDllZDE4ODAyM2ExNDQ1NmFhODViMTQxZjYzOTM5YWUxCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLXRyYW5zaXRpb24uanMKQEAgLTAsMCArMSw0MCBAQAordmFyIHggPSAieCI7
Cit2YXIgeSA9ICJ5IjsKK3ZhciBhID0gImEiOwordmFyIGIgPSAiYiI7Cit2YXIgYyA9ICJjIjsK
K3ZhciBkID0gImQiOwordmFyIGUgPSAiZSI7Cit2YXIgZiA9ICJmIjsKK3ZhciBnID0gImciOwor
dmFyIGggPSAiaCI7Cit2YXIgaSA9ICJpIjsKKworZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvW3hd
ID0gMTsKKyAgICBvW3ldID0gMjsKKyAgICBvW2FdID0gMzsKKyAgICBvW2JdID0gNDsKKyAgICBv
W2NdID0gNTsKKyAgICBvW2RdID0gNjsKKyAgICBvW2VdID0gNzsKKyAgICBvW2ZdID0gODsKKyAg
ICBvW2ddID0gOTsKKyAgICBvW2hdID0gMTA7CisgICAgb1tpXSA9IDExOworfQorCitmdW5jdGlv
biBGb28oKSB7CisgICAgZm9vKHRoaXMpOworfQorCit2YXIgcmVzdWx0ID0gMDsKKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIGZvbyh7W2ZdOjQyfSk7CisgICAgcmVz
dWx0ICs9IChuZXcgRm9vKCkpW3hdOworfQorCitpZiAocmVzdWx0ICE9IDEwMDAwMCkKKyAgICB0
aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXRy
YW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmxpbmVk
LXB1dC1ieS12YWwtd2l0aC1zeW1ib2wtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNzcxZTdi
MzA5Njk0N2IzOWY0ODI4NDlhNmQ0MWZiOTYyNmU1MGJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5saW5lZC1wdXQtYnktdmFsLXdpdGgt
c3ltYm9sLXRyYW5zaXRpb24uanMKQEAgLTAsMCArMSw0MCBAQAordmFyIHggPSBTeW1ib2woKTsK
K3ZhciB5ID0gU3ltYm9sKCk7Cit2YXIgYSA9IFN5bWJvbCgpOwordmFyIGIgPSBTeW1ib2woKTsK
K3ZhciBjID0gU3ltYm9sKCk7Cit2YXIgZCA9IFN5bWJvbCgpOwordmFyIGUgPSBTeW1ib2woKTsK
K3ZhciBmID0gU3ltYm9sKCk7Cit2YXIgZyA9IFN5bWJvbCgpOwordmFyIGggPSBTeW1ib2woKTsK
K3ZhciBpID0gU3ltYm9sKCk7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgb1t4XSA9IDE7Cisg
ICAgb1t5XSA9IDI7CisgICAgb1thXSA9IDM7CisgICAgb1tiXSA9IDQ7CisgICAgb1tjXSA9IDU7
CisgICAgb1tkXSA9IDY7CisgICAgb1tlXSA9IDc7CisgICAgb1tmXSA9IDg7CisgICAgb1tnXSA9
IDk7CisgICAgb1toXSA9IDEwOworICAgIG9baV0gPSAxMTsKK30KKworZnVuY3Rpb24gRm9vKCkg
eworICAgIGZvbyh0aGlzKTsKK30KKwordmFyIHJlc3VsdCA9IDA7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICBmb28oe1tmXTo0Mn0pOworICAgIHJlc3VsdCArPSAo
bmV3IEZvbygpKVt4XTsKK30KKworaWYgKHJlc3VsdCAhPSAxMDAwMDApCisgICAgdGhyb3cgIkJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zdHJpbmcuanMgYi9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjMjJlOGMwMGRjYzk1MzZmNWU4Njc3N2ZjNmE1
ZjgxMGJjZWY3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9wb2x5bW9ycGhpYy1wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzCkBAIC0wLDAg
KzEsMjYgQEAKK3ZhciBmID0gImYiLCBnID0gImciLCBoID0gImgiOworCitmdW5jdGlvbiBmb28o
bykgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpCisgICAgICAgIG9bZl0gPSAo
b1tmXSB8IDApICsgNDI7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgb2JqZWN0OworICAgIGlmICgoaSAlIDMpID09IDAp
CisgICAgICAgIG9iamVjdCA9IHtbZ106M307CisgICAgZWxzZSBpZiAoKGkgJSAzKSA9PSAxKQor
ICAgICAgICBvYmplY3QgPSB7W2ZdOjEsIFtnXToyfTsKKyAgICBlbHNlIGlmICgoaSAlIDMpID09
IDIpCisgICAgICAgIG9iamVjdCA9IHtbZ106MSwgW2ZdOjJ9OworICAgIGZvbyhvYmplY3QpOwor
ICAgIGlmIChvYmplY3RbZl0gIT0gNDIgKiAxMDAgKyAoaSAlIDMpKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQgZm9yIGkgPSAiICsgaSArICI6ICIgKyBvYmplY3RbZl07Cit9CisK
K3ZhciByID0ge1tnXTozLCBbaF06NCwgW2ZdOjV9OworZm9vKHIpOworaWYgKHJbZl0gIT0gNSAr
IDQyICogMTAwKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByW2Zd
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcG9seW1v
cnBoaWMtcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3BvbHltb3JwaGljLXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZTcyZDBlODkwMzIzZTdhNjIzYWVjZWEwNTQ0YTljOTEwMTI4ZDRjMgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3BvbHltb3JwaGlj
LXB1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKQEAgLTAsMCArMSwyNiBAQAordmFyIGYgPSBTeW1i
b2woKSwgZyA9IFN5bWJvbCgpLCBoID0gU3ltYm9sKCk7CisKK2Z1bmN0aW9uIGZvbyhvKSB7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgb1tmXSA9IChvW2ZdIHwg
MCkgKyA0MjsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDA7ICsraSkgeworICAgIHZhciBvYmplY3Q7CisgICAgaWYgKChpICUgMykgPT0gMCkKKyAgICAg
ICAgb2JqZWN0ID0ge1tnXTozfTsKKyAgICBlbHNlIGlmICgoaSAlIDMpID09IDEpCisgICAgICAg
IG9iamVjdCA9IHtbZl06MSwgW2ddOjJ9OworICAgIGVsc2UgaWYgKChpICUgMykgPT0gMikKKyAg
ICAgICAgb2JqZWN0ID0ge1tnXToxLCBbZl06Mn07CisgICAgZm9vKG9iamVjdCk7CisgICAgaWYg
KG9iamVjdFtmXSAhPSA0MiAqIDEwMCArIChpICUgMykpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdCBmb3IgaSA9ICIgKyBpICsgIjogIiArIG9iamVjdFtmXTsKK30KKwordmFyIHIg
PSB7W2ddOjMsIFtoXTo0LCBbZl06NX07Citmb28ocik7CitpZiAocltmXSAhPSA1ICsgNDIgKiAx
MDApCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJbZl07CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdp
dGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLXJlcGxhY2UtYW5kLXRyYW5z
aXRpb24uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uN2IyMzM3Yzk0M2Q0YmNhMTY4ZDk0NjEwMDA3YjFkODA4Yzhl
ZDlhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL3B1dC1ieS12YWwtd2l0aC1zdHJpbmctcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcwpAQCAt
MCwwICsxLDE0IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIGYgPSAiZiIsIGcgPSAiZyI7Cisg
ICAgdmFyIG87CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
bjsgKytpKSB7CisgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICAgIG8gPSB7W2ZdOiAxfTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbyA9IHtbZl06IDEsIFtnXTogMn07CisgICAgICAg
IG9bZ10gPSBpOworICAgIH0KKyAgICBpZiAob1tnXSAhPSBuIC0gMSkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWUgb2Ygby5nOiAiICsgb1tnXTsKK30pKCk7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5n
LXNsaWdodGx5LXBvbHltb3JwaGljLmpzIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45YWNjNDFkZGU0OGQxOGE3ZjcwOTI0MTQ5ZmQwNTIyNWI5ZjM4YTY5Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZh
bC13aXRoLXN0cmluZy1zbGlnaHRseS1wb2x5bW9ycGhpYy5qcwpAQCAtMCwwICsxLDE2IEBACiso
ZnVuY3Rpb24oKSB7CisgICAgdmFyIGYgPSAiZiIsIGcgPSAiZyI7CisgICAgdmFyIG8gPSB7W2Zd
OiAxLCBbZ106IDJ9OworICAgIHZhciBwID0ge1tmXTogMX07CisgICAgdmFyIG4gPSAxMDAwMDAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIG9bZl0gPSBpOwor
ICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7Cisg
ICAgfQorICAgIGlmIChvW2ZdICE9IG4gLSAyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZSBvZiBvLmY6ICIgKyBvW2ZdOworICAgIGlmIChwW2ZdICE9IG4gLSAxKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IHZhZCB2YWx1ZSBvZiBwLmY6ICIgKyBwW2ZdOworfSkoKTsKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1z
dHJpbmcuanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFs
LXdpdGgtc3RyaW5nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2M2ZhMTAwNGQ1ZjkxYmNkZWM5OGZlYWQ0MmU3
ZDRjNWFmMGI1MjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3RyaW5nLmpzCkBAIC0wLDAgKzEsMjAgQEAKK3Zh
ciBmID0gImYiOworCitmdW5jdGlvbiBmb28obykgeworICAgIG9bZl0gPSA0MjsKK30KKworZnVu
Y3Rpb24gYmFyKG8pIHsKKyAgICBvW2ZdID0gODQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDAwMDsgKytpKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICBmb28obyk7CisgICAgaWYgKG9b
Zl0gIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogZXhwZWN0ZWQgNDIsIGdvdCAiICsgb1tm
XTsKKyAgICBiYXIobykKKyAgICBpZiAob1tmXSAhPSA4NCkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBleHBlY3RlZCA4NCwgZ290ICIgKyBvW2ZdOworfQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9wdXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2Ut
YW5kLXRyYW5zaXRpb24uanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9w
dXQtYnktdmFsLXdpdGgtc3ltYm9sLXJlcGxhY2UtYW5kLXRyYW5zaXRpb24uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uY2E2YTIzYmI5ODM3MDJhMzA4MDU2OTY5MWQyY2IxZTlmMDc3NmY3MAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0
aC1zeW1ib2wtcmVwbGFjZS1hbmQtdHJhbnNpdGlvbi5qcwpAQCAtMCwwICsxLDE0IEBACisoZnVu
Y3Rpb24oKSB7CisgICAgdmFyIGYgPSBTeW1ib2woKSwgZyA9IFN5bWJvbCgpOworICAgIHZhciBv
OworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkg
eworICAgICAgICBpZiAoaSAmIDEpCisgICAgICAgICAgICBvID0ge1tmXTogMX07CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG8gPSB7W2ZdOiAxLCBbZ106IDJ9OworICAgICAgICBvW2ddID0g
aTsKKyAgICB9CisgICAgaWYgKG9bZ10gIT0gbiAtIDEpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlIG9mIG8uZzogIiArIG9bZ107Cit9KSgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRoLXN5bWJvbC1zbGlnaHRs
eS1wb2x5bW9ycGhpYy5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1
dC1ieS12YWwtd2l0aC1zeW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWU1MGQ5YTUwZjJiNDZmNWE2MjM1MWEwNDk2MTI4NGEyZWNkNDZkMAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1z
eW1ib2wtc2xpZ2h0bHktcG9seW1vcnBoaWMuanMKQEAgLTAsMCArMSwxNiBAQAorKGZ1bmN0aW9u
KCkgeworICAgIHZhciBmID0gU3ltYm9sKCksIGcgPSBTeW1ib2woKTsKKyAgICB2YXIgbyA9IHtb
Zl06IDEsIFtnXTogMn07CisgICAgdmFyIHAgPSB7W2ZdOiAxfTsKKyAgICB2YXIgbiA9IDEwMDAw
MDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgb1tmXSA9IGk7
CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsK
KyAgICB9CisgICAgaWYgKG9bZl0gIT0gbiAtIDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlIG9mIG8uZjogIiArIG9bZl07CisgICAgaWYgKHBbZl0gIT0gbiAtIDEpCisgICAgICAg
IHRocm93ICJFcnJvcjogdmFkIHZhbHVlIG9mIHAuZjogIiArIHBbZl07Cit9KSgpOwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvcHV0LWJ5LXZhbC13aXRo
LXN5bWJvbC5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3B1dC1ieS12
YWwtd2l0aC1zeW1ib2wuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTU4OGJhNzhkOGZjZmJhZmQ5OTEzMzU3NzA1
YzQ2YzQ3NzBkNWZlNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3B1dC1ieS12YWwtd2l0aC1zeW1ib2wuanMKQEAgLTAsMCArMSwyMCBAQAor
dmFyIGYgPSBTeW1ib2woIkNvY29hIik7CisKK2Z1bmN0aW9uIGZvbyhvKSB7CisgICAgb1tmXSA9
IDQyOworfQorCitmdW5jdGlvbiBiYXIobykgeworICAgIG9bZl0gPSA4NDsKK30KKworZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IHt9OworICAgIGZvbyhv
KTsKKyAgICBpZiAob1tmXSAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBleHBlY3RlZCA0
MiwgZ290ICIgKyBvW2ZdOworICAgIGJhcihvKQorICAgIGlmIChvW2ZdICE9IDg0KQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IGV4cGVjdGVkIDg0LCBnb3QgIiArIG9bZl07Cit9CisK
</data>
<flag name="review"
          id="283974"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>