<?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>145204</bug_id>
          
          <creation_ts>2015-05-19 22:49:04 -0700</creation_ts>
          <short_desc>Node::origin should be able to tell you if it&apos;s OK to exit</short_desc>
          <delta_ts>2015-08-26 12:25:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>145205</dependson>
    
    <dependson>148286</dependson>
    
    <dependson>148323</dependson>
    
    <dependson>148331</dependson>
    
    <dependson>148338</dependson>
    
    <dependson>148367</dependson>
    
    <dependson>148397</dependson>
          <blocked>148259</blocked>
    
    <blocked>148462</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096180</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-19 22:49:04 -0700</bug_when>
    <thetext>We often have sequences of operations like this:

a: GetStuff(...)
b: Check(Thing:@a)
c: Call(@a, ...)
d: MovHint(@c, loc42)

Notice that GetStuff, Check, and Call can all exit. But after Call, you can&apos;t exit anymore. In particular, MovHint cannot exit.

But, the fact that MovHint cannot exit is not communicated in the IR.  We should change that: a Node&apos;s forExit origin is set only when that node can exit.

This means that we can for example immediately see that we cannot hoist an exiting node just above the MovHint. But, we would also see that we could hoist an exiting node above the Call, or above @a or @b.

This would harden the IR for fancier CFG transformations, and make it easier to split blocks and insert control flow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119396</commentid>
    <comment_count>1</comment_count>
      <attachid>259507</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-20 15:24:02 -0700</bug_when>
    <thetext>Created attachment 259507
maybe it&apos;ll work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119419</commentid>
    <comment_count>2</comment_count>
      <attachid>259512</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-20 16:04:09 -0700</bug_when>
    <thetext>Created attachment 259512
builds but crashes on launch

Off to a good start!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119866</commentid>
    <comment_count>3</comment_count>
      <attachid>259643</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 12:35:57 -0700</bug_when>
    <thetext>Created attachment 259643
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119917</commentid>
    <comment_count>4</comment_count>
      <attachid>259656</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 14:12:11 -0700</bug_when>
    <thetext>Created attachment 259656
builds again

Validation is catching tons of errors.  Fixing them...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119942</commentid>
    <comment_count>5</comment_count>
      <attachid>259666</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-21 15:05:37 -0700</bug_when>
    <thetext>Created attachment 259666
it passed a test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120126</commentid>
    <comment_count>6</comment_count>
      <attachid>259724</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-22 11:55:43 -0700</bug_when>
    <thetext>Created attachment 259724
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120508</commentid>
    <comment_count>7</comment_count>
      <attachid>259810</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-24 19:50:10 -0700</bug_when>
    <thetext>Created attachment 259810
even more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120531</commentid>
    <comment_count>8</comment_count>
      <attachid>259820</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-24 21:37:32 -0700</bug_when>
    <thetext>Created attachment 259820
passing so many tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120688</commentid>
    <comment_count>9</comment_count>
      <attachid>259871</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 12:39:40 -0700</bug_when>
    <thetext>Created attachment 259871
more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120690</commentid>
    <comment_count>10</comment_count>
      <attachid>259872</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 12:52:27 -0700</bug_when>
    <thetext>Created attachment 259872
passes hundreds of tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120712</commentid>
    <comment_count>11</comment_count>
      <attachid>259879</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 14:14:57 -0700</bug_when>
    <thetext>Created attachment 259879
passes thousands of tests!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120741</commentid>
    <comment_count>12</comment_count>
      <attachid>259892</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 15:40:55 -0700</bug_when>
    <thetext>Created attachment 259892
might be done

This one looks like it might be the winner.  So far, no test failures...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120777</commentid>
    <comment_count>13</comment_count>
      <attachid>259902</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 16:49:54 -0700</bug_when>
    <thetext>Created attachment 259902
few more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120804</commentid>
    <comment_count>14</comment_count>
      <attachid>259911</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 18:39:06 -0700</bug_when>
    <thetext>Created attachment 259911
even more stuff

Finding more little corner cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120810</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 19:11:48 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created attachment 259911 [details]
&gt; even more stuff
&gt; 
&gt; Finding more little corner cases

This just passed debug 64-bit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120826</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 20:51:42 -0700</bug_when>
    <thetext>This doesn&apos;t appear to hurt performance.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r188938)
&quot;ExitOK&quot; at /Volumes/Data/primary/OpenSource/WebKitBuild/Release/jsc (r188938)

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

                                                        TipOfTree                   ExitOK                                      
SunSpider:
   3d-cube                                            4.8896+-0.1833     ?      5.3938+-1.5224        ? might be 1.1031x slower
   3d-morph                                           5.3436+-0.3864            5.2766+-0.1187          might be 1.0127x faster
   3d-raytrace                                        5.1812+-0.4144            5.1461+-0.3324        
   access-binary-trees                                1.9736+-0.0592     ?      2.0747+-0.2195        ? might be 1.0512x slower
   access-fannkuch                                    5.3772+-0.3580            5.2728+-0.0767          might be 1.0198x faster
   access-nbody                                       2.4603+-0.0778            2.4450+-0.0610        
   access-nsieve                                      3.0032+-0.0711     ?      3.2390+-0.3367        ? might be 1.0785x slower
   bitops-3bit-bits-in-byte                           1.4457+-0.0521     ?      1.4539+-0.0514        ?
   bitops-bits-in-byte                                3.2582+-0.0774            3.2457+-0.0710        
   bitops-bitwise-and                                 1.9789+-0.0653            1.9486+-0.0345          might be 1.0155x faster
   bitops-nsieve-bits                                 2.9690+-0.0724            2.9212+-0.0396          might be 1.0164x faster
   controlflow-recursive                              2.1756+-0.4144            2.0517+-0.0688          might be 1.0604x faster
   crypto-aes                                         3.8805+-0.2668            3.8577+-0.1680        
   crypto-md5                                         2.4336+-0.1663            2.3236+-0.0925          might be 1.0473x faster
   crypto-sha1                                        2.4112+-0.2668     ?      2.4223+-0.1492        ?
   date-format-tofte                                  6.6462+-0.2358            6.5720+-0.4110          might be 1.0113x faster
   date-format-xparb                                  4.6622+-0.1911     ?      5.0462+-0.4624        ? might be 1.0824x slower
   math-cordic                                        2.7442+-0.1126     ?      2.8068+-0.2761        ? might be 1.0228x slower
   math-partial-sums                                  5.0578+-0.1121            5.0247+-0.0790        
   math-spectral-norm                                 1.9392+-0.3083            1.7838+-0.0606          might be 1.0871x faster
   regexp-dna                                         6.4343+-0.2482     ?      6.7470+-0.3588        ? might be 1.0486x slower
   string-base64                                      4.3145+-0.2144     ?      4.4381+-0.3994        ? might be 1.0286x slower
   string-fasta                                       5.9825+-0.2559            5.8736+-0.2866          might be 1.0185x faster
   string-tagcloud                                    7.9216+-0.1464     ?      8.2128+-0.4057        ? might be 1.0368x slower
   string-unpack-code                                18.3817+-0.6447     ?     18.9768+-0.9092        ? might be 1.0324x slower
   string-validate-input                              4.5040+-0.1386            4.4999+-0.1523        

   &lt;arithmetic&gt;                                       4.5142+-0.0571     ?      4.5790+-0.1200        ? might be 1.0144x slower

                                                        TipOfTree                   ExitOK                                      
LongSpider:
   3d-cube                                          808.3400+-10.0554    ?    818.5363+-10.9203       ? might be 1.0126x slower
   3d-morph                                        1500.2028+-10.8913        1498.3061+-9.2667        
   3d-raytrace                                      603.4610+-6.6692     ?    607.3777+-4.3103        ?
   access-binary-trees                              797.7372+-3.3536     ?    798.3420+-6.0576        ?
   access-fannkuch                                  284.8860+-9.4044     ?    292.6564+-22.8851       ? might be 1.0273x slower
   access-nbody                                     509.1995+-3.6657          506.9030+-2.3976        
   access-nsieve                                    365.0481+-9.2001          363.5181+-10.6793       
   bitops-3bit-bits-in-byte                          38.5849+-0.8184     ?     39.2378+-1.8421        ? might be 1.0169x slower
   bitops-bits-in-byte                               77.5928+-2.3438           76.3056+-1.6621          might be 1.0169x faster
   bitops-nsieve-bits                               407.5053+-7.9268     ?    410.0804+-8.0490        ?
   controlflow-recursive                            427.2923+-7.7161          425.4536+-6.3240        
   crypto-aes                                       568.1852+-11.6548    ?    572.4289+-8.6458        ?
   crypto-md5                                       500.0910+-3.3382          496.8773+-6.3817        
   crypto-sha1                                      641.3495+-13.1620    ?    651.4514+-10.2983       ? might be 1.0158x slower
   date-format-tofte                                494.4534+-5.8857     ?    498.8000+-9.3658        ?
   date-format-xparb                                672.9099+-13.2751    !    754.3044+-9.4436        ! definitely 1.1210x slower
   hash-map                                         149.1402+-1.8986     ?    151.0415+-3.5234        ? might be 1.0127x slower
   math-cordic                                      484.4093+-3.3417          482.2714+-2.2487        
   math-partial-sums                                465.8065+-3.0430     ?    467.7980+-3.3115        ?
   math-spectral-norm                               551.0503+-4.4607          550.0794+-3.5044        
   string-base64                                    351.9412+-5.8611          349.3042+-4.0061        
   string-fasta                                     364.7245+-2.8287     ?    368.3845+-4.7967        ? might be 1.0100x slower
   string-tagcloud                                  178.4104+-1.7611     ?    179.2775+-1.1052        ?

   &lt;geometric&gt;                                      390.8698+-1.4926     !    394.1693+-1.1317        ! definitely 1.0084x slower

                                                        TipOfTree                   ExitOK                                      
V8Spider:
   crypto                                            49.3206+-1.9541           49.0698+-1.1195        
   deltablue                                         89.3190+-5.1352           85.4078+-5.4816          might be 1.0458x faster
   earley-boyer                                      39.1767+-1.1275     ?     40.1682+-1.1828        ? might be 1.0253x slower
   raytrace                                          32.0417+-1.7159           31.9754+-1.6580        
   regexp                                            61.8215+-1.1598     ?     62.0590+-2.2039        ?
   richards                                          65.1760+-1.1590     ?     65.5263+-1.6507        ?
   splay                                             35.7221+-1.6290           34.8504+-1.5896          might be 1.0250x faster

   &lt;geometric&gt;                                       50.0950+-0.5312           49.7906+-0.6245          might be 1.0061x faster

                                                        TipOfTree                   ExitOK                                      
Octane:
   encrypt                                           0.16835+-0.00385    ?     0.17087+-0.00161       ? might be 1.0149x slower
   decrypt                                           3.25838+-0.10900    ?     3.26244+-0.11730       ?
   deltablue                                x2       0.15809+-0.00236          0.15538+-0.00352         might be 1.0175x faster
   earley                                            0.27482+-0.00174    ?     0.27742+-0.00291       ?
   boyer                                             4.14026+-0.04072          4.12559+-0.01394       
   navier-stokes                            x2       4.88253+-0.03590          4.86301+-0.01878       
   raytrace                                 x2       0.99439+-0.03701    ?     0.99524+-0.04065       ?
   richards                                 x2       0.10996+-0.00085          0.10955+-0.00110       
   splay                                    x2       0.33553+-0.00424          0.33212+-0.00392         might be 1.0103x faster
   regexp                                   x2      25.26138+-0.50646         24.87384+-0.37559         might be 1.0156x faster
   pdfjs                                    x2      36.62692+-0.26023         36.59849+-0.27802       
   mandreel                                 x2      44.65932+-0.91312         44.31157+-1.02146       
   gbemu                                    x2      34.22528+-0.42733    ?    34.22709+-0.33630       ?
   closure                                           0.56477+-0.00582    ?     0.56604+-0.00348       ?
   jquery                                            7.13536+-0.02819    ?     7.14109+-0.07167       ?
   box2d                                    x2      10.02969+-0.11983    ?    10.20829+-0.24253       ? might be 1.0178x slower
   zlib                                     x2     390.47519+-7.59867        390.02182+-6.13878       
   typescript                               x2     639.91085+-9.84479    ?   656.27741+-12.23213      ? might be 1.0256x slower

   &lt;geometric&gt;                                       5.58119+-0.01319          5.57958+-0.03397         might be 1.0003x faster

                                                        TipOfTree                   ExitOK                                      
Kraken:
   ai-astar                                          228.318+-12.078     ?     229.190+-8.489         ?
   audio-beat-detection                               50.138+-0.511      ?      51.053+-0.862         ? might be 1.0182x slower
   audio-dft                                          95.221+-0.303      ?      98.130+-3.190         ? might be 1.0305x slower
   audio-fft                                          34.779+-0.359      ?      34.861+-0.268         ?
   audio-oscillator                                   60.515+-0.639             59.657+-1.031           might be 1.0144x faster
   imaging-darkroom                                   61.089+-0.577             60.790+-0.088         
   imaging-desaturate                                 49.408+-0.425      ?      49.700+-0.501         ?
   imaging-gaussian-blur                              84.811+-2.928             84.612+-0.923         
   json-parse-financial                               38.814+-0.795      ?      39.707+-0.906         ? might be 1.0230x slower
   json-stringify-tinderbox                           22.287+-0.710      ?      23.121+-0.806         ? might be 1.0374x slower
   stanford-crypto-aes                                41.077+-1.961      ?      42.103+-0.807         ? might be 1.0250x slower
   stanford-crypto-ccm                                33.910+-0.585      ?      35.390+-1.193         ? might be 1.0436x slower
   stanford-crypto-pbkdf2                             95.025+-1.618      ?      95.365+-1.706         ?
   stanford-crypto-sha256-iterative                   37.845+-1.223             36.653+-0.786           might be 1.0325x faster

   &lt;arithmetic&gt;                                       66.660+-0.821      ?      67.166+-0.588         ? might be 1.0076x slower

                                                        TipOfTree                   ExitOK                                      
JSRegress:
   abc-forward-loop-equal                            30.4698+-1.3190           29.4448+-0.4076          might be 1.0348x faster
   abc-postfix-backward-loop                         30.7947+-1.5435           30.1754+-0.8200          might be 1.0205x faster
   abc-simple-backward-loop                          30.2321+-0.7664     ?     31.4377+-2.9701        ? might be 1.0399x slower
   abc-simple-forward-loop                           29.6490+-0.6774     ?     30.4507+-1.4745        ? might be 1.0270x slower
   abc-skippy-loop                                   21.8389+-0.3638           21.7327+-0.7147        
   abs-boolean                                        2.4155+-0.0657     ?      2.4914+-0.2234        ? might be 1.0314x slower
   adapt-to-double-divide                            16.6795+-0.5643           16.3973+-0.3894          might be 1.0172x faster
   aliased-arguments-getbyval                         1.3232+-0.1773            1.2033+-0.0847          might be 1.0996x faster
   allocate-big-object                                2.4394+-0.1895     ?      2.4978+-0.2010        ? might be 1.0239x slower
   arguments-named-and-reflective                    11.1548+-0.5601           10.9955+-0.5189          might be 1.0145x faster
   arguments-out-of-bounds                            9.3332+-0.2055     ?      9.5661+-0.2637        ? might be 1.0250x slower
   arguments-strict-mode                              9.8496+-0.2187            9.7982+-0.5506        
   arguments                                          8.9028+-0.4698            8.3916+-0.2159          might be 1.0609x faster
   arity-mismatch-inlining                            0.7661+-0.0086     ?      0.7789+-0.0155        ? might be 1.0166x slower
   array-access-polymorphic-structure                 5.8091+-0.1679     ?      5.9122+-0.1920        ? might be 1.0177x slower
   array-nonarray-polymorhpic-access                 24.8020+-0.4813     ?     25.0867+-0.7482        ? might be 1.0115x slower
   array-prototype-every                             77.7476+-1.0371     ?     78.7034+-1.7710        ? might be 1.0123x slower
   array-prototype-forEach                           76.9349+-2.5649           76.5386+-1.7993        
   array-prototype-map                               81.7243+-0.8562     ?     83.5348+-3.5031        ? might be 1.0222x slower
   array-prototype-reduce                            73.1005+-2.9519           71.7309+-1.7091          might be 1.0191x faster
   array-prototype-reduceRight                       71.9795+-1.5904           71.7950+-1.4373        
   array-prototype-some                              77.6536+-1.2321           76.5376+-1.2714          might be 1.0146x faster
   array-splice-contiguous                           20.1143+-0.4437     ?     20.7225+-0.4967        ? might be 1.0302x slower
   array-with-double-add                              3.4363+-0.1568     ?      3.5920+-0.2024        ? might be 1.0453x slower
   array-with-double-increment                        3.0782+-0.1170            3.0622+-0.0839        
   array-with-double-mul-add                          4.1679+-0.1702     ?      4.3237+-0.4513        ? might be 1.0374x slower
   array-with-double-sum                              3.1311+-0.1324     ?      3.1365+-0.0361        ?
   array-with-int32-add-sub                           5.8179+-0.0649            5.7378+-0.0997          might be 1.0140x faster
   array-with-int32-or-double-sum                     3.2452+-0.2143     ?      3.2574+-0.1195        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.7573+-0.7892     ?     26.6571+-0.9699        ? might be 1.0349x slower
   ArrayBuffer-DataView-alloc-long-lived             11.6248+-0.3907     ?     11.7550+-0.4453        ? might be 1.0112x slower
   ArrayBuffer-Int32Array-byteOffset                  3.6823+-0.1416            3.5969+-0.1422          might be 1.0238x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     31.3067+-3.5543           30.5074+-0.5660          might be 1.0262x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     20.0981+-0.5562     ?     20.5520+-0.6470        ? might be 1.0226x slower
   ArrayBuffer-Int8Array-alloc-long-lived            12.1869+-0.3097     ?     12.6426+-0.4827        ? might be 1.0374x slower
   ArrayBuffer-Int8Array-alloc                        9.4494+-0.2549     ?      9.6077+-0.3719        ? might be 1.0168x slower
   arrowfunction-call                                10.1312+-0.1011            9.9428+-0.3881          might be 1.0189x faster
   asmjs_bool_bug                                     6.9733+-0.3603            6.8529+-0.0975          might be 1.0176x faster
   assign-custom-setter-polymorphic                   2.3062+-0.0407     ?      2.3190+-0.0818        ?
   assign-custom-setter                               3.1531+-0.0951     ?      3.2816+-0.3032        ? might be 1.0407x slower
   basic-set                                          8.7397+-0.1847            8.7258+-0.6103        
   big-int-mul                                        3.4840+-0.2896     ?      3.5791+-0.1221        ? might be 1.0273x slower
   boolean-test                                       2.9172+-0.1591     ?      2.9885+-0.1551        ? might be 1.0244x slower
   branch-fold                                        3.5517+-0.0631            3.5396+-0.0492        
   branch-on-string-as-boolean                       17.0410+-0.5453     ?     17.6646+-0.9355        ? might be 1.0366x slower
   by-val-generic                                     2.4249+-0.2230            2.2906+-0.0929          might be 1.0587x faster
   call-spread-apply                                 25.9804+-0.5496           25.9255+-0.6542        
   call-spread-call                                  20.9815+-0.3201     ?     21.5199+-0.7379        ? might be 1.0257x slower
   captured-assignments                               0.5308+-0.1792            0.4657+-0.0520          might be 1.1398x faster
   cast-int-to-double                                 5.0031+-0.0756     ?      5.1517+-0.2375        ? might be 1.0297x slower
   cell-argument                                      6.6503+-0.4772            6.4904+-0.6054          might be 1.0246x faster
   cfg-simplify                                       2.6374+-0.0775     ?      2.7147+-0.1287        ? might be 1.0293x slower
   chain-getter-access                                8.4846+-0.3806            8.3207+-0.1807          might be 1.0197x faster
   cmpeq-obj-to-obj-other                            11.9402+-0.5529     ?     12.4177+-1.0157        ? might be 1.0400x slower
   constant-test                                      4.8178+-0.2333            4.7880+-0.0702        
   create-lots-of-functions                           9.7049+-0.4674            9.3466+-0.3243          might be 1.0383x faster
   cse-new-array-buffer                               2.1017+-0.1020     ?      2.2136+-0.0891        ? might be 1.0532x slower
   cse-new-array                                      2.2688+-0.3004            2.2414+-0.0982          might be 1.0122x faster
   DataView-custom-properties                        30.5092+-0.5099     ?     31.9320+-1.3195        ? might be 1.0466x slower
   delay-tear-off-arguments-strictmode               13.7024+-3.1280           12.4542+-0.4523          might be 1.1002x faster
   deltablue-varargs                                161.1699+-3.2985          159.4307+-3.1459          might be 1.0109x faster
   destructuring-arguments                          161.6390+-2.7455          158.9493+-2.4782          might be 1.0169x faster
   destructuring-parameters-overridden-by-function   
                                                      0.5042+-0.1385            0.4852+-0.0871          might be 1.0390x faster
   destructuring-swap                                 4.6210+-0.0642     ?      4.7531+-0.2157        ? might be 1.0286x slower
   direct-arguments-getbyval                          1.2997+-0.1812            1.2055+-0.0507          might be 1.0781x faster
   div-boolean-double                                 5.3129+-0.0854            5.2583+-0.1081          might be 1.0104x faster
   div-boolean                                        8.1765+-0.1337            8.1445+-0.1610        
   double-get-by-val-out-of-bounds                    4.2850+-0.7986            3.9773+-0.1031          might be 1.0774x faster
   double-pollution-getbyval                          8.8892+-0.4766     ?      8.8962+-0.3639        ?
   double-pollution-putbyoffset                       3.8402+-0.2338     ?      3.9023+-0.4059        ? might be 1.0162x slower
   double-real-use                                   24.9604+-2.0559     ?     25.5760+-2.6534        ? might be 1.0247x slower
   double-to-int32-typed-array-no-inline              1.9641+-0.0838     ?      2.1265+-0.2835        ? might be 1.0827x slower
   double-to-int32-typed-array                        1.7376+-0.0488     ?      1.7497+-0.1332        ?
   double-to-uint32-typed-array-no-inline             1.9878+-0.0622     ?      2.0178+-0.0783        ? might be 1.0151x slower
   double-to-uint32-typed-array                       1.8614+-0.1373     ?      1.9076+-0.1080        ? might be 1.0248x slower
   elidable-new-object-dag                           34.3115+-0.9118     ?     34.5193+-1.0677        ?
   elidable-new-object-roflcopter                    32.9223+-1.6101     ?     33.2328+-1.7590        ?
   elidable-new-object-then-call                     31.7666+-0.9912           31.2389+-0.4176          might be 1.0169x faster
   elidable-new-object-tree                          37.4168+-0.8893     ?     37.9925+-1.4968        ? might be 1.0154x slower
   empty-string-plus-int                              4.8125+-0.2719            4.7802+-0.2064        
   emscripten-cube2hash                              27.5885+-1.1768           26.0370+-0.9753          might be 1.0596x faster
   exit-length-on-plain-object                       12.4285+-0.7695           12.3016+-0.7431          might be 1.0103x faster
   external-arguments-getbyval                        1.1988+-0.1032            1.1540+-0.0735          might be 1.0388x faster
   external-arguments-putbyval                        2.2773+-0.3406            2.1579+-0.1198          might be 1.0554x faster
   fixed-typed-array-storage-var-index                1.1438+-0.0286            1.1143+-0.0384          might be 1.0264x faster
   fixed-typed-array-storage                          0.8456+-0.0572            0.8448+-0.0165        
   Float32Array-matrix-mult                           3.9317+-0.1272            3.8333+-0.1836          might be 1.0257x faster
   Float32Array-to-Float64Array-set                  46.2292+-0.4682     ?     46.7229+-0.9425        ? might be 1.0107x slower
   Float64Array-alloc-long-lived                     70.1972+-1.3152           68.7367+-1.3666          might be 1.0212x faster
   Float64Array-to-Int16Array-set                    56.8904+-1.9615     ?     58.7655+-1.0549        ? might be 1.0330x slower
   fold-double-to-int                                11.9571+-0.1793           11.9384+-0.2948        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.1296+-0.8040     ?     12.6097+-1.2274        ? might be 1.1330x slower
   fold-get-by-id-to-multi-get-by-offset             10.6460+-1.4266           10.2802+-0.3830          might be 1.0356x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.9280+-1.4227     ?      9.0385+-0.6676        ? might be 1.1401x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.9663+-0.8717            7.8375+-1.7048          might be 1.1440x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.6588+-0.7348            8.2246+-1.0498          might be 1.0528x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.0339+-1.5662            4.5663+-0.7756          might be 1.3214x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      8.4769+-1.1738            8.0220+-0.1819          might be 1.0567x faster
   fold-put-by-id-to-multi-put-by-offset              9.8156+-1.5095     ?     10.1333+-1.3423        ? might be 1.0324x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.4302+-1.3854            9.7178+-0.5050          might be 1.0733x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.3157+-1.4323     ?     11.5949+-2.4073        ? might be 1.1240x slower
   fold-put-structure                                 5.8551+-0.8126            4.5640+-1.0157          might be 1.2829x faster
   for-of-iterate-array-entries                      11.4443+-0.6031           11.0149+-0.3072          might be 1.0390x faster
   for-of-iterate-array-keys                          3.3741+-0.1590            3.3563+-0.1787        
   for-of-iterate-array-values                        3.4786+-0.2960            3.4550+-0.2379        
   fround                                            17.9725+-0.5887           17.8930+-0.5270        
   ftl-library-inlining-dataview                     55.7602+-0.9962     ?     56.0685+-1.6089        ?
   ftl-library-inlining                             108.9796+-2.3380          108.6687+-1.1867        
   function-call                                      9.9092+-0.2060     ?     10.2310+-0.2590        ? might be 1.0325x slower
   function-dot-apply                                 1.8305+-0.0914     ?      1.9946+-0.1959        ? might be 1.0896x slower
   function-test                                      2.6820+-0.0484     ?      2.6937+-0.0554        ?
   function-with-eval                                98.5656+-1.5687     ?    102.3465+-2.7759        ? might be 1.0384x slower
   gcse-poly-get-less-obvious                        14.3858+-0.3796     ?     14.4665+-0.3622        ?
   gcse-poly-get                                     16.2370+-0.5220     ?     16.3306+-1.0435        ?
   gcse                                               3.8783+-0.2961            3.8205+-0.1295          might be 1.0151x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.5454+-0.0386     ?      2.5957+-0.0617        ? might be 1.0197x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.9804+-0.4146            5.9579+-0.4387        
   get-by-id-chain-from-try-block                     5.4656+-0.1293            5.4190+-0.1319        
   get-by-id-check-structure-elimination              4.3968+-0.1786            4.3503+-0.0728          might be 1.0107x faster
   get-by-id-proto-or-self                           14.5692+-0.4610     ?     15.3856+-0.7658        ? might be 1.0560x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9245+-0.2379            2.8370+-0.0375          might be 1.0308x faster
   get-by-id-self-or-proto                           14.9092+-0.5470           14.7171+-0.3855          might be 1.0131x faster
   get-by-val-out-of-bounds                           3.7075+-0.0922     ?      3.7876+-0.1064        ? might be 1.0216x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7619+-0.0473     ?      2.8193+-0.1035        ? might be 1.0208x slower
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.0056+-0.0926     ?      6.0322+-0.2165        ?
   get-by-val-with-string-chain-from-try-block   
                                                      5.8793+-0.5130            5.7002+-0.2256          might be 1.0314x faster
   get-by-val-with-string-check-structure-elimination   
                                                      5.3671+-0.5176            5.2140+-0.3133          might be 1.0294x faster
   get-by-val-with-string-proto-or-self              15.2861+-0.6039     ?     15.2912+-0.9452        ?
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.1856+-0.1361     ?      3.2192+-0.2686        ? might be 1.0105x slower
   get-by-val-with-string-self-or-proto              15.0463+-0.6830     ?     15.3380+-0.6312        ? might be 1.0194x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.0564+-0.1821            2.9965+-0.0667          might be 1.0200x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.3433+-0.2214           12.2345+-0.0584        
   get-by-val-with-symbol-chain-from-try-block   
                                                      5.5285+-0.1089            5.5176+-0.1024        
   get-by-val-with-symbol-check-structure-elimination   
                                                     11.4343+-1.2463           10.9274+-0.0441          might be 1.0464x faster
   get-by-val-with-symbol-proto-or-self              14.9707+-1.0659     ?     15.1043+-0.3913        ?
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.9099+-0.1038            3.8887+-0.0672        
   get-by-val-with-symbol-self-or-proto              15.1580+-0.4574           15.0433+-0.6596        
   get_callee_monomorphic                             2.1760+-0.0904     ?      2.2046+-0.1925        ? might be 1.0131x slower
   get_callee_polymorphic                             3.4118+-0.2298            3.1697+-0.2157          might be 1.0764x faster
   getter-no-activation                               4.7752+-0.1850            4.6045+-0.0607          might be 1.0371x faster
   getter-prototype                                   8.8917+-0.1554     ?      9.0577+-0.3627        ? might be 1.0187x slower
   getter-richards                                  120.9947+-2.6959     ?    122.5612+-3.6869        ? might be 1.0129x slower
   getter                                             5.6491+-0.5961     ?      5.6795+-0.6068        ?
   global-object-access-with-mutating-structure   
                                                      5.5910+-0.1593            5.5138+-0.0537          might be 1.0140x faster
   global-var-const-infer-fire-from-opt               0.7881+-0.0105     ?      0.8290+-0.0482        ? might be 1.0518x slower
   global-var-const-infer                             0.6005+-0.0320     ?      0.6425+-0.0793        ? might be 1.0699x slower
   hard-overflow-check-equal                         33.5056+-0.7832     ?     34.4111+-1.4211        ? might be 1.0270x slower
   hard-overflow-check                               33.8466+-0.8502           33.1149+-0.7903          might be 1.0221x faster
   HashMap-put-get-iterate-keys                      25.7039+-0.8206     ?     26.4381+-2.0471        ? might be 1.0286x slower
   HashMap-put-get-iterate                           27.0393+-2.0074     ?     28.2359+-0.9442        ? might be 1.0443x slower
   HashMap-string-put-get-iterate                    26.6911+-5.4665           25.6192+-1.4611          might be 1.0418x faster
   hoist-make-rope                                    9.0221+-1.2041     ?      9.1301+-0.9107        ? might be 1.0120x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.2654+-0.4186            4.0371+-0.0632          might be 1.0565x faster
   hoist-poly-check-structure                         3.2921+-0.2250            3.2795+-0.0878        
   imul-double-only                                   7.2348+-0.2267     ?      7.4163+-0.5965        ? might be 1.0251x slower
   imul-int-only                                      9.0261+-0.4133            8.8375+-0.7348          might be 1.0213x faster
   imul-mixed                                         6.9876+-0.3542     ?      7.0445+-0.1292        ?
   in-four-cases                                     16.9824+-0.5784     ?     17.1726+-0.7333        ? might be 1.0112x slower
   in-one-case-false                                 10.0744+-0.7010     ?     10.7332+-1.1331        ? might be 1.0654x slower
   in-one-case-true                                   9.7698+-0.6614            9.4651+-0.6156          might be 1.0322x faster
   in-two-cases                                       9.7930+-0.6670     ?     10.1045+-0.4704        ? might be 1.0318x slower
   indexed-properties-in-objects                      2.6688+-0.0576     ?      2.6911+-0.0277        ?
   infer-closure-const-then-mov-no-inline             2.8336+-0.0429     ?      2.8508+-0.0434        ?
   infer-closure-const-then-mov                      18.8043+-0.6521     ?     18.9519+-1.0607        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     10.3857+-0.7846            9.9120+-0.2168          might be 1.0478x faster
   infer-closure-const-then-put-to-scope             21.4362+-0.5355           21.3803+-0.5083        
   infer-closure-const-then-reenter-no-inline   
                                                     50.5754+-1.2301     ^     48.1675+-0.8183        ^ definitely 1.0500x faster
   infer-closure-const-then-reenter                  21.3747+-0.7987     ?     22.6381+-0.7574        ? might be 1.0591x slower
   infer-constant-global-property                     3.4296+-0.1847            3.3832+-0.0454          might be 1.0137x faster
   infer-constant-property                            2.5742+-0.0333            2.5725+-0.0697        
   infer-one-time-closure-ten-vars                    7.9633+-0.4493            7.6648+-0.2859          might be 1.0389x faster
   infer-one-time-closure-two-vars                    7.5497+-0.4067            7.2544+-0.1982          might be 1.0407x faster
   infer-one-time-closure                             7.1812+-0.1719     ?      7.4365+-0.4900        ? might be 1.0356x slower
   infer-one-time-deep-closure                       11.0851+-0.6582           10.6424+-0.3333          might be 1.0416x faster
   inline-arguments-access                            3.4545+-0.0762     ?      3.6799+-0.2109        ? might be 1.0652x slower
   inline-arguments-aliased-access                    3.7333+-0.1652            3.4788+-0.0935          might be 1.0731x faster
   inline-arguments-local-escape                      3.8767+-0.3520            3.6222+-0.2397          might be 1.0703x faster
   inline-get-scoped-var                              4.5140+-0.1349     ?      4.5684+-0.1863        ? might be 1.0121x slower
   inlined-put-by-id-transition                      10.4773+-0.6586           10.0448+-0.4030          might be 1.0431x faster
   inlined-put-by-val-with-string-transition   
                                                     73.9001+-3.5650           72.0616+-1.0752          might be 1.0255x faster
   inlined-put-by-val-with-symbol-transition   
                                                     71.1769+-1.7692           70.2564+-1.5650          might be 1.0131x faster
   int-or-other-abs-then-get-by-val                   4.7199+-0.0578     ?      4.7698+-0.1654        ? might be 1.0106x slower
   int-or-other-abs-zero-then-get-by-val             16.4823+-1.0342           16.3928+-0.6534        
   int-or-other-add-then-get-by-val                   3.9773+-0.0306            3.9647+-0.1158        
   int-or-other-add                                   5.0492+-0.6637            4.7840+-0.0671          might be 1.0554x faster
   int-or-other-div-then-get-by-val                   3.8086+-0.0860            3.7864+-0.1292        
   int-or-other-max-then-get-by-val                   3.8836+-0.2637            3.7798+-0.1196          might be 1.0275x faster
   int-or-other-min-then-get-by-val                   3.8796+-0.0630     ?      3.9825+-0.1966        ? might be 1.0265x slower
   int-or-other-mod-then-get-by-val                   3.5254+-0.1028            3.5060+-0.0422        
   int-or-other-mul-then-get-by-val                   3.5375+-0.0816     ?      3.5656+-0.0968        ?
   int-or-other-neg-then-get-by-val                   4.4333+-0.1648            4.3682+-0.0405          might be 1.0149x faster
   int-or-other-neg-zero-then-get-by-val             16.1765+-0.9870           16.1153+-1.0318        
   int-or-other-sub-then-get-by-val                   4.1050+-0.1903            3.9386+-0.0545          might be 1.0422x faster
   int-or-other-sub                                   3.3941+-0.1817            3.3645+-0.0827        
   int-overflow-local                                 4.1480+-0.0582     ?      4.3097+-0.3244        ? might be 1.0390x slower
   Int16Array-alloc-long-lived                       47.5698+-1.2972           46.8081+-1.1704          might be 1.0163x faster
   Int16Array-bubble-sort-with-byteLength            18.3340+-1.2604           17.6042+-0.8244          might be 1.0415x faster
   Int16Array-bubble-sort                            17.6725+-0.7786           17.5391+-0.5440        
   Int16Array-load-int-mul                            1.3820+-0.0182     ?      1.4269+-0.0710        ? might be 1.0325x slower
   Int16Array-to-Int32Array-set                      44.9193+-1.3225           43.6104+-1.2054          might be 1.0300x faster
   Int32Array-alloc-large                            12.0658+-0.4597           11.9804+-0.4320        
   Int32Array-alloc-long-lived                       55.9835+-1.2658     ?     56.0404+-1.1622        ?
   Int32Array-alloc                                   2.9322+-0.3100            2.8357+-0.1538          might be 1.0340x faster
   Int32Array-Int8Array-view-alloc                    6.1364+-0.4244            5.9699+-0.3002          might be 1.0279x faster
   int52-spill                                        4.7604+-0.3340            4.4377+-0.0742          might be 1.0727x faster
   Int8Array-alloc-long-lived                        40.3136+-0.8603     ?     41.0736+-1.5408        ? might be 1.0189x slower
   Int8Array-load-with-byteLength                     3.4319+-0.1359     ?      3.5174+-0.2307        ? might be 1.0249x slower
   Int8Array-load                                     3.3490+-0.0409     ?      3.3685+-0.0738        ?
   integer-divide                                    10.0212+-0.1538            9.9912+-0.0790        
   integer-modulo                                     1.4974+-0.0428     ?      1.5041+-0.0648        ?
   is-boolean-fold-tricky                             3.7498+-0.1190     ?      3.7798+-0.0892        ?
   is-boolean-fold                                    2.5579+-0.0478     !      2.6608+-0.0461        ! definitely 1.0402x slower
   is-function-fold-tricky-internal-function   
                                                      9.7749+-0.1353     ^      9.4858+-0.1223        ^ definitely 1.0305x faster
   is-function-fold-tricky                            4.1228+-0.1525     ?      4.2090+-0.1535        ? might be 1.0209x slower
   is-function-fold                                   2.6451+-0.0892     ?      2.6740+-0.1483        ? might be 1.0109x slower
   is-number-fold-tricky                              4.1336+-0.3067            4.0310+-0.1056          might be 1.0255x faster
   is-number-fold                                     2.5708+-0.0300            2.5573+-0.0446        
   is-object-or-null-fold-functions                   2.6231+-0.0662            2.6041+-0.0254        
   is-object-or-null-fold-less-tricky                 4.2829+-0.5289            4.0423+-0.0492          might be 1.0595x faster
   is-object-or-null-fold-tricky                      5.1393+-0.1241     ?      5.1607+-0.1642        ?
   is-object-or-null-fold                             2.7434+-0.1984            2.6706+-0.1333          might be 1.0273x faster
   is-object-or-null-trickier-function                4.0792+-0.0781     ?      4.1448+-0.1850        ? might be 1.0161x slower
   is-object-or-null-trickier-internal-function   
                                                     10.3335+-0.2572     ?     10.7017+-0.2552        ? might be 1.0356x slower
   is-object-or-null-tricky-function                  4.0414+-0.1037     ?      4.1411+-0.1595        ? might be 1.0247x slower
   is-object-or-null-tricky-internal-function   
                                                      7.8750+-0.4457            7.8108+-0.2041        
   is-string-fold-tricky                              4.0026+-0.1606            3.9656+-0.0256        
   is-string-fold                                     2.5640+-0.0447     ?      2.5833+-0.0787        ?
   is-undefined-fold-tricky                           3.3192+-0.1327     ?      3.4178+-0.2040        ? might be 1.0297x slower
   is-undefined-fold                                  2.6233+-0.0386            2.6038+-0.0374        
   JSONP-negative-0                                   0.2610+-0.0280            0.2534+-0.0129          might be 1.0301x faster
   large-int-captured                                 3.9407+-0.2897            3.6677+-0.0649          might be 1.0744x faster
   large-int-neg                                     13.7328+-0.1887     ?     13.7682+-0.4428        ?
   large-int                                         12.7982+-0.7093           12.2503+-0.1766          might be 1.0447x faster
   load-varargs-elimination                          20.9674+-0.9109           20.8583+-0.7551        
   logical-not-weird-types                            2.7074+-0.0414            2.7073+-0.0563        
   logical-not                                        4.1912+-0.0759            4.0839+-0.0681          might be 1.0263x faster
   lots-of-fields                                     9.7500+-0.3601            9.6051+-0.4588          might be 1.0151x faster
   make-indexed-storage                               2.7122+-0.1669     ?      2.7126+-0.2162        ?
   make-rope-cse                                      3.7447+-0.2867            3.5873+-0.1270          might be 1.0439x faster
   marsaglia-larger-ints                             31.9111+-0.7289           31.8458+-0.9551        
   marsaglia-osr-entry                               21.5986+-0.9519           21.2733+-0.8299          might be 1.0153x faster
   math-with-out-of-bounds-array-values              22.6468+-0.6927           22.2170+-0.9633          might be 1.0193x faster
   max-boolean                                        2.7205+-0.1741     ?      2.7976+-0.1749        ? might be 1.0284x slower
   method-on-number                                  15.5593+-0.2606     ?     16.5821+-1.0081        ? might be 1.0657x slower
   min-boolean                                        2.5738+-0.0328     ?      2.6017+-0.1160        ? might be 1.0108x slower
   minus-boolean-double                               3.2739+-0.6033            3.0879+-0.1073          might be 1.0602x faster
   minus-boolean                                      2.2992+-0.0700            2.2617+-0.0266          might be 1.0166x faster
   misc-strict-eq                                    28.6559+-1.1611     ?     29.2071+-1.1071        ? might be 1.0192x slower
   mod-boolean-double                                11.2738+-0.3854           11.0689+-0.1846          might be 1.0185x faster
   mod-boolean                                        8.2922+-0.1064     ?      8.3664+-0.1548        ?
   mul-boolean-double                                 3.5704+-0.0485     ?      3.7159+-0.1421        ? might be 1.0408x slower
   mul-boolean                                        2.8695+-0.1238            2.7959+-0.0863          might be 1.0263x faster
   neg-boolean                                        3.2227+-0.3741            3.0600+-0.0433          might be 1.0532x faster
   negative-zero-divide                               0.3456+-0.0166            0.3361+-0.0074          might be 1.0282x faster
   negative-zero-modulo                               0.3404+-0.0097     ?      0.3455+-0.0170        ? might be 1.0151x slower
   negative-zero-negate                               0.3423+-0.0361            0.3254+-0.0212          might be 1.0518x faster
   nested-function-parsing                           44.9306+-0.7378     ?     46.5511+-1.0663        ? might be 1.0361x slower
   new-array-buffer-dead                             88.3361+-1.0779           87.7802+-0.8938        
   new-array-buffer-push                              6.1810+-0.4946            6.0363+-0.4000          might be 1.0240x faster
   new-array-dead                                    15.2165+-0.8713     ?     15.3443+-1.0570        ?
   new-array-push                                     3.4165+-0.1588     ?      3.5086+-0.1664        ? might be 1.0270x slower
   no-inline-constructor                             30.9124+-0.4919           30.8752+-0.6936        
   number-test                                        2.8707+-0.0759     ?      2.8939+-0.1378        ?
   object-closure-call                                4.9714+-0.3019            4.7649+-0.1434          might be 1.0433x faster
   object-get-own-property-symbols-on-large-array   
                                                      4.1204+-0.2174     ?      4.2705+-0.1884        ? might be 1.0364x slower
   object-test                                        2.5985+-0.0356     ?      2.7511+-0.2178        ? might be 1.0587x slower
   obvious-sink-pathology-taken                      99.6016+-1.1994           99.5434+-0.9208        
   obvious-sink-pathology                            93.8476+-0.5055           93.4044+-0.9585        
   obviously-elidable-new-object                     29.3661+-1.0342           28.3551+-0.4303          might be 1.0357x faster
   plus-boolean-arith                                 2.4301+-0.1188            2.3824+-0.0514          might be 1.0200x faster
   plus-boolean-double                                3.1951+-0.1942            3.0863+-0.0408          might be 1.0353x faster
   plus-boolean                                       2.6107+-0.1783            2.4896+-0.0514          might be 1.0486x faster
   poly-chain-access-different-prototypes-simple   
                                                      3.2236+-0.0806     ?      3.2630+-0.1264        ? might be 1.0122x slower
   poly-chain-access-different-prototypes             2.9226+-0.1541            2.8943+-0.1205        
   poly-chain-access-simpler                          3.2139+-0.0644     ?      3.3181+-0.1222        ? might be 1.0324x slower
   poly-chain-access                                  3.2621+-0.0576            3.2506+-0.0699        
   poly-stricteq                                     48.3000+-1.3243           48.2075+-0.8781        
   polymorphic-array-call                             1.2656+-0.2995     ?      1.3396+-0.2290        ? might be 1.0585x slower
   polymorphic-get-by-id                              2.8593+-0.1257            2.8014+-0.0650          might be 1.0207x faster
   polymorphic-put-by-id                             25.1350+-0.9576     ?     25.4116+-1.1636        ? might be 1.0110x slower
   polymorphic-put-by-val-with-string                25.6296+-1.0726           25.2155+-0.3187          might be 1.0164x faster
   polymorphic-put-by-val-with-symbol                26.1808+-1.0395     ?     26.4073+-1.4693        ?
   polymorphic-structure                             13.1381+-0.3707     ?     13.6190+-0.8812        ? might be 1.0366x slower
   polyvariant-monomorphic-get-by-id                  6.2665+-0.5253     ?      6.7006+-1.1876        ? might be 1.0693x slower
   proto-getter-access                                8.3124+-0.2412            8.2133+-0.2085          might be 1.0121x faster
   prototype-access-with-mutating-prototype           5.6769+-0.3800            5.5255+-0.2268          might be 1.0274x faster
   put-by-id-replace-and-transition                   8.1458+-0.5264     ?      8.2584+-1.1034        ? might be 1.0138x slower
   put-by-id-slightly-polymorphic                     2.6482+-0.1435            2.6470+-0.1109        
   put-by-id                                          9.7928+-0.3883            9.6982+-0.5361        
   put-by-val-direct                                  0.3845+-0.0618     ?      0.3982+-0.1146        ? might be 1.0356x slower
   put-by-val-large-index-blank-indexing-type   
                                                      5.3746+-0.3148            5.0473+-0.2698          might be 1.0649x faster
   put-by-val-machine-int                             2.2857+-0.1080     ?      2.3072+-0.1142        ?
   put-by-val-with-string-replace-and-transition   
                                                     10.2638+-0.5097           10.1181+-0.4648          might be 1.0144x faster
   put-by-val-with-string-slightly-polymorphic   
                                                      2.8301+-0.0430     ?      2.8444+-0.1028        ?
   put-by-val-with-string                            10.2091+-0.5318     ?     10.4694+-0.8198        ? might be 1.0255x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     11.5507+-0.2532     ?     11.5885+-0.6499        ?
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2574+-0.2940            3.0965+-0.0464          might be 1.0520x faster
   put-by-val-with-symbol                            10.8313+-0.7692           10.4110+-0.3822          might be 1.0404x faster
   rare-osr-exit-on-local                            14.8477+-0.4697           14.5754+-0.5404          might be 1.0187x faster
   register-pressure-from-osr                        16.7494+-0.4680     ?     16.8634+-0.6414        ?
   repeat-multi-get-by-offset                        20.8780+-0.5619     ?     21.4251+-0.9321        ? might be 1.0262x slower
   setter-prototype                                   7.5159+-0.0430     !      7.9371+-0.2759        ! definitely 1.0560x slower
   setter                                             5.5669+-0.6042            5.2563+-0.3300          might be 1.0591x faster
   simple-activation-demo                            24.5015+-0.6021     ?     24.7694+-1.1143        ? might be 1.0109x slower
   simple-getter-access                              10.7201+-0.2322           10.6562+-0.3582        
   simple-poly-call-nested                            8.8230+-0.4501            8.7064+-0.7425          might be 1.0134x faster
   simple-poly-call                                   1.1693+-0.0854     ?      1.2064+-0.0768        ? might be 1.0318x slower
   sin-boolean                                       18.5954+-1.3679     ?     20.4302+-1.8377        ? might be 1.0987x slower
   singleton-scope                                   52.6837+-0.8403     ?     52.9659+-0.7674        ?
   sink-function                                     10.4165+-0.6144           10.2003+-0.3316          might be 1.0212x faster
   sink-huge-activation                              16.7293+-0.8411           16.6853+-0.6841        
   sinkable-new-object-dag                           55.0483+-1.1016           54.9665+-1.1426        
   sinkable-new-object-taken                         44.2879+-1.8126     ?     44.3845+-0.4512        ?
   sinkable-new-object                               30.3952+-0.9326           30.0963+-0.5969        
   slow-array-profile-convergence                     2.3841+-0.0836            2.3392+-0.0950          might be 1.0192x faster
   slow-convergence                                   2.2537+-0.0697     ?      2.2898+-0.1066        ? might be 1.0160x slower
   slow-ternaries                                    17.7145+-0.9793           17.3070+-0.4795          might be 1.0235x faster
   sorting-benchmark                                 16.7590+-0.9076     ?     16.8106+-0.4376        ?
   sparse-conditional                                 1.0890+-0.0247     ?      1.0944+-0.0386        ?
   splice-to-remove                                  12.0253+-0.1314     ?     12.4504+-0.5867        ? might be 1.0354x slower
   string-char-code-at                               13.9816+-0.3134     ?     14.1931+-0.2427        ? might be 1.0151x slower
   string-concat-object                               2.1389+-0.1075            2.0664+-0.0926          might be 1.0351x faster
   string-concat-pair-object                          2.3579+-0.5598            2.2564+-0.2565          might be 1.0450x faster
   string-concat-pair-simple                          9.0254+-0.2005     ?      9.2311+-0.2519        ? might be 1.0228x slower
   string-concat-simple                               9.4737+-0.5766            9.2212+-0.2468          might be 1.0274x faster
   string-cons-repeat                                 6.4663+-0.1881     ?      6.5348+-0.2104        ? might be 1.0106x slower
   string-cons-tower                                  6.5168+-0.1667     ?      6.9007+-0.5651        ? might be 1.0589x slower
   string-equality                                   16.4184+-0.7229     ?     16.5308+-1.2035        ?
   string-get-by-val-big-char                         6.7213+-0.4182            6.4678+-0.1167          might be 1.0392x faster
   string-get-by-val-out-of-bounds-insane             3.0568+-0.0694            2.9987+-0.0349          might be 1.0194x faster
   string-get-by-val-out-of-bounds                    4.2462+-0.7582            4.0337+-0.1724          might be 1.0527x faster
   string-get-by-val                                  2.8815+-0.1007     ?      2.9979+-0.3570        ? might be 1.0404x slower
   string-hash                                        1.7902+-0.0504     ?      1.7964+-0.0533        ?
   string-long-ident-equality                        14.9160+-0.4421           14.6138+-0.1160          might be 1.0207x faster
   string-out-of-bounds                              10.4899+-0.7788           10.2904+-0.3766          might be 1.0194x faster
   string-repeat-arith                               27.2992+-1.0994           27.2383+-0.6558        
   string-sub                                        54.0286+-2.0908           53.3387+-1.4644          might be 1.0129x faster
   string-test                                        2.7499+-0.0473     ?      2.8112+-0.1049        ? might be 1.0223x slower
   string-var-equality                               29.1468+-0.8969     ?     30.0219+-1.3981        ? might be 1.0300x slower
   structure-hoist-over-transitions                   2.3252+-0.1309     ?      2.3728+-0.1250        ? might be 1.0205x slower
   substring-concat-weird                            35.6656+-1.0478     ?     36.2475+-0.8726        ? might be 1.0163x slower
   substring-concat                                  39.3784+-0.5236     ?     40.0609+-1.5303        ? might be 1.0173x slower
   substring                                         46.2250+-2.2693           45.4114+-1.0586          might be 1.0179x faster
   switch-char-constant                               2.6574+-0.1299            2.5897+-0.0386          might be 1.0262x faster
   switch-char                                        6.0310+-0.9133     ?      6.0753+-1.0285        ?
   switch-constant                                    8.8509+-1.2189            7.8828+-0.5771          might be 1.1228x faster
   switch-string-basic-big-var                       13.5812+-0.1936     ?     14.3868+-0.8297        ? might be 1.0593x slower
   switch-string-basic-big                           13.8801+-0.2138     ?     14.2633+-0.5168        ? might be 1.0276x slower
   switch-string-basic-var                           12.9577+-0.3684           12.8540+-0.2716        
   switch-string-basic                               12.5769+-0.4312           12.3060+-0.2304          might be 1.0220x faster
   switch-string-big-length-tower-var                18.2888+-0.7924           17.6908+-0.4393          might be 1.0338x faster
   switch-string-length-tower-var                    13.0086+-0.2104     ?     13.2680+-0.7202        ? might be 1.0199x slower
   switch-string-length-tower                        12.0233+-0.6443           11.7844+-0.3766          might be 1.0203x faster
   switch-string-short                               12.0448+-0.5004           11.6650+-0.1304          might be 1.0326x faster
   switch                                            11.7311+-0.6936           11.0530+-0.7046          might be 1.0614x faster
   tear-off-arguments-simple                          2.8398+-0.1295     ?      3.0720+-0.3767        ? might be 1.0818x slower
   tear-off-arguments                                 3.8645+-0.0922     ?      4.0838+-0.2921        ? might be 1.0568x slower
   temporal-structure                                12.0540+-0.2402           12.0521+-0.3287        
   to-int32-boolean                                  12.8553+-0.4350           12.7300+-0.1994        
   try-catch-get-by-val-cloned-arguments             14.1943+-0.5596     ?     14.2414+-0.5574        ?
   try-catch-get-by-val-direct-arguments              6.2373+-0.3026            6.1438+-0.1203          might be 1.0152x faster
   try-catch-get-by-val-scoped-arguments              7.6895+-0.4477     ?      7.8871+-0.6416        ? might be 1.0257x slower
   typed-array-get-set-by-val-profiling              27.3549+-0.7046     ?     27.6141+-0.9083        ?
   undefined-property-access                        225.5249+-3.5263          224.6792+-2.0526        
   undefined-test                                     2.9044+-0.1212     ?      2.9174+-0.0855        ?
   unprofiled-licm                                   13.9976+-0.5937     ?     14.0229+-0.5720        ?
   varargs-call                                      12.6203+-0.4928     ?     12.7869+-0.3257        ? might be 1.0132x slower
   varargs-construct-inline                          22.2998+-0.9935     ?     22.3860+-0.7416        ?
   varargs-construct                                 19.8271+-0.5889     ?     20.0320+-1.2403        ? might be 1.0103x slower
   varargs-inline                                     8.2479+-0.2024     ?      8.3212+-0.3149        ?
   varargs-strict-mode                                8.8158+-0.2282     ?      8.8771+-0.3184        ?
   varargs                                            8.5624+-0.1039     ?      8.6385+-0.1630        ?
   weird-inlining-const-prop                          2.7343+-0.3340            2.2725+-0.2129          might be 1.2032x faster

   &lt;geometric&gt;                                        7.8372+-0.0285            7.8117+-0.0282          might be 1.0033x faster

                                                        TipOfTree                   ExitOK                                      
AsmBench:
   bigfib.cpp                                       454.0028+-8.3266          452.0775+-6.0062        
   cray.c                                           400.4227+-3.5026     ?    400.6133+-4.2057        ?
   dry.c                                            428.9613+-3.2866     ?    429.8392+-2.2834        ?
   FloatMM.c                                        689.2677+-3.4319          686.2321+-3.9377        
   gcc-loops.cpp                                   3441.9628+-18.9995        3436.0395+-8.5734        
   n-body.c                                         834.4776+-6.5368          827.7265+-3.2103        
   Quicksort.c                                      408.5826+-6.9697     ?    408.9957+-5.0643        ?
   stepanov_container.cpp                          3614.3223+-23.1930    ?   3748.3386+-230.8086      ? might be 1.0371x slower
   Towers.c                                         235.1770+-3.6958          233.3141+-2.5405        

   &lt;geometric&gt;                                      722.4239+-4.5320     ?    723.3850+-4.4013        ? might be 1.0013x slower

                                                        TipOfTree                   ExitOK                                      
CompressionBench:
   huffman                                           60.2182+-1.6767           59.3228+-1.0903          might be 1.0151x faster
   arithmetic-simple                                273.7364+-2.9503          272.2260+-2.8617        
   arithmetic-precise                               242.4689+-2.5506     ?    243.2534+-2.7532        ?
   arithmetic-complex-precise                       247.6703+-3.4592          245.3638+-2.5876        
   arithmetic-precise-order-0                       285.3087+-3.6112          283.3357+-3.9428        
   arithmetic-precise-order-1                       307.5774+-5.4324          306.8859+-3.5278        
   arithmetic-precise-order-2                       357.5638+-2.4043          356.6668+-3.4604        
   arithmetic-simple-order-1                        329.2629+-3.4367     ?    331.5043+-5.6785        ?
   arithmetic-simple-order-2                        387.6920+-6.6456     ?    387.7330+-3.7552        ?
   lz-string                                        320.2186+-5.2014          319.1564+-9.1053        

   &lt;geometric&gt;                                      257.2295+-1.0014          256.3367+-0.7973          might be 1.0035x faster

                                                        TipOfTree                   ExitOK                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   51.2886+-0.1309     ?     51.4055+-0.1627        ? might be 1.0023x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120835</commentid>
    <comment_count>17</comment_count>
      <attachid>259919</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-25 21:32:18 -0700</bug_when>
    <thetext>Created attachment 259919
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120836</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-25 21:35:33 -0700</bug_when>
    <thetext>Attachment 259919 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGClobbersExitState.cpp:86:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 48 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120860</commentid>
    <comment_count>19</comment_count>
      <attachid>259919</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-08-25 22:59:07 -0700</bug_when>
    <thetext>Comment on attachment 259919
the patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGClobbersExitState.h:37
&gt; +// longer exit to this node&apos;s exit origin.

...an observable effect, which means that we can no longer exit to this node&apos;s exit origin, since doing so would perform the effect a second time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121022</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-26 12:25:14 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/188979</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259507</attachid>
            <date>2015-08-20 15:24:02 -0700</date>
            <delta_ts>2015-08-20 16:04:09 -0700</delta_ts>
            <desc>maybe it&apos;ll work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>11764</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAuaAkocmV2
aXNpb24gMTg4NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhl
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAvLyAtIFN0YWNrIHdpdGggYSBUT1AgcGF5bG9hZCBpcyBhIGRpcmVjdCBz
dWJ0eXBlIG9mIFdvcmxkCiAvLyAtIFN0YWNrIHdpdGggYSBub24tVE9QIHBheWxvYWQgaXMgYSBk
aXJlY3Qgc3VidHlwZSBvZiBTdGFjayB3aXRoIGEgVE9QIHBheWxvYWQuCiAvLyAtIEhlYXAgaXMg
YSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KKy8vIC0gU2lkZVN0YXRlIGlzIGEgZGlyZWN0IHN1
YnR5cGUgb2YgV29ybGQuCiAvLyAtIEFueSBvdGhlciBraW5kIHdpdGggVE9QIHBheWxvYWQgaXMg
dGhlIGRpcmVjdCBzdWJ0eXBlIG9mIEhlYXAuCiAvLyAtIEFueSBvdGhlciBraW5kIHdpdGggbm9u
LVRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiB0aGUgc2FtZSBraW5kIHdpdGgg
YSBUT1AgcGF5bG9hZC4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4ODcwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjIs
NiArMzYyLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwg
T3BJbmZvKG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CiAKKyAgICAgICAgLy8gV2UgY2FuJ3Qg
ZXhpdCBhbnltb3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgorICAg
ICAgICBtX2V4aXRPSyA9IGZhbHNlOworCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCBkZWxheWVk
KGN1cnJlbnRDb2RlT3JpZ2luKCksIG9wZXJhbmQsIHZhbHVlKTsKICAgICAgICAgCiAgICAgICAg
IGlmIChzZXRNb2RlID09IE5vcm1hbFNldCkgewpAQCAtMzc0LDggKzM3NywxNCBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKKyAg
ICAgICAgLy8gV2UgcGxheSBoYWNrcyB3aXRoIG1fZXhpdE9LIGhlcmUuIFdlIGtub3cgdGhhdCB0
aGUgU2V0TG9jYWxzIHdlIGFyZSBlbWl0dGluZyBhcmUgYWxyZWFkeQorICAgICAgICAvLyByZWNv
cmRlZCBpbiBPU1IgZXhpdCBzdGF0ZSwgc28gdGhleSBhcmVuJ3QgcmVhbCBlZmZlY3RzLiBTbywg
d2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGhhdmUgYW55CisgICAgICAgIC8vIGVmZmVjdCBvbiBtX2V4
aXRPSy4KKyAgICAgICAgYm9vbCBleGl0T0tCZWZvcmUgPSBtX2V4aXRPSzsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAgICAgICAgICBt
X2V4aXRPSyA9IGV4aXRPS0JlZm9yZTsKKyAgICAgICAgfQogICAgICAgICBtX3NldExvY2FsUXVl
dWUucmVzaXplKDApOwogICAgIH0KIApAQCAtNjUxLDExICs2NjAsMTggQEAgcHJpdmF0ZToKIAog
ICAgIE5vZGVPcmlnaW4gY3VycmVudE5vZGVPcmlnaW4oKQogICAgIHsKLSAgICAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBzZXQgdGhlIGZvckV4aXQgb3JpZ2luIG9ubHkgb24gdGhvc2Ugbm9kZXMg
dGhhdCBjYW4gZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0NTIwNAorICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljOworICAgICAgICBD
b2RlT3JpZ2luIGZvckV4aXQ7CisKICAgICAgICAgaWYgKG1fY3VycmVudFNlbWFudGljT3JpZ2lu
LmlzU2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihtX2N1cnJlbnRTZW1hbnRp
Y09yaWdpbiwgY3VycmVudENvZGVPcmlnaW4oKSk7Ci0gICAgICAgIHJldHVybiBOb2RlT3JpZ2lu
KGN1cnJlbnRDb2RlT3JpZ2luKCkpOworICAgICAgICAgICAgc2VtYW50aWMgPSBtX2N1cnJlbnRT
ZW1hbnRpY09yaWdpbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2VtYW50aWMgPSBjdXJy
ZW50Q29kZU9yaWdpbigpOworCisgICAgICAgIGlmIChtX2V4aXRPSykKKyAgICAgICAgICAgIGZv
ckV4aXQgPSBjdXJyZW50Q29kZU9yaWdpbigpOworCisgICAgICAgIHJldHVybiBOb2RlT3JpZ2lu
KHNlbWFudGljLCBmb3JFeGl0KTsKICAgICB9CiAgICAgCiAgICAgQnJhbmNoRGF0YSogYnJhbmNo
RGF0YSh1bnNpZ25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCkBAIC02NzMsNiArNjg5LDE4
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJz
aW5nKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIGFwcGVuZGVkICIsIG5vZGUsICIg
IiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSwgIlxuIik7CiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmQobm9kZSk7CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAgICBtX2dy
YXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0
cmFjdEhlYXAmIGhlYXApIHsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZXMgdG8gU2lkZVN0YXRl
IGFyZSBub3Qgb2JzZXJ2YWJsZS4KKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5pc1N1YnR5cGVP
ZihTaWRlU3RhdGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
ICAgICAvLyBXZSBhc3N1bWUgYWxsIG90aGVyIHdyaXRlcyBhcmUgb2JzZXJ2YWJsZSwgYW5kIHNv
IGlmIHdlIHRyaWVkIHRvIGV4aXQgYWZ0ZXIgdGhlbQorICAgICAgICAgICAgICAgIC8vIHdpdGgg
dGhlIHNhbWUgb3JpZ2luIHRoZW4gd2UnZCBjYXVzZSB0aGF0IGVmZmVjdCB0byByZXBlYXQuCisg
ICAgICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAg
IApAQCAtODk2LDYgKzkyNCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5k
ZXg7CiAgICAgLy8gVGhlIHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2RlIGlmIGRp
ZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9jdXJyZW50
U2VtYW50aWNPcmlnaW47CisgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0IHJpZ2h0
IG5vdy4KKyAgICBib29sIG1fZXhpdE9LIHsgZmFsc2UgfTsKIAogICAgIEZyb3plblZhbHVlKiBt
X2NvbnN0YW50VW5kZWZpbmVkOwogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKQEAg
LTEwNDksNiArMTA3OSw3IEBAIHByaXZhdGU6CiAKICNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkg
XAogICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKKyAgICBtX2V4
aXRPSyA9IGZhbHNlOyBcCiAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwogCiB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3As
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEzNTIsNiArMTM4Myw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBjbGVhckNhY2hlcygpOyAv
LyBSZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIgY29kZS4K
ICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1fZXhpdE9LID0gZmFs
c2U7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJh
c2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0
YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RCbG9jaygpKSB7CkBA
IC0yOTE4LDYgKzI5NTAsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgIH0KIAogICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJp
bmcgYSBuZXcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUg
YSBwbGFjZSB0aGF0IHdlIGNhbiBleGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CisgICAgICAgIAogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAg
ICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
K3sKKyAgICAvLyBUaGVyZSBhcmUgY2VydGFpbiBub2RlcyB3aG9zZSBlZmZlY3Qgb24gdGhlIGV4
aXQgc3RhdGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRoZXkKKyAgICAvLyBub3JtYWxs
eSBjbG9iYmVyLgorICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgTW92SGludDoK
KyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBQdXRIaW50OgorICAgIGNhc2UgS2lsbFN0
YWNrOgorICAgICAgICAvLyBUaGVzZSBub2RlcyBhbGwgd3JpdGUgdG8gdGhlIGV4aXQgc3RhdGUs
IHNvIG9idmlvdXNseSwgdGhleSBjbG9iYmVyIGl0LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGNhc2UgU2V0TG9jYWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ug
bm9kZXMgd3JpdGUgdG8gdGhlIHN0YWNrLCBidXQgdGhleSBtYXkgb25seSBkbyBzbyBhZnRlciB3
ZSBoYXZlIGFscmVhZHkgaGFkIGEgTW92SGludAorICAgICAgICAvLyBmb3IgdGhlIGV4YWN0IHNh
bWUgdmFsdWUgYW5kIHRoZSBzYW1lIHN0YWNrIGxvY2F0aW9uLiBIZW5jZSwgdGhleSBoYXZlIG5v
IGZ1cnRoZXIgZWZmZWN0IG9uCisgICAgICAgIC8vIGV4aXQgc3RhdGUuCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBGb3IgYWxsIG90aGVyIG5vZGVzLCB3ZSBqdXN0IGNh
cmUgYWJvdXQgd2hldGhlciB0aGV5IHdyaXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFNpZGVT
dGF0ZS4KKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIGNsb2JiZXIoCisgICAgICAgIGdy
YXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICBbJl0gKGNvbnN0IEFic3RyYWN0
SGVhcCYgaGVhcCkgeworICAgICAgICAgICAgaWYgKCFoZWFwLmlzU3VidHlwZU9mKFN0YWNrKSkK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9LAorICAgICAgICBOb09w
Q2xvYmJlcml6ZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKyNkZWZp
bmUgREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsK
KworLy8gQSBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbiBvZiB3aGV0aGVyIHRoZSBub2RlIHdp
bGwgcGVyZm9ybSBhbiBlZmZlY3QgdGhhdCBtZWFucyB0aGF0IHdlIGNhbiBubworLy8gbG9uZ2Vy
IGV4aXQgdG8gdGhpcyBub2RlJ3MgZXhpdCBvcmlnaW4uCisKK2Jvb2wgY2xvYmJlcnNFeGl0U3Rh
dGUoR3JhcGgmLCBOb2RlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAkocmV2aXNp
b24gMTg4NzA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDcgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAg
IAogICAgIGJvb2wgaXNTZXQoKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKHNlbWFudGlj
LmlzU2V0KCkgPT0gZm9yRXhpdC5pc1NldCgpKTsKLSAgICAgICAgcmV0dXJuIHNlbWFudGljLmlz
U2V0KCk7CisgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc1NldCgpIHx8IGZvckV4aXQuaXNTZXQo
KTsKICAgICB9CiAgICAgCiAgICAgLy8gVXNlZCBmb3IgZGV0ZXJtaW5pbmcgd2hhdCBieXRlY29k
ZSB0aGlzIGNhbWUgZnJvbS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTg4NzA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4NSwxMyArMTg1LDIyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlzU2V0KCkgPT0g
bm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CisKICAgICAgICAgICAgICAgICBWQUxJREFU
RSgobm9kZSksICFtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0
LmlzU2V0KCkpOworCisgICAgICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KGkgLSAxKTsKKyAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSksCisgICAgICAg
ICAgICAgICAgICAgICAgICAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgcHJldmlvdXNOb2Rl
KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0
KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICE9IHBy
ZXZpb3VzLT5vcmlnaW4uZm9yRXhpdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc1N0cnVjdHVy
ZSgpIHx8ICEhbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlKSwgIW5vZGUtPmhhc0NlbGxPcGVyYW5kKCkgfHwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFs
dWUoKS5pc0NlbGwoKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+
aGFzQ2VsbE9wZXJhbmQoKSB8fCAhIW5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIShu
b2RlLT5mbGFncygpICYgTm9kZUhhc1ZhckFyZ3MpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICghbm9kZS0+Y2hpbGQyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksICFub2RlLT5jaGlsZDMoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259512</attachid>
            <date>2015-08-20 16:04:09 -0700</date>
            <delta_ts>2015-08-21 12:35:57 -0700</delta_ts>
            <desc>builds but crashes on launch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23377</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg3MDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw4IEBACiAJCTBGM0IzQTJDMTU0NzUw
MDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdD
bG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFB
QjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjEwMiw2ICsyMTA0LDggQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
M0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7
IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJl
UG9zdE51bWJlcmluZy5oOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU1MCw3ICszNTU0LDcgQEAKIAkJ
RTMzRjUwN0YxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxQcm9taXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzM0Y1MDgyMUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNGNTA4MzFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzM0Y1MDg2MUI4NDQ5RUYw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5o
OyBwYXRoID0gSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJ1Y3RBYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUxMDQsNiArNTEwOCw4IEBACiAJCQkJQTc3QTQyMzkxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Nsb2JiZXJpemUuaCAqLywKIAkJCQlBNzdBNDIzQTE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlclNldC5jcHAgKi8sCiAJCQkJQTc3QTQyM0IxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuaCAqLywKKwkJCQkwRjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwICovLAorCQkJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovLAogCQkJCTBGMDQzOTZCMUIwM0RDMEIwMDk1OThC
NyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmNwcCAqLywKIAkJCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovLAogCQkJCTBGQjRCNTFBMTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdDb21tb24uY3BwICovLApAQCAtNjEzMSw2ICs2MTM3LDcgQEAKIAkJCQkw
RkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdp
c3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0MxRjFCMUI4NjhFNzkwMEFC
QjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQy
NDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93
UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkQxOEE2MDA3MDAwMUEy
N0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzY0LDYgKzczNzEsNyBA
QAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0MxRjFBMUI4
NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3NzUwNTYwMDgzQjY4NyAvKiBE
RkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4ODcwNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gLSBTdGFjayB3
aXRoIGEgVE9QIHBheWxvYWQgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZAogLy8gLSBTdGFj
ayB3aXRoIGEgbm9uLVRPUCBwYXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgU3RhY2sgd2l0
aCBhIFRPUCBwYXlsb2FkLgogLy8gLSBIZWFwIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQu
CisvLyAtIFNpZGVTdGF0ZSBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgogLy8gLSBBbnkg
b3RoZXIga2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBIZWFw
LgogLy8gLSBBbnkgb3RoZXIga2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0
IHN1YnR5cGUgb2YgdGhlIHNhbWUga2luZCB3aXRoIGEgVE9QIHBheWxvYWQuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxODg3MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVC
bG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRT
dGF0dXMuaCIKQEAgLTM2Miw2ICszNjMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKIAorICAg
ICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUg
aGFzIGNoYW5nZWQuCisgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CisKICAgICAgICAgRGVsYXll
ZFNldExvY2FsIGRlbGF5ZWQoY3VycmVudENvZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNldE1vZGUgPT0gTm9ybWFsU2V0KSB7CkBAIC0zNzQsOCAr
Mzc4LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgp
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVl
LnNpemUoKTsgKytpKQorICAgICAgICAvLyBXZSBwbGF5IGhhY2tzIHdpdGggbV9leGl0T0sgaGVy
ZS4gV2Uga25vdyB0aGF0IHRoZSBTZXRMb2NhbHMgd2UgYXJlIGVtaXR0aW5nIGFyZSBhbHJlYWR5
CisgICAgICAgIC8vIHJlY29yZGVkIGluIE9TUiBleGl0IHN0YXRlLCBzbyB0aGV5IGFyZW4ndCBy
ZWFsIGVmZmVjdHMuIFNvLCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gaGF2ZSBhbnkKKyAgICAgICAg
Ly8gZWZmZWN0IG9uIG1fZXhpdE9LLgorICAgICAgICBib29sIGV4aXRPS0JlZm9yZSA9IG1fZXhp
dE9LOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWVbaV0uZXhlY3V0ZSh0aGlz
KTsKKyAgICAgICAgICAgIG1fZXhpdE9LID0gZXhpdE9LQmVmb3JlOworICAgICAgICB9CiAgICAg
ICAgIG1fc2V0TG9jYWxRdWV1ZS5yZXNpemUoMCk7CiAgICAgfQogCkBAIC02NTEsMTEgKzY2MSwx
OCBAQCBwcml2YXRlOgogCiAgICAgTm9kZU9yaWdpbiBjdXJyZW50Tm9kZU9yaWdpbigpCiAgICAg
ewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNldCB0aGUgZm9yRXhpdCBvcmlnaW4gb25s
eSBvbiB0aG9zZSBub2RlcyB0aGF0IGNhbiBleGl0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjA0CisgICAgICAgIENvZGVPcmlnaW4gc2Vt
YW50aWM7CisgICAgICAgIENvZGVPcmlnaW4gZm9yRXhpdDsKKwogICAgICAgICBpZiAobV9jdXJy
ZW50U2VtYW50aWNPcmlnaW4uaXNTZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBOb2RlT3JpZ2lu
KG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKLSAgICAgICAg
cmV0dXJuIE5vZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKSk7CisgICAgICAgICAgICBzZW1h
bnRpYyA9IG1fY3VycmVudFNlbWFudGljT3JpZ2luOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzZW1hbnRpYyA9IGN1cnJlbnRDb2RlT3JpZ2luKCk7CisKKyAgICAgICAgaWYgKG1fZXhpdE9L
KQorICAgICAgICAgICAgZm9yRXhpdCA9IGN1cnJlbnRDb2RlT3JpZ2luKCk7CisKKyAgICAgICAg
cmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGZvckV4aXQpOwogICAgIH0KICAgICAKICAgICBC
cmFuY2hEYXRhKiBicmFuY2hEYXRhKHVuc2lnbmVkIHRha2VuLCB1bnNpZ25lZCBub3RUYWtlbikK
QEAgLTY3Myw2ICs2OTAsMTggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJv
c2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgYXBw
ZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUtPm9wKCkpLCAiXG4iKTsKICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChub2RlKTsKKyAgICAgICAgY2xvYmJlcml6ZSgK
KyAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCisgICAgICAgICAg
ICBbJl0gKGNvbnN0IEFic3RyYWN0SGVhcCYgaGVhcCkgeworICAgICAgICAgICAgICAgIC8vIFdy
aXRlcyB0byBTaWRlU3RhdGUgYXJlIG5vdCBvYnNlcnZhYmxlLgorICAgICAgICAgICAgICAgIGlm
IChoZWFwLmlzU3VidHlwZU9mKFNpZGVTdGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSBhbGwgb3RoZXIgd3JpdGVzIGFyZSBv
YnNlcnZhYmxlLCBhbmQgc28gaWYgd2UgdHJpZWQgdG8gZXhpdCBhZnRlciB0aGVtCisgICAgICAg
ICAgICAgICAgLy8gd2l0aCB0aGUgc2FtZSBvcmlnaW4gdGhlbiB3ZSdkIGNhdXNlIHRoYXQgZWZm
ZWN0IHRvIHJlcGVhdC4KKyAgICAgICAgICAgICAgICBtX2V4aXRPSyA9IGZhbHNlOworICAgICAg
ICAgICAgfSwKKyAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOwogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAgICAgCkBAIC04OTYsNiArOTI1LDggQEAgcHJpdmF0ZToKICAgICB1bnNp
Z25lZCBtX2N1cnJlbnRJbmRleDsKICAgICAvLyBUaGUgc2VtYW50aWMgb3JpZ2luIG9mIHRoZSBj
dXJyZW50IG5vZGUgaWYgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgSW5kZXguCiAgICAgQ29k
ZU9yaWdpbiBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsKKyAgICAvLyBUcnVlIGlmIGl0J3MgT0sg
dG8gT1NSIGV4aXQgcmlnaHQgbm93LgorICAgIGJvb2wgbV9leGl0T0sgeyBmYWxzZSB9OwogCiAg
ICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnRVbmRlZmluZWQ7CiAgICAgRnJvemVuVmFsdWUqIG1f
Y29uc3RhbnROdWxsOwpAQCAtMTA0OSw2ICsxMDgwLDcgQEAgcHJpdmF0ZToKIAogI2RlZmluZSBM
QVNUX09QQ09ERShuYW1lKSBcCiAgICAgbV9jdXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChu
YW1lKTsgXAorICAgIG1fZXhpdE9LID0gZmFsc2U7IFwKICAgICByZXR1cm4gc2hvdWxkQ29udGlu
dWVQYXJzaW5nCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24q
IHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTM1Miw2
ICsxMzg0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQogICAg
IGNsZWFyQ2FjaGVzKCk7IC8vIFJlc2V0IG91ciBzdGF0ZSBub3cgdGhhdCB3ZSdyZSBiYWNrIHRv
IHRoZSBvdXRlciBjb2RlLgogICAgIAogICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7Cisg
ICAgbV9leGl0T0sgPSBmYWxzZTsKICAgICAKICAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNy
ZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4K
ICAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgu
bGFzdEJsb2NrKCkpIHsKQEAgLTI5MTgsNiArMjk1MSwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAg
ICAgLy8gV2UncmUgc3RhcmluZyBhIG5ldyBieXRlY29kZSBpbnN0cnVjdGlvbi4gSGVuY2UsIHdl
IG9uY2UgYWdhaW4gaGF2ZSBhIHBsYWNlIHRoYXQgd2UgY2FuIGV4aXQKKyAgICAgICAgLy8gdG8u
CisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgCiAgICAgICAgIHByb2Nlc3NTZXRM
b2NhbFF1ZXVlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1w
IGRlc3RpbmF0aW9ucy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIGNsb2Ji
ZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK3sKKyAgICAvLyBUaGVyZSBh
cmUgY2VydGFpbiBub2RlcyB3aG9zZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhp
bmcgdG8gZG8gd2l0aCB3aGF0IHRoZXkKKyAgICAvLyBub3JtYWxseSBjbG9iYmVyLgorICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhp
bnQ6CisgICAgY2FzZSBQdXRIaW50OgorICAgIGNhc2UgS2lsbFN0YWNrOgorICAgICAgICAvLyBU
aGVzZSBub2RlcyBhbGwgd3JpdGUgdG8gdGhlIGV4aXQgc3RhdGUsIHNvIG9idmlvdXNseSwgdGhl
eSBjbG9iYmVyIGl0LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMgd3JpdGUgdG8gdGhl
IHN0YWNrLCBidXQgdGhleSBtYXkgb25seSBkbyBzbyBhZnRlciB3ZSBoYXZlIGFscmVhZHkgaGFk
IGEgTW92SGludAorICAgICAgICAvLyBmb3IgdGhlIGV4YWN0IHNhbWUgdmFsdWUgYW5kIHRoZSBz
YW1lIHN0YWNrIGxvY2F0aW9uLiBIZW5jZSwgdGhleSBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0IG9u
CisgICAgICAgIC8vIGV4aXQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRl
ZmF1bHQ6CisgICAgICAgIC8vIEZvciBhbGwgb3RoZXIgbm9kZXMsIHdlIGp1c3QgY2FyZSBhYm91
dCB3aGV0aGVyIHRoZXkgd3JpdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gU2lkZVN0YXRlLgor
ICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBjbG9iYmVyaXplKAorICAgICAg
ICAgICAgZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCisgICAgICAgICAgICBbJl0gKGNv
bnN0IEFic3RyYWN0SGVhcCYgaGVhcCkgeworICAgICAgICAgICAgICAgIGlmICghaGVhcC5pc1N1
YnR5cGVPZihTdGFjaykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAg
ICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcnNFeGl0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKyNkZWZpbmUgREZHQ2xvYmJlcnNFeGl0
U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKworLy8gQSBjb25zZXJ2YXRp
dmUgYXBwcm94aW1hdGlvbiBvZiB3aGV0aGVyIHRoZSBub2RlIHdpbGwgcGVyZm9ybSBhbiBlZmZl
Y3QgdGhhdCBtZWFucyB0aGF0IHdlIGNhbiBubworLy8gbG9uZ2VyIGV4aXQgdG8gdGhpcyBub2Rl
J3MgZXhpdCBvcmlnaW4uCisKK2Jvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmLCBOb2RlKik7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg4NzA0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0
LDkgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Js
b2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVkZSAiREZH
Q2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAi
REZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNp
bmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0
YWJsZUR1bXAuaCIKQEAgLTEwMSw4ICsxMDMsMTQgQEAgc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNw
YWNlKFByaW50U3RyZWFtJgogICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0KIAotYm9vbCBHcmFw
aDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBO
b2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCogY29udGV4
dCkKK2Jvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNo
YXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZVJlZiwgTm9kZSogY3VycmVudE5vZGUsIER1
bXBDb250ZXh0KiBjb250ZXh0KQogeworICAgIGlmICghY3VycmVudE5vZGUtPm9yaWdpbi5zZW1h
bnRpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIE5vZGUqIHByZXZpb3VzTm9k
ZSA9IHByZXZpb3VzTm9kZVJlZjsKKyAgICBwcmV2aW91c05vZGVSZWYgPSBjdXJyZW50Tm9kZTsK
KwogICAgIGlmICghcHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBA
IC0zNDUsMTIgKzM1MywxNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlzdER1bXAocmVhZHMu
ZGlyZWN0KCksICIsIikpOwogICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGlyZWN0KCksICIsIikp
OworICAgIGlmIChtYXlFeGl0KCp0aGlzLCBub2RlKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiTWF5RXhpdCIpOworICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSgqdGhpcywgbm9kZSkpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgIkNsb2JiZXJzRXhpdCIpOwogICAgIGlmIChub2RlLT5v
cmlnaW4uaXNTZXQoKSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChub2RlLT5vcmlnaW4u
c2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQpCisgICAgICAgIGlmIChub2RlLT5vcmln
aW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+b3JpZ2luLmZvckV4
aXQuaXNTZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImV4aXQ6ICIsIG5vZGUt
Pm9yaWdpbi5mb3JFeGl0KTsKICAgICB9Ci0gICAgCisgICAgaWYgKCFub2RlLT5vcmlnaW4uZm9y
RXhpdCkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdEludmFsaWQiKTsKICAgICBvdXQu
cHJpbnQoIikiKTsKIAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMp
ICYmIG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpKQpAQCAtNDU1LDcgKzQ2OCw3IEBA
IHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgb3V0LnBy
aW50KCIgIEFyZ3VtZW50czogIiwgbGlzdER1bXAobV9hcmd1bWVudHMpLCAiXG4iKTsKICAgICBv
dXQucHJpbnQoIlxuIik7CiAgICAgCi0gICAgTm9kZSogbGFzdE5vZGUgPSAwOworICAgIE5vZGUq
IGxhc3ROb2RlID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tz
LnNpemUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0u
Z2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC00OTYsNyArNTA5LDYgQEAgdm9pZCBHcmFw
aDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4o
b3V0LCAiIiwgbGFzdE5vZGUsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7CiAgICAgICAgICAgICBk
dW1wKG91dCwgIiIsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7Ci0gICAgICAgICAgICBsYXN0Tm9k
ZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgU3RhdGVz
OiAiLCBibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uLCAiLCAiLCBibG9jay0+Y2ZhU3RydWN0dXJl
Q2xvYmJlclN0YXRlQXRUYWlsKTsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhRGlkRmluaXNoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg4NzA0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTAsNyArMjEwLDcgQEAgcHVibGljOgogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4g
b2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQog
ICAgIC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50
ZWQuCi0gICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHBy
ZWZpeCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQq
KTsKKyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJl
Zml4LCBOb2RlKiYgcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQq
KTsKIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRk
LCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0
ZUludDMyLCBQcmVkaWN0aW9uUGFzcyBwYXNzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCShyZXZpc2lvbiAxODg3MDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNDks
OCArNDksNyBAQCBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNv
bnN0CiAgICAgewotICAgICAgICBBU1NFUlQoc2VtYW50aWMuaXNTZXQoKSA9PSBmb3JFeGl0Lmlz
U2V0KCkpOwotICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNTZXQoKTsKKyAgICAgICAgcmV0dXJu
IHNlbWFudGljLmlzU2V0KCkgfHwgZm9yRXhpdC5pc1NldCgpOwogICAgIH0KICAgICAKICAgICAv
LyBVc2VkIGZvciBkZXRlcm1pbmluZyB3aGF0IGJ5dGVjb2RlIHRoaXMgY2FtZSBmcm9tLiBUaGlz
IGlzIGltcG9ydGFudCBmb3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmgJKHJldmlzaW9uIDE4ODcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsOCArNDYsOCBAQCBzdHJ1Y3Qg
T1NSRXhpdEJhc2UgewogICAgICAgICAsIG1fY29kZU9yaWdpbihvcmlnaW4pCiAgICAgICAgICwg
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUob3JpZ2luRm9yUHJvZmlsZSkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSk7Ci0gICAgICAgIEFTU0VSVChtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZS5pc1NldCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9j
b2RlT3JpZ2luLmlzU2V0KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2NvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZS5pc1NldCgpKTsKICAgICB9CiAgICAgCiAgICAgRXhpdEtpbmQgbV9raW5k
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlz
aW9uIDE4ODcwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
ICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJz
RXhpdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTg1LDEzICsxODYsMjIgQEAg
cHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGUpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaXNTZXQoKSA9PSBub2RlLT5vcmlnaW4uZm9yRXhp
dC5pc1NldCgpKTsKKwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW1heUV4aXQo
bV9ncmFwaCwgbm9kZSkgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c05v
ZGUgPSBibG9jay0+YXQoaSAtIDEpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIChub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICFj
bG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBoLCBwcmV2aW91c05vZGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICB8fCAhbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQgIT0gcHJldmlvdXNOb2RlLT5vcmlnaW4u
Zm9yRXhpdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc1N0cnVjdHVyZSgpIHx8ICEhbm9kZS0+
c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhh
c0NlbGxPcGVyYW5kKCkgfHwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKS5pc0NlbGwoKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQo
KSB8fCAhIW5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQy
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5jaGls
ZDMoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259643</attachid>
            <date>2015-08-21 12:35:57 -0700</date>
            <delta_ts>2015-08-21 14:12:11 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30342</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg3NDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw4IEBACiAJCTBGM0IzQTJDMTU0NzUw
MDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdD
bG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFB
QjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjEwMiw2ICsyMTA0LDggQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
M0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7
IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJl
UG9zdE51bWJlcmluZy5oOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU1MCw3ICszNTU0LDcgQEAKIAkJ
RTMzRjUwN0YxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxQcm9taXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzM0Y1MDgyMUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNGNTA4MzFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzM0Y1MDg2MUI4NDQ5RUYw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5o
OyBwYXRoID0gSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJ1Y3RBYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUxMDQsNiArNTEwOCw4IEBACiAJCQkJQTc3QTQyMzkxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Nsb2JiZXJpemUuaCAqLywKIAkJCQlBNzdBNDIzQTE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlclNldC5jcHAgKi8sCiAJCQkJQTc3QTQyM0IxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuaCAqLywKKwkJCQkwRjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwICovLAorCQkJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovLAogCQkJCTBGMDQzOTZCMUIwM0RDMEIwMDk1OThC
NyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmNwcCAqLywKIAkJCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovLAogCQkJCTBGQjRCNTFBMTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdDb21tb24uY3BwICovLApAQCAtNjEzMSw2ICs2MTM3LDcgQEAKIAkJCQkw
RkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdp
c3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0MxRjFCMUI4NjhFNzkwMEFC
QjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQy
NDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93
UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkQxOEE2MDA3MDAwMUEy
N0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzY0LDYgKzczNzEsNyBA
QAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0MxRjFBMUI4
NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3NzUwNTYwMDgzQjY4NyAvKiBE
RkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4ODc0NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gLSBTdGFjayB3
aXRoIGEgVE9QIHBheWxvYWQgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZAogLy8gLSBTdGFj
ayB3aXRoIGEgbm9uLVRPUCBwYXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgU3RhY2sgd2l0
aCBhIFRPUCBwYXlsb2FkLgogLy8gLSBIZWFwIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQu
CisvLyAtIFNpZGVTdGF0ZSBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgogLy8gLSBBbnkg
b3RoZXIga2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBIZWFw
LgogLy8gLSBBbnkgb3RoZXIga2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0
IHN1YnR5cGUgb2YgdGhlIHNhbWUga2luZCB3aXRoIGEgVE9QIHBheWxvYWQuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxODg3NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVC
bG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRT
dGF0dXMuaCIKQEAgLTM2Miw2ICszNjMsOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgYWRk
VG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKIAorICAg
ICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUg
aGFzIGNoYW5nZWQuCisgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CisKICAgICAgICAgRGVsYXll
ZFNldExvY2FsIGRlbGF5ZWQoY3VycmVudENvZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwog
ICAgICAgICAKICAgICAgICAgaWYgKHNldE1vZGUgPT0gTm9ybWFsU2V0KSB7CkBAIC0zNzQsOCAr
Mzc4LDE0IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgp
CiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVl
LnNpemUoKTsgKytpKQorICAgICAgICAvLyBXZSBwbGF5IGhhY2tzIHdpdGggbV9leGl0T0sgaGVy
ZS4gV2Uga25vdyB0aGF0IHRoZSBTZXRMb2NhbHMgd2UgYXJlIGVtaXR0aW5nIGFyZSBhbHJlYWR5
CisgICAgICAgIC8vIHJlY29yZGVkIGluIE9TUiBleGl0IHN0YXRlLCBzbyB0aGV5IGFyZW4ndCBy
ZWFsIGVmZmVjdHMuIFNvLCB3ZSBkb24ndCB3YW50IHRoZW0gdG8gaGF2ZSBhbnkKKyAgICAgICAg
Ly8gZWZmZWN0IG9uIG1fZXhpdE9LLgorICAgICAgICBib29sIGV4aXRPS0JlZm9yZSA9IG1fZXhp
dE9LOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNp
emUoKTsgKytpKSB7CiAgICAgICAgICAgICBtX3NldExvY2FsUXVldWVbaV0uZXhlY3V0ZSh0aGlz
KTsKKyAgICAgICAgICAgIG1fZXhpdE9LID0gZXhpdE9LQmVmb3JlOworICAgICAgICB9CiAgICAg
ICAgIG1fc2V0TG9jYWxRdWV1ZS5yZXNpemUoMCk7CiAgICAgfQogCkBAIC02NTEsMTEgKzY2MSwx
NyBAQCBwcml2YXRlOgogCiAgICAgTm9kZU9yaWdpbiBjdXJyZW50Tm9kZU9yaWdpbigpCiAgICAg
ewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHNldCB0aGUgZm9yRXhpdCBvcmlnaW4gb25s
eSBvbiB0aG9zZSBub2RlcyB0aGF0IGNhbiBleGl0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjA0CisgICAgICAgIENvZGVPcmlnaW4gc2Vt
YW50aWM7CisgICAgICAgIENvZGVPcmlnaW4gZm9yRXhpdDsKKwogICAgICAgICBpZiAobV9jdXJy
ZW50U2VtYW50aWNPcmlnaW4uaXNTZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBOb2RlT3JpZ2lu
KG1fY3VycmVudFNlbWFudGljT3JpZ2luLCBjdXJyZW50Q29kZU9yaWdpbigpKTsKLSAgICAgICAg
cmV0dXJuIE5vZGVPcmlnaW4oY3VycmVudENvZGVPcmlnaW4oKSk7CisgICAgICAgICAgICBzZW1h
bnRpYyA9IG1fY3VycmVudFNlbWFudGljT3JpZ2luOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBzZW1hbnRpYyA9IGN1cnJlbnRDb2RlT3JpZ2luKCk7CisKKyAgICAgICAgZm9yRXhpdCA9IGN1
cnJlbnRDb2RlT3JpZ2luKCk7CisKKyAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMs
IGZvckV4aXQsIG1fZXhpdE9LKTsKICAgICB9CiAgICAgCiAgICAgQnJhbmNoRGF0YSogYnJhbmNo
RGF0YSh1bnNpZ25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCkBAIC02NzMsNiArNjg5LDE4
IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJz
aW5nKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIGFwcGVuZGVkICIsIG5vZGUsICIg
IiwgR3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSwgIlxuIik7CiAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5hcHBlbmQobm9kZSk7CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAgICBtX2dy
YXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0
cmFjdEhlYXAmIGhlYXApIHsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZXMgdG8gU2lkZVN0YXRl
IGFyZSBub3Qgb2JzZXJ2YWJsZS4KKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5pc1N1YnR5cGVP
ZihTaWRlU3RhdGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAg
ICAgICAvLyBXZSBhc3N1bWUgYWxsIG90aGVyIHdyaXRlcyBhcmUgb2JzZXJ2YWJsZSwgYW5kIHNv
IGlmIHdlIHRyaWVkIHRvIGV4aXQgYWZ0ZXIgdGhlbQorICAgICAgICAgICAgICAgIC8vIHdpdGgg
dGhlIHNhbWUgb3JpZ2luIHRoZW4gd2UnZCBjYXVzZSB0aGF0IGVmZmVjdCB0byByZXBlYXQuCisg
ICAgICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAg
ICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAg
IApAQCAtODk2LDYgKzkyNCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5k
ZXg7CiAgICAgLy8gVGhlIHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2RlIGlmIGRp
ZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9jdXJyZW50
U2VtYW50aWNPcmlnaW47CisgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0IHJpZ2h0
IG5vdy4KKyAgICBib29sIG1fZXhpdE9LIHsgZmFsc2UgfTsKIAogICAgIEZyb3plblZhbHVlKiBt
X2NvbnN0YW50VW5kZWZpbmVkOwogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKQEAg
LTEwNDksNiArMTA3OSw3IEBAIHByaXZhdGU6CiAKICNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkg
XAogICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKKyAgICBtX2V4
aXRPSyA9IGZhbHNlOyBcCiAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwogCiB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3As
IENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEzNTIsNiArMTM4Myw3IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBjbGVhckNhY2hlcygpOyAv
LyBSZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIgY29kZS4K
ICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1fZXhpdE9LID0gZmFs
c2U7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJh
c2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0
YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RCbG9jaygpKSB7CkBA
IC0yOTE4LDYgKzI5NTAsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgIH0KIAogICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJp
bmcgYSBuZXcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUg
YSBwbGFjZSB0aGF0IHdlIGNhbiBleGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CisgICAgICAgIAogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAg
ICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMg
d2hvc2UgZWZmZWN0IG9uIHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hh
dCB0aGV5CisgICAgLy8gbm9ybWFsbHkgY2xvYmJlci4KKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgUHV0
SGludDoKKyAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMgYWxsIHdy
aXRlIHRvIHRoZSBleGl0IHN0YXRlLCBzbyBvYnZpb3VzbHksIHRoZXkgY2xvYmJlciBpdC4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFNldExvY2FsOgorICAgIGNhc2UgUHV0U3Rh
Y2s6CisgICAgICAgIC8vIFRoZXNlIG5vZGVzIHdyaXRlIHRvIHRoZSBzdGFjaywgYnV0IHRoZXkg
bWF5IG9ubHkgZG8gc28gYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGhhZCBhIE1vdkhpbnQKKyAgICAg
ICAgLy8gZm9yIHRoZSBleGFjdCBzYW1lIHZhbHVlIGFuZCB0aGUgc2FtZSBzdGFjayBsb2NhdGlv
bi4gSGVuY2UsIHRoZXkgaGF2ZSBubyBmdXJ0aGVyIGVmZmVjdCBvbgorICAgICAgICAvLyBleGl0
IHN0YXRlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAv
LyBGb3IgYWxsIG90aGVyIG5vZGVzLCB3ZSBqdXN0IGNhcmUgYWJvdXQgd2hldGhlciB0aGV5IHdy
aXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFNpZGVTdGF0ZS4KKyAgICAgICAgYm9vbCByZXN1
bHQgPSBmYWxzZTsKKyAgICAgICAgY2xvYmJlcml6ZSgKKyAgICAgICAgICAgIGdyYXBoLCBub2Rl
LCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFjdEhlYXAm
IGhlYXApIHsKKyAgICAgICAgICAgICAgICBpZiAoIWhlYXAuaXNTdWJ0eXBlT2YoU2lkZVN0YXRl
KSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sCisg
ICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcnNFeGl0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZH
Q2xvYmJlcnNFeGl0U3RhdGVfaAorI2RlZmluZSBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitj
bGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOworCisvLyBBIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0
aW9uIG9mIHdoZXRoZXIgdGhlIG5vZGUgd2lsbCBwZXJmb3JtIGFuIGVmZmVjdCB0aGF0IG1lYW5z
IHRoYXQgd2UgY2FuIG5vCisvLyBsb25nZXIgZXhpdCB0byB0aGlzIG5vZGUncyBleGl0IG9yaWdp
bi4KKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYsIE5vZGUqKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxODg3NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1
ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5o
IgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRT
dGF0ZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0Lmgi
CiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bGxC
eXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgpA
QCAtMTAxLDggKzEwMywxNCBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRTdHJl
YW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29kZU9y
aWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3Vz
Tm9kZSwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQorYm9vbCBHcmFw
aDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBO
b2RlKiYgcHJldmlvdXNOb2RlUmVmLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqIGNv
bnRleHQpCiB7CisgICAgaWYgKCFjdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgTm9kZSogcHJldmlvdXNOb2RlID0gcHJldmlvdXNO
b2RlUmVmOworICAgIHByZXZpb3VzTm9kZVJlZiA9IGN1cnJlbnROb2RlOworCiAgICAgaWYgKCFw
cmV2aW91c05vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTM0NSwxMiArMzUz
LDE3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCAiUjoiLCBzb3J0ZWRMaXN0RHVtcChyZWFkcy5kaXJlY3QoKSwgIiwi
KSk7CiAgICAgaWYgKCF3cml0ZXMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJXOiIsIHNvcnRlZExpc3REdW1wKHdyaXRlcy5kaXJlY3QoKSwgIiwiKSk7CisgICAgaWYgKG1h
eUV4aXQoKnRoaXMsIG5vZGUpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJNYXlFeGl0Iik7
CisgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRlKCp0aGlzLCBub2RlKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiQ2xvYmJlcnNFeGl0Iik7CiAgICAgaWYgKG5vZGUtPm9yaWdpbi5pc1NldCgp
KSB7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImJjIyIsIG5vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBu
b2RlLT5vcmlnaW4uZm9yRXhpdCkKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAh
PSBub2RlLT5vcmlnaW4uZm9yRXhpdCAmJiBub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKQog
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZXhpdDogIiwgbm9kZS0+b3JpZ2luLmZvckV4
aXQpOwogICAgIH0KLSAgICAKKyAgICBpZiAoIW5vZGUtPm9yaWdpbi5leGl0T0spCisgICAgICAg
IG91dC5wcmludChjb21tYSwgIkV4aXRJbnZhbGlkIik7CiAgICAgb3V0LnByaW50KCIpIik7CiAK
ICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSAmJiBub2RlLT50cnlH
ZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKQEAgLTQ1NSw3ICs0NjgsNyBAQCB2b2lkIEdyYXBoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgIG91dC5wcmludCgiICBBcmd1bWVu
dHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRzKSwgIlxuIik7CiAgICAgb3V0LnByaW50KCJcbiIp
OwogICAgIAotICAgIE5vZGUqIGxhc3ROb2RlID0gMDsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IG51
bGxwdHI7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikg
ewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwogICAgICAg
ICBpZiAoIWJsb2NrKQpAQCAtNDk2LDcgKzUwOSw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3RO
b2RlLCBibG9jay0+YXQoaSksIGNvbnRleHQpOwogICAgICAgICAgICAgZHVtcChvdXQsICIiLCBi
bG9jay0+YXQoaSksIGNvbnRleHQpOwotICAgICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQo
aSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0LnByaW50KCIgIFN0YXRlczogIiwgYmxvY2stPmNm
YUJyYW5jaERpcmVjdGlvbiwgIiwgIiwgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0
VGFpbCk7CiAgICAgICAgIGlmICghYmxvY2stPmNmYURpZEZpbmlzaCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE4ODc0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3
IEBAIHB1YmxpYzoKIAogICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBu
b2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRp
bmcgbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wg
ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHBy
ZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0Kik7CisgICAgYm9vbCBk
dW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHBy
ZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0Kik7CiAKICAgICBBZGRT
cGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hv
dWxkU3BlY3VsYXRlSW50MzIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMiwgUHJlZGlj
dGlvblBhc3MgcGFzcykKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0QmFzZS5oCShyZXZpc2lvbiAxODg3NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg3NDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwor
ICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSwgbV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGZ1enpK
dW1wID0gZW1pdE9TUkV4aXRGdXp6Q2hlY2soKTsKICAgICBpZiAoZnV6ekp1bXAuaXNTZXQoKSkg
ewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QganVtcHNUb0ZhaWw7CkBAIC0yMTIsNyAr
MjEyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CisgICAgREZHX0FTU0VSVChtX2ppdC5n
cmFwaCgpLCBtX2N1cnJlbnROb2RlLCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0T1NSRXhpdEZ1enpD
aGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAgIEpJVENvbXBpbGVy
OjpKdW1wTGlzdCBteUp1bXBzVG9GYWlsOwpAQCAtMjI4LDcgKzIyOCw3IEBAIE9TUkV4aXRKdW1w
UGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkp
CiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKKyAgICBERkdfQVNTRVJUKG1f
aml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1faml0LmppdENvZGUoKS0+b3NyRXhp
dC5zaXplKCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oKTsKICAgICBtX2ppdC5qaXRDb2Rl
KCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFw
aCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFt
LT5zaXplKCkpKTsKQEAgLTIzNywxOSArMjM3LDE2IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIg
U3BlY3VsYXRpdmVKSVQ6OnMKIAogT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNw
ZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBU
b0ZhaWwpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBjb25z
dCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogewotICAgIEFTU0VSVCht
X2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25D
aGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcHNUb0ZhaWwpOwog
fQogCkBAIC0yNTcsNyArMjU0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25D
aGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CisgICAgREZH
X0FTU0VSVChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlLCBtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IG1faml0
LmppdENvZGUoKS0+YXBwZW5kU3BlY3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAgbV9q
aXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBl
bmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgp
LCByZWNvdmVyeUluZGV4KSk7CkBAIC0yNjUsNyArMjYyLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayhFeAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBu
b2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlv
blJlY292ZXJ5JiByZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNv
dXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIApAQCAtMjcz
LDcgKzI2OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kKIHsK
ICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9j
YW5FeGl0KTsKKyAgICBERkdfQVNTRVJUKG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUsIG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBPU1JFeGl0Q29tcGls
YXRpb25JbmZvJiBpbmZvID0gbV9qaXQuYXBwZW5kRXhpdEluZm8oSklUQ29tcGlsZXI6Okp1bXBM
aXN0KCkpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KAogICAg
ICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSlNWYWx1ZVNvdXJjZSgpLApAQCAtMjg2LDcg
KzI4Miw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kKIAogdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQg
a2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVSZWdzLCBub2RlLCBtX2ppdC5qdW1wKCkpOwpAQCAtMjk3LDcgKzI5Miw2IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKIAogdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJl
Z3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKQEAgLTE0ODAs
MTAgKzE0NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQVNTRVJUX0RJU0FC
TEVEKQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gdHJ1ZTsgLy8gRXNzZW50aWFsbHkgZGlzYWJs
ZSB0aGUgYXNzZXJ0aW9ucy4KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jYW5FeGl0ID0g
bWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgbV9jYW5FeGl0
ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmV4aXRPSzsKICAgICAgICAgCiAgICAgICAgIG1faW50
ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2N1
cnJlbnROb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAxODg3NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShE
RkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJE
RkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE4NSwxMyAr
MTg2LDI0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAg
VkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaXNTZXQoKSA9PSBub2RlLT5v
cmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICFtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISghbm9kZS0+b3JpZ2luLmZvckV4
aXQuaXNTZXQoKSAmJiBub2RlLT5vcmlnaW4uZXhpdE9LKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgJiYgIW5vZGUtPm9yaWdpbi5l
eGl0T0spKTsKKworICAgICAgICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAgICAg
IE5vZGUqIHByZXZpb3VzTm9kZSA9IGJsb2NrLT5hdChpIC0gMSk7CisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIWNsb2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIHByZXZpb3VzTm9kZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFub2RlLT5vcmlnaW4uZXhpdE9LCisgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUt
Pm9yaWdpbi5mb3JFeGl0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzU3RydWN0dXJlKCkgfHwg
ISFub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAh
bm9kZS0+aGFzQ2VsbE9wZXJhbmQoKSB8fCBub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpLmlz
Q2VsbCgpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNDZWxs
T3BlcmFuZCgpIHx8ICEhbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSk7Ci0gICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZs
YWdzKCkgJiBOb2RlSGFzVmFyQXJncykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2Rl
LT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5v
ZGUtPmNoaWxkMygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODg3NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkg
KzIyNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxz
LmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZs
dXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwogICAgICAgICB9
Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKDApOwotICAg
ICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oMCk7CiAgICAgICAg
IG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3Jp
Z2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSog
bm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpAQCAtMzkzLDggKzM5
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fbm9kZSA9IG1f
aGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJv
ZmlsZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JF
eGl0VGFyZ2V0ID0gbV9ub2RlLT5vcmlnaW4uZm9yRXhpdDsKKyAgICAgICAgbV9vcmlnaW4gPSBt
X25vZGUtPm9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25F
bmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJcbiIp
OwpAQCAtNDczMywxMCArNDczMSwxMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKHZl
cmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZh
bGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAi
XG4iKTsKKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhp
dE9LKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBl
bmQoT1NSRXhpdCgKICAgICAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlk
VmFsdWVGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKSwKLSAgICAgICAgICAg
IG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAor
ICAgICAgICAgICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAg
ICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwog
ICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBp
bGF0aW9uSW5mbygpKTsKQEAgLTgwNzQsNiArODA3NCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFp
bGFibGVSZWNvdmVyaWVzKSwgIlxuIik7CiAgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChkb09TUkV4aXRGdXp6aW5nKCkpIHsKICAgICAgICAgICAgIExWYWx1ZSBudW1iZXJPZkZ1enpD
aGVja3MgPSBtX291dC5hZGQoCkBAIC04MDk4LDcgKzgxMDAsNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAog
ICAgICAgICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAotICAgICAgICAgICAgbV9jb2RlT3JpZ2lu
Rm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCisgICAgICAgICAgICBt
X29yaWdpbi5mb3JFeGl0LCBtX29yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRs
U3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkp
OwpAQCAtODU5Myw5ICs4NTk1LDggQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hC
bG9jazsKICAgICBCYXNpY0Jsb2NrKiBtX25leHRIaWdoQmxvY2s7CiAgICAgTEJhc2ljQmxvY2sg
bV9uZXh0TG93QmxvY2s7Ci0gICAgCi0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0
VGFyZ2V0OwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisKKyAg
ICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIE5v
ZGUqIG1fbm9kZTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259656</attachid>
            <date>2015-08-21 14:12:11 -0700</date>
            <delta_ts>2015-08-21 15:05:37 -0700</delta_ts>
            <desc>builds again</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>34752</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg3NzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw4IEBACiAJCTBGM0IzQTJDMTU0NzUw
MDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdD
bG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFB
QjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjEwNCw2ICsyMTA2LDggQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
M0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7
IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJl
UG9zdE51bWJlcmluZy5oOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU1Miw3ICszNTU2LDcgQEAKIAkJ
RTMzRjUwN0YxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxQcm9taXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzM0Y1MDgyMUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNGNTA4MzFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzM0Y1MDg2MUI4NDQ5RUYw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5o
OyBwYXRoID0gSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJ1Y3RBYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUxMTAsNiArNTExNCw4IEBACiAJCQkJQTc3QTQyMzkxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Nsb2JiZXJpemUuaCAqLywKIAkJCQlBNzdBNDIzQTE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlclNldC5jcHAgKi8sCiAJCQkJQTc3QTQyM0IxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuaCAqLywKKwkJCQkwRjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwICovLAorCQkJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovLAogCQkJCTBGMDQzOTZCMUIwM0RDMEIwMDk1OThC
NyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmNwcCAqLywKIAkJCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovLAogCQkJCTBGQjRCNTFBMTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdDb21tb24uY3BwICovLApAQCAtNjEzOCw2ICs2MTQ0LDcgQEAKIAkJCQkw
RkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdp
c3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0MxRjFCMUI4NjhFNzkwMEFC
QjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQy
NDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93
UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkQxOEE2MDA3MDAwMUEy
N0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzcxLDYgKzczNzgsNyBA
QAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0MxRjFBMUI4
NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3NzUwNTYwMDgzQjY4NyAvKiBE
RkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4ODc3MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gLSBTdGFjayB3
aXRoIGEgVE9QIHBheWxvYWQgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZAogLy8gLSBTdGFj
ayB3aXRoIGEgbm9uLVRPUCBwYXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgU3RhY2sgd2l0
aCBhIFRPUCBwYXlsb2FkLgogLy8gLSBIZWFwIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQu
CisvLyAtIFNpZGVTdGF0ZSBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgogLy8gLSBBbnkg
b3RoZXIga2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBIZWFw
LgogLy8gLSBBbnkgb3RoZXIga2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0
IHN1YnR5cGUgb2YgdGhlIHNhbWUga2luZCB3aXRoIGEgVE9QIHBheWxvYWQuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxODg3NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVC
bG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRT
dGF0dXMuaCIKQEAgLTM2MCw2ICszNjEsOSBAQCBwcml2YXRlOgogICAgIH07CiAgICAgTm9kZSog
c2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnlt
b3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgorICAgICAgICBtX2V4
aXRPSyA9IGZhbHNlOworCiAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJh
bmQub2Zmc2V0KCkpLCB2YWx1ZSk7CiAKICAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQo
Y3VycmVudENvZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwpAQCAtMzc0LDggKzM3OCwxNCBA
QCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7
ICsraSkKKyAgICAgICAgLy8gV2UgcGxheSBoYWNrcyB3aXRoIG1fZXhpdE9LIGhlcmUuIFdlIGtu
b3cgdGhhdCB0aGUgU2V0TG9jYWxzIHdlIGFyZSBlbWl0dGluZyBhcmUgYWxyZWFkeQorICAgICAg
ICAvLyByZWNvcmRlZCBpbiBPU1IgZXhpdCBzdGF0ZSwgc28gdGhleSBhcmVuJ3QgcmVhbCBlZmZl
Y3RzLiBTbywgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGhhdmUgYW55CisgICAgICAgIC8vIGVmZmVj
dCBvbiBtX2V4aXRPSy4KKyAgICAgICAgYm9vbCBleGl0T0tCZWZvcmUgPSBtX2V4aXRPSzsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAg
ICAgICAgICBtX2V4aXRPSyA9IGV4aXRPS0JlZm9yZTsKKyAgICAgICAgfQogICAgICAgICBtX3Nl
dExvY2FsUXVldWUucmVzaXplKDApOwogICAgIH0KIApAQCAtNjUxLDE1ICs2NjEsMTcgQEAgcHJp
dmF0ZToKIAogICAgIE5vZGVPcmlnaW4gY3VycmVudE5vZGVPcmlnaW4oKQogICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZXQgdGhlIGZvckV4aXQgb3JpZ2luIG9ubHkgb24gdGhv
c2Ugbm9kZXMgdGhhdCBjYW4gZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTIwNAogICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljOwor
ICAgICAgICBDb2RlT3JpZ2luIGZvckV4aXQ7CisKICAgICAgICAgaWYgKG1fY3VycmVudFNlbWFu
dGljT3JpZ2luLmlzU2V0KCkpCiAgICAgICAgICAgICBzZW1hbnRpYyA9IG1fY3VycmVudFNlbWFu
dGljT3JpZ2luOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZW1hbnRpYyA9IGN1cnJlbnRD
b2RlT3JpZ2luKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRp
YywgY3VycmVudENvZGVPcmlnaW4oKSwgdHJ1ZSk7CisKKyAgICAgICAgZm9yRXhpdCA9IGN1cnJl
bnRDb2RlT3JpZ2luKCk7CisKKyAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGZv
ckV4aXQsIG1fZXhpdE9LKTsKICAgICB9CiAgICAgCiAgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0
YSh1bnNpZ25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCkBAIC02NzcsNiArNjg5LDE4IEBA
IHByaXZhdGU6CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5n
KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIGFwcGVuZGVkICIsIG5vZGUsICIgIiwg
R3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSwgIlxuIik7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmQobm9kZSk7CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAgICBtX2dyYXBo
LCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFj
dEhlYXAmIGhlYXApIHsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZXMgdG8gU2lkZVN0YXRlIGFy
ZSBub3Qgb2JzZXJ2YWJsZS4KKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5pc1N1YnR5cGVPZihT
aWRlU3RhdGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICAvLyBXZSBhc3N1bWUgYWxsIG90aGVyIHdyaXRlcyBhcmUgb2JzZXJ2YWJsZSwgYW5kIHNvIGlm
IHdlIHRyaWVkIHRvIGV4aXQgYWZ0ZXIgdGhlbQorICAgICAgICAgICAgICAgIC8vIHdpdGggdGhl
IHNhbWUgb3JpZ2luIHRoZW4gd2UnZCBjYXVzZSB0aGF0IGVmZmVjdCB0byByZXBlYXQuCisgICAg
ICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIApA
QCAtOTAwLDYgKzkyNCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7
CiAgICAgLy8gVGhlIHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2RlIGlmIGRpZmZl
cmVudCBmcm9tIHRoZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9jdXJyZW50U2Vt
YW50aWNPcmlnaW47CisgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0IHJpZ2h0IG5v
dy4KKyAgICBib29sIG1fZXhpdE9LIHsgZmFsc2UgfTsKIAogICAgIEZyb3plblZhbHVlKiBtX2Nv
bnN0YW50VW5kZWZpbmVkOwogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKQEAgLTEw
NTMsNiArMTA3OSw3IEBAIHByaXZhdGU6CiAKICNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkgXAog
ICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKKyAgICBtX2V4aXRP
SyA9IGZhbHNlOyBcCiAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwogCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEzNTYsNiArMTM4Myw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBjbGVhckNhY2hlcygpOyAvLyBS
ZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIgY29kZS4KICAg
ICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1fZXhpdE9LID0gZmFsc2U7
CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2lj
IGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0YWNr
RW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RCbG9jaygpKSB7CkBAIC0y
OTAxLDEyICsyOTI5LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJh
c2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwog
ICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFj
dHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVl
IHdlIHNldCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLmJs
b2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBTZXRB
cmd1bWVudCBub2Rlcy4gVGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRvcCBvZiBh
biBvcF9lbnRlciBzbworICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgorICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC0yOTIyLDYgKzI5NTMs
MTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIAog
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0aGF0IHdl
IGNhbiBleGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAg
ICAgIAogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAgICAgICAg
Ly8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R05vZGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpCit7CisgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMgd2hvc2UgZWZmZWN0IG9u
IHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hhdCB0aGV5CisgICAgLy8g
bm9ybWFsbHkgY2xvYmJlci4KKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIE1v
dkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgUHV0SGludDoKKyAgICBjYXNl
IEtpbGxTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMgYWxsIHdyaXRlIHRvIHRoZSBleGl0
IHN0YXRlLCBzbyBvYnZpb3VzbHksIHRoZXkgY2xvYmJlciBpdC4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBjYXNlIFNldExvY2FsOgorICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIC8v
IFRoZXNlIG5vZGVzIHdyaXRlIHRvIHRoZSBzdGFjaywgYnV0IHRoZXkgbWF5IG9ubHkgZG8gc28g
YWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGhhZCBhIE1vdkhpbnQKKyAgICAgICAgLy8gZm9yIHRoZSBl
eGFjdCBzYW1lIHZhbHVlIGFuZCB0aGUgc2FtZSBzdGFjayBsb2NhdGlvbi4gSGVuY2UsIHRoZXkg
aGF2ZSBubyBmdXJ0aGVyIGVmZmVjdCBvbgorICAgICAgICAvLyBleGl0IHN0YXRlLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGb3IgYWxsIG90aGVy
IG5vZGVzLCB3ZSBqdXN0IGNhcmUgYWJvdXQgd2hldGhlciB0aGV5IHdyaXRlIHRvIHNvbWV0aGlu
ZyBvdGhlciB0aGFuIFNpZGVTdGF0ZS4KKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgY2xvYmJlcml6ZSgKKyAgICAgICAgICAgIGdyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6
ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXApIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIWhlYXAuaXNTdWJ0eXBlT2YoU2lkZVN0YXRlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBOb09w
Q2xvYmJlcml6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ2xvYmJlcnNFeGl0U3Rh
dGVfaAorI2RlZmluZSBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKK3N0
cnVjdCBOb2RlOworCisvLyBBIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mIHdoZXRoZXIg
dGhlIG5vZGUgd2lsbCBwZXJmb3JtIGFuIGVmZmVjdCB0aGF0IG1lYW5zIHRoYXQgd2UgY2FuIG5v
CisvLyBsb25nZXIgZXhpdCB0byB0aGlzIG5vZGUncyBleGl0IG9yaWdpbi4KKworYm9vbCBjbG9i
YmVyc0V4aXRTdGF0ZShHcmFwaCYsIE5vZGUqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDbG9iYmVyc0V4
aXRTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiAxODg3NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dp
dGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRG
R0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1
ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZH
VmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNz
LmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgpAQCAtMTAxLDggKzEwMywx
NCBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91
dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVh
bSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3Vy
cmVudE5vZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQorYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmln
aW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiYgcHJldmlvdXNO
b2RlUmVmLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCiB7CisgICAg
aWYgKCFjdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgCisgICAgTm9kZSogcHJldmlvdXNOb2RlID0gcHJldmlvdXNOb2RlUmVmOworICAgIHBy
ZXZpb3VzTm9kZVJlZiA9IGN1cnJlbnROb2RlOworCiAgICAgaWYgKCFwcmV2aW91c05vZGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTM0NSwxMiArMzUzLDE3IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiUjoiLCBzb3J0ZWRMaXN0RHVtcChyZWFkcy5kaXJlY3QoKSwgIiwiKSk7CiAgICAgaWYgKCF3
cml0ZXMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXOiIsIHNvcnRlZExp
c3REdW1wKHdyaXRlcy5kaXJlY3QoKSwgIiwiKSk7CisgICAgaWYgKG1heUV4aXQoKnRoaXMsIG5v
ZGUpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJNYXlFeGl0Iik7CisgICAgaWYgKGNsb2Ji
ZXJzRXhpdFN0YXRlKCp0aGlzLCBub2RlKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ2xv
YmJlcnNFeGl0Iik7CiAgICAgaWYgKG5vZGUtPm9yaWdpbi5pc1NldCgpKSB7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgImJjIyIsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KTsKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4uZm9y
RXhpdCkKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4u
Zm9yRXhpdCAmJiBub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKQogICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiZXhpdDogIiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpOwogICAgIH0KLSAg
ICAKKyAgICBpZiAoIW5vZGUtPm9yaWdpbi5leGl0T0spCisgICAgICAgIG91dC5wcmludChjb21t
YSwgIkV4aXRJbnZhbGlkIik7CiAgICAgb3V0LnByaW50KCIpIik7CiAKICAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSAmJiBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vz
c0RhdGEoKSkKQEAgLTQ1NSw3ICs0NjgsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIER1bXBDCiAgICAgICAgIG91dC5wcmludCgiICBBcmd1bWVudHM6ICIsIGxpc3REdW1w
KG1fYXJndW1lbnRzKSwgIlxuIik7CiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIAotICAgIE5v
ZGUqIGxhc3ROb2RlID0gMDsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IG51bGxwdHI7CiAgICAgZm9y
IChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQpA
QCAtNDk2LDcgKzUwOSw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cEMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlLCBibG9jay0+YXQo
aSksIGNvbnRleHQpOwogICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9jay0+YXQoaSksIGNv
bnRleHQpOwotICAgICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAgIH0K
ICAgICAgICAgb3V0LnByaW50KCIgIFN0YXRlczogIiwgYmxvY2stPmNmYUJyYW5jaERpcmVjdGlv
biwgIiwgIiwgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCk7CiAgICAgICAg
IGlmICghYmxvY2stPmNmYURpZEZpbmlzaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE4ODc3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBm
cm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJu
cyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4o
UHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9k
ZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0Kik7CisgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQ
cmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZSwgTm9k
ZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0Kik7CiAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUg
YWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50
MzIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMiwgUHJlZGljdGlvblBhc3MgcGFzcykK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJl
dmlzaW9uIDE4ODc3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVBy
b2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25l
ZCByZWNvdmVyeUluZGV4KQotICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX2NvZGVPcmln
aW5Gb3JFeGl0VGFyZ2V0LCBqaXQtPm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKQorICAgIDog
T1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNl
bWFudGljKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBtX3Zh
bHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQoMCkK
ICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQogICAgICwgbV9zdHJlYW1JbmRl
eChzdHJlYW1JbmRleCkKIHsKLSAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOworICAg
IERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQtPm1fY3VycmVudE5vZGUsIGppdC0+
bV9vcmlnaW4uZXhpdE9LKTsKIH0KIAogdm9pZCBPU1JFeGl0OjpzZXRQYXRjaGFibGVDb2RlT2Zm
c2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGNoZWNrKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24gMTg4NzcxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cAkocmV2aXNpb24gMTg4NzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDYgQEAgU3BlY3VsYXRp
dmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbAogICAgICwgbV9pbnRlcnByZXRlcihtX2pp
dC5ncmFwaCgpLCBtX3N0YXRlKQogICAgICwgbV9zdHJlYW0oJmppdC5qaXRDb2RlKCktPnZhcmlh
YmxlRXZlbnRTdHJlYW0pCiAgICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5qaXRDb2RlKCktPm1p
bmlmaWVkREZHKQotICAgICwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyhmYWxzZSkKIHsKIH0K
IApAQCAtMTk2LDcgKzE5NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hl
Y2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIEpJVENv
bXBpbGVyOjpKdW1wIGZ1enpKdW1wID0gZW1pdE9TUkV4aXRGdXp6Q2hlY2soKTsKICAgICBpZiAo
ZnV6ekp1bXAuaXNTZXQoKSkgewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QganVtcHNU
b0ZhaWw7CkBAIC0yMTIsNyArMjEwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRp
b25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAg
SklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0T1NSRXhpdEZ1enpDaGVjaygpOwogICAg
IGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBt
eUp1bXBzVG9GYWlsOwpAQCAtMjI4LDcgKzIyNSw2IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIg
U3BlY3VsYXRpdmVKSVQ6OnMKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJl
dHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1faml0Lmpp
dENvZGUoKS0+b3NyRXhpdC5zaXplKCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oKTsKICAg
ICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291
cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSks
IHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKQEAgLTIzNywxOSArMjMzLDE2IEBAIE9TUkV4aXRK
dW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIAogT1NSRXhpdEp1bXBQbGFjZWhvbGRl
ciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVl
U291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHJldHVybiBzcGVjdWxhdGlv
bkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVt
cFRvRmFpbCkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2Nh
bkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVz
ZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQog
ewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAg
ICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwg
anVtcHNUb0ZhaWwpOwogfQogCkBAIC0yNTcsNyArMjUwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IG1faml0LmppdENvZGUoKS0+YXBw
ZW5kU3BlY3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdElu
Zm8oanVtcFRvRmFpbCk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4
aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCByZWNvdmVyeUluZGV4
KSk7CkBAIC0yNjUsNyArMjU3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25D
aGVjayhFeAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNv
dmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4
aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5u
b2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIApAQCAtMjczLDcgKzI2NCw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kKIHsKICAgICBpZiAoIW1fY29t
cGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9jYW5FeGl0KTsKICAgICBP
U1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9qaXQuYXBwZW5kRXhpdEluZm8oSklUQ29t
cGlsZXI6Okp1bXBMaXN0KCkpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChP
U1JFeGl0KAogICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSlNWYWx1ZVNvdXJjZSgp
LApAQCAtMjg2LDcgKzI3Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRp
b25Qb2kKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7
Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlLCBtX2ppdC5qdW1wKCkpOwpAQCAtMjk3LDcgKzI4
Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKIAogdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLm5vZGUoKSk7CiB9
CiAKQEAgLTE0NjcsOSArMTQ1NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJy
ZW50QmxvY2sKICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCiAgICAg
ICAgICAgICAgICAgZm9ybWF0KSk7CiAgICAgfQotICAgIAotICAgIG1fY29kZU9yaWdpbkZvckV4
aXRUYXJnZXQgPSBDb2RlT3JpZ2luKCk7Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUg
PSBDb2RlT3JpZ2luKCk7CisKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKICAgICAKICAg
ICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBtX2Jsb2NrLT5zaXpl
KCk7ICsrbV9pbmRleEluQmxvY2spIHsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG1fYmxvY2st
PmF0KG1faW5kZXhJbkJsb2NrKTsKQEAgLTE0ODEsMTUgKzE0NjgsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAotICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQotICAgICAgICAgICAgbV9jYW5FeGl0
ID0gdHJ1ZTsgLy8gRXNzZW50aWFsbHkgZGlzYWJsZSB0aGUgYXNzZXJ0aW9ucy4KLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1
cnJlbnROb2RlKTsKLSAgICAgICAgCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRp
bmcoKTsKICAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAg
bV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0
OwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fY3VycmVudE5vZGUtPm9y
aWdpbi5zZW1hbnRpYzsKKyAgICAgICAgbV9vcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5vcmlnaW47
CiAgICAgICAgIG1fbGFzdEdlbmVyYXRlZE5vZGUgPSBtX2N1cnJlbnROb2RlLT5vcCgpOwogICAg
ICAgICAKICAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwpA
QCAtMTUzNiw5ICsxNTE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRC
bG9jawogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKIHsKICAgICBB
U1NFUlQoIW1fY3VycmVudE5vZGUpOwotICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSB0
cnVlOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKDApOwotICAg
IG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigwKTsKKyAgICBtX29yaWdp
biA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CiAKICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7
ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tp
XTsKQEAgLTE2MDEsNyArMTU4MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1l
bnRUeXBlcygKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQotICAgIG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgPSBmYWxzZTsKKworICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwogfQogCiBi
b29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4ODc3MSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjQzNSw3ICsyNDM1LDYgQEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAg
ICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBOb2RlVHlwZSBtX2xhc3RHZW5lcmF0ZWROb2Rl
OwotICAgIGJvb2wgbV9jYW5FeGl0OwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAg
IC8vIFZpcnR1YWwgYW5kIHBoeXNpY2FsIHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVy
YXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0aW9uSW5mbzsKQEAgLTI0NTYsOCArMjQ1NSw3IEBAIHB1
YmxpYzoKICAgICB9OwogICAgIFZlY3RvcjxCcmFuY2hSZWNvcmQsIDg+IG1fYnJhbmNoZXM7CiAK
LSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7Ci0gICAgQ29kZU9yaWdp
biBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwog
ICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgQWJzdHJhY3RJbnRl
cnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9pbnRlcnByZXRlcjsKQEAgLTI0NjUsOCAr
MjQ2Myw2IEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKICAg
ICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVkR3JhcGg7CiAgICAgCi0gICAgYm9vbCBtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzOwotICAgIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2xv
d1BhdGhHZW5lcmF0b3I+LCA4PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsKICAgICBWZWN0b3I8U2ls
ZW50UmVnaXN0ZXJTYXZlUGxhbj4gbV9wbGFuczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTg4NzcxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhK
SVRUeXBlLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJE
RkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CkBAIC0xODUsMTMgKzE4NiwyOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlzU2V0KCkgPT0gbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbWF5RXhpdChtX2dyYXBoLCBub2RlKSB8fCBub2RlLT5v
cmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICEoIW5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIShtYXlFeGl0KG1fZ3JhcGgsIG5v
ZGUpICYmICFub2RlLT5vcmlnaW4uZXhpdE9LKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSkg
eworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUgPSBibG9jay0+YXQoaSAt
IDEpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIChub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICFjbG9iYmVyc0V4aXRTdGF0ZSht
X2dyYXBoLCBwcmV2aW91c05vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbm9kZS0+
b3JpZ2luLmV4aXRPSworICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+b3JpZ2luLmZv
ckV4aXQgIT0gcHJldmlvdXNOb2RlLT5vcmlnaW4uZm9yRXhpdCk7CisgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgISghcHJldmlvdXNOb2RlLT5vcmlnaW4uZXhpdE9LICYmIG5vZGUtPm9y
aWdpbi5leGl0T0spCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBub2RlLT5vcmlnaW4uZm9y
RXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9k
ZS0+aGFzU3RydWN0dXJlKCkgfHwgISFub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQoKSB8fCBub2RlLT5jZWxs
T3BlcmFuZCgpLT52YWx1ZSgpLmlzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgo
bm9kZSksICFub2RlLT5oYXNDZWxsT3BlcmFuZCgpIHx8ICEhbm9kZS0+Y2VsbE9wZXJhbmQoKS0+
dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpIHsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmNoaWxkMygpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODg3NzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpKSkpOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQg
PSBDb2RlT3JpZ2luKDApOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENv
ZGVPcmlnaW4oMCk7CiAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fb3JpZ2lu
ID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykg
ewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CiAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpOwpAQCAtMzkzLDggKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAg
ICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9ub2RlLT5vcmlnaW4uZm9yRXhpdDsK
KyAgICAgICAgbV9vcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dl
cmluZyAiLCBtX25vZGUsICJcbiIpOwpAQCAtNDczMywxMCArNDczMSwxMiBAQCBwcml2YXRlOgog
ICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIs
IGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIFVuY291bnRhYmxl
SW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUoKSwKLSAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlLAorICAgICAgICAgICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmln
aW4uc2VtYW50aWMsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
bnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhp
dC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKQEAgLTgwNzQsNiArODA3NCw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5
KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUgcmVjb3Zlcmll
czogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7CiAgICAgICAgIH0K
KworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChkb09TUkV4aXRGdXp6aW5nKCkpIHsKICAgICAgICAgICAg
IExWYWx1ZSBudW1iZXJPZkZ1enpDaGVja3MgPSBtX291dC5hZGQoCkBAIC04MDk4LDcgKzgxMDAs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCks
IG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFsdWUpLAotICAg
ICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUsCisgICAgICAgICAgICBtX29yaWdpbi5mb3JFeGl0LCBtX29yaWdpbi5zZW1hbnRpYywK
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRz
KCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2Fs
cygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JF
eGl0Q29tcGlsYXRpb25JbmZvKCkpOwpAQCAtODU5Myw5ICs4NTk1LDggQEAgcHJpdmF0ZToKICAg
ICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKICAgICBCYXNpY0Jsb2NrKiBtX25leHRIaWdoQmxv
Y2s7CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0TG93QmxvY2s7Ci0gICAgCi0gICAgQ29kZU9yaWdp
biBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0OwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGU7CisKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIHVuc2lnbmVk
IG1fbm9kZUluZGV4OwogICAgIE5vZGUqIG1fbm9kZTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259666</attachid>
            <date>2015-08-21 15:05:37 -0700</date>
            <delta_ts>2015-08-22 11:55:43 -0700</delta_ts>
            <desc>it passed a test</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39284</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg3NzcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw4IEBACiAJCTBGM0IzQTJDMTU0NzUw
MDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdD
bG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFB
QjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjEwNCw2ICsyMTA2LDggQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
M0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7
IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJl
UG9zdE51bWJlcmluZy5oOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU1Miw3ICszNTU2LDcgQEAKIAkJ
RTMzRjUwN0YxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxQcm9taXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzM0Y1MDgyMUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNGNTA4MzFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzM0Y1MDg2MUI4NDQ5RUYw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5o
OyBwYXRoID0gSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJ1Y3RBYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUxMTAsNiArNTExNCw4IEBACiAJCQkJQTc3QTQyMzkxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Nsb2JiZXJpemUuaCAqLywKIAkJCQlBNzdBNDIzQTE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlclNldC5jcHAgKi8sCiAJCQkJQTc3QTQyM0IxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuaCAqLywKKwkJCQkwRjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwICovLAorCQkJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovLAogCQkJCTBGMDQzOTZCMUIwM0RDMEIwMDk1OThC
NyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmNwcCAqLywKIAkJCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovLAogCQkJCTBGQjRCNTFBMTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdDb21tb24uY3BwICovLApAQCAtNjEzOCw2ICs2MTQ0LDcgQEAKIAkJCQkw
RkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdp
c3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0MxRjFCMUI4NjhFNzkwMEFC
QjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQy
NDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93
UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkQxOEE2MDA3MDAwMUEy
N0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MzcxLDYgKzczNzgsNyBA
QAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0MxRjFBMUI4
NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3NzUwNTYwMDgzQjY4NyAvKiBE
RkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4ODc3NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gLSBTdGFjayB3
aXRoIGEgVE9QIHBheWxvYWQgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZAogLy8gLSBTdGFj
ayB3aXRoIGEgbm9uLVRPUCBwYXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgU3RhY2sgd2l0
aCBhIFRPUCBwYXlsb2FkLgogLy8gLSBIZWFwIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQu
CisvLyAtIFNpZGVTdGF0ZSBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgogLy8gLSBBbnkg
b3RoZXIga2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBIZWFw
LgogLy8gLSBBbnkgb3RoZXIga2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0
IHN1YnR5cGUgb2YgdGhlIHNhbWUga2luZCB3aXRoIGEgVE9QIHBheWxvYWQuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxODg3NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVC
bG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRT
dGF0dXMuaCIKQEAgLTM2MCw2ICszNjEsOSBAQCBwcml2YXRlOgogICAgIH07CiAgICAgTm9kZSog
c2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnlt
b3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgorICAgICAgICBtX2V4
aXRPSyA9IGZhbHNlOworCiAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJh
bmQub2Zmc2V0KCkpLCB2YWx1ZSk7CiAKICAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQo
Y3VycmVudENvZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwpAQCAtMzc0LDggKzM3OCwxNCBA
QCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7
ICsraSkKKyAgICAgICAgLy8gV2UgcGxheSBoYWNrcyB3aXRoIG1fZXhpdE9LIGhlcmUuIFdlIGtu
b3cgdGhhdCB0aGUgU2V0TG9jYWxzIHdlIGFyZSBlbWl0dGluZyBhcmUgYWxyZWFkeQorICAgICAg
ICAvLyByZWNvcmRlZCBpbiBPU1IgZXhpdCBzdGF0ZSwgc28gdGhleSBhcmVuJ3QgcmVhbCBlZmZl
Y3RzLiBTbywgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGhhdmUgYW55CisgICAgICAgIC8vIGVmZmVj
dCBvbiBtX2V4aXRPSy4KKyAgICAgICAgYm9vbCBleGl0T0tCZWZvcmUgPSBtX2V4aXRPSzsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAg
ICAgICAgICBtX2V4aXRPSyA9IGV4aXRPS0JlZm9yZTsKKyAgICAgICAgfQogICAgICAgICBtX3Nl
dExvY2FsUXVldWUucmVzaXplKDApOwogICAgIH0KIApAQCAtNjUxLDE1ICs2NjEsMTcgQEAgcHJp
dmF0ZToKIAogICAgIE5vZGVPcmlnaW4gY3VycmVudE5vZGVPcmlnaW4oKQogICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZXQgdGhlIGZvckV4aXQgb3JpZ2luIG9ubHkgb24gdGhv
c2Ugbm9kZXMgdGhhdCBjYW4gZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTIwNAogICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljOwor
ICAgICAgICBDb2RlT3JpZ2luIGZvckV4aXQ7CisKICAgICAgICAgaWYgKG1fY3VycmVudFNlbWFu
dGljT3JpZ2luLmlzU2V0KCkpCiAgICAgICAgICAgICBzZW1hbnRpYyA9IG1fY3VycmVudFNlbWFu
dGljT3JpZ2luOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZW1hbnRpYyA9IGN1cnJlbnRD
b2RlT3JpZ2luKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRp
YywgY3VycmVudENvZGVPcmlnaW4oKSwgdHJ1ZSk7CisKKyAgICAgICAgZm9yRXhpdCA9IGN1cnJl
bnRDb2RlT3JpZ2luKCk7CisKKyAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGZv
ckV4aXQsIG1fZXhpdE9LKTsKICAgICB9CiAgICAgCiAgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0
YSh1bnNpZ25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCkBAIC02NzcsNiArNjg5LDE4IEBA
IHByaXZhdGU6CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5n
KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIGFwcGVuZGVkICIsIG5vZGUsICIgIiwg
R3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSwgIlxuIik7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmQobm9kZSk7CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAgICBtX2dyYXBo
LCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFj
dEhlYXAmIGhlYXApIHsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZXMgdG8gU2lkZVN0YXRlIGFy
ZSBub3Qgb2JzZXJ2YWJsZS4KKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5pc1N1YnR5cGVPZihT
aWRlU3RhdGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICAvLyBXZSBhc3N1bWUgYWxsIG90aGVyIHdyaXRlcyBhcmUgb2JzZXJ2YWJsZSwgYW5kIHNvIGlm
IHdlIHRyaWVkIHRvIGV4aXQgYWZ0ZXIgdGhlbQorICAgICAgICAgICAgICAgIC8vIHdpdGggdGhl
IHNhbWUgb3JpZ2luIHRoZW4gd2UnZCBjYXVzZSB0aGF0IGVmZmVjdCB0byByZXBlYXQuCisgICAg
ICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIApA
QCAtOTAwLDYgKzkyNCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7
CiAgICAgLy8gVGhlIHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2RlIGlmIGRpZmZl
cmVudCBmcm9tIHRoZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9jdXJyZW50U2Vt
YW50aWNPcmlnaW47CisgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0IHJpZ2h0IG5v
dy4KKyAgICBib29sIG1fZXhpdE9LIHsgZmFsc2UgfTsKIAogICAgIEZyb3plblZhbHVlKiBtX2Nv
bnN0YW50VW5kZWZpbmVkOwogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKQEAgLTEw
NTMsNiArMTA3OSw3IEBAIHByaXZhdGU6CiAKICNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkgXAog
ICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKKyAgICBtX2V4aXRP
SyA9IGZhbHNlOyBcCiAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwogCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEzNTYsNiArMTM4Myw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBjbGVhckNhY2hlcygpOyAvLyBS
ZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIgY29kZS4KICAg
ICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1fZXhpdE9LID0gZmFsc2U7
CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2lj
IGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0YWNr
RW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RCbG9jaygpKSB7CkBAIC0y
OTAxLDEyICsyOTI5LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJh
c2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwog
ICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFj
dHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVl
IHdlIHNldCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLmJs
b2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBTZXRB
cmd1bWVudCBub2Rlcy4gVGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRvcCBvZiBh
biBvcF9lbnRlciBzbworICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgorICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC0yOTIyLDYgKzI5NTMs
MTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIAog
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0aGF0IHdl
IGNhbiBleGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAg
ICAgIAogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAgICAgICAg
Ly8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R05vZGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpCit7CisgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMgd2hvc2UgZWZmZWN0IG9u
IHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hhdCB0aGV5CisgICAgLy8g
bm9ybWFsbHkgY2xvYmJlci4KKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIE1v
dkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgUHV0SGludDoKKyAgICBjYXNl
IEtpbGxTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMgYWxsIHdyaXRlIHRvIHRoZSBleGl0
IHN0YXRlLCBzbyBvYnZpb3VzbHksIHRoZXkgY2xvYmJlciBpdC4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBjYXNlIFNldExvY2FsOgorICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIC8v
IFRoZXNlIG5vZGVzIHdyaXRlIHRvIHRoZSBzdGFjaywgYnV0IHRoZXkgbWF5IG9ubHkgZG8gc28g
YWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGhhZCBhIE1vdkhpbnQKKyAgICAgICAgLy8gZm9yIHRoZSBl
eGFjdCBzYW1lIHZhbHVlIGFuZCB0aGUgc2FtZSBzdGFjayBsb2NhdGlvbi4gSGVuY2UsIHRoZXkg
aGF2ZSBubyBmdXJ0aGVyIGVmZmVjdCBvbgorICAgICAgICAvLyBleGl0IHN0YXRlLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGb3IgYWxsIG90aGVy
IG5vZGVzLCB3ZSBqdXN0IGNhcmUgYWJvdXQgd2hldGhlciB0aGV5IHdyaXRlIHRvIHNvbWV0aGlu
ZyBvdGhlciB0aGFuIFNpZGVTdGF0ZS4KKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgY2xvYmJlcml6ZSgKKyAgICAgICAgICAgIGdyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6
ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXApIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgc3VjaCBhIHRoaW5nIGFzIGEgc3RyaWN0
IHN1YnR5cGUgb2YgU2lkZVN0YXRlLiBUaGF0J3Mgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgICAg
ICAvLyB1cyB0byB1c2UgYSBmYXN0ICE9IGNoZWNrLCBiZWxvdy4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoIWhlYXAuaXNTdHJpY3RTdWJ0eXBlT2YoU2lkZVN0YXRlKSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaGVhcCAhPSBTaWRlU3RhdGUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKyNkZWZpbmUgREZH
Q2xvYmJlcnNFeGl0U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKworLy8g
QSBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbiBvZiB3aGV0aGVyIHRoZSBub2RlIHdpbGwgcGVy
Zm9ybSBhbiBlZmZlY3QgdGhhdCBtZWFucyB0aGF0IHdlIGNhbiBubworLy8gbG9uZ2VyIGV4aXQg
dG8gdGhpcyBub2RlJ3MgZXhpdCBvcmlnaW4uCisKK2Jvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3Jh
cGgmLCBOb2RlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg4Nzc3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2lu
Y2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisj
aW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CisjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKQEAgLTEwMSw4ICsxMDMsMTQgQEAgc3RhdGljIHZvaWQg
cHJpbnRXaGl0ZVNwYWNlKFByaW50U3RyZWFtJgogICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0K
IAotYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hh
ciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29u
dGV4dCogY29udGV4dCkKK2Jvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZVJlZiwgTm9kZSogY3Vy
cmVudE5vZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQogeworICAgIGlmICghY3VycmVudE5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIE5vZGUq
IHByZXZpb3VzTm9kZSA9IHByZXZpb3VzTm9kZVJlZjsKKyAgICBwcmV2aW91c05vZGVSZWYgPSBj
dXJyZW50Tm9kZTsKKwogICAgIGlmICghcHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC0zNDUsMTIgKzM1MywxNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlz
dER1bXAocmVhZHMuZGlyZWN0KCksICIsIikpOwogICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGly
ZWN0KCksICIsIikpOworICAgIGlmIChtYXlFeGl0KCp0aGlzLCBub2RlKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiTWF5RXhpdCIpOworICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSgqdGhp
cywgbm9kZSkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkNsb2JiZXJzRXhpdCIpOwogICAg
IGlmIChub2RlLT5vcmlnaW4uaXNTZXQoKSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJi
YyMiLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChu
b2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQpCisgICAgICAgIGlm
IChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+
b3JpZ2luLmZvckV4aXQuaXNTZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImV4
aXQ6ICIsIG5vZGUtPm9yaWdpbi5mb3JFeGl0KTsKICAgICB9Ci0gICAgCisgICAgaWYgKCFub2Rl
LT5vcmlnaW4uZXhpdE9LKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJFeGl0SW52YWxpZCIp
OwogICAgIG91dC5wcmludCgiKSIpOwogCiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgqdGhpcykgJiYgbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCkpCkBAIC00NTUs
NyArNDY4LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAg
ICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzOiAiLCBsaXN0RHVtcChtX2FyZ3VtZW50cyksICJc
biIpOwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICAKLSAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7
CisgICAgTm9kZSogbGFzdE5vZGUgPSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBi
IDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTQ5Niw3ICs1MDksNiBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBkdW1w
Q29kZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpLCBjb250ZXh0KTsKICAg
ICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpLCBjb250ZXh0KTsKLSAgICAgICAg
ICAgIGxhc3ROb2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmlu
dCgiICBTdGF0ZXM6ICIsIGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24sICIsICIsIGJsb2NrLT5j
ZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwpOwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFE
aWRGaW5pc2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lv
biAxODg3NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBEdW1wIHRoZSBj
b2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYgZnJvbSB0aGUgY29kZSBvcmln
aW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGlu
ZyB3YXMgcHJpbnRlZC4KLSAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29u
c3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBE
dW1wQ29udGV4dCopOworICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25z
dCBjaGFyKiBwcmVmaXgsIE5vZGUqJiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBE
dW1wQ29udGV4dCopOwogCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9k
ZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hv
dWxkU3BlY3VsYXRlSW50MzIsIFByZWRpY3Rpb25QYXNzIHBhc3MpCiAgICAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lvbiAxODg3NzcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTYsNiArMTE2LDcgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9k
ZSkKICAgICBjYXNlIERvdWJsZVJlcDoKICAgICBjYXNlIEludDUyUmVwOgogICAgIGNhc2UgVmFs
dWVSZXA6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIAogICAgIGRlZmF1bHQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVPcmlnaW4uaAkocmV2aXNpb24gMTg4Nzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDEzIEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZH
Q2xvYmJlcnNFeGl0U3RhdGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOworCiBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAg
Tm9kZU9yaWdpbigpIHsgfQogICAgIApAQCAtNDgsNyArNTIsNyBAQCBzdHJ1Y3QgTm9kZU9yaWdp
biB7CiAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc1NldCgpOwogICAgIH0KICAgICAKLSAgICBO
b2RlT3JpZ2luIHdpdGhTZW1hbnRpYyhDb2RlT3JpZ2luIHNlbWFudGljKQorICAgIE5vZGVPcmln
aW4gd2l0aFNlbWFudGljKENvZGVPcmlnaW4gc2VtYW50aWMpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoIWlzU2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gTm9kZU9yaWdpbigpOwpAQCAtNTgs
NiArNjIsMTQgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgICAgICAgICAgcmVzdWx0LnNlbWFu
dGljID0gc2VtYW50aWM7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgTm9k
ZU9yaWdpbiBmb3JJbnNlcnRpbmdBZnRlcihHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpIGNvbnN0
CisgICAgeworICAgICAgICBOb2RlT3JpZ2luIHJlc3VsdCA9ICp0aGlzOworICAgICAgICBpZiAo
cmVzdWx0LmV4aXRPSyAmJiBjbG9iYmVyc0V4aXRTdGF0ZShncmFwaCwgbm9kZSkpCisgICAgICAg
ICAgICByZXN1bHQuZXhpdE9LID0gZmFsc2U7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQogICAgIAogICAgIC8vIFVzZWQgZm9yIGRldGVybWluaW5nIHdoYXQgYnl0ZWNvZGUgdGhpcyBj
YW1lIGZyb20uIFRoaXMgaXMgaW1wb3J0YW50IGZvcgogICAgIC8vIGRlYnVnZ2luZywgZXhjZXB0
aW9ucywgYW5kIGV2ZW4gYmFzaWMgZXhlY3V0aW9uIHNlbWFudGljcy4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg3NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODksNyArODksOSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGV4ZWN1dGlvbkNvdW50IHRvIHVzZSBi
ZXN0IGp1ZGdlbWVudCAtIGJ1dCB0aGF0IHNlZW1zIHVubmVjZXNzYXJ5IHNpbmNlIHdlIGtub3cg
Zm9yCiAgICAgICAgIC8vIHN1cmUgd2hhdCB0aGUgZXhlY3V0aW9uQ291bnQgc2hvdWxkIGJlIGlu
IHRoaXMgY2FzZS4KICAgICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNldC5p
bnNlcnQoMCwgMSk7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gdGFyZ2V0LT5hdCgwKS0+
b3JpZ2luOworCisgICAgICAgIC8vIFdlJ2QgcmVhbGx5IGxpa2UgdG8gdXNlIGFuIHVuc2V0IG9y
aWdpbiwgYnV0IFRocmVhZGVkQ1BTIHdvbid0IGFsbG93IHRoYXQuCisgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCBmYWxz
ZSk7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Tm9kZSo+IGxvY2FscyhiYXNlbGluZS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnMpOwogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwg
YmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CkBAIC0xMTcsNiArMTE5
LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBPcEluZm8ob2xkTm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCkpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRd
ID0gbm9kZTsKICAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyB1c2UgdGhlIG9yaWdpbiBvZiB0
aGUgdGFyZ2V0LCBzaW5jZSBpdCdzIG5vdCBPSyB0byBleGl0LCBhbmQgd2Ugd2lsbCBwcm9iYWJs
eSBob2lzdAorICAgICAgICAvLyB0eXBlIGNoZWNrcyB0byBoZXJlLgorICAgICAgICBvcmlnaW4g
PSB0YXJnZXQtPmF0KDApLT5vcmlnaW47CiAgICAgICAgIAogICAgICAgICBmb3IgKGludCBsb2Nh
bCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7
CiAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c0hlYWQgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVh
ZC5sb2NhbChsb2NhbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHJldmlzaW9uIDE4ODc3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBAQAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4
LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQotICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5t
X2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBqaXQtPm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxl
KQorICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1f
b3JpZ2luLnNlbWFudGljKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCiAg
ICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNoYWJsZUNvZGVP
ZmZzZXQoMCkKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQogICAgICwgbV9z
dHJlYW1JbmRleChzdHJlYW1JbmRleCkKIHsKLSAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0
KCkpOworICAgIERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQtPm1fY3VycmVudE5v
ZGUsIGppdC0+bV9vcmlnaW4uZXhpdE9LKTsKIH0KIAogdm9pZCBPU1JFeGl0OjpzZXRQYXRjaGFi
bGVDb2RlT2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGNoZWNrKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24gMTg4
Nzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg3NzcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2MCwxMCArMTYwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRo
YXQgd2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIHJlZiBj
b3VudC4KICAgICAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOworCisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGxhc3RFeGl0aW5nTm9kZSA9IGJsb2NrLT5hdChsYXN0
RXhpdGluZ0luZGV4KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
RXhpdGluZ0luZGV4ICsgMSwgU3BlY05vbmUsIFBoYW50b20sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCktPm9yaWdpbiwga2lsbGVkTm9kZS0+ZGVm
YXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXhpdGluZ05vZGUtPm9y
aWdpbi5mb3JJbnNlcnRpbmdBZnRlcihtX2dyYXBoLCBsYXN0RXhpdGluZ05vZGUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+ZGVmYXVsdEVkZ2UoKSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg3NzcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNyArNjEsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29t
cGlsCiAgICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUpCiAgICAgLCBt
X3N0cmVhbSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKICAgICAsIG1fbWlu
aWZpZWRHcmFwaCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCi0gICAgLCBtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzKGZhbHNlKQogewogfQogCkBAIC0xOTYsNyArMTk1LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0
T1NSRXhpdEZ1enpDaGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFpbDsKQEAgLTIxMiw3ICsyMTAsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBmdXp6SnVtcCA9
IGVtaXRPU1JFeGl0RnV6ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlzU2V0KCkpIHsKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IG15SnVtcHNUb0ZhaWw7CkBAIC0yMjgsNyArMjI1
LDYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIo
KTsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0LnNpemUoKTsKICAg
ICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpA
QCAtMjM3LDE5ICsyMzMsMTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJ
VDo6cwogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBu
b2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwg
bm9kZVVzZS5ub2RlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2Rl
VXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVj
ayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAgLTI1Nyw3
ICsyNTAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCByZWNvdmVy
eUluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292
ZXJ5KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5q
aXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1f
c3RyZWFtLT5zaXplKCksIHJlY292ZXJ5SW5kZXgpKTsKQEAgLTI2NSw3ICsyNTcsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVl
U291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNv
bnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhr
aW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3Zlcnkp
OwogfQogCkBAIC0yNzMsNyArMjY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFs
aWRhdGlvblBvaQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChtX2NhbkV4aXQpOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8g
PSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9q
aXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVuY291bnRhYmxl
SW52YWxpZGF0aW9uLCBKU1ZhbHVlU291cmNlKCksCkBAIC0yODYsNyArMjc2LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVn
cyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgcmV0dXJuOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGUs
IG1faml0Lmp1bXAoKSk7CkBAIC0yOTcsNyArMjg2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dGVybWluYXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywg
RWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY2FuRXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNW
YWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQ2Nyw5ICsxNDU1LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwKICAgICAgICAgICAgICAgICBmb3JtYXQpKTsKICAgICB9
Ci0gICAgCi0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oKTsKLSAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oKTsKKworICAgIG1fb3Jp
Z2luID0gTm9kZU9yaWdpbigpOwogICAgIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBt
X2luZGV4SW5CbG9jayA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAg
ICAgICBtX2N1cnJlbnROb2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2spOwpAQCAtMTQ4
MSwxNSArMTQ2OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChBU1NFUlRfRElT
QUJMRUQpCi0gICAgICAgICAgICBtX2NhbkV4aXQgPSB0cnVlOyAvLyBFc3NlbnRpYWxseSBkaXNh
YmxlIHRoZSBhc3NlcnRpb25zLgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NhbkV4aXQg
PSBtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpOwotICAgICAgICAKICAgICAg
ICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAgICAgICBtX2ppdC5zZXRGb3JO
b2RlKG1fY3VycmVudE5vZGUpOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0g
bV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQ7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBtX29y
aWdpbiA9IG1fY3VycmVudE5vZGUtPm9yaWdpbjsKICAgICAgICAgbV9sYXN0R2VuZXJhdGVkTm9k
ZSA9IG1fY3VycmVudE5vZGUtPm9wKCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobV9jdXJy
ZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CkBAIC0xNTM2LDkgKzE1MTcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
aGVja0FyZ3VtZW50VHlwZXMoKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7Ci0gICAg
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IHRydWU7Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhp
dFRhcmdldCA9IENvZGVPcmlnaW4oMCk7Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUg
PSBDb2RlT3JpZ2luKDApOworICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDAp
LCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQu
Y29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldOwpAQCAtMTYwMSw3ICsxNTgwLDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICB9CiAjZW5kaWYK
ICAgICB9Ci0gICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOworCisgICAgbV9v
cmlnaW4gPSBOb2RlT3JpZ2luKCk7CiB9CiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTg4Nzc3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDM1LDcgKzI0MzUsNiBAQCBwdWJsaWM6
CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAg
IE5vZGVUeXBlIG1fbGFzdEdlbmVyYXRlZE5vZGU7Ci0gICAgYm9vbCBtX2NhbkV4aXQ7CiAgICAg
dW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5c2ljYWwgcmVn
aXN0ZXIgbWFwcy4KICAgICBWZWN0b3I8R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dlbmVyYXRpb25J
bmZvOwpAQCAtMjQ1Niw4ICsyNDU1LDcgQEAgcHVibGljOgogICAgIH07CiAgICAgVmVjdG9yPEJy
YW5jaFJlY29yZCwgOD4gbV9icmFuY2hlczsKIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2lu
Rm9yRXhpdFRhcmdldDsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxl
OworICAgIE5vZGVPcmlnaW4gbV9vcmlnaW47CiAgICAgCiAgICAgSW5QbGFjZUFic3RyYWN0U3Rh
dGUgbV9zdGF0ZTsKICAgICBBYnN0cmFjdEludGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRl
PiBtX2ludGVycHJldGVyOwpAQCAtMjQ2NSw4ICsyNDYzLDYgQEAgcHVibGljOgogICAgIFZhcmlh
YmxlRXZlbnRTdHJlYW0qIG1fc3RyZWFtOwogICAgIE1pbmlmaWVkR3JhcGgqIG1fbWluaWZpZWRH
cmFwaDsKICAgICAKLSAgICBib29sIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXM7Ci0gICAgCiAg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4sIDg+IG1fc2xvd1Bh
dGhHZW5lcmF0b3JzOwogICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBtX3BsYW5z
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAxODg3NzcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJERkdDbG9i
YmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE4NSwxMyArMTg2LDI4
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0g
YmxvY2stPmF0KGkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaXNTZXQoKSA9PSBub2RlLT5vcmlnaW4u
Zm9yRXhpdC5pc1NldCgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFtYXlF
eGl0KG1fZ3JhcGgsIG5vZGUpIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISghbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNT
ZXQoKSAmJiBub2RlLT5vcmlnaW4uZXhpdE9LKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUpLCAhKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgJiYgIW5vZGUtPm9yaWdpbi5leGl0T0sp
KTsKKworICAgICAgICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUq
IHByZXZpb3VzTm9kZSA9IGJsb2NrLT5hdChpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKAorICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIWNsb2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIHByZXZpb3VzTm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHx8ICFub2RlLT5vcmlnaW4uZXhpdE9LCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdp
bi5mb3JFeGl0KTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAg
ICAgICAgICAgICAobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAhKCFwcmV2aW91c05v
ZGUtPm9yaWdpbi5leGl0T0sgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICE9IHByZXZpb3VzTm9kZS0+b3JpZ2lu
LmZvckV4aXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNTdHJ1Y3R1cmUoKSB8fCAhIW5vZGUt
PnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5o
YXNDZWxsT3BlcmFuZCgpIHx8IG5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkuaXNDZWxsKCkp
OwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc0NlbGxPcGVyYW5k
KCkgfHwgISFub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAm
IE5vZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNoaWxk
MigpKQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+Y2hp
bGQzKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE4ODc3NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsOSArMjI3LDgg
QEAgcHVibGljOgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1l
bnQoaSkgPQogICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpT
VmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7Ci0gICAgICAgIG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigwKTsKICAgICAgICAgbV9ub2Rl
ID0gbnVsbHB0cjsKKyAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCks
IENvZGVPcmlnaW4oMCksIHRydWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxv
Y2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CkBAIC0zOTMsOCArMzkyLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9ub2RlID0gbV9oaWdoQmxv
Y2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJn
ZXQgPSBtX25vZGUtPm9yaWdpbi5mb3JFeGl0OworICAgICAgICBtX29yaWdpbiA9IG1fbm9kZS0+
b3JpZ2luOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQo
KSkKICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5nICIsIG1fbm9kZSwgIlxuIik7CkBAIC00
NzMzLDEwICs0NzMxLDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlv
biBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTogIiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOwor
CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0spOwog
ICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JF
eGl0KAogICAgICAgICAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZv
cm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSgpLAotICAgICAgICAgICAgbV9jb2Rl
T3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCisgICAgICAg
ICAgICBtX29yaWdpbi5mb3JFeGl0LCBtX29yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgIGF2
YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAg
IG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25J
bmZvKCkpOwpAQCAtODA3NCw2ICs4MDc0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICgh
bV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVyaWVzOiAiLCBsaXN0RHVtcChtX2F2YWlsYWJsZVJl
Y292ZXJpZXMpLCAiXG4iKTsKICAgICAgICAgfQorCisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0spOwogICAgICAgICAKICAgICAgICAgaWYgKGRvT1NS
RXhpdEZ1enppbmcoKSkgewogICAgICAgICAgICAgTFZhbHVlIG51bWJlck9mRnV6ekNoZWNrcyA9
IG1fb3V0LmFkZCgKQEAgLTgwOTgsNyArODEwMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAg
ICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAg
ICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCi0gICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0
VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKKyAgICAgICAgICAgIG1fb3JpZ2lu
LmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGljLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5m
aW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CkBAIC04
NTkzLDkgKzg1OTUsOCBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwog
ICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hCbG9jazsKICAgICBMQmFzaWNCbG9jayBtX25leHRM
b3dCbG9jazsKLSAgICAKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7
Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKworICAgIE5vZGVP
cmlnaW4gbV9vcmlnaW47CiAgICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7CiAgICAgTm9kZSogbV9u
b2RlOwogICAgIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259724</attachid>
            <date>2015-08-22 11:55:43 -0700</date>
            <delta_ts>2015-08-24 19:50:10 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44299</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4MjUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw4IEBACiAJCTBGM0IzQTJDMTU0NzUw
MDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdD
bG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFB
QjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdG
IC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjEwNiw2ICsyMTA4LDggQEAKIAkJ
MEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7IHBhdGggPSBkZmcvREZHVmFsaWRhdGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUx
OUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
M0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7
IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJl
cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0
TnVtYmVyaW5nLmNwcDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1By
ZVBvc3ROdW1iZXJpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJl
UG9zdE51bWJlcmluZy5oOyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVy
eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU1Niw3ICszNTYwLDcgQEAKIAkJ
RTMzRjUwN0YxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxQcm9taXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUUzM0Y1MDgyMUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFs
UHJvbWlzZURlZmVycmVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlRGVmZXJyZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzNGNTA4MzFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJvbWlzZURl
ZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUUzM0Y1MDg2MUI4NDQ5RUYw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5o
OyBwYXRoID0gSlNJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5sdXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJRTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlQ29uc3RydWN0b3IubHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzM0Y1MDg4MUI4NDRBMUEwMDQxMzg1NiAvKiBJbnRlcm5hbFByb21pc2VDb25z
dHJ1Y3Rvci5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9IEludGVy
bmFsUHJvbWlzZUNvbnN0cnVjdG9yLmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJ1Y3RBYmlsaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzNUUwMzVEMUI3QUI0M0UwMDczQUQyQSAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb25PYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTUxMTcsNiArNTEyMSw4IEBACiAJCQkJQTc3QTQyMzkxN0EwQkJGRDAwQThE
QjgxIC8qIERGR0Nsb2JiZXJpemUuaCAqLywKIAkJCQlBNzdBNDIzQTE3QTBCQkZEMDBBOERCODEg
LyogREZHQ2xvYmJlclNldC5jcHAgKi8sCiAJCQkJQTc3QTQyM0IxN0EwQkJGRDAwQThEQjgxIC8q
IERGR0Nsb2JiZXJTZXQuaCAqLywKKwkJCQkwRjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwICovLAorCQkJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovLAogCQkJCTBGMDQzOTZCMUIwM0RDMEIwMDk1OThC
NyAvKiBERkdDb21iaW5lZExpdmVuZXNzLmNwcCAqLywKIAkJCQkwRjA0Mzk2QzFCMDNEQzBCMDA5
NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5oICovLAogCQkJCTBGQjRCNTFBMTZCNjI3NzIw
MDNGNjk2QiAvKiBERkdDb21tb24uY3BwICovLApAQCAtNjE0NSw2ICs2MTUxLDcgQEAKIAkJCQkw
RkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdp
c3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAv
KiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGM0MxRjFCMUI4NjhFNzkwMEFC
QjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQy
NDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5lU3RyaW5nR2V0QnlWYWxTbG93
UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkQxOEE2MDA3MDAwMUEy
N0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mzc4LDYgKzczODUsNyBA
QAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1Z2dlckNhbGxGcmFtZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAyMEJERjcgLyogRGVmZXJHQy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGM0MxRjFBMUI4
NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3NzUwNTYwMDgzQjY4NyAvKiBE
RkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHJldmlzaW9uIDE4ODgyNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5
LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogLy8gLSBTdGFjayB3
aXRoIGEgVE9QIHBheWxvYWQgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZAogLy8gLSBTdGFj
ayB3aXRoIGEgbm9uLVRPUCBwYXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgU3RhY2sgd2l0
aCBhIFRPUCBwYXlsb2FkLgogLy8gLSBIZWFwIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQu
CisvLyAtIFNpZGVTdGF0ZSBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgogLy8gLSBBbnkg
b3RoZXIga2luZCB3aXRoIFRPUCBwYXlsb2FkIGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBIZWFw
LgogLy8gLSBBbnkgb3RoZXIga2luZCB3aXRoIG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0
IHN1YnR5cGUgb2YgdGhlIHNhbWUga2luZCB3aXRoIGEgVE9QIHBheWxvYWQuCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxODg4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVC
bG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAi
REZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRT
dGF0dXMuaCIKQEAgLTM2MCw2ICszNjEsOSBAQCBwcml2YXRlOgogICAgIH07CiAgICAgTm9kZSog
c2V0RGlyZWN0KFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kLCBOb2RlKiB2YWx1ZSwgU2V0TW9kZSBz
ZXRNb2RlID0gTm9ybWFsU2V0KQogICAgIHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBhbnlt
b3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgorICAgICAgICBtX2V4
aXRPSyA9IGZhbHNlOworCiAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZvKG9wZXJh
bmQub2Zmc2V0KCkpLCB2YWx1ZSk7CiAKICAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQo
Y3VycmVudENvZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwpAQCAtMzc0LDggKzM3OCwxNCBA
QCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7
ICsraSkKKyAgICAgICAgLy8gV2UgcGxheSBoYWNrcyB3aXRoIG1fZXhpdE9LIGhlcmUuIFdlIGtu
b3cgdGhhdCB0aGUgU2V0TG9jYWxzIHdlIGFyZSBlbWl0dGluZyBhcmUgYWxyZWFkeQorICAgICAg
ICAvLyByZWNvcmRlZCBpbiBPU1IgZXhpdCBzdGF0ZSwgc28gdGhleSBhcmVuJ3QgcmVhbCBlZmZl
Y3RzLiBTbywgd2UgZG9uJ3Qgd2FudCB0aGVtIHRvIGhhdmUgYW55CisgICAgICAgIC8vIGVmZmVj
dCBvbiBtX2V4aXRPSy4KKyAgICAgICAgYm9vbCBleGl0T0tCZWZvcmUgPSBtX2V4aXRPSzsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAg
ICAgICAgICBtX2V4aXRPSyA9IGV4aXRPS0JlZm9yZTsKKyAgICAgICAgfQogICAgICAgICBtX3Nl
dExvY2FsUXVldWUucmVzaXplKDApOwogICAgIH0KIApAQCAtNjUxLDE1ICs2NjEsMTcgQEAgcHJp
dmF0ZToKIAogICAgIE5vZGVPcmlnaW4gY3VycmVudE5vZGVPcmlnaW4oKQogICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZXQgdGhlIGZvckV4aXQgb3JpZ2luIG9ubHkgb24gdGhv
c2Ugbm9kZXMgdGhhdCBjYW4gZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTIwNAogICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljOwor
ICAgICAgICBDb2RlT3JpZ2luIGZvckV4aXQ7CisKICAgICAgICAgaWYgKG1fY3VycmVudFNlbWFu
dGljT3JpZ2luLmlzU2V0KCkpCiAgICAgICAgICAgICBzZW1hbnRpYyA9IG1fY3VycmVudFNlbWFu
dGljT3JpZ2luOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZW1hbnRpYyA9IGN1cnJlbnRD
b2RlT3JpZ2luKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRp
YywgY3VycmVudENvZGVPcmlnaW4oKSwgdHJ1ZSk7CisKKyAgICAgICAgZm9yRXhpdCA9IGN1cnJl
bnRDb2RlT3JpZ2luKCk7CisKKyAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGZv
ckV4aXQsIG1fZXhpdE9LKTsKICAgICB9CiAgICAgCiAgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0
YSh1bnNpZ25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCkBAIC02NzcsNiArNjg5LDE4IEBA
IHByaXZhdGU6CiAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5n
KCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIGFwcGVuZGVkICIsIG5vZGUsICIgIiwg
R3JhcGg6Om9wTmFtZShub2RlLT5vcCgpKSwgIlxuIik7CiAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5hcHBlbmQobm9kZSk7CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAgICBtX2dyYXBo
LCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFj
dEhlYXAmIGhlYXApIHsKKyAgICAgICAgICAgICAgICAvLyBXcml0ZXMgdG8gU2lkZVN0YXRlIGFy
ZSBub3Qgb2JzZXJ2YWJsZS4KKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5pc1N1YnR5cGVPZihT
aWRlU3RhdGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICAvLyBXZSBhc3N1bWUgYWxsIG90aGVyIHdyaXRlcyBhcmUgb2JzZXJ2YWJsZSwgYW5kIHNvIGlm
IHdlIHRyaWVkIHRvIGV4aXQgYWZ0ZXIgdGhlbQorICAgICAgICAgICAgICAgIC8vIHdpdGggdGhl
IHNhbWUgb3JpZ2luIHRoZW4gd2UnZCBjYXVzZSB0aGF0IGVmZmVjdCB0byByZXBlYXQuCisgICAg
ICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg
ICBOb09wQ2xvYmJlcml6ZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIApA
QCAtOTAwLDYgKzkyNCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7
CiAgICAgLy8gVGhlIHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2RlIGlmIGRpZmZl
cmVudCBmcm9tIHRoZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9jdXJyZW50U2Vt
YW50aWNPcmlnaW47CisgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0IHJpZ2h0IG5v
dy4KKyAgICBib29sIG1fZXhpdE9LIHsgZmFsc2UgfTsKIAogICAgIEZyb3plblZhbHVlKiBtX2Nv
bnN0YW50VW5kZWZpbmVkOwogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKQEAgLTEw
NTMsNiArMTA3OSw3IEBAIHByaXZhdGU6CiAKICNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkgXAog
ICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKKyAgICBtX2V4aXRP
SyA9IGZhbHNlOyBcCiAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwogCiB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEzNTYsNiArMTM4Myw3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBjbGVhckNhY2hlcygpOyAvLyBS
ZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIgY29kZS4KICAg
ICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1fZXhpdE9LID0gZmFsc2U7
CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2lj
IGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0YWNr
RW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RCbG9jaygpKSB7CkBAIC0y
OTAxLDEyICsyOTI5LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2lu
ID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJh
c2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwog
ICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFj
dHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVl
IHdlIHNldCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLmJs
b2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBTZXRB
cmd1bWVudCBub2Rlcy4gVGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRvcCBvZiBh
biBvcF9lbnRlciBzbworICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgorICAgICAgICBtX2V4aXRP
SyA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAgICAgICAg
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC0yOTIyLDYgKzI5NTMs
MTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIAog
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0aGF0IHdl
IGNhbiBleGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAg
ICAgIAogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAgICAgICAg
Ly8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRG
R05vZGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpCit7CisgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMgd2hvc2UgZWZmZWN0IG9u
IHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hhdCB0aGV5CisgICAgLy8g
bm9ybWFsbHkgY2xvYmJlci4KKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNlIE1v
dkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgUHV0SGludDoKKyAgICBjYXNl
IEtpbGxTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMgYWxsIHdyaXRlIHRvIHRoZSBleGl0
IHN0YXRlLCBzbyBvYnZpb3VzbHksIHRoZXkgY2xvYmJlciBpdC4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBjYXNlIFNldExvY2FsOgorICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIC8v
IFRoZXNlIG5vZGVzIHdyaXRlIHRvIHRoZSBzdGFjaywgYnV0IHRoZXkgbWF5IG9ubHkgZG8gc28g
YWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGhhZCBhIE1vdkhpbnQKKyAgICAgICAgLy8gZm9yIHRoZSBl
eGFjdCBzYW1lIHZhbHVlIGFuZCB0aGUgc2FtZSBzdGFjayBsb2NhdGlvbi4gSGVuY2UsIHRoZXkg
aGF2ZSBubyBmdXJ0aGVyIGVmZmVjdCBvbgorICAgICAgICAvLyBleGl0IHN0YXRlLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGb3IgYWxsIG90aGVy
IG5vZGVzLCB3ZSBqdXN0IGNhcmUgYWJvdXQgd2hldGhlciB0aGV5IHdyaXRlIHRvIHNvbWV0aGlu
ZyBvdGhlciB0aGFuIFNpZGVTdGF0ZS4KKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgY2xvYmJlcml6ZSgKKyAgICAgICAgICAgIGdyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6
ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXApIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgc3VjaCBhIHRoaW5nIGFzIGEgc3RyaWN0
IHN1YnR5cGUgb2YgU2lkZVN0YXRlLiBUaGF0J3Mgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgICAg
ICAvLyB1cyB0byB1c2UgYSBmYXN0ICE9IGNoZWNrLCBiZWxvdy4KKyAgICAgICAgICAgICAgICBB
U1NFUlQoIWhlYXAuaXNTdHJpY3RTdWJ0eXBlT2YoU2lkZVN0YXRlKSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaGVhcCAhPSBTaWRlU3RhdGUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKyNkZWZpbmUgREZH
Q2xvYmJlcnNFeGl0U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKworLy8g
QSBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbiBvZiB3aGV0aGVyIHRoZSBub2RlIHdpbGwgcGVy
Zm9ybSBhbiBlZmZlY3QgdGhhdCBtZWFucyB0aGF0IHdlIGNhbiBubworLy8gbG9uZ2VyIGV4aXQg
dG8gdGhpcyBub2RlJ3MgZXhpdCBvcmlnaW4uCisKK2Jvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3Jh
cGgmLCBOb2RlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg4ODI1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDcgKzM0LDkgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2lu
Y2x1ZGUgIkRGR0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisj
aW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgi
CisjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCIKQEAgLTEwMSw4ICsxMDMsMTQgQEAgc3RhdGljIHZvaWQg
cHJpbnRXaGl0ZVNwYWNlKFByaW50U3RyZWFtJgogICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0K
IAotYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hh
ciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29u
dGV4dCogY29udGV4dCkKK2Jvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZVJlZiwgTm9kZSogY3Vy
cmVudE5vZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQogeworICAgIGlmICghY3VycmVudE5vZGUt
Pm9yaWdpbi5zZW1hbnRpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIE5vZGUq
IHByZXZpb3VzTm9kZSA9IHByZXZpb3VzTm9kZVJlZjsKKyAgICBwcmV2aW91c05vZGVSZWYgPSBj
dXJyZW50Tm9kZTsKKwogICAgIGlmICghcHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgCkBAIC0zNDUsMTIgKzM1MywxOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlz
dER1bXAocmVhZHMuZGlyZWN0KCksICIsIikpOwogICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGly
ZWN0KCksICIsIikpOworICAgIEV4aXRNb2RlIGV4aXRNb2RlID0gbWF5RXhpdCgqdGhpcywgbm9k
ZSk7CisgICAgaWYgKGV4aXRNb2RlICE9IERvZXNOb3RFeGl0KQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIGV4aXRNb2RlKTsKKyAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUoKnRoaXMsIG5vZGUp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJDbG9iYmVyc0V4aXQiKTsKICAgICBpZiAobm9k
ZS0+b3JpZ2luLmlzU2V0KCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAobm9kZS0+b3Jp
Z2luLnNlbWFudGljICE9IG5vZGUtPm9yaWdpbi5mb3JFeGl0KQorICAgICAgICBpZiAobm9kZS0+
b3JpZ2luLnNlbWFudGljICE9IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICYmIG5vZGUtPm9yaWdpbi5m
b3JFeGl0LmlzU2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGl0OiAiLCBu
b2RlLT5vcmlnaW4uZm9yRXhpdCk7CiAgICAgfQotICAgIAorICAgIGlmICghbm9kZS0+b3JpZ2lu
LmV4aXRPSykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdEludmFsaWQiKTsKICAgICBv
dXQucHJpbnQoIikiKTsKIAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRo
aXMpICYmIG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpKQpAQCAtNDU1LDcgKzQ2OSw3
IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgb3V0
LnByaW50KCIgIEFyZ3VtZW50czogIiwgbGlzdER1bXAobV9hcmd1bWVudHMpLCAiXG4iKTsKICAg
ICBvdXQucHJpbnQoIlxuIik7CiAgICAgCi0gICAgTm9kZSogbGFzdE5vZGUgPSAwOworICAgIE5v
ZGUqIGxhc3ROb2RlID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxv
Y2tzLnNpemUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3Nb
Yl0uZ2V0KCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC00OTYsNyArNTEwLDYgQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZHVtcENvZGVPcmln
aW4ob3V0LCAiIiwgbGFzdE5vZGUsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7CiAgICAgICAgICAg
ICBkdW1wKG91dCwgIiIsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7Ci0gICAgICAgICAgICBsYXN0
Tm9kZSA9IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgU3Rh
dGVzOiAiLCBibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uLCAiLCAiLCBibG9jay0+Y2ZhU3RydWN0
dXJlQ2xvYmJlclN0YXRlQXRUYWlsKTsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhRGlkRmluaXNo
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg4ODI1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTAsNyArMjEwLDcgQEAgcHVibGljOgogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmln
aW4gb2YgdGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRo
ZQogICAgIC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHBy
aW50ZWQuCi0gICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIq
IHByZWZpeCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRl
eHQqKTsKKyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
cHJlZml4LCBOb2RlKiYgcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRl
eHQqKTsKIAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSog
YWRkLCBib29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiwgYm9vbCByaWdodFNob3VsZFNwZWN1
bGF0ZUludDMyLCBQcmVkaWN0aW9uUGFzcyBwYXNzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMTg4ODI1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzks
OCArNzksMTAgQEAgcHJpdmF0ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWJvb2wg
bWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKIHsKKyAgICBFeGl0TW9kZSByZXN1bHQgPSBEb2VzTm90RXhp
dDsKKyAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAvLyBUaGlzIGlzIGEgY2Fy
ZWZ1bGx5IGN1cmF0ZWQgbGlzdCBvZiBub2RlcyB0aGF0IGRlZmluaXRlbHkgZG8gbm90IGV4aXQu
IFdlIHRyeSB0byBiZSB2ZXJ5CiAgICAgLy8gY29uc2VydmF0aXZlIHdoZW4gbWFpbnRhaW5pbmcg
dGhpcyBsaXN0LCBiZWNhdXNlIGFkZGluZyBuZXcgbm9kZSB0eXBlcyB0byBpdCBkb2Vzbid0CkBA
IC0xMTYsMTggKzExOCw0OCBAQCBib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2Rl
KQogICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBWYWx1
ZVJlcDoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgICAgICBicmVhazsKKwor
ICAgIGNhc2UgU3RyQ2F0OgorICAgICAgICByZXN1bHQgPSBFeGl0c0ZvckV4Y2VwdGlvbnM7CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiBpbiBk
b3VidCwgcmV0dXJuIHRydWUuCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
RXhpdHM7CiAgICAgfQogCiAgICAgRWRnZU1heUV4aXQgZnVuY3RvcjsKICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihncmFwaCwgbm9kZSwgZnVuY3Rvcik7Ci0gICAgcmV0dXJuIGZ1bmN0b3Iu
cmVzdWx0KCk7CisgICAgaWYgKGZ1bmN0b3IucmVzdWx0KCkpCisgICAgICAgIHJlc3VsdCA9IEV4
aXRzOworICAgIAorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aXRNb2RlIG1vZGUpCit7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBEb2VzTm90RXhpdDoKKyAgICAgICAgb3V0LnBy
aW50KCJEb2VzTm90RXhpdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0c0ZvckV4
Y2VwdGlvbnM6CisgICAgICAgIG91dC5wcmludCgiRXhpdHNGb3JFeGNlcHRpb25zIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRzOgorICAgICAgICBvdXQucHJpbnQoIkV4aXRzIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCShyZXZpc2lvbiAxODg4
MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzYsMTAgKzM2LDQ4IEBAIHN0cnVjdCBOb2RlOwogLy8gQSAqdmVyeSogY29uc2VydmF0
aXZlIGFwcHJveGltYXRpb24gb2Ygd2hldGhlciBvciBub3QgYSBub2RlIGNvdWxkIHBvc3NpYmx5
IGV4aXQuIFVzdWFsbHkKIC8vIHJldHVybnMgdHJ1ZSBleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2Ug
b2J2aW91c2x5IGRvbid0IGV4cGVjdCBhbiBleGl0LgogCi1ib29sIG1heUV4aXQoR3JhcGgmLCBO
b2RlKik7CitlbnVtIEV4aXRNb2RlIHsKKyAgICAvLyBUaGUgbm9kZSBkb2VzIG5vdCBleGl0IGF0
IGFsbC4gVGhpcyBtZWFucyB0aGF0IGl0J3MgbGVnYWwgdG8gZWxpbWluYXRlIHRoZSBmaXJzdCBz
dG9yZSBpbiBhCisgICAgLy8gcHJvZ3JhbSBsaWtlOgorICAgIC8vCisgICAgLy8gZ2xvYmFsID0g
MSAvLyBmaXJzdCBzdG9yZQorICAgIC8vIERvZXNOb3RFeGl0KCk7IC8vIGxldCdzIGFzc3VtZSB0
aGF0IHRoaXMgYWxzbyBkb2Vzbid0IHJlYWQgImdsb2JhbCIKKyAgICAvLyBnbG9iYWwgPSAyIC8v
IHNlY29uZCBzdG9yZQorICAgIC8vCisgICAgLy8gSXQncyBsZWdhbCB0byBlbGltaW5hdGUgdGhl
IGZpcnN0IG9uZSBzaW5jZSBub2JvZHkgd2lsbCBzZWUgaXQ7IHRoZSBzZWNvbmQgc3RvcmUgaXMg
YWx3YXlzCisgICAgLy8gZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIuCisgICAgRG9lc05vdEV4aXQsCisK
KyAgICAvLyBUaGUgbm9kZSB3aWxsIGV4aXQsIGJ1dCBvbmx5IGJ5IHByb3Blcmx5IHRocm93aW5n
IGV4Y2VwdGlvbnMuIEEgcHJvcGVyIGV4Y2VwdGlvbiB0aHJvdyB3aWxsCisgICAgLy8gZGl2ZXJ0
IGV4ZWN1dGlvbiB0byB0aGUgbWF0Y2hpbmcgb3BfY2F0Y2ggYW5kIHdpbGwgbm90IHJlZXhlY3V0
ZSB0aGUgZXhpdCBvcmlnaW4uIFRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSBzdG9yZSBlbGlt
aW5hdGlvbiBvcHRpbWl6YXRpb24gYWJvdmUgd291bGQgYmUgaWxsZWdhbCwgYnV0IHRoZSBmb2xs
b3dpbmcgd291bGQgYmUgT0s6CisgICAgLy8KKyAgICAvLyBTaWRlRWZmZWN0KC4uLiwgZXhpdDog
YmMjNDIpCisgICAgLy8gRXhpdHNGb3JFeGNlcHRpb25zKC4uLiwgZXhpdDogI2JjNDIsIEV4aXRJ
bnZhbGlkKQorICAgIC8vCisgICAgLy8gSW4gcGFydGljdWxhciwgaXQncyBPSyBmb3IgYSBub2Rl
IHRoYXQgcmVwb3J0cyBFeGl0c0ZvckV4Y2VwdGlvbnMgdG8gYmUgZXhlY3V0ZWQgaW4gYSBjb250
ZXh0CisgICAgLy8gd2hlcmUgIU5vZGU6Om9yaWdpbi5leGl0T0suIFRoYXQncyBiZWNhdXNlIHRo
aXMgbm9kZSB3aWxsIG5vdCBleGl0IGluIGEgbWFubmVyIHRoYXQgY291bGQgbGVhZAorICAgIC8v
IHRvIHRoZSByZWV4ZWN1dGlvbiBvZiBTaWRlRWZmZWN0KCkuCisgICAgRXhpdHNGb3JFeGNlcHRp
b25zLAorCisgICAgLy8gVGhlIG5vZGUgd2lsbCBleGl0IHRvIHRoZSBleGl0IG9yaWdpbi4gVGhp
cyBtZWFucyB0aGF0IHdlIGNhbm5vdCBkbyBzdG9yZSBlbGltaW5hdGlvbiBsaWtlIGZvcgorICAg
IC8vIERvZXNOb3RFeGl0IGFuZCBhbHNvIHdlIGNhbm5vdCBwbGFjZSB0aGlzIG5vZGUgaW4gYW4g
RXhpdEludmFsaWQgY29udGV4dCwgc2luY2UgdGhpcyB3aWxsIGV4aXQKKyAgICAvLyBpbiBhIG1h
bm5lciB0aGF0IHdpbGwgY2F1c2UgdGhlIHJlZXhlY3V0aW9uIG9mIGFsbCBwcmV2aW91cyBvcGVy
YXRpb25zIHdpdGhpbiB0aGlzIGV4aXQgb3JpZ2luLgorICAgIEV4aXRzCit9OworCitFeGl0TW9k
ZSBtYXlFeGl0KEdyYXBoJiwgTm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiwgSlNDOjpERkc6OkV4aXRNb2RlKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERGR01heUV4aXRf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRS
ZW1vdmFsUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgs
NyArMTA4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9k
ZS0+dW5saW5rZWRMb2NhbCgpKSA9IEVwb2NoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAg
aWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAgICAgICAg
ICAgY3VycmVudEVwb2NoLmJ1bXAoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5v
ZGVJbmRleCkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2lu
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2lu
LmgJKHJldmlzaW9uIDE4ODgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw5ICsyOSwxMyBAQAogI2lmIEVOQUJMRShERkdf
SklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhp
dFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR3Jh
cGg7CitzdHJ1Y3QgTm9kZTsKKwogc3RydWN0IE5vZGVPcmlnaW4gewogICAgIE5vZGVPcmlnaW4o
KSB7IH0KICAgICAKQEAgLTQ4LDcgKzUyLDcgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgICAg
ICByZXR1cm4gc2VtYW50aWMuaXNTZXQoKTsKICAgICB9CiAgICAgCi0gICAgTm9kZU9yaWdpbiB3
aXRoU2VtYW50aWMoQ29kZU9yaWdpbiBzZW1hbnRpYykKKyAgICBOb2RlT3JpZ2luIHdpdGhTZW1h
bnRpYyhDb2RlT3JpZ2luIHNlbWFudGljKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFpc1Nl
dCgpKQogICAgICAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oKTsKQEAgLTU4LDYgKzYyLDE0IEBA
IHN0cnVjdCBOb2RlT3JpZ2luIHsKICAgICAgICAgICAgIHJlc3VsdC5zZW1hbnRpYyA9IHNlbWFu
dGljOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KKworICAgIE5vZGVPcmlnaW4gZm9y
SW5zZXJ0aW5nQWZ0ZXIoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgaWYgKHJlc3VsdC5leGl0
T0sgJiYgY2xvYmJlcnNFeGl0U3RhdGUoZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAgcmVzdWx0
LmV4aXRPSyA9IGZhbHNlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KICAgICAKICAg
ICAvLyBVc2VkIGZvciBkZXRlcm1pbmluZyB3aGF0IGJ5dGVjb2RlIHRoaXMgY2FtZSBmcm9tLiBU
aGlzIGlzIGltcG9ydGFudCBmb3IKICAgICAvLyBkZWJ1Z2dpbmcsIGV4Y2VwdGlvbnMsIGFuZCBl
dmVuIGJhc2ljIGV4ZWN1dGlvbiBzZW1hbnRpY3MuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTg4ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNyArODks
OSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGV4ZWN1dGlvbkNvdW50IHRvIHVzZSBiZXN0IGp1ZGdl
bWVudCAtIGJ1dCB0aGF0IHNlZW1zIHVubmVjZXNzYXJ5IHNpbmNlIHdlIGtub3cgZm9yCiAgICAg
ICAgIC8vIHN1cmUgd2hhdCB0aGUgZXhlY3V0aW9uQ291bnQgc2hvdWxkIGJlIGluIHRoaXMgY2Fz
ZS4KICAgICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQoMCwg
MSk7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gdGFyZ2V0LT5hdCgwKS0+b3JpZ2luOwor
CisgICAgICAgIC8vIFdlJ2QgcmVhbGx5IGxpa2UgdG8gdXNlIGFuIHVuc2V0IG9yaWdpbiwgYnV0
IFRocmVhZGVkQ1BTIHdvbid0IGFsbG93IHRoYXQuCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCBmYWxzZSk7CiAgICAg
ICAgIAogICAgICAgICBWZWN0b3I8Tm9kZSo+IGxvY2FscyhiYXNlbGluZS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMpOwogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CkBAIC0xMTcsNiArMTE5LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBPcEluZm8ob2xkTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCkpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gbm9kZTsK
ICAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyB1c2UgdGhlIG9yaWdpbiBvZiB0aGUgdGFyZ2V0
LCBzaW5jZSBpdCdzIG5vdCBPSyB0byBleGl0LCBhbmQgd2Ugd2lsbCBwcm9iYWJseSBob2lzdAor
ICAgICAgICAvLyB0eXBlIGNoZWNrcyB0byBoZXJlLgorICAgICAgICBvcmlnaW4gPSB0YXJnZXQt
PmF0KDApLT5vcmlnaW47CiAgICAgICAgIAogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxv
Y2FsIDwgYmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CiAgICAgICAg
ICAgICBOb2RlKiBwcmV2aW91c0hlYWQgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChs
b2NhbCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJl
dmlzaW9uIDE4ODgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVT
b3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVBy
b2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25l
ZCByZWNvdmVyeUluZGV4KQotICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX2NvZGVPcmln
aW5Gb3JFeGl0VGFyZ2V0LCBqaXQtPm1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlKQorICAgIDog
T1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNl
bWFudGljKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBtX3Zh
bHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQoMCkK
ICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQogICAgICwgbV9zdHJlYW1JbmRl
eChzdHJlYW1JbmRleCkKIHsKLSAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOworICAg
IERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQtPm1fY3VycmVudE5vZGUsIGppdC0+
bV9vcmlnaW4uZXhpdE9LKTsKIH0KIAogdm9pZCBPU1JFeGl0OjpzZXRQYXRjaGFibGVDb2RlT2Zm
c2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGNoZWNrKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24gMTg4ODI1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5z
ZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Myw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2Rl
KSkgeworICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4
aXQpIHsKICAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOwogICAgICAgICAgICAg
ICAgIGxhc3RFeGl0aW5nSW5kZXggPSBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CkBAIC0xNjAs
MTAgKzE2MCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGV4
YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFucyB0aGF0IHdlIGhhdmUg
dG8KICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSByZWYgY291bnQuCiAgICAg
ICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKKworICAgICAgICAgICAg
ICAgICAgICBOb2RlKiBsYXN0RXhpdGluZ05vZGUgPSBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRl
eCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4aXRpbmdJbmRl
eCArIDEsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2st
PmF0KGxhc3RFeGl0aW5nSW5kZXgpLT5vcmlnaW4sIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4aXRpbmdOb2RlLT5vcmlnaW4uZm9ySW5z
ZXJ0aW5nQWZ0ZXIobV9ncmFwaCwgbGFzdEV4aXRpbmdOb2RlKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTg4ODI1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcg
KzYxLDYgQEAgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbAogICAgICwg
bV9pbnRlcnByZXRlcihtX2ppdC5ncmFwaCgpLCBtX3N0YXRlKQogICAgICwgbV9zdHJlYW0oJmpp
dC5qaXRDb2RlKCktPnZhcmlhYmxlRXZlbnRTdHJlYW0pCiAgICAgLCBtX21pbmlmaWVkR3JhcGgo
JmppdC5qaXRDb2RlKCktPm1pbmlmaWVkREZHKQotICAgICwgbV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyhmYWxzZSkKIHsKIH0KIApAQCAtMTk2LDcgKzE5NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2Nh
bkV4aXQpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGZ1enpKdW1wID0gZW1pdE9TUkV4aXRGdXp6
Q2hlY2soKTsKICAgICBpZiAoZnV6ekp1bXAuaXNTZXQoKSkgewogICAgICAgICBKSVRDb21waWxl
cjo6SnVtcExpc3QganVtcHNUb0ZhaWw7CkBAIC0yMTIsNyArMjEwLDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY2FuRXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0T1NSRXhp
dEZ1enpDaGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBteUp1bXBzVG9GYWlsOwpAQCAtMjI4LDcgKzIyNSw2IEBAIE9TUkV4
aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIHsKICAgICBpZiAoIW1fY29tcGls
ZU9rYXkpCiAgICAgICAgIHJldHVybiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25l
ZCBpbmRleCA9IG1faml0LmppdENvZGUoKS0+b3NyRXhpdC5zaXplKCk7CiAgICAgbV9qaXQuYXBw
ZW5kRXhpdEluZm8oKTsKICAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhp
dChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCkpKTsKQEAgLTIzNywxOSAr
MjMzLDE2IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIAogT1NS
RXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsK
LSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAg
IHJldHVybiBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9k
ZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2lu
ZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwpOwogfQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Ug
anNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QmIGp1bXBzVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNl
LCBub2RlVXNlLm5vZGUoKSwganVtcHNUb0ZhaWwpOwogfQogCkBAIC0yNTcsNyArMjUwLDYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IG1f
aml0LmppdENvZGUoKS0+YXBwZW5kU3BlY3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAg
bV9qaXQuYXBwZW5kRXhpdEluZm8oanVtcFRvRmFpbCk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6
ZSgpLCByZWNvdmVyeUluZGV4KSk7CkBAIC0yNjUsNyArMjU3LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxh
dGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRn
ZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxh
dGlvblJlY292ZXJ5JiByZWNvdmVyeSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1l
bnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIApAQCAt
MjczLDcgKzI2NCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kK
IHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQo
bV9jYW5FeGl0KTsKICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9qaXQuYXBw
ZW5kRXhpdEluZm8oSklUQ29tcGlsZXI6Okp1bXBMaXN0KCkpOwogICAgIG1faml0LmppdENvZGUo
KS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KAogICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlv
biwgSlNWYWx1ZVNvdXJjZSgpLApAQCAtMjg2LDcgKzI3Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJl
Z3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jYW5FeGl0KTsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsK
ICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlLCBtX2ppdC5qdW1w
KCkpOwpAQCAtMjk3LDcgKzI4Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNw
ZWN1bGF0aXYKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVz
ZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQp
OwogICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBu
b2RlVXNlLm5vZGUoKSk7CiB9CiAKQEAgLTE0NjcsOSArMTQ1NSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFj
aGluZUxvY2FsKCksCiAgICAgICAgICAgICAgICAgZm9ybWF0KSk7CiAgICAgfQotICAgIAotICAg
IG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKCk7Ci0gICAgbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3JpZ2luKCk7CisKKyAgICBtX29yaWdpbiA9IE5vZGVP
cmlnaW4oKTsKICAgICAKICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxv
Y2sgPCBtX2Jsb2NrLT5zaXplKCk7ICsrbV9pbmRleEluQmxvY2spIHsKICAgICAgICAgbV9jdXJy
ZW50Tm9kZSA9IG1fYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKQEAgLTE0ODEsMTUgKzE0Njgs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKLSAg
ICAgICAgICAgIG1fY2FuRXhpdCA9IHRydWU7IC8vIEVzc2VudGlhbGx5IGRpc2FibGUgdGhlIGFz
c2VydGlvbnMuCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fY2FuRXhpdCA9IG1heUV4aXQo
bV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSk7Ci0gICAgICAgIAogICAgICAgICBtX2ludGVy
cHJldGVyLnN0YXJ0RXhlY3V0aW5nKCk7CiAgICAgICAgIG1faml0LnNldEZvck5vZGUobV9jdXJy
ZW50Tm9kZSk7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBtX2N1cnJlbnRO
b2RlLT5vcmlnaW4uZm9yRXhpdDsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUg
PSBtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgICAgIG1fb3JpZ2luID0gbV9j
dXJyZW50Tm9kZS0+b3JpZ2luOworICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKKyAg
ICAgICAgICAgIG1fb3JpZ2luLmV4aXRPSyAmPSBtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3Vy
cmVudE5vZGUpID09IEV4aXRzOwogICAgICAgICBtX2xhc3RHZW5lcmF0ZWROb2RlID0gbV9jdXJy
ZW50Tm9kZS0+b3AoKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5z
aG91bGRHZW5lcmF0ZSgpKTsKQEAgLTE1MzYsOSArMTUxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1l
bnRUeXBlcygpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnROb2RlKTsKLSAgICBtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzID0gdHJ1ZTsKLSAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0g
Q29kZU9yaWdpbigwKTsKLSAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmln
aW4oMCk7CisgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmln
aW4oMCksIHRydWUpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2so
KS0+bnVtUGFyYW1ldGVycygpOyArK2kpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1faml0Lmdy
YXBoKCkubV9hcmd1bWVudHNbaV07CkBAIC0xNjAxLDcgKzE1ODIsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KLSAg
ICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzID0gZmFsc2U7CisKKyAgICBtX29yaWdpbiA9IE5v
ZGVPcmlnaW4oKTsKIH0KIAogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxODg4MjUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTgsNyArMjQ1OCw2IEBAIHB1YmxpYzoKICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5vZGUqIG1fY3VycmVudE5vZGU7CiAgICAgTm9kZVR5cGUg
bV9sYXN0R2VuZXJhdGVkTm9kZTsKLSAgICBib29sIG1fY2FuRXhpdDsKICAgICB1bnNpZ25lZCBt
X2luZGV4SW5CbG9jazsKICAgICAvLyBWaXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBz
LgogICAgIFZlY3RvcjxHZW5lcmF0aW9uSW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CkBAIC0y
NDc5LDggKzI0NzgsNyBAQCBwdWJsaWM6CiAgICAgfTsKICAgICBWZWN0b3I8QnJhbmNoUmVjb3Jk
LCA4PiBtX2JyYW5jaGVzOwogCi0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFy
Z2V0OwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAgTm9k
ZU9yaWdpbiBtX29yaWdpbjsKICAgICAKICAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRl
OwogICAgIEFic3RyYWN0SW50ZXJwcmV0ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50ZXJw
cmV0ZXI7CkBAIC0yNDg4LDggKzI0ODYsNiBAQCBwdWJsaWM6CiAgICAgVmFyaWFibGVFdmVudFN0
cmVhbSogbV9zdHJlYW07CiAgICAgTWluaWZpZWRHcmFwaCogbV9taW5pZmllZEdyYXBoOwogICAg
IAotICAgIGJvb2wgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlczsKLSAgICAKICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRoR2VuZXJhdG9yPiwgOD4gbV9zbG93UGF0aEdlbmVyYXRv
cnM7CiAgICAgVmVjdG9yPFNpbGVudFJlZ2lzdGVyU2F2ZVBsYW4+IG1fcGxhbnM7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4
ODgyNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0
YXRlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTg1LDEzICsxODYsMjggQEAgcHVibGlj
OgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pc1NldCgpID09IG5vZGUtPm9yaWdpbi5mb3JFeGl0Lmlz
U2V0KCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW1heUV4aXQobV9ncmFw
aCwgbm9kZSkgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUpLCAhKCFub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpICYmIG5v
ZGUtPm9yaWdpbi5leGl0T0spKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEo
bWF5RXhpdChtX2dyYXBoLCBub2RlKSA9PSBFeGl0cyAmJiAhbm9kZS0+b3JpZ2luLmV4aXRPSykp
OworCisgICAgICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cHJldmlvdXNOb2RlID0gYmxvY2stPmF0KGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgcHJldmlvdXNOb2RlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgIW5vZGUtPm9yaWdpbi5leGl0T0sKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICE9IHByZXZpb3VzTm9kZS0+b3JpZ2lu
LmZvckV4aXQpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAg
ICAgICAgICAgIChub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICEoIXByZXZpb3VzTm9k
ZS0+b3JpZ2luLmV4aXRPSyAmJiBub2RlLT5vcmlnaW4uZXhpdE9LKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQgIT0gcHJldmlvdXNOb2RlLT5vcmlnaW4u
Zm9yRXhpdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc1N0cnVjdHVyZSgpIHx8ICEhbm9kZS0+
c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhh
c0NlbGxPcGVyYW5kKCkgfHwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKS5pc0NlbGwoKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQo
KSB8fCAhIW5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQy
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5jaGls
ZDMoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkocmV2aXNpb24gMTg4ODI1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw5ICsyMjcsOCBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVu
dChpKSA9CiAgICAgICAgICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNW
YWx1ZSwgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKICAgICAgICAgfQotICAgICAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdpbigwKTsKLSAgICAgICAgbV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3JpZ2luKDApOwogICAgICAgICBtX25vZGUg
PSBudWxscHRyOworICAgICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwg
Q29kZU9yaWdpbigwKSwgdHJ1ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBt
X2dyYXBoLm1fYXJndW1lbnRzW2ldOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJh
bmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKTsKQEAgLTM5Myw4ICszOTIsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX25vZGUgPSBtX2hpZ2hCbG9j
ay0+YXQobm9kZUluZGV4KTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYzsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdl
dCA9IG1fbm9kZS0+b3JpZ2luLmZvckV4aXQ7CisgICAgICAgIG1fb3JpZ2luID0gbV9ub2RlLT5v
cmlnaW47CiAgICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgp
KQogICAgICAgICAgICAgZGF0YUxvZygiTG93ZXJpbmcgIiwgbV9ub2RlLCAiXG4iKTsKQEAgLTQ3
NTIsMTAgKzQ3NTAsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9u
IHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CisK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7CiAg
ICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4
aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9y
bWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCi0gICAgICAgICAgICBtX2NvZGVP
cmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKKyAgICAgICAg
ICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGljLAogICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKICAgICAgICAgICAg
IGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAg
bV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbklu
Zm8oKSk7CkBAIC04MDkzLDYgKzgwOTMsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFt
X2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2co
IiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVj
b3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7CiAgICAgICAgIAogICAgICAgICBpZiAoZG9PU1JF
eGl0RnV6emluZygpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbnVtYmVyT2ZGdXp6Q2hlY2tzID0g
bV9vdXQuYWRkKApAQCAtODExNyw3ICs4MTE5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAg
ICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAg
ICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1
ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRU
YXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgICAgICAgICAgbV9vcmlnaW4u
Zm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAo
KS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5
TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZp
bmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKQEAgLTg2
MTIsOSArODYxNCw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9oaWdoQmxvY2s7CiAg
ICAgQmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dExv
d0Jsb2NrOwotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsK
LSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOworCisgICAgTm9kZU9y
aWdpbiBtX29yaWdpbjsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAgICBOb2RlKiBtX25v
ZGU7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259810</attachid>
            <date>2015-08-24 19:50:10 -0700</date>
            <delta_ts>2015-08-24 21:37:32 -0700</delta_ts>
            <desc>even more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61325</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw4IEBACiAJCTBGM0IzQTJDMTU0NzUw
MDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdD
bG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCRDFCNjFCODk2QTA3
MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKIAkJMEYzRTAxQUExOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERG
R1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFBQjE5RDM1M0E1MDBGNjFCN0Yg
LyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjEwNyw2ICsyMTA5LDggQEAKIAkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1Zh
bGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7
IHBhdGggPSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9i
YmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIw
OEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCRDFCNjFCODk2QTA3MDA1
OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYx
QjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQ
b3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MTE5LDYgKzUx
MjMsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmgg
Ki8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuY3BwICov
LAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyU2V0LmggKi8sCisJ
CQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAq
LywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUu
aCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2
ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQ29tbW9uLmNw
cCAqLywKQEAgLTYxNDgsNiArNjE1NCw3IEBACiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMy
IC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQxMDE3RjE3OURBRjgwMDAy
RUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkZDQ0ZEMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCBp
biBIZWFkZXJzICovLApAQCAtNzM4MSw2ICs3Mzg4LDcgQEAKIAkJCQkxNDk1NTlFRTBERENEREY3
MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE3
QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjNDMUYxQTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xv
YmJlcnNFeGl0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5
NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjQ4NTMyMTE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBwYXlsb2FkIGlzIGEg
ZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5vbi1UT1AgcGF5bG9h
ZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5bG9hZC4KIC8vIC0g
SGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRlU3RhdGUgaXMgYSBk
aXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQgd2l0aCBUT1AgcGF5
bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9mIHRoZSBzYW1lIGtp
bmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2lu
Y2x1ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUgIkRGR0NhcGFiaWxpdGllcy5oIgorI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUg
IkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC0zNjIsNiArMzYz
LDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJbmZv
KG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CiAKKyAgICAgICAgLy8gV2UgY2FuJ3QgZXhpdCBh
bnltb3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgorICAgICAgICBt
X2V4aXRPSyA9IGZhbHNlOworCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCBkZWxheWVkKGN1cnJl
bnRDb2RlT3JpZ2luKCksIG9wZXJhbmQsIHZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChz
ZXRNb2RlID09IE5vcm1hbFNldCkgewpAQCAtMzc0LDggKzM3OCwxNCBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgcHJvY2Vzc1NldExvY2FsUXVldWUoKQogICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkKKyAgICAgICAg
Ly8gV2UgcGxheSBoYWNrcyB3aXRoIG1fZXhpdE9LIGhlcmUuIFdlIGtub3cgdGhhdCB0aGUgU2V0
TG9jYWxzIHdlIGFyZSBlbWl0dGluZyBhcmUgYWxyZWFkeQorICAgICAgICAvLyByZWNvcmRlZCBp
biBPU1IgZXhpdCBzdGF0ZSwgc28gdGhleSBhcmVuJ3QgcmVhbCBlZmZlY3RzLiBTbywgd2UgZG9u
J3Qgd2FudCB0aGVtIHRvIGhhdmUgYW55CisgICAgICAgIC8vIGVmZmVjdCBvbiBtX2V4aXRPSy4K
KyAgICAgICAgYm9vbCBleGl0T0tCZWZvcmUgPSBtX2V4aXRPSzsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fc2V0TG9jYWxRdWV1ZS5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgbV9zZXRMb2NhbFF1ZXVlW2ldLmV4ZWN1dGUodGhpcyk7CisgICAgICAgICAgICBtX2V4aXRP
SyA9IGV4aXRPS0JlZm9yZTsKKyAgICAgICAgfQogICAgICAgICBtX3NldExvY2FsUXVldWUucmVz
aXplKDApOwogICAgIH0KIApAQCAtNjUxLDE1ICs2NjEsMTcgQEAgcHJpdmF0ZToKIAogICAgIE5v
ZGVPcmlnaW4gY3VycmVudE5vZGVPcmlnaW4oKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBzZXQgdGhlIGZvckV4aXQgb3JpZ2luIG9ubHkgb24gdGhvc2Ugbm9kZXMgdGhhdCBj
YW4gZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NTIwNAogICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljOworICAgICAgICBDb2RlT3Jp
Z2luIGZvckV4aXQ7CisKICAgICAgICAgaWYgKG1fY3VycmVudFNlbWFudGljT3JpZ2luLmlzU2V0
KCkpCiAgICAgICAgICAgICBzZW1hbnRpYyA9IG1fY3VycmVudFNlbWFudGljT3JpZ2luOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBzZW1hbnRpYyA9IGN1cnJlbnRDb2RlT3JpZ2luKCk7Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRpYywgY3VycmVudENvZGVP
cmlnaW4oKSwgdHJ1ZSk7CisKKyAgICAgICAgZm9yRXhpdCA9IGN1cnJlbnRDb2RlT3JpZ2luKCk7
CisKKyAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGZvckV4aXQsIG1fZXhpdE9L
KTsKICAgICB9CiAgICAgCiAgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0YSh1bnNpZ25lZCB0YWtl
biwgdW5zaWduZWQgbm90VGFrZW4pCkBAIC02NzcsNiArNjg5LDE4IEBAIHByaXZhdGU6CiAgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCiAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgICAgIGFwcGVuZGVkICIsIG5vZGUsICIgIiwgR3JhcGg6Om9wTmFtZShu
b2RlLT5vcCgpKSwgIlxuIik7CiAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmQobm9kZSk7
CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAgICBtX2dyYXBoLCBub2RlLCBOb09wQ2xv
YmJlcml6ZSgpLAorICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXApIHsK
KyAgICAgICAgICAgICAgICAvLyBXcml0ZXMgdG8gU2lkZVN0YXRlIGFyZSBub3Qgb2JzZXJ2YWJs
ZS4KKyAgICAgICAgICAgICAgICBpZiAoaGVhcC5pc1N1YnR5cGVPZihTaWRlU3RhdGUpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAvLyBXZSBhc3N1bWUg
YWxsIG90aGVyIHdyaXRlcyBhcmUgb2JzZXJ2YWJsZSwgYW5kIHNvIGlmIHdlIHRyaWVkIHRvIGV4
aXQgYWZ0ZXIgdGhlbQorICAgICAgICAgICAgICAgIC8vIHdpdGggdGhlIHNhbWUgb3JpZ2luIHRo
ZW4gd2UnZCBjYXVzZSB0aGF0IGVmZmVjdCB0byByZXBlYXQuCisgICAgICAgICAgICAgICAgbV9l
eGl0T0sgPSBmYWxzZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBOb09wQ2xvYmJlcml6
ZSgpKTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgfQogICAgIApAQCAtOTAwLDYgKzkyNCw4
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7CiAgICAgLy8gVGhlIHNl
bWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2RlIGlmIGRpZmZlcmVudCBmcm9tIHRoZSBj
dXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9jdXJyZW50U2VtYW50aWNPcmlnaW47Cisg
ICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0IHJpZ2h0IG5vdy4KKyAgICBib29sIG1f
ZXhpdE9LIHsgZmFsc2UgfTsKIAogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50VW5kZWZpbmVk
OwogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVsbDsKQEAgLTEwNTMsNiArMTA3OSw3IEBA
IHByaXZhdGU6CiAKICNkZWZpbmUgTEFTVF9PUENPREUobmFtZSkgXAogICAgIG1fY3VycmVudElu
ZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKKyAgICBtX2V4aXRPSyA9IGZhbHNlOyBcCiAg
ICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwogCiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCkKQEAgLTEzNTYsNiArMTM4Myw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omlu
bGluZUNhbGwoTm9kZSogY2EKICAgICBjbGVhckNhY2hlcygpOyAvLyBSZXNldCBvdXIgc3RhdGUg
bm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUgb3V0ZXIgY29kZS4KICAgICAKICAgICBtX2N1cnJl
bnRJbmRleCA9IG9sZEluZGV4OworICAgIG1fZXhpdE9LID0gZmFsc2U7CiAgICAgCiAgICAgLy8g
SWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3
ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0
ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RCbG9jaygpKSB7CkBAIC0yOTAxLDEyICsyOTI5LDE1
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICBJbnRlcnBy
ZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAgICBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2luID0gbV9jdXJyZW50SW5k
ZXg7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJsb2NrLCBpbnRy
b2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwogICAgIC8vIHVzIHRvIHRy
YWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBhcmd1bWVudCBw
YXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdlIHNldCBleHBsaWNp
dGx5LgogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLmJsb2NrKDApICYmICFpbmxp
bmVDYWxsRnJhbWUoKSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJlc2l6ZShtX251
bUFyZ3VtZW50cyk7CisgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBTZXRBcmd1bWVudCBub2Rlcy4g
VGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRvcCBvZiBhbiBvcF9lbnRlciBzbwor
ICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRz
OyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAgICAgICAgIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC0yOTIyLDYgKzI5NTMsMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIAogICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24u
IEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0aGF0IHdlIGNhbiBleGl0CisgICAg
ICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIAogICAgICAgICBw
cm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5k
IG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCkBAIC0yOTk4LDcgKzMwMzMsNiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgICAgICAgICAgRnJv
emVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplKGNhY2hlZEZ1bmN0aW9uKTsKICAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhmcm96ZW4pLCBjYWxs
ZWUpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9wSW5mbyhmcm96
ZW4pKSk7CiAKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxKU0Z1
bmN0aW9uKj4oY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKK3sKKyAgICAvLyBUaGVyZSBhcmUgY2VydGFpbiBub2RlcyB3aG9zZSBlZmZl
Y3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRoZXkKKyAg
ICAvLyBub3JtYWxseSBjbG9iYmVyLgorICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNh
c2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBQdXRIaW50OgorICAg
IGNhc2UgS2lsbFN0YWNrOgorICAgICAgICAvLyBUaGVzZSBub2RlcyBhbGwgd3JpdGUgdG8gdGhl
IGV4aXQgc3RhdGUsIHNvIG9idmlvdXNseSwgdGhleSBjbG9iYmVyIGl0LgorICAgICAgICByZXR1
cm4gdHJ1ZTsKKworICAgIGNhc2UgU2V0TG9jYWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICAg
ICAgLy8gVGhlc2Ugbm9kZXMgd3JpdGUgdG8gdGhlIHN0YWNrLCBidXQgdGhleSBtYXkgb25seSBk
byBzbyBhZnRlciB3ZSBoYXZlIGFscmVhZHkgaGFkIGEgTW92SGludAorICAgICAgICAvLyBmb3Ig
dGhlIGV4YWN0IHNhbWUgdmFsdWUgYW5kIHRoZSBzYW1lIHN0YWNrIGxvY2F0aW9uLiBIZW5jZSwg
dGhleSBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0IG9uCisgICAgICAgIC8vIGV4aXQgc3RhdGUuCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIEZvciBhbGwg
b3RoZXIgbm9kZXMsIHdlIGp1c3QgY2FyZSBhYm91dCB3aGV0aGVyIHRoZXkgd3JpdGUgdG8gc29t
ZXRoaW5nIG90aGVyIHRoYW4gU2lkZVN0YXRlLgorICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNl
OworICAgICAgICBjbG9iYmVyaXplKAorICAgICAgICAgICAgZ3JhcGgsIG5vZGUsIE5vT3BDbG9i
YmVyaXplKCksCisgICAgICAgICAgICBbJl0gKGNvbnN0IEFic3RyYWN0SGVhcCYgaGVhcCkgewor
ICAgICAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBzdWNoIGEgdGhpbmcgYXMgYSBz
dHJpY3Qgc3VidHlwZSBvZiBTaWRlU3RhdGUuIFRoYXQncyB3aGF0IGFsbG93cworICAgICAgICAg
ICAgICAgIC8vIHVzIHRvIHVzZSBhIGZhc3QgIT0gY2hlY2ssIGJlbG93LgorICAgICAgICAgICAg
ICAgIEFTU0VSVCghaGVhcC5pc1N0cmljdFN1YnR5cGVPZihTaWRlU3RhdGUpKTsKKworICAgICAg
ICAgICAgICAgIGlmIChoZWFwICE9IFNpZGVTdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBOb09wQ2xvYmJlcml6ZSgp
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAorI2RlZmlu
ZSBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOwor
CisvLyBBIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mIHdoZXRoZXIgdGhlIG5vZGUgd2ls
bCBwZXJmb3JtIGFuIGVmZmVjdCB0aGF0IG1lYW5zIHRoYXQgd2UgY2FuIG5vCisvLyBsb25nZXIg
ZXhpdCB0byB0aGlzIG5vZGUncyBleGl0IG9yaWdpbi4KKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0
ZShHcmFwaCYsIE5vZGUqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY3
LDYgKzY2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5k
ZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOwogCisg
ICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKICAgICAgICAg
Y2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKIAogICAgICAgICBUcmFuc2l0aW9u
KiB0cmFuc2l0aW9uID0gMDsKQEAgLTcxMyw3ICs3MTQsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjkyMSBvcgog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
MjkyNC4KICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBP
cEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLndpdGhJbnZhbGlkRXhpdCgp
LCBPcEluZm8odHJhbnNpdGlvbiksCisgICAgICAgICAgICAgICAgY2hpbGRFZGdlKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYzNyw2ICsxNjM3LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgLy8gTk9URTogQW55IHR5
cGUgY2hlY2tzIHdlIHB1dCBoZXJlIG1heSBnZXQgaG9pc3RlZCBieSBmaXh1cENoZWNrc0luQmxv
Y2soKS4gU28sIGlmIHdlCisgICAgICAgICAgICAgICAgLy8gYWRkIG5ldyB0eXBlIGNoZWNraW5n
IHVzZSBraW5kIGZvciBTZXRMb2NhbHMsIHdlIG5lZWQgdG8gbW9kaWZ5IHRoYXQgY29kZSBhcyB3
ZWxsLgorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUt
PmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgog
ICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIxMTAsOCArMjExMywxNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxl
KTsKICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2Nr
ID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7
Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXhGb3JDaGVja3MgPSBVSU5UX01BWDsKKyAgICAgICAgTm9kZU9y
aWdpbiBvcmlnaW5Gb3JDaGVja3M7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2Nr
ID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAg
ICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKworICAgICAg
ICAgICAgLy8gSWYgdGhpcyBpcyBhIG5vZGUgYXQgd2hpY2ggd2UgY291bGQgZXhpdCwgdGhlbiBz
YXZlIGl0cyBpbmRleC4gSWYgbm9kZXMgYWZ0ZXIgdGhpcyBvbmUKKyAgICAgICAgICAgIC8vIGNh
bm5vdCBleGl0LCB0aGVuIHdlIHdpbGwgaG9pc3QgY2hlY2tzIHRvIGhlcmUuCisgICAgICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLmV4aXRPSykgeworICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hl
Y2tzID0gaW5kZXhJbkJsb2NrOworICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9IG5v
ZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gRmlyc3QsIHRyeSB0
byByZWxheCB0aGUgcmVwcmVzZW50YXRpb25hbCBkZW1hbmRzIG9mIGVhY2ggbm9kZSwgaW4gb3Jk
ZXIgdG8gaGF2ZQogICAgICAgICAgICAgLy8gZmV3ZXIgY29udmVyc2lvbnMuCkBAIC0yMTc1LDIx
ICsyMTg3LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAg
ICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogcmVzdWx0
ID0gbnVsbHB0cjsKLSAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlZGdl
LnVzZUtpbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5pc051bWJlckNvbnN0YW50
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVDb25zdGFudCwgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY0J5dGVj
b2RlRG91YmxlLCBEb3VibGVDb25zdGFudCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5mcmVlemUoanNEb3VibGVOdW1iZXIoZWRn
ZS0+YXNOdW1iZXIoKSkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVk
Z2UtPmhhc0ludDUyUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNr
cywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVzZSkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBVc2VLaW5kIHVzZUtpbmQ7CkBAIC0yMjAxLDUzICsyMjEzLDg4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQgPSBOb3RDZWxsVXNlOwogCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNw
ZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERv
dWJsZVJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlKGVkZ2Uubm9kZSgpLCB1c2VLaW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5pc01hY2hpbmVJ
bnRDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJbnQ1MkNvbnN0YW50LCBub2RlLT5vcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVj
TWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnQoKSkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFj
aGluZUludCwgSW50NTJSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgbm9kZS0+
b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgp
LCBEb3VibGVSZXBNYWNoaW5lSW50VXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZUludDMyRm9yQXJpdGhtZXRpYygpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJ
bnQzMiwgSW50NTJSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNJbnQzMiwgSW50NTJSZXAsIG5vZGUtPm9yaWdpbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgSW50MzJV
c2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJ
bnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEZvckNoZWNrcywgU3BlY01hY2hpbmVJbnQsIEludDUyUmVwLCBub2RlLT5vcmlnaW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIE1hY2hpbmVJ
bnRVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlLT5oYXNE
b3VibGVSZXN1bHQoKSAmJiAhZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3Vi
bGVSZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3VibGUsIFZhbHVlUmVwLCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0
ZWNvZGVEb3VibGUsIFZhbHVlUmVwLCBub2RlLT5vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJsZVJlcFVzZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGUsIFZh
bHVlUmVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywg
U3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGUsIFZhbHVlUmVwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIEludDUyUmVw
VXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gSXQncyByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHRoaXMgbm9kZSBjYW5ub3QgZG8gdHlwZSBj
aGVja3MsIGJ1dCB3ZSBub3cgaGF2ZSBhCisgICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgY2hl
Y2sgb24gdGhpcyBub2RlLiBXZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0aGUgZ2VuZXJhbCBmb3Jt
IG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmxlbS4gSXQgb25seSBhcmlzZXMg
d2hlbiBCeXRlQ29kZVBhcnNlciBlbWl0cyBhbiBpbW1lZGlhdGUgU2V0TG9jYWwsIHJhdGhlcgor
ICAgICAgICAgICAgICAgICAgICAvLyB0aGFuIGEgZGVsYXllZCBvbmUuIFNvLCB3ZSBvbmx5IHdv
cnJ5IGFib3V0IHRob3NlIGNoZWNrcyB0aGF0IHdlIG1heSBoYXZlIHB1dCBvbgorICAgICAgICAg
ICAgICAgICAgICAvLyBhIFNldExvY2FsLiBOb3RlIHRoYXQgImluZGV4Rm9yQ2hlY2tzICE9IGlu
ZGV4SW5CbG9jayIgaXMganVzdCBhbm90aGVyIHdheSBvZgorICAgICAgICAgICAgICAgICAgICAv
LyBzYXlpbmcgIiFub2RlLT5vcmlnaW4uZXhpdE9LIi4KKyAgICAgICAgICAgICAgICAgICAgaWYg
KGluZGV4Rm9yQ2hlY2tzICE9IGluZGV4SW5CbG9jayAmJiBtYXlIYXZlVHlwZUNoZWNrKGVkZ2Uu
dXNlS2luZCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVXNlS2luZCBrbm93blVzZUtp
bmQgPSBVbnR5cGVkVXNlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNl
S2luZCA9IEtub3duSW50MzJVc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga25vd25Vc2VLaW5kID0gS25vd25DZWxsVXNlOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFu
VXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IEtub3duQm9v
bGVhblVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcy53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwgZWRnZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0VXNl
S2luZChrbm93blVzZUtpbmQpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkw
LDI4IEBAIGlubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm8KICAgICByZXR1
cm4gVW50eXBlZFVzZTsKIH0KIAoraW5saW5lIFVzZUtpbmQgdW5jaGVja2VkVXNlS2luZEZvcihG
bHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERl
YWRGbHVzaDoKKyAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgIGNhc2UgQ29uZmxpY3RpbmdG
bHVzaDoKKyAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CisgICAgY2FzZSBGbHVzaGVkQ2VsbDoK
KyAgICAgICAgcmV0dXJuIEtub3duQ2VsbFVzZTsKKyAgICBjYXNlIEZsdXNoZWRJbnQzMjoKKyAg
ICAgICAgcmV0dXJuIEtub3duSW50MzJVc2U7CisgICAgY2FzZSBGbHVzaGVkSW50NTI6CisgICAg
ICAgIHJldHVybiBJbnQ1MlJlcFVzZTsKKyAgICBjYXNlIEZsdXNoZWREb3VibGU6CisgICAgICAg
IHJldHVybiBEb3VibGVSZXBVc2U7CisgICAgY2FzZSBGbHVzaGVkQm9vbGVhbjoKKyAgICAgICAg
cmV0dXJuIEtub3duQm9vbGVhblVzZTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gVW50eXBlZFVzZTsKK30KKwogaW5saW5lIFNwZWN1bGF0ZWRU
eXBlIHR5cGVGaWx0ZXJGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQogewogICAgIHJldHVybiB0eXBl
RmlsdGVyRm9yKHVzZUtpbmRGb3IoZm9ybWF0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDkgQEAKICNp
bmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Jsb2NrV29ya2xp
c3QuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNF
eGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHTWF5RXhp
dC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCIKICNpbmNsdWRlICJG
dWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
aCIKQEAgLTEwMSw4ICsxMDMsMTQgQEAgc3RhdGljIHZvaWQgcHJpbnRXaGl0ZVNwYWNlKFByaW50
U3RyZWFtJgogICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0KIAotYm9vbCBHcmFwaDo6ZHVtcENv
ZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2
aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCogY29udGV4dCkKK2Jvb2wg
R3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZSomIHByZXZpb3VzTm9kZVJlZiwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0
KiBjb250ZXh0KQogeworICAgIGlmICghY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIE5vZGUqIHByZXZpb3VzTm9kZSA9IHByZXZp
b3VzTm9kZVJlZjsKKyAgICBwcmV2aW91c05vZGVSZWYgPSBjdXJyZW50Tm9kZTsKKwogICAgIGlm
ICghcHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC0zNDUsMTIg
KzM1MywxOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlzdER1bXAocmVhZHMuZGlyZWN0KCks
ICIsIikpOwogICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGlyZWN0KCksICIsIikpOworICAgIEV4
aXRNb2RlIGV4aXRNb2RlID0gbWF5RXhpdCgqdGhpcywgbm9kZSk7CisgICAgaWYgKGV4aXRNb2Rl
ICE9IERvZXNOb3RFeGl0KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIGV4aXRNb2RlKTsKKyAg
ICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUoKnRoaXMsIG5vZGUpKQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJDbG9iYmVyc0V4aXQiKTsKICAgICBpZiAobm9kZS0+b3JpZ2luLmlzU2V0KCkpIHsK
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+b3JpZ2luLnNlbWFudGljLmJ5
dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljICE9IG5vZGUt
Pm9yaWdpbi5mb3JFeGl0KQorICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljICE9IG5v
ZGUtPm9yaWdpbi5mb3JFeGl0ICYmIG5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpCiAgICAg
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGl0OiAiLCBub2RlLT5vcmlnaW4uZm9yRXhpdCk7
CiAgICAgfQotICAgIAorICAgIGlmICghbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiRXhpdEludmFsaWQiKTsKICAgICBvdXQucHJpbnQoIikiKTsKIAogICAg
IGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpICYmIG5vZGUtPnRyeUdldFZh
cmlhYmxlQWNjZXNzRGF0YSgpKQpAQCAtNDU1LDcgKzQ2OSw3IEBAIHZvaWQgR3JhcGg6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgb3V0LnByaW50KCIgIEFyZ3VtZW50czog
IiwgbGlzdER1bXAobV9hcmd1bWVudHMpLCAiXG4iKTsKICAgICBvdXQucHJpbnQoIlxuIik7CiAg
ICAgCi0gICAgTm9kZSogbGFzdE5vZGUgPSAwOworICAgIE5vZGUqIGxhc3ROb2RlID0gbnVsbHB0
cjsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7CiAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0KCk7CiAgICAgICAgIGlm
ICghYmxvY2spCkBAIC00OTYsNyArNTEwLDYgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBEdW1wQwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4ob3V0LCAiIiwgbGFzdE5vZGUs
IGJsb2NrLT5hdChpKSwgY29udGV4dCk7CiAgICAgICAgICAgICBkdW1wKG91dCwgIiIsIGJsb2Nr
LT5hdChpKSwgY29udGV4dCk7Ci0gICAgICAgICAgICBsYXN0Tm9kZSA9IGJsb2NrLT5hdChpKTsK
ICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgU3RhdGVzOiAiLCBibG9jay0+Y2ZhQnJh
bmNoRGlyZWN0aW9uLCAiLCAiLCBibG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWls
KTsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhRGlkRmluaXNoKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTAsNyArMjEwLDcgQEAg
cHVibGljOgogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2YgdGhlIGdpdmVuIG5vZGUg
YXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQogICAgIC8vIHByZWNlZGluZyBu
b2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQuCi0gICAgYm9vbCBkdW1w
Q29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogcHJldmlv
dXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqKTsKKyAgICBib29sIGR1bXBD
b2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiYgcHJldmlv
dXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqKTsKIAogICAgIEFkZFNwZWN1
bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkLCBib29sIGxlZnRTaG91bGRT
cGVjdWxhdGVJbnQzMiwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUludDMyLCBQcmVkaWN0aW9u
UGFzcyBwYXNzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5
RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlF
eGl0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzksMTAgQEAgcHJpdmF0ZToK
IAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
IHsKKyAgICBFeGl0TW9kZSByZXN1bHQgPSBEb2VzTm90RXhpdDsKKyAgICAKICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICAvLyBUaGlzIGlzIGEgY2FyZWZ1bGx5IGN1cmF0ZWQgbGlzdCBv
ZiBub2RlcyB0aGF0IGRlZmluaXRlbHkgZG8gbm90IGV4aXQuIFdlIHRyeSB0byBiZSB2ZXJ5CiAg
ICAgLy8gY29uc2VydmF0aXZlIHdoZW4gbWFpbnRhaW5pbmcgdGhpcyBsaXN0LCBiZWNhdXNlIGFk
ZGluZyBuZXcgbm9kZSB0eXBlcyB0byBpdCBkb2Vzbid0CkBAIC0xMTYsMTggKzExOCw1MSBAQCBi
b29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgRG91YmxlUmVw
OgogICAgIGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBWYWx1ZVJlcDoKKyAgICBjYXNlIEV4dHJh
Y3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICBjYXNlIE5vdGlmeVdy
aXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBicmVhazsKLSAgICAgICAgCisK
KyAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAgcmVzdWx0ID0gRXhpdHNGb3JFeGNlcHRpb25zOwor
ICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIElmIGluIGRvdWJ0LCBy
ZXR1cm4gdHJ1ZS4KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBFeGl0czsK
ICAgICB9CiAKICAgICBFZGdlTWF5RXhpdCBmdW5jdG9yOwogICAgIERGR19OT0RFX0RPX1RPX0NI
SUxEUkVOKGdyYXBoLCBub2RlLCBmdW5jdG9yKTsKLSAgICByZXR1cm4gZnVuY3Rvci5yZXN1bHQo
KTsKKyAgICBpZiAoZnVuY3Rvci5yZXN1bHQoKSkKKyAgICAgICAgcmVzdWx0ID0gRXhpdHM7Cisg
ICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpdE1vZGUgbW9kZSkKK3sKKyAgICBzd2l0
Y2ggKG1vZGUpIHsKKyAgICBjYXNlIERvZXNOb3RFeGl0OgorICAgICAgICBvdXQucHJpbnQoIkRv
ZXNOb3RFeGl0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRzRm9yRXhjZXB0aW9u
czoKKyAgICAgICAgb3V0LnByaW50KCJFeGl0c0ZvckV4Y2VwdGlvbnMiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgRXhpdHM6CisgICAgICAgIG91dC5wcmludCgiRXhpdHMiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgJKHJldmlzaW9uIDE4ODg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
NiwxMCArMzYsNDggQEAgc3RydWN0IE5vZGU7CiAvLyBBICp2ZXJ5KiBjb25zZXJ2YXRpdmUgYXBw
cm94aW1hdGlvbiBvZiB3aGV0aGVyIG9yIG5vdCBhIG5vZGUgY291bGQgcG9zc2libHkgZXhpdC4g
VXN1YWxseQogLy8gcmV0dXJucyB0cnVlIGV4Y2VwdCBpbiBjYXNlcyB3aGVyZSB3ZSBvYnZpb3Vz
bHkgZG9uJ3QgZXhwZWN0IGFuIGV4aXQuCiAKLWJvb2wgbWF5RXhpdChHcmFwaCYsIE5vZGUqKTsK
K2VudW0gRXhpdE1vZGUgeworICAgIC8vIFRoZSBub2RlIGRvZXMgbm90IGV4aXQgYXQgYWxsLiBU
aGlzIG1lYW5zIHRoYXQgaXQncyBsZWdhbCB0byBlbGltaW5hdGUgdGhlIGZpcnN0IHN0b3JlIGlu
IGEKKyAgICAvLyBwcm9ncmFtIGxpa2U6CisgICAgLy8KKyAgICAvLyBnbG9iYWwgPSAxIC8vIGZp
cnN0IHN0b3JlCisgICAgLy8gRG9lc05vdEV4aXQoKTsgLy8gbGV0J3MgYXNzdW1lIHRoYXQgdGhp
cyBhbHNvIGRvZXNuJ3QgcmVhZCAiZ2xvYmFsIgorICAgIC8vIGdsb2JhbCA9IDIgLy8gc2Vjb25k
IHN0b3JlCisgICAgLy8KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIGVsaW1pbmF0ZSB0aGUgZmlyc3Qg
b25lIHNpbmNlIG5vYm9keSB3aWxsIHNlZSBpdDsgdGhlIHNlY29uZCBzdG9yZSBpcyBhbHdheXMK
KyAgICAvLyBleGVjdXRlZCByaWdodCBhZnRlci4KKyAgICBEb2VzTm90RXhpdCwKKworICAgIC8v
IFRoZSBub2RlIHdpbGwgZXhpdCwgYnV0IG9ubHkgYnkgcHJvcGVybHkgdGhyb3dpbmcgZXhjZXB0
aW9ucy4gQSBwcm9wZXIgZXhjZXB0aW9uIHRocm93IHdpbGwKKyAgICAvLyBkaXZlcnQgZXhlY3V0
aW9uIHRvIHRoZSBtYXRjaGluZyBvcF9jYXRjaCBhbmQgd2lsbCBub3QgcmVleGVjdXRlIHRoZSBl
eGl0IG9yaWdpbi4gVGhpcyBtZWFucworICAgIC8vIHRoYXQgdGhlIHN0b3JlIGVsaW1pbmF0aW9u
IG9wdGltaXphdGlvbiBhYm92ZSB3b3VsZCBiZSBpbGxlZ2FsLCBidXQgdGhlIGZvbGxvd2luZyB3
b3VsZCBiZSBPSzoKKyAgICAvLworICAgIC8vIFNpZGVFZmZlY3QoLi4uLCBleGl0OiBiYyM0MikK
KyAgICAvLyBFeGl0c0ZvckV4Y2VwdGlvbnMoLi4uLCBleGl0OiAjYmM0MiwgRXhpdEludmFsaWQp
CisgICAgLy8KKyAgICAvLyBJbiBwYXJ0aWN1bGFyLCBpdCdzIE9LIGZvciBhIG5vZGUgdGhhdCBy
ZXBvcnRzIEV4aXRzRm9yRXhjZXB0aW9ucyB0byBiZSBleGVjdXRlZCBpbiBhIGNvbnRleHQKKyAg
ICAvLyB3aGVyZSAhTm9kZTo6b3JpZ2luLmV4aXRPSy4gVGhhdCdzIGJlY2F1c2UgdGhpcyBub2Rl
IHdpbGwgbm90IGV4aXQgaW4gYSBtYW5uZXIgdGhhdCBjb3VsZCBsZWFkCisgICAgLy8gdG8gdGhl
IHJlZXhlY3V0aW9uIG9mIFNpZGVFZmZlY3QoKS4KKyAgICBFeGl0c0ZvckV4Y2VwdGlvbnMsCisK
KyAgICAvLyBUaGUgbm9kZSB3aWxsIGV4aXQgdG8gdGhlIGV4aXQgb3JpZ2luLiBUaGlzIG1lYW5z
IHRoYXQgd2UgY2Fubm90IGRvIHN0b3JlIGVsaW1pbmF0aW9uIGxpa2UgZm9yCisgICAgLy8gRG9l
c05vdEV4aXQgYW5kIGFsc28gd2UgY2Fubm90IHBsYWNlIHRoaXMgbm9kZSBpbiBhbiBFeGl0SW52
YWxpZCBjb250ZXh0LCBzaW5jZSB0aGlzIHdpbGwgZXhpdAorICAgIC8vIGluIGEgbWFubmVyIHRo
YXQgd2lsbCBjYXVzZSB0aGUgcmVleGVjdXRpb24gb2YgYWxsIHByZXZpb3VzIG9wZXJhdGlvbnMg
d2l0aGluIHRoaXMgZXhpdCBvcmlnaW4uCisgICAgRXhpdHMKK307CisKK0V4aXRNb2RlIG1heUV4
aXQoR3JhcGgmLCBOb2RlKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkRGRzo6RXhpdE1vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwog
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAjZW5kaWYgLy8gREZHTWF5RXhpdF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTW92SGludFJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxp
bmtlZExvY2FsKCkpID0gRXBvY2goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkpCisgICAgICAgICAgICBpZiAobWF5
RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKICAgICAgICAgICAgICAgICBjdXJy
ZW50RXBvY2guYnVtcCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUluZGV4
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDEzIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAK
ICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUu
aCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBHcmFwaDsKK3N0
cnVjdCBOb2RlOworCiBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgTm9kZU9yaWdpbigpIHsgfQog
ICAgIApAQCAtNDgsNyArNTIsNyBAQCBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgICAgIHJldHVy
biBzZW1hbnRpYy5pc1NldCgpOwogICAgIH0KICAgICAKLSAgICBOb2RlT3JpZ2luIHdpdGhTZW1h
bnRpYyhDb2RlT3JpZ2luIHNlbWFudGljKQorICAgIE5vZGVPcmlnaW4gd2l0aFNlbWFudGljKENv
ZGVPcmlnaW4gc2VtYW50aWMpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWlzU2V0KCkpCiAg
ICAgICAgICAgICByZXR1cm4gTm9kZU9yaWdpbigpOwpAQCAtNTgsNyArNjIsMjIgQEAgc3RydWN0
IE5vZGVPcmlnaW4gewogICAgICAgICAgICAgcmVzdWx0LnNlbWFudGljID0gc2VtYW50aWM7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgTm9kZU9yaWdpbiB3aXRoSW52YWxp
ZEV4aXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsK
KyAgICAgICAgcmVzdWx0LmV4aXRPSyA9IGZhbHNlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KICAgICAKKyAgICBOb2RlT3JpZ2luIGZvckluc2VydGluZ0FmdGVyKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIE5vZGVPcmlnaW4gcmVzdWx0ID0g
KnRoaXM7CisgICAgICAgIGlmIChyZXN1bHQuZXhpdE9LICYmIGNsb2JiZXJzRXhpdFN0YXRlKGdy
YXBoLCBub2RlKSkKKyAgICAgICAgICAgIHJlc3VsdC5leGl0T0sgPSBmYWxzZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKICAgICAvLyBVc2VkIGZvciBkZXRlcm1pbmluZyB3aGF0
IGJ5dGVjb2RlIHRoaXMgY2FtZSBmcm9tLiBUaGlzIGlzIGltcG9ydGFudCBmb3IKICAgICAvLyBk
ZWJ1Z2dpbmcsIGV4Y2VwdGlvbnMsIGFuZCBldmVuIGJhc2ljIGV4ZWN1dGlvbiBzZW1hbnRpY3Mu
CiAgICAgQ29kZU9yaWdpbiBzZW1hbnRpYzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5
cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04OSw3ICs4OSw5IEBA
IHB1YmxpYzoKICAgICAgICAgLy8gZXhlY3V0aW9uQ291bnQgdG8gdXNlIGJlc3QganVkZ2VtZW50
IC0gYnV0IHRoYXQgc2VlbXMgdW5uZWNlc3Nhcnkgc2luY2Ugd2Uga25vdyBmb3IKICAgICAgICAg
Ly8gc3VyZSB3aGF0IHRoZSBleGVjdXRpb25Db3VudCBzaG91bGQgYmUgaW4gdGhpcyBjYXNlLgog
ICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0aW9uU2V0Lmluc2VydCgwLCAxKTsK
LSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSB0YXJnZXQtPmF0KDApLT5vcmlnaW47CisKKyAg
ICAgICAgLy8gV2UnZCByZWFsbHkgbGlrZSB0byB1c2UgYW4gdW5zZXQgb3JpZ2luLCBidXQgVGhy
ZWFkZWRDUFMgd29uJ3QgYWxsb3cgdGhhdC4KKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSBO
b2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIGZhbHNlKTsKICAgICAgICAg
CiAgICAgICAgIFZlY3RvcjxOb2RlKj4gbG9jYWxzKGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lz
dGVycyk7CiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9u
dW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKQEAgLTEwNiw2ICsxMDgsMTAgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkpOwogICAgICAgICB9CiAKKyAg
ICAgICAgLy8gTm93IHVzZSB0aGUgb3JpZ2luIG9mIHRoZSB0YXJnZXQsIHNpbmNlIGl0J3Mgbm90
IE9LIHRvIGV4aXQsIGFuZCB3ZSB3aWxsIHByb2JhYmx5IGhvaXN0CisgICAgICAgIC8vIHR5cGUg
Y2hlY2tzIHRvIGhlcmUuCisgICAgICAgIG9yaWdpbiA9IHRhcmdldC0+YXQoMCktPm9yaWdpbjsK
KyAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNl
bGluZS0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBOb2RlKiBv
bGROb2RlID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpOwogICAg
ICAgICAgICAgaWYgKCFvbGROb2RlKSB7CkBAIC0xMTcsNyArMTIzLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKSkpOwogICAg
ICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0gPSBub2RlOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNlbGlu
ZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKICAgICAgICAgICAgIE5vZGUqIHBy
ZXZpb3VzSGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKTsKICAgICAg
ICAgICAgIGlmICghcHJldmlvdXNIZWFkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxNCArMzYsMTQgQEAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogT1NSRXhpdDo6T1NSRXhpdChFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCBz
dHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKLSAgICA6IE9TUkV4aXRCYXNlKGtp
bmQsIGppdC0+bV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgaml0LT5tX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZSkKKyAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9vcmlnaW4uZm9yRXhp
dCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYykKICAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVl
U291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV9wYXRj
aGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkK
ICAgICAsIG1fc3RyZWFtSW5kZXgoc3RyZWFtSW5kZXgpCiB7Ci0gICAgQVNTRVJUKG1fY29kZU9y
aWdpbi5pc1NldCgpKTsKKyAgICBERkdfQVNTRVJUKGppdC0+bV9qaXQuZ3JhcGgoKSwgaml0LT5t
X2N1cnJlbnROb2RlLCBqaXQtPm1fb3JpZ2luLmV4aXRPSyk7CiB9CiAKIHZvaWQgT1NSRXhpdDo6
c2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBjaGVj
aykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJl
dmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmpl
Y3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRp
b25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk3LDcgKzE2OTcsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlu
cyhub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBub2RlLT5vcmln
aW4sIG1fYm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3Jl
YXRlSGludChtX2dyYXBoLCBub2RlLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksIG1fYm90dG9t
KSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKQEAgLTE3NTAs
OCArMTc1MCw5IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG93ZXIg
PSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQo
bm9kZUluZGV4ICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVh
dGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgbm9kZVZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlv
bi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwgbm9k
ZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgIFsm
XSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIC0+IE5vZGUqIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbik7CkBAIC0xOTA1LDcg
KzE5MDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4LCBl
bnRyeS5rZXkuY3JlYXRlSGludChtX2dyYXBoLCBvcmlnaW4sIG1hdGVyaWFsaXphdGlvbikpOwor
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgZW50cnkua2V5LmNyZWF0ZUhpbnQobV9ncmFwaCwg
b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLCBtYXRlcmlhbGl6YXRpb24pKTsKICAgICAgICAgfQog
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXplKCk7
IGktLTspIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtYXlFeGl0KG1f
Z3JhcGgsIG5vZGUpKSB7CisgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSAh
PSBEb2VzTm90RXhpdCkgewogICAgICAgICAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7CiAg
ICAgICAgICAgICAgICAgbGFzdEV4aXRpbmdJbmRleCA9IG5vZGVJbmRleDsKICAgICAgICAgICAg
IH0KQEAgLTE2MCwxMCArMTYwLDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGhhdmUgZXhhY3QgcmVmIGNvdW50cywgc28gY3JlYXRpbmcgYSBuZXcgdXNlIG1lYW5zIHRo
YXQgd2UgaGF2ZSB0bwogICAgICAgICAgICAgICAgICAgICAvLyBpbmNyZW1lbnQgdGhlIHJlZiBj
b3VudC4KICAgICAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+cG9zdGZpeFJlZigpOworCisg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGxhc3RFeGl0aW5nTm9kZSA9IGJsb2NrLT5hdChsYXN0
RXhpdGluZ0luZGV4KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0
RXhpdGluZ0luZGV4ICsgMSwgU3BlY05vbmUsIFBoYW50b20sCi0gICAgICAgICAgICAgICAgICAg
ICAgICBibG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCktPm9yaWdpbiwga2lsbGVkTm9kZS0+ZGVm
YXVsdEVkZ2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RXhpdGluZ05vZGUtPm9y
aWdpbi5mb3JJbnNlcnRpbmdBZnRlcihtX2dyYXBoLCBsYXN0RXhpdGluZ05vZGUpLAorICAgICAg
ICAgICAgICAgICAgICAgICAga2lsbGVkTm9kZS0+ZGVmYXVsdEVkZ2UoKSk7CiAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5vZmZzZXQoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gZmFsc2U7IC8vIEtpbGxT
dGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzQ2LDcgKzM0NywxMSBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBzc2FWYXJp
YWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKICAgICAgICAgICAgICAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtzc2FWYXJpYWJsZS0+
aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZvcm1hdCA9IHZhcmlh
YmxlLT5mbHVzaEZvcm1hdCgpOwotICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQg
PSB1c2VLaW5kRm9yKGZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIHVz
ZSBhbiB1bmNoZWNrZWQgdXNlIGtpbmQgYmVjYXVzZSB0aGUgU2V0TG9jYWwgd2FzIHR1cm5lZCBp
bnRvIGEgQ2hlY2suCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gdXNlIGFuIHVu
Y2hlY2tlZCB1c2UgYmVjYXVzZSBhdCBsZWFzdCBzb21ldGltZXMsIHRoZSBlbmQgb2YgdGhlIGJs
b2NrCisgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCisgICAgICAgICAgICAg
ICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KTsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5zZXJ0aW9uUG9pbnQs
IFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VChKSVRDb21waWwKICAgICAsIG1faW50ZXJwcmV0ZXIobV9qaXQuZ3JhcGgoKSwgbV9zdGF0ZSkK
ICAgICAsIG1fc3RyZWFtKCZqaXQuaml0Q29kZSgpLT52YXJpYWJsZUV2ZW50U3RyZWFtKQogICAg
ICwgbV9taW5pZmllZEdyYXBoKCZqaXQuaml0Q29kZSgpLT5taW5pZmllZERGRykKLSAgICAsIG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMoZmFsc2UpCiB7CiB9CiAKQEAgLTE5Niw3ICsxOTUsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBmdXp6SnVt
cCA9IGVtaXRPU1JFeGl0RnV6ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlzU2V0KCkpIHsK
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGp1bXBzVG9GYWlsOwpAQCAtMjEyLDcgKzIx
MCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBp
ZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNr
aW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIGZ1
enpKdW1wID0gZW1pdE9TUkV4aXRGdXp6Q2hlY2soKTsKICAgICBpZiAoZnV6ekp1bXAuaXNTZXQo
KSkgewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgbXlKdW1wc1RvRmFpbDsKQEAgLTIy
OCw3ICsyMjUsNiBAQCBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzCiB7
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm4gT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlcigpOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2ppdC5qaXRDb2RlKCktPm9zckV4aXQuc2l6
ZSgpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKCk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5t
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6
ZSgpKSk7CkBAIC0yMzcsMTkgKzIzMywxNiBAQCBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1
bGF0aXZlSklUOjpzCiAKIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jYW5FeGl0KTsKICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVl
U291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBF
ZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiB7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxh
dGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWls
KTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgY29uc3QgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKIHsKLSAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHNwZWN1bGF0aW9uQ2hlY2so
a2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCksIGp1bXBzVG9GYWlsKTsKIH0KIApA
QCAtMjU3LDcgKzI1MCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2so
RXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NF
UlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHVuc2lnbmVk
IHJlY292ZXJ5SW5kZXggPSBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3Zl
cnkocmVjb3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKGp1bXBUb0ZhaWwpOwogICAg
IG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwg
dGhpcywgbV9zdHJlYW0tPnNpemUoKSwgcmVjb3ZlcnlJbmRleCkpOwpAQCAtMjY1LDcgKzI1Nyw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIAogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJU
KG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlv
bkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsLCBy
ZWNvdmVyeSk7CiB9CiAKQEAgLTI3Myw3ICsyNjQsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0SW52YWxpZGF0aW9uUG9pCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICBy
ZXR1cm47Ci0gICAgQVNTRVJUKG1fY2FuRXhpdCk7CiAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5m
byYgaW5mbyA9IG1faml0LmFwcGVuZEV4aXRJbmZvKEpJVENvbXBpbGVyOjpKdW1wTGlzdCgpKTsK
ICAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdCgKICAgICAgICAgVW5j
b3VudGFibGVJbnZhbGlkYXRpb24sIEpTVmFsdWVTb3VyY2UoKSwKQEAgLTI4Niw3ICsyNzYsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0SW52YWxpZGF0aW9uUG9pCiAKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2RlKQogewotICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICByZXR1cm47CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlUmVn
cywgbm9kZSwgbV9qaXQuanVtcCgpKTsKQEAgLTI5Nyw3ICsyODYsNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFs
dWVSZWdzLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihr
aW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5ub2RlKCkpOwogfQogCkBAIC0xNDY3LDkgKzE0NTUs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAg
ICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAogICAgICAgICAgICAgICAgIGZvcm1hdCkp
OwogICAgIH0KLSAgICAKLSAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdp
bigpOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigpOworCisg
ICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CiAgICAgCiAgICAgZm9yIChtX2luZGV4SW5CbG9j
ayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgbV9ibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2Nr
KSB7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2Jsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7
CkBAIC0xNDgxLDE1ICsxNDY4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJy
ZW50QmxvY2sKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChB
U1NFUlRfRElTQUJMRUQpCi0gICAgICAgICAgICBtX2NhbkV4aXQgPSB0cnVlOyAvLyBFc3NlbnRp
YWxseSBkaXNhYmxlIHRoZSBhc3NlcnRpb25zLgotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2NhbkV4aXQgPSBtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpOwotICAgICAg
ICAKICAgICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4ZWN1dGluZygpOwogICAgICAgICBtX2pp
dC5zZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0
VGFyZ2V0ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZvckV4aXQ7Ci0gICAgICAgIG1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljOworICAg
ICAgICBtX29yaWdpbiA9IG1fY3VycmVudE5vZGUtPm9yaWdpbjsKKyAgICAgICAgaWYgKHZhbGlk
YXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBtX29yaWdpbi5leGl0T0sgJj0gbWF5RXhpdCht
X2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKSA9PSBFeGl0czsKICAgICAgICAgbV9sYXN0R2Vu
ZXJhdGVkTm9kZSA9IG1fY3VycmVudE5vZGUtPm9wKCk7CiAgICAgICAgIAogICAgICAgICBBU1NF
UlQobV9jdXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUoKSk7CkBAIC0xNTM2LDkgKzE1MTksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50Tm9k
ZSk7Ci0gICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IHRydWU7Ci0gICAgbV9jb2RlT3Jp
Z2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUgPSBDb2RlT3JpZ2luKDApOworICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2Rl
T3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKIAogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CiAgICAgICAgIE5v
ZGUqIG5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYXJndW1lbnRzW2ldOwpAQCAtMTYwMSw3ICsxNTgy
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICB9
CiAjZW5kaWYKICAgICB9Ci0gICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyA9IGZhbHNlOwor
CisgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CiB9CiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDU4LDcgKzI0NTgsNiBA
QCBwdWJsaWM6CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKICAgICBOb2RlKiBtX2N1cnJlbnRO
b2RlOwogICAgIE5vZGVUeXBlIG1fbGFzdEdlbmVyYXRlZE5vZGU7Ci0gICAgYm9vbCBtX2NhbkV4
aXQ7CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5
c2ljYWwgcmVnaXN0ZXIgbWFwcy4KICAgICBWZWN0b3I8R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dl
bmVyYXRpb25JbmZvOwpAQCAtMjQ3OSw4ICsyNDc4LDcgQEAgcHVibGljOgogICAgIH07CiAgICAg
VmVjdG9yPEJyYW5jaFJlY29yZCwgOD4gbV9icmFuY2hlczsKIAotICAgIENvZGVPcmlnaW4gbV9j
b2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlOworICAgIE5vZGVPcmlnaW4gbV9vcmlnaW47CiAgICAgCiAgICAgSW5QbGFjZUFi
c3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBBYnN0cmFjdEludGVycHJldGVyPEluUGxhY2VBYnN0
cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwpAQCAtMjQ4OCw4ICsyNDg2LDYgQEAgcHVibGljOgog
ICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0qIG1fc3RyZWFtOwogICAgIE1pbmlmaWVkR3JhcGgqIG1f
bWluaWZpZWRHcmFwaDsKICAgICAKLSAgICBib29sIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXM7
Ci0gICAgCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTbG93UGF0aEdlbmVyYXRvcj4sIDg+
IG1fc2xvd1BhdGhHZW5lcmF0b3JzOwogICAgIFZlY3RvcjxTaWxlbnRSZWdpc3RlclNhdmVQbGFu
PiBtX3BsYW5zOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNo
ZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA4LDggKzEwOCwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAg
ICBpZiAoIWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdW5z
aWduZWQgaW5kZXhGb3JDaGVja3MgPSBVSU5UX01BWDsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4g
b3JpZ2luRm9yQ2hlY2tzOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sg
PSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4aXRPSykgewor
ICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcyA9IGluZGV4SW5CbG9jazsKKyAgICAg
ICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzID0gbm9kZS0+b3JpZ2luOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBCZSBjYXJlZnVs
IG5vdCB0byB1c2UgJ25vZGUnIGFmdGVyIGFwcGVuZGluZyB0byB0aGUgZ3JhcGguIEluIHRob3Nl
IHN3aXRjaAogICAgICAgICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5k
LCB3ZSBmaXJzdCBjYXJlZnVsbHkgZXh0cmFjdCBldmVyeXRoaW5nIHdlIG5lZWQKICAgICAgICAg
ICAgICAgICAvLyBmcm9tIHRoZSBub2RlLCBiZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KQEAg
LTE3MCwxMyArMTc4LDE1IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIGlmIChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENo
ZWNrU3RydWN0dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNr
cy53aXRoU2VtYW50aWMob3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1
cmUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENl
bGxVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVyLT52YWx1ZS5tX2Fy
cmF5TW9kZUlzVmFsaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyLT52
YWx1ZS5tX2FycmF5TW9kZUhvaXN0aW5nT2theSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBDaGVja0FycmF5LCBvcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNOb25lLCBDaGVja0FycmF5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcy53aXRoU2VtYW50aWMob3JpZ2lu
LnNlbWFudGljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oaXRlci0+dmFs
dWUubV9hcnJheU1vZGUuYXNXb3JkKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVk
Z2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lv
biAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAj
aW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4
aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE4NSwxMyArMTg2LDI4IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KGkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGUpLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuaXNTZXQoKSA9PSBub2RlLT5vcmlnaW4uZm9yRXhp
dC5pc1NldCgpKTsKLSAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFtYXlFeGl0KG1f
Z3JhcGgsIG5vZGUpIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgISghbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSAm
JiBub2RlLT5vcmlnaW4uZXhpdE9LKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUp
LCAhKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgPT0gRXhpdHMgJiYgIW5vZGUtPm9yaWdpbi5leGl0
T0spKTsKKworICAgICAgICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAgICAgIE5v
ZGUqIHByZXZpb3VzTm9kZSA9IGJsb2NrLT5hdChpIC0gMSk7CisgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAgICAgKG5vZGUpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgIWNsb2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIHByZXZpb3VzTm9kZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHx8ICFub2RlLT5vcmlnaW4uZXhpdE9LCisgICAgICAgICAg
ICAgICAgICAgICAgICB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9y
aWdpbi5mb3JFeGl0KTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAhKCFwcmV2aW91
c05vZGUtPm9yaWdpbi5leGl0T0sgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICE9IHByZXZpb3VzTm9kZS0+b3Jp
Z2luLmZvckV4aXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNTdHJ1Y3R1cmUoKSB8fCAhIW5v
ZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2Rl
LT5oYXNDZWxsT3BlcmFuZCgpIHx8IG5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkuaXNDZWxs
KCkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc0NlbGxPcGVy
YW5kKCkgfHwgISFub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW5vZGUtPmNo
aWxkMigpKQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+
Y2hpbGQzKCkpOwpAQCAtMjEwLDEwICsyMjYsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICAgICAgICAg
ICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2VsbFVzZToK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS25vd25JbnQzMlVz
ZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVh
blVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISJCYWQgdXNlIGtpbmQiKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw4IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0K
ICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2
aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwogICAgICAgICB9Ci0gICAgICAgIG1fY29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKDApOwotICAgICAgICBtX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oMCk7CiAgICAgICAgIG1fbm9kZSA9IG51bGxw
dHI7CisgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3Jp
Z2luKDApLCB0cnVlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51
bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgu
bV9hcmd1bWVudHNbaV07CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpAQCAtMzkzLDggKzM5Miw3IEBAIHByaXZhdGU6
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChu
b2RlSW5kZXgpOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fbm9kZS0+
b3JpZ2luLnNlbWFudGljOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9u
b2RlLT5vcmlnaW4uZm9yRXhpdDsKKyAgICAgICAgbV9vcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsK
ICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJcbiIpOwpAQCAtODc4LDE1ICs4
NzYsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dEb3VibGUobV9ub2Rl
LT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICBt
X291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICAgICAgbV9v
dXQuc2V0KGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBjYXNlIEtub3du
Qm9vbGVhblVzZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+Y2hp
bGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBD
ZWxsVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgICAgIG1fb3V0LnNl
dChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgpAQCAtNDc1MiwxMCArNDc1MywxMiBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkK
ICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFpbGFi
aWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKKworICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKICAgICAgICAgCiAgICAgICAgIG1f
ZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQsIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUoKSwKLSAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQs
IG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgICAgICAgICAgbV9vcmlnaW4uZm9yRXhp
dCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xv
Y2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCku
bV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXpl
ci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKQEAgLTgwOTMsNiAr
ODA5Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zlcmll
cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFibGUg
cmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7CiAg
ICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4u
ZXhpdE9LKTsKICAgICAgICAgCiAgICAgICAgIGlmIChkb09TUkV4aXRGdXp6aW5nKCkpIHsKICAg
ICAgICAgICAgIExWYWx1ZSBudW1iZXJPZkZ1enpDaGVja3MgPSBtX291dC5hZGQoCkBAIC04MTE3
LDcgKzgxMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFsdWUu
Zm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdoVmFs
dWUpLAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUsCisgICAgICAgICAgICBtX29yaWdpbi5mb3JFeGl0LCBtX29yaWdpbi5z
ZW1hbnRpYywKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9m
QXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1i
ZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0LmFw
cGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwpAQCAtODYxMiw5ICs4NjE3LDggQEAgcHJp
dmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKICAgICBCYXNpY0Jsb2NrKiBtX25l
eHRIaWdoQmxvY2s7CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0TG93QmxvY2s7Ci0gICAgCi0gICAg
Q29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0OwotICAgIENvZGVPcmlnaW4gbV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAg
IHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIE5vZGUqIG1fbm9kZTsKICAgICAKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0lu
c2VydGlvbi5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTksOCArNTksMTAgQEAgdm9pZCBleGVjdXRlSW5zZXJ0aW9ucyhU
YXJnZXRWZWN0b3JUeXBlJgogICAgICAgICByZXR1cm47CiAgICAgdGFyZ2V0Lmdyb3codGFyZ2V0
LnNpemUoKSArIGluc2VydGlvbnMuc2l6ZSgpKTsKICAgICBzaXplX3QgbGFzdEluZGV4ID0gdGFy
Z2V0LnNpemUoKTsKKyAgICBzaXplX3Qgb3JpZ2luYWxUYXJnZXRTaXplID0gdGFyZ2V0LnNpemUo
KTsKICAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IGluc2VydGlvbnMuc2l6ZSgp
OyBpbmRleEluSW5zZXJ0aW9ucy0tOykgewogICAgICAgICBBU1NFUlQoIWluZGV4SW5JbnNlcnRp
b25zIHx8IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgPj0gaW5zZXJ0aW9u
c1tpbmRleEluSW5zZXJ0aW9ucyAtIDFdLmluZGV4KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VE
KG9yaWdpbmFsVGFyZ2V0U2l6ZSwgaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgo
KSA8IG9yaWdpbmFsVGFyZ2V0U2l6ZSk7CiAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0gaW5z
ZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25zOwog
ICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259820</attachid>
            <date>2015-08-24 21:37:32 -0700</date>
            <delta_ts>2015-08-25 12:39:40 -0700</delta_ts>
            <desc>passing so many tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>73060</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk1LDYgKzI5NSw4IEBACiAJCTBGM0IzQTJDMTU0NzUw
MDIwMDNFRDBGRiAvKiBERkdWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1ZhbGlkYXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYz
QjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAv
KiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJCTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBD
YWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYzQzFGMUExQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdD
bG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAv
KiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhp
dFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCRDFCNjFCODk2QTA3
MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKIAkJMEYzRTAxQUExOUQzNTNB
NTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERG
R1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9OwogCQkwRjNFMDFBQjE5RDM1M0E1MDBGNjFCN0Yg
LyogREZHUHJlUG9zdE51bWJlcmluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMjEwNyw2ICsyMTA5LDggQEAKIAkJMEYzQjNBMkExNTQ3NEZGNDAwM0VEMEZGIC8qIERGR1Zh
bGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ZhbGlkYXRlLmg7
IHBhdGggPSBkZmcvREZHVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYzQjdFMjQxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0MxRjE4MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9i
YmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIw
OEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCRDFCNjFCODk2QTA3MDA1
OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0luc2VydGlvblNldC5jcHA7IHBhdGggPSBkZmcvREZHSW5zZXJ0aW9uU2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYx
QjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlE
MzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1ByZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQ
b3N0TnVtYmVyaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01MTE5LDYgKzUx
MjMsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmgg
Ki8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJTZXQuY3BwICov
LAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyU2V0LmggKi8sCisJ
CQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAq
LywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUu
aCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29tYmluZWRMaXZlbmVz
cy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAwOTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2
ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcyMDAzRjY5NkIgLyogREZHQ29tbW9uLmNw
cCAqLywKQEAgLTYxNDgsNiArNjE1NCw3IEBACiAJCQkJMEZGRkM5NUUxNEVGOTBCNzAwQzcyNTMy
IC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkVDOUREMTEzMjhERjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJGQ0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0
U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBE
RkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQxMDE3RjE3OURBRjgwMDAy
RUI4QkEgLyogREZHU2FuZVN0cmluZ0dldEJ5VmFsU2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkZDQ0ZEMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTY2FubmFibGUuaCBp
biBIZWFkZXJzICovLApAQCAtNzM4MSw2ICs3Mzg4LDcgQEAKIAkJCQkxNDk1NTlFRTBERENEREY3
MDA2NDgwODcgLyogRGVidWdnZXJDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE3
QTU4RUYxODA4QTRDNDAwMjBCREY3IC8qIERlZmVyR0MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjNDMUYxQTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xv
YmJlcnNFeGl0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAw
QThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5
NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjQ4NTMyMTE4Nzc1MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEhlYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVh
cC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBwYXlsb2FkIGlzIGEg
ZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5vbi1UT1AgcGF5bG9h
ZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5bG9hZC4KIC8vIC0g
SGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRlU3RhdGUgaXMgYSBk
aXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQgd2l0aCBUT1AgcGF5
bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9mIHRoZSBzYW1lIGtp
bmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lv
biAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTAsNiArMjQ1MCw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIENoZWNrVGllclVw
V2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BIaW50OgogICAgIGNh
c2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgYnJlYWs7CiAKICAgICBj
YXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2
ICszNSw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJE
RkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJE
RkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdKSVRD
b2RlLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgpAQCAtMzYyLDYgKzM2Myw5IEBAIHBy
aXZhdGU6CiAgICAgewogICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9wSW5mbyhvcGVyYW5k
Lm9mZnNldCgpKSwgdmFsdWUpOwogCisgICAgICAgIC8vIFdlIGNhbid0IGV4aXQgYW55bW9yZSBi
ZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMgY2hhbmdlZC4KKyAgICAgICAgbV9leGl0T0sg
PSBmYWxzZTsKKwogICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZChjdXJyZW50Q29kZU9y
aWdpbigpLCBvcGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc2V0TW9kZSA9
PSBOb3JtYWxTZXQpIHsKQEAgLTM3NCw4ICszNzgsMTQgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpCisgICAgICAgIC8vIFdlIHBs
YXkgaGFja3Mgd2l0aCBtX2V4aXRPSyBoZXJlLiBXZSBrbm93IHRoYXQgdGhlIFNldExvY2FscyB3
ZSBhcmUgZW1pdHRpbmcgYXJlIGFscmVhZHkKKyAgICAgICAgLy8gcmVjb3JkZWQgaW4gT1NSIGV4
aXQgc3RhdGUsIHNvIHRoZXkgYXJlbid0IHJlYWwgZWZmZWN0cy4gU28sIHdlIGRvbid0IHdhbnQg
dGhlbSB0byBoYXZlIGFueQorICAgICAgICAvLyBlZmZlY3Qgb24gbV9leGl0T0suCisgICAgICAg
IGJvb2wgZXhpdE9LQmVmb3JlID0gbV9leGl0T0s7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIG1fc2V0
TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICAgICAgbV9leGl0T0sgPSBleGl0
T0tCZWZvcmU7CisgICAgICAgIH0KICAgICAgICAgbV9zZXRMb2NhbFF1ZXVlLnJlc2l6ZSgwKTsK
ICAgICB9CiAKQEAgLTY1MSwxNSArNjYxLDE3IEBAIHByaXZhdGU6CiAKICAgICBOb2RlT3JpZ2lu
IGN1cnJlbnROb2RlT3JpZ2luKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
c2V0IHRoZSBmb3JFeGl0IG9yaWdpbiBvbmx5IG9uIHRob3NlIG5vZGVzIHRoYXQgY2FuIGV4aXQu
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDUy
MDQKICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpYzsKKyAgICAgICAgQ29kZU9yaWdpbiBmb3JF
eGl0OworCiAgICAgICAgIGlmIChtX2N1cnJlbnRTZW1hbnRpY09yaWdpbi5pc1NldCgpKQogICAg
ICAgICAgICAgc2VtYW50aWMgPSBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgc2VtYW50aWMgPSBjdXJyZW50Q29kZU9yaWdpbigpOwotICAgICAgICAK
LSAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGN1cnJlbnRDb2RlT3JpZ2luKCks
IHRydWUpOworCisgICAgICAgIGZvckV4aXQgPSBjdXJyZW50Q29kZU9yaWdpbigpOworCisgICAg
ICAgIHJldHVybiBOb2RlT3JpZ2luKHNlbWFudGljLCBmb3JFeGl0LCBtX2V4aXRPSyk7CiAgICAg
fQogICAgIAogICAgIEJyYW5jaERhdGEqIGJyYW5jaERhdGEodW5zaWduZWQgdGFrZW4sIHVuc2ln
bmVkIG5vdFRha2VuKQpAQCAtNjc3LDYgKzY4OSwxOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICBhcHBlbmRlZCAiLCBub2RlLCAiICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3Ao
KSksICJcbiIpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKG5vZGUpOworICAgICAg
ICBjbG9iYmVyaXplKAorICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUo
KSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwKSB7CisgICAgICAg
ICAgICAgICAgLy8gV3JpdGVzIHRvIFNpZGVTdGF0ZSBhcmUgbm90IG9ic2VydmFibGUuCisgICAg
ICAgICAgICAgICAgaWYgKGhlYXAuaXNTdWJ0eXBlT2YoU2lkZVN0YXRlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgLy8gV2UgYXNzdW1lIGFsbCBvdGhl
ciB3cml0ZXMgYXJlIG9ic2VydmFibGUsIGFuZCBzbyBpZiB3ZSB0cmllZCB0byBleGl0IGFmdGVy
IHRoZW0KKyAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBzYW1lIG9yaWdpbiB0aGVuIHdlJ2Qg
Y2F1c2UgdGhhdCBlZmZlY3QgdG8gcmVwZWF0LgorICAgICAgICAgICAgICAgIG1fZXhpdE9LID0g
ZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CiAg
ICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICAKQEAgLTkwMCw2ICs5MjQsOCBAQCBwcml2
YXRlOgogICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwogICAgIC8vIFRoZSBzZW1hbnRpYyBv
cmlnaW4gb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBJ
bmRleC4KICAgICBDb2RlT3JpZ2luIG1fY3VycmVudFNlbWFudGljT3JpZ2luOworICAgIC8vIFRy
dWUgaWYgaXQncyBPSyB0byBPU1IgZXhpdCByaWdodCBub3cuCisgICAgYm9vbCBtX2V4aXRPSyB7
IGZhbHNlIH07CiAKICAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudFVuZGVmaW5lZDsKICAgICBG
cm96ZW5WYWx1ZSogbV9jb25zdGFudE51bGw7CkBAIC0xMDUzLDYgKzEwNzksNyBAQCBwcml2YXRl
OgogCiAjZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKICAgICBtX2N1cnJlbnRJbmRleCArPSBP
UENPREVfTEVOR1RIKG5hbWUpOyBcCisgICAgbV9leGl0T0sgPSBmYWxzZTsgXAogICAgIHJldHVy
biBzaG91bGRDb250aW51ZVBhcnNpbmcKIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCkBAIC0xMzUxLDExICsxMzc4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNh
bGwoTm9kZSogY2EKICAgICB9CiAgICAgCiAgICAgbV9ncmFwaC5tX2lubGluZVZhcmlhYmxlRGF0
YS5hcHBlbmQoaW5saW5lVmFyaWFibGVEYXRhKTsKKworICAgIC8vIEF0IHRoaXMgcG9pbnQsIGl0
J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisgICAgbV9leGl0T0sgPSB0cnVlOworICAgIGFkZFRv
R3JhcGgoRXhpdE9LKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwogICAgIGNsZWFyQ2Fj
aGVzKCk7IC8vIFJlc2V0IG91ciBzdGF0ZSBub3cgdGhhdCB3ZSdyZSBiYWNrIHRvIHRoZSBvdXRl
ciBjb2RlLgogICAgIAogICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7CisgICAgbV9leGl0
T0sgPSBmYWxzZTsKICAgICAKICAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29t
ZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4KICAgICBpZiAo
aW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubGFzdEJsb2Nr
KCkpIHsKQEAgLTI5MDEsMTIgKzI5MzMsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9IG1fdm0tPmludGVy
cHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwogICAgIHVuc2lnbmVk
IGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKLSAgICAKKwogICAgIC8vIElmIHdlIGFyZSB0
aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBhcmd1bWVudHMuIFRo
aXMgYWxsb3dzCiAgICAgLy8gdXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5
IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBvcHBvc2VkIHRvIHVz
aW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHkuCiAgICAgaWYgKG1fY3VycmVudEJsb2NrID09
IG1fZ3JhcGguYmxvY2soMCkgJiYgIWlubGluZUNhbGxGcmFtZSgpKSB7CiAgICAgICAgIG1fZ3Jh
cGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKKyAgICAgICAgLy8gV2Ugd2ls
bCBlbWl0IFNldEFyZ3VtZW50IG5vZGVzLiBUaGV5IGRvbid0IGV4aXQsIGJ1dCB3ZSdyZSBhdCB0
aGUgdG9wIG9mIGFuIG9wX2VudGVyIHNvCisgICAgICAgIC8vIGV4aXRPSyA9IHRydWUuCisgICAg
ICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoCiAgICAg
ICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1lbnQpKTsKQEAgLTI5
MjIsNiArMjk1NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgLy8gV2UncmUgc3RhcmluZyBh
IG5ldyBieXRlY29kZSBpbnN0cnVjdGlvbi4gSGVuY2UsIHdlIG9uY2UgYWdhaW4gaGF2ZSBhIHBs
YWNlIHRoYXQgd2UgY2FuIGV4aXQKKyAgICAgICAgLy8gdG8uCisgICAgICAgIG1fZXhpdE9LID0g
dHJ1ZTsKKyAgICAgICAgCiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAg
IAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0aW9ucy4KQEAgLTI5
OTgsNyArMzAzNyw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
IAogICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0gbV9ncmFwaC5mcmVl
emUoY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
Q2VsbCwgT3BJbmZvKGZyb3plbiksIGNhbGxlZSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3Jh
cGgoSlNDb25zdGFudCwgT3BJbmZvKGZyb3plbikpKTsKIAogICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWNoZWRGdW5jdGlvbik7CiAgICAg
ICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgCiAgICAgY2FzZSBNb3ZI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEtp
bGxTdGFjazoKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBQaGk6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2lu
Y2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUg
IkRGR05vZGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCit7CisgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMgd2hvc2UgZWZmZWN0
IG9uIHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hhdCB0aGV5CisgICAg
Ly8gbm9ybWFsbHkgY2xvYmJlci4KKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICBjYXNl
IE1vdkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgUHV0SGludDoKKyAgICBj
YXNlIEtpbGxTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBjYXNlIFNldExvY2Fs
OgorICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIC8vIFRoZXNlIG5vZGVzIHdyaXRlIHRvIHRo
ZSBzdGFjaywgYnV0IHRoZXkgbWF5IG9ubHkgZG8gc28gYWZ0ZXIgd2UgaGF2ZSBhbHJlYWR5IGhh
ZCBhIE1vdkhpbnQKKyAgICAgICAgLy8gZm9yIHRoZSBleGFjdCBzYW1lIHZhbHVlIGFuZCB0aGUg
c2FtZSBzdGFjayBsb2NhdGlvbi4gSGVuY2UsIHRoZXkgaGF2ZSBubyBmdXJ0aGVyIGVmZmVjdCBv
bgorICAgICAgICAvLyBleGl0IHN0YXRlLgorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
YXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAgY2FzZSBBcnJheWlmeToKKyAgICAgICAgLy8g
VGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMgb2JzZXJ2YWJsZS4g
SXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUgdGhlCisgICAgICAgIC8vIGhlYXBzIGludG8gdGhv
c2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QsIGJ1dCB3ZSBkb24n
dCBkbyB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVmYXVs
dDoKKyAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBub2Rlcywgd2UganVzdCBjYXJlIGFib3V0IHdo
ZXRoZXIgdGhleSB3cml0ZSB0byBzb21ldGhpbmcgb3RoZXIgdGhhbiBTaWRlU3RhdGUuCisgICAg
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAg
ICBncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3Qg
QWJzdHJhY3RIZWFwJiBoZWFwKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkbid0
IGJlIHN1Y2ggYSB0aGluZyBhcyBhIHN0cmljdCBzdWJ0eXBlIG9mIFNpZGVTdGF0ZS4gVGhhdCdz
IHdoYXQgYWxsb3dzCisgICAgICAgICAgICAgICAgLy8gdXMgdG8gdXNlIGEgZmFzdCAhPSBjaGVj
aywgYmVsb3cuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFoZWFwLmlzU3RyaWN0U3VidHlwZU9m
KFNpZGVTdGF0ZSkpOworCisgICAgICAgICAgICAgICAgaWYgKGhlYXAgIT0gU2lkZVN0YXRlKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4
aXRTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
bG9iYmVyc0V4aXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDbG9i
YmVyc0V4aXRTdGF0ZV9oCisjZGVmaW5lIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKworI2lmIEVO
QUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNz
IEdyYXBoOworc3RydWN0IE5vZGU7CisKKy8vIEEgY29uc2VydmF0aXZlIGFwcHJveGltYXRpb24g
b2Ygd2hldGhlciB0aGUgbm9kZSB3aWxsIHBlcmZvcm0gYW4gZWZmZWN0IHRoYXQgbWVhbnMgdGhh
dCB3ZSBjYW4gbm8KKy8vIGxvbmdlciBleGl0IHRvIHRoaXMgbm9kZSdzIGV4aXQgb3JpZ2luLgor
Citib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiwgTm9kZSopOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0Nsb2JiZXJzRXhpdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSk7CiAKKyAgICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChL
bm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2Up
OwogCiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSAwOwpAQCAtNzEzLDcgKzcxNCw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQyOTIxIG9yCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTI0LgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwg
UHV0U3RydWN0dXJlLCBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlKTsKKyAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBv
cmlnaW4ud2l0aEludmFsaWRFeGl0KCksIE9wSW5mbyh0cmFuc2l0aW9uKSwKKyAgICAgICAgICAg
ICAgICBjaGlsZEVkZ2UpOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2
ICs1NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNl
IFNldExvY2FsOgogICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAg
Y2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBj
YXNlIFBoaToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdG
aXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2Miw2ICsxMzYyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAg
ICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIEJv
dHRvbVZhbHVlOgogICAgICAgICBjYXNlIFR5cGVPZjoKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTYzNyw2ICsxNjM4LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAg
Ly8gTk9URTogQW55IHR5cGUgY2hlY2tzIHdlIHB1dCBoZXJlIG1heSBnZXQgaG9pc3RlZCBieSBm
aXh1cENoZWNrc0luQmxvY2soKS4gU28sIGlmIHdlCisgICAgICAgICAgICAgICAgLy8gYWRkIG5l
dyB0eXBlIGNoZWNraW5nIHVzZSBraW5kIGZvciBTZXRMb2NhbHMsIHdlIG5lZWQgdG8gbW9kaWZ5
IHRoYXQgY29kZSBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3
aXRjaCAodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZs
dXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIxMTAsOCArMjEx
NCwxNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQoYmxv
Y2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwotICAgICAgICBmb3Ig
KG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK21f
aW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG1faW5k
ZXhJbkJsb2NrKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhGb3JDaGVja3MgPSBVSU5UX01BWDsK
KyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5Gb3JDaGVja3M7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRl
eEluQmxvY2spIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJs
b2NrKTsKKworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5vZGUgYXQgd2hpY2ggd2UgY291
bGQgZXhpdCwgdGhlbiBzYXZlIGl0cyBpbmRleC4gSWYgbm9kZXMgYWZ0ZXIgdGhpcyBvbmUKKyAg
ICAgICAgICAgIC8vIGNhbm5vdCBleGl0LCB0aGVuIHdlIHdpbGwgaG9pc3QgY2hlY2tzIHRvIGhl
cmUuCisgICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4aXRPSykgeworICAgICAgICAgICAg
ICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJbkJsb2NrOworICAgICAgICAgICAgICAgIG9yaWdp
bkZvckNoZWNrcyA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Ly8gRmlyc3QsIHRyeSB0byByZWxheCB0aGUgcmVwcmVzZW50YXRpb25hbCBkZW1hbmRzIG9mIGVh
Y2ggbm9kZSwgaW4gb3JkZXIgdG8gaGF2ZQogICAgICAgICAgICAgLy8gZmV3ZXIgY29udmVyc2lv
bnMuCkBAIC0yMTc1LDIxICsyMTg4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbm9k
ZSwKICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICAgICAgCisKICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIERv
dWJsZVJlcFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5p
c051bWJlckNvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVDb25zdGFudCwg
bm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNo
ZWNrcywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVDb25zdGFudCwgbm9kZS0+b3JpZ2luLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5mcmVlemUoanNE
b3VibGVOdW1iZXIoZWRnZS0+YXNOdW1iZXIoKSkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGVkZ2UtPmhhc0ludDUyUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUs
IERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEZvckNoZWNrcywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3Jp
Z2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJ
bnQ1MlJlcFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQ7CkBAIC0yMjAxLDUzICsyMjE0LDg4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtpbmQgPSBO
b3RDZWxsVXNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIFNwZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0
ZWNvZGVEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCB1c2VLaW5kKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1
bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjYXNlIEludDUyUmVwVXNlOiB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChl
ZGdlLT5pc01hY2hpbmVJbnRDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJbnQ1MkNvbnN0
YW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
Rm9yQ2hlY2tzLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9kZS0+b3JpZ2luLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnQoKSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1
bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNNYWNoaW5lSW50LCBJ
bnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlKGVkZ2Uubm9kZSgpLCBEb3VibGVSZXBNYWNoaW5lSW50VXNlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZUludDMyRm9yQXJpdGht
ZXRpYygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssIFNwZWNJbnQzMiwgSW50NTJSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNJbnQzMiwgSW50NTJSZXAs
IG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdl
Lm5vZGUoKSwgSW50MzJVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNw
ZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY01hY2hpbmVJbnQsIEludDUyUmVwLCBu
b2RlLT5vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5u
b2RlKCksIE1hY2hpbmVJbnRVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCisK
ICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSAmJiAhZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3VibGUsIFZhbHVlUmVw
LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9y
Q2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3VibGUsIFZhbHVlUmVwLCBub2RlLT5vcmlnaW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJsZVJlcFVz
ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyIHwgU3BlY0lu
dDUyQXNEb3VibGUsIFZhbHVlUmVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEZvckNoZWNrcywgU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGUsIFZhbHVlUmVwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4sIEVkZ2UoZWRnZS5u
b2RlKCksIEludDUyUmVwVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0gfQotICAgICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgLy8gSXQncyByZW1vdGVseSBwb3NzaWJsZSB0aGF0IHRoaXMgbm9kZSBj
YW5ub3QgZG8gdHlwZSBjaGVja3MsIGJ1dCB3ZSBub3cgaGF2ZSBhCisgICAgICAgICAgICAgICAg
ICAgIC8vIHR5cGUgY2hlY2sgb24gdGhpcyBub2RlLiBXZSBkb24ndCBoYXZlIHRvIGhhbmRsZSB0
aGUgZ2VuZXJhbCBmb3JtIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gcHJvYmxlbS4g
SXQgb25seSBhcmlzZXMgd2hlbiBCeXRlQ29kZVBhcnNlciBlbWl0cyBhbiBpbW1lZGlhdGUgU2V0
TG9jYWwsIHJhdGhlcgorICAgICAgICAgICAgICAgICAgICAvLyB0aGFuIGEgZGVsYXllZCBvbmUu
IFNvLCB3ZSBvbmx5IHdvcnJ5IGFib3V0IHRob3NlIGNoZWNrcyB0aGF0IHdlIG1heSBoYXZlIHB1
dCBvbgorICAgICAgICAgICAgICAgICAgICAvLyBhIFNldExvY2FsLiBOb3RlIHRoYXQgImluZGV4
Rm9yQ2hlY2tzICE9IGluZGV4SW5CbG9jayIgaXMganVzdCBhbm90aGVyIHdheSBvZgorICAgICAg
ICAgICAgICAgICAgICAvLyBzYXlpbmcgIiFub2RlLT5vcmlnaW4uZXhpdE9LIi4KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGluZGV4Rm9yQ2hlY2tzICE9IGluZGV4SW5CbG9jayAmJiBtYXlIYXZl
VHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgVXNl
S2luZCBrbm93blVzZUtpbmQgPSBVbnR5cGVkVXNlOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtub3duVXNlS2luZCA9IEtub3duSW50MzJVc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga25vd25Vc2VLaW5kID0gS25vd25DZWxsVXNlOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNl
S2luZCA9IEtub3duQm9vbGVhblVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUsICJCYWQgdXNlIGtpbmQiKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcy53aXRoU2VtYW50
aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKSwgZWRnZSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVkZ2Uuc2V0VXNlS2luZChrbm93blVzZUtpbmQpOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDYgKzkwLDI4IEBAIGlubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3Jt
YXQgZm8KICAgICByZXR1cm4gVW50eXBlZFVzZTsKIH0KIAoraW5saW5lIFVzZUtpbmQgdW5jaGVj
a2VkVXNlS2luZEZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
IHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgIGNh
c2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CisgICAgY2Fz
ZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgcmV0dXJuIEtub3duQ2VsbFVzZTsKKyAgICBjYXNlIEZs
dXNoZWRJbnQzMjoKKyAgICAgICAgcmV0dXJuIEtub3duSW50MzJVc2U7CisgICAgY2FzZSBGbHVz
aGVkSW50NTI6CisgICAgICAgIHJldHVybiBJbnQ1MlJlcFVzZTsKKyAgICBjYXNlIEZsdXNoZWRE
b3VibGU6CisgICAgICAgIHJldHVybiBEb3VibGVSZXBVc2U7CisgICAgY2FzZSBGbHVzaGVkQm9v
bGVhbjoKKyAgICAgICAgcmV0dXJuIEtub3duQm9vbGVhblVzZTsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVW50eXBlZFVzZTsKK30KKwogaW5s
aW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQogewog
ICAgIHJldHVybiB0eXBlRmlsdGVyRm9yKHVzZUtpbmRGb3IoZm9ybWF0KSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDkgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUg
IkRGR0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVk
ZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5j
bHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
aCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9u
RXhlY3V0YWJsZUR1bXAuaCIKQEAgLTEwMSw4ICsxMDMsMTQgQEAgc3RhdGljIHZvaWQgcHJpbnRX
aGl0ZVNwYWNlKFByaW50U3RyZWFtJgogICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0KIAotYm9v
bCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJl
Zml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCog
Y29udGV4dCkKK2Jvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZVJlZiwgTm9kZSogY3VycmVudE5v
ZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQogeworICAgIGlmICghY3VycmVudE5vZGUtPm9yaWdp
bi5zZW1hbnRpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIE5vZGUqIHByZXZp
b3VzTm9kZSA9IHByZXZpb3VzTm9kZVJlZjsKKyAgICBwcmV2aW91c05vZGVSZWYgPSBjdXJyZW50
Tm9kZTsKKwogICAgIGlmICghcHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCkBAIC0zNDUsMTIgKzM1MywxOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlzdER1bXAo
cmVhZHMuZGlyZWN0KCksICIsIikpOwogICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGlyZWN0KCks
ICIsIikpOworICAgIEV4aXRNb2RlIGV4aXRNb2RlID0gbWF5RXhpdCgqdGhpcywgbm9kZSk7Cisg
ICAgaWYgKGV4aXRNb2RlICE9IERvZXNOb3RFeGl0KQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IGV4aXRNb2RlKTsKKyAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUoKnRoaXMsIG5vZGUpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJDbG9iYmVyc0V4aXQiKTsKICAgICBpZiAobm9kZS0+b3Jp
Z2luLmlzU2V0KCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNl
bWFudGljICE9IG5vZGUtPm9yaWdpbi5mb3JFeGl0KQorICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljICE9IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICYmIG5vZGUtPm9yaWdpbi5mb3JFeGl0
LmlzU2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGl0OiAiLCBub2RlLT5v
cmlnaW4uZm9yRXhpdCk7CiAgICAgfQotICAgIAorICAgIGlmICghbm9kZS0+b3JpZ2luLmV4aXRP
SykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdEludmFsaWQiKTsKICAgICBvdXQucHJp
bnQoIikiKTsKIAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpICYm
IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpKQpAQCAtNDU1LDcgKzQ2OSw3IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgb3V0LnByaW50
KCIgIEFyZ3VtZW50czogIiwgbGlzdER1bXAobV9hcmd1bWVudHMpLCAiXG4iKTsKICAgICBvdXQu
cHJpbnQoIlxuIik7CiAgICAgCi0gICAgTm9kZSogbGFzdE5vZGUgPSAwOworICAgIE5vZGUqIGxh
c3ROb2RlID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNp
emUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0
KCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC00OTYsNyArNTEwLDYgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4ob3V0
LCAiIiwgbGFzdE5vZGUsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7CiAgICAgICAgICAgICBkdW1w
KG91dCwgIiIsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7Ci0gICAgICAgICAgICBsYXN0Tm9kZSA9
IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgU3RhdGVzOiAi
LCBibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uLCAiLCAiLCBibG9jay0+Y2ZhU3RydWN0dXJlQ2xv
YmJlclN0YXRlQXRUYWlsKTsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhRGlkRmluaXNoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg4ODg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTAsNyArMjEwLDcgQEAgcHVibGljOgogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2Yg
dGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQogICAg
IC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQu
Ci0gICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqKTsK
KyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4
LCBOb2RlKiYgcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqKTsK
IAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkLCBi
b29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUlu
dDMyLCBQcmVkaWN0aW9uUGFzcyBwYXNzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksOCArNzks
MTAgQEAgcHJpdmF0ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWJvb2wgbWF5RXhp
dChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKIHsKKyAgICBFeGl0TW9kZSByZXN1bHQgPSBEb2VzTm90RXhpdDsKKyAg
ICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAvLyBUaGlzIGlzIGEgY2FyZWZ1bGx5
IGN1cmF0ZWQgbGlzdCBvZiBub2RlcyB0aGF0IGRlZmluaXRlbHkgZG8gbm90IGV4aXQuIFdlIHRy
eSB0byBiZSB2ZXJ5CiAgICAgLy8gY29uc2VydmF0aXZlIHdoZW4gbWFpbnRhaW5pbmcgdGhpcyBs
aXN0LCBiZWNhdXNlIGFkZGluZyBuZXcgbm9kZSB0eXBlcyB0byBpdCBkb2Vzbid0CkBAIC05OSw2
ICsxMDEsNyBAQCBib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNh
c2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2Fz
ZSBFeGl0T0s6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgpAQCAtMTE2LDE4ICsxMTksNTEgQEAgYm9vbCBtYXlFeGl0
KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIERvdWJsZVJlcDoKICAgICBjYXNl
IEludDUyUmVwOgogICAgIGNhc2UgVmFsdWVSZXA6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlM
b2NhbDoKKyAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAgICBj
YXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCisgICAgY2FzZSBT
dHJDYXQ6CisgICAgICAgIHJlc3VsdCA9IEV4aXRzRm9yRXhjZXB0aW9uczsKKyAgICAgICAgYnJl
YWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiBpbiBkb3VidCwgcmV0dXJuIHRydWUu
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gRXhpdHM7CiAgICAgfQogCiAg
ICAgRWRnZU1heUV4aXQgZnVuY3RvcjsKICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFw
aCwgbm9kZSwgZnVuY3Rvcik7Ci0gICAgcmV0dXJuIGZ1bmN0b3IucmVzdWx0KCk7CisgICAgaWYg
KGZ1bmN0b3IucmVzdWx0KCkpCisgICAgICAgIHJlc3VsdCA9IEV4aXRzOworICAgIAorICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIEV4aXRNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7
CisgICAgY2FzZSBEb2VzTm90RXhpdDoKKyAgICAgICAgb3V0LnByaW50KCJEb2VzTm90RXhpdCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0c0ZvckV4Y2VwdGlvbnM6CisgICAgICAg
IG91dC5wcmludCgiRXhpdHNGb3JFeGNlcHRpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEV4aXRzOgorICAgICAgICBvdXQucHJpbnQoIkV4aXRzIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTAgKzM2LDQ4
IEBAIHN0cnVjdCBOb2RlOwogLy8gQSAqdmVyeSogY29uc2VydmF0aXZlIGFwcHJveGltYXRpb24g
b2Ygd2hldGhlciBvciBub3QgYSBub2RlIGNvdWxkIHBvc3NpYmx5IGV4aXQuIFVzdWFsbHkKIC8v
IHJldHVybnMgdHJ1ZSBleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2Ugb2J2aW91c2x5IGRvbid0IGV4
cGVjdCBhbiBleGl0LgogCi1ib29sIG1heUV4aXQoR3JhcGgmLCBOb2RlKik7CitlbnVtIEV4aXRN
b2RlIHsKKyAgICAvLyBUaGUgbm9kZSBkb2VzIG5vdCBleGl0IGF0IGFsbC4gVGhpcyBtZWFucyB0
aGF0IGl0J3MgbGVnYWwgdG8gZWxpbWluYXRlIHRoZSBmaXJzdCBzdG9yZSBpbiBhCisgICAgLy8g
cHJvZ3JhbSBsaWtlOgorICAgIC8vCisgICAgLy8gZ2xvYmFsID0gMSAvLyBmaXJzdCBzdG9yZQor
ICAgIC8vIERvZXNOb3RFeGl0KCk7IC8vIGxldCdzIGFzc3VtZSB0aGF0IHRoaXMgYWxzbyBkb2Vz
bid0IHJlYWQgImdsb2JhbCIKKyAgICAvLyBnbG9iYWwgPSAyIC8vIHNlY29uZCBzdG9yZQorICAg
IC8vCisgICAgLy8gSXQncyBsZWdhbCB0byBlbGltaW5hdGUgdGhlIGZpcnN0IG9uZSBzaW5jZSBu
b2JvZHkgd2lsbCBzZWUgaXQ7IHRoZSBzZWNvbmQgc3RvcmUgaXMgYWx3YXlzCisgICAgLy8gZXhl
Y3V0ZWQgcmlnaHQgYWZ0ZXIuCisgICAgRG9lc05vdEV4aXQsCisKKyAgICAvLyBUaGUgbm9kZSB3
aWxsIGV4aXQsIGJ1dCBvbmx5IGJ5IHByb3Blcmx5IHRocm93aW5nIGV4Y2VwdGlvbnMuIEEgcHJv
cGVyIGV4Y2VwdGlvbiB0aHJvdyB3aWxsCisgICAgLy8gZGl2ZXJ0IGV4ZWN1dGlvbiB0byB0aGUg
bWF0Y2hpbmcgb3BfY2F0Y2ggYW5kIHdpbGwgbm90IHJlZXhlY3V0ZSB0aGUgZXhpdCBvcmlnaW4u
IFRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSBzdG9yZSBlbGltaW5hdGlvbiBvcHRpbWl6YXRp
b24gYWJvdmUgd291bGQgYmUgaWxsZWdhbCwgYnV0IHRoZSBmb2xsb3dpbmcgd291bGQgYmUgT0s6
CisgICAgLy8KKyAgICAvLyBTaWRlRWZmZWN0KC4uLiwgZXhpdDogYmMjNDIpCisgICAgLy8gRXhp
dHNGb3JFeGNlcHRpb25zKC4uLiwgZXhpdDogI2JjNDIsIEV4aXRJbnZhbGlkKQorICAgIC8vCisg
ICAgLy8gSW4gcGFydGljdWxhciwgaXQncyBPSyBmb3IgYSBub2RlIHRoYXQgcmVwb3J0cyBFeGl0
c0ZvckV4Y2VwdGlvbnMgdG8gYmUgZXhlY3V0ZWQgaW4gYSBjb250ZXh0CisgICAgLy8gd2hlcmUg
IU5vZGU6Om9yaWdpbi5leGl0T0suIFRoYXQncyBiZWNhdXNlIHRoaXMgbm9kZSB3aWxsIG5vdCBl
eGl0IGluIGEgbWFubmVyIHRoYXQgY291bGQgbGVhZAorICAgIC8vIHRvIHRoZSByZWV4ZWN1dGlv
biBvZiBTaWRlRWZmZWN0KCkuCisgICAgRXhpdHNGb3JFeGNlcHRpb25zLAorCisgICAgLy8gVGhl
IG5vZGUgd2lsbCBleGl0IHRvIHRoZSBleGl0IG9yaWdpbi4gVGhpcyBtZWFucyB0aGF0IHdlIGNh
bm5vdCBkbyBzdG9yZSBlbGltaW5hdGlvbiBsaWtlIGZvcgorICAgIC8vIERvZXNOb3RFeGl0IGFu
ZCBhbHNvIHdlIGNhbm5vdCBwbGFjZSB0aGlzIG5vZGUgaW4gYW4gRXhpdEludmFsaWQgY29udGV4
dCwgc2luY2UgdGhpcyB3aWxsIGV4aXQKKyAgICAvLyBpbiBhIG1hbm5lciB0aGF0IHdpbGwgY2F1
c2UgdGhlIHJlZXhlY3V0aW9uIG9mIGFsbCBwcmV2aW91cyBvcGVyYXRpb25zIHdpdGhpbiB0aGlz
IGV4aXQgb3JpZ2luLgorICAgIEV4aXRzCit9OworCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiwg
Tm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpERkc6OkV4aXRNb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERGR01heUV4aXRfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRS
ZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgp
KSA9IEVwb2NoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlm
IChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFw
aCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAgICAgICAgICAgY3VycmVudEVwb2NoLmJ1
bXAoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4ODg4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOSw5ICsyOSwxMyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsK
Kwogc3RydWN0IE5vZGVPcmlnaW4gewogICAgIE5vZGVPcmlnaW4oKSB7IH0KICAgICAKQEAgLTQ4
LDcgKzUyLDcgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgICAgICByZXR1cm4gc2VtYW50aWMu
aXNTZXQoKTsKICAgICB9CiAgICAgCi0gICAgTm9kZU9yaWdpbiB3aXRoU2VtYW50aWMoQ29kZU9y
aWdpbiBzZW1hbnRpYykKKyAgICBOb2RlT3JpZ2luIHdpdGhTZW1hbnRpYyhDb2RlT3JpZ2luIHNl
bWFudGljKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFpc1NldCgpKQogICAgICAgICAgICAg
cmV0dXJuIE5vZGVPcmlnaW4oKTsKQEAgLTU4LDcgKzYyLDMyIEBAIHN0cnVjdCBOb2RlT3JpZ2lu
IHsKICAgICAgICAgICAgIHJlc3VsdC5zZW1hbnRpYyA9IHNlbWFudGljOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KKworICAgIE5vZGVPcmlnaW4gd2l0aEV4aXRPSyhib29sIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsKKyAgICAg
ICAgcmVzdWx0LmV4aXRPSyA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIE5vZGVPcmlnaW4gd2l0aEludmFsaWRFeGl0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB3aXRoRXhpdE9LKGZhbHNlKTsKKyAgICB9CisKKyAgICBOb2RlT3JpZ2luIHRha2VW
YWxpZEV4aXQoYm9vbCYgY2FuRXhpdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRo
RXhpdE9LKGV4aXRPSyAmIHN0ZDo6ZXhjaGFuZ2UoY2FuRXhpdCwgZmFsc2UpKTsKKyAgICB9CiAg
ICAgCisgICAgTm9kZU9yaWdpbiBmb3JJbnNlcnRpbmdBZnRlcihHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBOb2RlT3JpZ2luIHJlc3VsdCA9ICp0aGlzOwor
ICAgICAgICBpZiAoZXhpdE9LICYmIGNsb2JiZXJzRXhpdFN0YXRlKGdyYXBoLCBub2RlKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKICAgICAvLyBVc2VkIGZvciBkZXRlcm1pbmluZyB3aGF0IGJ5dGVjb2RlIHRoaXMg
Y2FtZSBmcm9tLiBUaGlzIGlzIGltcG9ydGFudCBmb3IKICAgICAvLyBkZWJ1Z2dpbmcsIGV4Y2Vw
dGlvbnMsIGFuZCBldmVuIGJhc2ljIGV4ZWN1dGlvbiBzZW1hbnRpY3MuCiAgICAgQ29kZU9yaWdp
biBzZW1hbnRpYzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJ
KHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgXAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVNdXN0R2VuZXJhdGUp
IFwKICAgICBtYWNybyhab21iaWVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
RXhpdE9LLCBOb2RlTXVzdEdlbmVyYXRlKSAvKiBJbmRpY2F0ZXMgdGhhdCBleGl0IHN0YXRlIGlz
IGludGFjdC4gKi8gXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhDaGVjaywgTm9kZU11c3RHZW5lcmF0ZSkgLyogVXNlZCBpZiB3ZSB3YW50IGp1c3Qg
YSB0eXBlIGNoZWNrIGJ1dCBub3QgbGl2ZW5lc3MuIE5vbi1jaGVja2luZyB1c2VzIHdpbGwgYmUg
cmVtb3ZlZC4gKi9cCiAgICAgbWFjcm8oVXBzaWxvbiwgMCkgXApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5
LDcgKzg5LDkgQEAgcHVibGljOgogICAgICAgICAvLyBleGVjdXRpb25Db3VudCB0byB1c2UgYmVz
dCBqdWRnZW1lbnQgLSBidXQgdGhhdCBzZWVtcyB1bm5lY2Vzc2FyeSBzaW5jZSB3ZSBrbm93IGZv
cgogICAgICAgICAvLyBzdXJlIHdoYXQgdGhlIGV4ZWN1dGlvbkNvdW50IHNob3VsZCBiZSBpbiB0
aGlzIGNhc2UuCiAgICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0KDAsIDEpOwotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IHRhcmdldC0+YXQoMCktPm9y
aWdpbjsKKworICAgICAgICAvLyBXZSdkIHJlYWxseSBsaWtlIHRvIHVzZSBhbiB1bnNldCBvcmln
aW4sIGJ1dCBUaHJlYWRlZENQUyB3b24ndCBhbGxvdyB0aGF0LgorICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZmFsc2Up
OwogICAgICAgICAKICAgICAgICAgVmVjdG9yPE5vZGUqPiBsb2NhbHMoYmFzZWxpbmUtPm1fbnVt
Q2FsbGVlUmVnaXN0ZXJzKTsKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJh
c2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewpAQCAtMTA2LDYgKzEwOCwx
MCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAg
ICAgIH0KIAorICAgICAgICAvLyBOb3cgdXNlIHRoZSBvcmlnaW4gb2YgdGhlIHRhcmdldCwgc2lu
Y2UgaXQncyBub3QgT0sgdG8gZXhpdCwgYW5kIHdlIHdpbGwgcHJvYmFibHkgaG9pc3QKKyAgICAg
ICAgLy8gdHlwZSBjaGVja3MgdG8gaGVyZS4KKyAgICAgICAgb3JpZ2luID0gdGFyZ2V0LT5hdCgw
KS0+b3JpZ2luOworICAgICAgICAKICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IGJhc2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAg
ICAgIE5vZGUqIG9sZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1
bWVudCk7CiAgICAgICAgICAgICBpZiAoIW9sZE5vZGUpIHsKQEAgLTExNyw3ICsxMjMsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7
CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2Nh
bCA8IGJhc2VsaW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewogICAgICAgICAg
ICAgTm9kZSogcHJldmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9j
YWwpOwogICAgICAgICAgICAgaWYgKCFwcmV2aW91c0hlYWQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0
ICszNiwxNCBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpP
U1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQs
IHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQotICAgIDogT1NS
RXhpdEJhc2Uoa2luZCwgaml0LT5tX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBqaXQtPm1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlKQorICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29y
aWdpbi5mb3JFeGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljKQogICAgICwgbV9qc1ZhbHVlU291
cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAg
ICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQoMCkKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNv
dmVyeUluZGV4KQogICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1JbmRleCkKIHsKLSAgICBBU1NF
UlQobV9jb2RlT3JpZ2luLmlzU2V0KCkpOworICAgIERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFw
aCgpLCBqaXQtPm1fY3VycmVudE5vZGUsIGppdC0+bV9vcmlnaW4uZXhpdE9LKTsKIH0KIAogdm9p
ZCBPU1JFeGl0OjpzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFi
bGVKdW1wIGNoZWNrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dEJhc2UuaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2Jq
ZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzgsNyAr
MTY3OCw4IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICBOb2RlKiBpZGVudGlmaWVyID0g
aW5kZXhUb05vZGVbdmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIG1fZXNjYXBl
ZVRvTWF0ZXJpYWxpemF0aW9uLmFkZChpZGVudGlmaWVyLCBwaGlEZWYtPnZhbHVlKCkpOwotICAg
ICAgICAgICAgICAgIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKDAsIE5vZGVPcmlnaW4oKSwgYXZh
aWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgaWRlbnRpZmllciwgcGhpRGVmLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgwLCBOb2RlT3JpZ2luKCksIGNhbkV4aXQs
IGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGlkZW50aWZpZXIsIHBoaURl
Zi0+dmFsdWUoKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7
CkBAIC0xNjg4LDYgKzE2ODksNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4
KSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZm9y
IChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiA6IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlv
bi5nZXQobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmtpbmQoKSAh
PSBOYW1lZFByb3BlcnR5UExvYykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTY5NywxMSArMTY5OSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAo
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRl
SGludChtX2dyYXBoLCBub2RlLT5vcmlnaW4sIG1fYm90dG9tKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRlSGludCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLCBtX2JvdHRv
bSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6YXRpb24gOiBtX21hdGVyaWFsaXphdGlvblNp
dGVUb01hdGVyaWFsaXphdGlvbnMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1h
dGVyaWFsaXphdGlvbi0+b3JpZ2luLmV4aXRPSyAmPSBzdGQ6OmV4Y2hhbmdlKGNhbkV4aXQsIGZh
bHNlKTsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0
aW9uVG9Fc2NhcGVlLmdldChtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICAgICAgICAgICAgICBw
b3B1bGF0ZU1hdGVyaWFsaXphdGlvbihibG9jaywgbWF0ZXJpYWxpemF0aW9uLCBlc2NhcGVlKTsK
ICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6YXRpb24uc2V0KGVzY2Fw
ZWUsIG1hdGVyaWFsaXphdGlvbik7CkBAIC0xNzExLDcgKzE3MTUsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRp
b24gbG9jYXRpb24gOiBtX21hdGVyaWFsaXphdGlvblNpdGVUb1JlY292ZXJpZXMuZ2V0KG5vZGUp
KQotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUluZGV4LCBj
cmVhdGVSZWNvdmVyeShibG9jaywgbG9jYXRpb24sIG5vZGUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgY3JlYXRlUmVjb3ZlcnkoYmxvY2ss
IGxvY2F0aW9uLCBub2RlLCBjYW5FeGl0KSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVk
IHRvIHB1dCB0aGUgT1NSIGhpbnRzIGFmdGVyIHRoZSByZWNvdmVyaWVzLAogICAgICAgICAgICAg
ICAgIC8vIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRoZSBoaW50cyBvbmNlIHRoZSBvYmplY3QgaXMK
QEAgLTE3MTksMTAgKzE3MjMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmb3IgKE5v
ZGUqIG1hdGVyaWFsaXphdGlvbiA6IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxpemF0
aW9ucy5nZXQobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZXNjYXBlZSA9IG1f
bWF0ZXJpYWxpemF0aW9uVG9Fc2NhcGVlLmdldChtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZUluZGV4LCBub2RlLT5vcmlnaW4sIGNhbkV4aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBh
dmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LCBlc2NhcGVlLCBtYXRlcmlhbGl6
YXRpb24pOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5v
cmlnaW4uZXhpdE9LICYmICFjYW5FeGl0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGlu
ZGljYXRlIHRoYXQgdGhlIGV4aXQgc3RhdGUgaXMgZmluZSBub3cuIEl0IGlzIE9LIGJlY2F1c2Ug
d2UgdXBkYXRlZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgYWJvdmUuIFdlIG5l
ZWQgdG8gaW5kaWNhdGUgdGhpcyBtYW51YWxseSBiZWNhdXNlIHRoZSB2YWxpZGF0aW9uIGRvZXNu
J3QKKyAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gaW5m
ZXIgdGhhdCB0aGUgZXhpdCBzdGF0ZSBpcyBmaW5lLgorICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEV4aXRPSywgbm9kZS0+
b3JpZ2luKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAobV9zaW5r
Q2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGVl
VG9NYXRlcmlhbGl6YXRpb24uc2V0KG5vZGUsIG5vZGUpOwogCkBAIC0xNzUwLDggKzE3NjEsMTAg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgICAgICAgICAgICAgZG9Mb3dlciA9IHRydWU7CiAK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgg
KyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9n
cmFwaCwgbm9kZS0+b3JpZ2luLCBub2RlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXggKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhp
bnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdp
bi53aXRoSW52YWxpZEV4aXQoKSwgbm9kZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0s
CiAgICAgICAgICAgICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24p
IC0+IE5vZGUqIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGJsb2Nr
LCBsb2NhdGlvbik7CkBAIC0xODcxLDcgKzE4ODQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1
cm4gZGVmLT52YWx1ZSgpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRh
dGUodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgQXZhaWxhYmlsaXR5TWFw
JiBhdmFpbGFiaWxpdHksIE5vZGUqIGVzY2FwZWUsIE5vZGUqIG1hdGVyaWFsaXphdGlvbikKKyAg
ICB2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9y
aWdpbiBvcmlnaW4sIGJvb2wmIGNhbkV4aXQsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5
LCBOb2RlKiBlc2NhcGVlLCBOb2RlKiBtYXRlcmlhbGl6YXRpb24pCiAgICAgewogICAgICAgICAv
LyBXZSBuZWVkIHRvIGZvbGxvdygpIHRoZSB2YWx1ZSBpbiB0aGUgaGVhcC4KICAgICAgICAgLy8g
Q29uc2lkZXIgdGhlIGZvbGxvd2luZyBncmFwaDoKQEAgLTE5MDUsNyArMTkxOCw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydCgKLSAgICAgICAgICAgICAgICBub2RlSW5kZXgsIGVudHJ5LmtleS5jcmVhdGVI
aW50KG1fZ3JhcGgsIG9yaWdpbiwgbWF0ZXJpYWxpemF0aW9uKSk7CisgICAgICAgICAgICAgICAg
bm9kZUluZGV4LAorICAgICAgICAgICAgICAgIGVudHJ5LmtleS5jcmVhdGVIaW50KG1fZ3JhcGgs
IG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBtYXRlcmlhbGl6YXRpb24pKTsKICAgICAg
ICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5z
aXplKCk7IGktLTspIHsKQEAgLTE5MTYsNyArMTkzMCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAg
ICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChp
KTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8ob3BlcmFuZCks
CisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRh
a2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBt
YXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA0
Miw3ICsyMDU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIE5vZGUqIGNy
ZWF0ZVJlY292ZXJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbiwgTm9kZSogd2hlcmUpCisgICAgTm9kZSogY3JlYXRlUmVjb3ZlcnkoQmFzaWNCbG9jayog
YmxvY2ssIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB3aGVyZSwgYm9vbCYg
Y2FuRXhpdCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxv
ZygiUmVjb3ZlcmluZyAiLCBsb2NhdGlvbiwgIiBhdCAiLCB3aGVyZSwgIlxuIik7CkBAIC0yMDUw
LDEyICsyMDY0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXRNYXRlcmlh
bGl6YXRpb24oYmxvY2ssIGxvY2F0aW9uLmJhc2UoKSk7CiAgICAgICAgIE5vZGUqIHZhbHVlID0g
cmVzb2x2ZShibG9jaywgbG9jYXRpb24pOwogCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0g
d2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKTsKKwogICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkJhc2UgaXMgIiwgYmFzZSwg
IiBhbmQgdmFsdWUgaXMgIiwgdmFsdWUsICJcbiIpOwogCiAgICAgICAgIGlmIChiYXNlLT5pc1Bo
YW50b21BbGxvY2F0aW9uKCkpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9tb3RlZEhlYXBMb2Nh
dGlvbihiYXNlLCBsb2NhdGlvbi5kZXNjcmlwdG9yKCkpLmNyZWF0ZUhpbnQoCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaCwgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNl
bWFudGljKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG9yaWdpbi50YWtlVmFs
aWRFeGl0KGNhbkV4aXQpLCB2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKGxv
Y2F0aW9uLmtpbmQoKSkgewpAQCAtMjA4OSw3ICsyMTA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgICAgICBTcGVj
Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgUHV0QnlPZmZzZXQsCi0gICAgICAgICAgICAgICAg
ICAgIHdoZXJlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRF
eGl0KGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksCiAgICAgICAg
ICAgICAgICAgICAgIEVkZ2Uoc3RvcmFnZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAgICAg
ICAgICAgRWRnZShiYXNlLCBLbm93bkNlbGxVc2UpLApAQCAtMjExOCw3ICsyMTM0LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICAg
ICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldCwKLSAgICAgICAg
ICAgICAgICB3aGVyZS0+b3JpZ2luLndpdGhTZW1hbnRpYyhiYXNlLT5vcmlnaW4uc2VtYW50aWMp
LAorICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAgICAg
ICAgICAgICAgIE9wSW5mbyhkYXRhKSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2UsIEtub3du
Q2VsbFVzZSksCiAgICAgICAgICAgICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpAQCAtMjEy
OSw3ICsyMTQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5v
ZGUoCiAgICAgICAgICAgICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgUHV0Q2xvc3Vy
ZVZhciwKLSAgICAgICAgICAgICAgICB3aGVyZS0+b3JpZ2luLndpdGhTZW1hbnRpYyhiYXNlLT5v
cmlnaW4uc2VtYW50aWMpLAorICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNh
bkV4aXQpLAogICAgICAgICAgICAgICAgIE9wSW5mbyhsb2NhdGlvbi5pbmZvKCkpLAogICAgICAg
ICAgICAgICAgIEVkZ2UoYmFzZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAgICAgICB2YWx1
ZS0+ZGVmYXVsdEVkZ2UoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bo
YW50b21JbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
bWF5RXhpdChtX2dyYXBoLCBub2RlKSkgeworICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFw
aCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpIHsKICAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2gu
YnVtcCgpOwogICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggPSBub2RlSW5kZXg7CiAg
ICAgICAgICAgICB9CkBAIC0xNjAsMTAgKzE2MCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIGV4YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVz
ZSBtZWFucyB0aGF0IHdlIGhhdmUgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50
IHRoZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhS
ZWYoKTsKKworICAgICAgICAgICAgICAgICAgICBOb2RlKiBsYXN0RXhpdGluZ05vZGUgPSBibG9j
ay0+YXQobGFzdEV4aXRpbmdJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdEV4aXRpbmdJbmRleCArIDEsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLT5vcmlnaW4sIGtpbGxl
ZE5vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4aXRp
bmdOb2RlLT5vcmlnaW4uZm9ySW5zZXJ0aW5nQWZ0ZXIobV9ncmFwaCwgbGFzdEV4aXRpbmdOb2Rl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkpOwog
ICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OCw2
ICs2NjgsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6
CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAg
ICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5k
ZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xv
YmJlcnMgZXhpdC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKQEAgLTM0Niw3ICszNDcsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBw
aGlEZWYtPnZhcmlhYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCld
OwogICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1
c2hGb3JtYXQoKTsKLSAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2lu
ZEZvcihmb3JtYXQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW4gdW5j
aGVja2VkIHVzZSBraW5kIGJlY2F1c2UgdGhlIFNldExvY2FsIHdhcyB0dXJuZWQgaW50byBhIENo
ZWNrLgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHVzZSBhbiB1bmNoZWNrZWQg
dXNlIGJlY2F1c2UgYXQgbGVhc3Qgc29tZXRpbWVzLCB0aGUgZW5kIG9mIHRoZSBibG9jaworICAg
ICAgICAgICAgICAgICAgICAvLyBpcyBub3QgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBV
c2VLaW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9u
ZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4
LDYgKzEzOCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAg
ICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6
CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoK
ICAgICBjYXNlIFBoaToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTg5Miw2ICsxODkyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSogbm9kZSkKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KKworICAgIGNhc2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAg
c3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcxLDYgKzE5NzEsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5v
ZGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6
IHsKICAgICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3Jt
YXQoKSkgewogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg4
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRp
dmVKSVQoSklUQ29tcGlsCiAgICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3Rh
dGUpCiAgICAgLCBtX3N0cmVhbSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkK
ICAgICAsIG1fbWluaWZpZWRHcmFwaCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCi0gICAg
LCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKGZhbHNlKQogewogfQogCkBAIC0xOTYsNyArMTk1
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6
ekp1bXAgPSBlbWl0T1NSRXhpdEZ1enpDaGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgp
KSB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFpbDsKQEAgLTIxMiw3
ICsyMTAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVt
cCBmdXp6SnVtcCA9IGVtaXRPU1JFeGl0RnV6ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlz
U2V0KCkpIHsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IG15SnVtcHNUb0ZhaWw7CkBA
IC0yMjgsNyArMjI1LDYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6
cwogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1w
UGxhY2Vob2xkZXIoKTsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2NhbkV4aXQpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0
LnNpemUoKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmppdENvZGUo
KS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBo
KCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0t
PnNpemUoKSkpOwpAQCAtMjM3LDE5ICsyMzMsMTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBT
cGVjdWxhdGl2ZUpJVDo6cwogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNW
YWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRv
RmFpbCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtp
bmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0
IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9
CiAKQEAgLTI1Nyw3ICsyNTAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNp
Z25lZCByZWNvdmVyeUluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJl
Y292ZXJ5KHJlY292ZXJ5KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsK
ICAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVl
U291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9k
ZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIHJlY292ZXJ5SW5kZXgpKTsKQEAgLTI2NSw3ICsy
NTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1
bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFp
bCwgcmVjb3ZlcnkpOwogfQogCkBAIC0yNzMsNyArMjY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEludmFsaWRhdGlvblBvaQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2NhbkV4aXQpOwogICAgIE9TUkV4aXRDb21waWxhdGlv
bkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3Qo
KSk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAg
IFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBKU1ZhbHVlU291cmNlKCksCkBAIC0yODYsNyArMjc2
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5k
LCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobV9p
c0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgcmV0dXJuOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVJlZ3MsIG5vZGUsIG1faml0Lmp1bXAoKSk7CkBAIC0yOTcsNyArMjg2LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBq
c1ZhbHVlUmVncywgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQ2Nyw5ICsx
NDU1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAg
ICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwKICAgICAgICAgICAgICAgICBmb3Jt
YXQpKTsKICAgICB9Ci0gICAgCi0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVP
cmlnaW4oKTsKLSAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oKTsK
KworICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwogICAgIAogICAgIGZvciAobV9pbmRleElu
QmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5C
bG9jaykgewogICAgICAgICBtX2N1cnJlbnROb2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxv
Y2spOwpAQCAtMTQ4MSwxNSArMTQ2OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBp
ZiAoQVNTRVJUX0RJU0FCTEVEKQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gdHJ1ZTsgLy8gRXNz
ZW50aWFsbHkgZGlzYWJsZSB0aGUgYXNzZXJ0aW9ucy4KLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9jYW5FeGl0ID0gbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKLSAg
ICAgICAgCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAg
bV9qaXQuc2V0Rm9yTm9kZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9y
RXhpdFRhcmdldCA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0OwotICAgICAgICBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYzsK
KyAgICAgICAgbV9vcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5vcmlnaW47CisgICAgICAgIGlmICh2
YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgbV9vcmlnaW4uZXhpdE9LICY9IG1heUV4
aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgPT0gRXhpdHM7CiAgICAgICAgIG1fbGFz
dEdlbmVyYXRlZE5vZGUgPSBtX2N1cnJlbnROb2RlLT5vcCgpOwogICAgICAgICAKICAgICAgICAg
QVNTRVJUKG1fY3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwpAQCAtMTUzNiw5ICsxNTE5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVu
dE5vZGUpOwotICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSB0cnVlOwotICAgIG1fY29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKDApOwotICAgIG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigwKTsKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4o
Q29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CiAKICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAg
ICBOb2RlKiBub2RlID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKQEAgLTE2MDEsNyAr
MTU4Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAg
ICAgfQogI2VuZGlmCiAgICAgfQotICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxz
ZTsKKworICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwogfQogCiBib29sIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1OCw3ICsyNDU4
LDYgQEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJy
ZW50Tm9kZTsKICAgICBOb2RlVHlwZSBtX2xhc3RHZW5lcmF0ZWROb2RlOwotICAgIGJvb2wgbV9j
YW5FeGl0OwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5k
IHBoeXNpY2FsIHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4g
bV9nZW5lcmF0aW9uSW5mbzsKQEAgLTI0NzksOCArMjQ3OCw3IEBAIHB1YmxpYzoKICAgICB9Owog
ICAgIFZlY3RvcjxCcmFuY2hSZWNvcmQsIDg+IG1fYnJhbmNoZXM7CiAKLSAgICBDb2RlT3JpZ2lu
IG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZTsKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIAogICAgIEluUGxh
Y2VBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNl
QWJzdHJhY3RTdGF0ZT4gbV9pbnRlcnByZXRlcjsKQEAgLTI0ODgsOCArMjQ4Niw2IEBAIHB1Ymxp
YzoKICAgICBWYXJpYWJsZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKICAgICBNaW5pZmllZEdyYXBo
KiBtX21pbmlmaWVkR3JhcGg7CiAgICAgCi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzOwotICAgIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+
LCA4PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZl
UGxhbj4gbV9wbGFuczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5
cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw4ICsxMDgsMTYgQEAgcHVibGljOgogICAgICAgICAg
ICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAg
ICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGluZGV4Rm9yQ2hlY2tzID0gVUlOVF9NQVg7CisgICAgICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbkZvckNoZWNrczsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJs
b2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsK
ICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5leGl0T0sp
IHsKKyAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MgPSBpbmRleEluQmxvY2s7Cisg
ICAgICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9IG5vZGUtPm9yaWdpbjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgLy8gQmUgY2Fy
ZWZ1bCBub3QgdG8gdXNlICdub2RlJyBhZnRlciBhcHBlbmRpbmcgdG8gdGhlIGdyYXBoLiBJbiB0
aG9zZSBzd2l0Y2gKICAgICAgICAgICAgICAgICAvLyBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIGFw
cGVuZCwgd2UgZmlyc3QgY2FyZWZ1bGx5IGV4dHJhY3QgZXZlcnl0aGluZyB3ZSBuZWVkCiAgICAg
ICAgICAgICAgICAgLy8gZnJvbSB0aGUgbm9kZSwgYmVmb3JlIGRvaW5nIGFueSBhcHBlbmRpbmcu
CkBAIC0xNzAsMTMgKzE3OCwxNSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBpZiAoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNOb25l
LCBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Gb3JD
aGVja3Mud2l0aFNlbWFudGljKG9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3Ry
dWN0dXJlKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgp
LCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlci0+dmFsdWUu
bV9hcnJheU1vZGVJc1ZhbGlkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRl
ci0+dmFsdWUubV9hcnJheU1vZGVIb2lzdGluZ09rYXkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwgb3JpZ2luLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3Mud2l0aFNlbWFudGljKG9y
aWdpbi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGl0ZXIt
PnZhbHVlLm1fYXJyYXlNb2RlLmFzV29yZCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBFZGdlKGNoaWxkMS5ub2RlKCksIENlbGxVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJl
cnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0xODUsMTMgKzE4NiwyOSBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJs
b2NrLT5hdChpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlKSwgbm9kZS0+b3JpZ2luLnNlbWFudGljLmlzU2V0KCkgPT0gbm9kZS0+b3JpZ2luLmZv
ckV4aXQuaXNTZXQoKSk7Ci0gICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbWF5RXhp
dChtX2dyYXBoLCBub2RlKSB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEoIW5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0
KCkgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKChu
b2RlKSwgIShtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpID09IEV4aXRzICYmICFub2RlLT5vcmlnaW4u
ZXhpdE9LKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaSkgeworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBwcmV2aW91c05vZGUgPSBibG9jay0+YXQoaSAtIDEpOworICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgICAgIChub2RlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICFjbG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBoLCBwcmV2aW91c05vZGUp
CisgICAgICAgICAgICAgICAgICAgICAgICB8fCAhbm9kZS0+b3JpZ2luLmV4aXRPSworICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQgIT0gcHJldmlvdXNOb2Rl
LT5vcmlnaW4uZm9yRXhpdCk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAg
ICAgICAgICAgICAgICAgICAgKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgISghcHJl
dmlvdXNOb2RlLT5vcmlnaW4uZXhpdE9LICYmIG5vZGUtPm9yaWdpbi5leGl0T0spCisgICAgICAg
ICAgICAgICAgICAgICAgICB8fCBub2RlLT5vcCgpID09IEV4aXRPSworICAgICAgICAgICAgICAg
ICAgICAgICAgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQgIT0gcHJldmlvdXNOb2RlLT5vcmlnaW4u
Zm9yRXhpdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc1N0cnVjdHVyZSgpIHx8ICEhbm9kZS0+
c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhh
c0NlbGxPcGVyYW5kKCkgfHwgbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKS5pc0NlbGwoKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQo
KSB8fCAhIW5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIShub2RlLT5mbGFncygpICYg
Tm9kZUhhc1ZhckFyZ3MpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbm9kZS0+Y2hpbGQy
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5jaGls
ZDMoKSk7CkBAIC0yMTAsMTAgKzIyNywxMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgVW50eXBlZFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuVXNl
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhIkJhZCB1c2Uga2luZCIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIGlubGluZSBDYXBhYmlsaXR5
TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2UgTW92
SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQ
aGFudG9tOgogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tTG9jYWw6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNyw5ICsyMjcsOCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5hcmd1bWVudChpKSA9CiAgICAgICAg
ICAgICAgICAgQXZhaWxhYmlsaXR5KEZsdXNoZWRBdChGbHVzaGVkSlNWYWx1ZSwgdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoaSkpKTsKICAgICAgICAgfQotICAgICAgICBtX2NvZGVPcmlnaW5G
b3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdpbigwKTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUgPSBDb2RlT3JpZ2luKDApOwogICAgICAgICBtX25vZGUgPSBudWxscHRyOworICAg
ICAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwg
dHJ1ZSk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGNvZGVCbG9jaygpLT5udW1QYXJhbWV0
ZXJzKCk7IGktLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1l
bnRzW2ldOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQgPSB2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpKTsKQEAgLTM5Myw4ICszOTIsNyBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBtX25vZGUgPSBtX2hpZ2hCbG9jay0+YXQobm9kZUluZGV4
KTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBtX25vZGUtPm9yaWdpbi5z
ZW1hbnRpYzsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IG1fbm9kZS0+b3Jp
Z2luLmZvckV4aXQ7CisgICAgICAgIG1fb3JpZ2luID0gbV9ub2RlLT5vcmlnaW47CiAgICAgICAg
IAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAg
ZGF0YUxvZygiTG93ZXJpbmcgIiwgbV9ub2RlLCAiXG4iKTsKQEAgLTg0MSw2ICs4MzksNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAg
ICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgY2FzZSBFeGl0T0s6CiAgICAgICAgIGNh
c2UgUGhhbnRvbU5ld09iamVjdDoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CiAg
ICAgICAgIGNhc2UgUGhhbnRvbUNyZWF0ZUFjdGl2YXRpb246CkBAIC04NzgsMTUgKzg3NywxOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxk
MSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgSW50
MzJVc2U6CisgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKICAgICAgICAgICAgIG1fb3V0LnNl
dChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICBtX291dC5zZXQo
bG93SW50NTIobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgIGNhc2UgS25vd25Cb29sZWFu
VXNlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSks
IGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENlbGxVc2U6
CisgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFVudHlwZWRVc2U6CkBAIC00NzUyLDEwICs0NzU0LDEyIEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEludmFsaWRhdGlvbiBwb2ludCB3aXRoIGF2YWlsYWJpbGl0eTog
IiwgYXZhaWxhYmlsaXR5TWFwKCksICJcbiIpOworCisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0spOwogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAgVW5jb3VudGFi
bGVJbnZhbGlkYXRpb24sIEludmFsaWRWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZSgpLAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2Rl
T3JpZ2luRm9yRXhpdFByb2ZpbGUsCisgICAgICAgICAgICBtX29yaWdpbi5mb3JFeGl0LCBtX29y
aWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51
bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fs
cy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwpAQCAtODA5Myw2ICs4MDk3LDgg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICghbV9hdmFpbGFibGVSZWNvdmVyaWVzLmlzRW1w
dHkoKSkKICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgICAgIEF2YWlsYWJsZSByZWNvdmVy
aWVzOiAiLCBsaXN0RHVtcChtX2F2YWlsYWJsZVJlY292ZXJpZXMpLCAiXG4iKTsKICAgICAgICAg
fQorCisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBtX29yaWdpbi5leGl0T0sp
OwogICAgICAgICAKICAgICAgICAgaWYgKGRvT1NSRXhpdEZ1enppbmcoKSkgewogICAgICAgICAg
ICAgTFZhbHVlIG51bWJlck9mRnV6ekNoZWNrcyA9IG1fb3V0LmFkZCgKQEAgLTgxMTcsNyArODEy
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9z
ckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQo
KSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCi0g
ICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSwKKyAgICAgICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGlj
LAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVu
dHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9j
YWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9T
UkV4aXRDb21waWxhdGlvbkluZm8oKSk7CkBAIC04NjEyLDkgKzg2MTgsOCBAQCBwcml2YXRlOgog
ICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwogICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hC
bG9jazsKICAgICBMQmFzaWNCbG9jayBtX25leHRMb3dCbG9jazsKLSAgICAKLSAgICBDb2RlT3Jp
Z2luIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZTsKKworICAgIE5vZGVPcmlnaW4gbV9vcmlnaW47CiAgICAgdW5zaWdu
ZWQgbV9ub2RlSW5kZXg7CiAgICAgTm9kZSogbV9ub2RlOwogICAgIApJbmRleDogU291cmNlL1dU
Ri93dGYvSW5zZXJ0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9u
LmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01OSw4ICs1OSwxMCBAQCB2b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRhcmdldFZl
Y3RvclR5cGUmCiAgICAgICAgIHJldHVybjsKICAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgp
ICsgaW5zZXJ0aW9ucy5zaXplKCkpOwogICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6
ZSgpOworICAgIHNpemVfdCBvcmlnaW5hbFRhcmdldFNpemUgPSB0YXJnZXQuc2l6ZSgpOwogICAg
IGZvciAoc2l6ZV90IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4
SW5JbnNlcnRpb25zLS07KSB7CiAgICAgICAgIEFTU0VSVCghaW5kZXhJbkluc2VydGlvbnMgfHwg
aW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSA+PSBpbnNlcnRpb25zW2luZGV4
SW5JbnNlcnRpb25zIC0gMV0uaW5kZXgoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQob3JpZ2lu
YWxUYXJnZXRTaXplLCBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpIDwgb3Jp
Z2luYWxUYXJnZXRTaXplKTsKICAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb25z
W2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpICsgaW5kZXhJbkluc2VydGlvbnM7CiAgICAgICAg
IHNpemVfdCBpbmRleE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259871</attachid>
            <date>2015-08-25 12:39:40 -0700</date>
            <delta_ts>2015-08-25 12:52:27 -0700</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80879</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBE
RkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAg
Ki87IH07CisJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjND
MUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovOyB9Owor
CQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBv
c3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM0Niw2ICszNDgsNyBAQAogCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29w
eVRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QTYyODMxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3Bw
ICovOyB9OwogCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyogREZH
Tm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87IH07
CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAv
KiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAw
NDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMjEwOCw2ICsyMTExLDggQEAKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0JEMUI2MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9
IGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
ZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zl
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTksNiArMjE2NCw3IEBACiAJ
CTBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29weVRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuY3BwOyBwYXRoID0g
ZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVB
NjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQz
QjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdOb2RlT3JpZ2luLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJ
VFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAz
RTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MTE5LDYgKzUxMjUsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyaXplLmggKi8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJTZXQuY3BwICovLAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyU2V0LmggKi8sCisJCQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIg
LyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4
QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcy
MDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLywKQEAgLTUyNDAsNiArNTI0OCw3IEBACiAJCQkJ
MEZCNEI1MUYxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGVBbGxvY2F0b3IuaCAqLywKIAkJCQkw
RkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1
ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCisJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLApAQCAtNjE0OCw2
ICs2MTU3LDcgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
M0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MzgxLDYgKzczOTEsNyBAQAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1
Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAy
MEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5
MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJz
dHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJG
RCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3
NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0
LDYgKzc1NDUsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklU
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyog
RXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVEMDg1RDFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5
MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5NzhCM0IxQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkUwNTAyNTFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBw
YXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5v
bi1UT1AgcGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5
bG9hZC4KIC8vIC0gSGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRl
U3RhdGUgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBUT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55
IG90aGVyIGtpbmQgd2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9m
IHRoZSBzYW1lIGtpbmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTAsNiArMjQ1
MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwV2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIK
ICNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIK
KyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgpAQCAtMzYyLDYg
KzM2Myw5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9w
SW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFsdWUpOwogCisgICAgICAgIC8vIFdlIGNhbid0IGV4
aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMgY2hhbmdlZC4KKyAgICAg
ICAgbV9leGl0T0sgPSBmYWxzZTsKKwogICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZChj
dXJyZW50Q29kZU9yaWdpbigpLCBvcGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoc2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKQEAgLTM3NCw4ICszNzgsMTQgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpCisgICAg
ICAgIC8vIFdlIHBsYXkgaGFja3Mgd2l0aCBtX2V4aXRPSyBoZXJlLiBXZSBrbm93IHRoYXQgdGhl
IFNldExvY2FscyB3ZSBhcmUgZW1pdHRpbmcgYXJlIGFscmVhZHkKKyAgICAgICAgLy8gcmVjb3Jk
ZWQgaW4gT1NSIGV4aXQgc3RhdGUsIHNvIHRoZXkgYXJlbid0IHJlYWwgZWZmZWN0cy4gU28sIHdl
IGRvbid0IHdhbnQgdGhlbSB0byBoYXZlIGFueQorICAgICAgICAvLyBlZmZlY3Qgb24gbV9leGl0
T0suCisgICAgICAgIGJvb2wgZXhpdE9LQmVmb3JlID0gbV9leGl0T0s7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIG1fc2V0TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICAgICAgbV9l
eGl0T0sgPSBleGl0T0tCZWZvcmU7CisgICAgICAgIH0KICAgICAgICAgbV9zZXRMb2NhbFF1ZXVl
LnJlc2l6ZSgwKTsKICAgICB9CiAKQEAgLTY1MSwxNSArNjYxLDE3IEBAIHByaXZhdGU6CiAKICAg
ICBOb2RlT3JpZ2luIGN1cnJlbnROb2RlT3JpZ2luKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgc2V0IHRoZSBmb3JFeGl0IG9yaWdpbiBvbmx5IG9uIHRob3NlIG5vZGVzIHRo
YXQgY2FuIGV4aXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDUyMDQKICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpYzsKKyAgICAgICAgQ29k
ZU9yaWdpbiBmb3JFeGl0OworCiAgICAgICAgIGlmIChtX2N1cnJlbnRTZW1hbnRpY09yaWdpbi5p
c1NldCgpKQogICAgICAgICAgICAgc2VtYW50aWMgPSBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2VtYW50aWMgPSBjdXJyZW50Q29kZU9yaWdpbigp
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGN1cnJlbnRD
b2RlT3JpZ2luKCksIHRydWUpOworCisgICAgICAgIGZvckV4aXQgPSBjdXJyZW50Q29kZU9yaWdp
bigpOworCisgICAgICAgIHJldHVybiBOb2RlT3JpZ2luKHNlbWFudGljLCBmb3JFeGl0LCBtX2V4
aXRPSyk7CiAgICAgfQogICAgIAogICAgIEJyYW5jaERhdGEqIGJyYW5jaERhdGEodW5zaWduZWQg
dGFrZW4sIHVuc2lnbmVkIG5vdFRha2VuKQpAQCAtNjc3LDYgKzY4OSwxOCBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAgICAgICBhcHBlbmRlZCAiLCBub2RlLCAiICIsIEdyYXBoOjpvcE5h
bWUobm9kZS0+b3AoKSksICJcbiIpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKG5v
ZGUpOworICAgICAgICBjbG9iYmVyaXplKAorICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9P
cENsb2JiZXJpemUoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFw
KSB7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVzIHRvIFNpZGVTdGF0ZSBhcmUgbm90IG9ic2Vy
dmFibGUuCisgICAgICAgICAgICAgICAgaWYgKGhlYXAuaXNTdWJ0eXBlT2YoU2lkZVN0YXRlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgLy8gV2UgYXNz
dW1lIGFsbCBvdGhlciB3cml0ZXMgYXJlIG9ic2VydmFibGUsIGFuZCBzbyBpZiB3ZSB0cmllZCB0
byBleGl0IGFmdGVyIHRoZW0KKyAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBzYW1lIG9yaWdp
biB0aGVuIHdlJ2QgY2F1c2UgdGhhdCBlZmZlY3QgdG8gcmVwZWF0LgorICAgICAgICAgICAgICAg
IG1fZXhpdE9LID0gZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2Ji
ZXJpemUoKSk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICAKQEAgLTkwMCw2ICs5
MjQsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwogICAgIC8vIFRo
ZSBzZW1hbnRpYyBvcmlnaW4gb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBkaWZmZXJlbnQgZnJvbSB0
aGUgY3VycmVudCBJbmRleC4KICAgICBDb2RlT3JpZ2luIG1fY3VycmVudFNlbWFudGljT3JpZ2lu
OworICAgIC8vIFRydWUgaWYgaXQncyBPSyB0byBPU1IgZXhpdCByaWdodCBub3cuCisgICAgYm9v
bCBtX2V4aXRPSyB7IGZhbHNlIH07CiAKICAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudFVuZGVm
aW5lZDsKICAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE51bGw7CkBAIC0xMDUzLDYgKzEwNzks
NyBAQCBwcml2YXRlOgogCiAjZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKICAgICBtX2N1cnJl
bnRJbmRleCArPSBPUENPREVfTEVOR1RIKG5hbWUpOyBcCisgICAgbV9leGl0T0sgPSBmYWxzZTsg
XAogICAgIHJldHVybiBzaG91bGRDb250aW51ZVBhcnNpbmcKIAogdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCkBAIC0xMzUxLDExICsxMzc4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICB9CiAgICAgCiAgICAgbV9ncmFwaC5tX2lubGlu
ZVZhcmlhYmxlRGF0YS5hcHBlbmQoaW5saW5lVmFyaWFibGVEYXRhKTsKKworICAgIC8vIEF0IHRo
aXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisgICAgbV9leGl0T0sgPSB0cnVl
OworICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwog
ICAgIGNsZWFyQ2FjaGVzKCk7IC8vIFJlc2V0IG91ciBzdGF0ZSBub3cgdGhhdCB3ZSdyZSBiYWNr
IHRvIHRoZSBvdXRlciBjb2RlLgogICAgIAogICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7
CisgICAgbV9leGl0T0sgPSBmYWxzZTsKICAgICAKICAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2Rl
IGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBk
by4KICAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3Jh
cGgubGFzdEJsb2NrKCkpIHsKQEAgLTI5MDEsMTIgKzI5MzMsMTUgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IG1fdm0tPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwog
ICAgIHVuc2lnbmVkIGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKLSAgICAKKwogICAgIC8v
IElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBh
cmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8gdXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4g
YXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBv
cHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHkuCiAgICAgaWYgKG1fY3Vy
cmVudEJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkgJiYgIWlubGluZUNhbGxGcmFtZSgpKSB7CiAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKKyAgICAg
ICAgLy8gV2Ugd2lsbCBlbWl0IFNldEFyZ3VtZW50IG5vZGVzLiBUaGV5IGRvbid0IGV4aXQsIGJ1
dCB3ZSdyZSBhdCB0aGUgdG9wIG9mIGFuIG9wX2VudGVyIHNvCisgICAgICAgIC8vIGV4aXRPSyA9
IHRydWUuCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKTsKQEAgLTI5MjIsNiArMjk1NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgLy8gV2Un
cmUgc3RhcmluZyBhIG5ldyBieXRlY29kZSBpbnN0cnVjdGlvbi4gSGVuY2UsIHdlIG9uY2UgYWdh
aW4gaGF2ZSBhIHBsYWNlIHRoYXQgd2UgY2FuIGV4aXQKKyAgICAgICAgLy8gdG8uCisgICAgICAg
IG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgCiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVl
KCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0
aW9ucy4KQEAgLTI5OTgsNyArMzAzNyw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0g
bV9ncmFwaC5mcmVlemUoY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKGZyb3plbiksIGNhbGxlZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGZyb3plbikpKTsKIAogICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWNoZWRGdW5j
dGlvbik7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgCiAg
ICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoK
ICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBQaGk6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMg
d2hvc2UgZWZmZWN0IG9uIHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hh
dCB0aGV5CisgICAgLy8gbm9ybWFsbHkgY2xvYmJlci4KKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgUHV0
SGludDoKKyAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBj
YXNlIFNldExvY2FsOgorICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIC8vIFRoZXNlIG5vZGVz
IHdyaXRlIHRvIHRoZSBzdGFjaywgYnV0IHRoZXkgbWF5IG9ubHkgZG8gc28gYWZ0ZXIgd2UgaGF2
ZSBhbHJlYWR5IGhhZCBhIE1vdkhpbnQKKyAgICAgICAgLy8gZm9yIHRoZSBleGFjdCBzYW1lIHZh
bHVlIGFuZCB0aGUgc2FtZSBzdGFjayBsb2NhdGlvbi4gSGVuY2UsIHRoZXkgaGF2ZSBubyBmdXJ0
aGVyIGVmZmVjdCBvbgorICAgICAgICAvLyBleGl0IHN0YXRlLgorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAgY2FzZSBBcnJheWlmeToK
KyAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMg
b2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUgdGhlCisgICAgICAgIC8vIGhl
YXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3Qs
IGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0NDAKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBub2Rlcywg
d2UganVzdCBjYXJlIGFib3V0IHdoZXRoZXIgdGhleSB3cml0ZSB0byBzb21ldGhpbmcgb3RoZXIg
dGhhbiBTaWRlU3RhdGUuCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGNs
b2JiZXJpemUoCisgICAgICAgICAgICBncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwKKyAg
ICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHN1Y2ggYSB0aGluZyBhcyBhIHN0cmljdCBzdWJ0eXBl
IG9mIFNpZGVTdGF0ZS4gVGhhdCdzIHdoYXQgYWxsb3dzCisgICAgICAgICAgICAgICAgLy8gdXMg
dG8gdXNlIGEgZmFzdCAhPSBjaGVjaywgYmVsb3cuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFo
ZWFwLmlzU3RyaWN0U3VidHlwZU9mKFNpZGVTdGF0ZSkpOworCisgICAgICAgICAgICAgICAgaWYg
KGhlYXAgIT0gU2lkZVN0YXRlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisjZGVmaW5lIERGR0Nsb2JiZXJz
RXhpdFN0YXRlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworc3RydWN0IE5vZGU7CisKKy8vIEEgY29uc2Vy
dmF0aXZlIGFwcHJveGltYXRpb24gb2Ygd2hldGhlciB0aGUgbm9kZSB3aWxsIHBlcmZvcm0gYW4g
ZWZmZWN0IHRoYXQgbWVhbnMgdGhhdCB3ZSBjYW4gbm8KKy8vIGxvbmdlciBleGl0IHRvIHRoaXMg
bm9kZSdzIGV4aXQgb3JpZ2luLgorCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiwgTm9k
ZSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5v
ZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CiAKKyAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVkZ2Uuc2V0
VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24g
PSAwOwpAQCAtNzEzLDcgKzcxNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTIxIG9yCiAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTI0LgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2sgKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0
aW9uKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVj
Tm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4ud2l0aEludmFsaWRFeGl0KCksIE9wSW5mbyh0cmFu
c2l0aW9uKSwKKyAgICAgICAgICAgICAgICBjaGlsZEVkZ2UpOwogICAgICAgICB9CiAgICAgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKICAgICBjYXNlIFNldExvY2FsOgogICAgIGNhc2UgTW92SGludDoKICAgICBj
YXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgogICAg
IGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2
Miw2ICsxMzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAg
Y2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgRXhp
dE9LOgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBjYXNlIFR5cGVPZjoKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTYzNyw2ICsxNjM4LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgLy8gTk9URTogQW55IHR5cGUgY2hlY2tzIHdlIHB1dCBoZXJl
IG1heSBnZXQgaG9pc3RlZCBieSBmaXh1cENoZWNrc0luQmxvY2soKS4gU28sIGlmIHdlCisgICAg
ICAgICAgICAgICAgLy8gYWRkIG5ldyB0eXBlIGNoZWNraW5nIHVzZSBraW5kIGZvciBTZXRMb2Nh
bHMsIHdlIG5lZWQgdG8gbW9kaWZ5IHRoYXQgY29kZSBhcyB3ZWxsLgorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTIxMTAsOCArMjExNCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgbV9ibG9jayA9
IGJsb2NrOwotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sg
PCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhG
b3JDaGVja3MgPSBVSU5UX01BWDsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5Gb3JDaGVja3M7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBh
IG5vZGUgYXQgd2hpY2ggd2UgY291bGQgZXhpdCwgdGhlbiBzYXZlIGl0cyBpbmRleC4gSWYgbm9k
ZXMgYWZ0ZXIgdGhpcyBvbmUKKyAgICAgICAgICAgIC8vIGNhbm5vdCBleGl0LCB0aGVuIHdlIHdp
bGwgaG9pc3QgY2hlY2tzIHRvIGhlcmUuCisgICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4
aXRPSykgeworICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJbkJsb2NrOwor
ICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhlIG9yaWdpbiBmb3IgY2hl
Y2tzIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IG9yaWdpbiwgZXhjZXB0IGZvciB0aGUKKyAg
ICAgICAgICAgIC8vIGV4aXRPSyBmbGFnLgorICAgICAgICAgICAgQVNTRVJUKGluZGV4Rm9yQ2hl
Y2tzID09IFVJTlRfTUFYIHx8IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKHRydWUpID09IG9yaWdp
bkZvckNoZWNrcyk7CisKKyAgICAgICAgICAgIC8vIEJ1dCwgb3V0IG9mIGFuIGFidW5kYW5jZSBv
ZiBjYXV0aW9uLCB3ZSBzZXQgdXAgdGhlIG9yaWdpbiBmb3IgY2hlY2tzIHRvIGhhdmUgb3VyIG5v
ZGUncworICAgICAgICAgICAgLy8gc2VtYW50aWMgb3JpZ2luLiBUaGlzIHdheSwgaW4gcmVsZWFz
ZSBidWlsZHMsIHdlJ2xsIHN0aWxsIGRvIHNvbWV0aGluZyBzZW5zaWJsZSBldmVuIGlmCisgICAg
ICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIHdyb25nLgorICAgICAgICAgICAgb3JpZ2luRm9y
Q2hlY2tzID0gb3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1hbnRpYyhub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogCiAgICAgICAgICAgICAvLyBGaXJzdCwgdHJ5IHRvIHJlbGF4IHRoZSByZXByZXNlbnRh
dGlvbmFsIGRlbWFuZHMgb2YgZWFjaCBub2RlLCBpbiBvcmRlciB0byBoYXZlCiAgICAgICAgICAg
ICAvLyBmZXdlciBjb252ZXJzaW9ucy4KQEAgLTIxNzUsMjEgKzIxOTcsMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkg
ewogICAgICAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHQgPSBudWxscHRyOwotICAgICAgICAK
KwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNl
IERvdWJsZVJlcFJlYWxVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwTWFj
aGluZUludFVzZTogewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJs
ZVJlc3VsdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPmlzTnVtYmVyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUsIERvdWJsZUNvbnN0YW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZUNvbnN0
YW50LCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmZyZWV6ZShqc0RvdWJsZU51bWJlcihlZGdlLT5hc051bWJlcigpKSkpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWRnZS0+aGFzSW50NTJSZXN1bHQo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjSW50NTJBc0RvdWJs
ZSwgRG91YmxlUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIEludDUyUmVwVXNlKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNl
S2luZDsKQEAgLTIyMDEsNTMgKzIyMjMsODcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlS2luZCA9IE5vdENlbGxVc2U7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91Ymxl
LCBEb3VibGVSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBvcmlnaW5G
b3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2Rl
KCksIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlZGdlLT5oYXNJbnQ1MlJlc3VsdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmlzTWFjaGluZUludENvbnN0YW50KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgU3BlY01hY2hpbmVJbnQsIEludDUyQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNNYWNoaW5lSW50LCBJ
bnQ1MkNvbnN0YW50LCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhlZGdlLT5jb25zdGFudCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJ
bnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEZvckNoZWNrcywgU3BlY01hY2hpbmVJbnQsIEludDUyUmVwLCBvcmlnaW5Gb3JDaGVja3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJs
ZVJlcE1hY2hpbmVJbnRVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ZWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1ldGljKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBJ
bnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEZvckNoZWNrcywgU3BlY0ludDMyLCBJbnQ1MlJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQzMlVzZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUy
UmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
Rm9yQ2hlY2tzLCBTcGVjTWFjaGluZUludCwgSW50NTJSZXAsIG9yaWdpbkZvckNoZWNrcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgTWFjaGluZUlu
dFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UtPmhhc0Rv
dWJsZVJlc3VsdCgpICYmICFlZGdlLT5oYXNJbnQ1MlJlc3VsdCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJs
ZVJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIFNwZWNCeXRlY29kZURvdWJsZSwgVmFsdWVSZXAsIG5vZGUtPm9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRl
Y29kZURvdWJsZSwgVmFsdWVSZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgRG91YmxlUmVwVXNlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwg
VmFsdWVSZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbiwg
RWRnZShlZGdlLm5vZGUoKSwgSW50NTJSZXBVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNJbnQzMiB8IFNwZWNJbnQ1MkFzRG91YmxlLCBW
YWx1ZVJlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tz
LCBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9IH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1
bHQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgcmVtb3RlbHkgcG9zc2libGUgdGhh
dCB0aGlzIG5vZGUgY2Fubm90IGRvIHR5cGUgY2hlY2tzLCBidXQgd2Ugbm93IGhhdmUgYQorICAg
ICAgICAgICAgICAgICAgICAvLyB0eXBlIGNoZWNrIG9uIHRoaXMgbm9kZS4gV2UgZG9uJ3QgaGF2
ZSB0byBoYW5kbGUgdGhlIGdlbmVyYWwgZm9ybSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAg
IC8vIHByb2JsZW0uIEl0IG9ubHkgYXJpc2VzIHdoZW4gQnl0ZUNvZGVQYXJzZXIgZW1pdHMgYW4g
aW1tZWRpYXRlIFNldExvY2FsLCByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhbiBh
IGRlbGF5ZWQgb25lLiBTbywgd2Ugb25seSB3b3JyeSBhYm91dCB0aG9zZSBjaGVja3MgdGhhdCB3
ZSBtYXkgaGF2ZSBwdXQgb24KKyAgICAgICAgICAgICAgICAgICAgLy8gYSBTZXRMb2NhbC4gTm90
ZSB0aGF0ICJpbmRleEZvckNoZWNrcyAhPSBpbmRleEluQmxvY2siIGlzIGp1c3QgYW5vdGhlciB3
YXkgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gc2F5aW5nICIhbm9kZS0+b3JpZ2luLmV4aXRP
SyIuCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleEZvckNoZWNrcyAhPSBpbmRleEluQmxv
Y2sgJiYgbWF5SGF2ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVzZUtpbmQga25vd25Vc2VLaW5kID0gVW50eXBlZFVzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtp
bmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrbm93blVzZUtpbmQgPSBLbm93bkludDMyVXNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDZWxsVXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IEtu
b3duQ2VsbFVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrbm93blVzZUtpbmQgPSBLbm93bkJvb2xlYW5Vc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBr
aW5kIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNw
ZWNOb25lLCBDaGVjaywgb3JpZ2luRm9yQ2hlY2tzLCBlZGdlKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKGtub3duVXNlS2luZCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE4ODg4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNiArOTAsMjggQEAgaW5saW5lIFVzZUtpbmQgdXNlS2luZEZvcihGbHVz
aEZvcm1hdCBmbwogICAgIHJldHVybiBVbnR5cGVkVXNlOwogfQogCitpbmxpbmUgVXNlS2luZCB1
bmNoZWNrZWRVc2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZv
cm1hdCkgeworICAgIGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Cisg
ICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICByZXR1cm4gVW50eXBlZFVzZTsKKyAg
ICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICByZXR1cm4gS25vd25DZWxsVXNlOworICAgIGNh
c2UgRmx1c2hlZEludDMyOgorICAgICAgICByZXR1cm4gS25vd25JbnQzMlVzZTsKKyAgICBjYXNl
IEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgcmV0dXJuIEludDUyUmVwVXNlOworICAgIGNhc2UgRmx1
c2hlZERvdWJsZToKKyAgICAgICAgcmV0dXJuIERvdWJsZVJlcFVzZTsKKyAgICBjYXNlIEZsdXNo
ZWRCb29sZWFuOgorICAgICAgICByZXR1cm4gS25vd25Cb29sZWFuVXNlOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBVbnR5cGVkVXNlOworfQor
CiBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihGbHVzaEZvcm1hdCBmb3JtYXQp
CiB7CiAgICAgcmV0dXJuIHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcihmb3JtYXQpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5j
bHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNp
bmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIK
KyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcC5oIgpAQCAtMTAxLDggKzEwMywxNCBAQCBzdGF0aWMgdm9pZCBw
cmludFdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQog
Ci1ib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFy
KiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250
ZXh0KiBjb250ZXh0KQorYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiYgcHJldmlvdXNOb2RlUmVmLCBOb2RlKiBjdXJy
ZW50Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCiB7CisgICAgaWYgKCFjdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgTm9kZSog
cHJldmlvdXNOb2RlID0gcHJldmlvdXNOb2RlUmVmOworICAgIHByZXZpb3VzTm9kZVJlZiA9IGN1
cnJlbnROb2RlOworCiAgICAgaWYgKCFwcmV2aW91c05vZGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKQEAgLTM0NSwxMiArMzUzLDE4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUjoiLCBzb3J0ZWRMaXN0
RHVtcChyZWFkcy5kaXJlY3QoKSwgIiwiKSk7CiAgICAgaWYgKCF3cml0ZXMuaXNFbXB0eSgpKQog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXOiIsIHNvcnRlZExpc3REdW1wKHdyaXRlcy5kaXJl
Y3QoKSwgIiwiKSk7CisgICAgRXhpdE1vZGUgZXhpdE1vZGUgPSBtYXlFeGl0KCp0aGlzLCBub2Rl
KTsKKyAgICBpZiAoZXhpdE1vZGUgIT0gRG9lc05vdEV4aXQpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgZXhpdE1vZGUpOworICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSgqdGhpcywgbm9kZSkp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgIkNsb2JiZXJzRXhpdCIpOwogICAgIGlmIChub2Rl
LT5vcmlnaW4uaXNTZXQoKSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChub2RlLT5vcmln
aW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQpCisgICAgICAgIGlmIChub2RlLT5v
cmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+b3JpZ2luLmZv
ckV4aXQuaXNTZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImV4aXQ6ICIsIG5v
ZGUtPm9yaWdpbi5mb3JFeGl0KTsKICAgICB9Ci0gICAgCisgICAgaWYgKCFub2RlLT5vcmlnaW4u
ZXhpdE9LKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJFeGl0SW52YWxpZCIpOwogICAgIG91
dC5wcmludCgiKSIpOwogCiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhp
cykgJiYgbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCkpCkBAIC00NTUsNyArNDY5LDcg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBvdXQu
cHJpbnQoIiAgQXJndW1lbnRzOiAiLCBsaXN0RHVtcChtX2FyZ3VtZW50cyksICJcbiIpOwogICAg
IG91dC5wcmludCgiXG4iKTsKICAgICAKLSAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CisgICAgTm9k
ZSogbGFzdE5vZGUgPSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9j
a3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1ti
XS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTQ5Niw3ICs1MTAsNiBAQCB2b2lkIEdy
YXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBkdW1wQ29kZU9yaWdp
bihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpLCBjb250ZXh0KTsKICAgICAgICAgICAg
IGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpLCBjb250ZXh0KTsKLSAgICAgICAgICAgIGxhc3RO
b2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICBTdGF0
ZXM6ICIsIGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24sICIsICIsIGJsb2NrLT5jZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdFRhaWwpOwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFEaWRGaW5pc2gp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxMCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdp
biBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhl
CiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJp
bnRlZC4KLSAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
cHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4
dCopOworICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBw
cmVmaXgsIE5vZGUqJiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4
dCopOwogCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBh
ZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3Vs
YXRlSW50MzIsIFByZWRpY3Rpb25QYXNzIHBhc3MpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDQsNiAr
MTA0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCBpcyB0aGUgREZH
IFNTQSBjb252ZW50aW9uLiBUaGVyZWZvcmUsIGVhY2ggcHJlZGVjZXNzb3Igb2YgdGhlIGxvb3AK
ICAgICAgICAgICAgIC8vIGhlYWRlciBtdXN0IGhhdmUgb25seSBvbmUgc3VjY2Vzc29yLgogICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBleGlzdGluZ1ByZUhlYWRlci0+
dGVybWluYWwoKS0+b3AoKSA9PSBKdW1wKTsKKworICAgICAgICAgICAgLy8gQSBwcmUtaGVhZGVy
IGlzIG1vc3QgdXNlZnVsIGlmIGl0J3MgcG9zc2libGUgdG8gZXhpdCBmcm9tIGl0cyB0ZXJtaW5h
bC4gSGVuY2UKKyAgICAgICAgICAgIC8vIGlmIHRoZSB0ZXJtaW5hbCBvZiB0aGUgZXhpc3Rpbmcg
cHJlLWhlYWRlciBkb2Vzbid0IGFsbG93IGZvciBleGl0LCBidXQgdGhlIGZpcnN0CisgICAgICAg
ICAgICAvLyBvcmlnaW4gb2YgdGhlIGxvb3AgaGVhZGVyIGRvZXMsIHRoZW4gd2Ugc2hvdWxkIGNy
ZWF0ZSBhIG5ldyBwcmUtaGVhZGVyLgorICAgICAgICAgICAgaWYgKCFuZWVkc05ld1ByZUhlYWRl
ciAmJiBsb29wLmhlYWRlcigpLT5maXJzdE9yaWdpbigpLmV4aXRPSworICAgICAgICAgICAgICAg
ICYmICFleGlzdGluZ1ByZUhlYWRlci0+dGVybWluYWwoKS0+b3JpZ2luLmV4aXRPSykKKyAgICAg
ICAgICAgICAgICBuZWVkc05ld1ByZUhlYWRlciA9IHRydWU7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmICghbmVlZHNOZXdQcmVIZWFkZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9u
IDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDggKzc5LDEwIEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQogCi1ib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQorRXhp
dE1vZGUgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CisgICAgRXhpdE1vZGUg
cmVzdWx0ID0gRG9lc05vdEV4aXQ7CisgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgLy8gVGhpcyBpcyBhIGNhcmVmdWxseSBjdXJhdGVkIGxpc3Qgb2Ygbm9kZXMgdGhhdCBkZWZp
bml0ZWx5IGRvIG5vdCBleGl0LiBXZSB0cnkgdG8gYmUgdmVyeQogICAgIC8vIGNvbnNlcnZhdGl2
ZSB3aGVuIG1haW50YWluaW5nIHRoaXMgbGlzdCwgYmVjYXVzZSBhZGRpbmcgbmV3IG5vZGUgdHlw
ZXMgdG8gaXQgZG9lc24ndApAQCAtOTksNiArMTAxLDcgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAg
Y2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgQm90dG9tVmFsdWU6
CiAgICAgY2FzZSBQdXRIaW50OgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKQEAgLTExNiwx
OCArMTE5LDUxIEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAg
Y2FzZSBEb3VibGVSZXA6CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNlIFZhbHVlUmVwOgor
ICAgIGNhc2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgY2FzZSBMb2dpY2FsTm90OgorICAg
IGNhc2UgTm90aWZ5V3JpdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGJyZWFr
OwotICAgICAgICAKKworICAgIGNhc2UgU3RyQ2F0OgorICAgICAgICByZXN1bHQgPSBFeGl0c0Zv
ckV4Y2VwdGlvbnM7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8g
SWYgaW4gZG91YnQsIHJldHVybiB0cnVlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIEV4aXRzOwogICAgIH0KIAogICAgIEVkZ2VNYXlFeGl0IGZ1bmN0b3I7CiAgICAgREZH
X05PREVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIGZ1bmN0b3IpOwotICAgIHJldHVybiBm
dW5jdG9yLnJlc3VsdCgpOworICAgIGlmIChmdW5jdG9yLnJlc3VsdCgpKQorICAgICAgICByZXN1
bHQgPSBFeGl0czsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpE
Rkc7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGl0TW9kZSBtb2Rl
KQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgRG9lc05vdEV4aXQ6CisgICAgICAg
IG91dC5wcmludCgiRG9lc05vdEV4aXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhp
dHNGb3JFeGNlcHRpb25zOgorICAgICAgICBvdXQucHJpbnQoIkV4aXRzRm9yRXhjZXB0aW9ucyIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0czoKKyAgICAgICAgb3V0LnByaW50KCJF
eGl0cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM2LDEwICszNiw0OCBAQCBzdHJ1Y3QgTm9kZTsKIC8vIEEgKnZlcnkqIGNv
bnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mIHdoZXRoZXIgb3Igbm90IGEgbm9kZSBjb3VsZCBw
b3NzaWJseSBleGl0LiBVc3VhbGx5CiAvLyByZXR1cm5zIHRydWUgZXhjZXB0IGluIGNhc2VzIHdo
ZXJlIHdlIG9idmlvdXNseSBkb24ndCBleHBlY3QgYW4gZXhpdC4KIAotYm9vbCBtYXlFeGl0KEdy
YXBoJiwgTm9kZSopOworZW51bSBFeGl0TW9kZSB7CisgICAgLy8gVGhlIG5vZGUgZG9lcyBub3Qg
ZXhpdCBhdCBhbGwuIFRoaXMgbWVhbnMgdGhhdCBpdCdzIGxlZ2FsIHRvIGVsaW1pbmF0ZSB0aGUg
Zmlyc3Qgc3RvcmUgaW4gYQorICAgIC8vIHByb2dyYW0gbGlrZToKKyAgICAvLworICAgIC8vIGds
b2JhbCA9IDEgLy8gZmlyc3Qgc3RvcmUKKyAgICAvLyBEb2VzTm90RXhpdCgpOyAvLyBsZXQncyBh
c3N1bWUgdGhhdCB0aGlzIGFsc28gZG9lc24ndCByZWFkICJnbG9iYWwiCisgICAgLy8gZ2xvYmFs
ID0gMiAvLyBzZWNvbmQgc3RvcmUKKyAgICAvLworICAgIC8vIEl0J3MgbGVnYWwgdG8gZWxpbWlu
YXRlIHRoZSBmaXJzdCBvbmUgc2luY2Ugbm9ib2R5IHdpbGwgc2VlIGl0OyB0aGUgc2Vjb25kIHN0
b3JlIGlzIGFsd2F5cworICAgIC8vIGV4ZWN1dGVkIHJpZ2h0IGFmdGVyLgorICAgIERvZXNOb3RF
eGl0LAorCisgICAgLy8gVGhlIG5vZGUgd2lsbCBleGl0LCBidXQgb25seSBieSBwcm9wZXJseSB0
aHJvd2luZyBleGNlcHRpb25zLiBBIHByb3BlciBleGNlcHRpb24gdGhyb3cgd2lsbAorICAgIC8v
IGRpdmVydCBleGVjdXRpb24gdG8gdGhlIG1hdGNoaW5nIG9wX2NhdGNoIGFuZCB3aWxsIG5vdCBy
ZWV4ZWN1dGUgdGhlIGV4aXQgb3JpZ2luLiBUaGlzIG1lYW5zCisgICAgLy8gdGhhdCB0aGUgc3Rv
cmUgZWxpbWluYXRpb24gb3B0aW1pemF0aW9uIGFib3ZlIHdvdWxkIGJlIGlsbGVnYWwsIGJ1dCB0
aGUgZm9sbG93aW5nIHdvdWxkIGJlIE9LOgorICAgIC8vCisgICAgLy8gU2lkZUVmZmVjdCguLi4s
IGV4aXQ6IGJjIzQyKQorICAgIC8vIEV4aXRzRm9yRXhjZXB0aW9ucyguLi4sIGV4aXQ6ICNiYzQy
LCBFeGl0SW52YWxpZCkKKyAgICAvLworICAgIC8vIEluIHBhcnRpY3VsYXIsIGl0J3MgT0sgZm9y
IGEgbm9kZSB0aGF0IHJlcG9ydHMgRXhpdHNGb3JFeGNlcHRpb25zIHRvIGJlIGV4ZWN1dGVkIGlu
IGEgY29udGV4dAorICAgIC8vIHdoZXJlICFOb2RlOjpvcmlnaW4uZXhpdE9LLiBUaGF0J3MgYmVj
YXVzZSB0aGlzIG5vZGUgd2lsbCBub3QgZXhpdCBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGxlYWQK
KyAgICAvLyB0byB0aGUgcmVleGVjdXRpb24gb2YgU2lkZUVmZmVjdCgpLgorICAgIEV4aXRzRm9y
RXhjZXB0aW9ucywKKworICAgIC8vIFRoZSBub2RlIHdpbGwgZXhpdCB0byB0aGUgZXhpdCBvcmln
aW4uIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgZG8gc3RvcmUgZWxpbWluYXRpb24gbGlrZSBm
b3IKKyAgICAvLyBEb2VzTm90RXhpdCBhbmQgYWxzbyB3ZSBjYW5ub3QgcGxhY2UgdGhpcyBub2Rl
IGluIGFuIEV4aXRJbnZhbGlkIGNvbnRleHQsIHNpbmNlIHRoaXMgd2lsbCBleGl0CisgICAgLy8g
aW4gYSBtYW5uZXIgdGhhdCB3aWxsIGNhdXNlIHRoZSByZWV4ZWN1dGlvbiBvZiBhbGwgcHJldmlv
dXMgb3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBleGl0IG9yaWdpbi4KKyAgICBFeGl0cworfTsKKwor
RXhpdE1vZGUgbWF5RXhpdChHcmFwaCYsIE5vZGUqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpFeGl0TW9kZSk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICNlbmRpZiAvLyBERkdN
YXlFeGl0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92
YWxQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
b3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVy
YW5kKG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSkKKyAgICAg
ICAgICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KQogICAgICAg
ICAgICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChub2RlSW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlT3JpZ2luOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7c2VtYW50aWM6ICIs
IHNlbWFudGljLCAiLCBmb3JFeGl0OiAiLCBmb3JFeGl0LCAiLCBleGl0T0s6ICIsIGV4aXRPSywg
In0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdp
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdp
bi5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOSArMjksMTMgQEAKICNpZiBFTkFCTEUoREZH
X0pJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4
aXRTdGF0ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEdy
YXBoOworc3RydWN0IE5vZGU7CisKIHN0cnVjdCBOb2RlT3JpZ2luIHsKICAgICBOb2RlT3JpZ2lu
KCkgeyB9CiAgICAgCkBAIC00OCw3ICs1Miw3IEBAIHN0cnVjdCBOb2RlT3JpZ2luIHsKICAgICAg
ICAgcmV0dXJuIHNlbWFudGljLmlzU2V0KCk7CiAgICAgfQogICAgIAotICAgIE5vZGVPcmlnaW4g
d2l0aFNlbWFudGljKENvZGVPcmlnaW4gc2VtYW50aWMpCisgICAgTm9kZU9yaWdpbiB3aXRoU2Vt
YW50aWMoQ29kZU9yaWdpbiBzZW1hbnRpYykgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghaXNT
ZXQoKSkKICAgICAgICAgICAgIHJldHVybiBOb2RlT3JpZ2luKCk7CkBAIC01OCw3ICs2Miw0NiBA
QCBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgICAgICAgICByZXN1bHQuc2VtYW50aWMgPSBzZW1h
bnRpYzsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBOb2RlT3JpZ2luIHdp
dGhFeGl0T0soYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIE5vZGVPcmlnaW4gcmVz
dWx0ID0gKnRoaXM7CisgICAgICAgIHJlc3VsdC5leGl0T0sgPSB2YWx1ZTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBOb2RlT3JpZ2luIHdpdGhJbnZhbGlkRXhpdCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gd2l0aEV4aXRPSyhmYWxzZSk7CisgICAgfQorCisg
ICAgTm9kZU9yaWdpbiB0YWtlVmFsaWRFeGl0KGJvb2wmIGNhbkV4aXQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gd2l0aEV4aXRPSyhleGl0T0sgJiBzdGQ6OmV4Y2hhbmdlKGNhbkV4aXQs
IGZhbHNlKSk7CisgICAgfQogICAgIAorICAgIE5vZGVPcmlnaW4gZm9ySW5zZXJ0aW5nQWZ0ZXIo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdp
biByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgaWYgKGV4aXRPSyAmJiBjbG9iYmVyc0V4aXRTdGF0
ZShncmFwaCwgbm9kZSkpCisgICAgICAgICAgICByZXN1bHQuZXhpdE9LID0gZmFsc2U7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5v
ZGVPcmlnaW4mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNlbWFudGljID09
IG90aGVyLnNlbWFudGljCisgICAgICAgICAgICAmJiBmb3JFeGl0ID09IG90aGVyLmZvckV4aXQK
KyAgICAgICAgICAgICYmIGV4aXRPSyA9PSBvdGhlci5leGl0T0s7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IE5vZGVPcmlnaW4mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCiAgICAgLy8gVXNlZCBmb3IgZGV0ZXJtaW5pbmcgd2hhdCBieXRl
Y29kZSB0aGlzIGNhbWUgZnJvbS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yCiAgICAgLy8gZGVidWdn
aW5nLCBleGNlcHRpb25zLCBhbmQgZXZlbiBiYXNpYyBleGVjdXRpb24gc2VtYW50aWNzLgogICAg
IENvZGVPcmlnaW4gc2VtYW50aWM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIFwKICAgICBtYWNybyhNb3ZIaW50LCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAor
ICAgIG1hY3JvKEV4aXRPSywgTm9kZU11c3RHZW5lcmF0ZSkgLyogSW5kaWNhdGVzIHRoYXQgZXhp
dCBzdGF0ZSBpcyBpbnRhY3QuICovIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCiAgICAgbWFjcm8oQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUpIC8qIFVzZWQgaWYgd2Ug
d2FudCBqdXN0IGEgdHlwZSBjaGVjayBidXQgbm90IGxpdmVuZXNzLiBOb24tY2hlY2tpbmcgdXNl
cyB3aWxsIGJlIHJlbW92ZWQuICovXAogICAgIG1hY3JvKFVwc2lsb24sIDApIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2lu
dENyZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC04OSw3ICs4OSw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8gZXhlY3V0aW9uQ291bnQg
dG8gdXNlIGJlc3QganVkZ2VtZW50IC0gYnV0IHRoYXQgc2VlbXMgdW5uZWNlc3Nhcnkgc2luY2Ug
d2Uga25vdyBmb3IKICAgICAgICAgLy8gc3VyZSB3aGF0IHRoZSBleGVjdXRpb25Db3VudCBzaG91
bGQgYmUgaW4gdGhpcyBjYXNlLgogICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0
aW9uU2V0Lmluc2VydCgwLCAxKTsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSB0YXJnZXQt
PmF0KDApLT5vcmlnaW47CisKKyAgICAgICAgLy8gV2UnZCByZWFsbHkgbGlrZSB0byB1c2UgYW4g
dW5zZXQgb3JpZ2luLCBidXQgVGhyZWFkZWRDUFMgd29uJ3QgYWxsb3cgdGhhdC4KKyAgICAgICAg
Tm9kZU9yaWdpbiBvcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4o
MCksIGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxOb2RlKj4gbG9jYWxzKGJhc2Vs
aW5lLT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsg
bG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKQEAgLTEw
Niw2ICsxMDgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2Fs
XSkpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gTm93IHVzZSB0aGUgb3JpZ2luIG9mIHRoZSB0
YXJnZXQsIHNpbmNlIGl0J3Mgbm90IE9LIHRvIGV4aXQsIGFuZCB3ZSB3aWxsIHByb2JhYmx5IGhv
aXN0CisgICAgICAgIC8vIHR5cGUgY2hlY2tzIHRvIGhlcmUuCisgICAgICAgIG9yaWdpbiA9IHRh
cmdldC0+YXQoMCktPm9yaWdpbjsKKyAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBiYXNlbGluZS0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7
CiAgICAgICAgICAgICBOb2RlKiBvbGROb2RlID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQuYXJn
dW1lbnQoYXJndW1lbnQpOwogICAgICAgICAgICAgaWYgKCFvbGROb2RlKSB7CkBAIC0xMTcsNyAr
MTIzLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVu
dF0gPSBub2RlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoaW50IGxvY2Fs
ID0gMDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsK
ICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzSGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFk
LmxvY2FsKGxvY2FsKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNIZWFkKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxNCArMzYsMTQgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
T1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkK
LSAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwg
aml0LT5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkKKyAgICA6IE9TUkV4aXRCYXNlKGtpbmQs
IGppdC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYykKICAgICAsIG1f
anNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQ
cm9maWxlKQogICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX3JlY292ZXJ5
SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fc3RyZWFtSW5kZXgoc3RyZWFtSW5kZXgpCiB7
Ci0gICAgQVNTRVJUKG1fY29kZU9yaWdpbi5pc1NldCgpKTsKKyAgICBERkdfQVNTRVJUKGppdC0+
bV9qaXQuZ3JhcGgoKSwgaml0LT5tX2N1cnJlbnROb2RlLCBqaXQtPm1fb3JpZ2luLmV4aXRPSyk7
CiB9CiAKIHZvaWQgT1NSRXhpdDo6c2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hhYmxlSnVtcCBjaGVjaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5r
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjc4LDcgKzE2NzgsOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAgTm9kZSogaWRl
bnRpZmllciA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAgICAgICAgICAg
ICBtX2VzY2FwZWVUb01hdGVyaWFsaXphdGlvbi5hZGQoaWRlbnRpZmllciwgcGhpRGVmLT52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgwLCBOb2RlT3Jp
Z2luKCksIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGlkZW50aWZpZXIs
IHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoMCwgTm9kZU9yaWdpbigp
LCBjYW5FeGl0LCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LCBpZGVudGlm
aWVyLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkgewpAQCAtMTY4OCw2ICsxNjg5LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9k
ZUluZGV4KTsKKyAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBtX2xvY2F0aW9uc0Zv
ckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlv
bi5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2MpCiAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTE2OTcsMTEgKzE2OTksMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlSW5kZXggKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBtX2JvdHRvbSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi53aXRoSW52YWxpZEV4aXQo
KSwgbV9ib3R0b20pKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJpYWxpemF0aW9uIDogbV9tYXRlcmlh
bGl6YXRpb25TaXRlVG9NYXRlcmlhbGl6YXRpb25zLmdldChub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbi5leGl0T0sgJj0gc3RkOjpleGNoYW5nZShj
YW5FeGl0LCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGVzY2FwZWUgPSBtX21h
dGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgICAg
ICAgICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6YXRpb24oYmxvY2ssIG1hdGVyaWFsaXphdGlvbiwg
ZXNjYXBlZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0aW9u
LnNldChlc2NhcGVlLCBtYXRlcmlhbGl6YXRpb24pOwpAQCAtMTcxMSw3ICsxNzE1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmb3IgKFByb21vdGVk
SGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9SZWNvdmVyaWVz
LmdldChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5v
ZGVJbmRleCwgY3JlYXRlUmVjb3ZlcnkoYmxvY2ssIGxvY2F0aW9uLCBub2RlKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIGNyZWF0ZVJlY292
ZXJ5KGJsb2NrLCBsb2NhdGlvbiwgbm9kZSwgY2FuRXhpdCkpOwogCiAgICAgICAgICAgICAgICAg
Ly8gV2UgbmVlZCB0byBwdXQgdGhlIE9TUiBoaW50cyBhZnRlciB0aGUgcmVjb3ZlcmllcywKICAg
ICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG9ubHkgd2FudCB0aGUgaGludHMgb25jZSB0aGUg
b2JqZWN0IGlzCkBAIC0xNzE5LDEwICsxNzIzLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6YXRpb24gOiBtX21hdGVyaWFsaXphdGlvblNpdGVUb01h
dGVyaWFsaXphdGlvbnMuZ2V0KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGVz
Y2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0ZXJpYWxpemF0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCBjYW5FeGl0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgZXNjYXBlZSwg
bWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+b3JpZ2luLmV4aXRPSyAmJiAhY2FuRXhpdCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBXZSBpbmRpY2F0ZSB0aGF0IHRoZSBleGl0IHN0YXRlIGlzIGZpbmUgbm93LiBJdCBpcyBP
SyBiZWNhdXNlIHdlIHVwZGF0ZWQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRlIGFi
b3ZlLiBXZSBuZWVkIHRvIGluZGljYXRlIHRoaXMgbWFudWFsbHkgYmVjYXVzZSB0aGUgdmFsaWRh
dGlvbiBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZW5vdWdoIGluZm9ybWF0
aW9uIHRvIGluZmVyIHRoYXQgdGhlIGV4aXQgc3RhdGUgaXMgZmluZS4KKyAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBFeGl0
T0ssIG5vZGUtPm9yaWdpbik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAg
aWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAgICAg
IG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0aW9uLnNldChub2RlLCBub2RlKTsKIApAQCAtMTc1MCw4
ICsxNzYxLDEwIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG93ZXIg
PSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQo
bm9kZUluZGV4ICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVh
dGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgbm9kZVZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlv
bi5jcmVhdGVIaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
b2RlLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksIG5vZGVWYWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uKSAtPiBOb2RlKiB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVz
b2x2ZShibG9jaywgbG9jYXRpb24pOwpAQCAtMTg3MSw3ICsxODg0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIGRlZi0+dmFsdWUoKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydE9TUkhp
bnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEF2YWls
YWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2RlKiBlc2NhcGVlLCBOb2RlKiBtYXRlcmlhbGl6
YXRpb24pCisgICAgdm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSh1bnNpZ25lZCBub2RlSW5k
ZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sJiBjYW5FeGl0LCBBdmFpbGFiaWxpdHlNYXAmIGF2
YWlsYWJpbGl0eSwgTm9kZSogZXNjYXBlZSwgTm9kZSogbWF0ZXJpYWxpemF0aW9uKQogICAgIHsK
ICAgICAgICAgLy8gV2UgbmVlZCB0byBmb2xsb3coKSB0aGUgdmFsdWUgaW4gdGhlIGhlYXAuCiAg
ICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZ3JhcGg6CkBAIC0xOTA1LDcgKzE5MTgs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4LCBlbnRyeS5r
ZXkuY3JlYXRlSGludChtX2dyYXBoLCBvcmlnaW4sIG1hdGVyaWFsaXphdGlvbikpOworICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICBlbnRyeS5rZXkuY3JlYXRlSGlu
dChtX2dyYXBoLCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgbWF0ZXJpYWxpemF0aW9u
KSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHku
bV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0xOTE2LDcgKzE5MzAsNyBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5k
Rm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZv
KG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQs
IG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ob3BlcmFuZCksCiAgICAgICAg
ICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTIwNDIsNyArMjA1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBOb2RlKiBjcmVhdGVSZWNvdmVyeShCYXNpY0Jsb2NrKiBibG9jaywgUHJvbW90ZWRIZWFwTG9j
YXRpb24gbG9jYXRpb24sIE5vZGUqIHdoZXJlKQorICAgIE5vZGUqIGNyZWF0ZVJlY292ZXJ5KEJh
c2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogd2hl
cmUsIGJvb2wmIGNhbkV4aXQpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ICAgIGRhdGFMb2coIlJlY292ZXJpbmcgIiwgbG9jYXRpb24sICIgYXQgIiwgd2hlcmUsICJcbiIp
OwpAQCAtMjA1MCwxMiArMjA2NCwxNCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBiYXNlID0g
Z2V0TWF0ZXJpYWxpemF0aW9uKGJsb2NrLCBsb2NhdGlvbi5iYXNlKCkpOwogICAgICAgICBOb2Rl
KiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsKIAorICAgICAgICBOb2RlT3JpZ2lu
IG9yaWdpbiA9IHdoZXJlLT5vcmlnaW4ud2l0aFNlbWFudGljKGJhc2UtPm9yaWdpbi5zZW1hbnRp
Yyk7CisKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJCYXNlIGlz
ICIsIGJhc2UsICIgYW5kIHZhbHVlIGlzICIsIHZhbHVlLCAiXG4iKTsKIAogICAgICAgICBpZiAo
YmFzZS0+aXNQaGFudG9tQWxsb2NhdGlvbigpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJvbW90
ZWRIZWFwTG9jYXRpb24oYmFzZSwgbG9jYXRpb24uZGVzY3JpcHRvcigpKS5jcmVhdGVIaW50KAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHdoZXJlLT5vcmlnaW4ud2l0aFNlbWFudGljKGJhc2Ut
Pm9yaWdpbi5zZW1hbnRpYyksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBvcmln
aW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgdmFsdWUpOwogICAgICAgICB9CiAKICAgICAgICAg
c3dpdGNoIChsb2NhdGlvbi5raW5kKCkpIHsKQEAgLTIwODksNyArMjEwNSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAgICAg
ICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgICAgIFB1dEJ5T2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICB3aGVyZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBvcmlnaW4u
dGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEp
LAogICAgICAgICAgICAgICAgICAgICBFZGdlKHN0b3JhZ2UsIEtub3duQ2VsbFVzZSksCiAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UoYmFzZSwgS25vd25DZWxsVXNlKSwKQEAgLTIxMTgsNyArMjEz
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKAogICAg
ICAgICAgICAgICAgIFNwZWNOb25lLAogICAgICAgICAgICAgICAgIE11bHRpUHV0QnlPZmZzZXQs
Ci0gICAgICAgICAgICAgICAgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2lu
LnNlbWFudGljKSwKKyAgICAgICAgICAgICAgICBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0
KSwKICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksCiAgICAgICAgICAgICAgICAgRWRnZShi
YXNlLCBLbm93bkNlbGxVc2UpLAogICAgICAgICAgICAgICAgIHZhbHVlLT5kZWZhdWx0RWRnZSgp
KTsKQEAgLTIxMjksNyArMjE0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbV9n
cmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgIFNwZWNOb25lLAogICAgICAgICAgICAgICAg
IFB1dENsb3N1cmVWYXIsCi0gICAgICAgICAgICAgICAgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50
aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKSwKKyAgICAgICAgICAgICAgICBvcmlnaW4udGFrZVZh
bGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICBPcEluZm8obG9jYXRpb24uaW5mbygp
KSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2UsIEtub3duQ2VsbFVzZSksCiAgICAgICAgICAg
ICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkpIHsKKyAgICAgICAgICAgIGlmIChtYXlF
eGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KSB7CiAgICAgICAgICAgICAgICAgY3Vy
cmVudEVwb2NoLmJ1bXAoKTsKICAgICAgICAgICAgICAgICBsYXN0RXhpdGluZ0luZGV4ID0gbm9k
ZUluZGV4OwogICAgICAgICAgICAgfQpAQCAtMTYwLDEwICsxNjAsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGlu
ZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgICAgIC8v
IGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAgICAgICAgICAgICAgICAgICBraWxsZWROb2Rl
LT5wb3N0Zml4UmVmKCk7CisKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbGFzdEV4aXRpbmdO
b2RlID0gYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpOwogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggKyAxLCBTcGVjTm9uZSwgUGhhbnRvbSwK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KS0+b3Jp
Z2luLCBraWxsZWROb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxhc3RFeGl0aW5nTm9kZS0+b3JpZ2luLmZvckluc2VydGluZ0FmdGVyKG1fZ3JhcGgsIGxhc3RF
eGl0aW5nTm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICBraWxsZWROb2RlLT5kZWZhdWx0
RWRnZSgpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NjgsNiArNjY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdGFudFN0b3Jh
Z2VQb2ludGVyOgogICAgICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGlu
dDoKKyAgICAgICAgY2FzZSBFeGl0T0s6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsNiArMjcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgS2lsbFN0YWNrLCBub2RlLT5vcmlnaW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8obm9kZS0+dW5saW5rZWRMb2NhbCgpLm9mZnNldCgpKSk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBmYWxzZTsgLy8gS2ls
bFN0YWNrIGNsb2JiZXJzIGV4aXQuCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkBAIC0zNDYsNyArMzQ3LDExIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHNzYVZh
cmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwogICAgICAgICAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV92YXJpYWJsZUZvclNTQUluZGV4W3NzYVZhcmlhYmxl
LT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICAgICAgRmx1c2hGb3JtYXQgZm9ybWF0ID0gdmFy
aWFibGUtPmZsdXNoRm9ybWF0KCk7Ci0gICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2lu
ZCA9IHVzZUtpbmRGb3IoZm9ybWF0KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4g
dXNlIGFuIHVuY2hlY2tlZCB1c2Uga2luZCBiZWNhdXNlIHRoZSBTZXRMb2NhbCB3YXMgdHVybmVk
IGludG8gYSBDaGVjay4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byB1c2UgYW4g
dW5jaGVja2VkIHVzZSBiZWNhdXNlIGF0IGxlYXN0IHNvbWV0aW1lcywgdGhlIGVuZCBvZiB0aGUg
YmxvY2sKKyAgICAgICAgICAgICAgICAgICAgLy8gaXMgbm90IGV4aXRPSy4KKyAgICAgICAgICAg
ICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdW5jaGVja2VkVXNlS2luZEZvcihmb3JtYXQpOwog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2lu
dCwgU3BlY05vbmUsIFVwc2lsb24sIHVwc2lsb25PcmlnaW4sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTg4ODg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzOCw2ICsxMzgsNyBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5
cGUmIHN0CiAgICAgY2FzZSBHZXRTdGFjazoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBa
b21iaWVIaW50OgorICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNl
IFVwc2lsb246CiAgICAgY2FzZSBQaGk6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4OTIsNiArMTg5MiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBi
cmVhazsKICAgICB9CisKKyAgICBjYXNlIEV4aXRPSzogeworICAgICAgICBub1Jlc3VsdChub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIFNldExvY2FsOiB7
CiAgICAgICAgIHN3aXRjaCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmZsdXNoRm9ybWF0
KCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk3MSw2ICsx
OTcxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKKyAgICBjYXNlIEV4aXRPSzogeworICAgICAgICBu
b1Jlc3VsdChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNl
IFNldExvY2FsOiB7CiAgICAgICAgIHN3aXRjaCAobm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkt
PmZsdXNoRm9ybWF0KCkpIHsKICAgICAgICAgY2FzZSBGbHVzaGVkRG91YmxlOiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDYgQEAgU3BlY3VsYXRpdmVKSVQ6
OlNwZWN1bGF0aXZlSklUKEpJVENvbXBpbAogICAgICwgbV9pbnRlcnByZXRlcihtX2ppdC5ncmFw
aCgpLCBtX3N0YXRlKQogICAgICwgbV9zdHJlYW0oJmppdC5qaXRDb2RlKCktPnZhcmlhYmxlRXZl
bnRTdHJlYW0pCiAgICAgLCBtX21pbmlmaWVkR3JhcGgoJmppdC5qaXRDb2RlKCktPm1pbmlmaWVk
REZHKQotICAgICwgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyhmYWxzZSkKIHsKIH0KIApAQCAt
MTk2LDcgKzE5NSw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgK
IHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIEpJVENvbXBpbGVy
OjpKdW1wIGZ1enpKdW1wID0gZW1pdE9TUkV4aXRGdXp6Q2hlY2soKTsKICAgICBpZiAoZnV6ekp1
bXAuaXNTZXQoKSkgewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QganVtcHNUb0ZhaWw7
CkBAIC0yMTIsNyArMjEwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVj
ayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgSklUQ29t
cGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0T1NSRXhpdEZ1enpDaGVjaygpOwogICAgIGlmIChm
dXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBteUp1bXBz
VG9GYWlsOwpAQCAtMjI4LDcgKzIyNSw2IEBAIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIgU3BlY3Vs
YXRpdmVKSVQ6OnMKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybiBP
U1JFeGl0SnVtcFBsYWNlaG9sZGVyKCk7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCBpbmRleCA9IG1faml0LmppdENvZGUo
KS0+b3NyRXhpdC5zaXplKCk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oKTsKICAgICBtX2pp
dC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMs
IG1fc3RyZWFtLT5zaXplKCkpKTsKQEAgLTIzNywxOSArMjMzLDE2IEBAIE9TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnMKIAogT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpz
VmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFp
bCkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQp
OwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2Rl
KCksIGp1bXBUb0ZhaWwpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2Rl
VXNlLCBjb25zdCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogewotICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcHNU
b0ZhaWwpOwogfQogCkBAIC0yNTcsNyArMjUwLDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CiAgICAgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IG1faml0LmppdENvZGUoKS0+YXBwZW5kU3Bl
Y3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7CiAgICAgbV9qaXQuYXBwZW5kRXhpdEluZm8oanVt
cFRvRmFpbCk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlRm9yKG5vZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpLCByZWNvdmVyeUluZGV4KSk7CkBA
IC0yNjUsNyArMjU3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhF
eAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkK
IHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCks
IGp1bXBUb0ZhaWwsIHJlY292ZXJ5KTsKIH0KIApAQCAtMjczLDcgKzI2NCw2IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kKIHsKICAgICBpZiAoIW1fY29tcGlsZU9r
YXkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9jYW5FeGl0KTsKICAgICBPU1JFeGl0
Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9qaXQuYXBwZW5kRXhpdEluZm8oSklUQ29tcGlsZXI6
Okp1bXBMaXN0KCkpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0
KAogICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSlNWYWx1ZVNvdXJjZSgpLApAQCAt
Mjg2LDcgKzI3Niw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRJbnZhbGlkYXRpb25Qb2kK
IAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGUqIG5vZGUpCiB7Ci0gICAg
QVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVybjsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtp
bmQsIGpzVmFsdWVSZWdzLCBub2RlLCBtX2ppdC5qdW1wKCkpOwpAQCAtMjk3LDcgKzI4Niw2IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXYKIAogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIEVkZ2Ugbm9kZVVzZSkKIHsKLSAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKQEAg
LTE0NjcsOSArMTQ1NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50Qmxv
Y2sKICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+bWFjaGluZUxvY2FsKCksCiAgICAgICAgICAg
ICAgICAgZm9ybWF0KSk7CiAgICAgfQotICAgIAotICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJn
ZXQgPSBDb2RlT3JpZ2luKCk7Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBDb2Rl
T3JpZ2luKCk7CisKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKICAgICAKICAgICBmb3Ig
KG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBtX2Jsb2NrLT5zaXplKCk7ICsr
bV9pbmRleEluQmxvY2spIHsKICAgICAgICAgbV9jdXJyZW50Tm9kZSA9IG1fYmxvY2stPmF0KG1f
aW5kZXhJbkJsb2NrKTsKQEAgLTE0ODEsMTUgKzE0NjgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAK
LSAgICAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKLSAgICAgICAgICAgIG1fY2FuRXhpdCA9IHRy
dWU7IC8vIEVzc2VudGlhbGx5IGRpc2FibGUgdGhlIGFzc2VydGlvbnMuCi0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fY2FuRXhpdCA9IG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50
Tm9kZSk7Ci0gICAgICAgIAogICAgICAgICBtX2ludGVycHJldGVyLnN0YXJ0RXhlY3V0aW5nKCk7
CiAgICAgICAgIG1faml0LnNldEZvck5vZGUobV9jdXJyZW50Tm9kZSk7Ci0gICAgICAgIG1fY29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBtX2N1cnJlbnROb2RlLT5vcmlnaW4uZm9yRXhpdDsKLSAg
ICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBtX2N1cnJlbnROb2RlLT5vcmlnaW4u
c2VtYW50aWM7CisgICAgICAgIG1fb3JpZ2luID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luOworICAg
ICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIG1fb3JpZ2luLmV4aXRP
SyAmPSBtYXlFeGl0KG1faml0LmdyYXBoKCksIG1fY3VycmVudE5vZGUpID09IEV4aXRzOwogICAg
ICAgICBtX2xhc3RHZW5lcmF0ZWROb2RlID0gbV9jdXJyZW50Tm9kZS0+b3AoKTsKICAgICAgICAg
CiAgICAgICAgIEFTU0VSVChtX2N1cnJlbnROb2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKQEAgLTE1
MzYsOSArMTUxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygpCiB7CiAgICAgQVNTRVJU
KCFtX2N1cnJlbnROb2RlKTsKLSAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzID0gdHJ1ZTsK
LSAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdpbigwKTsKLSAgICBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oMCk7CisgICAgbV9vcmlnaW4gPSBO
b2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOwogCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyArK2kp
IHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1faml0LmdyYXBoKCkubV9hcmd1bWVudHNbaV07CkBA
IC0xNjAxLDcgKzE1ODIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlw
ZXMoCiAgICAgICAgIH0KICNlbmRpZgogICAgIH0KLSAgICBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzID0gZmFsc2U7CisKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oKTsKIH0KIAogYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
NTgsNyArMjQ1OCw2IEBAIHB1YmxpYzoKICAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwogICAgIE5v
ZGUqIG1fY3VycmVudE5vZGU7CiAgICAgTm9kZVR5cGUgbV9sYXN0R2VuZXJhdGVkTm9kZTsKLSAg
ICBib29sIG1fY2FuRXhpdDsKICAgICB1bnNpZ25lZCBtX2luZGV4SW5CbG9jazsKICAgICAvLyBW
aXJ0dWFsIGFuZCBwaHlzaWNhbCByZWdpc3RlciBtYXBzLgogICAgIFZlY3RvcjxHZW5lcmF0aW9u
SW5mbywgMzI+IG1fZ2VuZXJhdGlvbkluZm87CkBAIC0yNDc5LDggKzI0NzgsNyBAQCBwdWJsaWM6
CiAgICAgfTsKICAgICBWZWN0b3I8QnJhbmNoUmVjb3JkLCA4PiBtX2JyYW5jaGVzOwogCi0gICAg
Q29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0OwotICAgIENvZGVPcmlnaW4gbV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKICAgICAK
ICAgICBJblBsYWNlQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIEFic3RyYWN0SW50ZXJwcmV0
ZXI8SW5QbGFjZUFic3RyYWN0U3RhdGU+IG1faW50ZXJwcmV0ZXI7CkBAIC0yNDg4LDggKzI0ODYs
NiBAQCBwdWJsaWM6CiAgICAgVmFyaWFibGVFdmVudFN0cmVhbSogbV9zdHJlYW07CiAgICAgTWlu
aWZpZWRHcmFwaCogbV9taW5pZmllZEdyYXBoOwogICAgIAotICAgIGJvb2wgbV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlczsKLSAgICAKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNsb3dQYXRo
R2VuZXJhdG9yPiwgOD4gbV9zbG93UGF0aEdlbmVyYXRvcnM7CiAgICAgVmVjdG9yPFNpbGVudFJl
Z2lzdGVyU2F2ZVBsYW4+IG1fcGxhbnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleEZvckNoZWNrcyA9IFVJTlRfTUFYOworICAgICAgICAg
ICAgTm9kZU9yaWdpbiBvcmlnaW5Gb3JDaGVja3M7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJ
bkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleElu
QmxvY2spOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcmln
aW4uZXhpdE9LKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJ
bkJsb2NrOworICAgICAgICAgICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3MgPSBub2RlLT5vcmln
aW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8vIEJlIGNhcmVmdWwgbm90IHRvIHVzZSAnbm9kZScgYWZ0ZXIgYXBwZW5kaW5nIHRvIHRoZSBn
cmFwaC4gSW4gdGhvc2Ugc3dpdGNoCiAgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2Ug
bmVlZCB0byBhcHBlbmQsIHdlIGZpcnN0IGNhcmVmdWxseSBleHRyYWN0IGV2ZXJ5dGhpbmcgd2Ug
bmVlZAogICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG5vZGUsIGJlZm9yZSBkb2luZyBhbnkg
YXBwZW5kaW5nLgpAQCAtMTcwLDEzICsxNzgsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tz
LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1hbnRpYyhvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52
YWx1ZS5tX3N0cnVjdHVyZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hp
bGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0
ZXItPnZhbHVlLm1fYXJyYXlNb2RlSXNWYWxpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGl0ZXItPnZhbHVlLm1fYXJyYXlNb2RlSG9pc3RpbmdPa2F5KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJyYXksIG9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNr
QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLndpdGhT
ZW1hbnRpYyhvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhpdGVyLT52YWx1ZS5tX2FycmF5TW9kZS5hc1dvcmQoKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUg
IkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTg1LDEz
ICsxODYsMjkgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pc1NldCgpID09IG5vZGUt
Pm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIW1heUV4aXQobV9ncmFwaCwgbm9kZSkgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQo
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhKCFub2RlLT5vcmlnaW4uZm9y
RXhpdC5pc1NldCgpICYmIG5vZGUtPm9yaWdpbi5leGl0T0spKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICEobWF5RXhpdChtX2dyYXBoLCBub2RlKSA9PSBFeGl0cyAmJiAhbm9k
ZS0+b3JpZ2luLmV4aXRPSykpOworCisgICAgICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KGkgLSAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgcHJl
dmlvdXNOb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW5vZGUtPm9yaWdpbi5leGl0
T0sKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICE9IHBy
ZXZpb3VzTm9kZS0+b3JpZ2luLmZvckV4aXQpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSgKKyAgICAgICAgICAgICAgICAgICAgICAgIChub2RlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICEoIXByZXZpb3VzTm9kZS0+b3JpZ2luLmV4aXRPSyAmJiBub2RlLT5vcmlnaW4uZXhpdE9L
KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBFeGl0T0sKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICE9IHByZXZpb3VzTm9k
ZS0+b3JpZ2luLmZvckV4aXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNTdHJ1Y3R1cmUoKSB8
fCAhIW5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICFub2RlLT5oYXNDZWxsT3BlcmFuZCgpIHx8IG5vZGUtPmNlbGxPcGVyYW5kKCktPnZhbHVlKCku
aXNDZWxsKCkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmhhc0Nl
bGxPcGVyYW5kKCkgfHwgISFub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpKTsKLSAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCEobm9kZS0+
ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoIW5v
ZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAh
bm9kZS0+Y2hpbGQzKCkpOwpAQCAtMjEwLDEwICsyMjcsMTMgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICAg
ICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2Vs
bFVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS25vd25J
bnQzMlVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Qm9vbGVhblVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgISJCYWQgdXNlIGtp
bmQiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBHZXRTdGFjazoKICAg
ICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgRXhpdE9LOgog
ICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbUxvY2Fs
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsOSArMjI3LDggQEAgcHVi
bGljOgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMuYXJndW1lbnQoaSkg
PQogICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQoRmx1c2hlZEpTVmFsdWUs
IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CiAgICAgICAgIH0KLSAgICAgICAgbV9j
b2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7Ci0gICAgICAgIG1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigwKTsKICAgICAgICAgbV9ub2RlID0gbnVs
bHB0cjsKKyAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVP
cmlnaW4oMCksIHRydWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjb2RlQmxvY2soKS0+
bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFw
aC5tX2FyZ3VtZW50c1tpXTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CkBAIC0zOTMsOCArMzkyLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9ub2RlID0gbV9oaWdoQmxvY2stPmF0
KG5vZGVJbmRleCk7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gbV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBt
X25vZGUtPm9yaWdpbi5mb3JFeGl0OworICAgICAgICBtX29yaWdpbiA9IG1fbm9kZS0+b3JpZ2lu
OwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAg
ICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5nICIsIG1fbm9kZSwgIlxuIik7CkBAIC04NDEsNiAr
ODM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAgY2FzZSBN
b3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgRXhpdE9LOgog
ICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgUGhhbnRvbU5ld0Z1
bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0aW9uOgpAQCAtODc4LDE1
ICs4NzcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dEb3VibGUobV9u
b2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAg
ICBtX291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEludDUyUmVwVXNlOgogICAgICAgICAgICAg
bV9vdXQuc2V0KGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICBjYXNlIEtu
b3duQm9vbGVhblVzZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+
Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDZWxsVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAgICAgICAgICAgIG1fb3V0
LnNldChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgpAQCAtNDc1MiwxMCArNDc1NCwxMiBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQo
KSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24gcG9pbnQgd2l0aCBhdmFp
bGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKKworICAgICAgICBERkdfQVNT
RVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKICAgICAgICAgCiAgICAgICAg
IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAg
IFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3JtYXQsIE1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUoKSwKLSAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJn
ZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgICAgICAgICAgbV9vcmlnaW4uZm9y
RXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5t
X2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFw
KCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFs
aXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKQEAgLTgwOTMs
NiArODA5Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW1fYXZhaWxhYmxlUmVjb3Zl
cmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgICBBdmFpbGFi
bGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNvdmVyaWVzKSwgIlxuIik7
CiAgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmln
aW4uZXhpdE9LKTsKICAgICAgICAgCiAgICAgICAgIGlmIChkb09TUkV4aXRGdXp6aW5nKCkpIHsK
ICAgICAgICAgICAgIExWYWx1ZSBudW1iZXJPZkZ1enpDaGVja3MgPSBtX291dC5hZGQoCkBAIC04
MTE3LDcgKzgxMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5q
aXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAgICAga2luZCwgbG93VmFs
dWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihoaWdo
VmFsdWUpLAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUsCisgICAgICAgICAgICBtX29yaWdpbi5mb3JFeGl0LCBtX29yaWdp
bi5zZW1hbnRpYywKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJl
ck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5u
dW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmluYWxpemVyLT5vc3JFeGl0
LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwpAQCAtODYxMiw5ICs4NjE4LDggQEAg
cHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKICAgICBCYXNpY0Jsb2NrKiBt
X25leHRIaWdoQmxvY2s7CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0TG93QmxvY2s7Ci0gICAgCi0g
ICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0OwotICAgIENvZGVPcmlnaW4g
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwog
ICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIE5vZGUqIG1fbm9kZTsKICAgICAKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0luc2VydGlvbi5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTksOCArNTksMTAgQEAgdm9pZCBleGVjdXRlSW5zZXJ0aW9u
cyhUYXJnZXRWZWN0b3JUeXBlJgogICAgICAgICByZXR1cm47CiAgICAgdGFyZ2V0Lmdyb3codGFy
Z2V0LnNpemUoKSArIGluc2VydGlvbnMuc2l6ZSgpKTsKICAgICBzaXplX3QgbGFzdEluZGV4ID0g
dGFyZ2V0LnNpemUoKTsKKyAgICBzaXplX3Qgb3JpZ2luYWxUYXJnZXRTaXplID0gdGFyZ2V0LnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpbmRleEluSW5zZXJ0aW9ucyA9IGluc2VydGlvbnMuc2l6
ZSgpOyBpbmRleEluSW5zZXJ0aW9ucy0tOykgewogICAgICAgICBBU1NFUlQoIWluZGV4SW5JbnNl
cnRpb25zIHx8IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgPj0gaW5zZXJ0
aW9uc1tpbmRleEluSW5zZXJ0aW9ucyAtIDFdLmluZGV4KCkpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKG9yaWdpbmFsVGFyZ2V0U2l6ZSwgaW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5k
ZXgoKSA8IG9yaWdpbmFsVGFyZ2V0U2l6ZSk7CiAgICAgICAgIHNpemVfdCBmaXJzdEluZGV4ID0g
aW5zZXJ0aW9uc1tpbmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSArIGluZGV4SW5JbnNlcnRpb25z
OwogICAgICAgICBzaXplX3QgaW5kZXhPZmZzZXQgPSBpbmRleEluSW5zZXJ0aW9ucyArIDE7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBsYXN0SW5kZXg7IC0taSA+IGZpcnN0SW5kZXg7KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259872</attachid>
            <date>2015-08-25 12:52:27 -0700</date>
            <delta_ts>2015-08-25 14:14:57 -0700</delta_ts>
            <desc>passes hundreds of tests!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>83301</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBE
RkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAg
Ki87IH07CisJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjND
MUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovOyB9Owor
CQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBv
c3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM0Niw2ICszNDgsNyBAQAogCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29w
eVRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QTYyODMxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3Bw
ICovOyB9OwogCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyogREZH
Tm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87IH07
CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAv
KiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAw
NDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMjEwOCw2ICsyMTExLDggQEAKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0JEMUI2MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9
IGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
ZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zl
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTksNiArMjE2NCw3IEBACiAJ
CTBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29weVRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuY3BwOyBwYXRoID0g
ZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVB
NjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQz
QjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdOb2RlT3JpZ2luLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJ
VFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAz
RTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MTE5LDYgKzUxMjUsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyaXplLmggKi8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJTZXQuY3BwICovLAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyU2V0LmggKi8sCisJCQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIg
LyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4
QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcy
MDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLywKQEAgLTUyNDAsNiArNTI0OCw3IEBACiAJCQkJ
MEZCNEI1MUYxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGVBbGxvY2F0b3IuaCAqLywKIAkJCQkw
RkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1
ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCisJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLApAQCAtNjE0OCw2
ICs2MTU3LDcgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
M0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MzgxLDYgKzczOTEsNyBAQAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1
Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAy
MEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5
MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJz
dHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJG
RCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3
NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0
LDYgKzc1NDUsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklU
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyog
RXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVEMDg1RDFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5
MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5NzhCM0IxQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkUwNTAyNTFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBw
YXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5v
bi1UT1AgcGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5
bG9hZC4KIC8vIC0gSGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRl
U3RhdGUgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBUT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55
IG90aGVyIGtpbmQgd2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9m
IHRoZSBzYW1lIGtpbmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTAsNiArMjQ1
MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwV2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIK
ICNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIK
KyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgpAQCAtMzYyLDYg
KzM2Myw5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9w
SW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFsdWUpOwogCisgICAgICAgIC8vIFdlIGNhbid0IGV4
aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMgY2hhbmdlZC4KKyAgICAg
ICAgbV9leGl0T0sgPSBmYWxzZTsKKwogICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZChj
dXJyZW50Q29kZU9yaWdpbigpLCBvcGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoc2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKQEAgLTM3NCw4ICszNzgsMTQgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpCisgICAg
ICAgIC8vIFdlIHBsYXkgaGFja3Mgd2l0aCBtX2V4aXRPSyBoZXJlLiBXZSBrbm93IHRoYXQgdGhl
IFNldExvY2FscyB3ZSBhcmUgZW1pdHRpbmcgYXJlIGFscmVhZHkKKyAgICAgICAgLy8gcmVjb3Jk
ZWQgaW4gT1NSIGV4aXQgc3RhdGUsIHNvIHRoZXkgYXJlbid0IHJlYWwgZWZmZWN0cy4gU28sIHdl
IGRvbid0IHdhbnQgdGhlbSB0byBoYXZlIGFueQorICAgICAgICAvLyBlZmZlY3Qgb24gbV9leGl0
T0suCisgICAgICAgIGJvb2wgZXhpdE9LQmVmb3JlID0gbV9leGl0T0s7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIG1fc2V0TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICAgICAgbV9l
eGl0T0sgPSBleGl0T0tCZWZvcmU7CisgICAgICAgIH0KICAgICAgICAgbV9zZXRMb2NhbFF1ZXVl
LnJlc2l6ZSgwKTsKICAgICB9CiAKQEAgLTY1MSwxNSArNjYxLDE3IEBAIHByaXZhdGU6CiAKICAg
ICBOb2RlT3JpZ2luIGN1cnJlbnROb2RlT3JpZ2luKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgc2V0IHRoZSBmb3JFeGl0IG9yaWdpbiBvbmx5IG9uIHRob3NlIG5vZGVzIHRo
YXQgY2FuIGV4aXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDUyMDQKICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpYzsKKyAgICAgICAgQ29k
ZU9yaWdpbiBmb3JFeGl0OworCiAgICAgICAgIGlmIChtX2N1cnJlbnRTZW1hbnRpY09yaWdpbi5p
c1NldCgpKQogICAgICAgICAgICAgc2VtYW50aWMgPSBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2VtYW50aWMgPSBjdXJyZW50Q29kZU9yaWdpbigp
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGN1cnJlbnRD
b2RlT3JpZ2luKCksIHRydWUpOworCisgICAgICAgIGZvckV4aXQgPSBjdXJyZW50Q29kZU9yaWdp
bigpOworCisgICAgICAgIHJldHVybiBOb2RlT3JpZ2luKHNlbWFudGljLCBmb3JFeGl0LCBtX2V4
aXRPSyk7CiAgICAgfQogICAgIAogICAgIEJyYW5jaERhdGEqIGJyYW5jaERhdGEodW5zaWduZWQg
dGFrZW4sIHVuc2lnbmVkIG5vdFRha2VuKQpAQCAtNjc3LDYgKzY4OSwxOCBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAgICAgICBhcHBlbmRlZCAiLCBub2RlLCAiICIsIEdyYXBoOjpvcE5h
bWUobm9kZS0+b3AoKSksICJcbiIpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKG5v
ZGUpOworICAgICAgICBjbG9iYmVyaXplKAorICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9P
cENsb2JiZXJpemUoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFw
KSB7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVzIHRvIFNpZGVTdGF0ZSBhcmUgbm90IG9ic2Vy
dmFibGUuCisgICAgICAgICAgICAgICAgaWYgKGhlYXAuaXNTdWJ0eXBlT2YoU2lkZVN0YXRlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgLy8gV2UgYXNz
dW1lIGFsbCBvdGhlciB3cml0ZXMgYXJlIG9ic2VydmFibGUsIGFuZCBzbyBpZiB3ZSB0cmllZCB0
byBleGl0IGFmdGVyIHRoZW0KKyAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBzYW1lIG9yaWdp
biB0aGVuIHdlJ2QgY2F1c2UgdGhhdCBlZmZlY3QgdG8gcmVwZWF0LgorICAgICAgICAgICAgICAg
IG1fZXhpdE9LID0gZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2Ji
ZXJpemUoKSk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICAKQEAgLTkwMCw2ICs5
MjQsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwogICAgIC8vIFRo
ZSBzZW1hbnRpYyBvcmlnaW4gb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBkaWZmZXJlbnQgZnJvbSB0
aGUgY3VycmVudCBJbmRleC4KICAgICBDb2RlT3JpZ2luIG1fY3VycmVudFNlbWFudGljT3JpZ2lu
OworICAgIC8vIFRydWUgaWYgaXQncyBPSyB0byBPU1IgZXhpdCByaWdodCBub3cuCisgICAgYm9v
bCBtX2V4aXRPSyB7IGZhbHNlIH07CiAKICAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudFVuZGVm
aW5lZDsKICAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE51bGw7CkBAIC0xMDUzLDYgKzEwNzks
NyBAQCBwcml2YXRlOgogCiAjZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKICAgICBtX2N1cnJl
bnRJbmRleCArPSBPUENPREVfTEVOR1RIKG5hbWUpOyBcCisgICAgbV9leGl0T0sgPSBmYWxzZTsg
XAogICAgIHJldHVybiBzaG91bGRDb250aW51ZVBhcnNpbmcKIAogdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCkBAIC0xMzUxLDExICsxMzc4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICB9CiAgICAgCiAgICAgbV9ncmFwaC5tX2lubGlu
ZVZhcmlhYmxlRGF0YS5hcHBlbmQoaW5saW5lVmFyaWFibGVEYXRhKTsKKworICAgIC8vIEF0IHRo
aXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisgICAgbV9leGl0T0sgPSB0cnVl
OworICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwog
ICAgIGNsZWFyQ2FjaGVzKCk7IC8vIFJlc2V0IG91ciBzdGF0ZSBub3cgdGhhdCB3ZSdyZSBiYWNr
IHRvIHRoZSBvdXRlciBjb2RlLgogICAgIAogICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7
CisgICAgbV9leGl0T0sgPSBmYWxzZTsKICAgICAKICAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2Rl
IGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBk
by4KICAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3Jh
cGgubGFzdEJsb2NrKCkpIHsKQEAgLTI5MDEsMTIgKzI5MzMsMTUgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IG1fdm0tPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwog
ICAgIHVuc2lnbmVkIGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKLSAgICAKKwogICAgIC8v
IElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBh
cmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8gdXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4g
YXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBv
cHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHkuCiAgICAgaWYgKG1fY3Vy
cmVudEJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkgJiYgIWlubGluZUNhbGxGcmFtZSgpKSB7CiAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKKyAgICAg
ICAgLy8gV2Ugd2lsbCBlbWl0IFNldEFyZ3VtZW50IG5vZGVzLiBUaGV5IGRvbid0IGV4aXQsIGJ1
dCB3ZSdyZSBhdCB0aGUgdG9wIG9mIGFuIG9wX2VudGVyIHNvCisgICAgICAgIC8vIGV4aXRPSyA9
IHRydWUuCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKTsKQEAgLTI5MjIsNiArMjk1NywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgLy8gV2Un
cmUgc3RhcmluZyBhIG5ldyBieXRlY29kZSBpbnN0cnVjdGlvbi4gSGVuY2UsIHdlIG9uY2UgYWdh
aW4gaGF2ZSBhIHBsYWNlIHRoYXQgd2UgY2FuIGV4aXQKKyAgICAgICAgLy8gdG8uCisgICAgICAg
IG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgCiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVl
KCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0
aW9ucy4KQEAgLTI5OTgsNyArMzAzNyw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0g
bV9ncmFwaC5mcmVlemUoY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKGZyb3plbiksIGNhbGxlZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGZyb3plbikpKTsKIAogICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWNoZWRGdW5j
dGlvbik7CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiArMjc4LDcg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAgCiAg
ICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoK
ICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBQaGk6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0
YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xv
YmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5o
IgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworYm9vbCBjbG9iYmVyc0V4aXRTdGF0ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUpCit7CisgICAgLy8gVGhlcmUgYXJlIGNlcnRhaW4gbm9kZXMg
d2hvc2UgZWZmZWN0IG9uIHRoZSBleGl0IHN0YXRlIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggd2hh
dCB0aGV5CisgICAgLy8gbm9ybWFsbHkgY2xvYmJlci4KKyAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICBjYXNlIE1vdkhpbnQ6CisgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgUHV0
SGludDoKKyAgICBjYXNlIEtpbGxTdGFjazoKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBj
YXNlIFNldExvY2FsOgorICAgIGNhc2UgUHV0U3RhY2s6CisgICAgICAgIC8vIFRoZXNlIG5vZGVz
IHdyaXRlIHRvIHRoZSBzdGFjaywgYnV0IHRoZXkgbWF5IG9ubHkgZG8gc28gYWZ0ZXIgd2UgaGF2
ZSBhbHJlYWR5IGhhZCBhIE1vdkhpbnQKKyAgICAgICAgLy8gZm9yIHRoZSBleGFjdCBzYW1lIHZh
bHVlIGFuZCB0aGUgc2FtZSBzdGFjayBsb2NhdGlvbi4gSGVuY2UsIHRoZXkgaGF2ZSBubyBmdXJ0
aGVyIGVmZmVjdCBvbgorICAgICAgICAvLyBleGl0IHN0YXRlLgorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAgY2FzZSBBcnJheWlmeToK
KyAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJlciBtZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMg
b2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2UgdG8gc2VwYXJhdGUgdGhlCisgICAgICAgIC8vIGhl
YXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2JzZXJ2YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3Qs
IGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0IG5vdy4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0NDAKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBub2Rlcywg
d2UganVzdCBjYXJlIGFib3V0IHdoZXRoZXIgdGhleSB3cml0ZSB0byBzb21ldGhpbmcgb3RoZXIg
dGhhbiBTaWRlU3RhdGUuCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGNs
b2JiZXJpemUoCisgICAgICAgICAgICBncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwKKyAg
ICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHN1Y2ggYSB0aGluZyBhcyBhIHN0cmljdCBzdWJ0eXBl
IG9mIFNpZGVTdGF0ZS4gVGhhdCdzIHdoYXQgYWxsb3dzCisgICAgICAgICAgICAgICAgLy8gdXMg
dG8gdXNlIGEgZmFzdCAhPSBjaGVjaywgYmVsb3cuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFo
ZWFwLmlzU3RyaWN0U3VidHlwZU9mKFNpZGVTdGF0ZSkpOworCisgICAgICAgICAgICAgICAgaWYg
KGhlYXAgIT0gU2lkZVN0YXRlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisjZGVmaW5lIERGR0Nsb2JiZXJz
RXhpdFN0YXRlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworc3RydWN0IE5vZGU7CisKKy8vIEEgY29uc2Vy
dmF0aXZlIGFwcHJveGltYXRpb24gb2Ygd2hldGhlciB0aGUgbm9kZSB3aWxsIHBlcmZvcm0gYW4g
ZWZmZWN0IHRoYXQgbWVhbnMgdGhhdCB3ZSBjYW4gbm8KKy8vIGxvbmdlciBleGl0IHRvIHRoaXMg
bm9kZSdzIGV4aXQgb3JpZ2luLgorCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiwgTm9k
ZSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5v
ZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CiAKKyAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVkZ2Uuc2V0
VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24g
PSAwOwpAQCAtNzEzLDcgKzcxNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTIxIG9yCiAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTI0LgogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2sgKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0
aW9uKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVj
Tm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4ud2l0aEludmFsaWRFeGl0KCksIE9wSW5mbyh0cmFu
c2l0aW9uKSwKKyAgICAgICAgICAgICAgICBjaGlsZEVkZ2UpOwogICAgICAgICB9CiAgICAgfQog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKICAgICBjYXNlIFNldExvY2FsOgogICAgIGNhc2UgTW92SGludDoKICAgICBj
YXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgogICAg
IGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2
Miw2ICsxMzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBMb29wSGludDoKICAgICAgICAg
Y2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgRXhp
dE9LOgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBjYXNlIFR5cGVPZjoKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTYzNyw2ICsxNjM4LDkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9j
YWw6CisgICAgICAgICAgICAgICAgLy8gTk9URTogQW55IHR5cGUgY2hlY2tzIHdlIHB1dCBoZXJl
IG1heSBnZXQgaG9pc3RlZCBieSBmaXh1cENoZWNrc0luQmxvY2soKS4gU28sIGlmIHdlCisgICAg
ICAgICAgICAgICAgLy8gYWRkIG5ldyB0eXBlIGNoZWNraW5nIHVzZSBraW5kIGZvciBTZXRMb2Nh
bHMsIHdlIG5lZWQgdG8gbW9kaWZ5IHRoYXQgY29kZSBhcyB3ZWxsLgorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKICAg
ICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTIxMTAsOCArMjExNCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgbV9ibG9jayA9
IGJsb2NrOwotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sg
PCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhG
b3JDaGVja3MgPSBVSU5UX01BWDsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5Gb3JDaGVja3M7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBh
IG5vZGUgYXQgd2hpY2ggd2UgY291bGQgZXhpdCwgdGhlbiBzYXZlIGl0cyBpbmRleC4gSWYgbm9k
ZXMgYWZ0ZXIgdGhpcyBvbmUKKyAgICAgICAgICAgIC8vIGNhbm5vdCBleGl0LCB0aGVuIHdlIHdp
bGwgaG9pc3QgY2hlY2tzIHRvIGhlcmUuCisgICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4
aXRPSykgeworICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJbkJsb2NrOwor
ICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhlIG9yaWdpbiBmb3IgY2hl
Y2tzIGlzIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50IG9yaWdpbiwgZXhjZXB0IGZvciB0aGUKKyAg
ICAgICAgICAgIC8vIGV4aXRPSyBmbGFnLgorICAgICAgICAgICAgQVNTRVJUKGluZGV4Rm9yQ2hl
Y2tzID09IFVJTlRfTUFYIHx8IG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKHRydWUpID09IG9yaWdp
bkZvckNoZWNrcyk7CisKKyAgICAgICAgICAgIC8vIEJ1dCwgb3V0IG9mIGFuIGFidW5kYW5jZSBv
ZiBjYXV0aW9uLCB3ZSBzZXQgdXAgdGhlIG9yaWdpbiBmb3IgY2hlY2tzIHRvIGhhdmUgb3VyIG5v
ZGUncworICAgICAgICAgICAgLy8gc2VtYW50aWMgb3JpZ2luLiBUaGlzIHdheSwgaW4gcmVsZWFz
ZSBidWlsZHMsIHdlJ2xsIHN0aWxsIGRvIHNvbWV0aGluZyBzZW5zaWJsZSBldmVuIGlmCisgICAg
ICAgICAgICAvLyB0aGUgYXNzZXJ0aW9uIGlzIHdyb25nLgorICAgICAgICAgICAgb3JpZ2luRm9y
Q2hlY2tzID0gb3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1hbnRpYyhub2RlLT5vcmlnaW4uc2VtYW50
aWMpOwogCiAgICAgICAgICAgICAvLyBGaXJzdCwgdHJ5IHRvIHJlbGF4IHRoZSByZXByZXNlbnRh
dGlvbmFsIGRlbWFuZHMgb2YgZWFjaCBub2RlLCBpbiBvcmRlciB0byBoYXZlCiAgICAgICAgICAg
ICAvLyBmZXdlciBjb252ZXJzaW9ucy4KQEAgLTIxNzUsMjEgKzIxOTcsMjEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkg
ewogICAgICAgICAgICAgICAgICAgICBOb2RlKiByZXN1bHQgPSBudWxscHRyOwotICAgICAgICAK
KwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNl
IERvdWJsZVJlcFJlYWxVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwTWFj
aGluZUludFVzZTogewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJs
ZVJlc3VsdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPmlzTnVtYmVyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUsIERvdWJsZUNvbnN0YW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZUNvbnN0
YW50LCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhtX2dyYXBoLmZyZWV6ZShqc0RvdWJsZU51bWJlcihlZGdlLT5hc051bWJlcigpKSkpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWRnZS0+aGFzSW50NTJSZXN1bHQo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjSW50NTJBc0RvdWJs
ZSwgRG91YmxlUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIEludDUyUmVwVXNlKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNl
S2luZDsKQEAgLTIyMDEsNTMgKzIyMjMsODcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXNlS2luZCA9IE5vdENlbGxVc2U7CiAKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91Ymxl
LCBEb3VibGVSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBvcmlnaW5G
b3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2Rl
KCksIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChlZGdlLT5oYXNJbnQ1MlJlc3VsdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmlzTWFjaGluZUludENvbnN0YW50KCkp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9j
aywgU3BlY01hY2hpbmVJbnQsIEludDUyQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNNYWNoaW5lSW50LCBJ
bnQ1MkNvbnN0YW50LCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhlZGdlLT5jb25zdGFudCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJ
bnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEZvckNoZWNrcywgU3BlY01hY2hpbmVJbnQsIEludDUyUmVwLCBvcmlnaW5Gb3JDaGVja3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJs
ZVJlcE1hY2hpbmVJbnRVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
ZWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1ldGljKCkpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBJ
bnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEZvckNoZWNrcywgU3BlY0ludDMyLCBJbnQ1MlJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQzMlVzZSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUy
UmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
Rm9yQ2hlY2tzLCBTcGVjTWFjaGluZUludCwgSW50NTJSZXAsIG9yaWdpbkZvckNoZWNrcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgTWFjaGluZUlu
dFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UtPmhhc0Rv
dWJsZVJlc3VsdCgpICYmICFlZGdlLT5oYXNJbnQ1MlJlc3VsdCgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJs
ZVJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIFNwZWNCeXRlY29kZURvdWJsZSwgVmFsdWVSZXAsIG5vZGUtPm9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRl
Y29kZURvdWJsZSwgVmFsdWVSZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgRG91YmxlUmVwVXNlKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwg
VmFsdWVSZXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbiwg
RWRnZShlZGdlLm5vZGUoKSwgSW50NTJSZXBVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNJbnQzMiB8IFNwZWNJbnQ1MkFzRG91YmxlLCBW
YWx1ZVJlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tz
LCBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9IH0KLSAg
ICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1
bHQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgcmVtb3RlbHkgcG9zc2libGUgdGhh
dCB0aGlzIG5vZGUgY2Fubm90IGRvIHR5cGUgY2hlY2tzLCBidXQgd2Ugbm93IGhhdmUgYQorICAg
ICAgICAgICAgICAgICAgICAvLyB0eXBlIGNoZWNrIG9uIHRoaXMgbm9kZS4gV2UgZG9uJ3QgaGF2
ZSB0byBoYW5kbGUgdGhlIGdlbmVyYWwgZm9ybSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAg
IC8vIHByb2JsZW0uIEl0IG9ubHkgYXJpc2VzIHdoZW4gQnl0ZUNvZGVQYXJzZXIgZW1pdHMgYW4g
aW1tZWRpYXRlIFNldExvY2FsLCByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhbiBh
IGRlbGF5ZWQgb25lLiBTbywgd2Ugb25seSB3b3JyeSBhYm91dCB0aG9zZSBjaGVja3MgdGhhdCB3
ZSBtYXkgaGF2ZSBwdXQgb24KKyAgICAgICAgICAgICAgICAgICAgLy8gYSBTZXRMb2NhbC4gTm90
ZSB0aGF0ICJpbmRleEZvckNoZWNrcyAhPSBpbmRleEluQmxvY2siIGlzIGp1c3QgYW5vdGhlciB3
YXkgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8gc2F5aW5nICIhbm9kZS0+b3JpZ2luLmV4aXRP
SyIuCisgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleEZvckNoZWNrcyAhPSBpbmRleEluQmxv
Y2sgJiYgbWF5SGF2ZVR5cGVDaGVjayhlZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFVzZUtpbmQga25vd25Vc2VLaW5kID0gVW50eXBlZFVzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtp
bmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrbm93blVzZUtpbmQgPSBLbm93bkludDMyVXNlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBDZWxsVXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IEtu
b3duQ2VsbFVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrbm93blVzZUtpbmQgPSBLbm93bkJvb2xlYW5Vc2U7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIHVzZSBr
aW5kIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNw
ZWNOb25lLCBDaGVjaywgb3JpZ2luRm9yQ2hlY2tzLCBlZGdlKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKGtub3duVXNlS2luZCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE4ODg4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNiArOTAsMjggQEAgaW5saW5lIFVzZUtpbmQgdXNlS2luZEZvcihGbHVz
aEZvcm1hdCBmbwogICAgIHJldHVybiBVbnR5cGVkVXNlOwogfQogCitpbmxpbmUgVXNlS2luZCB1
bmNoZWNrZWRVc2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZv
cm1hdCkgeworICAgIGNhc2UgRGVhZEZsdXNoOgorICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6Cisg
ICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAgICByZXR1cm4gVW50eXBlZFVzZTsKKyAg
ICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICByZXR1cm4gS25vd25DZWxsVXNlOworICAgIGNh
c2UgRmx1c2hlZEludDMyOgorICAgICAgICByZXR1cm4gS25vd25JbnQzMlVzZTsKKyAgICBjYXNl
IEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgcmV0dXJuIEludDUyUmVwVXNlOworICAgIGNhc2UgRmx1
c2hlZERvdWJsZToKKyAgICAgICAgcmV0dXJuIERvdWJsZVJlcFVzZTsKKyAgICBjYXNlIEZsdXNo
ZWRCb29sZWFuOgorICAgICAgICByZXR1cm4gS25vd25Cb29sZWFuVXNlOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBVbnR5cGVkVXNlOworfQor
CiBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRlckZvcihGbHVzaEZvcm1hdCBmb3JtYXQp
CiB7CiAgICAgcmV0dXJuIHR5cGVGaWx0ZXJGb3IodXNlS2luZEZvcihmb3JtYXQpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5j
bHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNp
bmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIK
KyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRh
RHVtcC5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcC5oIgpAQCAtMTAxLDggKzEwMywxNCBAQCBzdGF0aWMgdm9pZCBw
cmludFdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQog
Ci1ib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFy
KiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250
ZXh0KiBjb250ZXh0KQorYm9vbCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiYgcHJldmlvdXNOb2RlUmVmLCBOb2RlKiBjdXJy
ZW50Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCiB7CisgICAgaWYgKCFjdXJyZW50Tm9kZS0+
b3JpZ2luLnNlbWFudGljKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgTm9kZSog
cHJldmlvdXNOb2RlID0gcHJldmlvdXNOb2RlUmVmOworICAgIHByZXZpb3VzTm9kZVJlZiA9IGN1
cnJlbnROb2RlOworCiAgICAgaWYgKCFwcmV2aW91c05vZGUpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKQEAgLTM0NSwxMiArMzUzLDE4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUjoiLCBzb3J0ZWRMaXN0
RHVtcChyZWFkcy5kaXJlY3QoKSwgIiwiKSk7CiAgICAgaWYgKCF3cml0ZXMuaXNFbXB0eSgpKQog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXOiIsIHNvcnRlZExpc3REdW1wKHdyaXRlcy5kaXJl
Y3QoKSwgIiwiKSk7CisgICAgRXhpdE1vZGUgZXhpdE1vZGUgPSBtYXlFeGl0KCp0aGlzLCBub2Rl
KTsKKyAgICBpZiAoZXhpdE1vZGUgIT0gRG9lc05vdEV4aXQpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgZXhpdE1vZGUpOworICAgIGlmIChjbG9iYmVyc0V4aXRTdGF0ZSgqdGhpcywgbm9kZSkp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgIkNsb2JiZXJzRXhpdCIpOwogICAgIGlmIChub2Rl
LT5vcmlnaW4uaXNTZXQoKSkgewogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBub2Rl
LT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChub2RlLT5vcmln
aW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQpCisgICAgICAgIGlmIChub2RlLT5v
cmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+b3JpZ2luLmZv
ckV4aXQuaXNTZXQoKSkKICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImV4aXQ6ICIsIG5v
ZGUtPm9yaWdpbi5mb3JFeGl0KTsKICAgICB9Ci0gICAgCisgICAgaWYgKCFub2RlLT5vcmlnaW4u
ZXhpdE9LKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJFeGl0SW52YWxpZCIpOwogICAgIG91
dC5wcmludCgiKSIpOwogCiAgICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhp
cykgJiYgbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NEYXRhKCkpCkBAIC00NTUsNyArNDY5LDcg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBvdXQu
cHJpbnQoIiAgQXJndW1lbnRzOiAiLCBsaXN0RHVtcChtX2FyZ3VtZW50cyksICJcbiIpOwogICAg
IG91dC5wcmludCgiXG4iKTsKICAgICAKLSAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CisgICAgTm9k
ZSogbGFzdE5vZGUgPSBudWxscHRyOwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9j
a3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1ti
XS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKQEAgLTQ5Niw3ICs1MTAsNiBAQCB2b2lkIEdy
YXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBkdW1wQ29kZU9yaWdp
bihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkpLCBjb250ZXh0KTsKICAgICAgICAgICAg
IGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpLCBjb250ZXh0KTsKLSAgICAgICAgICAgIGxhc3RO
b2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICBTdGF0
ZXM6ICIsIGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24sICIsICIsIGJsb2NrLT5jZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdFRhaWwpOwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFEaWRGaW5pc2gp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTIxMCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdp
biBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhl
CiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJp
bnRlZC4KLSAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciog
cHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4
dCopOworICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBw
cmVmaXgsIE5vZGUqJiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4
dCopOwogCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBh
ZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3Vs
YXRlSW50MzIsIFByZWRpY3Rpb25QYXNzIHBhc3MpCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDQsNiAr
MTA0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCBpcyB0aGUgREZH
IFNTQSBjb252ZW50aW9uLiBUaGVyZWZvcmUsIGVhY2ggcHJlZGVjZXNzb3Igb2YgdGhlIGxvb3AK
ICAgICAgICAgICAgIC8vIGhlYWRlciBtdXN0IGhhdmUgb25seSBvbmUgc3VjY2Vzc29yLgogICAg
ICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxscHRyLCBleGlzdGluZ1ByZUhlYWRlci0+
dGVybWluYWwoKS0+b3AoKSA9PSBKdW1wKTsKKworICAgICAgICAgICAgLy8gQSBwcmUtaGVhZGVy
IGlzIG1vc3QgdXNlZnVsIGlmIGl0J3MgcG9zc2libGUgdG8gZXhpdCBmcm9tIGl0cyB0ZXJtaW5h
bC4gSGVuY2UKKyAgICAgICAgICAgIC8vIGlmIHRoZSB0ZXJtaW5hbCBvZiB0aGUgZXhpc3Rpbmcg
cHJlLWhlYWRlciBkb2Vzbid0IGFsbG93IGZvciBleGl0LCBidXQgdGhlIGZpcnN0CisgICAgICAg
ICAgICAvLyBvcmlnaW4gb2YgdGhlIGxvb3AgaGVhZGVyIGRvZXMsIHRoZW4gd2Ugc2hvdWxkIGNy
ZWF0ZSBhIG5ldyBwcmUtaGVhZGVyLgorICAgICAgICAgICAgaWYgKCFuZWVkc05ld1ByZUhlYWRl
ciAmJiBsb29wLmhlYWRlcigpLT5maXJzdE9yaWdpbigpLmV4aXRPSworICAgICAgICAgICAgICAg
ICYmICFleGlzdGluZ1ByZUhlYWRlci0+dGVybWluYWwoKS0+b3JpZ2luLmV4aXRPSykKKyAgICAg
ICAgICAgICAgICBuZWVkc05ld1ByZUhlYWRlciA9IHRydWU7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGlmICghbmVlZHNOZXdQcmVIZWFkZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHJldmlzaW9u
IDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwxNCBAQCBwcml2YXRlOgogCiB9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAotYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKK0V4
aXRNb2RlIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogeworICAgIEV4aXRNb2Rl
IHJlc3VsdCA9IERvZXNOb3RFeGl0OworICAgIAogICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewog
ICAgIC8vIFRoaXMgaXMgYSBjYXJlZnVsbHkgY3VyYXRlZCBsaXN0IG9mIG5vZGVzIHRoYXQgZGVm
aW5pdGVseSBkbyBub3QgZXhpdC4gV2UgdHJ5IHRvIGJlIHZlcnkKICAgICAvLyBjb25zZXJ2YXRp
dmUgd2hlbiBtYWludGFpbmluZyB0aGlzIGxpc3QsIGJlY2F1c2UgYWRkaW5nIG5ldyBub2RlIHR5
cGVzIHRvIGl0IGRvZXNuJ3QKLSAgICAvLyBnZW5lcmFsbHkgbWFrZSB0aGluZ3MgYSBsb3QgYmV0
dGVyIGJ1dCBpdCBtaWdodCBpbnRyb2R1Y2UgaW5zYW5lbHkgc3VidGxlIGJ1Z3MuCisgICAgLy8g
Z2VuZXJhbGx5IG1ha2UgdGhpbmdzIGEgbG90IGJldHRlciBidXQgaXQgbWlnaHQgaW50cm9kdWNl
IHN1YnRsZSBidWdzLgogICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgY2FzZSBKU0NvbnN0YW50
OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CkBAIC05OSw2ICsxMDEsNyBAQCBib29sIG1heUV4
aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUGhpOgogICAgIGNhc2UgVXBz
aWxvbjoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBC
b3R0b21WYWx1ZToKICAgICBjYXNlIFB1dEhpbnQ6CiAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0
OgpAQCAtMTE2LDE4ICsxMTksNTIgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIERvdWJsZVJlcDoKICAgICBjYXNlIEludDUyUmVwOgogICAgIGNhc2Ug
VmFsdWVSZXA6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50cnlMb2NhbDoKKyAgICBjYXNlIExvZ2lj
YWxOb3Q6CisgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAg
ICBjYXNlIFN0b3JlQmFycmllcjoKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCisgICAgY2Fz
ZSBTdHJDYXQ6CisgICAgICAgIHJlc3VsdCA9IEV4aXRzRm9yRXhjZXB0aW9uczsKKyAgICAgICAg
YnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiBpbiBkb3VidCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gRXhpdHM7CiAgICAgfQog
CiAgICAgRWRnZU1heUV4aXQgZnVuY3RvcjsKICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihn
cmFwaCwgbm9kZSwgZnVuY3Rvcik7Ci0gICAgcmV0dXJuIGZ1bmN0b3IucmVzdWx0KCk7CisgICAg
aWYgKGZ1bmN0b3IucmVzdWx0KCkpCisgICAgICAgIHJlc3VsdCA9IEV4aXRzOworICAgIAorICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aXRNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2Rl
KSB7CisgICAgY2FzZSBEb2VzTm90RXhpdDoKKyAgICAgICAgb3V0LnByaW50KCJEb2VzTm90RXhp
dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0c0ZvckV4Y2VwdGlvbnM6CisgICAg
ICAgIG91dC5wcmludCgiRXhpdHNGb3JFeGNlcHRpb25zIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEV4aXRzOgorICAgICAgICBvdXQucHJpbnQoIkV4aXRzIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTAgKzM2
LDQ4IEBAIHN0cnVjdCBOb2RlOwogLy8gQSAqdmVyeSogY29uc2VydmF0aXZlIGFwcHJveGltYXRp
b24gb2Ygd2hldGhlciBvciBub3QgYSBub2RlIGNvdWxkIHBvc3NpYmx5IGV4aXQuIFVzdWFsbHkK
IC8vIHJldHVybnMgdHJ1ZSBleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2Ugb2J2aW91c2x5IGRvbid0
IGV4cGVjdCBhbiBleGl0LgogCi1ib29sIG1heUV4aXQoR3JhcGgmLCBOb2RlKik7CitlbnVtIEV4
aXRNb2RlIHsKKyAgICAvLyBUaGUgbm9kZSBkb2VzIG5vdCBleGl0IGF0IGFsbC4gVGhpcyBtZWFu
cyB0aGF0IGl0J3MgbGVnYWwgdG8gZWxpbWluYXRlIHRoZSBmaXJzdCBzdG9yZSBpbiBhCisgICAg
Ly8gcHJvZ3JhbSBsaWtlOgorICAgIC8vCisgICAgLy8gZ2xvYmFsID0gMSAvLyBmaXJzdCBzdG9y
ZQorICAgIC8vIERvZXNOb3RFeGl0KCk7IC8vIGxldCdzIGFzc3VtZSB0aGF0IHRoaXMgYWxzbyBk
b2Vzbid0IHJlYWQgImdsb2JhbCIKKyAgICAvLyBnbG9iYWwgPSAyIC8vIHNlY29uZCBzdG9yZQor
ICAgIC8vCisgICAgLy8gSXQncyBsZWdhbCB0byBlbGltaW5hdGUgdGhlIGZpcnN0IG9uZSBzaW5j
ZSBub2JvZHkgd2lsbCBzZWUgaXQ7IHRoZSBzZWNvbmQgc3RvcmUgaXMgYWx3YXlzCisgICAgLy8g
ZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIuCisgICAgRG9lc05vdEV4aXQsCisKKyAgICAvLyBUaGUgbm9k
ZSB3aWxsIGV4aXQsIGJ1dCBvbmx5IGJ5IHByb3Blcmx5IHRocm93aW5nIGV4Y2VwdGlvbnMuIEEg
cHJvcGVyIGV4Y2VwdGlvbiB0aHJvdyB3aWxsCisgICAgLy8gZGl2ZXJ0IGV4ZWN1dGlvbiB0byB0
aGUgbWF0Y2hpbmcgb3BfY2F0Y2ggYW5kIHdpbGwgbm90IHJlZXhlY3V0ZSB0aGUgZXhpdCBvcmln
aW4uIFRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSBzdG9yZSBlbGltaW5hdGlvbiBvcHRpbWl6
YXRpb24gYWJvdmUgd291bGQgYmUgaWxsZWdhbCwgYnV0IHRoZSBmb2xsb3dpbmcgd291bGQgYmUg
T0s6CisgICAgLy8KKyAgICAvLyBTaWRlRWZmZWN0KC4uLiwgZXhpdDogYmMjNDIpCisgICAgLy8g
RXhpdHNGb3JFeGNlcHRpb25zKC4uLiwgZXhpdDogI2JjNDIsIEV4aXRJbnZhbGlkKQorICAgIC8v
CisgICAgLy8gSW4gcGFydGljdWxhciwgaXQncyBPSyBmb3IgYSBub2RlIHRoYXQgcmVwb3J0cyBF
eGl0c0ZvckV4Y2VwdGlvbnMgdG8gYmUgZXhlY3V0ZWQgaW4gYSBjb250ZXh0CisgICAgLy8gd2hl
cmUgIU5vZGU6Om9yaWdpbi5leGl0T0suIFRoYXQncyBiZWNhdXNlIHRoaXMgbm9kZSB3aWxsIG5v
dCBleGl0IGluIGEgbWFubmVyIHRoYXQgY291bGQgbGVhZAorICAgIC8vIHRvIHRoZSByZWV4ZWN1
dGlvbiBvZiBTaWRlRWZmZWN0KCkuCisgICAgRXhpdHNGb3JFeGNlcHRpb25zLAorCisgICAgLy8g
VGhlIG5vZGUgd2lsbCBleGl0IHRvIHRoZSBleGl0IG9yaWdpbi4gVGhpcyBtZWFucyB0aGF0IHdl
IGNhbm5vdCBkbyBzdG9yZSBlbGltaW5hdGlvbiBsaWtlIGZvcgorICAgIC8vIERvZXNOb3RFeGl0
IGFuZCBhbHNvIHdlIGNhbm5vdCBwbGFjZSB0aGlzIG5vZGUgaW4gYW4gRXhpdEludmFsaWQgY29u
dGV4dCwgc2luY2UgdGhpcyB3aWxsIGV4aXQKKyAgICAvLyBpbiBhIG1hbm5lciB0aGF0IHdpbGwg
Y2F1c2UgdGhlIHJlZXhlY3V0aW9uIG9mIGFsbCBwcmV2aW91cyBvcGVyYXRpb25zIHdpdGhpbiB0
aGlzIGV4aXQgb3JpZ2luLgorICAgIEV4aXRzCit9OworCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBo
JiwgTm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpERkc6OkV4aXRNb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERGR01heUV4aXRfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3Bw
CShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhp
bnRSZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2Nh
bCgpKSA9IEVwb2NoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAgaWYgKG1heUV4aXQobV9n
cmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAgICAgICAgICAgY3VycmVudEVwb2No
LmJ1bXAoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2Rl
T3JpZ2luLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIE5vZGVPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoIntzZW1hbnRpYzogIiwgc2VtYW50aWMsICIsIGZvckV4aXQ6
ICIsIGZvckV4aXQsICIsIGV4aXRPSzogIiwgZXhpdE9LLCAifSIpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSw5ICsyOSwxMyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKwog
c3RydWN0IE5vZGVPcmlnaW4gewogICAgIE5vZGVPcmlnaW4oKSB7IH0KICAgICAKQEAgLTQ4LDcg
KzUyLDcgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNT
ZXQoKTsKICAgICB9CiAgICAgCi0gICAgTm9kZU9yaWdpbiB3aXRoU2VtYW50aWMoQ29kZU9yaWdp
biBzZW1hbnRpYykKKyAgICBOb2RlT3JpZ2luIHdpdGhTZW1hbnRpYyhDb2RlT3JpZ2luIHNlbWFu
dGljKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFpc1NldCgpKQogICAgICAgICAgICAgcmV0
dXJuIE5vZGVPcmlnaW4oKTsKQEAgLTU4LDcgKzYyLDQ2IEBAIHN0cnVjdCBOb2RlT3JpZ2luIHsK
ICAgICAgICAgICAgIHJlc3VsdC5zZW1hbnRpYyA9IHNlbWFudGljOwogICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KKworICAgIE5vZGVPcmlnaW4gd2l0aEV4aXRPSyhib29sIHZhbHVlKSBj
b25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsKKyAgICAgICAg
cmVzdWx0LmV4aXRPSyA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIE5vZGVPcmlnaW4gd2l0aEludmFsaWRFeGl0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB3aXRoRXhpdE9LKGZhbHNlKTsKKyAgICB9CisKKyAgICBOb2RlT3JpZ2luIHRha2VWYWxp
ZEV4aXQoYm9vbCYgY2FuRXhpdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoRXhp
dE9LKGV4aXRPSyAmIHN0ZDo6ZXhjaGFuZ2UoY2FuRXhpdCwgZmFsc2UpKTsKKyAgICB9CiAgICAg
CisgICAgTm9kZU9yaWdpbiBmb3JJbnNlcnRpbmdBZnRlcihHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUpIGNvbnN0CisgICAgeworICAgICAgICBOb2RlT3JpZ2luIHJlc3VsdCA9ICp0aGlzOworICAg
ICAgICBpZiAoZXhpdE9LICYmIGNsb2JiZXJzRXhpdFN0YXRlKGdyYXBoLCBub2RlKSkKKyAgICAg
ICAgICAgIHJlc3VsdC5leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTm9kZU9yaWdpbiYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gc2VtYW50aWMgPT0gb3RoZXIuc2VtYW50aWMKKyAgICAg
ICAgICAgICYmIGZvckV4aXQgPT0gb3RoZXIuZm9yRXhpdAorICAgICAgICAgICAgJiYgZXhpdE9L
ID09IG90aGVyLmV4aXRPSzsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTm9k
ZU9yaWdpbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKICAg
ICAvLyBVc2VkIGZvciBkZXRlcm1pbmluZyB3aGF0IGJ5dGVjb2RlIHRoaXMgY2FtZSBmcm9tLiBU
aGlzIGlzIGltcG9ydGFudCBmb3IKICAgICAvLyBkZWJ1Z2dpbmcsIGV4Y2VwdGlvbnMsIGFuZCBl
dmVuIGJhc2ljIGV4ZWN1dGlvbiBzZW1hbnRpY3MuCiAgICAgQ29kZU9yaWdpbiBzZW1hbnRpYzsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE4
ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAgICAgXAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhab21iaWVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRXhpdE9LLCBOb2Rl
TXVzdEdlbmVyYXRlKSAvKiBJbmRpY2F0ZXMgdGhhdCBleGl0IHN0YXRlIGlzIGludGFjdC4gKi8g
XAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVj
aywgTm9kZU11c3RHZW5lcmF0ZSkgLyogVXNlZCBpZiB3ZSB3YW50IGp1c3QgYSB0eXBlIGNoZWNr
IGJ1dCBub3QgbGl2ZW5lc3MuIE5vbi1jaGVja2luZyB1c2VzIHdpbGwgYmUgcmVtb3ZlZC4gKi9c
CiAgICAgbWFjcm8oVXBzaWxvbiwgMCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJl
dmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5LDkgQEAg
cHVibGljOgogICAgICAgICAvLyBleGVjdXRpb25Db3VudCB0byB1c2UgYmVzdCBqdWRnZW1lbnQg
LSBidXQgdGhhdCBzZWVtcyB1bm5lY2Vzc2FyeSBzaW5jZSB3ZSBrbm93IGZvcgogICAgICAgICAv
LyBzdXJlIHdoYXQgdGhlIGV4ZWN1dGlvbkNvdW50IHNob3VsZCBiZSBpbiB0aGlzIGNhc2UuCiAg
ICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIDEpOwot
ICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IHRhcmdldC0+YXQoMCktPm9yaWdpbjsKKworICAg
ICAgICAvLyBXZSdkIHJlYWxseSBsaWtlIHRvIHVzZSBhbiB1bnNldCBvcmlnaW4sIGJ1dCBUaHJl
YWRlZENQUyB3b24ndCBhbGxvdyB0aGF0LgorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IE5v
ZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZmFsc2UpOwogICAgICAgICAK
ICAgICAgICAgVmVjdG9yPE5vZGUqPiBsb2NhbHMoYmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0
ZXJzKTsKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251
bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewpAQCAtMTA2LDYgKzEwOCwxMCBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIAorICAg
ICAgICAvLyBOb3cgdXNlIHRoZSBvcmlnaW4gb2YgdGhlIHRhcmdldCwgc2luY2UgaXQncyBub3Qg
T0sgdG8gZXhpdCwgYW5kIHdlIHdpbGwgcHJvYmFibHkgaG9pc3QKKyAgICAgICAgLy8gdHlwZSBj
aGVja3MgdG8gaGVyZS4KKyAgICAgICAgb3JpZ2luID0gdGFyZ2V0LT5hdCgwKS0+b3JpZ2luOwor
ICAgICAgICAKICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJhc2Vs
aW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGUqIG9s
ZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CiAgICAg
ICAgICAgICBpZiAoIW9sZE5vZGUpIHsKQEAgLTExNyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAgICAg
ICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5l
LT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewogICAgICAgICAgICAgTm9kZSogcHJl
dmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwogICAgICAg
ICAgICAgaWYgKCFwcmV2aW91c0hlYWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBAQAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0
cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQotICAgIDogT1NSRXhpdEJhc2Uoa2lu
ZCwgaml0LT5tX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBqaXQtPm1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlKQorICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0
LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVT
b3VyY2UpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNo
YWJsZUNvZGVPZmZzZXQoMCkKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQog
ICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1JbmRleCkKIHsKLSAgICBBU1NFUlQobV9jb2RlT3Jp
Z2luLmlzU2V0KCkpOworICAgIERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQtPm1f
Y3VycmVudE5vZGUsIGppdC0+bV9vcmlnaW4uZXhpdE9LKTsKIH0KIAogdm9pZCBPU1JFeGl0Ojpz
ZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGNoZWNr
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFz
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVj
dEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9u
IDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlv
blNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzgsNyArMTY3OCw4IEBAIHBy
aXZhdGU6CiAKICAgICAgICAgICAgICAgICBOb2RlKiBpZGVudGlmaWVyID0gaW5kZXhUb05vZGVb
dmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIG1fZXNjYXBlZVRvTWF0ZXJpYWxp
emF0aW9uLmFkZChpZGVudGlmaWVyLCBwaGlEZWYtPnZhbHVlKCkpOwotICAgICAgICAgICAgICAg
IGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKDAsIE5vZGVPcmlnaW4oKSwgYXZhaWxhYmlsaXR5Q2Fs
Y3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgaWRlbnRpZmllciwgcGhpRGVmLT52YWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnNl
cnRPU1JIaW50c0ZvclVwZGF0ZSgwLCBOb2RlT3JpZ2luKCksIGNhbkV4aXQsIGF2YWlsYWJpbGl0
eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGlkZW50aWZpZXIsIHBoaURlZi0+dmFsdWUoKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC0xNjg4LDYg
KzE2ODksNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAg
ICAgIGJvb2wgY2FuRXhpdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZm9yIChQcm9tb3RlZEhl
YXBMb2NhdGlvbiBsb2NhdGlvbiA6IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5nZXQobm9kZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmtpbmQoKSAhPSBOYW1lZFByb3Bl
cnR5UExvYykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTY5NywxMSAr
MTY5OSwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlk
YXRlcy5jb250YWlucyhub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBo
LCBub2RlLT5vcmlnaW4sIG1fYm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bG9jYXRpb24uY3JlYXRlSGludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9n
cmFwaCwgbm9kZS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLCBtX2JvdHRvbSkpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZm9y
IChOb2RlKiBtYXRlcmlhbGl6YXRpb24gOiBtX21hdGVyaWFsaXphdGlvblNpdGVUb01hdGVyaWFs
aXphdGlvbnMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlv
bi0+b3JpZ2luLmV4aXRPSyAmPSBzdGQ6OmV4Y2hhbmdlKGNhbkV4aXQsIGZhbHNlKTsKICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0aW9uVG9Fc2NhcGVl
LmdldChtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZU1hdGVy
aWFsaXphdGlvbihibG9jaywgbWF0ZXJpYWxpemF0aW9uLCBlc2NhcGVlKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6YXRpb24uc2V0KGVzY2FwZWUsIG1hdGVyaWFs
aXphdGlvbik7CkBAIC0xNzExLDcgKzE3MTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24g
OiBtX21hdGVyaWFsaXphdGlvblNpdGVUb1JlY292ZXJpZXMuZ2V0KG5vZGUpKQotICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUluZGV4LCBjcmVhdGVSZWNvdmVy
eShibG9jaywgbG9jYXRpb24sIG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgY3JlYXRlUmVjb3ZlcnkoYmxvY2ssIGxvY2F0aW9uLCBu
b2RlLCBjYW5FeGl0KSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHB1dCB0aGUg
T1NSIGhpbnRzIGFmdGVyIHRoZSByZWNvdmVyaWVzLAogICAgICAgICAgICAgICAgIC8vIGJlY2F1
c2Ugd2Ugb25seSB3YW50IHRoZSBoaW50cyBvbmNlIHRoZSBvYmplY3QgaXMKQEAgLTE3MTksMTAg
KzE3MjMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1hdGVyaWFs
aXphdGlvbiA6IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxpemF0aW9ucy5nZXQobm9k
ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0
aW9uVG9Fc2NhcGVlLmdldChtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICAgICAgICAgICAgICBp
bnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2Rl
LT5vcmlnaW4sIGNhbkV4aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlD
YWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LCBlc2NhcGVlLCBtYXRlcmlhbGl6YXRpb24pOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uZXhpdE9L
ICYmICFjYW5FeGl0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGluZGljYXRlIHRoYXQg
dGhlIGV4aXQgc3RhdGUgaXMgZmluZSBub3cuIEl0IGlzIE9LIGJlY2F1c2Ugd2UgdXBkYXRlZCB0
aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgYWJvdmUuIFdlIG5lZWQgdG8gaW5kaWNh
dGUgdGhpcyBtYW51YWxseSBiZWNhdXNlIHRoZSB2YWxpZGF0aW9uIGRvZXNuJ3QKKyAgICAgICAg
ICAgICAgICAgICAgLy8gaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gaW5mZXIgdGhhdCB0aGUg
ZXhpdCBzdGF0ZSBpcyBmaW5lLgorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEV4aXRPSywgbm9kZS0+b3JpZ2luKTsKKyAg
ICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5j
b250YWlucyhub2RlKSkKICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6
YXRpb24uc2V0KG5vZGUsIG5vZGUpOwogCkBAIC0xNzUwLDggKzE3NjEsMTAgQEAgcHJpdmF0ZToK
IAogICAgICAgICAgICAgICAgICAgICAgICAgZG9Mb3dlciA9IHRydWU7CiAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXggKyAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+
b3JpZ2luLCBub2RlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi53aXRoSW52YWxp
ZEV4aXQoKSwgbm9kZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAg
ICAgICAgICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIC0+IE5vZGUqIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbik7
CkBAIC0xODcxLDcgKzE4ODQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZGVmLT52YWx1
ZSgpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUodW5zaWduZWQg
bm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxp
dHksIE5vZGUqIGVzY2FwZWUsIE5vZGUqIG1hdGVyaWFsaXphdGlvbikKKyAgICB2b2lkIGluc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4s
IGJvb2wmIGNhbkV4aXQsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2RlKiBlc2Nh
cGVlLCBOb2RlKiBtYXRlcmlhbGl6YXRpb24pCiAgICAgewogICAgICAgICAvLyBXZSBuZWVkIHRv
IGZvbGxvdygpIHRoZSB2YWx1ZSBpbiB0aGUgaGVhcC4KICAgICAgICAgLy8gQ29uc2lkZXIgdGhl
IGZvbGxvd2luZyBncmFwaDoKQEAgLTE5MDUsNyArMTkxOCw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgK
LSAgICAgICAgICAgICAgICBub2RlSW5kZXgsIGVudHJ5LmtleS5jcmVhdGVIaW50KG1fZ3JhcGgs
IG9yaWdpbiwgbWF0ZXJpYWxpemF0aW9uKSk7CisgICAgICAgICAgICAgICAgbm9kZUluZGV4LAor
ICAgICAgICAgICAgICAgIGVudHJ5LmtleS5jcmVhdGVIaW50KG1fZ3JhcGgsIG9yaWdpbi50YWtl
VmFsaWRFeGl0KGNhbkV4aXQpLCBtYXRlcmlhbGl6YXRpb24pKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXplKCk7IGktLTsp
IHsKQEAgLTE5MTYsNyArMTkzMCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGludCBvcGVy
YW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8ob3BlcmFuZCksCisgICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQo
Y2FuRXhpdCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRp
b24tPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA0Miw3ICsyMDU2LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIE5vZGUqIGNyZWF0ZVJlY292ZXJ5
KEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSog
d2hlcmUpCisgICAgTm9kZSogY3JlYXRlUmVjb3ZlcnkoQmFzaWNCbG9jayogYmxvY2ssIFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB3aGVyZSwgYm9vbCYgY2FuRXhpdCkKICAg
ICB7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiUmVjb3Zlcmlu
ZyAiLCBsb2NhdGlvbiwgIiBhdCAiLCB3aGVyZSwgIlxuIik7CkBAIC0yMDUwLDEyICsyMDY0LDE0
IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXRNYXRlcmlhbGl6YXRpb24oYmxv
Y2ssIGxvY2F0aW9uLmJhc2UoKSk7CiAgICAgICAgIE5vZGUqIHZhbHVlID0gcmVzb2x2ZShibG9j
aywgbG9jYXRpb24pOwogCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gd2hlcmUtPm9yaWdp
bi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKTsKKwogICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkJhc2UgaXMgIiwgYmFzZSwgIiBhbmQgdmFsdWUg
aXMgIiwgdmFsdWUsICJcbiIpOwogCiAgICAgICAgIGlmIChiYXNlLT5pc1BoYW50b21BbGxvY2F0
aW9uKCkpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9tb3RlZEhlYXBMb2NhdGlvbihiYXNlLCBs
b2NhdGlvbi5kZXNjcmlwdG9yKCkpLmNyZWF0ZUhpbnQoCi0gICAgICAgICAgICAgICAgbV9ncmFw
aCwgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4
aXQpLCB2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLmtpbmQo
KSkgewpAQCAtMjA4OSw3ICsyMTA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1
cm4gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwKICAgICAg
ICAgICAgICAgICAgICAgUHV0QnlPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIHdoZXJlLT5v
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQp
LAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksCiAgICAgICAgICAgICAgICAgICAg
IEVkZ2Uoc3RvcmFnZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAgICAgICAgICAgRWRnZShi
YXNlLCBLbm93bkNlbGxVc2UpLApAQCAtMjExOCw3ICsyMTM0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICAgICAgU3BlY05vbmUs
CiAgICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldCwKLSAgICAgICAgICAgICAgICB3aGVy
ZS0+b3JpZ2luLndpdGhTZW1hbnRpYyhiYXNlLT5vcmlnaW4uc2VtYW50aWMpLAorICAgICAgICAg
ICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAgICAgICAgICAgICAgIE9w
SW5mbyhkYXRhKSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2UsIEtub3duQ2VsbFVzZSksCiAg
ICAgICAgICAgICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpAQCAtMjEyOSw3ICsyMTQ1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAg
ICAgICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgUHV0Q2xvc3VyZVZhciwKLSAgICAg
ICAgICAgICAgICB3aGVyZS0+b3JpZ2luLndpdGhTZW1hbnRpYyhiYXNlLT5vcmlnaW4uc2VtYW50
aWMpLAorICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAg
ICAgICAgICAgICAgIE9wSW5mbyhsb2NhdGlvbi5pbmZvKCkpLAogICAgICAgICAgICAgICAgIEVk
Z2UoYmFzZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAgICAgICB2YWx1ZS0+ZGVmYXVsdEVk
Z2UoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRp
b25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobWF5RXhpdChtX2dy
YXBoLCBub2RlKSkgeworICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0g
RG9lc05vdEV4aXQpIHsKICAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOwogICAg
ICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggPSBub2RlSW5kZXg7CiAgICAgICAgICAgICB9
CkBAIC0xNjAsMTAgKzE2MCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIGV4YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFucyB0aGF0
IHdlIGhhdmUgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSByZWYgY291
bnQuCiAgICAgICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKKworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBsYXN0RXhpdGluZ05vZGUgPSBibG9jay0+YXQobGFzdEV4
aXRpbmdJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4
aXRpbmdJbmRleCArIDEsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAgICAgICAgICAgICAgICAg
ICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLT5vcmlnaW4sIGtpbGxlZE5vZGUtPmRlZmF1
bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4aXRpbmdOb2RlLT5vcmln
aW4uZm9ySW5zZXJ0aW5nQWZ0ZXIobV9ncmFwaCwgbGFzdEV4aXRpbmdOb2RlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAg
fSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OCw2ICs2NjgsNyBAQCBw
cml2YXRlOgogICAgICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CiAgICAgICAgIGNh
c2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIEV4aXRP
SzoKICAgICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FD
b252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
MSw2ICsyNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25l
LCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bm9kZS0+b3JpZ2luLmV4aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4K
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKQEAgLTM0Niw3ICszNDcsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlh
YmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUg
PSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAg
ICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsK
LSAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQp
OworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW4gdW5jaGVja2VkIHVzZSBr
aW5kIGJlY2F1c2UgdGhlIFNldExvY2FsIHdhcyB0dXJuZWQgaW50byBhIENoZWNrLgorICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHVzZSBhbiB1bmNoZWNrZWQgdXNlIGJlY2F1c2Ug
YXQgbGVhc3Qgc29tZXRpbWVzLCB0aGUgZW5kIG9mIHRoZSBibG9jaworICAgICAgICAgICAgICAg
ICAgICAvLyBpcyBub3QgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtp
bmQgPSB1bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwg
dXBzaWxvbk9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldFN0
YWNrOgogICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBF
eGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBo
aToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5
Miw2ICsxODkyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNh
c2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lv
biAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcxLDYgKzE5NzEsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgIAorICAgIGNhc2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAg
c3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewogICAg
ICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjEsNyArNjEsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29t
cGlsCiAgICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUpCiAgICAgLCBt
X3N0cmVhbSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKICAgICAsIG1fbWlu
aWZpZWRHcmFwaCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCi0gICAgLCBtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzKGZhbHNlKQogewogfQogCkBAIC0xOTYsNyArMTk1LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0
T1NSRXhpdEZ1enpDaGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFpbDsKQEAgLTIxMiw3ICsyMTAsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2Nv
bXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3Vt
ZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBmdXp6SnVtcCA9
IGVtaXRPU1JFeGl0RnV6ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlzU2V0KCkpIHsKICAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IG15SnVtcHNUb0ZhaWw7CkBAIC0yMjgsNyArMjI1
LDYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlm
ICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIo
KTsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0LnNpemUoKTsKICAg
ICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NS
RXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpA
QCAtMjM3LDE5ICsyMzMsMTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJ
VDo6cwogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBu
b2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwg
bm9kZVVzZS5ub2RlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2Rl
VXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lz
Q2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVj
ayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCk7CiB9CiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAgLTI1Nyw3
ICsyNTAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAg
ICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCByZWNvdmVy
eUluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292
ZXJ5KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5q
aXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2pp
dC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1f
c3RyZWFtLT5zaXplKCksIHJlY292ZXJ5SW5kZXgpKTsKQEAgLTI2NSw3ICsyNTcsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVl
U291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNv
bnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hl
Y2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhr
aW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3Zlcnkp
OwogfQogCkBAIC0yNzMsNyArMjY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFs
aWRhdGlvblBvaQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwot
ICAgIEFTU0VSVChtX2NhbkV4aXQpOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8g
PSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9q
aXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVuY291bnRhYmxl
SW52YWxpZGF0aW9uLCBKU1ZhbHVlU291cmNlKCksCkBAIC0yODYsNyArMjc2LDYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogCiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVn
cyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJn
dW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAg
ICAgcmV0dXJuOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGUs
IG1faml0Lmp1bXAoKSk7CkBAIC0yOTcsNyArMjg2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
dGVybWluYXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywg
RWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY2FuRXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNW
YWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQ2Nyw5ICsxNDU1LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwKICAgICAgICAgICAgICAgICBmb3JtYXQpKTsKICAgICB9
Ci0gICAgCi0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oKTsKLSAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oKTsKKworICAgIG1fb3Jp
Z2luID0gTm9kZU9yaWdpbigpOwogICAgIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBt
X2luZGV4SW5CbG9jayA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAg
ICAgICBtX2N1cnJlbnROb2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2spOwpAQCAtMTQ4
MSwxNSArMTQ2OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2Nr
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQVNTRVJUX0RJ
U0FCTEVEKQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gdHJ1ZTsgLy8gRXNzZW50aWFsbHkgZGlz
YWJsZSB0aGUgYXNzZXJ0aW9ucy4KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jYW5FeGl0
ID0gbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgCiAgICAg
ICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgbV9qaXQuc2V0Rm9y
Tm9kZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9
IG1fY3VycmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0OwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZSA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgbV9v
cmlnaW4gPSBtX2N1cnJlbnROb2RlLT5vcmlnaW47CisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5h
YmxlZCgpKQorICAgICAgICAgICAgbV9vcmlnaW4uZXhpdE9LICY9IG1heUV4aXQobV9qaXQuZ3Jh
cGgoKSwgbV9jdXJyZW50Tm9kZSkgPT0gRXhpdHM7CiAgICAgICAgIG1fbGFzdEdlbmVyYXRlZE5v
ZGUgPSBtX2N1cnJlbnROb2RlLT5vcCgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwpAQCAtMTUzNiw5ICsxNTE5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y2hlY2tBcmd1bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotICAg
IG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSB0cnVlOwotICAgIG1fY29kZU9yaWdpbkZvckV4
aXRUYXJnZXQgPSBDb2RlT3JpZ2luKDApOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxl
ID0gQ29kZU9yaWdpbigwKTsKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigw
KSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0
LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2Rl
ID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKQEAgLTE2MDEsNyArMTU4Miw4IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgfQogI2VuZGlm
CiAgICAgfQotICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsKKworICAgIG1f
b3JpZ2luID0gTm9kZU9yaWdpbigpOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1OCw3ICsyNDU4LDYgQEAgcHVibGlj
OgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAg
ICBOb2RlVHlwZSBtX2xhc3RHZW5lcmF0ZWROb2RlOwotICAgIGJvb2wgbV9jYW5FeGl0OwogICAg
IHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2FsIHJl
Z2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0aW9u
SW5mbzsKQEAgLTI0NzksOCArMjQ3OCw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIFZlY3RvcjxC
cmFuY2hSZWNvcmQsIDg+IG1fYnJhbmNoZXM7CiAKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdp
bkZvckV4aXRUYXJnZXQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZTsKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0
YXRlIG1fc3RhdGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0
ZT4gbV9pbnRlcnByZXRlcjsKQEAgLTI0ODgsOCArMjQ4Niw2IEBAIHB1YmxpYzoKICAgICBWYXJp
YWJsZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKICAgICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVk
R3JhcGg7CiAgICAgCi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzOwotICAgIAog
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+LCA4PiBtX3Nsb3dQ
YXRoR2VuZXJhdG9yczsKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbj4gbV9wbGFu
czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllcklu
c2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBi
dXQgdGhlbiBydW4gdGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFy
cmllcihtX25vZGVJbmRleCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAg
ICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRF
cG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
QEAgLTQ3NCwxMCArNDc0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEluc2VydGluZyBiYXJyaWVy
LlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgsIGJhc2Uubm9kZSgpKTsK
KyAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFzZSk7CiAgICAgfQotICAgIAot
ICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUqIGJhc2UpCisK
KyAgICB2b2lkIGluc2VydEJhcnJpZXIodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCiAg
ICAgewogICAgICAgICAvLyBJZiB3ZSdyZSBpbiBnbG9iYWwgbW9kZSwgd2Ugc2hvdWxkIG9ubHkg
aW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdlIGhhdmUgY29udmVyZ2VkLgogICAgICAgICBpZiAo
IXJlYWxseUluc2VydEJhcnJpZXJzKCkpCkBAIC00ODUsOCArNDg1LDE4IEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgc3VwcG9ydCBTdG9yZUJhcnJpZXIo
VW50eXBlZFVzZTopLiBUaGF0IHdvdWxkIGJlIHNvcnQgb2YgY29vbC4KICAgICAgICAgLy8gQnV0
IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0LgorCisgICAgICAgIC8vIElmIHRoZSBvcmlnaW5h
bCBlZGdlIHdhcyB1bmNoZWNrZWQsIHdlIHNob3VsZCBhbHNvIG5vdCBoYXZlIGEgY2hlY2suIFdl
IG1heSBiZSBpbiBhIGNvbnRleHQKKyAgICAgICAgLy8gd2hlcmUgY2hlY2tzIGFyZSBub3QgYWxs
b3dlZC4gSWYgd2UgZXZlciBkaWQgaGF2ZSB0byBpbnNlcnQgYSBiYXJyaWVyIGF0IGFuIEV4aXRJ
bnZhbGlkCisgICAgICAgIC8vIGNvbnRleHQgYW5kIHRoYXQgYmFycmllciBuZWVkZWQgYSBjaGVj
aywgdGhlbiB3ZSBjb3VsZCBtYWtlIHRoYXQgd29yayBieSBob2lzdGluZyB0aGUgY2hlY2suCisg
ICAgICAgIC8vIFRoYXQgZG9lc24ndCBoYXBwZW4gcmlnaHQgbm93LgorICAgICAgICBpZiAoYmFz
ZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNlKSB7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5vcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgICAgIGJhc2Uu
c2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFN0
b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4sIEVkZ2UoYmFzZSwgQ2VsbFVzZSkpOworICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBtX25vZGUtPm9yaWdpbiwg
YmFzZSk7CiAKICAgICAgICAgYmFzZS0+c2V0RXBvY2gobV9jdXJyZW50RXBvY2gpOwogICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4LDggKzEwOCwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAoIWJsb2NrKQog
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdW5zaWduZWQgaW5kZXhGb3JD
aGVja3MgPSBVSU5UX01BWDsKKyAgICAgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luRm9yQ2hlY2tz
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxv
Y2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewogICAgICAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4aXRPSykgeworICAgICAgICAgICAgICAg
ICAgICBpbmRleEZvckNoZWNrcyA9IGluZGV4SW5CbG9jazsKKyAgICAgICAgICAgICAgICAgICAg
b3JpZ2luRm9yQ2hlY2tzID0gbm9kZS0+b3JpZ2luOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBCZSBjYXJlZnVsIG5vdCB0byB1c2UgJ25v
ZGUnIGFmdGVyIGFwcGVuZGluZyB0byB0aGUgZ3JhcGguIEluIHRob3NlIHN3aXRjaAogICAgICAg
ICAgICAgICAgIC8vIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG8gYXBwZW5kLCB3ZSBmaXJzdCBjYXJl
ZnVsbHkgZXh0cmFjdCBldmVyeXRoaW5nIHdlIG5lZWQKICAgICAgICAgICAgICAgICAvLyBmcm9t
IHRoZSBub2RlLCBiZWZvcmUgZG9pbmcgYW55IGFwcGVuZGluZy4KQEAgLTE3MCwxMyArMTc4LDE1
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlm
IChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcy53aXRoU2VtYW50aWMo
b3JpZ2luLnNlbWFudGljKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5hZGRTdHJ1Y3R1cmVTZXQoaXRlci0+dmFsdWUubV9zdHJ1Y3R1cmUpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENlbGxVc2UpKTsKICAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVyLT52YWx1ZS5tX2FycmF5TW9kZUlzVmFsaWQp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZS5tX2FycmF5TW9k
ZUhvaXN0aW5nT2theSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBDaGVja0FycmF5LCBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXhGb3JDaGVja3MsIFNwZWNOb25lLCBDaGVja0FycmF5LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9yaWdpbkZvckNoZWNrcy53aXRoU2VtYW50aWMob3JpZ2luLnNlbWFudGljKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oaXRlci0+dmFsdWUubV9hcnJheU1vZGUu
YXNXb3JkKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUo
KSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJs
b2NrV2l0aEpJVFR5cGUuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2lu
Y2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTE4NSwxMyArMTg2LDI5IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyAr
K2kpIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGkpOwotICAgICAg
ICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCBub2RlLT5vcmln
aW4uc2VtYW50aWMuaXNTZXQoKSA9PSBub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKLSAg
ICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpIHx8
IG5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KChub2RlKSwgISghbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSAmJiBub2RlLT5vcmlnaW4u
ZXhpdE9LKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhKG1heUV4aXQobV9n
cmFwaCwgbm9kZSkgPT0gRXhpdHMgJiYgIW5vZGUtPm9yaWdpbi5leGl0T0spKTsKKworICAgICAg
ICAgICAgICAgIGlmIChpKSB7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIHByZXZpb3VzTm9k
ZSA9IGJsb2NrLT5hdChpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAg
ICAgICAgICAgICAgICAgICAgICAgKG5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIWNs
b2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIHByZXZpb3VzTm9kZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHx8ICFub2RlLT5vcmlnaW4uZXhpdE9LCisgICAgICAgICAgICAgICAgICAgICAgICB8
fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsK
KyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAo
bm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAhKCFwcmV2aW91c05vZGUtPm9yaWdpbi5l
eGl0T0sgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8
IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBub2RlLT5v
cmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5v
ZGUpLCAhbm9kZS0+aGFzU3RydWN0dXJlKCkgfHwgISFub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQoKSB8fCBu
b2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpLmlzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICFub2RlLT5oYXNDZWxsT3BlcmFuZCgpIHx8ICEhbm9kZS0+Y2VsbE9w
ZXJhbmQoKS0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmNoaWxkMygpKTsKQEAgLTIxMCwxMCAr
MjI3LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVXNlOgorICAg
ICAgICAgICAgICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNl
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICEiQmFkIHVzZSBraW5kIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDYgKzUxLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5v
ZGUqIAogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9t
YmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBG
bHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI3LDkgKzIyNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF2YWlsYWJpbGl0
eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxp
dHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChp
KSkpOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2Rl
T3JpZ2luKDApOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmln
aW4oMCk7CiAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fb3JpZ2luID0gTm9k
ZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CiAgICAgICAgICAg
ICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkp
OwpAQCAtMzkzLDggKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICBtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICBt
X2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9ub2RlLT5vcmlnaW4uZm9yRXhpdDsKKyAgICAg
ICAgbV9vcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJi
b3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAi
LCBtX25vZGUsICJcbiIpOwpAQCAtODQxLDYgKzgzOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVI
aW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0
OgogICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9t
Q3JlYXRlQWN0aXZhdGlvbjoKQEAgLTg3OCwxNSArODc3LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX291dC5zZXQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgY2Fz
ZSBLbm93bkludDMyVXNlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBJbnQ1MlJlcFVzZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dJbnQ1MihtX25vZGUtPmNo
aWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Qm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICBt
X291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBLbm93
bkNlbGxVc2U6CiAgICAgICAgICAgICBtX291dC5zZXQobG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBl
ZFVzZToKQEAgLTQ3NTIsMTAgKzQ3NTQsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
SW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAo
KSwgIlxuIik7CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2lu
LmV4aXRPSyk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
YXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSW52
YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCi0gICAgICAg
ICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZSwKKyAgICAgICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGljLAogICAg
ICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwK
ICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkp
KTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRD
b21waWxhdGlvbkluZm8oKSk7CkBAIC04MDkzLDYgKzgwOTcsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1f
YXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CisKKyAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoZG9PU1JFeGl0RnV6emluZygpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbnVtYmVyT2ZG
dXp6Q2hlY2tzID0gbV9vdXQuYWRkKApAQCAtODExNyw3ICs4MTIzLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhp
dCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIG1fY29kZU9y
aWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgICAgICAg
ICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBt
X2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5m
bygpKTsKQEAgLTg2MTIsOSArODYxOCw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9o
aWdoQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExCYXNpY0Js
b2NrIG1fbmV4dExvd0Jsb2NrOwotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9y
RXhpdFRhcmdldDsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwor
CisgICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAg
ICBOb2RlKiBtX25vZGU7CiAgICAgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMTg4ODg2
KQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDggKzU5
LDEwIEBAIHZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYKICAgICAgICAg
cmV0dXJuOwogICAgIHRhcmdldC5ncm93KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25zLnNpemUo
KSk7CiAgICAgc2l6ZV90IGxhc3RJbmRleCA9IHRhcmdldC5zaXplKCk7CisgICAgc2l6ZV90IG9y
aWdpbmFsVGFyZ2V0U2l6ZSA9IHRhcmdldC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaW5kZXhJ
bkluc2VydGlvbnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsK
ICAgICAgICAgQVNTRVJUKCFpbmRleEluSW5zZXJ0aW9ucyB8fCBpbnNlcnRpb25zW2luZGV4SW5J
bnNlcnRpb25zXS5pbmRleCgpID49IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnMgLSAxXS5p
bmRleCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvcmlnaW5hbFRhcmdldFNpemUsIGluc2Vy
dGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgPCBvcmlnaW5hbFRhcmdldFNpemUpOwog
ICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNd
LmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0
ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdElu
ZGV4OyAtLWkgPiBmaXJzdEluZGV4OykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259879</attachid>
            <date>2015-08-25 14:14:57 -0700</date>
            <delta_ts>2015-08-25 15:40:55 -0700</delta_ts>
            <desc>passes thousands of tests!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>88950</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBE
RkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAg
Ki87IH07CisJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjND
MUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovOyB9Owor
CQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBv
c3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM0Niw2ICszNDgsNyBAQAogCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29w
eVRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QTYyODMxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3Bw
ICovOyB9OwogCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyogREZH
Tm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87IH07
CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAv
KiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAw
NDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMjEwOCw2ICsyMTExLDggQEAKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0JEMUI2MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9
IGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
ZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zl
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTksNiArMjE2NCw3IEBACiAJ
CTBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29weVRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuY3BwOyBwYXRoID0g
ZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVB
NjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQz
QjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdOb2RlT3JpZ2luLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJ
VFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAz
RTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MTE5LDYgKzUxMjUsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyaXplLmggKi8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJTZXQuY3BwICovLAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyU2V0LmggKi8sCisJCQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIg
LyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4
QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcy
MDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLywKQEAgLTUyNDAsNiArNTI0OCw3IEBACiAJCQkJ
MEZCNEI1MUYxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGVBbGxvY2F0b3IuaCAqLywKIAkJCQkw
RkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1
ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCisJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLApAQCAtNjE0OCw2
ICs2MTU3LDcgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
M0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MzgxLDYgKzczOTEsNyBAQAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1
Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAy
MEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5
MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJz
dHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJG
RCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3
NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0
LDYgKzc1NDUsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklU
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyog
RXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVEMDg1RDFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5
MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5NzhCM0IxQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkUwNTAyNTFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBw
YXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5v
bi1UT1AgcGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5
bG9hZC4KIC8vIC0gSGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRl
U3RhdGUgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBUT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55
IG90aGVyIGtpbmQgd2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9m
IHRoZSBzYW1lIGtpbmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTAsNiArMjQ1
MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwV2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIK
ICNpbmNsdWRlICJERkdBcnJheU1vZGUuaCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIK
KyNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgpAQCAtMzYyLDYg
KzM2Myw5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBhZGRUb0dyYXBoKE1vdkhpbnQsIE9w
SW5mbyhvcGVyYW5kLm9mZnNldCgpKSwgdmFsdWUpOwogCisgICAgICAgIC8vIFdlIGNhbid0IGV4
aXQgYW55bW9yZSBiZWNhdXNlIG91ciBPU1IgZXhpdCBzdGF0ZSBoYXMgY2hhbmdlZC4KKyAgICAg
ICAgbV9leGl0T0sgPSBmYWxzZTsKKwogICAgICAgICBEZWxheWVkU2V0TG9jYWwgZGVsYXllZChj
dXJyZW50Q29kZU9yaWdpbigpLCBvcGVyYW5kLCB2YWx1ZSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoc2V0TW9kZSA9PSBOb3JtYWxTZXQpIHsKQEAgLTM3NCw4ICszNzgsMTQgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCkKICAgICB7Ci0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpCisgICAg
ICAgIC8vIFdlIHBsYXkgaGFja3Mgd2l0aCBtX2V4aXRPSyBoZXJlLiBXZSBrbm93IHRoYXQgdGhl
IFNldExvY2FscyB3ZSBhcmUgZW1pdHRpbmcgYXJlIGFscmVhZHkKKyAgICAgICAgLy8gcmVjb3Jk
ZWQgaW4gT1NSIGV4aXQgc3RhdGUsIHNvIHRoZXkgYXJlbid0IHJlYWwgZWZmZWN0cy4gU28sIHdl
IGRvbid0IHdhbnQgdGhlbSB0byBoYXZlIGFueQorICAgICAgICAvLyBlZmZlY3Qgb24gbV9leGl0
T0suCisgICAgICAgIGJvb2wgZXhpdE9LQmVmb3JlID0gbV9leGl0T0s7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX3NldExvY2FsUXVldWUuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgICAgIG1fc2V0TG9jYWxRdWV1ZVtpXS5leGVjdXRlKHRoaXMpOworICAgICAgICAgICAgbV9l
eGl0T0sgPSBleGl0T0tCZWZvcmU7CisgICAgICAgIH0KICAgICAgICAgbV9zZXRMb2NhbFF1ZXVl
LnJlc2l6ZSgwKTsKICAgICB9CiAKQEAgLTY1MSwxNSArNjYxLDE3IEBAIHByaXZhdGU6CiAKICAg
ICBOb2RlT3JpZ2luIGN1cnJlbnROb2RlT3JpZ2luKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgc2V0IHRoZSBmb3JFeGl0IG9yaWdpbiBvbmx5IG9uIHRob3NlIG5vZGVzIHRo
YXQgY2FuIGV4aXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDUyMDQKICAgICAgICAgQ29kZU9yaWdpbiBzZW1hbnRpYzsKKyAgICAgICAgQ29k
ZU9yaWdpbiBmb3JFeGl0OworCiAgICAgICAgIGlmIChtX2N1cnJlbnRTZW1hbnRpY09yaWdpbi5p
c1NldCgpKQogICAgICAgICAgICAgc2VtYW50aWMgPSBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2VtYW50aWMgPSBjdXJyZW50Q29kZU9yaWdpbigp
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGN1cnJlbnRD
b2RlT3JpZ2luKCksIHRydWUpOworCisgICAgICAgIGZvckV4aXQgPSBjdXJyZW50Q29kZU9yaWdp
bigpOworCisgICAgICAgIHJldHVybiBOb2RlT3JpZ2luKHNlbWFudGljLCBmb3JFeGl0LCBtX2V4
aXRPSyk7CiAgICAgfQogICAgIAogICAgIEJyYW5jaERhdGEqIGJyYW5jaERhdGEodW5zaWduZWQg
dGFrZW4sIHVuc2lnbmVkIG5vdFRha2VuKQpAQCAtNjc3LDYgKzY4OSwxOCBAQCBwcml2YXRlOgog
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAg
ICAgICAgZGF0YUxvZygiICAgICAgICBhcHBlbmRlZCAiLCBub2RlLCAiICIsIEdyYXBoOjpvcE5h
bWUobm9kZS0+b3AoKSksICJcbiIpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKG5v
ZGUpOworICAgICAgICBjbG9iYmVyaXplKAorICAgICAgICAgICAgbV9ncmFwaCwgbm9kZSwgTm9P
cENsb2JiZXJpemUoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFw
KSB7CisgICAgICAgICAgICAgICAgLy8gV3JpdGVzIHRvIFNpZGVTdGF0ZSBhcmUgbm90IG9ic2Vy
dmFibGUuCisgICAgICAgICAgICAgICAgaWYgKGhlYXAuaXNTdWJ0eXBlT2YoU2lkZVN0YXRlKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgLy8gV2UgYXNz
dW1lIGFsbCBvdGhlciB3cml0ZXMgYXJlIG9ic2VydmFibGUsIGFuZCBzbyBpZiB3ZSB0cmllZCB0
byBleGl0IGFmdGVyIHRoZW0KKyAgICAgICAgICAgICAgICAvLyB3aXRoIHRoZSBzYW1lIG9yaWdp
biB0aGVuIHdlJ2QgY2F1c2UgdGhhdCBlZmZlY3QgdG8gcmVwZWF0LgorICAgICAgICAgICAgICAg
IG1fZXhpdE9LID0gZmFsc2U7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2Ji
ZXJpemUoKSk7CiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KICAgICAKQEAgLTkwMCw2ICs5
MjQsOCBAQCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fY3VycmVudEluZGV4OwogICAgIC8vIFRo
ZSBzZW1hbnRpYyBvcmlnaW4gb2YgdGhlIGN1cnJlbnQgbm9kZSBpZiBkaWZmZXJlbnQgZnJvbSB0
aGUgY3VycmVudCBJbmRleC4KICAgICBDb2RlT3JpZ2luIG1fY3VycmVudFNlbWFudGljT3JpZ2lu
OworICAgIC8vIFRydWUgaWYgaXQncyBPSyB0byBPU1IgZXhpdCByaWdodCBub3cuCisgICAgYm9v
bCBtX2V4aXRPSyB7IGZhbHNlIH07CiAKICAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudFVuZGVm
aW5lZDsKICAgICBGcm96ZW5WYWx1ZSogbV9jb25zdGFudE51bGw7CkBAIC0xMDUzLDYgKzEwNzks
NyBAQCBwcml2YXRlOgogCiAjZGVmaW5lIExBU1RfT1BDT0RFKG5hbWUpIFwKICAgICBtX2N1cnJl
bnRJbmRleCArPSBPUENPREVfTEVOR1RIKG5hbWUpOyBcCisgICAgbV9leGl0T0sgPSBmYWxzZTsg
XAogICAgIHJldHVybiBzaG91bGRDb250aW51ZVBhcnNpbmcKIAogdm9pZCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCkBAIC0xMzUxLDExICsxMzc4LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICB9CiAgICAgCiAgICAgbV9ncmFwaC5tX2lubGlu
ZVZhcmlhYmxlRGF0YS5hcHBlbmQoaW5saW5lVmFyaWFibGVEYXRhKTsKKworICAgIC8vIEF0IHRo
aXMgcG9pbnQsIGl0J3MgYWdhaW4gT0sgdG8gT1NSIGV4aXQuCisgICAgbV9leGl0T0sgPSB0cnVl
OworICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKICAgICAKICAgICBwYXJzZUNvZGVCbG9jaygpOwog
ICAgIGNsZWFyQ2FjaGVzKCk7IC8vIFJlc2V0IG91ciBzdGF0ZSBub3cgdGhhdCB3ZSdyZSBiYWNr
IHRvIHRoZSBvdXRlciBjb2RlLgogICAgIAogICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7
CisgICAgbV9leGl0T0sgPSBmYWxzZTsKICAgICAKICAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2Rl
IGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBk
by4KICAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3Jh
cGgubGFzdEJsb2NrKCkpIHsKQEAgLTE3MjQsNiArMTc1NiwxMSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZygKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygi
Q2FsbGVlIGlzIGdvaW5nIHRvIGJlICIsIGNhbGxlZVJlZywgIlxuIik7CiAgICAgc2V0RGlyZWN0
KGNhbGxlZVJlZywgY2FsbFRhcmdldE5vZGUsIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CisKKyAg
ICAvLyBJdCdzIE9LIHRvIGV4aXQgcmlnaHQgbm93LCBldmVuIHRob3VnaCB3ZSBzZXQgc29tZSBs
b2NhbHMuIFRoYXQncyBiZWNhdXNlIHRob3NlIGxvY2FscyBhcmUgbm90CisgICAgLy8gdXNlci12
aXNpYmxlLgorICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CiAg
ICAgCiAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBoLm1fc3dpdGNoRGF0YS5hZGQoKTsK
ICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hDZWxsOwpAQCAtMTgxNiw2ICsxODUzLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgfQogCiAgICAgbV9jdXJyZW50SW5k
ZXggPSBuZXh0T2Zmc2V0OworICAgIG1fZXhpdE9LID0gdHJ1ZTsgLy8gT3JpZ2luIGNoYW5nZWQs
IHNvIGl0J3MgZmluZSB0byBleGl0IGFnYWluLgogICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7
CiAgICAgYWRkVG9HcmFwaChKdW1wKTsKICAgICBsYW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJl
bnRCbG9jayk7CkBAIC0yNzE0LDYgKzI3NTIsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlR2V0QnlJZCgKICAgICAvLyAgICBzaG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVyID0g
cmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7
CisKKyAgICAvLyBXZSd2ZSBzZXQgc29tZSBsb2NhbHMsIGJ1dCB0aGV5IGFyZSBub3QgdXNlci12
aXNpYmxlLiBJdCdzIHN0aWxsIE9LIHRvIGV4aXQgZnJvbSBoZXJlLgorICAgIG1fZXhpdE9LID0g
dHJ1ZTsKKyAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CiAgICAgCiAgICAgaGFuZGxlQ2FsbCgKICAg
ICAgICAgZGVzdGluYXRpb25PcGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNh
bGwsIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKSwKQEAgLTI4NjksNiArMjkxMSwxMCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpbnQgbmV4dFJlZ2lz
dGVyID0gcmVnaXN0ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRl
TmFrZWRTZXQpOwogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwg
dmFsdWUsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKworICAgICAgICAvLyBXZSd2ZSBzZXQgc29tZSBs
b2NhbHMsIGJ1dCB0aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdzIHN0aWxsIE9LIHRvIGV4
aXQgZnJvbSBoZXJlLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3Jh
cGgoRXhpdE9LKTsKICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlcigpLm9mZnNldCgpLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGws
CkBAIC0yOTAxLDEyICsyOTQ3LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRl
cjsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2lubGluZVN0YWNrVG9w
LT5tX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9j
a0JlZ2luID0gbV9jdXJyZW50SW5kZXg7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZp
cnN0IGJhc2ljIGJsb2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFs
bG93cwogICAgIC8vIHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2Ug
dGhlIGFjdHVhbCBhcmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBh
IHZhbHVlIHdlIHNldCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dy
YXBoLmJsb2NrKDApICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBtX2dyYXBoLm1f
YXJndW1lbnRzLnJlc2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIC8vIFdlIHdpbGwgZW1p
dCBTZXRBcmd1bWVudCBub2Rlcy4gVGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRv
cCBvZiBhbiBvcF9lbnRlciBzbworICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgorICAgICAgICBt
X2V4aXRPSyA9IHRydWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAg
ICAgICAgIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC0yOTIyLDYg
KzI5NzEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
IH0KIAogICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcg
Ynl0ZWNvZGUgaW5zdHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0
aGF0IHdlIGNhbiBleGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7
CisgICAgICAgIAogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAg
ICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCkBAIC0yOTk4LDcg
KzMwNTEsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAg
ICAgICAgICAgICAgICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplKGNh
Y2hlZEZ1bmN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGws
IE9wSW5mbyhmcm96ZW4pLCBjYWxsZWUpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpT
Q29uc3RhbnQsIE9wSW5mbyhmcm96ZW4pKSk7CiAKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24gPSBzdGF0aWNfY2FzdDxKU0Z1bmN0aW9uKj4oY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTM0MjAsNiArMzQ3Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGlmICghY29tcGlsZWRBc0dldEJ5SWQpIHsKICAg
ICAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogICAgICAgICAgICAg
ICAgIE5vZGUqIGdldEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9k
ZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAg
ICAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7IC8vIEdldEJ5VmFsIG11c3QgYmUgdHJlYXRlZCBh
cyBpZiBpdCBjbG9iYmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0
IGdlbmVyaWMuCiAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwgZ2V0QnlWYWwpOwogICAgICAgICAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTg4
ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3OCw2ICsyNzgsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBo
LCBOb2RlKiBub2RlCiAgICAgICAgICAKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21i
aWVIaW50OgorICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgS2lsbFN0YWNrOgogICAgIGNhc2Ug
VXBzaWxvbjoKICAgICBjYXNlIFBoaToKQEAgLTM5Niw2ICszOTcsNyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IHdl
aXJkLiBJbiBmYWN0LCBTdHJDYXQgaGFzIHZlcnkgbGltaXRlZCBlZmZlY3RmdWxuZXNzIGJlY2F1
c2Ugd2Ugb25seQogICAgICAgICAvLyBwYXNzIGl0IHByaW1pdGl2ZSB2YWx1ZXMuIEJ1dCwgcmln
aHQgbm93LCB0aGUgY29tcGlsZXIgaXNuJ3Qgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhpcwogICAg
ICAgICAvLyBhbmQgdGhhdCdzIHByb2JhYmx5IE9LLgorICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MwogICAgICAgICByZWFkKFdv
cmxkKTsKICAgICAgICAgd3JpdGUoSGVhcCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRT
dGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVk
ZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiBncmFwaCwg
Tm9kZSogbm9kZSkKK3sKKyAgICAvLyBUaGVyZSBhcmUgY2VydGFpbiBub2RlcyB3aG9zZSBlZmZl
Y3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0IHRoZXkKKyAg
ICAvLyBub3JtYWxseSBjbG9iYmVyLgorICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgIGNh
c2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBQdXRIaW50OgorICAg
IGNhc2UgS2lsbFN0YWNrOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNhc2UgU2V0TG9j
YWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMgd3JpdGUgdG8g
dGhlIHN0YWNrLCBidXQgdGhleSBtYXkgb25seSBkbyBzbyBhZnRlciB3ZSBoYXZlIGFscmVhZHkg
aGFkIGEgTW92SGludAorICAgICAgICAvLyBmb3IgdGhlIGV4YWN0IHNhbWUgdmFsdWUgYW5kIHRo
ZSBzYW1lIHN0YWNrIGxvY2F0aW9uLiBIZW5jZSwgdGhleSBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0
IG9uCisgICAgICAgIC8vIGV4aXQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICBjYXNlIEFycmF5aWZ5OgorICAgICAgICAv
LyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxl
LiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKKyAgICAgICAgLy8gaGVhcHMgaW50byB0
aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRv
bid0IGRvIHRoYXQgcmlnaHQgbm93LgorICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MAorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGb3IgYWxsIG90aGVyIG5vZGVzLCB3ZSBqdXN0IGNh
cmUgYWJvdXQgd2hldGhlciB0aGV5IHdyaXRlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIFNpZGVT
dGF0ZS4KKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgY2xvYmJlcml6ZSgK
KyAgICAgICAgICAgIGdyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAorICAgICAgICAgICAg
WyZdIChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXApIHsKKyAgICAgICAgICAgICAgICAvLyBUaGVy
ZSBzaG91bGRuJ3QgYmUgc3VjaCBhIHRoaW5nIGFzIGEgc3RyaWN0IHN1YnR5cGUgb2YgU2lkZVN0
YXRlLiBUaGF0J3Mgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgICAgICAvLyB1cyB0byB1c2UgYSBm
YXN0ICE9IGNoZWNrLCBiZWxvdy4KKyAgICAgICAgICAgICAgICBBU1NFUlQoIWhlYXAuaXNTdHJp
Y3RTdWJ0eXBlT2YoU2lkZVN0YXRlKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaGVhcCAhPSBT
aWRlU3RhdGUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7CisgICAgICAgICAg
ICB9LAorICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cnNFeGl0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKyNkZWZpbmUgREZHQ2xvYmJlcnNFeGl0U3RhdGVf
aAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKworLy8gQSBjb25zZXJ2YXRpdmUgYXBw
cm94aW1hdGlvbiBvZiB3aGV0aGVyIHRoZSBub2RlIHdpbGwgcGVyZm9ybSBhbiBlZmZlY3QgdGhh
dCBtZWFucyB0aGF0IHdlIGNhbiBubworLy8gbG9uZ2VyIGV4aXQgdG8gdGhpcyBub2RlJ3MgZXhp
dCBvcmlnaW4uCisKK2Jvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmLCBOb2RlKik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Nyw2ICs2NjcsNyBAQCBwcml2YXRlOgog
ICAgICAgICAKICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZh
bHVlLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKIAorICAgICAgICBub2RlLT5jaGlsZDEoKS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtu
b3duQ2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IDA7CkBAIC02
NzcsNiArNjc4LDkgQEAgcHJpdmF0ZToKIAogICAgICAgICBFZGdlIHByb3BlcnR5U3RvcmFnZTsK
IAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9yaWdpbi5leGl0T0spOworICAg
ICAgICBib29sIGNhbkV4aXQgPSB0cnVlOworCiAgICAgICAgIGlmIChpc0lubGluZU9mZnNldCh2
YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGNoaWxkRWRn
ZTsKICAgICAgICAgZWxzZSBpZiAoIXZhcmlhbnQucmVhbGxvY2F0ZXNTdG9yYWdlKCkpIHsKQEAg
LTY4Nyw3ICs2OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9m
ZnNldCh2YXJpYW50Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAg
ICAgICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CisgICAgICAg
ICAgICAgICAgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyh0cmFuc2l0aW9u
KSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IEVkZ2UoYWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJU
KHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxpbmVDYXBhY2l0eSgp
KTsKQEAgLTY5NSw3ICs2OTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFpc0lu
bGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSk7CiAKICAgICAgICAgICAgIE5vZGUqIHJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIG9yaWdpbiwKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlLCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAg
ICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSwKICAgICAgICAgICAg
ICAgICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2Up
KSk7CkBAIC03MDcsMTMgKzcxMSwxNSBAQCBwcml2YXRlOgogICAgICAgICBkYXRhLmlkZW50aWZp
ZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICAKICAgICAgICAgbm9kZS0+Y29u
dmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlKTsKKyAgICAgICAgbm9kZS0+
b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAKICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogUHV0
U3RydWN0dXJlIGdvZXMgbGFzdCB1bnRpbCB3ZSBmaXggZWl0aGVyCiAgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTIxIG9yCiAgICAgICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTI0Lgog
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4sIE9wSW5mbyh0
cmFuc2l0aW9uKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2sgKyAx
LCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4ud2l0aEludmFsaWRFeGl0KCksIE9wSW5m
byh0cmFuc2l0aW9uKSwKKyAgICAgICAgICAgICAgICBjaGlsZEVkZ2UpOwogICAgICAgICB9CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFNldExvY2FsOgogICAgIGNhc2UgTW92SGludDoK
ICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9t
OgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTM2Miw2ICsxMzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBMb29wSGludDoKICAg
ICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNh
c2UgRXhpdE9LOgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAgICBjYXNlIFR5cGVP
ZjoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQwOCw5ICsxNDA5LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIGNvbnZlcnRTdHJpbmdBZGRVc2UoTm9kZSogbm9kZSwgRWRnZSYgZWRnZSkKICAgICB7
CiAgICAgICAgIGlmICh1c2VLaW5kID09IFN0cmluZ1VzZSkgewotICAgICAgICAgICAgLy8gVGhp
cyBwcmVzZXJ2ZXMgdGhlIGJpbmFyeVVzZUtpbmQoKSBpbnZhcmlhbnQgb3QgVmFsdWVBZGQ6IFZh
bHVlQWRkJ3MKLSAgICAgICAgICAgIC8vIHR3byBlZGdlcyB3aWxsIGFsd2F5cyBoYXZlIGlkZW50
aWNhbCB1c2Uga2luZHMsIHdoaWNoIG1ha2VzIHRoZQotICAgICAgICAgICAgLy8gZGVjaXNpb24g
cHJvY2VzcyBtdWNoIGVhc2llci4KICAgICAgICAgICAgIG9ic2VydmVVc2VLaW5kT25Ob2RlPFN0
cmluZ1VzZT4oZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrLCBu
b2RlLT5vcmlnaW4sCkBAIC0xNTEyLDYgKzE1MTAsMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
YXR0ZW1wdFRvTWFrZUZhc3RTdHJpbmdBZGQoTm9kZSogbm9kZSkKICAgICB7CisgICAgICAgIGlm
ICghbm9kZS0+b3JpZ2luLmV4aXRPSykgeworICAgICAgICAgICAgLy8gSWYgdGhpcyBjb2RlIGNh
bm5vdCBleGl0LCB0aGVuIHdlIHNob3VsZCBub3QgY29udmVydCBpdCB0byBhIE1ha2VSb3BlLCBz
aW5jZSBNYWtlUm9wZQorICAgICAgICAgICAgLy8gY2FuIGV4aXQuIFRoaXMgYXJpc2VzIGJlY2F1
c2Ugd2UgdGhpbmsgdGhhdCBTdHJDYXQgY2xvYmJlcnMgZXhpdCBzdGF0ZSwgZXZlbiB0aG91Z2gg
aXQKKyAgICAgICAgICAgIC8vIGRvZXNuJ3QgcmVhbGx5IGRvIHRoYXQuCisgICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0Mwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBi
b29sIGdvb2RUb0dvID0gdHJ1ZTsKICAgICAgICAgbV9ncmFwaC5kb1RvQ2hpbGRyZW4oCiAgICAg
ICAgICAgICBub2RlLApAQCAtMTYzNyw2ICsxNjQzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CisgICAgICAgICAgICAgICAgLy8gTk9URTogQW55IHR5cGUgY2hlY2tzIHdlIHB1dCBoZXJlIG1h
eSBnZXQgaG9pc3RlZCBieSBmaXh1cENoZWNrc0luQmxvY2soKS4gU28sIGlmIHdlCisgICAgICAg
ICAgICAgICAgLy8gYWRkIG5ldyB0eXBlIGNoZWNraW5nIHVzZSBraW5kIGZvciBTZXRMb2NhbHMs
IHdlIG5lZWQgdG8gbW9kaWZ5IHRoYXQgY29kZSBhcyB3ZWxsLgorICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNoRm9ybWF0KCkpIHsKICAgICAg
ICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKQEAgLTIxMTAsOCArMjExOSwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAgbV9ibG9jayA9IGJs
b2NrOwotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRleEluQmxvY2sgPCBi
bG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2Rl
ID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXhGb3JD
aGVja3MgPSBVSU5UX01BWDsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5Gb3JDaGVja3M7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxv
Y2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBi
bG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKworICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIG5v
ZGUgYXQgd2hpY2ggd2UgY291bGQgZXhpdCwgdGhlbiBzYXZlIGl0cyBpbmRleC4gSWYgbm9kZXMg
YWZ0ZXIgdGhpcyBvbmUKKyAgICAgICAgICAgIC8vIGNhbm5vdCBleGl0LCB0aGVuIHdlIHdpbGwg
aG9pc3QgY2hlY2tzIHRvIGhlcmUuCisgICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4aXRP
SykgeworICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJbkJsb2NrOworICAg
ICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzID0gb3JpZ2luRm9yQ2hlY2tzLndpdGhT
ZW1hbnRpYyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogCiAgICAgICAgICAgICAvLyBGaXJzdCwg
dHJ5IHRvIHJlbGF4IHRoZSByZXByZXNlbnRhdGlvbmFsIGRlbWFuZHMgb2YgZWFjaCBub2RlLCBp
biBvcmRlciB0byBoYXZlCiAgICAgICAgICAgICAvLyBmZXdlciBjb252ZXJzaW9ucy4KQEAgLTIx
NzUsMjEgKzIxOTUsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBub2RlLAogICAgICAg
ICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBy
ZXN1bHQgPSBudWxscHRyOwotICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KGVkZ2UudXNlS2luZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNl
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRG91YmxlUmVwTWFjaGluZUludFVzZTogewogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmlzTnVtYmVyQ29u
c3RhbnQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZUNvbnN0YW50LCBub2RlLT5vcmln
aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVj
Qnl0ZWNvZGVEb3VibGUsIERvdWJsZUNvbnN0YW50LCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShqc0RvdWJsZU51
bWJlcihlZGdlLT5hc051bWJlcigpKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgRG91Ymxl
UmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
Rm9yQ2hlY2tzLCBTcGVjSW50NTJBc0RvdWJsZSwgRG91YmxlUmVwLCBvcmlnaW5Gb3JDaGVja3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIEludDUy
UmVwVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZDsKQEAgLTIyMDEsNTMgKzIyMjEsOTAgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlS2luZCA9IE5vdENl
bGxVc2U7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVSZXAsIG5vZGUtPm9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRlY29k
ZURvdWJsZSwgRG91YmxlUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIHVzZUtpbmQpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3Vs
dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNJbnQ1MlJlc3VsdCgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVk
Z2UtPmlzTWFjaGluZUludENvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUyQ29uc3Rh
bnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhG
b3JDaGVja3MsIFNwZWNNYWNoaW5lSW50LCBJbnQ1MkNvbnN0YW50LCBvcmlnaW5Gb3JDaGVja3Ms
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhlZGdlLT5jb25zdGFudCgp
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkZ2UtPmhhc0RvdWJsZVJl
c3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRl
eEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY01hY2hpbmVJbnQs
IEludDUyUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJsZVJlcE1hY2hpbmVJbnRVc2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JB
cml0aG1ldGljKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBJbnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY0ludDMyLCBJbnQ1
MlJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlKGVkZ2Uubm9kZSgpLCBJbnQzMlVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUyUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTWFjaGluZUludCwgSW50
NTJSZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZShlZGdlLm5vZGUoKSwgTWFjaGluZUludFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpICYmICFlZGdlLT5oYXNJbnQ1
MlJlc3VsdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNCeXRlY29kZURvdWJs
ZSwgVmFsdWVSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRlY29kZURvdWJsZSwgVmFsdWVSZXAsIG9yaWdpbkZv
ckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUo
KSwgRG91YmxlUmVwVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVj
SW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwgVmFsdWVSZXAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPm9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwgSW50NTJSZXBVc2Up
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNJ
bnQzMiB8IFNwZWNJbnQ1MkFzRG91YmxlLCBWYWx1ZVJlcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLCBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVz
ZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOworCisgICAgICAgICAgICAgICAgICAgIC8v
IEl0J3MgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB0aGlzIG5vZGUgY2Fubm90IGRvIHR5cGUgY2hl
Y2tzLCBidXQgd2Ugbm93IGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAvLyB0eXBlIGNoZWNr
IG9uIHRoaXMgbm9kZS4gV2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhlIGdlbmVyYWwgZm9ybSBv
ZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIC8vIHByb2JsZW0uIEl0IG9ubHkgYXJpc2VzIHdo
ZW4gQnl0ZUNvZGVQYXJzZXIgZW1pdHMgYW4gaW1tZWRpYXRlIFNldExvY2FsLCByYXRoZXIKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdGhhbiBhIGRlbGF5ZWQgb25lLiBTbywgd2Ugb25seSB3b3Jy
eSBhYm91dCB0aG9zZSBjaGVja3MgdGhhdCB3ZSBtYXkgaGF2ZSBwdXQgb24KKyAgICAgICAgICAg
ICAgICAgICAgLy8gYSBTZXRMb2NhbC4gTm90ZSB0aGF0ICJpbmRleEZvckNoZWNrcyAhPSBpbmRl
eEluQmxvY2siIGlzIGp1c3QgYW5vdGhlciB3YXkgb2YKKyAgICAgICAgICAgICAgICAgICAgLy8g
c2F5aW5nICIhbm9kZS0+b3JpZ2luLmV4aXRPSyIuCisgICAgICAgICAgICAgICAgICAgIGlmIChp
bmRleEZvckNoZWNrcyAhPSBpbmRleEluQmxvY2sgJiYgbWF5SGF2ZVR5cGVDaGVjayhlZGdlLnVz
ZUtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQga25vd25Vc2VLaW5k
OworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMy
VXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IEtub3duSW50
MzJVc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga25v
d25Vc2VLaW5kID0gS25vd25DZWxsVXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IEtub3duQm9vbGVhblVzZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBjYW4gb25seSBhcmlz
ZSBpZiB3ZSBoYXZlIGEgQ2hlY2sgbm9kZSwgYW5kIGluIHRoYXQgY2FzZSwgd2UgY2FuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCByZW1vdmUgdGhlIG9yaWdpbmFsIGNoZWNr
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
bm9kZS0+b3AoKSA9PSBDaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga25vd25V
c2VLaW5kID0gVW50eXBlZFVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl
eEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNrLCBvcmlnaW5Gb3JDaGVja3MsIGVkZ2UpOworCisg
ICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoa25vd25Vc2VLaW5kKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAko
cmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZv
cm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCwyOCBAQCBpbmxpbmUgVXNlS2luZCB1
c2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvCiAgICAgcmV0dXJuIFVudHlwZWRVc2U7CiB9CiAKK2lu
bGluZSBVc2VLaW5kIHVuY2hlY2tlZFVzZUtpbmRGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQorewor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEZWFkRmx1c2g6CisgICAgY2FzZSBGbHVz
aGVkSlNWYWx1ZToKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAgICAgIHJldHVybiBV
bnR5cGVkVXNlOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHJldHVybiBLbm93bkNl
bGxVc2U7CisgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgIHJldHVybiBLbm93bkludDMy
VXNlOworICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICByZXR1cm4gSW50NTJSZXBVc2U7
CisgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICByZXR1cm4gRG91YmxlUmVwVXNlOwor
ICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIHJldHVybiBLbm93bkJvb2xlYW5Vc2U7
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFVu
dHlwZWRVc2U7Cit9CisKIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmlsdGVyRm9yKEZsdXNo
Rm9ybWF0IGZvcm1hdCkKIHsKICAgICByZXR1cm4gdHlwZUZpbHRlckZvcih1c2VLaW5kRm9yKGZv
cm1hdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw5IEBACiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJ
VFR5cGUuaCIKICNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5jbHVkZSAiREZHQ2xv
YmJlclNldC5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAjaW5jbHVkZSAi
REZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNsdWRlICJERkdWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5lc3MuaCIK
ICNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCkBAIC0xMDEsOCArMTAzLDE0IEBA
IHN0YXRpYyB2b2lkIHByaW50V2hpdGVTcGFjZShQcmludFN0cmVhbSYKICAgICAgICAgb3V0LnBy
aW50KCIgIik7CiB9CiAKLWJvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50
Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCitib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQ
cmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqJiBwcmV2aW91c05vZGVS
ZWYsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCogY29udGV4dCkKIHsKKyAgICBpZiAo
IWN1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBOb2RlKiBwcmV2aW91c05vZGUgPSBwcmV2aW91c05vZGVSZWY7CisgICAgcHJldmlv
dXNOb2RlUmVmID0gY3VycmVudE5vZGU7CisKICAgICBpZiAoIXByZXZpb3VzTm9kZSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMzQ1LDEyICszNTMsMTggQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJS
OiIsIHNvcnRlZExpc3REdW1wKHJlYWRzLmRpcmVjdCgpLCAiLCIpKTsKICAgICBpZiAoIXdyaXRl
cy5pc0VtcHR5KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlc6Iiwgc29ydGVkTGlzdER1
bXAod3JpdGVzLmRpcmVjdCgpLCAiLCIpKTsKKyAgICBFeGl0TW9kZSBleGl0TW9kZSA9IG1heUV4
aXQoKnRoaXMsIG5vZGUpOworICAgIGlmIChleGl0TW9kZSAhPSBEb2VzTm90RXhpdCkKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBleGl0TW9kZSk7CisgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRl
KCp0aGlzLCBub2RlKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ2xvYmJlcnNFeGl0Iik7
CiAgICAgaWYgKG5vZGUtPm9yaWdpbi5pc1NldCgpKSB7CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgImJjIyIsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsKLSAgICAgICAg
aWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4uZm9yRXhpdCkKKyAgICAg
ICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4uZm9yRXhpdCAmJiBu
b2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKQogICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiZXhpdDogIiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpOwogICAgIH0KLSAgICAKKyAgICBpZiAo
IW5vZGUtPm9yaWdpbi5leGl0T0spCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkV4aXRJbnZh
bGlkIik7CiAgICAgb3V0LnByaW50KCIpIik7CiAKICAgICBpZiAobm9kZS0+aGFzVmFyaWFibGVB
Y2Nlc3NEYXRhKCp0aGlzKSAmJiBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vzc0RhdGEoKSkKQEAg
LTQ1NSw3ICs0NjksNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBD
CiAgICAgICAgIG91dC5wcmludCgiICBBcmd1bWVudHM6ICIsIGxpc3REdW1wKG1fYXJndW1lbnRz
KSwgIlxuIik7CiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIAotICAgIE5vZGUqIGxhc3ROb2Rl
ID0gMDsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IG51bGxwdHI7CiAgICAgZm9yIChzaXplX3QgYiA9
IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG1fYmxvY2tzW2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQpAQCAtNDk2LDcgKzUx
MCw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAg
IGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlLCBibG9jay0+YXQoaSksIGNvbnRleHQp
OwogICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9jay0+YXQoaSksIGNvbnRleHQpOwotICAg
ICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAgIH0KICAgICAgICAgb3V0
LnByaW50KCIgIFN0YXRlczogIiwgYmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiwgIiwgIiwgYmxv
Y2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCk7CiAgICAgICAgIGlmICghYmxvY2st
PmNmYURpZEZpbmlzaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
d29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHB1YmxpYzoKIAogICAgIC8vIER1bXAg
dGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBmcm9tIHRoZSBjb2Rl
IG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJucyB0cnVlIGlmIGFu
eXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0m
LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5v
ZGUsIER1bXBDb250ZXh0Kik7CisgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYs
IGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZSwgTm9kZSogY3VycmVudE5v
ZGUsIER1bXBDb250ZXh0Kik7CiAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUgYWRkU3BlY3VsYXRp
b25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50MzIsIGJvb2wgcmln
aHRTaG91bGRTcGVjdWxhdGVJbnQzMiwgUHJlZGljdGlvblBhc3MgcGFzcykKICAgICB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVI
ZWFkZXJDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTEwNCw2ICsxMDQsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gYmVjYXVzZSB0
aGF0IGlzIHRoZSBERkcgU1NBIGNvbnZlbnRpb24uIFRoZXJlZm9yZSwgZWFjaCBwcmVkZWNlc3Nv
ciBvZiB0aGUgbG9vcAogICAgICAgICAgICAgLy8gaGVhZGVyIG11c3QgaGF2ZSBvbmx5IG9uZSBz
dWNjZXNzb3IuCiAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGV4aXN0
aW5nUHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcCgpID09IEp1bXApOworCisgICAgICAgICAgICAv
LyBBIHByZS1oZWFkZXIgaXMgbW9zdCB1c2VmdWwgaWYgaXQncyBwb3NzaWJsZSB0byBleGl0IGZy
b20gaXRzIHRlcm1pbmFsLiBIZW5jZQorICAgICAgICAgICAgLy8gaWYgdGhlIHRlcm1pbmFsIG9m
IHRoZSBleGlzdGluZyBwcmUtaGVhZGVyIGRvZXNuJ3QgYWxsb3cgZm9yIGV4aXQsIGJ1dCB0aGUg
Zmlyc3QKKyAgICAgICAgICAgIC8vIG9yaWdpbiBvZiB0aGUgbG9vcCBoZWFkZXIgZG9lcywgdGhl
biB3ZSBzaG91bGQgY3JlYXRlIGEgbmV3IHByZS1oZWFkZXIuCisgICAgICAgICAgICBpZiAoIW5l
ZWRzTmV3UHJlSGVhZGVyICYmIGxvb3AuaGVhZGVyKCktPmZpcnN0T3JpZ2luKCkuZXhpdE9LCisg
ICAgICAgICAgICAgICAgJiYgIWV4aXN0aW5nUHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcmlnaW4u
ZXhpdE9LKQorICAgICAgICAgICAgICAgIG5lZWRzTmV3UHJlSGVhZGVyID0gdHJ1ZTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgaWYgKCFuZWVkc05ld1ByZUhlYWRlcikKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhp
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0
LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE0IEBAIHByaXZhdGU6CiAK
IH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1ib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBO
b2RlKiBub2RlKQorRXhpdE1vZGUgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7
CisgICAgRXhpdE1vZGUgcmVzdWx0ID0gRG9lc05vdEV4aXQ7CisgICAgCiAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgLy8gVGhpcyBpcyBhIGNhcmVmdWxseSBjdXJhdGVkIGxpc3Qgb2Yg
bm9kZXMgdGhhdCBkZWZpbml0ZWx5IGRvIG5vdCBleGl0LiBXZSB0cnkgdG8gYmUgdmVyeQogICAg
IC8vIGNvbnNlcnZhdGl2ZSB3aGVuIG1haW50YWluaW5nIHRoaXMgbGlzdCwgYmVjYXVzZSBhZGRp
bmcgbmV3IG5vZGUgdHlwZXMgdG8gaXQgZG9lc24ndAotICAgIC8vIGdlbmVyYWxseSBtYWtlIHRo
aW5ncyBhIGxvdCBiZXR0ZXIgYnV0IGl0IG1pZ2h0IGludHJvZHVjZSBpbnNhbmVseSBzdWJ0bGUg
YnVncy4KKyAgICAvLyBnZW5lcmFsbHkgbWFrZSB0aGluZ3MgYSBsb3QgYmV0dGVyIGJ1dCBpdCBt
aWdodCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MuCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICBj
YXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKQEAgLTk5LDYgKzEwMSw3
IEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQaGk6
CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRP
SzoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgIGNhc2UgUHV0SGludDoKICAgICBjYXNlIFBo
YW50b21OZXdPYmplY3Q6CkBAIC0xMTYsMTggKzExOSw2MiBAQCBib29sIG1heUV4aXQoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgSW50NTJS
ZXA6CiAgICAgY2FzZSBWYWx1ZVJlcDoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgor
ICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAgIGNhc2UgUHV0
U3RydWN0dXJlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CiAgICAgICAgIGJyZWFrOwotICAgICAgICAKKworICAgIGNhc2UgU3RyQ2F0OgorICAgIGNhc2Ug
Q2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBj
YXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVB
Y3RpdmF0aW9uOgorICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgY2FzZSBOZXdTdHJpbmdPYmpl
Y3Q6CisgICAgICAgIHJlc3VsdCA9IEV4aXRzRm9yRXhjZXB0aW9uczsKKyAgICAgICAgYnJlYWs7
CisKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiBpbiBkb3VidCwgcmV0dXJuIHRydWUuCi0g
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gRXhpdHM7CiAgICAgfQogCiAgICAg
RWRnZU1heUV4aXQgZnVuY3RvcjsKICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihncmFwaCwg
bm9kZSwgZnVuY3Rvcik7Ci0gICAgcmV0dXJuIGZ1bmN0b3IucmVzdWx0KCk7CisgICAgaWYgKGZ1
bmN0b3IucmVzdWx0KCkpCisgICAgICAgIHJlc3VsdCA9IEV4aXRzOworICAgIAorICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIEV4aXRNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7Cisg
ICAgY2FzZSBEb2VzTm90RXhpdDoKKyAgICAgICAgb3V0LnByaW50KCJEb2VzTm90RXhpdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0c0ZvckV4Y2VwdGlvbnM6CisgICAgICAgIG91
dC5wcmludCgiRXhpdHNGb3JFeGNlcHRpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEV4aXRzOgorICAgICAgICBvdXQucHJpbnQoIkV4aXRzIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWF5RXhpdC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTAgKzM2LDQ4IEBA
IHN0cnVjdCBOb2RlOwogLy8gQSAqdmVyeSogY29uc2VydmF0aXZlIGFwcHJveGltYXRpb24gb2Yg
d2hldGhlciBvciBub3QgYSBub2RlIGNvdWxkIHBvc3NpYmx5IGV4aXQuIFVzdWFsbHkKIC8vIHJl
dHVybnMgdHJ1ZSBleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2Ugb2J2aW91c2x5IGRvbid0IGV4cGVj
dCBhbiBleGl0LgogCi1ib29sIG1heUV4aXQoR3JhcGgmLCBOb2RlKik7CitlbnVtIEV4aXRNb2Rl
IHsKKyAgICAvLyBUaGUgbm9kZSBkb2VzIG5vdCBleGl0IGF0IGFsbC4gVGhpcyBtZWFucyB0aGF0
IGl0J3MgbGVnYWwgdG8gZWxpbWluYXRlIHRoZSBmaXJzdCBzdG9yZSBpbiBhCisgICAgLy8gcHJv
Z3JhbSBsaWtlOgorICAgIC8vCisgICAgLy8gZ2xvYmFsID0gMSAvLyBmaXJzdCBzdG9yZQorICAg
IC8vIERvZXNOb3RFeGl0KCk7IC8vIGxldCdzIGFzc3VtZSB0aGF0IHRoaXMgYWxzbyBkb2Vzbid0
IHJlYWQgImdsb2JhbCIKKyAgICAvLyBnbG9iYWwgPSAyIC8vIHNlY29uZCBzdG9yZQorICAgIC8v
CisgICAgLy8gSXQncyBsZWdhbCB0byBlbGltaW5hdGUgdGhlIGZpcnN0IG9uZSBzaW5jZSBub2Jv
ZHkgd2lsbCBzZWUgaXQ7IHRoZSBzZWNvbmQgc3RvcmUgaXMgYWx3YXlzCisgICAgLy8gZXhlY3V0
ZWQgcmlnaHQgYWZ0ZXIuCisgICAgRG9lc05vdEV4aXQsCisKKyAgICAvLyBUaGUgbm9kZSB3aWxs
IGV4aXQsIGJ1dCBvbmx5IGJ5IHByb3Blcmx5IHRocm93aW5nIGV4Y2VwdGlvbnMuIEEgcHJvcGVy
IGV4Y2VwdGlvbiB0aHJvdyB3aWxsCisgICAgLy8gZGl2ZXJ0IGV4ZWN1dGlvbiB0byB0aGUgbWF0
Y2hpbmcgb3BfY2F0Y2ggYW5kIHdpbGwgbm90IHJlZXhlY3V0ZSB0aGUgZXhpdCBvcmlnaW4uIFRo
aXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSBzdG9yZSBlbGltaW5hdGlvbiBvcHRpbWl6YXRpb24g
YWJvdmUgd291bGQgYmUgaWxsZWdhbCwgYnV0IHRoZSBmb2xsb3dpbmcgd291bGQgYmUgT0s6Cisg
ICAgLy8KKyAgICAvLyBTaWRlRWZmZWN0KC4uLiwgZXhpdDogYmMjNDIpCisgICAgLy8gRXhpdHNG
b3JFeGNlcHRpb25zKC4uLiwgZXhpdDogI2JjNDIsIEV4aXRJbnZhbGlkKQorICAgIC8vCisgICAg
Ly8gSW4gcGFydGljdWxhciwgaXQncyBPSyBmb3IgYSBub2RlIHRoYXQgcmVwb3J0cyBFeGl0c0Zv
ckV4Y2VwdGlvbnMgdG8gYmUgZXhlY3V0ZWQgaW4gYSBjb250ZXh0CisgICAgLy8gd2hlcmUgIU5v
ZGU6Om9yaWdpbi5leGl0T0suIFRoYXQncyBiZWNhdXNlIHRoaXMgbm9kZSB3aWxsIG5vdCBleGl0
IGluIGEgbWFubmVyIHRoYXQgY291bGQgbGVhZAorICAgIC8vIHRvIHRoZSByZWV4ZWN1dGlvbiBv
ZiBTaWRlRWZmZWN0KCkuCisgICAgRXhpdHNGb3JFeGNlcHRpb25zLAorCisgICAgLy8gVGhlIG5v
ZGUgd2lsbCBleGl0IHRvIHRoZSBleGl0IG9yaWdpbi4gVGhpcyBtZWFucyB0aGF0IHdlIGNhbm5v
dCBkbyBzdG9yZSBlbGltaW5hdGlvbiBsaWtlIGZvcgorICAgIC8vIERvZXNOb3RFeGl0IGFuZCBh
bHNvIHdlIGNhbm5vdCBwbGFjZSB0aGlzIG5vZGUgaW4gYW4gRXhpdEludmFsaWQgY29udGV4dCwg
c2luY2UgdGhpcyB3aWxsIGV4aXQKKyAgICAvLyBpbiBhIG1hbm5lciB0aGF0IHdpbGwgY2F1c2Ug
dGhlIHJlZXhlY3V0aW9uIG9mIGFsbCBwcmV2aW91cyBvcGVyYXRpb25zIHdpdGhpbiB0aGlzIGV4
aXQgb3JpZ2luLgorICAgIEV4aXRzCit9OworCitFeGl0TW9kZSBtYXlFeGl0KEdyYXBoJiwgTm9k
ZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpERkc6OkV4aXRNb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERGR01heUV4aXRfaApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCShyZXZp
c2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1v
dmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRMb2NhbCgpKSA9
IEVwb2NoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICht
YXlFeGl0KG1fZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwg
bm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAgICAgICAgICAgY3VycmVudEVwb2NoLmJ1bXAo
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdOb2RlT3JpZ2lu
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIE5vZGVPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoIntzZW1hbnRpYzogIiwgc2VtYW50aWMsICIsIGZvckV4aXQ6ICIsIGZv
ckV4aXQsICIsIGV4aXRPSzogIiwgZXhpdE9LLCAifSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OSw5ICsyOSwxMyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZU9yaWdp
bi5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKwogc3RydWN0
IE5vZGVPcmlnaW4gewogICAgIE5vZGVPcmlnaW4oKSB7IH0KICAgICAKQEAgLTQ4LDcgKzUyLDcg
QEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgICAgICByZXR1cm4gc2VtYW50aWMuaXNTZXQoKTsK
ICAgICB9CiAgICAgCi0gICAgTm9kZU9yaWdpbiB3aXRoU2VtYW50aWMoQ29kZU9yaWdpbiBzZW1h
bnRpYykKKyAgICBOb2RlT3JpZ2luIHdpdGhTZW1hbnRpYyhDb2RlT3JpZ2luIHNlbWFudGljKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKCFpc1NldCgpKQogICAgICAgICAgICAgcmV0dXJuIE5v
ZGVPcmlnaW4oKTsKQEAgLTU4LDcgKzYyLDQ2IEBAIHN0cnVjdCBOb2RlT3JpZ2luIHsKICAgICAg
ICAgICAgIHJlc3VsdC5zZW1hbnRpYyA9IHNlbWFudGljOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KKworICAgIE5vZGVPcmlnaW4gd2l0aEV4aXRPSyhib29sIHZhbHVlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsKKyAgICAgICAgcmVzdWx0
LmV4aXRPSyA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIE5v
ZGVPcmlnaW4gd2l0aEludmFsaWRFeGl0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3
aXRoRXhpdE9LKGZhbHNlKTsKKyAgICB9CisKKyAgICBOb2RlT3JpZ2luIHRha2VWYWxpZEV4aXQo
Ym9vbCYgY2FuRXhpdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRoRXhpdE9LKGV4
aXRPSyAmIHN0ZDo6ZXhjaGFuZ2UoY2FuRXhpdCwgZmFsc2UpKTsKKyAgICB9CiAgICAgCisgICAg
Tm9kZU9yaWdpbiBmb3JJbnNlcnRpbmdBZnRlcihHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpIGNv
bnN0CisgICAgeworICAgICAgICBOb2RlT3JpZ2luIHJlc3VsdCA9ICp0aGlzOworICAgICAgICBp
ZiAoZXhpdE9LICYmIGNsb2JiZXJzRXhpdFN0YXRlKGdyYXBoLCBub2RlKSkKKyAgICAgICAgICAg
IHJlc3VsdC5leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTm9kZU9yaWdpbiYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gc2VtYW50aWMgPT0gb3RoZXIuc2VtYW50aWMKKyAgICAgICAgICAg
ICYmIGZvckV4aXQgPT0gb3RoZXIuZm9yRXhpdAorICAgICAgICAgICAgJiYgZXhpdE9LID09IG90
aGVyLmV4aXRPSzsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgTm9kZU9yaWdp
biYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKICAgICAvLyBV
c2VkIGZvciBkZXRlcm1pbmluZyB3aGF0IGJ5dGVjb2RlIHRoaXMgY2FtZSBmcm9tLiBUaGlzIGlz
IGltcG9ydGFudCBmb3IKICAgICAvLyBkZWJ1Z2dpbmcsIGV4Y2VwdGlvbnMsIGFuZCBldmVuIGJh
c2ljIGV4ZWN1dGlvbiBzZW1hbnRpY3MuCiAgICAgQ29kZU9yaWdpbiBzZW1hbnRpYzsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNiArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAg
XAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhab21i
aWVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRXhpdE9LLCBOb2RlTXVzdEdl
bmVyYXRlKSAvKiBJbmRpY2F0ZXMgdGhhdCBleGl0IHN0YXRlIGlzIGludGFjdC4gKi8gXAogICAg
IG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVjaywgTm9k
ZU11c3RHZW5lcmF0ZSkgLyogVXNlZCBpZiB3ZSB3YW50IGp1c3QgYSB0eXBlIGNoZWNrIGJ1dCBu
b3QgbGl2ZW5lc3MuIE5vbi1jaGVja2luZyB1c2VzIHdpbGwgYmUgcmVtb3ZlZC4gKi9cCiAgICAg
bWFjcm8oVXBzaWxvbiwgMCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5LDkgQEAgcHVibGlj
OgogICAgICAgICAvLyBleGVjdXRpb25Db3VudCB0byB1c2UgYmVzdCBqdWRnZW1lbnQgLSBidXQg
dGhhdCBzZWVtcyB1bm5lY2Vzc2FyeSBzaW5jZSB3ZSBrbm93IGZvcgogICAgICAgICAvLyBzdXJl
IHdoYXQgdGhlIGV4ZWN1dGlvbkNvdW50IHNob3VsZCBiZSBpbiB0aGlzIGNhc2UuCiAgICAgICAg
IEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIDEpOwotICAgICAg
ICBOb2RlT3JpZ2luIG9yaWdpbiA9IHRhcmdldC0+YXQoMCktPm9yaWdpbjsKKworICAgICAgICAv
LyBXZSdkIHJlYWxseSBsaWtlIHRvIHVzZSBhbiB1bnNldCBvcmlnaW4sIGJ1dCBUaHJlYWRlZENQ
UyB3b24ndCBhbGxvdyB0aGF0LgorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IE5vZGVPcmln
aW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZmFsc2UpOwogICAgICAgICAKICAgICAg
ICAgVmVjdG9yPE5vZGUqPiBsb2NhbHMoYmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKTsK
ICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251bUNhbGxl
ZVJlZ2lzdGVyczsgKytsb2NhbCkgewpAQCAtMTA2LDYgKzEwOCwxMCBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIAorICAgICAgICAv
LyBOb3cgdXNlIHRoZSBvcmlnaW4gb2YgdGhlIHRhcmdldCwgc2luY2UgaXQncyBub3QgT0sgdG8g
ZXhpdCwgYW5kIHdlIHdpbGwgcHJvYmFibHkgaG9pc3QKKyAgICAgICAgLy8gdHlwZSBjaGVja3Mg
dG8gaGVyZS4KKyAgICAgICAgb3JpZ2luID0gdGFyZ2V0LT5hdCgwKS0+b3JpZ2luOworICAgICAg
ICAKICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJhc2VsaW5lLT5u
dW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGUqIG9sZE5vZGUg
PSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CiAgICAgICAgICAg
ICBpZiAoIW9sZE5vZGUpIHsKQEAgLTExNyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAgICAgICAgICAg
ICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7CiAgICAgICAgIH0KLSAgICAg
ICAgCisKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5tX251
bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewogICAgICAgICAgICAgTm9kZSogcHJldmlvdXNI
ZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwogICAgICAgICAgICAg
aWYgKCFwcmV2aW91c0hlYWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBAQAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUlu
ZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQotICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0
LT5tX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBqaXQtPm1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlKQorICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JFeGl0LCBqaXQt
Pm1fb3JpZ2luLnNlbWFudGljKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2Up
CiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNoYWJsZUNv
ZGVPZmZzZXQoMCkKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQogICAgICwg
bV9zdHJlYW1JbmRleChzdHJlYW1JbmRleCkKIHsKLSAgICBBU1NFUlQobV9jb2RlT3JpZ2luLmlz
U2V0KCkpOworICAgIERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQtPm1fY3VycmVu
dE5vZGUsIGppdC0+bV9vcmlnaW4uZXhpdE9LKTsKIH0KIAogdm9pZCBPU1JFeGl0OjpzZXRQYXRj
aGFibGVDb2RlT2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGNoZWNrKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNpb24g
MTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9j
YXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzgsNyArMTY3OCw4IEBAIHByaXZhdGU6
CiAKICAgICAgICAgICAgICAgICBOb2RlKiBpZGVudGlmaWVyID0gaW5kZXhUb05vZGVbdmFyaWFi
bGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgIG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0aW9u
LmFkZChpZGVudGlmaWVyLCBwaGlEZWYtPnZhbHVlKCkpOwotICAgICAgICAgICAgICAgIGluc2Vy
dE9TUkhpbnRzRm9yVXBkYXRlKDAsIE5vZGVPcmlnaW4oKSwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSwgaWRlbnRpZmllciwgcGhpRGVmLT52YWx1ZSgpKTsKKyAgICAgICAg
ICAgICAgICBib29sIGNhbkV4aXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpbnNlcnRPU1JI
aW50c0ZvclVwZGF0ZSgwLCBOb2RlT3JpZ2luKCksIGNhbkV4aXQsIGF2YWlsYWJpbGl0eUNhbGN1
bGF0b3IubV9hdmFpbGFiaWxpdHksIGlkZW50aWZpZXIsIHBoaURlZi0+dmFsdWUoKSk7CiAgICAg
ICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CkBAIC0xNjg4LDYgKzE2ODks
NyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7
IG5vZGVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgICAgIGJv
b2wgY2FuRXhpdCA9IHRydWU7CiAgICAgICAgICAgICAgICAgZm9yIChQcm9tb3RlZEhlYXBMb2Nh
dGlvbiBsb2NhdGlvbiA6IG1fbG9jYXRpb25zRm9yQWxsb2NhdGlvbi5nZXQobm9kZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uLmtpbmQoKSAhPSBOYW1lZFByb3BlcnR5UExv
YykKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTY5NywxMSArMTY5OSwx
MyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5j
b250YWlucyhub2RlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCArIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBoLCBub2Rl
LT5vcmlnaW4sIG1fYm90dG9tKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRp
b24uY3JlYXRlSGludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
bm9kZS0+b3JpZ2luLndpdGhJbnZhbGlkRXhpdCgpLCBtX2JvdHRvbSkpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZm9yIChOb2Rl
KiBtYXRlcmlhbGl6YXRpb24gOiBtX21hdGVyaWFsaXphdGlvblNpdGVUb01hdGVyaWFsaXphdGlv
bnMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsaXphdGlvbi0+b3Jp
Z2luLmV4aXRPSyAmPSBzdGQ6OmV4Y2hhbmdlKGNhbkV4aXQsIGZhbHNlKTsKICAgICAgICAgICAg
ICAgICAgICAgTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0aW9uVG9Fc2NhcGVlLmdldCht
YXRlcmlhbGl6YXRpb24pOwogICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZU1hdGVyaWFsaXph
dGlvbihibG9jaywgbWF0ZXJpYWxpemF0aW9uLCBlc2NhcGVlKTsKICAgICAgICAgICAgICAgICAg
ICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6YXRpb24uc2V0KGVzY2FwZWUsIG1hdGVyaWFsaXphdGlv
bik7CkBAIC0xNzExLDcgKzE3MTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAog
ICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBtX21h
dGVyaWFsaXphdGlvblNpdGVUb1JlY292ZXJpZXMuZ2V0KG5vZGUpKQotICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUluZGV4LCBjcmVhdGVSZWNvdmVyeShibG9j
aywgbG9jYXRpb24sIG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0KG5vZGVJbmRleCwgY3JlYXRlUmVjb3ZlcnkoYmxvY2ssIGxvY2F0aW9uLCBub2RlLCBj
YW5FeGl0KSk7CiAKICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHB1dCB0aGUgT1NSIGhp
bnRzIGFmdGVyIHRoZSByZWNvdmVyaWVzLAogICAgICAgICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ug
b25seSB3YW50IHRoZSBoaW50cyBvbmNlIHRoZSBvYmplY3QgaXMKQEAgLTE3MTksMTAgKzE3MjMs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1hdGVyaWFsaXphdGlv
biA6IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxpemF0aW9ucy5nZXQobm9kZSkpIHsK
ICAgICAgICAgICAgICAgICAgICAgTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJpYWxpemF0aW9uVG9F
c2NhcGVlLmdldChtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmln
aW4sIGNhbkV4aXQsCiAgICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHlDYWxjdWxh
dG9yLm1fYXZhaWxhYmlsaXR5LCBlc2NhcGVlLCBtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICAg
ICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uZXhpdE9LICYmICFj
YW5FeGl0KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGluZGljYXRlIHRoYXQgdGhlIGV4
aXQgc3RhdGUgaXMgZmluZSBub3cuIEl0IGlzIE9LIGJlY2F1c2Ugd2UgdXBkYXRlZCB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgYWJvdmUuIFdlIG5lZWQgdG8gaW5kaWNhdGUgdGhp
cyBtYW51YWxseSBiZWNhdXNlIHRoZSB2YWxpZGF0aW9uIGRvZXNuJ3QKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gaW5mZXIgdGhhdCB0aGUgZXhpdCBz
dGF0ZSBpcyBmaW5lLgorICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEV4aXRPSywgbm9kZS0+b3JpZ2luKTsKKyAgICAgICAg
ICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAobV9zaW5rQ2FuZGlkYXRlcy5jb250YWlu
cyhub2RlKSkKICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6YXRpb24u
c2V0KG5vZGUsIG5vZGUpOwogCkBAIC0xNzUwLDggKzE3NjEsMTAgQEAgcHJpdmF0ZToKIAogICAg
ICAgICAgICAgICAgICAgICAgICAgZG9Mb3dlciA9IHRydWU7CiAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXggKyAxLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2lu
LCBub2RlVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi53aXRoSW52YWxpZEV4aXQo
KSwgbm9kZVZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAg
ICAgIFsmXSAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24pIC0+IE5vZGUqIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGJsb2NrLCBsb2NhdGlvbik7CkBAIC0x
ODcxLDcgKzE4ODQsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gZGVmLT52YWx1ZSgpOwog
ICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUodW5zaWduZWQgbm9kZUlu
ZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgQXZhaWxhYmlsaXR5TWFwJiBhdmFpbGFiaWxpdHksIE5v
ZGUqIGVzY2FwZWUsIE5vZGUqIG1hdGVyaWFsaXphdGlvbikKKyAgICB2b2lkIGluc2VydE9TUkhp
bnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIGJvb2wm
IGNhbkV4aXQsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2RlKiBlc2NhcGVlLCBO
b2RlKiBtYXRlcmlhbGl6YXRpb24pCiAgICAgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGZvbGxv
dygpIHRoZSB2YWx1ZSBpbiB0aGUgaGVhcC4KICAgICAgICAgLy8gQ29uc2lkZXIgdGhlIGZvbGxv
d2luZyBncmFwaDoKQEAgLTE5MDUsNyArMTkxOCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKLSAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIGVudHJ5LmtleS5jcmVhdGVIaW50KG1fZ3JhcGgsIG9yaWdp
biwgbWF0ZXJpYWxpemF0aW9uKSk7CisgICAgICAgICAgICAgICAgbm9kZUluZGV4LAorICAgICAg
ICAgICAgICAgIGVudHJ5LmtleS5jcmVhdGVIaW50KG1fZ3JhcGgsIG9yaWdpbi50YWtlVmFsaWRF
eGl0KGNhbkV4aXQpLCBtYXRlcmlhbGl6YXRpb24pKTsKICAgICAgICAgfQogCiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5zaXplKCk7IGktLTspIHsKQEAg
LTE5MTYsNyArMTkzMCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIGludCBvcGVyYW5kID0g
YXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRleChpKTsKICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8ob3BlcmFuZCksCisgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhp
dCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPmRl
ZmF1bHRFZGdlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtMjA0Miw3ICsyMDU2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIE5vZGUqIGNyZWF0ZVJlY292ZXJ5KEJhc2lj
QmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogd2hlcmUp
CisgICAgTm9kZSogY3JlYXRlUmVjb3ZlcnkoQmFzaWNCbG9jayogYmxvY2ssIFByb21vdGVkSGVh
cExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB3aGVyZSwgYm9vbCYgY2FuRXhpdCkKICAgICB7CiAg
ICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiUmVjb3ZlcmluZyAiLCBs
b2NhdGlvbiwgIiBhdCAiLCB3aGVyZSwgIlxuIik7CkBAIC0yMDUwLDEyICsyMDY0LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXRNYXRlcmlhbGl6YXRpb24oYmxvY2ssIGxv
Y2F0aW9uLmJhc2UoKSk7CiAgICAgICAgIE5vZGUqIHZhbHVlID0gcmVzb2x2ZShibG9jaywgbG9j
YXRpb24pOwogCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gd2hlcmUtPm9yaWdpbi53aXRo
U2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKTsKKwogICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2coIkJhc2UgaXMgIiwgYmFzZSwgIiBhbmQgdmFsdWUgaXMgIiwg
dmFsdWUsICJcbiIpOwogCiAgICAgICAgIGlmIChiYXNlLT5pc1BoYW50b21BbGxvY2F0aW9uKCkp
IHsKICAgICAgICAgICAgIHJldHVybiBQcm9tb3RlZEhlYXBMb2NhdGlvbihiYXNlLCBsb2NhdGlv
bi5kZXNjcmlwdG9yKCkpLmNyZWF0ZUhpbnQoCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgd2hl
cmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKSwgdmFsdWUpOwor
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCB2
YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLmtpbmQoKSkgewpA
QCAtMjA4OSw3ICsyMTA1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm4gbV9n
cmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgICAgICBTcGVjTm9uZSwKICAgICAgICAgICAg
ICAgICAgICAgUHV0QnlPZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgIHdoZXJlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksCiAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
c3RvcmFnZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAgICAgICAgICAgRWRnZShiYXNlLCBL
bm93bkNlbGxVc2UpLApAQCAtMjExOCw3ICsyMTM0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICAgICAgU3BlY05vbmUsCiAgICAg
ICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldCwKLSAgICAgICAgICAgICAgICB3aGVyZS0+b3Jp
Z2luLndpdGhTZW1hbnRpYyhiYXNlLT5vcmlnaW4uc2VtYW50aWMpLAorICAgICAgICAgICAgICAg
IG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAgICAgICAgICAgICAgIE9wSW5mbyhk
YXRhKSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2UsIEtub3duQ2VsbFVzZSksCiAgICAgICAg
ICAgICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpAQCAtMjEyOSw3ICsyMTQ1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAgICAg
ICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgUHV0Q2xvc3VyZVZhciwKLSAgICAgICAgICAg
ICAgICB3aGVyZS0+b3JpZ2luLndpdGhTZW1hbnRpYyhiYXNlLT5vcmlnaW4uc2VtYW50aWMpLAor
ICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAgICAgICAg
ICAgICAgIE9wSW5mbyhsb2NhdGlvbi5pbmZvKCkpLAogICAgICAgICAgICAgICAgIEVkZ2UoYmFz
ZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAgICAgICB2YWx1ZS0+ZGVmYXVsdEVkZ2UoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEyMyw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBu
b2RlKSkgeworICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkgIT0gRG9lc05v
dEV4aXQpIHsKICAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOwogICAgICAgICAg
ICAgICAgIGxhc3RFeGl0aW5nSW5kZXggPSBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CkBAIC0x
NjAsMTAgKzE2MCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZl
IGV4YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3IHVzZSBtZWFucyB0aGF0IHdlIGhh
dmUgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVtZW50IHRoZSByZWYgY291bnQuCiAg
ICAgICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3RmaXhSZWYoKTsKKworICAgICAgICAg
ICAgICAgICAgICBOb2RlKiBsYXN0RXhpdGluZ05vZGUgPSBibG9jay0+YXQobGFzdEV4aXRpbmdJ
bmRleCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4aXRpbmdJ
bmRleCArIDEsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAgICAgICAgICAgICAgICAgICAgYmxv
Y2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLT5vcmlnaW4sIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdl
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4aXRpbmdOb2RlLT5vcmlnaW4uZm9y
SW5zZXJ0aW5nQWZ0ZXIobV9ncmFwaCwgbGFzdEV4aXRpbmdOb2RlKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICAgICAgfSk7CiAg
ICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24g
MTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2OCw2ICs2NjgsNyBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIENvbnN0YW50U3RvcmFnZVBvaW50ZXI6CiAgICAgICAgIGNhc2UgTW92
SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKICAg
ICAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJz
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsy
NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxs
U3RhY2ssIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2Rl
LT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
b3JpZ2luLmV4aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAKQEAgLTM0Niw3ICszNDcsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBT
U0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7
CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3Zh
cmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAg
ICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAg
ICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW4gdW5jaGVja2VkIHVzZSBraW5kIGJl
Y2F1c2UgdGhlIFNldExvY2FsIHdhcyB0dXJuZWQgaW50byBhIENoZWNrLgorICAgICAgICAgICAg
ICAgICAgICAvLyBXZSBoYXZlIHRvIHVzZSBhbiB1bmNoZWNrZWQgdXNlIGJlY2F1c2UgYXQgbGVh
c3Qgc29tZXRpbWVzLCB0aGUgZW5kIG9mIHRoZSBibG9jaworICAgICAgICAgICAgICAgICAgICAv
LyBpcyBub3QgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1
bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxv
bk9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhl
Y3V0ZS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldFN0YWNrOgog
ICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6
CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5Miw2ICsx
ODkyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAg
ICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgRXhp
dE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODg4
ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTcxLDYgKzE5NzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAor
ICAgIGNhc2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNo
IChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBj
YXNlIEZsdXNoZWREb3VibGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsNyArNjEsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsCiAg
ICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUpCiAgICAgLCBtX3N0cmVh
bSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKICAgICAsIG1fbWluaWZpZWRH
cmFwaCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCi0gICAgLCBtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzKGZhbHNlKQogewogfQogCkBAIC0xOTYsNyArMTk1LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkK
ICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8
IG1fY2FuRXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0T1NSRXhp
dEZ1enpDaGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFpbDsKQEAgLTIxMiw3ICsyMTAsNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVP
a2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMgfHwgbV9jYW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBmdXp6SnVtcCA9IGVtaXRP
U1JFeGl0RnV6ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlzU2V0KCkpIHsKICAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXBMaXN0IG15SnVtcHNUb0ZhaWw7CkBAIC0yMjgsNyArMjI1LDYgQEAg
T1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsKLSAg
ICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHVu
c2lnbmVkIGluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0LnNpemUoKTsKICAgICBtX2pp
dC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChP
U1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpAQCAtMjM3
LDE5ICsyMzMsMTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwog
CiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNl
KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVz
ZS5ub2RlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5k
LCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVT
b3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAgLTI1Nyw3ICsyNTAs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYg
KCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2lu
Z0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCByZWNvdmVyeUluZGV4
ID0gbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsK
ICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5qaXRDb2Rl
KCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFw
aCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFt
LT5zaXplKCksIHJlY292ZXJ5SW5kZXgpKTsKQEAgLTI2NSw3ICsyNTcsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNw
ZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBq
c1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwogfQog
CkBAIC0yNzMsNyArMjY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlv
blBvaQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVChtX2NhbkV4aXQpOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2pp
dC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9qaXQuaml0
Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVuY291bnRhYmxlSW52YWxp
ZGF0aW9uLCBKU1ZhbHVlU291cmNlKCksCkBAIC0yODYsNyArMjc2LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRU
eXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0
dXJuOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGUsIG1faml0
Lmp1bXAoKSk7CkBAIC0yOTcsNyArMjg2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWlu
YXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgRWRnZSBu
b2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2Fu
RXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJl
Z3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQ2Nyw5ICsxNDU1LDggQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIHZhcmlhYmxl
LT5tYWNoaW5lTG9jYWwoKSwKICAgICAgICAgICAgICAgICBmb3JtYXQpKTsKICAgICB9Ci0gICAg
Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oKTsKLSAgICBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oKTsKKworICAgIG1fb3JpZ2luID0g
Tm9kZU9yaWdpbigpOwogICAgIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4
SW5CbG9jayA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBt
X2N1cnJlbnROb2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2spOwpAQCAtMTQ4MSwxNSAr
MTQ2OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVE
KQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gdHJ1ZTsgLy8gRXNzZW50aWFsbHkgZGlzYWJsZSB0
aGUgYXNzZXJ0aW9ucy4KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gbWF5
RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgCiAgICAgICAgIG1f
aW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZSht
X2N1cnJlbnROb2RlKTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IG1fY3Vy
cmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0OwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJv
ZmlsZSA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgbV9vcmlnaW4g
PSBtX2N1cnJlbnROb2RlLT5vcmlnaW47CisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgp
KQorICAgICAgICAgICAgbV9vcmlnaW4uZXhpdE9LICY9IG1heUV4aXQobV9qaXQuZ3JhcGgoKSwg
bV9jdXJyZW50Tm9kZSkgPT0gRXhpdHM7CiAgICAgICAgIG1fbGFzdEdlbmVyYXRlZE5vZGUgPSBt
X2N1cnJlbnROb2RlLT5vcCgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY3VycmVudE5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOwpAQCAtMTUzNiw5ICsxNTE5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cmd1bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotICAgIG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgPSB0cnVlOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJn
ZXQgPSBDb2RlT3JpZ2luKDApOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29k
ZU9yaWdpbigwKTsKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29k
ZU9yaWdpbigwKSwgdHJ1ZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVC
bG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9q
aXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKQEAgLTE2MDEsNyArMTU4Miw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgfQogI2VuZGlmCiAgICAg
fQotICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsKKworICAgIG1fb3JpZ2lu
ID0gTm9kZU9yaWdpbigpOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJl
dmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1OCw3ICsyNDU4LDYgQEAgcHVibGljOgogICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBOb2Rl
VHlwZSBtX2xhc3RHZW5lcmF0ZWROb2RlOwotICAgIGJvb2wgbV9jYW5FeGl0OwogICAgIHVuc2ln
bmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2FsIHJlZ2lzdGVy
IG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0aW9uSW5mbzsK
QEAgLTI0NzksOCArMjQ3OCw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIFZlY3RvcjxCcmFuY2hS
ZWNvcmQsIDg+IG1fYnJhbmNoZXM7CiAKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4
aXRUYXJnZXQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKyAg
ICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlIG1f
c3RhdGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9p
bnRlcnByZXRlcjsKQEAgLTI0ODgsOCArMjQ4Niw2IEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZUV2
ZW50U3RyZWFtKiBtX3N0cmVhbTsKICAgICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVkR3JhcGg7
CiAgICAgCi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzOwotICAgIAogICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+LCA4PiBtX3Nsb3dQYXRoR2Vu
ZXJhdG9yczsKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbj4gbV9wbGFuczsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxMCw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2Fz
ZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhl
biBydW4gdGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllciht
X25vZGVJbmRleCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAg
ICBpbnNlcnRCYXJyaWVyV2l0aEludmFsaWRFeGl0KG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25v
ZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgbV9u
b2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKQEAgLTQ3NCwxMCArNDc0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEluc2VydGlu
ZyBiYXJyaWVyLlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgsIGJhc2Uu
bm9kZSgpKTsKKyAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFzZSk7CiAgICAg
fQotICAgIAotICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUq
IGJhc2UpCisKKyAgICB2b2lkIGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4aXQodW5zaWduZWQg
bm9kZUluZGV4LCBFZGdlIGJhc2UpCisgICAgeworICAgICAgICBpbnNlcnRCYXJyaWVyKG5vZGVJ
bmRleCwgYmFzZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNp
Z25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVlKQogICAgIHsKICAg
ICAgICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0
aGUgYmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KICAgICAgICAgaWYgKCFyZWFsbHlJ
bnNlcnRCYXJyaWVycygpKQpAQCAtNDg1LDggKzQ5MCwxOCBAQCBwcml2YXRlOgogICAgICAgICAK
ICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRV
c2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNvb2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBu
b3cgd2UgZG9uJ3QgbmVlZCBpdC4KKworICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3
YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBub3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUg
aW4gYSBjb250ZXh0CisgICAgICAgIC8vIHdoZXJlIGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElm
IHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEgYmFycmllciBhdCBhbiBFeGl0SW52YWxpZAor
ICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJhcnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4g
d2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9pc3RpbmcgdGhlIGNoZWNrLgorICAgICAgICAv
LyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5vdy4KKyAgICAgICAgaWYgKGJhc2UudXNlS2lu
ZCgpICE9IEtub3duQ2VsbFVzZSkgeworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICBiYXNlLnNldFVzZUtp
bmQoQ2VsbFVzZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJp
ZXIsIG1fbm9kZS0+b3JpZ2luLCBFZGdlKGJhc2UsIENlbGxVc2UpKTsKKyAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChleGl0T0spLCBiYXNlKTsKIAogICAgICAgICBiYXNlLT5zZXRFcG9jaChtX2N1cnJlbnRF
cG9jaCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAg
IGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB1bnNp
Z25lZCBpbmRleEZvckNoZWNrcyA9IFVJTlRfTUFYOworICAgICAgICAgICAgTm9kZU9yaWdpbiBv
cmlnaW5Gb3JDaGVja3M7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9
IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uZXhpdE9LKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJbkJsb2NrOworICAgICAg
ICAgICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3MgPSBub2RlLT5vcmlnaW47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWwg
bm90IHRvIHVzZSAnbm9kZScgYWZ0ZXIgYXBwZW5kaW5nIHRvIHRoZSBncmFwaC4gSW4gdGhvc2Ug
c3dpdGNoCiAgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhcHBlbmQs
IHdlIGZpcnN0IGNhcmVmdWxseSBleHRyYWN0IGV2ZXJ5dGhpbmcgd2UgbmVlZAogICAgICAgICAg
ICAgICAgIC8vIGZyb20gdGhlIG5vZGUsIGJlZm9yZSBkb2luZyBhbnkgYXBwZW5kaW5nLgpAQCAt
MTcwLDEzICsxNzgsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTm9uZSwgQ2hl
Y2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tz
LndpdGhTZW1hbnRpYyhvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVy
ZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2Vs
bFVzZSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZXItPnZhbHVlLm1fYXJy
YXlNb2RlSXNWYWxpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnZh
bHVlLm1fYXJyYXlNb2RlSG9pc3RpbmdPa2F5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJyYXksIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNrQXJyYXksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1hbnRpYyhvcmlnaW4u
c2VtYW50aWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhpdGVyLT52YWx1
ZS5tX2FycmF5TW9kZS5hc1dvcmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRn
ZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9u
IDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhp
dFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTg1LDEzICsxODYsMzAgQEAgcHVi
bGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pc1NldCgpID09IG5vZGUtPm9yaWdpbi5mb3JFeGl0
LmlzU2V0KCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW1heUV4aXQobV9n
cmFwaCwgbm9kZSkgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoKG5vZGUpLCAhKCFub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpICYm
IG5vZGUtPm9yaWdpbi5leGl0T0spKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
ICEobWF5RXhpdChtX2dyYXBoLCBub2RlKSA9PSBFeGl0cyAmJiAhbm9kZS0+b3JpZ2luLmV4aXRP
SykpOworCisgICAgICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9k
ZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgcHJldmlvdXNOb2RlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgfHwgIW5vZGUtPm9yaWdpbi5leGl0T0sKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAgICAgICAg
ICAgICB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JF
eGl0KTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAg
ICAgICAobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAhKCFwcmV2aW91c05vZGUtPm9y
aWdpbi5leGl0T0sgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBu
b2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVkFMSURB
VEUoKG5vZGUpLCAhbm9kZS0+aGFzU3RydWN0dXJlKCkgfHwgISFub2RlLT5zdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQo
KSB8fCBub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpLmlzQ2VsbCgpKTsKICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNDZWxsT3BlcmFuZCgpIHx8ICEhbm9kZS0+
Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJn
cykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmNoaWxkMygpKTsKQEAgLTIx
MCwxMCArMjI4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2Rl
LT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBVbnR5cGVk
VXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVXNl
OgorICAgICAgICAgICAgICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91Ymxl
UmVwVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSgobm9kZSksICEiQmFkIHVzZSBraW5kIik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21w
aWxlKE5vZGUqIAogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNh
c2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIFBoYW50b206CiAgICAg
Y2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF2YWls
YWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICBBdmFp
bGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1
bWVudChpKSkpOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQg
PSBDb2RlT3JpZ2luKDApOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENv
ZGVPcmlnaW4oMCk7CiAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fb3JpZ2lu
ID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykg
ewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CiAgICAg
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3Vt
ZW50KGkpOwpAQCAtMzkzLDggKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAg
ICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9ub2RlLT5vcmlnaW4uZm9yRXhpdDsK
KyAgICAgICAgbV9vcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGlm
ICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dl
cmluZyAiLCBtX25vZGUsICJcbiIpOwpAQCAtODQxLDYgKzgzOSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBa
b21iaWVIaW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3
T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQ
aGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTg3OCwxNSArODc3LDE4IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX291dC5zZXQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5h
dGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAg
ICAgY2FzZSBLbm93bkludDMyVXNlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dJbnQ1MihtX25v
ZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAg
ICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2Fz
ZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBtX291dC5zZXQobG93Q2VsbChtX25vZGUtPmNo
aWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
VW50eXBlZFVzZToKQEAgLTQ3NTIsMTAgKzQ3NTQsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9n
KCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxp
dHlNYXAoKSwgIlxuIik7CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1f
b3JpZ2luLmV4aXRPSyk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9z
ckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlv
biwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCi0g
ICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSwKKyAgICAgICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGlj
LAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVu
dHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9j
YWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9T
UkV4aXRDb21waWxhdGlvbkluZm8oKSk7CkBAIC04MDkzLDYgKzgwOTcsOCBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3RE
dW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CisKKyAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7CiAgICAgICAgIAog
ICAgICAgICBpZiAoZG9PU1JFeGl0RnV6emluZygpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbnVt
YmVyT2ZGdXp6Q2hlY2tzID0gbV9vdXQuYWRkKApAQCAtODExNyw3ICs4MTIzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIG1f
Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAg
ICAgICAgICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAg
ICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAg
ICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0
aW9uSW5mbygpKTsKQEAgLTg2MTIsOSArODYxOCw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9j
ayogbV9oaWdoQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExC
YXNpY0Jsb2NrIG1fbmV4dExvd0Jsb2NrOwotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3Jp
Z2luRm9yRXhpdFRhcmdldDsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlOworCisgICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRl
eDsKICAgICBOb2RlKiBtX25vZGU7CiAgICAgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24g
MTg4ODg2KQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5
LDggKzU5LDEwIEBAIHZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYKICAg
ICAgICAgcmV0dXJuOwogICAgIHRhcmdldC5ncm93KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25z
LnNpemUoKSk7CiAgICAgc2l6ZV90IGxhc3RJbmRleCA9IHRhcmdldC5zaXplKCk7CisgICAgc2l6
ZV90IG9yaWdpbmFsVGFyZ2V0U2l6ZSA9IHRhcmdldC5zaXplKCk7CiAgICAgZm9yIChzaXplX3Qg
aW5kZXhJbkluc2VydGlvbnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMt
LTspIHsKICAgICAgICAgQVNTRVJUKCFpbmRleEluSW5zZXJ0aW9ucyB8fCBpbnNlcnRpb25zW2lu
ZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpID49IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnMg
LSAxXS5pbmRleCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvcmlnaW5hbFRhcmdldFNpemUs
IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgPCBvcmlnaW5hbFRhcmdldFNp
emUpOwogICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2Vy
dGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAgICAgICAgc2l6ZV90IGluZGV4
T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAgICBmb3IgKHNpemVfdCBpID0g
bGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259892</attachid>
            <date>2015-08-25 15:40:55 -0700</date>
            <delta_ts>2015-08-25 16:49:54 -0700</delta_ts>
            <desc>might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>97971</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBE
RkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAg
Ki87IH07CisJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjND
MUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovOyB9Owor
CQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBv
c3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM0Niw2ICszNDgsNyBAQAogCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29w
eVRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QTYyODMxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3Bw
ICovOyB9OwogCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyogREZH
Tm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87IH07
CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAv
KiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAw
NDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMjEwOCw2ICsyMTExLDggQEAKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0JEMUI2MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9
IGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
ZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zl
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTksNiArMjE2NCw3IEBACiAJ
CTBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29weVRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuY3BwOyBwYXRoID0g
ZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVB
NjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQz
QjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdOb2RlT3JpZ2luLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJ
VFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAz
RTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MTE5LDYgKzUxMjUsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyaXplLmggKi8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJTZXQuY3BwICovLAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyU2V0LmggKi8sCisJCQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIg
LyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4
QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcy
MDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLywKQEAgLTUyNDAsNiArNTI0OCw3IEBACiAJCQkJ
MEZCNEI1MUYxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGVBbGxvY2F0b3IuaCAqLywKIAkJCQkw
RkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1
ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCisJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLApAQCAtNjE0OCw2
ICs2MTU3LDcgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
M0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MzgxLDYgKzczOTEsNyBAQAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1
Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAy
MEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5
MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJz
dHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJG
RCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3
NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0
LDYgKzc1NDUsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklU
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyog
RXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVEMDg1RDFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5
MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5NzhCM0IxQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkUwNTAyNTFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBw
YXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5v
bi1UT1AgcGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5
bG9hZC4KIC8vIC0gSGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRl
U3RhdGUgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBUT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55
IG90aGVyIGtpbmQgd2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9m
IHRoZSBzYW1lIGtpbmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTAsNiArMjQ1
MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwV2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsMTYgKzQ4NCwyMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gdmFyYXJnc0RhdGEtPm9mZnNldCA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3Mg
Y2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudCA9IGlu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IHZhcmFyZ3NEYXRhLT5vZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJn
c0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50KSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNr
LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEt
PmNvdW50LCBGbHVzaGVkSW50MzIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdl
KGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZShhcmd1bWVudENvdW50LCBLbm93bkludDMyVXNlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIG5vdCBpbmNs
dWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCkBA
IC01MTQsNyArNTE5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBH
ZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBpZgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRv
cnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbApAQCAtNTI1LDcgKzUzMSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5kZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2lu
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLCBqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC01MzcsMTQgKzU0MywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNo
ZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2lu
LCBPcEluZm8ocmVnLm9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVk
Z2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0
aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVk
ZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTM2Miw2ICszNjMsOSBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3Bl
cmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKIAorICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1v
cmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCisgICAgICAgIG1fZXhp
dE9LID0gZmFsc2U7CisKICAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQoY3VycmVudENv
ZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgaWYgKHNldE1v
ZGUgPT0gTm9ybWFsU2V0KSB7CkBAIC0zNzQsOCArMzc4LDE0IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQorICAgICAgICAvLyBX
ZSBwbGF5IGhhY2tzIHdpdGggbV9leGl0T0sgaGVyZS4gV2Uga25vdyB0aGF0IHRoZSBTZXRMb2Nh
bHMgd2UgYXJlIGVtaXR0aW5nIGFyZSBhbHJlYWR5CisgICAgICAgIC8vIHJlY29yZGVkIGluIE9T
UiBleGl0IHN0YXRlLCBzbyB0aGV5IGFyZW4ndCByZWFsIGVmZmVjdHMuIFNvLCB3ZSBkb24ndCB3
YW50IHRoZW0gdG8gaGF2ZSBhbnkKKyAgICAgICAgLy8gZWZmZWN0IG9uIG1fZXhpdE9LLgorICAg
ICAgICBib29sIGV4aXRPS0JlZm9yZSA9IG1fZXhpdE9LOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBt
X3NldExvY2FsUXVldWVbaV0uZXhlY3V0ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fZXhpdE9LID0g
ZXhpdE9LQmVmb3JlOworICAgICAgICB9CiAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5yZXNpemUo
MCk7CiAgICAgfQogCkBAIC02NTEsMTUgKzY2MSwxNyBAQCBwcml2YXRlOgogCiAgICAgTm9kZU9y
aWdpbiBjdXJyZW50Tm9kZU9yaWdpbigpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHNldCB0aGUgZm9yRXhpdCBvcmlnaW4gb25seSBvbiB0aG9zZSBub2RlcyB0aGF0IGNhbiBl
eGl0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ1MjA0CiAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWM7CisgICAgICAgIENvZGVPcmlnaW4g
Zm9yRXhpdDsKKwogICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWNPcmlnaW4uaXNTZXQoKSkK
ICAgICAgICAgICAgIHNlbWFudGljID0gbV9jdXJyZW50U2VtYW50aWNPcmlnaW47CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHNlbWFudGljID0gY3VycmVudENvZGVPcmlnaW4oKTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiBOb2RlT3JpZ2luKHNlbWFudGljLCBjdXJyZW50Q29kZU9yaWdp
bigpLCB0cnVlKTsKKworICAgICAgICBmb3JFeGl0ID0gY3VycmVudENvZGVPcmlnaW4oKTsKKwor
ICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRpYywgZm9yRXhpdCwgbV9leGl0T0spOwog
ICAgIH0KICAgICAKICAgICBCcmFuY2hEYXRhKiBicmFuY2hEYXRhKHVuc2lnbmVkIHRha2VuLCB1
bnNpZ25lZCBub3RUYWtlbikKQEAgLTY3Nyw2ICs2ODksMTggQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgYXBwZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUt
Pm9wKCkpLCAiXG4iKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChub2RlKTsKKyAg
ICAgICAgY2xvYmJlcml6ZSgKKyAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVy
aXplKCksCisgICAgICAgICAgICBbJl0gKGNvbnN0IEFic3RyYWN0SGVhcCYgaGVhcCkgeworICAg
ICAgICAgICAgICAgIC8vIFdyaXRlcyB0byBTaWRlU3RhdGUgYXJlIG5vdCBvYnNlcnZhYmxlLgor
ICAgICAgICAgICAgICAgIGlmIChoZWFwLmlzU3VidHlwZU9mKFNpZGVTdGF0ZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSBhbGwg
b3RoZXIgd3JpdGVzIGFyZSBvYnNlcnZhYmxlLCBhbmQgc28gaWYgd2UgdHJpZWQgdG8gZXhpdCBh
ZnRlciB0aGVtCisgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgc2FtZSBvcmlnaW4gdGhlbiB3
ZSdkIGNhdXNlIHRoYXQgZWZmZWN0IHRvIHJlcGVhdC4KKyAgICAgICAgICAgICAgICBtX2V4aXRP
SyA9IGZhbHNlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkp
OwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgCkBAIC05MDAsNiArOTI0LDggQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKICAgICAvLyBUaGUgc2VtYW50
aWMgb3JpZ2luIG9mIHRoZSBjdXJyZW50IG5vZGUgaWYgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJl
bnQgSW5kZXguCiAgICAgQ29kZU9yaWdpbiBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsKKyAgICAv
LyBUcnVlIGlmIGl0J3MgT0sgdG8gT1NSIGV4aXQgcmlnaHQgbm93LgorICAgIGJvb2wgbV9leGl0
T0sgeyBmYWxzZSB9OwogCiAgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnRVbmRlZmluZWQ7CiAg
ICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnROdWxsOwpAQCAtMTA1Myw2ICsxMDc5LDcgQEAgcHJp
dmF0ZToKIAogI2RlZmluZSBMQVNUX09QQ09ERShuYW1lKSBcCiAgICAgbV9jdXJyZW50SW5kZXgg
Kz0gT1BDT0RFX0xFTkdUSChuYW1lKTsgXAorICAgIG1fZXhpdE9LID0gZmFsc2U7IFwKICAgICBy
ZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQpAQCAtMTM1MSwxMSArMTM3OCwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxp
bmVDYWxsKE5vZGUqIGNhCiAgICAgfQogICAgIAogICAgIG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJs
ZURhdGEuYXBwZW5kKGlubGluZVZhcmlhYmxlRGF0YSk7CisKKyAgICAvLyBBdCB0aGlzIHBvaW50
LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICBh
ZGRUb0dyYXBoKEV4aXRPSyk7CiAgICAgCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKICAgICBjbGVh
ckNhY2hlcygpOyAvLyBSZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUg
b3V0ZXIgY29kZS4KICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1f
ZXhpdE9LID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVk
IHNvbWUgbmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAg
aWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RC
bG9jaygpKSB7CkBAIC0xNzI0LDYgKzE3NTYsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNhbGxlZSBp
cyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcsICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVS
ZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOworCisgICAgLy8gSXQn
cyBPSyB0byBleGl0IHJpZ2h0IG5vdywgZXZlbiB0aG91Z2ggd2Ugc2V0IHNvbWUgbG9jYWxzLiBU
aGF0J3MgYmVjYXVzZSB0aG9zZSBsb2NhbHMgYXJlIG5vdAorICAgIC8vIHVzZXItdmlzaWJsZS4K
KyAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgYWRkVG9HcmFwaChFeGl0T0spOwogICAgIAogICAg
IFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgZGF0
YS5raW5kID0gU3dpdGNoQ2VsbDsKQEAgLTE3ODEsNiArMTgxOCw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICB9CiAgICAgICAgIGRhdGEuY2FzZXMuYXBw
ZW5kKFN3aXRjaENhc2UobV9ncmFwaC5mcmVlemUodGhpbmdUb0Nhc2VPbiksIGJsb2NrLmdldCgp
KSk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKKyAgICAgICAgbV9leGl0
T0sgPSB0cnVlOwogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOyAvLyBUaGlzIG9ubHkg
Y29tZXMgaW50byBwbGF5IGZvciBpbnRyaW5zaWNzLCBzaW5jZSBub3JtYWwgaW5saW5lZCBjb2Rl
IHdpbGwgbGVhdmUgYW4gZW1wdHkgcXVldWUuCiAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCk7CiAg
ICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMTc5NSw2ICsxODMzLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IHNsb3dQYXRoQmxv
Y2sgPSBhZG9wdFJlZigKICAgICAgICAgbmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIG1fbnVtQXJn
dW1lbnRzLCBtX251bUxvY2FscywgUE5hTikpOwogICAgIG1fY3VycmVudEluZGV4ID0gb2xkT2Zm
c2V0OworICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICBkYXRhLmZhbGxUaHJvdWdoID0gQnJhbmNo
VGFyZ2V0KHNsb3dQYXRoQmxvY2suZ2V0KCkpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soc2xv
d1BhdGhCbG9jayk7CiAgICAgaWYgKHZlcmJvc2UpCkBAIC0xODE2LDYgKzE4NTUsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICB9CiAKICAgICBtX2N1cnJlbnRJ
bmRleCA9IG5leHRPZmZzZXQ7CisgICAgbV9leGl0T0sgPSB0cnVlOyAvLyBPcmlnaW4gY2hhbmdl
ZCwgc28gaXQncyBmaW5lIHRvIGV4aXQgYWdhaW4uCiAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUo
KTsKICAgICBhZGRUb0dyYXBoKEp1bXApOwogICAgIGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1fY3Vy
cmVudEJsb2NrKTsKQEAgLTE4MzMsNiArMTg3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKAogICAgICAgICBsYW5kaW5nQmxvY2tzW2ldLT50ZXJtaW5hbCgpLT50YXJn
ZXRCbG9jaygpID0gY29udGludWF0aW9uQmxvY2suZ2V0KCk7CiAgICAgCiAgICAgbV9jdXJyZW50
SW5kZXggPSBvbGRPZmZzZXQ7CisgICAgbV9leGl0T0sgPSB0cnVlOwogICAgIAogICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKGhhcmQpLlxuIik7CkBA
IC0yNzE0LDYgKzI3NTUsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgK
ICAgICAvLyAgICBzaG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisKKyAgICAvLyBX
ZSd2ZSBzZXQgc29tZSBsb2NhbHMsIGJ1dCB0aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdz
IHN0aWxsIE9LIHRvIGV4aXQgZnJvbSBoZXJlLgorICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICBh
ZGRUb0dyYXBoKEV4aXRPSyk7CiAgICAgCiAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgZGVzdGlu
YXRpb25PcGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2J5X2lkKSwKQEAgLTI4NjksNiArMjkxNCwxMCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0
ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwog
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVk
aWF0ZU5ha2VkU2V0KTsKKworICAgICAgICAvLyBXZSd2ZSBzZXQgc29tZSBsb2NhbHMsIGJ1dCB0
aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdzIHN0aWxsIE9LIHRvIGV4aXQgZnJvbSBoZXJl
LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsK
ICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGwsCkBAIC0yOTAxLDEy
ICsyOTUwLDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAgICBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2luID0gbV9j
dXJyZW50SW5kZXg7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJs
b2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwogICAgIC8v
IHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBh
cmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdlIHNl
dCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLmJsb2NrKDAp
ICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJl
c2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBTZXRBcmd1bWVu
dCBub2Rlcy4gVGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRvcCBvZiBhbiBvcF9l
bnRlciBzbworICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgorICAgICAgICBtX2V4aXRPSyA9IHRy
dWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC0yOTIyLDYgKzI5NzQsMTAgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIAogICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0aGF0IHdlIGNhbiBl
eGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIAog
ICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAgICAgICAgLy8gRG9u
J3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCkBAIC0yOTk4LDcgKzMwNTQsNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgICAg
ICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplKGNhY2hlZEZ1bmN0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhmcm96
ZW4pLCBjYWxsZWUpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9w
SW5mbyhmcm96ZW4pKSk7CiAKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGF0aWNf
Y2FzdDxKU0Z1bmN0aW9uKj4oY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIH0KQEAg
LTM0MjAsNiArMzQ3NSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIGlmICghY29tcGlsZWRBc0dldEJ5SWQpIHsKICAgICAgICAgICAgICAg
ICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogICAgICAgICAgICAgICAgIE5vZGUqIGdl
dEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIG1f
ZXhpdE9LID0gZmFsc2U7IC8vIEdldEJ5VmFsIG11c3QgYmUgdHJlYXRlZCBhcyBpZiBpdCBjbG9i
YmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVyaWMuCiAg
ICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgZ2V0QnlWYWwpOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChP
cHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKLSAgICAgICAgICAgICAgICB2YWxp
ZGF0ZShtX2dyYXBoKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICB9IHdo
aWxlIChpbm5lckNoYW5nZWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG91dGVyQ2hhbmdl
ZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDYgKzI3OCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKICAgICBj
YXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBLaWxsU3RhY2s6CiAg
ICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgUGhpOgpAQCAtMzk2LDYgKzM5Nyw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgLy8gVGhpcyBpcyBw
cmV0dHkgd2VpcmQuIEluIGZhY3QsIFN0ckNhdCBoYXMgdmVyeSBsaW1pdGVkIGVmZmVjdGZ1bG5l
c3MgYmVjYXVzZSB3ZSBvbmx5CiAgICAgICAgIC8vIHBhc3MgaXQgcHJpbWl0aXZlIHZhbHVlcy4g
QnV0LCByaWdodCBub3csIHRoZSBjb21waWxlciBpc24ndCBzbWFydCBlbm91Z2ggdG8ga25vdyB0
aGlzCiAgICAgICAgIC8vIGFuZCB0aGF0J3MgcHJvYmFibHkgT0suCisgICAgICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQzCiAgICAgICAg
IHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJzRXhpdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKK3sKKyAgICAvLyBUaGVyZSBhcmUgY2VydGFpbiBub2RlcyB3
aG9zZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0
IHRoZXkKKyAgICAvLyBub3JtYWxseSBjbG9iYmVyLgorICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBQdXRI
aW50OgorICAgIGNhc2UgS2lsbFN0YWNrOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNh
c2UgU2V0TG9jYWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMg
d3JpdGUgdG8gdGhlIHN0YWNrLCBidXQgdGhleSBtYXkgb25seSBkbyBzbyBhZnRlciB3ZSBoYXZl
IGFscmVhZHkgaGFkIGEgTW92SGludAorICAgICAgICAvLyBmb3IgdGhlIGV4YWN0IHNhbWUgdmFs
dWUgYW5kIHRoZSBzYW1lIHN0YWNrIGxvY2F0aW9uLiBIZW5jZSwgdGhleSBoYXZlIG5vIGZ1cnRo
ZXIgZWZmZWN0IG9uCisgICAgICAgIC8vIGV4aXQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICBjYXNlIEFycmF5aWZ5Ogor
ICAgIGNhc2UgTmV3T2JqZWN0OgorICAgIGNhc2UgTmV3UmVnZXhwOgorICAgIGNhc2UgTmV3U3Ry
aW5nT2JqZWN0OgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OgorICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgorICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZUFjdGl2YXRpb246CisgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRp
b246CisgICAgICAgIC8vIFRoZXNlIGRvIGNsb2JiZXIgbWVtb3J5LCBidXQgbm90aGluZyB0aGF0
IGlzIG9ic2VydmFibGUuIEl0IG1heSBiZSBuaWNlIHRvIHNlcGFyYXRlIHRoZQorICAgICAgICAv
LyBoZWFwcyBpbnRvIHRob3NlIHRoYXQgYXJlIG9ic2VydmFibGUgYW5kIHRob3NlIHRoYXQgYXJl
bid0LCBidXQgd2UgZG9uJ3QgZG8gdGhhdCByaWdodCBub3cuCisgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQwCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgLy8gTGlr
ZSBhYm92ZSwgYnV0IHdpdGggdGhlIGFjdGl2YXRpb24gYWxsb2NhdGlvbiBjYXZlYXQuCisgICAg
ICAgIHJldHVybiBub2RlLT5jYXN0T3BlcmFuZDxTeW1ib2xUYWJsZSo+KCktPnNpbmdsZXRvblNj
b3BlKCktPmlzU3RpbGxWYWxpZCgpOworCisgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgorICAg
IGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIC8vIExpa2UgYWJvdmUsIGJ1dCB3aXRoIHRoZSBK
U0Z1bmN0aW9uIGFsbG9jYXRpb24gY2F2ZWF0LgorICAgICAgICByZXR1cm4gbm9kZS0+Y2FzdE9w
ZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGls
bFZhbGlkKCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvLyBGb3IgYWxsIG90aGVyIG5vZGVz
LCB3ZSBqdXN0IGNhcmUgYWJvdXQgd2hldGhlciB0aGV5IHdyaXRlIHRvIHNvbWV0aGluZyBvdGhl
ciB0aGFuIFNpZGVTdGF0ZS4KKyAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAg
Y2xvYmJlcml6ZSgKKyAgICAgICAgICAgIGdyYXBoLCBub2RlLCBOb09wQ2xvYmJlcml6ZSgpLAor
ICAgICAgICAgICAgWyZdIChjb25zdCBBYnN0cmFjdEhlYXAmIGhlYXApIHsKKyAgICAgICAgICAg
ICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgc3VjaCBhIHRoaW5nIGFzIGEgc3RyaWN0IHN1YnR5
cGUgb2YgU2lkZVN0YXRlLiBUaGF0J3Mgd2hhdCBhbGxvd3MKKyAgICAgICAgICAgICAgICAvLyB1
cyB0byB1c2UgYSBmYXN0ICE9IGNoZWNrLCBiZWxvdy4KKyAgICAgICAgICAgICAgICBBU1NFUlQo
IWhlYXAuaXNTdHJpY3RTdWJ0eXBlT2YoU2lkZVN0YXRlKSk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoaGVhcCAhPSBTaWRlU3RhdGUpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7
CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgTm9PcENsb2JiZXJpemUoKSk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKyNkZWZpbmUgREZHQ2xvYmJl
cnNFeGl0U3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsKKworLy8gQSBjb25z
ZXJ2YXRpdmUgYXBwcm94aW1hdGlvbiBvZiB3aGV0aGVyIHRoZSBub2RlIHdpbGwgcGVyZm9ybSBh
biBlZmZlY3QgdGhhdCBtZWFucyB0aGF0IHdlIGNhbiBubworLy8gbG9uZ2VyIGV4aXQgdG8gdGhp
cyBub2RlJ3MgZXhpdCBvcmlnaW4uCisKK2Jvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmLCBO
b2RlKik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHQ2xvYmJlcnNFeGl0U3RhdGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNl
LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Nyw2ICs2NjcsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywg
bm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKIAorICAgICAgICBub2Rl
LT5jaGlsZDEoKS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAgICAgICAgIGNoaWxkRWRnZS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKICAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlv
biA9IDA7CkBAIC02NzcsNiArNjc4LDkgQEAgcHJpdmF0ZToKIAogICAgICAgICBFZGdlIHByb3Bl
cnR5U3RvcmFnZTsKIAorICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG9yaWdpbi5l
eGl0T0spOworICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOworCiAgICAgICAgIGlmIChpc0lu
bGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSkKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGNoaWxkRWRnZTsKICAgICAgICAgZWxzZSBpZiAoIXZhcmlhbnQucmVhbGxvY2F0ZXNTdG9y
YWdlKCkpIHsKQEAgLTY4Nyw3ICs2OTEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJU
KCFpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICBOb2RlKiBh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsCi0gICAgICAgICAgICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRn
ZSk7CisgICAgICAgICAgICAgICAgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5m
byh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9
IEVkZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlRm9yVHJhbnNpdGlvbigpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpKTsKQEAgLTY5NSw3ICs2OTksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
QVNTRVJUKCFpc0lubGluZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSk7CiAKICAgICAgICAgICAg
IE5vZGUqIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UsIG9yaWdpbiwKKyAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBvcmlnaW4udGFrZVZhbGlkRXhpdChj
YW5FeGl0KSwKICAgICAgICAgICAgICAgICBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSwK
ICAgICAgICAgICAgICAgICBFZGdlKG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2lu
LCBjaGlsZEVkZ2UpKSk7CkBAIC03MDcsMTMgKzcxMSwxNSBAQCBwcml2YXRlOgogICAgICAgICBk
YXRhLmlkZW50aWZpZXJOdW1iZXIgPSBpZGVudGlmaWVyTnVtYmVyOwogICAgICAgICAKICAgICAg
ICAgbm9kZS0+Y29udmVydFRvUHV0QnlPZmZzZXQoZGF0YSwgcHJvcGVydHlTdG9yYWdlKTsKKyAg
ICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7CiAKICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CiAgICAgICAgICAgICAv
LyBGSVhNRTogUHV0U3RydWN0dXJlIGdvZXMgbGFzdCB1bnRpbCB3ZSBmaXggZWl0aGVyCiAgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQyOTIx
IG9yCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQyOTI0LgogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmln
aW4sIE9wSW5mbyh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2sgKyAxLCBTcGVjTm9uZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4ud2l0aEludmFsaWRF
eGl0KCksIE9wSW5mbyh0cmFuc2l0aW9uKSwKKyAgICAgICAgICAgICAgICBjaGlsZEVkZ2UpOwog
ICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3IEBAIGJvb2wgZG9l
c0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFNldExvY2FsOgogICAgIGNh
c2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAg
Y2FzZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTg4
ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM2Miw2ICsxMzYyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBM
b29wSGludDoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
CisgICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgICAg
ICBjYXNlIFR5cGVPZjoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQwOCw5ICsxNDA5LDYgQEAg
cHJpdmF0ZToKICAgICB2b2lkIGNvbnZlcnRTdHJpbmdBZGRVc2UoTm9kZSogbm9kZSwgRWRnZSYg
ZWRnZSkKICAgICB7CiAgICAgICAgIGlmICh1c2VLaW5kID09IFN0cmluZ1VzZSkgewotICAgICAg
ICAgICAgLy8gVGhpcyBwcmVzZXJ2ZXMgdGhlIGJpbmFyeVVzZUtpbmQoKSBpbnZhcmlhbnQgb3Qg
VmFsdWVBZGQ6IFZhbHVlQWRkJ3MKLSAgICAgICAgICAgIC8vIHR3byBlZGdlcyB3aWxsIGFsd2F5
cyBoYXZlIGlkZW50aWNhbCB1c2Uga2luZHMsIHdoaWNoIG1ha2VzIHRoZQotICAgICAgICAgICAg
Ly8gZGVjaXNpb24gcHJvY2VzcyBtdWNoIGVhc2llci4KICAgICAgICAgICAgIG9ic2VydmVVc2VL
aW5kT25Ob2RlPFN0cmluZ1VzZT4oZWRnZS5ub2RlKCkpOwogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05v
bmUsIENoZWNrLCBub2RlLT5vcmlnaW4sCkBAIC0xNTEyLDYgKzE1MTAsMTQgQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgYXR0ZW1wdFRvTWFrZUZhc3RTdHJpbmdBZGQoTm9kZSogbm9kZSkKICAgICB7
CisgICAgICAgIGlmICghbm9kZS0+b3JpZ2luLmV4aXRPSykgeworICAgICAgICAgICAgLy8gSWYg
dGhpcyBjb2RlIGNhbm5vdCBleGl0LCB0aGVuIHdlIHNob3VsZCBub3QgY29udmVydCBpdCB0byBh
IE1ha2VSb3BlLCBzaW5jZSBNYWtlUm9wZQorICAgICAgICAgICAgLy8gY2FuIGV4aXQuIFRoaXMg
YXJpc2VzIGJlY2F1c2Ugd2UgdGhpbmsgdGhhdCBTdHJDYXQgY2xvYmJlcnMgZXhpdCBzdGF0ZSwg
ZXZlbiB0aG91Z2ggaXQKKyAgICAgICAgICAgIC8vIGRvZXNuJ3QgcmVhbGx5IGRvIHRoYXQuCisg
ICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0ODQ0MworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAogICAgICAgICBib29sIGdvb2RUb0dvID0gdHJ1ZTsKICAgICAgICAgbV9ncmFwaC5kb1RvQ2hp
bGRyZW4oCiAgICAgICAgICAgICBub2RlLApAQCAtMTYzNyw2ICsxNjQzLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgLy8gTk9URTogQW55IHR5cGUgY2hlY2tzIHdl
IHB1dCBoZXJlIG1heSBnZXQgaG9pc3RlZCBieSBmaXh1cENoZWNrc0luQmxvY2soKS4gU28sIGlm
IHdlCisgICAgICAgICAgICAgICAgLy8gYWRkIG5ldyB0eXBlIGNoZWNraW5nIHVzZSBraW5kIGZv
ciBTZXRMb2NhbHMsIHdlIG5lZWQgdG8gbW9kaWZ5IHRoYXQgY29kZSBhcyB3ZWxsLgorICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIHN3aXRjaCAodmFyaWFibGUtPmZsdXNoRm9ybWF0
KCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTIxMTAsOCArMjExOSwxOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBBU1NFUlQoYmxvY2stPmlzUmVhY2hhYmxlKTsKICAgICAgICAg
bV9ibG9jayA9IGJsb2NrOwotICAgICAgICBmb3IgKG1faW5kZXhJbkJsb2NrID0gMDsgbV9pbmRl
eEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7Ci0gICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG1faW5kZXhJbkJsb2NrKTsKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXhGb3JDaGVja3MgPSBVSU5UX01BWDsKKyAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5G
b3JDaGVja3M7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJ
bkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKKyAgICAgICAgICAgIE5v
ZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKworICAgICAgICAgICAgLy8gSWYg
dGhpcyBpcyBhIG5vZGUgYXQgd2hpY2ggd2UgY291bGQgZXhpdCwgdGhlbiBzYXZlIGl0cyBpbmRl
eC4gSWYgbm9kZXMgYWZ0ZXIgdGhpcyBvbmUKKyAgICAgICAgICAgIC8vIGNhbm5vdCBleGl0LCB0
aGVuIHdlIHdpbGwgaG9pc3QgY2hlY2tzIHRvIGhlcmUuCisgICAgICAgICAgICBpZiAobm9kZS0+
b3JpZ2luLmV4aXRPSykgeworICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJ
bkJsb2NrOworICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9IG5vZGUtPm9yaWdpbjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzID0gb3JpZ2luRm9y
Q2hlY2tzLndpdGhTZW1hbnRpYyhub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogCiAgICAgICAgICAg
ICAvLyBGaXJzdCwgdHJ5IHRvIHJlbGF4IHRoZSByZXByZXNlbnRhdGlvbmFsIGRlbWFuZHMgb2Yg
ZWFjaCBub2RlLCBpbiBvcmRlciB0byBoYXZlCiAgICAgICAgICAgICAvLyBmZXdlciBjb252ZXJz
aW9ucy4KQEAgLTIxNzUsMjEgKzIxOTUsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBu
b2RlLAogICAgICAgICAgICAgICAgIFsmXSAoRWRnZSYgZWRnZSkgewogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiByZXN1bHQgPSBudWxscHRyOwotICAgICAgICAKKwogICAgICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
RG91YmxlUmVwVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcFJlYWxVc2U6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwTWFjaGluZUludFVzZTogewogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2Ut
PmlzTnVtYmVyQ29uc3RhbnQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZUNvbnN0YW50
LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9y
Q2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZUNvbnN0YW50LCBvcmlnaW5Gb3JDaGVj
a3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmZyZWV6
ZShqc0RvdWJsZU51bWJlcihlZGdlLT5hc051bWJlcigpKSkpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0Rv
dWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjSW50NTJBc0RvdWJsZSwgRG91YmxlUmVwLCBvcmln
aW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5u
b2RlKCksIEludDUyUmVwVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZDsKQEAgLTIyMDEsNTMg
KzIyMjEsOTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
S2luZCA9IE5vdENlbGxVc2U7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVSZXAsIG5vZGUt
Pm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3Ms
IFNwZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIHVzZUtpbmQpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5z
ZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50
NTJSZXBVc2U6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNJbnQ1MlJl
c3VsdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGVkZ2UtPmlzTWFjaGluZUludENvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hpbmVJbnQs
IEludDUyQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNNYWNoaW5lSW50LCBJbnQ1MkNvbnN0YW50LCBvcmln
aW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhlZGdl
LT5jb25zdGFudCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkZ2Ut
Pmhhc0RvdWJsZVJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgbm9kZS0+b3Jp
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3Bl
Y01hY2hpbmVJbnQsIEludDUyUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJsZVJlcE1hY2hpbmVJbnRVc2Up
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZWRnZS0+c2hvdWxkU3BlY3Vs
YXRlSW50MzJGb3JBcml0aG1ldGljKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBJbnQ1MlJlcCwgbm9kZS0+b3Jp
Z2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3Bl
Y0ludDMyLCBJbnQ1MlJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQzMlVzZSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUyUmVwLCBub2RlLT5vcmlnaW4s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTWFj
aGluZUludCwgSW50NTJSZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgTWFjaGluZUludFVzZSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUo
cmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpICYmICFl
ZGdlLT5oYXNJbnQ1MlJlc3VsdCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNC
eXRlY29kZURvdWJsZSwgVmFsdWVSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRlY29kZURvdWJsZSwgVmFsdWVS
ZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRn
ZShlZGdlLm5vZGUoKSwgRG91YmxlUmVwVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjSW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwgVmFsdWVSZXAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9yaWdpbiwgRWRnZShlZGdlLm5vZGUoKSwg
SW50NTJSZXBVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JD
aGVja3MsIFNwZWNJbnQzMiB8IFNwZWNJbnQ1MkFzRG91YmxlLCBWYWx1ZVJlcCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLCBFZGdlKGVkZ2Uubm9kZSgp
LCBJbnQ1MlJlcFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9IH0KLSAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIEl0J3MgcmVtb3RlbHkgcG9zc2libGUgdGhhdCB0aGlzIG5vZGUgY2Fubm90
IGRvIHR5cGUgY2hlY2tzLCBidXQgd2Ugbm93IGhhdmUgYQorICAgICAgICAgICAgICAgICAgICAv
LyB0eXBlIGNoZWNrIG9uIHRoaXMgbm9kZS4gV2UgZG9uJ3QgaGF2ZSB0byBoYW5kbGUgdGhlIGdl
bmVyYWwgZm9ybSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIC8vIHByb2JsZW0uIEl0IG9u
bHkgYXJpc2VzIHdoZW4gQnl0ZUNvZGVQYXJzZXIgZW1pdHMgYW4gaW1tZWRpYXRlIFNldExvY2Fs
LCByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhbiBhIGRlbGF5ZWQgb25lLiBTbywg
d2Ugb25seSB3b3JyeSBhYm91dCB0aG9zZSBjaGVja3MgdGhhdCB3ZSBtYXkgaGF2ZSBwdXQgb24K
KyAgICAgICAgICAgICAgICAgICAgLy8gYSBTZXRMb2NhbC4gTm90ZSB0aGF0ICJpbmRleEZvckNo
ZWNrcyAhPSBpbmRleEluQmxvY2siIGlzIGp1c3QgYW5vdGhlciB3YXkgb2YKKyAgICAgICAgICAg
ICAgICAgICAgLy8gc2F5aW5nICIhbm9kZS0+b3JpZ2luLmV4aXRPSyIuCisgICAgICAgICAgICAg
ICAgICAgIGlmIChpbmRleEZvckNoZWNrcyAhPSBpbmRleEluQmxvY2sgJiYgbWF5SGF2ZVR5cGVD
aGVjayhlZGdlLnVzZUtpbmQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFVzZUtpbmQg
a25vd25Vc2VLaW5kOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2lu
ZCA9IEtub3duSW50MzJVc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga25vd25Vc2VLaW5kID0gS25vd25DZWxsVXNlOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBCb29sZWFuVXNl
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IEtub3duQm9vbGVh
blVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBj
YW4gb25seSBhcmlzZSBpZiB3ZSBoYXZlIGEgQ2hlY2sgbm9kZSwgYW5kIGluIHRoYXQgY2FzZSwg
d2UgY2FuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCByZW1vdmUgdGhlIG9y
aWdpbmFsIGNoZWNrLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgbm9kZS0+b3AoKSA9PSBDaGVjayk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga25vd25Vc2VLaW5kID0gVW50eXBlZFVzZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNrLCBvcmlnaW5Gb3JDaGVja3Ms
IGVkZ2UpOworCisgICAgICAgICAgICAgICAgICAgICAgICBlZGdlLnNldFVzZUtpbmQoa25vd25V
c2VLaW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVz
aEZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1
c2hGb3JtYXQuaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGbHVzaEZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCwyOCBAQCBpbmxp
bmUgVXNlS2luZCB1c2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZvCiAgICAgcmV0dXJuIFVudHlwZWRV
c2U7CiB9CiAKK2lubGluZSBVc2VLaW5kIHVuY2hlY2tlZFVzZUtpbmRGb3IoRmx1c2hGb3JtYXQg
Zm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEZWFkRmx1c2g6Cisg
ICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKKyAgICBjYXNlIENvbmZsaWN0aW5nRmx1c2g6CisgICAg
ICAgIHJldHVybiBVbnR5cGVkVXNlOworICAgIGNhc2UgRmx1c2hlZENlbGw6CisgICAgICAgIHJl
dHVybiBLbm93bkNlbGxVc2U7CisgICAgY2FzZSBGbHVzaGVkSW50MzI6CisgICAgICAgIHJldHVy
biBLbm93bkludDMyVXNlOworICAgIGNhc2UgRmx1c2hlZEludDUyOgorICAgICAgICByZXR1cm4g
SW50NTJSZXBVc2U7CisgICAgY2FzZSBGbHVzaGVkRG91YmxlOgorICAgICAgICByZXR1cm4gRG91
YmxlUmVwVXNlOworICAgIGNhc2UgRmx1c2hlZEJvb2xlYW46CisgICAgICAgIHJldHVybiBLbm93
bkJvb2xlYW5Vc2U7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIFVudHlwZWRVc2U7Cit9CisKIGlubGluZSBTcGVjdWxhdGVkVHlwZSB0eXBlRmls
dGVyRm9yKEZsdXNoRm9ybWF0IGZvcm1hdCkKIHsKICAgICByZXR1cm4gdHlwZUZpbHRlckZvcih1
c2VLaW5kRm9yKGZvcm1hdCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw5IEBACiAjaW5jbHVkZSAiQ29k
ZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdCbG9ja1dvcmtsaXN0LmgiCiAjaW5j
bHVkZSAiREZHQ2xvYmJlclNldC5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgi
CiAjaW5jbHVkZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRGR01heUV4aXQuaCIKICNpbmNs
dWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2Rl
TGl2ZW5lc3MuaCIKICNpbmNsdWRlICJGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmgiCkBAIC0xMDEs
OCArMTAzLDE0IEBAIHN0YXRpYyB2b2lkIHByaW50V2hpdGVTcGFjZShQcmludFN0cmVhbSYKICAg
ICAgICAgb3V0LnByaW50KCIgIik7CiB9CiAKLWJvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFBy
aW50U3RyZWFtJiBvdXQsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSogcHJldmlvdXNOb2RlLCBO
b2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCitib29sIEdyYXBoOjpkdW1w
Q29kZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqJiBw
cmV2aW91c05vZGVSZWYsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCogY29udGV4dCkK
IHsKKyAgICBpZiAoIWN1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBOb2RlKiBwcmV2aW91c05vZGUgPSBwcmV2aW91c05vZGVSZWY7
CisgICAgcHJldmlvdXNOb2RlUmVmID0gY3VycmVudE5vZGU7CisKICAgICBpZiAoIXByZXZpb3Vz
Tm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIApAQCAtMzQ1LDEyICszNTMsMTggQEAg
dm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJp
bnQoY29tbWEsICJSOiIsIHNvcnRlZExpc3REdW1wKHJlYWRzLmRpcmVjdCgpLCAiLCIpKTsKICAg
ICBpZiAoIXdyaXRlcy5pc0VtcHR5KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlc6Iiwg
c29ydGVkTGlzdER1bXAod3JpdGVzLmRpcmVjdCgpLCAiLCIpKTsKKyAgICBFeGl0TW9kZSBleGl0
TW9kZSA9IG1heUV4aXQoKnRoaXMsIG5vZGUpOworICAgIGlmIChleGl0TW9kZSAhPSBEb2VzTm90
RXhpdCkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBleGl0TW9kZSk7CisgICAgaWYgKGNsb2Ji
ZXJzRXhpdFN0YXRlKCp0aGlzLCBub2RlKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ2xv
YmJlcnNFeGl0Iik7CiAgICAgaWYgKG5vZGUtPm9yaWdpbi5pc1NldCgpKSB7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgImJjIyIsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4
KTsKLSAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4uZm9y
RXhpdCkKKyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4u
Zm9yRXhpdCAmJiBub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKQogICAgICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiZXhpdDogIiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpOwogICAgIH0KLSAg
ICAKKyAgICBpZiAoIW5vZGUtPm9yaWdpbi5leGl0T0spCisgICAgICAgIG91dC5wcmludChjb21t
YSwgIkV4aXRJbnZhbGlkIik7CiAgICAgb3V0LnByaW50KCIpIik7CiAKICAgICBpZiAobm9kZS0+
aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCp0aGlzKSAmJiBub2RlLT50cnlHZXRWYXJpYWJsZUFjY2Vz
c0RhdGEoKSkKQEAgLTQ1NSw3ICs0NjksNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIER1bXBDCiAgICAgICAgIG91dC5wcmludCgiICBBcmd1bWVudHM6ICIsIGxpc3REdW1w
KG1fYXJndW1lbnRzKSwgIlxuIik7CiAgICAgb3V0LnByaW50KCJcbiIpOwogICAgIAotICAgIE5v
ZGUqIGxhc3ROb2RlID0gMDsKKyAgICBOb2RlKiBsYXN0Tm9kZSA9IG51bGxwdHI7CiAgICAgZm9y
IChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nrcy5zaXplKCk7ICsrYikgewogICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwogICAgICAgICBpZiAoIWJsb2NrKQpA
QCAtNDk2LDcgKzUxMCw2IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVt
cEMKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgICAgIGR1bXBDb2RlT3JpZ2luKG91dCwgIiIsIGxhc3ROb2RlLCBibG9jay0+YXQo
aSksIGNvbnRleHQpOwogICAgICAgICAgICAgZHVtcChvdXQsICIiLCBibG9jay0+YXQoaSksIGNv
bnRleHQpOwotICAgICAgICAgICAgbGFzdE5vZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAgIH0K
ICAgICAgICAgb3V0LnByaW50KCIgIFN0YXRlczogIiwgYmxvY2stPmNmYUJyYW5jaERpcmVjdGlv
biwgIiwgIiwgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCk7CiAgICAgICAg
IGlmICghYmxvY2stPmNmYURpZEZpbmlzaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjEwLDcgKzIxMCw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIER1bXAgdGhlIGNvZGUgb3JpZ2luIG9mIHRoZSBnaXZlbiBub2RlIGFzIGEgZGlmZiBm
cm9tIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUKICAgICAvLyBwcmVjZWRpbmcgbm9kZS4gUmV0dXJu
cyB0cnVlIGlmIGFueXRoaW5nIHdhcyBwcmludGVkLgotICAgIGJvb2wgZHVtcENvZGVPcmlnaW4o
UHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9k
ZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0Kik7CisgICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQ
cmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZSwgTm9k
ZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0Kik7CiAKICAgICBBZGRTcGVjdWxhdGlvbk1vZGUg
YWRkU3BlY3VsYXRpb25Nb2RlKE5vZGUqIGFkZCwgYm9vbCBsZWZ0U2hvdWxkU3BlY3VsYXRlSW50
MzIsIGJvb2wgcmlnaHRTaG91bGRTcGVjdWxhdGVJbnQzMiwgUHJlZGljdGlvblBhc3MgcGFzcykK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJD
cmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCw2ICsxMDQsMTMgQEAgcHVibGljOgogICAgICAgICAgICAg
Ly8gYmVjYXVzZSB0aGF0IGlzIHRoZSBERkcgU1NBIGNvbnZlbnRpb24uIFRoZXJlZm9yZSwgZWFj
aCBwcmVkZWNlc3NvciBvZiB0aGUgbG9vcAogICAgICAgICAgICAgLy8gaGVhZGVyIG11c3QgaGF2
ZSBvbmx5IG9uZSBzdWNjZXNzb3IuCiAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51
bGxwdHIsIGV4aXN0aW5nUHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcCgpID09IEp1bXApOworCisg
ICAgICAgICAgICAvLyBBIHByZS1oZWFkZXIgaXMgbW9zdCB1c2VmdWwgaWYgaXQncyBwb3NzaWJs
ZSB0byBleGl0IGZyb20gaXRzIHRlcm1pbmFsLiBIZW5jZQorICAgICAgICAgICAgLy8gaWYgdGhl
IHRlcm1pbmFsIG9mIHRoZSBleGlzdGluZyBwcmUtaGVhZGVyIGRvZXNuJ3QgYWxsb3cgZm9yIGV4
aXQsIGJ1dCB0aGUgZmlyc3QKKyAgICAgICAgICAgIC8vIG9yaWdpbiBvZiB0aGUgbG9vcCBoZWFk
ZXIgZG9lcywgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIGEgbmV3IHByZS1oZWFkZXIuCisgICAgICAg
ICAgICBpZiAoIW5lZWRzTmV3UHJlSGVhZGVyICYmIGxvb3AuaGVhZGVyKCktPmZpcnN0T3JpZ2lu
KCkuZXhpdE9LCisgICAgICAgICAgICAgICAgJiYgIWV4aXN0aW5nUHJlSGVhZGVyLT50ZXJtaW5h
bCgpLT5vcmlnaW4uZXhpdE9LKQorICAgICAgICAgICAgICAgIG5lZWRzTmV3UHJlSGVhZGVyID0g
dHJ1ZTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFuZWVkc05ld1ByZUhlYWRlcikK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE0IEBA
IHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1ib29sIG1heUV4aXQoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKQorRXhpdE1vZGUgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5v
ZGUqIG5vZGUpCiB7CisgICAgRXhpdE1vZGUgcmVzdWx0ID0gRG9lc05vdEV4aXQ7CisgICAgCiAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgLy8gVGhpcyBpcyBhIGNhcmVmdWxseSBjdXJh
dGVkIGxpc3Qgb2Ygbm9kZXMgdGhhdCBkZWZpbml0ZWx5IGRvIG5vdCBleGl0LiBXZSB0cnkgdG8g
YmUgdmVyeQogICAgIC8vIGNvbnNlcnZhdGl2ZSB3aGVuIG1haW50YWluaW5nIHRoaXMgbGlzdCwg
YmVjYXVzZSBhZGRpbmcgbmV3IG5vZGUgdHlwZXMgdG8gaXQgZG9lc24ndAotICAgIC8vIGdlbmVy
YWxseSBtYWtlIHRoaW5ncyBhIGxvdCBiZXR0ZXIgYnV0IGl0IG1pZ2h0IGludHJvZHVjZSBpbnNh
bmVseSBzdWJ0bGUgYnVncy4KKyAgICAvLyBnZW5lcmFsbHkgbWFrZSB0aGluZ3MgYSBsb3QgYmV0
dGVyIGJ1dCBpdCBtaWdodCBpbnRyb2R1Y2Ugc3VidGxlIGJ1Z3MuCiAgICAgY2FzZSBTZXRBcmd1
bWVudDoKICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKQEAg
LTk0LDExICs5NiwxMyBAQCBib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgQ2hlY2s6CisgICAg
Y2FzZSBJZGVudGl0eToKICAgICBjYXNlIEdldExvY2FsOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAg
ICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgWm9tYmllSGludDoKKyAg
ICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEJvdHRvbVZhbHVlOgogICAgIGNhc2UgUHV0SGludDoK
ICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CkBAIC0xMTYsMTggKzEyMCw2NiBAQCBib29sIG1h
eUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgRG91YmxlUmVwOgogICAg
IGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBWYWx1ZVJlcDoKKyAgICBjYXNlIEV4dHJhY3RPU1JF
bnRyeUxvY2FsOgorICAgIGNhc2UgTG9naWNhbE5vdDoKKyAgICBjYXNlIE5vdGlmeVdyaXRlOgor
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgIGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CisgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgogICAgICAgICBicmVhazsKLSAg
ICAgICAgCisKKyAgICBjYXNlIFN0ckNhdDoKKyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25z
dHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICBjYXNl
IE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgY2FzZSBO
ZXdBcnJvd0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgIGNhc2UgQ3Jl
YXRlQWN0aXZhdGlvbjoKKyAgICAgICAgcmVzdWx0ID0gRXhpdHNGb3JFeGNlcHRpb25zOworICAg
ICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8vIElmIGluIGRvdWJ0LCByZXR1
cm4gdHJ1ZS4KLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBFeGl0czsKICAg
ICB9CiAKICAgICBFZGdlTWF5RXhpdCBmdW5jdG9yOwogICAgIERGR19OT0RFX0RPX1RPX0NISUxE
UkVOKGdyYXBoLCBub2RlLCBmdW5jdG9yKTsKLSAgICByZXR1cm4gZnVuY3Rvci5yZXN1bHQoKTsK
KyAgICBpZiAoZnVuY3Rvci5yZXN1bHQoKSkKKyAgICAgICAgcmVzdWx0ID0gRXhpdHM7CisgICAg
CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRXhpdE1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2gg
KG1vZGUpIHsKKyAgICBjYXNlIERvZXNOb3RFeGl0OgorICAgICAgICBvdXQucHJpbnQoIkRvZXNO
b3RFeGl0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRzRm9yRXhjZXB0aW9uczoK
KyAgICAgICAgb3V0LnByaW50KCJFeGl0c0ZvckV4Y2VwdGlvbnMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXhpdHM6CisgICAgICAgIG91dC5wcmludCgiRXhpdHMiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwx
MCArMzYsNDggQEAgc3RydWN0IE5vZGU7CiAvLyBBICp2ZXJ5KiBjb25zZXJ2YXRpdmUgYXBwcm94
aW1hdGlvbiBvZiB3aGV0aGVyIG9yIG5vdCBhIG5vZGUgY291bGQgcG9zc2libHkgZXhpdC4gVXN1
YWxseQogLy8gcmV0dXJucyB0cnVlIGV4Y2VwdCBpbiBjYXNlcyB3aGVyZSB3ZSBvYnZpb3VzbHkg
ZG9uJ3QgZXhwZWN0IGFuIGV4aXQuCiAKLWJvb2wgbWF5RXhpdChHcmFwaCYsIE5vZGUqKTsKK2Vu
dW0gRXhpdE1vZGUgeworICAgIC8vIFRoZSBub2RlIGRvZXMgbm90IGV4aXQgYXQgYWxsLiBUaGlz
IG1lYW5zIHRoYXQgaXQncyBsZWdhbCB0byBlbGltaW5hdGUgdGhlIGZpcnN0IHN0b3JlIGluIGEK
KyAgICAvLyBwcm9ncmFtIGxpa2U6CisgICAgLy8KKyAgICAvLyBnbG9iYWwgPSAxIC8vIGZpcnN0
IHN0b3JlCisgICAgLy8gRG9lc05vdEV4aXQoKTsgLy8gbGV0J3MgYXNzdW1lIHRoYXQgdGhpcyBh
bHNvIGRvZXNuJ3QgcmVhZCAiZ2xvYmFsIgorICAgIC8vIGdsb2JhbCA9IDIgLy8gc2Vjb25kIHN0
b3JlCisgICAgLy8KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIGVsaW1pbmF0ZSB0aGUgZmlyc3Qgb25l
IHNpbmNlIG5vYm9keSB3aWxsIHNlZSBpdDsgdGhlIHNlY29uZCBzdG9yZSBpcyBhbHdheXMKKyAg
ICAvLyBleGVjdXRlZCByaWdodCBhZnRlci4KKyAgICBEb2VzTm90RXhpdCwKKworICAgIC8vIFRo
ZSBub2RlIHdpbGwgZXhpdCwgYnV0IG9ubHkgYnkgcHJvcGVybHkgdGhyb3dpbmcgZXhjZXB0aW9u
cy4gQSBwcm9wZXIgZXhjZXB0aW9uIHRocm93IHdpbGwKKyAgICAvLyBkaXZlcnQgZXhlY3V0aW9u
IHRvIHRoZSBtYXRjaGluZyBvcF9jYXRjaCBhbmQgd2lsbCBub3QgcmVleGVjdXRlIHRoZSBleGl0
IG9yaWdpbi4gVGhpcyBtZWFucworICAgIC8vIHRoYXQgdGhlIHN0b3JlIGVsaW1pbmF0aW9uIG9w
dGltaXphdGlvbiBhYm92ZSB3b3VsZCBiZSBpbGxlZ2FsLCBidXQgdGhlIGZvbGxvd2luZyB3b3Vs
ZCBiZSBPSzoKKyAgICAvLworICAgIC8vIFNpZGVFZmZlY3QoLi4uLCBleGl0OiBiYyM0MikKKyAg
ICAvLyBFeGl0c0ZvckV4Y2VwdGlvbnMoLi4uLCBleGl0OiAjYmM0MiwgRXhpdEludmFsaWQpCisg
ICAgLy8KKyAgICAvLyBJbiBwYXJ0aWN1bGFyLCBpdCdzIE9LIGZvciBhIG5vZGUgdGhhdCByZXBv
cnRzIEV4aXRzRm9yRXhjZXB0aW9ucyB0byBiZSBleGVjdXRlZCBpbiBhIGNvbnRleHQKKyAgICAv
LyB3aGVyZSAhTm9kZTo6b3JpZ2luLmV4aXRPSy4gVGhhdCdzIGJlY2F1c2UgdGhpcyBub2RlIHdp
bGwgbm90IGV4aXQgaW4gYSBtYW5uZXIgdGhhdCBjb3VsZCBsZWFkCisgICAgLy8gdG8gdGhlIHJl
ZXhlY3V0aW9uIG9mIFNpZGVFZmZlY3QoKS4KKyAgICBFeGl0c0ZvckV4Y2VwdGlvbnMsCisKKyAg
ICAvLyBUaGUgbm9kZSB3aWxsIGV4aXQgdG8gdGhlIGV4aXQgb3JpZ2luLiBUaGlzIG1lYW5zIHRo
YXQgd2UgY2Fubm90IGRvIHN0b3JlIGVsaW1pbmF0aW9uIGxpa2UgZm9yCisgICAgLy8gRG9lc05v
dEV4aXQgYW5kIGFsc28gd2UgY2Fubm90IHBsYWNlIHRoaXMgbm9kZSBpbiBhbiBFeGl0SW52YWxp
ZCBjb250ZXh0LCBzaW5jZSB0aGlzIHdpbGwgZXhpdAorICAgIC8vIGluIGEgbWFubmVyIHRoYXQg
d2lsbCBjYXVzZSB0aGUgcmVleGVjdXRpb24gb2YgYWxsIHByZXZpb3VzIG9wZXJhdGlvbnMgd2l0
aGluIHRoaXMgZXhpdCBvcmlnaW4uCisgICAgRXhpdHMKK307CisKK0V4aXRNb2RlIG1heUV4aXQo
R3JhcGgmLCBOb2RlKik7CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkRGRzo6RXhpdE1vZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAjZW5kaWYgLy8gREZHTWF5RXhpdF9oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFz
ZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TW92SGludFJlbW92YWxQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtl
ZExvY2FsKCkpID0gRXBvY2goKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkpCisgICAgICAgICAgICBpZiAobWF5RXhp
dChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90RXhpdCkKICAgICAgICAgICAgICAgICBjdXJyZW50
RXBvY2guYnVtcCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRG
R05vZGVPcmlnaW4uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgTm9kZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgie3NlbWFudGljOiAiLCBzZW1hbnRpYywgIiwgZm9y
RXhpdDogIiwgZm9yRXhpdCwgIiwgZXhpdE9LOiAiLCBleGl0T0ssICJ9Iik7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uaAkocmV2aXNpb24gMTg4
ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDkgKzI5LDEzIEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRl
ICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2Rl
OworCiBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgTm9kZU9yaWdpbigpIHsgfQogICAgIApAQCAt
NDgsNyArNTIsNyBAQCBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgICAgIHJldHVybiBzZW1hbnRp
Yy5pc1NldCgpOwogICAgIH0KICAgICAKLSAgICBOb2RlT3JpZ2luIHdpdGhTZW1hbnRpYyhDb2Rl
T3JpZ2luIHNlbWFudGljKQorICAgIE5vZGVPcmlnaW4gd2l0aFNlbWFudGljKENvZGVPcmlnaW4g
c2VtYW50aWMpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoIWlzU2V0KCkpCiAgICAgICAgICAg
ICByZXR1cm4gTm9kZU9yaWdpbigpOwpAQCAtNTgsNyArNjIsNDYgQEAgc3RydWN0IE5vZGVPcmln
aW4gewogICAgICAgICAgICAgcmVzdWx0LnNlbWFudGljID0gc2VtYW50aWM7CiAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgTm9kZU9yaWdpbiB3aXRoRXhpdE9LKGJvb2wgdmFs
dWUpIGNvbnN0CisgICAgeworICAgICAgICBOb2RlT3JpZ2luIHJlc3VsdCA9ICp0aGlzOworICAg
ICAgICByZXN1bHQuZXhpdE9LID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgTm9kZU9yaWdpbiB3aXRoSW52YWxpZEV4aXQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHdpdGhFeGl0T0soZmFsc2UpOworICAgIH0KKworICAgIE5vZGVPcmlnaW4gdGFr
ZVZhbGlkRXhpdChib29sJiBjYW5FeGl0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdp
dGhFeGl0T0soZXhpdE9LICYgc3RkOjpleGNoYW5nZShjYW5FeGl0LCBmYWxzZSkpOworICAgIH0K
ICAgICAKKyAgICBOb2RlT3JpZ2luIGZvckluc2VydGluZ0FmdGVyKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAgIE5vZGVPcmlnaW4gcmVzdWx0ID0gKnRoaXM7
CisgICAgICAgIGlmIChleGl0T0sgJiYgY2xvYmJlcnNFeGl0U3RhdGUoZ3JhcGgsIG5vZGUpKQor
ICAgICAgICAgICAgcmVzdWx0LmV4aXRPSyA9IGZhbHNlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBOb2RlT3JpZ2luJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzZW1hbnRpYyA9PSBvdGhlci5zZW1hbnRpYwor
ICAgICAgICAgICAgJiYgZm9yRXhpdCA9PSBvdGhlci5mb3JFeGl0CisgICAgICAgICAgICAmJiBl
eGl0T0sgPT0gb3RoZXIuZXhpdE9LOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBOb2RlT3JpZ2luJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KwogICAgIC8vIFVzZWQgZm9yIGRldGVybWluaW5nIHdoYXQgYnl0ZWNvZGUgdGhpcyBjYW1lIGZy
b20uIFRoaXMgaXMgaW1wb3J0YW50IGZvcgogICAgIC8vIGRlYnVnZ2luZywgZXhjZXB0aW9ucywg
YW5kIGV2ZW4gYmFzaWMgZXhlY3V0aW9uIHNlbWFudGljcy4KICAgICBDb2RlT3JpZ2luIHNlbWFu
dGljOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBcCiAgICAgbWFjcm8oTW92SGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAg
IG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFeGl0T0ss
IE5vZGVNdXN0R2VuZXJhdGUpIC8qIEluZGljYXRlcyB0aGF0IGV4aXQgc3RhdGUgaXMgaW50YWN0
LiAqLyBcCiAgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KENoZWNrLCBOb2RlTXVzdEdlbmVyYXRlKSAvKiBVc2VkIGlmIHdlIHdhbnQganVzdCBhIHR5cGUg
Y2hlY2sgYnV0IG5vdCBsaXZlbmVzcy4gTm9uLWNoZWNraW5nIHVzZXMgd2lsbCBiZSByZW1vdmVk
LiAqL1wKICAgICBtYWNybyhVcHNpbG9uLCAwKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODksNyArODks
OSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGV4ZWN1dGlvbkNvdW50IHRvIHVzZSBiZXN0IGp1ZGdl
bWVudCAtIGJ1dCB0aGF0IHNlZW1zIHVubmVjZXNzYXJ5IHNpbmNlIHdlIGtub3cgZm9yCiAgICAg
ICAgIC8vIHN1cmUgd2hhdCB0aGUgZXhlY3V0aW9uQ291bnQgc2hvdWxkIGJlIGluIHRoaXMgY2Fz
ZS4KICAgICAgICAgQmFzaWNCbG9jayogbmV3Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQoMCwg
MSk7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gdGFyZ2V0LT5hdCgwKS0+b3JpZ2luOwor
CisgICAgICAgIC8vIFdlJ2QgcmVhbGx5IGxpa2UgdG8gdXNlIGFuIHVuc2V0IG9yaWdpbiwgYnV0
IFRocmVhZGVkQ1BTIHdvbid0IGFsbG93IHRoYXQuCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCBmYWxzZSk7CiAgICAg
ICAgIAogICAgICAgICBWZWN0b3I8Tm9kZSo+IGxvY2FscyhiYXNlbGluZS0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMpOwogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUt
Pm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CkBAIC0xMDYsNiArMTA4LDEwIEBAIHB1
YmxpYzoKICAgICAgICAgICAgICAgICBFZGdlKGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAgfQog
CisgICAgICAgIC8vIE5vdyB1c2UgdGhlIG9yaWdpbiBvZiB0aGUgdGFyZ2V0LCBzaW5jZSBpdCdz
IG5vdCBPSyB0byBleGl0LCBhbmQgd2Ugd2lsbCBwcm9iYWJseSBob2lzdAorICAgICAgICAvLyB0
eXBlIGNoZWNrcyB0byBoZXJlLgorICAgICAgICBvcmlnaW4gPSB0YXJnZXQtPmF0KDApLT5vcmln
aW47CisgICAgICAgIAogICAgICAgICBmb3IgKGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
YmFzZWxpbmUtPm51bVBhcmFtZXRlcnMoKTsgKythcmd1bWVudCkgewogICAgICAgICAgICAgTm9k
ZSogb2xkTm9kZSA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsK
ICAgICAgICAgICAgIGlmICghb2xkTm9kZSkgewpAQCAtMTE3LDcgKzEyMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBPcEluZm8ob2xkTm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsK
ICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gbm9kZTsKICAgICAg
ICAgfQotICAgICAgICAKKwogICAgICAgICBmb3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFz
ZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xvY2FsKSB7CiAgICAgICAgICAgICBOb2Rl
KiBwcmV2aW91c0hlYWQgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7CiAg
ICAgICAgICAgICBpZiAoIXByZXZpb3VzSGVhZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE0
IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIE9TUkV4aXQ6Ok9TUkV4aXQo
RXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCi0gICAgOiBPU1JFeGl0QmFz
ZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIGppdC0+bV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUpCisgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZv
ckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50aWMpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNW
YWx1ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1f
cGF0Y2hhYmxlQ29kZU9mZnNldCgwKQogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5k
ZXgpCiAgICAgLCBtX3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQogewotICAgIEFTU0VSVChtX2Nv
ZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgREZHX0FTU0VSVChqaXQtPm1faml0LmdyYXBoKCksIGpp
dC0+bV9jdXJyZW50Tm9kZSwgaml0LT5tX29yaWdpbi5leGl0T0spOwogfQogCiB2b2lkIE9TUkV4
aXQ6OnNldFBhdGNoYWJsZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAg
Y2hlY2spCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5o
CShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxv
Y2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDcgKzc1Nyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHByb21vdGVMb2NhbEhlYXAoKTsKIAogICAgICAgICBpZiAoT3B0
aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCkpCi0gICAgICAgICAgICB2YWxpZGF0ZSht
X2dyYXBoLCBEdW1wR3JhcGgsIGdyYXBoQmVmb3JlU2lua2luZyk7CisgICAgICAgICAgICBERkc6
OnZhbGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFwaCwgZ3JhcGhCZWZvcmVTaW5raW5nKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjc4LDcgKzE2NzgsOCBAQCBwcml2YXRlOgog
CiAgICAgICAgICAgICAgICAgTm9kZSogaWRlbnRpZmllciA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxl
LT5pbmRleCgpXTsKICAgICAgICAgICAgICAgICBtX2VzY2FwZWVUb01hdGVyaWFsaXphdGlvbi5h
ZGQoaWRlbnRpZmllciwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRP
U1JIaW50c0ZvclVwZGF0ZSgwLCBOb2RlT3JpZ2luKCksIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3Iu
bV9hdmFpbGFiaWxpdHksIGlkZW50aWZpZXIsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgYm9vbCBjYW5FeGl0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGlu
dHNGb3JVcGRhdGUoMCwgTm9kZU9yaWdpbigpLCBjYW5FeGl0LCBhdmFpbGFiaWxpdHlDYWxjdWxh
dG9yLm1fYXZhaWxhYmlsaXR5LCBpZGVudGlmaWVyLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICBpZiAodmVyYm9zZSkgewpAQCAtMTY4OCw2ICsxNjg5LDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBib29s
IGNhbkV4aXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRp
b24gbG9jYXRpb24gOiBtX2xvY2F0aW9uc0ZvckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbi5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2Mp
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTE2OTcsMTEgKzE2OTksMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29u
dGFpbnMobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+
b3JpZ2luLCBtX2JvdHRvbSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9u
LmNyZWF0ZUhpbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5v
ZGUtPm9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwgbV9ib3R0b20pKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSog
bWF0ZXJpYWxpemF0aW9uIDogbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9NYXRlcmlhbGl6YXRpb25z
LmdldChub2RlKSkgeworICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdp
bi5leGl0T0sgJj0gc3RkOjpleGNoYW5nZShjYW5FeGl0LCBmYWxzZSk7CiAgICAgICAgICAgICAg
ICAgICAgIE5vZGUqIGVzY2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0
ZXJpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6YXRp
b24oYmxvY2ssIG1hdGVyaWFsaXphdGlvbiwgZXNjYXBlZSk7CiAgICAgICAgICAgICAgICAgICAg
IG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0aW9uLnNldChlc2NhcGVlLCBtYXRlcmlhbGl6YXRpb24p
OwpAQCAtMTcxMSw3ICsxNzE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbV9tYXRl
cmlhbGl6YXRpb25TaXRlVG9SZWNvdmVyaWVzLmdldChub2RlKSkKLSAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgY3JlYXRlUmVjb3ZlcnkoYmxvY2ss
IGxvY2F0aW9uLCBub2RlKSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydChub2RlSW5kZXgsIGNyZWF0ZVJlY292ZXJ5KGJsb2NrLCBsb2NhdGlvbiwgbm9kZSwgY2Fu
RXhpdCkpOwogCiAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwdXQgdGhlIE9TUiBoaW50
cyBhZnRlciB0aGUgcmVjb3ZlcmllcywKICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG9u
bHkgd2FudCB0aGUgaGludHMgb25jZSB0aGUgb2JqZWN0IGlzCkBAIC0xNzE5LDEwICsxNzIzLDE3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6YXRpb24g
OiBtX21hdGVyaWFsaXphdGlvblNpdGVUb01hdGVyaWFsaXphdGlvbnMuZ2V0KG5vZGUpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIE5vZGUqIGVzY2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblRvRXNj
YXBlZS5nZXQobWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUt
Pm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2lu
LCBjYW5FeGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSwgZXNjYXBlZSwgbWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgICAg
ICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4aXRPSyAmJiAhY2Fu
RXhpdCkgeworICAgICAgICAgICAgICAgICAgICAvLyBXZSBpbmRpY2F0ZSB0aGF0IHRoZSBleGl0
IHN0YXRlIGlzIGZpbmUgbm93LiBJdCBpcyBPSyBiZWNhdXNlIHdlIHVwZGF0ZWQgdGhlCisgICAg
ICAgICAgICAgICAgICAgIC8vIHN0YXRlIGFib3ZlLiBXZSBuZWVkIHRvIGluZGljYXRlIHRoaXMg
bWFudWFsbHkgYmVjYXVzZSB0aGUgdmFsaWRhdGlvbiBkb2Vzbid0CisgICAgICAgICAgICAgICAg
ICAgIC8vIGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGluZmVyIHRoYXQgdGhlIGV4aXQgc3Rh
dGUgaXMgZmluZS4KKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZShub2RlSW5kZXgsIFNwZWNOb25lLCBFeGl0T0ssIG5vZGUtPm9yaWdpbik7CisgICAgICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMo
bm9kZSkpCiAgICAgICAgICAgICAgICAgICAgIG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0aW9uLnNl
dChub2RlLCBub2RlKTsKIApAQCAtMTc1MCw4ICsxNzYxLDEwIEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvTG93ZXIgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUluZGV4ICsgMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwg
bm9kZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVhdGVIaW50KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCks
IG5vZGVWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAg
ICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSAtPiBOb2RlKiB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShibG9jaywgbG9jYXRpb24pOwpAQCAtMTg3
MSw3ICsxODg0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGRlZi0+dmFsdWUoKTsKICAg
ICB9CiAKLSAgICB2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRl
eCwgTm9kZU9yaWdpbiBvcmlnaW4sIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2Rl
KiBlc2NhcGVlLCBOb2RlKiBtYXRlcmlhbGl6YXRpb24pCisgICAgdm9pZCBpbnNlcnRPU1JIaW50
c0ZvclVwZGF0ZSh1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sJiBj
YW5FeGl0LCBBdmFpbGFiaWxpdHlNYXAmIGF2YWlsYWJpbGl0eSwgTm9kZSogZXNjYXBlZSwgTm9k
ZSogbWF0ZXJpYWxpemF0aW9uKQogICAgIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBmb2xsb3co
KSB0aGUgdmFsdWUgaW4gdGhlIGhlYXAuCiAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dp
bmcgZ3JhcGg6CkBAIC0xOTA1LDcgKzE5MTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogCiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAg
ICAgICAgICAgbm9kZUluZGV4LCBlbnRyeS5rZXkuY3JlYXRlSGludChtX2dyYXBoLCBvcmlnaW4s
IG1hdGVyaWFsaXphdGlvbikpOworICAgICAgICAgICAgICAgIG5vZGVJbmRleCwKKyAgICAgICAg
ICAgICAgICBlbnRyeS5rZXkuY3JlYXRlSGludChtX2dyYXBoLCBvcmlnaW4udGFrZVZhbGlkRXhp
dChjYW5FeGl0KSwgbWF0ZXJpYWxpemF0aW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxpdHkubV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0x
OTE2LDcgKzE5MzAsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2
YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05v
bmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5v
ZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQp
LCBPcEluZm8ob3BlcmFuZCksCiAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5kZWZh
dWx0RWRnZSgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTIwNDIsNyArMjA1Niw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBOb2RlKiBjcmVhdGVSZWNvdmVyeShCYXNpY0Js
b2NrKiBibG9jaywgUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIHdoZXJlKQor
ICAgIE5vZGUqIGNyZWF0ZVJlY292ZXJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBM
b2NhdGlvbiBsb2NhdGlvbiwgTm9kZSogd2hlcmUsIGJvb2wmIGNhbkV4aXQpCiAgICAgewogICAg
ICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIlJlY292ZXJpbmcgIiwgbG9j
YXRpb24sICIgYXQgIiwgd2hlcmUsICJcbiIpOwpAQCAtMjA1MCwxMiArMjA2NCwxNCBAQCBwcml2
YXRlOgogICAgICAgICBOb2RlKiBiYXNlID0gZ2V0TWF0ZXJpYWxpemF0aW9uKGJsb2NrLCBsb2Nh
dGlvbi5iYXNlKCkpOwogICAgICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0
aW9uKTsKIAorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IHdoZXJlLT5vcmlnaW4ud2l0aFNl
bWFudGljKGJhc2UtPm9yaWdpbi5zZW1hbnRpYyk7CisKICAgICAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgICAgICBkYXRhTG9nKCJCYXNlIGlzICIsIGJhc2UsICIgYW5kIHZhbHVlIGlzICIsIHZh
bHVlLCAiXG4iKTsKIAogICAgICAgICBpZiAoYmFzZS0+aXNQaGFudG9tQWxsb2NhdGlvbigpKSB7
CiAgICAgICAgICAgICByZXR1cm4gUHJvbW90ZWRIZWFwTG9jYXRpb24oYmFzZSwgbG9jYXRpb24u
ZGVzY3JpcHRvcigpKS5jcmVhdGVIaW50KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHdoZXJl
LT5vcmlnaW4ud2l0aFNlbWFudGljKGJhc2UtPm9yaWdpbi5zZW1hbnRpYyksIHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgdmFs
dWUpOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChsb2NhdGlvbi5raW5kKCkpIHsKQEAg
LTIwODksNyArMjEwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3Jh
cGguYWRkTm9kZSgKICAgICAgICAgICAgICAgICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAg
ICAgICAgIFB1dEJ5T2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICB3aGVyZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKGRhdGEpLAogICAgICAgICAgICAgICAgICAgICBFZGdlKHN0
b3JhZ2UsIEtub3duQ2VsbFVzZSksCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UoYmFzZSwgS25v
d25DZWxsVXNlKSwKQEAgLTIxMTgsNyArMjEzNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgIFNwZWNOb25lLAogICAgICAg
ICAgICAgICAgIE11bHRpUHV0QnlPZmZzZXQsCi0gICAgICAgICAgICAgICAgd2hlcmUtPm9yaWdp
bi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKSwKKyAgICAgICAgICAgICAgICBv
cmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICBPcEluZm8oZGF0
YSksCiAgICAgICAgICAgICAgICAgRWRnZShiYXNlLCBLbm93bkNlbGxVc2UpLAogICAgICAgICAg
ICAgICAgIHZhbHVlLT5kZWZhdWx0RWRnZSgpKTsKQEAgLTIxMjksNyArMjE0NSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAg
IFNwZWNOb25lLAogICAgICAgICAgICAgICAgIFB1dENsb3N1cmVWYXIsCi0gICAgICAgICAgICAg
ICAgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKSwKKyAg
ICAgICAgICAgICAgICBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAg
ICAgICBPcEluZm8obG9jYXRpb24uaW5mbygpKSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2Us
IEtub3duQ2VsbFVzZSksCiAgICAgICAgICAgICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUlu
c2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjMsNyArMTIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9k
ZSkpIHsKKyAgICAgICAgICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RF
eGl0KSB7CiAgICAgICAgICAgICAgICAgY3VycmVudEVwb2NoLmJ1bXAoKTsKICAgICAgICAgICAg
ICAgICBsYXN0RXhpdGluZ0luZGV4ID0gbm9kZUluZGV4OwogICAgICAgICAgICAgfQpAQCAtMTYw
LDEwICsxNjAsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBl
eGFjdCByZWYgY291bnRzLCBzbyBjcmVhdGluZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZl
IHRvCiAgICAgICAgICAgICAgICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAg
ICAgICAgICAgICAgICAgICBraWxsZWROb2RlLT5wb3N0Zml4UmVmKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgTm9kZSogbGFzdEV4aXRpbmdOb2RlID0gYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5k
ZXgpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5k
ZXggKyAxLCBTcGVjTm9uZSwgUGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nr
LT5hdChsYXN0RXhpdGluZ0luZGV4KS0+b3JpZ2luLCBraWxsZWROb2RlLT5kZWZhdWx0RWRnZSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nTm9kZS0+b3JpZ2luLmZvcklu
c2VydGluZ0FmdGVyKG1fZ3JhcGgsIGxhc3RFeGl0aW5nTm9kZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICBraWxsZWROb2RlLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQgUGhhc2U6OnZhbGlkYXRlKCkKK3sKKyAgICBERkc6
OnZhbGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFwaCwgbV9ncmFwaER1bXBCZWZvcmVQaGFzZSk7Cit9
CisKIHZvaWQgUGhhc2U6OmJlZ2luUGhhc2UoKQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3Nl
VmFsaWRhdGlvbkZhaWx1cmUoKSkgewpAQCAtNTMsNyArNTgsNyBAQCB2b2lkIFBoYXNlOjplbmRQ
aGFzZSgpCiB7CiAgICAgaWYgKCFPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIHZhbGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFwaCwgbV9ncmFw
aER1bXBCZWZvcmVQaGFzZSk7CisgICAgdmFsaWRhdGUoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHByb3RlY3RlZDoKICAgICBWTSYgdm0oKSB7IHJl
dHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJu
IG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2soKSB7
IHJldHVybiBtX2dyYXBoLm1fcHJvZmlsZWRCbG9jazsgfQorCisgICAgLy8gVGhpcyBydW5zIHZh
bGlkYXRpb24sIGFuZCB1c2VzIHRoZSBncmFwaCBkdW1wIGJlZm9yZSB0aGUgcGhhc2UgaWYgcG9z
c2libGUuCisgICAgdm9pZCB2YWxpZGF0ZSgpOwogICAgIAogICAgIGNvbnN0IGNoYXIqIG1fbmFt
ZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY4LDYgKzY2OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9pbnRlcjoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAg
ICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNl
IExvYWRWYXJhcmdzOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1
dFN0YWNrLCBub2RlLT5vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKG9wZXJhbmQsIGZvcm1hdCkpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoaW5jb21pbmcsIHVzZUtpbmRGb3IoZm9ybWF0KSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoaW5jb21pbmcsIHVuY2hlY2tlZFVz
ZUtpbmRGb3IoZm9ybWF0KSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlZmVycmVkLm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAg
ICAgICAgICAgICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNv
bnZlcnNpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTU0FDb252ZXJzaW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3MSw2ICsyNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBLaWxsU3RhY2ssIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgIE9wSW5mbyhub2RlLT51bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJl
cnMgZXhpdC4KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKQEAgLTM0Niw3ICszNDcsMTEgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlE
ZWYtPnZhcmlhYmxlKCk7CiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwog
ICAgICAgICAgICAgICAgICAgICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hG
b3JtYXQoKTsKLSAgICAgICAgICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZv
cihmb3JtYXQpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW4gdW5jaGVj
a2VkIHVzZSBraW5kIGJlY2F1c2UgdGhlIFNldExvY2FsIHdhcyB0dXJuZWQgaW50byBhIENoZWNr
LgorICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHVzZSBhbiB1bmNoZWNrZWQgdXNl
IGJlY2F1c2UgYXQgbGVhc3Qgc29tZXRpbWVzLCB0aGUgZW5kIG9mIHRoZSBibG9jaworICAgICAg
ICAgICAgICAgICAgICAvLyBpcyBub3QgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBVc2VL
aW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwg
VXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYg
KzEzOCw3IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBj
YXNlIEdldFN0YWNrOgogICAgIGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6Cisg
ICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAg
ICBjYXNlIFBoaToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg5Miw2ICsxODkyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSogbm9kZSkKICAgICAgICAgbm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
KworICAgIGNhc2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dp
dGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcxLDYgKzE5NzEsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAorICAgIGNhc2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsK
ICAgICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQo
KSkgewogICAgICAgICBjYXNlIEZsdXNoZWREb3VibGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVK
SVQoSklUQ29tcGlsCiAgICAgLCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUp
CiAgICAgLCBtX3N0cmVhbSgmaml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKICAg
ICAsIG1fbWluaWZpZWRHcmFwaCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCi0gICAgLCBt
X2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzKGZhbHNlKQogewogfQogCkBAIC0xOTYsNyArMTk1LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICgh
bV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1
bXAgPSBlbWl0T1NSRXhpdEZ1enpDaGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7
CiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFpbDsKQEAgLTIxMiw3ICsy
MTAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBm
dXp6SnVtcCA9IGVtaXRPU1JFeGl0RnV6ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlzU2V0
KCkpIHsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IG15SnVtcHNUb0ZhaWw7CkBAIC0y
MjgsNyArMjI1LDYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwog
ewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxh
Y2Vob2xkZXIoKTsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2Nh
bkV4aXQpOwogICAgIHVuc2lnbmVkIGluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0LnNp
emUoKTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmppdENvZGUoKS0+
YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCku
bWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNp
emUoKSkpOwpAQCAtMjM3LDE5ICsyMzMsMTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVj
dWxhdGl2ZUpJVDo6cwogCiBPU1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJj
ZSwgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
IHx8IG1fY2FuRXhpdCk7CiAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
RWRnZSBub2RlVXNlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFT
U0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFp
bCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQg
a2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1h
Y3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXND
aGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNr
KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAK
QEAgLTI1Nyw3ICsyNTAsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNr
KEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25l
ZCByZWNvdmVyeUluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292
ZXJ5KHJlY292ZXJ5KTsKICAgICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAg
ICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291
cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSks
IHRoaXMsIG1fc3RyZWFtLT5zaXplKCksIHJlY292ZXJ5SW5kZXgpKTsKQEAgLTI2NSw3ICsyNTcs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBU
b0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFTU0VS
VChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwg
cmVjb3ZlcnkpOwogfQogCkBAIC0yNzMsNyArMjY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEludmFsaWRhdGlvblBvaQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChtX2NhbkV4aXQpOwogICAgIE9TUkV4aXRDb21waWxhdGlvbklu
Zm8mIGluZm8gPSBtX2ppdC5hcHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7
CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVu
Y291bnRhYmxlSW52YWxpZGF0aW9uLCBKU1ZhbHVlU291cmNlKCksCkBAIC0yODYsNyArMjc2LDYg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogCiB2b2lkIFNwZWN1
bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBK
U1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobV9pc0No
ZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIGlmICghbV9jb21waWxlT2th
eSkKICAgICAgICAgcmV0dXJuOwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJl
Z3MsIG5vZGUsIG1faml0Lmp1bXAoKSk7CkBAIC0yOTcsNyArMjg2LDYgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6dGVybWluYXRlU3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1Zh
bHVlUmVncywgRWRnZSBub2RlVXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
a2luZCwganNWYWx1ZVJlZ3MsIG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQ2Nyw5ICsxNDU1
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAg
ICAgICAgIHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSwKICAgICAgICAgICAgICAgICBmb3JtYXQp
KTsKICAgICB9Ci0gICAgCi0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmln
aW4oKTsKLSAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oKTsKKwor
ICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwogICAgIAogICAgIGZvciAobV9pbmRleEluQmxv
Y2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9j
aykgewogICAgICAgICBtX2N1cnJlbnROb2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2sp
OwpAQCAtMTQ4MSwxNSArMTQ2OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Vy
cmVudEJsb2NrCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
QVNTRVJUX0RJU0FCTEVEKQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gdHJ1ZTsgLy8gRXNzZW50
aWFsbHkgZGlzYWJsZSB0aGUgYXNzZXJ0aW9ucy4KLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
bV9jYW5FeGl0ID0gbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKLSAgICAg
ICAgCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgbV9q
aXQuc2V0Rm9yTm9kZShtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhp
dFRhcmdldCA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5mb3JFeGl0OwotICAgICAgICBtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAg
ICAgICAgbV9vcmlnaW4gPSBtX2N1cnJlbnROb2RlLT5vcmlnaW47CisgICAgICAgIGlmICh2YWxp
ZGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgbV9vcmlnaW4uZXhpdE9LICY9IG1heUV4aXQo
bV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50Tm9kZSkgPT0gRXhpdHM7CiAgICAgICAgIG1fbGFzdEdl
bmVyYXRlZE5vZGUgPSBtX2N1cnJlbnROb2RlLT5vcCgpOwogICAgICAgICAKICAgICAgICAgQVNT
RVJUKG1fY3VycmVudE5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwpAQCAtMTUzNiw5ICsxNTE5LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudE5v
ZGUpOwotICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSB0cnVlOwotICAgIG1fY29kZU9y
aWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKDApOwotICAgIG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlID0gQ29kZU9yaWdpbigwKTsKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29k
ZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgdHJ1ZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1faml0LmNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICBO
b2RlKiBub2RlID0gbV9qaXQuZ3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKQEAgLTE2MDEsNyArMTU4
Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAg
fQogI2VuZGlmCiAgICAgfQotICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsK
KworICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbigpOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1OCw3ICsyNDU4LDYg
QEAgcHVibGljOgogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50
Tm9kZTsKICAgICBOb2RlVHlwZSBtX2xhc3RHZW5lcmF0ZWROb2RlOwotICAgIGJvb2wgbV9jYW5F
eGl0OwogICAgIHVuc2lnbmVkIG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBo
eXNpY2FsIHJlZ2lzdGVyIG1hcHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9n
ZW5lcmF0aW9uSW5mbzsKQEAgLTI0NzksOCArMjQ3OCw3IEBAIHB1YmxpYzoKICAgICB9OwogICAg
IFZlY3RvcjxCcmFuY2hSZWNvcmQsIDg+IG1fYnJhbmNoZXM7CiAKLSAgICBDb2RlT3JpZ2luIG1f
Y29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZTsKKyAgICBOb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIAogICAgIEluUGxhY2VB
YnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJz
dHJhY3RTdGF0ZT4gbV9pbnRlcnByZXRlcjsKQEAgLTI0ODgsOCArMjQ4Niw2IEBAIHB1YmxpYzoK
ICAgICBWYXJpYWJsZUV2ZW50U3RyZWFtKiBtX3N0cmVhbTsKICAgICBNaW5pZmllZEdyYXBoKiBt
X21pbmlmaWVkR3JhcGg7CiAgICAgCi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
OwotICAgIAogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+LCA4
PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxh
bj4gbV9wbGFuczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4
ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRp
b25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMCw3ICszMTAsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNh
c2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBh
bGxvY2F0ZSBidXQgdGhlbiBydW4gdGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAgICAgICAgICAg
aW5zZXJ0QmFycmllcihtX25vZGVJbmRleCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsK
KyAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyV2l0aEludmFsaWRFeGl0KG1fbm9kZUluZGV4
ICsgMSwgRWRnZShtX25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CiAgICAg
ICAgICAgICAgICAgbV9ub2RlLT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTQ3NCwxMCArNDc0LDE1IEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAg
ICAgICAgIEluc2VydGluZyBiYXJyaWVyLlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJpZXIobV9u
b2RlSW5kZXgsIGJhc2Uubm9kZSgpKTsKKyAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRl
eCwgYmFzZSk7CiAgICAgfQotICAgIAotICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBu
b2RlSW5kZXgsIE5vZGUqIGJhc2UpCisKKyAgICB2b2lkIGluc2VydEJhcnJpZXJXaXRoSW52YWxp
ZEV4aXQodW5zaWduZWQgbm9kZUluZGV4LCBFZGdlIGJhc2UpCisgICAgeworICAgICAgICBpbnNl
cnRCYXJyaWVyKG5vZGVJbmRleCwgYmFzZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgaW5z
ZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0
cnVlKQogICAgIHsKICAgICAgICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3Vs
ZCBvbmx5IGluc2VydCB0aGUgYmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KICAgICAg
ICAgaWYgKCFyZWFsbHlJbnNlcnRCYXJyaWVycygpKQpAQCAtNDg1LDggKzQ5MCwxOCBAQCBwcml2
YXRlOgogICAgICAgICAKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1cHBvcnQgU3RvcmVC
YXJyaWVyKFVudHlwZWRVc2U6KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNvb2wuCiAgICAgICAg
IC8vIEJ1dCByaWdodCBub3cgd2UgZG9uJ3QgbmVlZCBpdC4KKworICAgICAgICAvLyBJZiB0aGUg
b3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBub3QgaGF2ZSBhIGNo
ZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250ZXh0CisgICAgICAgIC8vIHdoZXJlIGNoZWNrcyBhcmUg
bm90IGFsbG93ZWQuIElmIHdlIGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEgYmFycmllciBhdCBh
biBFeGl0SW52YWxpZAorICAgICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJhcnJpZXIgbmVlZGVk
IGEgY2hlY2ssIHRoZW4gd2UgY291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9pc3RpbmcgdGhlIGNo
ZWNrLgorICAgICAgICAvLyBUaGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5vdy4KKyAgICAgICAg
aWYgKGJhc2UudXNlS2luZCgpICE9IEtub3duQ2VsbFVzZSkgeworICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAg
ICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVzZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNO
b25lLCBTdG9yZUJhcnJpZXIsIG1fbm9kZS0+b3JpZ2luLCBFZGdlKGJhc2UsIENlbGxVc2UpKTsK
KyAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5v
cmlnaW4udGFrZVZhbGlkRXhpdChleGl0T0spLCBiYXNlKTsKIAogICAgICAgICBiYXNlLT5zZXRF
cG9jaChtX2N1cnJlbnRFcG9jaCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4
KTsKICAgICAgICAgICAgIGlmICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBpbmRleEZvckNoZWNrcyA9IFVJTlRfTUFYOworICAgICAgICAg
ICAgTm9kZU9yaWdpbiBvcmlnaW5Gb3JDaGVja3M7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJ
bkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleElu
QmxvY2spOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcmln
aW4uZXhpdE9LKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJ
bkJsb2NrOworICAgICAgICAgICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3MgPSBub2RlLT5vcmln
aW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IC8vIEJlIGNhcmVmdWwgbm90IHRvIHVzZSAnbm9kZScgYWZ0ZXIgYXBwZW5kaW5nIHRvIHRoZSBn
cmFwaC4gSW4gdGhvc2Ugc3dpdGNoCiAgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2Ug
bmVlZCB0byBhcHBlbmQsIHdlIGZpcnN0IGNhcmVmdWxseSBleHRyYWN0IGV2ZXJ5dGhpbmcgd2Ug
bmVlZAogICAgICAgICAgICAgICAgIC8vIGZyb20gdGhlIG5vZGUsIGJlZm9yZSBkb2luZyBhbnkg
YXBwZW5kaW5nLgpAQCAtMTcwLDEzICsxNzgsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVj
dHVyZSwgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tz
LCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1hbnRpYyhvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52
YWx1ZS5tX3N0cnVjdHVyZSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hp
bGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0
ZXItPnZhbHVlLm1fYXJyYXlNb2RlSXNWYWxpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGl0ZXItPnZhbHVlLm1fYXJyYXlNb2RlSG9pc3RpbmdPa2F5KTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrQXJyYXksIG9yaWdpbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNr
QXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLndpdGhT
ZW1hbnRpYyhvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9w
SW5mbyhpdGVyLT52YWx1ZS5tX2FycmF5TW9kZS5hc1dvcmQoKSksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUg
IkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTg1LDEz
ICsxODYsMzAgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSBibG9jay0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pc1NldCgpID09IG5vZGUt
Pm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIW1heUV4aXQobV9ncmFwaCwgbm9kZSkgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQo
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhKCFub2RlLT5vcmlnaW4uZm9y
RXhpdC5pc1NldCgpICYmIG5vZGUtPm9yaWdpbi5leGl0T0spKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICEobWF5RXhpdChtX2dyYXBoLCBub2RlKSA9PSBFeGl0cyAmJiAhbm9k
ZS0+b3JpZ2luLmV4aXRPSykpOworCisgICAgICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgTm9kZSogcHJldmlvdXNOb2RlID0gYmxvY2stPmF0KGkgLSAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgcHJl
dmlvdXNOb2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgIW5vZGUtPm9yaWdpbi5leGl0
T0sKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05v
ZGUtPm9yaWdpbi5mb3JFeGl0KTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAg
ICAgICAgICAgICAgICAgICAgICAobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAhKCFw
cmV2aW91c05vZGUtPm9yaWdpbi5leGl0T0sgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdp
bi5mb3JFeGl0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzU3RydWN0dXJlKCkgfHwgISFub2Rl
LT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+
aGFzQ2VsbE9wZXJhbmQoKSB8fCBub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpLmlzQ2VsbCgp
KTsKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNDZWxsT3BlcmFu
ZCgpIHx8ICEhbm9kZS0+Y2VsbE9wZXJhbmQoKS0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkg
JiBOb2RlSGFzVmFyQXJncykpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGls
ZDIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmNo
aWxkMygpKTsKQEAgLTIxMCwxMCArMjI4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBVbnR5cGVkVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEludDMyVXNlOgorICAgICAgICAgICAgICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5V
c2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEiQmFkIHVzZSBraW5kIik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxp
dGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBN
b3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNl
IFBoYW50b206CiAgICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw4IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAg
ICAgICAgICAgICBBdmFpbGFiaWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChpKSkpOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZU9yaWdp
bkZvckV4aXRUYXJnZXQgPSBDb2RlT3JpZ2luKDApOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oMCk7CiAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7Cisg
ICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDAp
LCB0cnVlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1
bWVudHNbaV07CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGkpOwpAQCAtMzkzLDggKzM5Miw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5k
ZXgpOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fbm9kZS0+b3JpZ2lu
LnNlbWFudGljOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9ub2RlLT5v
cmlnaW4uZm9yRXhpdDsKKyAgICAgICAgbV9vcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKICAgICAg
ICAgCiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAg
ICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJcbiIpOwpAQCAtODQxLDYgKzgzOSw3IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoK
ICAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoK
ICAgICAgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTg3OCwxNSArODc3LDE4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5zZXQobG93RG91YmxlKG1fbm9kZS0+Y2hp
bGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJ
bnQzMlVzZToKKyAgICAgICAgY2FzZSBLbm93bkludDMyVXNlOgogICAgICAgICAgICAgbV9vdXQu
c2V0KGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgICAgIG1fb3V0LnNl
dChsb3dJbnQ1MihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJvb2xl
YW5Vc2U6CiAgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgp
KSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVz
ZToKKyAgICAgICAgY2FzZSBLbm93bkNlbGxVc2U6CiAgICAgICAgICAgICBtX291dC5zZXQobG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgVW50eXBlZFVzZToKQEAgLTQ3NTIsMTAgKzQ3NTQsMTIgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5
OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwgIlxuIik7CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0
YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50
YWJsZUludmFsaWRhdGlvbiwgSW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlKCksCi0gICAgICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwKKyAgICAgICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1f
b3JpZ2luLnNlbWFudGljLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMu
bnVtYmVyT2ZBcmd1bWVudHMoKSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9j
YWxzLm51bWJlck9mTG9jYWxzKCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9z
ckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CkBAIC04MDkzLDYgKzgwOTcs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292
ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAg
ICB9CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRP
Syk7CiAgICAgICAgIAogICAgICAgICBpZiAoZG9PU1JFeGl0RnV6emluZygpKSB7CiAgICAgICAg
ICAgICBMVmFsdWUgbnVtYmVyT2ZGdXp6Q2hlY2tzID0gbV9vdXQuYWRkKApAQCAtODExNyw3ICs4
MTIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1h
dCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwK
LSAgICAgICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlLAorICAgICAgICAgICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50
aWMsCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3Vt
ZW50cygpLAogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZM
b2NhbHMoKSkpOwogICAgICAgICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQo
T1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsKQEAgLTg2MTIsOSArODYxOCw4IEBAIHByaXZhdGU6
CiAgICAgQmFzaWNCbG9jayogbV9oaWdoQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9uZXh0SGln
aEJsb2NrOwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dExvd0Jsb2NrOwotICAgIAotICAgIENvZGVP
cmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlOworCisgICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKICAgICB1bnNp
Z25lZCBtX25vZGVJbmRleDsKICAgICBOb2RlKiBtX25vZGU7CiAgICAgCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRp
b24uaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTU5LDggKzU5LDEwIEBAIHZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0
VmVjdG9yVHlwZSYKICAgICAgICAgcmV0dXJuOwogICAgIHRhcmdldC5ncm93KHRhcmdldC5zaXpl
KCkgKyBpbnNlcnRpb25zLnNpemUoKSk7CiAgICAgc2l6ZV90IGxhc3RJbmRleCA9IHRhcmdldC5z
aXplKCk7CisgICAgc2l6ZV90IG9yaWdpbmFsVGFyZ2V0U2l6ZSA9IHRhcmdldC5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaW5kZXhJbkluc2VydGlvbnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5k
ZXhJbkluc2VydGlvbnMtLTspIHsKICAgICAgICAgQVNTRVJUKCFpbmRleEluSW5zZXJ0aW9ucyB8
fCBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpID49IGluc2VydGlvbnNbaW5k
ZXhJbkluc2VydGlvbnMgLSAxXS5pbmRleCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvcmln
aW5hbFRhcmdldFNpemUsIGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgPCBv
cmlnaW5hbFRhcmdldFNpemUpOwogICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlv
bnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAgICAg
ICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAgICBm
b3IgKHNpemVfdCBpID0gbGFzdEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259902</attachid>
            <date>2015-08-25 16:49:54 -0700</date>
            <delta_ts>2015-08-25 18:39:06 -0700</delta_ts>
            <desc>few more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99429</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBE
RkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAg
Ki87IH07CisJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjND
MUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovOyB9Owor
CQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBv
c3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM0Niw2ICszNDgsNyBAQAogCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29w
eVRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QTYyODMxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3Bw
ICovOyB9OwogCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyogREZH
Tm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87IH07
CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAv
KiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAw
NDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMjEwOCw2ICsyMTExLDggQEAKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0JEMUI2MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9
IGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
ZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zl
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTksNiArMjE2NCw3IEBACiAJ
CTBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29weVRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuY3BwOyBwYXRoID0g
ZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVB
NjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQz
QjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdOb2RlT3JpZ2luLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJ
VFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAz
RTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MTE5LDYgKzUxMjUsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyaXplLmggKi8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJTZXQuY3BwICovLAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyU2V0LmggKi8sCisJCQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIg
LyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4
QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcy
MDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLywKQEAgLTUyNDAsNiArNTI0OCw3IEBACiAJCQkJ
MEZCNEI1MUYxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGVBbGxvY2F0b3IuaCAqLywKIAkJCQkw
RkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1
ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCisJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLApAQCAtNjE0OCw2
ICs2MTU3LDcgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
M0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MzgxLDYgKzczOTEsNyBAQAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1
Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAy
MEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5
MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJz
dHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJG
RCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3
NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0
LDYgKzc1NDUsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklU
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyog
RXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVEMDg1RDFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5
MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5NzhCM0IxQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkUwNTAyNTFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBw
YXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5v
bi1UT1AgcGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5
bG9hZC4KIC8vIC0gSGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRl
U3RhdGUgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBUT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55
IG90aGVyIGtpbmQgd2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9m
IHRoZSBzYW1lIGtpbmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTAsNiArMjQ1
MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwV2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsMTYgKzQ4NCwyMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gdmFyYXJnc0RhdGEtPm9mZnNldCA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3Mg
Y2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudCA9IGlu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IHZhcmFyZ3NEYXRhLT5vZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJn
c0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50KSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNr
LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEt
PmNvdW50LCBGbHVzaGVkSW50MzIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdl
KGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZShhcmd1bWVudENvdW50LCBLbm93bkludDMyVXNlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIG5vdCBpbmNs
dWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCkBA
IC01MTQsNyArNTE5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBH
ZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBpZgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRv
cnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbApAQCAtNTI1LDcgKzUzMSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5kZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2lu
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLCBqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC01MzcsMTQgKzU0MywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNo
ZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2lu
LCBPcEluZm8ocmVnLm9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVk
Z2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0
aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVk
ZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZH
SklUQ29kZS5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTM2Miw2ICszNjMsOSBA
QCBwcml2YXRlOgogICAgIHsKICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3Bl
cmFuZC5vZmZzZXQoKSksIHZhbHVlKTsKIAorICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1v
cmUgYmVjYXVzZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCisgICAgICAgIG1fZXhp
dE9LID0gZmFsc2U7CisKICAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQoY3VycmVudENv
ZGVPcmlnaW4oKSwgb3BlcmFuZCwgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgaWYgKHNldE1v
ZGUgPT0gTm9ybWFsU2V0KSB7CkBAIC0zNzQsOCArMzc4LDE0IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpCiAgICAgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKQorICAgICAgICAvLyBX
ZSBwbGF5IGhhY2tzIHdpdGggbV9leGl0T0sgaGVyZS4gV2Uga25vdyB0aGF0IHRoZSBTZXRMb2Nh
bHMgd2UgYXJlIGVtaXR0aW5nIGFyZSBhbHJlYWR5CisgICAgICAgIC8vIHJlY29yZGVkIGluIE9T
UiBleGl0IHN0YXRlLCBzbyB0aGV5IGFyZW4ndCByZWFsIGVmZmVjdHMuIFNvLCB3ZSBkb24ndCB3
YW50IHRoZW0gdG8gaGF2ZSBhbnkKKyAgICAgICAgLy8gZWZmZWN0IG9uIG1fZXhpdE9LLgorICAg
ICAgICBib29sIGV4aXRPS0JlZm9yZSA9IG1fZXhpdE9LOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9zZXRMb2NhbFF1ZXVlLnNpemUoKTsgKytpKSB7CiAgICAgICAgICAgICBt
X3NldExvY2FsUXVldWVbaV0uZXhlY3V0ZSh0aGlzKTsKKyAgICAgICAgICAgIG1fZXhpdE9LID0g
ZXhpdE9LQmVmb3JlOworICAgICAgICB9CiAgICAgICAgIG1fc2V0TG9jYWxRdWV1ZS5yZXNpemUo
MCk7CiAgICAgfQogCkBAIC02NTEsMTUgKzY2MSwxNyBAQCBwcml2YXRlOgogCiAgICAgTm9kZU9y
aWdpbiBjdXJyZW50Tm9kZU9yaWdpbigpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIHNldCB0aGUgZm9yRXhpdCBvcmlnaW4gb25seSBvbiB0aG9zZSBub2RlcyB0aGF0IGNhbiBl
eGl0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTQ1MjA0CiAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWM7CisgICAgICAgIENvZGVPcmlnaW4g
Zm9yRXhpdDsKKwogICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWNPcmlnaW4uaXNTZXQoKSkK
ICAgICAgICAgICAgIHNlbWFudGljID0gbV9jdXJyZW50U2VtYW50aWNPcmlnaW47CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHNlbWFudGljID0gY3VycmVudENvZGVPcmlnaW4oKTsKLSAgICAg
ICAgCi0gICAgICAgIHJldHVybiBOb2RlT3JpZ2luKHNlbWFudGljLCBjdXJyZW50Q29kZU9yaWdp
bigpLCB0cnVlKTsKKworICAgICAgICBmb3JFeGl0ID0gY3VycmVudENvZGVPcmlnaW4oKTsKKwor
ICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRpYywgZm9yRXhpdCwgbV9leGl0T0spOwog
ICAgIH0KICAgICAKICAgICBCcmFuY2hEYXRhKiBicmFuY2hEYXRhKHVuc2lnbmVkIHRha2VuLCB1
bnNpZ25lZCBub3RUYWtlbikKQEAgLTY3Nyw2ICs2ODksMTggQEAgcHJpdmF0ZToKICAgICAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgICAgIGRh
dGFMb2coIiAgICAgICAgYXBwZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6b3BOYW1lKG5vZGUt
Pm9wKCkpLCAiXG4iKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVuZChub2RlKTsKKyAg
ICAgICAgY2xvYmJlcml6ZSgKKyAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUsIE5vT3BDbG9iYmVy
aXplKCksCisgICAgICAgICAgICBbJl0gKGNvbnN0IEFic3RyYWN0SGVhcCYgaGVhcCkgeworICAg
ICAgICAgICAgICAgIC8vIFdyaXRlcyB0byBTaWRlU3RhdGUgYXJlIG5vdCBvYnNlcnZhYmxlLgor
ICAgICAgICAgICAgICAgIGlmIChoZWFwLmlzU3VidHlwZU9mKFNpZGVTdGF0ZSkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgIC8vIFdlIGFzc3VtZSBhbGwg
b3RoZXIgd3JpdGVzIGFyZSBvYnNlcnZhYmxlLCBhbmQgc28gaWYgd2UgdHJpZWQgdG8gZXhpdCBh
ZnRlciB0aGVtCisgICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgc2FtZSBvcmlnaW4gdGhlbiB3
ZSdkIGNhdXNlIHRoYXQgZWZmZWN0IHRvIHJlcGVhdC4KKyAgICAgICAgICAgICAgICBtX2V4aXRP
SyA9IGZhbHNlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkp
OwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgCkBAIC05MDAsNiArOTI0LDggQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKICAgICAvLyBUaGUgc2VtYW50
aWMgb3JpZ2luIG9mIHRoZSBjdXJyZW50IG5vZGUgaWYgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJl
bnQgSW5kZXguCiAgICAgQ29kZU9yaWdpbiBtX2N1cnJlbnRTZW1hbnRpY09yaWdpbjsKKyAgICAv
LyBUcnVlIGlmIGl0J3MgT0sgdG8gT1NSIGV4aXQgcmlnaHQgbm93LgorICAgIGJvb2wgbV9leGl0
T0sgeyBmYWxzZSB9OwogCiAgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnRVbmRlZmluZWQ7CiAg
ICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnROdWxsOwpAQCAtMTA1Myw2ICsxMDc5LDcgQEAgcHJp
dmF0ZToKIAogI2RlZmluZSBMQVNUX09QQ09ERShuYW1lKSBcCiAgICAgbV9jdXJyZW50SW5kZXgg
Kz0gT1BDT0RFX0xFTkdUSChuYW1lKTsgXAorICAgIG1fZXhpdE9LID0gZmFsc2U7IFwKICAgICBy
ZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nCiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBraW5kKQpAQCAtMTMyNCw2ICsxMzUxLDE1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2EKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdE9wZXJh
bmQpOwogICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQogICAgICAgICByZXN1bHRSZWcgPSBt
X2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0UmVnKTsKKworICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxscHRyOworICAgIGlmIChjYWxsZWUuaXND
bG9zdXJlQ2FsbCgpKSB7CisgICAgICAgIE5vZGUqIGNhbGxlZVNldCA9IHNldCgKKyAgICAgICAg
ICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxlZSksIGNh
bGxUYXJnZXROb2RlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgIAorICAgICAgICBjYWxs
ZWVWYXJpYWJsZSA9IGNhbGxlZVNldC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIGNh
bGxlZVZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7CisgICAgfQogICAgIAog
ICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAgdGhpcywgY29k
ZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3JhcGgubGFzdEJsb2NrKCksIGNhbGxlZS5mdW5jdGlvbigp
LCByZXN1bHRSZWcsCkBAIC0xMzMzLDYgKzEzNjksOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpp
bmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRl
eDsKICAgICBtX2N1cnJlbnRJbmRleCA9IDA7CiAKKyAgICAvLyBBdCB0aGlzIHBvaW50LCBpdCdz
IGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgIG1fZXhpdE9LID0gdHJ1ZTsKKwogICAgIElubGlu
ZVZhcmlhYmxlRGF0YSBpbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgaW5saW5lVmFyaWFibGVEYXRh
LmlubGluZUNhbGxGcmFtZSA9IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lOwog
ICAgIGlubGluZVZhcmlhYmxlRGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBhcmd1bWVudFBv
c2l0aW9uU3RhcnQ7CkBAIC0xMzQyLDIwICsxMzgxLDE3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmlubGluZUNhbGwoTm9kZSogY2EKICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVD
YWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgPT0gY2FsbGVlLmlzQ2xvc3VyZUNhbGwo
KSk7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKLSAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lz
dGVyKEpTU3RhY2s6OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVOYWtlZFNldCkt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAKLSAgICAgICAgY2FsbGVlVmFyaWFibGUt
Pm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsKLSAgICAgICAgCisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxlZVZhcmlhYmxlKTsKICAgICAgICAgaW5saW5lVmFyaWFibGVEYXRhLmNhbGxl
ZVZhcmlhYmxlID0gY2FsbGVlVmFyaWFibGU7CiAgICAgfQogICAgIAogICAgIG1fZ3JhcGgubV9p
bmxpbmVWYXJpYWJsZURhdGEuYXBwZW5kKGlubGluZVZhcmlhYmxlRGF0YSk7Ci0gICAgCisKICAg
ICBwYXJzZUNvZGVCbG9jaygpOwogICAgIGNsZWFyQ2FjaGVzKCk7IC8vIFJlc2V0IG91ciBzdGF0
ZSBub3cgdGhhdCB3ZSdyZSBiYWNrIHRvIHRoZSBvdXRlciBjb2RlLgogICAgIAogICAgIG1fY3Vy
cmVudEluZGV4ID0gb2xkSW5kZXg7CisgICAgbV9leGl0T0sgPSBmYWxzZTsKICAgICAKICAgICAv
LyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMgYmxvY2tzLCB0aGVu
IHdlIGhhdmUgbGlua2luZyB0byBkby4KICAgICBpZiAoaW5saW5lU3RhY2tFbnRyeS5tX2NhbGxz
aXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubGFzdEJsb2NrKCkpIHsKQEAgLTE3MjQsNiArMTc2MCwx
MSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICBpZiAodmVyYm9z
ZSkKICAgICAgICAgZGF0YUxvZygiQ2FsbGVlIGlzIGdvaW5nIHRvIGJlICIsIGNhbGxlZVJlZywg
IlxuIik7CiAgICAgc2V0RGlyZWN0KGNhbGxlZVJlZywgY2FsbFRhcmdldE5vZGUsIEltbWVkaWF0
ZVNldFdpdGhGbHVzaCk7CisKKyAgICAvLyBJdCdzIE9LIHRvIGV4aXQgcmlnaHQgbm93LCBldmVu
IHRob3VnaCB3ZSBzZXQgc29tZSBsb2NhbHMuIFRoYXQncyBiZWNhdXNlIHRob3NlIGxvY2FscyBh
cmUgbm90CisgICAgLy8gdXNlci12aXNpYmxlLgorICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICBh
ZGRUb0dyYXBoKEV4aXRPSyk7CiAgICAgCiAgICAgU3dpdGNoRGF0YSYgZGF0YSA9ICptX2dyYXBo
Lm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hDZWxsOwpAQCAtMTc4
MSw2ICsxODIyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAg
ICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX2dyYXBoLmZyZWV6
ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0KCkpKTsKICAgICAgICAgbV9jdXJyZW50SW5kZXgg
PSBuZXh0T2Zmc2V0OworICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgIHByb2Nlc3NT
ZXRMb2NhbFF1ZXVlKCk7IC8vIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIGludHJpbnNp
Y3MsIHNpbmNlIG5vcm1hbCBpbmxpbmVkIGNvZGUgd2lsbCBsZWF2ZSBhbiBlbXB0eSBxdWV1ZS4K
ICAgICAgICAgYWRkVG9HcmFwaChKdW1wKTsKICAgICAgICAgaWYgKHZlcmJvc2UpCkBAIC0xNzk1
LDYgKzE4MzcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICBS
ZWZQdHI8QmFzaWNCbG9jaz4gc2xvd1BhdGhCbG9jayA9IGFkb3B0UmVmKAogICAgICAgICBuZXcg
QmFzaWNCbG9jayhVSU5UX01BWCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBQTmFOKSk7
CiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRPZmZzZXQ7CisgICAgbV9leGl0T0sgPSB0cnVlOwog
ICAgIGRhdGEuZmFsbFRocm91Z2ggPSBCcmFuY2hUYXJnZXQoc2xvd1BhdGhCbG9jay5nZXQoKSk7
CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhzbG93UGF0aEJsb2NrKTsKICAgICBpZiAodmVyYm9z
ZSkKQEAgLTE4MTYsNiArMTg1OSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgIH0KIAogICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKKyAgICBtX2V4
aXRPSyA9IHRydWU7IC8vIE9yaWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUgdG8gZXhpdCBhZ2Fp
bi4KICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgIGFkZFRvR3JhcGgoSnVtcCk7CiAg
ICAgbGFuZGluZ0Jsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOwpAQCAtMTgzMyw2ICsxODc3
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgICAgIGxhbmRp
bmdCbG9ja3NbaV0tPnRlcm1pbmFsKCktPnRhcmdldEJsb2NrKCkgPSBjb250aW51YXRpb25CbG9j
ay5nZXQoKTsKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNldDsKKyAgICBtX2V4
aXRPSyA9IHRydWU7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygi
RG9uZSBpbmxpbmluZyAoaGFyZCkuXG4iKTsKQEAgLTI3MTQsNiArMjc1OSwxMCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIC8vICAgIHNob3J0Y3V0LgogICAgIGlu
dCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemU7CiAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIrKyksIGJhc2UsIElt
bWVkaWF0ZU5ha2VkU2V0KTsKKworICAgIC8vIFdlJ3ZlIHNldCBzb21lIGxvY2FscywgYnV0IHRo
ZXkgYXJlIG5vdCB1c2VyLXZpc2libGUuIEl0J3Mgc3RpbGwgT0sgdG8gZXhpdCBmcm9tIGhlcmUu
CisgICAgbV9leGl0T0sgPSB0cnVlOworICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsKICAgICAKICAg
ICBoYW5kbGVDYWxsKAogICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENhbGwsIElubGluZUNh
bGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpLApAQCAtMjg2
OSw2ICsyOTE4LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAg
ICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKysp
LCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
bmV4dFJlZ2lzdGVyKyspLCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOworCisgICAgICAgIC8v
IFdlJ3ZlIHNldCBzb21lIGxvY2FscywgYnV0IHRoZXkgYXJlIG5vdCB1c2VyLXZpc2libGUuIEl0
J3Mgc3RpbGwgT0sgdG8gZXhpdCBmcm9tIGhlcmUuCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsK
KyAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOwogICAgIAogICAgICAgICBoYW5kbGVDYWxsKAog
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIENhbGwsIElubGluZUNhbGxG
cmFtZTo6U2V0dGVyQ2FsbCwKQEAgLTI5MDEsMTIgKzI5NTQsMTUgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlciA9
IG1fdm0tPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9
IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpOwog
ICAgIHVuc2lnbmVkIGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKLSAgICAKKwogICAgIC8v
IElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJvZHVjZSBtYXJrZXJzIGZvciBh
cmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8gdXMgdG8gdHJhY2sgaWYgYSB1c2Ugb2YgYW4g
YXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3NlZCwgYXMKICAgICAvLyBv
cHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHkuCiAgICAgaWYgKG1fY3Vy
cmVudEJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkgJiYgIWlubGluZUNhbGxGcmFtZSgpKSB7CiAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1lbnRzKTsKKyAgICAg
ICAgLy8gV2Ugd2lsbCBlbWl0IFNldEFyZ3VtZW50IG5vZGVzLiBUaGV5IGRvbid0IGV4aXQsIGJ1
dCB3ZSdyZSBhdCB0aGUgdG9wIG9mIGFuIG9wX2VudGVyIHNvCisgICAgICAgIC8vIGV4aXRPSyA9
IHRydWUuCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoYXJndW1l
bnQpKTsKQEAgLTI5MjIsNiArMjk3OCwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgLy8gV2Un
cmUgc3RhcmluZyBhIG5ldyBieXRlY29kZSBpbnN0cnVjdGlvbi4gSGVuY2UsIHdlIG9uY2UgYWdh
aW4gaGF2ZSBhIHBsYWNlIHRoYXQgd2UgY2FuIGV4aXQKKyAgICAgICAgLy8gdG8uCisgICAgICAg
IG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgCiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVl
KCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0
aW9ucy4KQEAgLTI5OTgsNyArMzA1OCw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKIAogICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1ZSogZnJvemVuID0g
bV9ncmFwaC5mcmVlemUoY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKGZyb3plbiksIGNhbGxlZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGZyb3plbikpKTsKIAogICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24qPihjYWNoZWRGdW5j
dGlvbik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQyMCw2ICszNDc5LDcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaWYgKCFjb21waWxl
ZEFzR2V0QnlJZCkgewogICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRB
cnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxlLCBBcnJheTo6UmVh
ZCk7CiAgICAgICAgICAgICAgICAgTm9kZSogZ2V0QnlWYWwgPSBhZGRUb0dyYXBoKEdldEJ5VmFs
LCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBiYXNlLCBw
cm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsgLy8gR2V0QnlWYWwg
bXVzdCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIHNpbmNlIEZpeHVw
UGhhc2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBnZXRCeVZhbCk7CiAgICAg
ICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQ
aGFzZSgpKQotICAgICAgICAgICAgICAgIHZhbGlkYXRlKG1fZ3JhcGgpOworICAgICAgICAgICAg
ICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIH0gd2hpbGUgKGlubmVyQ2hhbmdlZCk7CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gb3V0ZXJDaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsNiAr
Mjc4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAg
ICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4
aXRPSzoKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBQ
aGk6CkBAIC0zOTYsNiArMzk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9k
ZSogbm9kZQogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSB3ZWlyZC4gSW4gZmFjdCwgU3RyQ2F0
IGhhcyB2ZXJ5IGxpbWl0ZWQgZWZmZWN0ZnVsbmVzcyBiZWNhdXNlIHdlIG9ubHkKICAgICAgICAg
Ly8gcGFzcyBpdCBwcmltaXRpdmUgdmFsdWVzLiBCdXQsIHJpZ2h0IG5vdywgdGhlIGNvbXBpbGVy
IGlzbid0IHNtYXJ0IGVub3VnaCB0byBrbm93IHRoaXMKICAgICAgICAgLy8gYW5kIHRoYXQncyBw
cm9iYWJseSBPSy4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDg0NDMKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRl
KEhlYXApOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4
aXRTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdDbG9iYmVy
aXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5j
bHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2Jvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQoreworICAg
IC8vIFRoZXJlIGFyZSBjZXJ0YWluIG5vZGVzIHdob3NlIGVmZmVjdCBvbiB0aGUgZXhpdCBzdGF0
ZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHdoYXQgdGhleQorICAgIC8vIG5vcm1hbGx5IGNsb2Ji
ZXIuCisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBNb3ZIaW50OgorICAgIGNh
c2UgWm9tYmllSGludDoKKyAgICBjYXNlIFB1dEhpbnQ6CisgICAgY2FzZSBLaWxsU3RhY2s6Cisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBTZXRMb2NhbDoKKyAgICBjYXNlIFB1dFN0
YWNrOgorICAgICAgICAvLyBUaGVzZSBub2RlcyB3cml0ZSB0byB0aGUgc3RhY2ssIGJ1dCB0aGV5
IG1heSBvbmx5IGRvIHNvIGFmdGVyIHdlIGhhdmUgYWxyZWFkeSBoYWQgYSBNb3ZIaW50CisgICAg
ICAgIC8vIGZvciB0aGUgZXhhY3Qgc2FtZSB2YWx1ZSBhbmQgdGhlIHNhbWUgc3RhY2sgbG9jYXRp
b24uIEhlbmNlLCB0aGV5IGhhdmUgbm8gZnVydGhlciBlZmZlY3Qgb24KKyAgICAgICAgLy8gZXhp
dCBzdGF0ZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBBcnJheWlmeVRvU3Ry
dWN0dXJlOgorICAgIGNhc2UgQXJyYXlpZnk6CisgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgY2Fz
ZSBOZXdSZWdleHA6CisgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgY2FzZSBQaGFudG9t
TmV3T2JqZWN0OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgY2FzZSBQaGFu
dG9tTmV3RnVuY3Rpb246CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICBj
YXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICBjYXNlIENvdW50RXhlY3V0aW9u
OgorICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5vdGhpbmcgdGhhdCBp
cyBvYnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUKKyAgICAgICAgLy8g
aGVhcHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9zZSB0aGF0IGFyZW4n
dCwgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgorICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MAorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAgICAgIC8vIExpa2Ug
YWJvdmUsIGJ1dCB3aXRoIHRoZSBhY3RpdmF0aW9uIGFsbG9jYXRpb24gY2F2ZWF0LgorICAgICAg
ICByZXR1cm4gbm9kZS0+Y2FzdE9wZXJhbmQ8U3ltYm9sVGFibGUqPigpLT5zaW5nbGV0b25TY29w
ZSgpLT5pc1N0aWxsVmFsaWQoKTsKKworICAgIGNhc2UgTmV3QXJyb3dGdW5jdGlvbjoKKyAgICBj
YXNlIE5ld0Z1bmN0aW9uOgorICAgICAgICAvLyBMaWtlIGFib3ZlLCBidXQgd2l0aCB0aGUgSlNG
dW5jdGlvbiBhbGxvY2F0aW9uIGNhdmVhdC4KKyAgICAgICAgcmV0dXJuIG5vZGUtPmNhc3RPcGVy
YW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCktPnNpbmdsZXRvbkZ1bmN0aW9uKCktPmlzU3RpbGxW
YWxpZCgpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRm9yIGFsbCBvdGhlciBub2Rlcywg
d2UganVzdCBjYXJlIGFib3V0IHdoZXRoZXIgdGhleSB3cml0ZSB0byBzb21ldGhpbmcgb3RoZXIg
dGhhbiBTaWRlU3RhdGUuCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGNs
b2JiZXJpemUoCisgICAgICAgICAgICBncmFwaCwgbm9kZSwgTm9PcENsb2JiZXJpemUoKSwKKyAg
ICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwKSB7CisgICAgICAgICAgICAg
ICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHN1Y2ggYSB0aGluZyBhcyBhIHN0cmljdCBzdWJ0eXBl
IG9mIFNpZGVTdGF0ZS4gVGhhdCdzIHdoYXQgYWxsb3dzCisgICAgICAgICAgICAgICAgLy8gdXMg
dG8gdXNlIGEgZmFzdCAhPSBjaGVjaywgYmVsb3cuCisgICAgICAgICAgICAgICAgQVNTRVJUKCFo
ZWFwLmlzU3RyaWN0U3VidHlwZU9mKFNpZGVTdGF0ZSkpOworCisgICAgICAgICAgICAgICAgaWYg
KGhlYXAgIT0gU2lkZVN0YXRlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwor
ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisjZGVmaW5lIERGR0Nsb2JiZXJz
RXhpdFN0YXRlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworc3RydWN0IE5vZGU7CisKKy8vIEEgY29uc2Vy
dmF0aXZlIGFwcHJveGltYXRpb24gb2Ygd2hldGhlciB0aGUgbm9kZSB3aWxsIHBlcmZvcm0gYW4g
ZWZmZWN0IHRoYXQgbWVhbnMgdGhhdCB3ZSBjYW4gbm8KKy8vIGxvbmdlciBleGl0IHRvIHRoaXMg
bm9kZSdzIGV4aXQgb3JpZ2luLgorCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBoJiwgTm9k
ZSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKworI2VuZGlmIC8vIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsNiArNjY3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5v
ZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CiAKKyAgICAgICAgbm9kZS0+
Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICBjaGlsZEVkZ2Uuc2V0
VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24g
PSAwOwpAQCAtNjc3LDYgKzY3OCw5IEBAIHByaXZhdGU6CiAKICAgICAgICAgRWRnZSBwcm9wZXJ0
eVN0b3JhZ2U7CiAKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBvcmlnaW4uZXhp
dE9LKTsKKyAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsKKwogICAgICAgICBpZiAoaXNJbmxp
bmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2Ug
PSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2UgaWYgKCF2YXJpYW50LnJlYWxsb2NhdGVzU3RvcmFn
ZSgpKSB7CkBAIC02ODcsNyArNjkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFTU0VSVCgh
aXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOwogICAgICAgICAgICAgTm9kZSogYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
LAotICAgICAgICAgICAgICAgIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2Up
OworICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8o
dHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBF
ZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24oKS0+b3V0T2ZMaW5l
Q2FwYWNpdHkoKSk7CkBAIC02OTUsNyArNjk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIEFT
U0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOwogCiAgICAgICAgICAgICBO
b2RlKiByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlLCBvcmlnaW4sCisgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgb3JpZ2luLnRha2VWYWxpZEV4aXQoY2Fu
RXhpdCksCiAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2UsCiAg
ICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJmbHksIG9yaWdpbiwg
Y2hpbGRFZGdlKSkpOwpAQCAtNzA3LDEzICs3MTEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgZGF0
YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAgICAgCiAgICAgICAg
IG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3RvcmFnZSk7CisgICAg
ICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5FeGl0OwogCiAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewogICAgICAgICAgICAgLy8g
RklYTUU6IFB1dFN0cnVjdHVyZSBnb2VzIGxhc3QgdW50aWwgd2UgZml4IGVpdGhlcgogICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MjkyMSBv
cgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MjkyNC4KICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAg
ICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2lu
LCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLndpdGhJbnZhbGlkRXhp
dCgpLCBPcEluZm8odHJhbnNpdGlvbiksCisgICAgICAgICAgICAgICAgY2hpbGRFZGdlKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBAQCBib29sIGRvZXNH
QyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTZXRMb2NhbDoKICAgICBjYXNl
IE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgRXhpdE9LOgogICAgIGNh
c2UgUGhhbnRvbToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBQaGk6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNjIsNiArMTM2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTG9v
cEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50Ogor
ICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICAgICAg
Y2FzZSBUeXBlT2Y6CiAgICAgICAgICAgICBicmVhazsKQEAgLTE0MDgsOSArMTQwOSw2IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjb252ZXJ0U3RyaW5nQWRkVXNlKE5vZGUqIG5vZGUsIEVkZ2UmIGVk
Z2UpCiAgICAgewogICAgICAgICBpZiAodXNlS2luZCA9PSBTdHJpbmdVc2UpIHsKLSAgICAgICAg
ICAgIC8vIFRoaXMgcHJlc2VydmVzIHRoZSBiaW5hcnlVc2VLaW5kKCkgaW52YXJpYW50IG90IFZh
bHVlQWRkOiBWYWx1ZUFkZCdzCi0gICAgICAgICAgICAvLyB0d28gZWRnZXMgd2lsbCBhbHdheXMg
aGF2ZSBpZGVudGljYWwgdXNlIGtpbmRzLCB3aGljaCBtYWtlcyB0aGUKLSAgICAgICAgICAgIC8v
IGRlY2lzaW9uIHByb2Nlc3MgbXVjaCBlYXNpZXIuCiAgICAgICAgICAgICBvYnNlcnZlVXNlS2lu
ZE9uTm9kZTxTdHJpbmdVc2U+KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25l
LCBDaGVjaywgbm9kZS0+b3JpZ2luLApAQCAtMTUxMiw2ICsxNTEwLDE0IEBAIHByaXZhdGU6CiAK
ICAgICBib29sIGF0dGVtcHRUb01ha2VGYXN0U3RyaW5nQWRkKE5vZGUqIG5vZGUpCiAgICAgewor
ICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5leGl0T0spIHsKKyAgICAgICAgICAgIC8vIElmIHRo
aXMgY29kZSBjYW5ub3QgZXhpdCwgdGhlbiB3ZSBzaG91bGQgbm90IGNvbnZlcnQgaXQgdG8gYSBN
YWtlUm9wZSwgc2luY2UgTWFrZVJvcGUKKyAgICAgICAgICAgIC8vIGNhbiBleGl0LiBUaGlzIGFy
aXNlcyBiZWNhdXNlIHdlIHRoaW5rIHRoYXQgU3RyQ2F0IGNsb2JiZXJzIGV4aXQgc3RhdGUsIGV2
ZW4gdGhvdWdoIGl0CisgICAgICAgICAgICAvLyBkb2Vzbid0IHJlYWxseSBkbyB0aGF0LgorICAg
ICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDg0NDMKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgYm9vbCBnb29kVG9HbyA9IHRydWU7CiAgICAgICAgIG1fZ3JhcGguZG9Ub0NoaWxk
cmVuKAogICAgICAgICAgICAgbm9kZSwKQEAgLTE2MzcsNiArMTY0Myw5IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFNldExvY2FsOgorICAgICAgICAgICAgICAgIC8vIE5PVEU6IEFueSB0eXBlIGNoZWNrcyB3ZSBw
dXQgaGVyZSBtYXkgZ2V0IGhvaXN0ZWQgYnkgZml4dXBDaGVja3NJbkJsb2NrKCkuIFNvLCBpZiB3
ZQorICAgICAgICAgICAgICAgIC8vIGFkZCBuZXcgdHlwZSBjaGVja2luZyB1c2Uga2luZCBmb3Ig
U2V0TG9jYWxzLCB3ZSBuZWVkIHRvIG1vZGlmeSB0aGF0IGNvZGUgYXMgd2VsbC4KKyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgp
KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CkBAIC0yMTEwLDggKzIxMTksMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7CiAgICAgICAgIG1f
YmxvY2sgPSBibG9jazsKLSAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJ
bkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewotICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IGJsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7CisgICAgICAgIHVuc2lnbmVk
IGluZGV4Rm9yQ2hlY2tzID0gVUlOVF9NQVg7CisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luRm9y
Q2hlY2tzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5C
bG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisKKyAgICAgICAgICAgIC8vIElmIHRo
aXMgaXMgYSBub2RlIGF0IHdoaWNoIHdlIGNvdWxkIGV4aXQsIHRoZW4gc2F2ZSBpdHMgaW5kZXgu
IElmIG5vZGVzIGFmdGVyIHRoaXMgb25lCisgICAgICAgICAgICAvLyBjYW5ub3QgZXhpdCwgdGhl
biB3ZSB3aWxsIGhvaXN0IGNoZWNrcyB0byBoZXJlLgorICAgICAgICAgICAgaWYgKG5vZGUtPm9y
aWdpbi5leGl0T0spIHsKKyAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcyA9IGluZGV4SW5C
bG9jazsKKyAgICAgICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3MgPSBub2RlLT5vcmlnaW47Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9IG9yaWdpbkZvckNo
ZWNrcy53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAogICAgICAgICAgICAg
Ly8gRmlyc3QsIHRyeSB0byByZWxheCB0aGUgcmVwcmVzZW50YXRpb25hbCBkZW1hbmRzIG9mIGVh
Y2ggbm9kZSwgaW4gb3JkZXIgdG8gaGF2ZQogICAgICAgICAgICAgLy8gZmV3ZXIgY29udmVyc2lv
bnMuCkBAIC0yMTc1LDIxICsyMTk1LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbm9k
ZSwKICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgTm9kZSogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICAgICAgCisKICAgICAgICAgICAgICAgICAg
ICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIERv
dWJsZVJlcFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRVc2U6IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5p
c051bWJlckNvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVDb25zdGFudCwg
bm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNo
ZWNrcywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVDb25zdGFudCwgb3JpZ2luRm9yQ2hlY2tz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5mcmVlemUo
anNEb3VibGVOdW1iZXIoZWRnZS0+YXNOdW1iZXIoKSkpKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGVkZ2UtPmhhc0ludDUyUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3Vi
bGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEZvckNoZWNrcywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgb3JpZ2lu
Rm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9k
ZSgpLCBJbnQ1MlJlcFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQ7CkBAIC0yMjAxLDUzICsy
MjIxLDkwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZUtp
bmQgPSBOb3RDZWxsVXNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbmRleEluQmxvY2ssIFNwZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBub2RlLT5v
cmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBT
cGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZVJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCB1c2VLaW5kKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0
Tm9kZShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBjYXNlIEludDUy
UmVwVXNlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+aGFzSW50NTJSZXN1
bHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChlZGdlLT5pc01hY2hpbmVJbnRDb25zdGFudCgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJ
bnQ1MkNvbnN0YW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgb3JpZ2lu
Rm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+
Y29uc3RhbnQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZGdlLT5o
YXNEb3VibGVSZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJSZXAsIG5vZGUtPm9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNN
YWNoaW5lSW50LCBJbnQ1MlJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBEb3VibGVSZXBNYWNoaW5lSW50VXNlKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0
ZUludDMyRm9yQXJpdGhtZXRpYygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQzMiwgSW50NTJSZXAsIG5vZGUtPm9yaWdp
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNJ
bnQzMiwgSW50NTJSZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgSW50MzJVc2UpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9p
bnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY01hY2hp
bmVJbnQsIEludDUyUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIE1hY2hpbmVJbnRVc2UpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJl
c3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogewogICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSAmJiAhZWRn
ZS0+aGFzSW50NTJSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0
ZWNvZGVEb3VibGUsIFZhbHVlUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3VibGUsIFZhbHVlUmVw
LCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
ZWRnZS5ub2RlKCksIERvdWJsZVJlcFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5C
bG9jaywgU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGUsIFZhbHVlUmVwLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4sIEVkZ2UoZWRnZS5ub2RlKCksIElu
dDUyUmVwVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hl
Y2tzLCBTcGVjSW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwgVmFsdWVSZXAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcywgRWRnZShlZGdlLm5vZGUoKSwg
SW50NTJSZXBVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfSB9Ci0gICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgdGhpcyBub2RlIGNhbm5vdCBk
byB0eXBlIGNoZWNrcywgYnV0IHdlIG5vdyBoYXZlIGEKKyAgICAgICAgICAgICAgICAgICAgLy8g
dHlwZSBjaGVjayBvbiB0aGlzIG5vZGUuIFdlIGRvbid0IGhhdmUgdG8gaGFuZGxlIHRoZSBnZW5l
cmFsIGZvcm0gb2YgdGhpcworICAgICAgICAgICAgICAgICAgICAvLyBwcm9ibGVtLiBJdCBvbmx5
IGFyaXNlcyB3aGVuIEJ5dGVDb2RlUGFyc2VyIGVtaXRzIGFuIGltbWVkaWF0ZSBTZXRMb2NhbCwg
cmF0aGVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYW4gYSBkZWxheWVkIG9uZS4gU28sIHdl
IG9ubHkgd29ycnkgYWJvdXQgdGhvc2UgY2hlY2tzIHRoYXQgd2UgbWF5IGhhdmUgcHV0IG9uCisg
ICAgICAgICAgICAgICAgICAgIC8vIGEgU2V0TG9jYWwuIE5vdGUgdGhhdCAiaW5kZXhGb3JDaGVj
a3MgIT0gaW5kZXhJbkJsb2NrIiBpcyBqdXN0IGFub3RoZXIgd2F5IG9mCisgICAgICAgICAgICAg
ICAgICAgIC8vIHNheWluZyAiIW5vZGUtPm9yaWdpbi5leGl0T0siLgorICAgICAgICAgICAgICAg
ICAgICBpZiAoaW5kZXhGb3JDaGVja3MgIT0gaW5kZXhJbkJsb2NrICYmIG1heUhhdmVUeXBlQ2hl
Y2soZWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIGtu
b3duVXNlS2luZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm93blVzZUtpbmQg
PSBLbm93bkludDMyVXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtub3duVXNlS2luZCA9IEtub3duQ2VsbFVzZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhblVzZToK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm93blVzZUtpbmQgPSBLbm93bkJvb2xlYW5V
c2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgY2Fu
IG9ubHkgYXJpc2UgaWYgd2UgaGF2ZSBhIENoZWNrIG5vZGUsIGFuZCBpbiB0aGF0IGNhc2UsIHdl
IGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmVtb3ZlIHRoZSBvcmln
aW5hbCBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ2hlY2spOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtub3duVXNlS2luZCA9IFVudHlwZWRVc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2luRm9yQ2hlY2tzLCBl
ZGdlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXRVc2VLaW5kKGtub3duVXNl
S2luZCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9KTsKICAgICAg
ICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRmx1c2hG
b3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNo
Rm9ybWF0LmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsMjggQEAgaW5saW5l
IFVzZUtpbmQgdXNlS2luZEZvcihGbHVzaEZvcm1hdCBmbwogICAgIHJldHVybiBVbnR5cGVkVXNl
OwogfQogCitpbmxpbmUgVXNlS2luZCB1bmNoZWNrZWRVc2VLaW5kRm9yKEZsdXNoRm9ybWF0IGZv
cm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRGVhZEZsdXNoOgorICAg
IGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgY2FzZSBDb25mbGljdGluZ0ZsdXNoOgorICAgICAg
ICByZXR1cm4gVW50eXBlZFVzZTsKKyAgICBjYXNlIEZsdXNoZWRDZWxsOgorICAgICAgICByZXR1
cm4gS25vd25DZWxsVXNlOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAgICAgICByZXR1cm4g
S25vd25JbnQzMlVzZTsKKyAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAgICAgcmV0dXJuIElu
dDUyUmVwVXNlOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAgcmV0dXJuIERvdWJs
ZVJlcFVzZTsKKyAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICByZXR1cm4gS25vd25C
b29sZWFuVXNlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBVbnR5cGVkVXNlOworfQorCiBpbmxpbmUgU3BlY3VsYXRlZFR5cGUgdHlwZUZpbHRl
ckZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCiB7CiAgICAgcmV0dXJuIHR5cGVGaWx0ZXJGb3IodXNl
S2luZEZvcihmb3JtYXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2luY2x1ZGUgIkNvZGVC
bG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlzdC5oIgogI2luY2x1
ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgog
I2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0LmgiCiAjaW5jbHVk
ZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1bGxCeXRlY29kZUxp
dmVuZXNzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIgpAQCAtMTAxLDgg
KzEwMywxNCBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRTdHJlYW0mCiAgICAg
ICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29kZU9yaWdpbihQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZpb3VzTm9kZSwgTm9k
ZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQorYm9vbCBHcmFwaDo6ZHVtcENv
ZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiYgcHJl
dmlvdXNOb2RlUmVmLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCiB7
CisgICAgaWYgKCFjdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgTm9kZSogcHJldmlvdXNOb2RlID0gcHJldmlvdXNOb2RlUmVmOwor
ICAgIHByZXZpb3VzTm9kZVJlZiA9IGN1cnJlbnROb2RlOworCiAgICAgaWYgKCFwcmV2aW91c05v
ZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTM0NSwxMiArMzUzLDE4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiUjoiLCBzb3J0ZWRMaXN0RHVtcChyZWFkcy5kaXJlY3QoKSwgIiwiKSk7CiAgICAg
aWYgKCF3cml0ZXMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXOiIsIHNv
cnRlZExpc3REdW1wKHdyaXRlcy5kaXJlY3QoKSwgIiwiKSk7CisgICAgRXhpdE1vZGUgZXhpdE1v
ZGUgPSBtYXlFeGl0KCp0aGlzLCBub2RlKTsKKyAgICBpZiAoZXhpdE1vZGUgIT0gRG9lc05vdEV4
aXQpCisgICAgICAgIG91dC5wcmludChjb21tYSwgZXhpdE1vZGUpOworICAgIGlmIChjbG9iYmVy
c0V4aXRTdGF0ZSgqdGhpcywgbm9kZSkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIkNsb2Ji
ZXJzRXhpdCIpOwogICAgIGlmIChub2RlLT5vcmlnaW4uaXNTZXQoKSkgewogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJiYyMiLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7
Ci0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZvckV4
aXQpCisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+b3JpZ2luLmZv
ckV4aXQgJiYgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSkKICAgICAgICAgICAgIG91dC5w
cmludChjb21tYSwgImV4aXQ6ICIsIG5vZGUtPm9yaWdpbi5mb3JFeGl0KTsKICAgICB9Ci0gICAg
CisgICAgaWYgKCFub2RlLT5vcmlnaW4uZXhpdE9LKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJFeGl0SW52YWxpZCIpOwogICAgIG91dC5wcmludCgiKSIpOwogCiAgICAgaWYgKG5vZGUtPmhh
c1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykgJiYgbm9kZS0+dHJ5R2V0VmFyaWFibGVBY2Nlc3NE
YXRhKCkpCkBAIC00NTUsNyArNDY5LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQwogICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzOiAiLCBsaXN0RHVtcCht
X2FyZ3VtZW50cyksICJcbiIpOwogICAgIG91dC5wcmludCgiXG4iKTsKICAgICAKLSAgICBOb2Rl
KiBsYXN0Tm9kZSA9IDA7CisgICAgTm9kZSogbGFzdE5vZGUgPSBudWxscHRyOwogICAgIGZvciAo
c2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYgKCFibG9jaykKQEAg
LTQ5Niw3ICs1MTAsNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBD
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7CiAg
ICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwgYmxvY2stPmF0KGkp
LCBjb250ZXh0KTsKICAgICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2stPmF0KGkpLCBjb250
ZXh0KTsKLSAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2stPmF0KGkpOwogICAgICAgICB9CiAg
ICAgICAgIG91dC5wcmludCgiICBTdGF0ZXM6ICIsIGJsb2NrLT5jZmFCcmFuY2hEaXJlY3Rpb24s
ICIsICIsIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwpOwogICAgICAgICBp
ZiAoIWJsb2NrLT5jZmFEaWRGaW5pc2gpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBhcyBhIGRpZmYgZnJv
bSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5nIG5vZGUuIFJldHVybnMg
dHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KLSAgICBib29sIGR1bXBDb2RlT3JpZ2luKFBy
aW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUq
IGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCopOworICAgIGJvb2wgZHVtcENvZGVPcmlnaW4oUHJp
bnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqJiBwcmV2aW91c05vZGUsIE5vZGUq
IGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCopOwogCiAgICAgQWRkU3BlY3VsYXRpb25Nb2RlIGFk
ZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNob3VsZFNwZWN1bGF0ZUludDMy
LCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIsIFByZWRpY3Rpb25QYXNzIHBhc3MpCiAg
ICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xMDQsNiArMTA0LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIC8v
IGJlY2F1c2UgdGhhdCBpcyB0aGUgREZHIFNTQSBjb252ZW50aW9uLiBUaGVyZWZvcmUsIGVhY2gg
cHJlZGVjZXNzb3Igb2YgdGhlIGxvb3AKICAgICAgICAgICAgIC8vIGhlYWRlciBtdXN0IGhhdmUg
b25seSBvbmUgc3VjY2Vzc29yLgogICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBudWxs
cHRyLCBleGlzdGluZ1ByZUhlYWRlci0+dGVybWluYWwoKS0+b3AoKSA9PSBKdW1wKTsKKworICAg
ICAgICAgICAgLy8gQSBwcmUtaGVhZGVyIGlzIG1vc3QgdXNlZnVsIGlmIGl0J3MgcG9zc2libGUg
dG8gZXhpdCBmcm9tIGl0cyB0ZXJtaW5hbC4gSGVuY2UKKyAgICAgICAgICAgIC8vIGlmIHRoZSB0
ZXJtaW5hbCBvZiB0aGUgZXhpc3RpbmcgcHJlLWhlYWRlciBkb2Vzbid0IGFsbG93IGZvciBleGl0
LCBidXQgdGhlIGZpcnN0CisgICAgICAgICAgICAvLyBvcmlnaW4gb2YgdGhlIGxvb3AgaGVhZGVy
IGRvZXMsIHRoZW4gd2Ugc2hvdWxkIGNyZWF0ZSBhIG5ldyBwcmUtaGVhZGVyLgorICAgICAgICAg
ICAgaWYgKCFuZWVkc05ld1ByZUhlYWRlciAmJiBsb29wLmhlYWRlcigpLT5maXJzdE9yaWdpbigp
LmV4aXRPSworICAgICAgICAgICAgICAgICYmICFleGlzdGluZ1ByZUhlYWRlci0+dGVybWluYWwo
KS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgICAgICAgICBuZWVkc05ld1ByZUhlYWRlciA9IHRy
dWU7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghbmVlZHNOZXdQcmVIZWFkZXIpCiAg
ICAgICAgICAgICAgICAgY29udGludWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR01heUV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWF5RXhpdC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWF5RXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDEyICs3OSwxNCBAQCBw
cml2YXRlOgogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotYm9vbCBtYXlFeGl0KEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKK0V4aXRNb2RlIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogeworICAgIEV4aXRNb2RlIHJlc3VsdCA9IERvZXNOb3RFeGl0OworICAgIAogICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIC8vIFRoaXMgaXMgYSBjYXJlZnVsbHkgY3VyYXRl
ZCBsaXN0IG9mIG5vZGVzIHRoYXQgZGVmaW5pdGVseSBkbyBub3QgZXhpdC4gV2UgdHJ5IHRvIGJl
IHZlcnkKICAgICAvLyBjb25zZXJ2YXRpdmUgd2hlbiBtYWludGFpbmluZyB0aGlzIGxpc3QsIGJl
Y2F1c2UgYWRkaW5nIG5ldyBub2RlIHR5cGVzIHRvIGl0IGRvZXNuJ3QKLSAgICAvLyBnZW5lcmFs
bHkgbWFrZSB0aGluZ3MgYSBsb3QgYmV0dGVyIGJ1dCBpdCBtaWdodCBpbnRyb2R1Y2UgaW5zYW5l
bHkgc3VidGxlIGJ1Z3MuCisgICAgLy8gZ2VuZXJhbGx5IG1ha2UgdGhpbmdzIGEgbG90IGJldHRl
ciBidXQgaXQgbWlnaHQgaW50cm9kdWNlIHN1YnRsZSBidWdzLgogICAgIGNhc2UgU2V0QXJndW1l
bnQ6CiAgICAgY2FzZSBKU0NvbnN0YW50OgogICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CkBAIC05
NCwxMSArOTYsMTMgQEAgYm9vbCBtYXlFeGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAg
ICBjYXNlIEZsdXNoOgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIENoZWNrOgorICAgIGNh
c2UgSWRlbnRpdHk6CiAgICAgY2FzZSBHZXRMb2NhbDoKICAgICBjYXNlIExvb3BIaW50OgogICAg
IGNhc2UgUGhpOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAg
Y2FzZSBFeGl0T0s6CiAgICAgY2FzZSBCb3R0b21WYWx1ZToKICAgICBjYXNlIFB1dEhpbnQ6CiAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgpAQCAtMTE2LDE4ICsxMjAsNjYgQEAgYm9vbCBtYXlF
eGl0KEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIERvdWJsZVJlcDoKICAgICBj
YXNlIEludDUyUmVwOgogICAgIGNhc2UgVmFsdWVSZXA6CisgICAgY2FzZSBFeHRyYWN0T1NSRW50
cnlMb2NhbDoKKyAgICBjYXNlIExvZ2ljYWxOb3Q6CisgICAgY2FzZSBOb3RpZnlXcml0ZToKKyAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICBjYXNlIFN0b3JlQmFycmllcjoKKyAgICBjYXNlIFB1
dEJ5T2Zmc2V0OgorICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAorCisgICAgY2FzZSBTdHJDYXQ6CisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3Ry
dWN0OgorICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgor
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZh
cmFyZ3M6CisgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRpb246CisgICAgY2FzZSBN
YXRlcmlhbGl6ZU5ld09iamVjdDoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgIGNhc2UgTmV3
QXJyb3dGdW5jdGlvbjoKKyAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKKyAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246CisgICAgICAgIHJlc3VsdCA9IEV4aXRzRm9yRXhjZXB0aW9uczsKKyAgICAg
ICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvLyBJZiBpbiBkb3VidCwgcmV0dXJu
IHRydWUuCi0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gRXhpdHM7CiAgICAg
fQogCiAgICAgRWRnZU1heUV4aXQgZnVuY3RvcjsKICAgICBERkdfTk9ERV9ET19UT19DSElMRFJF
TihncmFwaCwgbm9kZSwgZnVuY3Rvcik7Ci0gICAgcmV0dXJuIGZ1bmN0b3IucmVzdWx0KCk7Cisg
ICAgaWYgKGZ1bmN0b3IucmVzdWx0KCkpCisgICAgICAgIHJlc3VsdCA9IEV4aXRzOworICAgIAor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAorbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEV4aXRNb2RlIG1vZGUpCit7CisgICAgc3dpdGNoICht
b2RlKSB7CisgICAgY2FzZSBEb2VzTm90RXhpdDoKKyAgICAgICAgb3V0LnByaW50KCJEb2VzTm90
RXhpdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0c0ZvckV4Y2VwdGlvbnM6Cisg
ICAgICAgIG91dC5wcmludCgiRXhpdHNGb3JFeGNlcHRpb25zIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEV4aXRzOgorICAgICAgICBvdXQucHJpbnQoIkV4aXRzIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYsMTAg
KzM2LDQ4IEBAIHN0cnVjdCBOb2RlOwogLy8gQSAqdmVyeSogY29uc2VydmF0aXZlIGFwcHJveGlt
YXRpb24gb2Ygd2hldGhlciBvciBub3QgYSBub2RlIGNvdWxkIHBvc3NpYmx5IGV4aXQuIFVzdWFs
bHkKIC8vIHJldHVybnMgdHJ1ZSBleGNlcHQgaW4gY2FzZXMgd2hlcmUgd2Ugb2J2aW91c2x5IGRv
bid0IGV4cGVjdCBhbiBleGl0LgogCi1ib29sIG1heUV4aXQoR3JhcGgmLCBOb2RlKik7CitlbnVt
IEV4aXRNb2RlIHsKKyAgICAvLyBUaGUgbm9kZSBkb2VzIG5vdCBleGl0IGF0IGFsbC4gVGhpcyBt
ZWFucyB0aGF0IGl0J3MgbGVnYWwgdG8gZWxpbWluYXRlIHRoZSBmaXJzdCBzdG9yZSBpbiBhCisg
ICAgLy8gcHJvZ3JhbSBsaWtlOgorICAgIC8vCisgICAgLy8gZ2xvYmFsID0gMSAvLyBmaXJzdCBz
dG9yZQorICAgIC8vIERvZXNOb3RFeGl0KCk7IC8vIGxldCdzIGFzc3VtZSB0aGF0IHRoaXMgYWxz
byBkb2Vzbid0IHJlYWQgImdsb2JhbCIKKyAgICAvLyBnbG9iYWwgPSAyIC8vIHNlY29uZCBzdG9y
ZQorICAgIC8vCisgICAgLy8gSXQncyBsZWdhbCB0byBlbGltaW5hdGUgdGhlIGZpcnN0IG9uZSBz
aW5jZSBub2JvZHkgd2lsbCBzZWUgaXQ7IHRoZSBzZWNvbmQgc3RvcmUgaXMgYWx3YXlzCisgICAg
Ly8gZXhlY3V0ZWQgcmlnaHQgYWZ0ZXIuCisgICAgRG9lc05vdEV4aXQsCisKKyAgICAvLyBUaGUg
bm9kZSB3aWxsIGV4aXQsIGJ1dCBvbmx5IGJ5IHByb3Blcmx5IHRocm93aW5nIGV4Y2VwdGlvbnMu
IEEgcHJvcGVyIGV4Y2VwdGlvbiB0aHJvdyB3aWxsCisgICAgLy8gZGl2ZXJ0IGV4ZWN1dGlvbiB0
byB0aGUgbWF0Y2hpbmcgb3BfY2F0Y2ggYW5kIHdpbGwgbm90IHJlZXhlY3V0ZSB0aGUgZXhpdCBv
cmlnaW4uIFRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IHRoZSBzdG9yZSBlbGltaW5hdGlvbiBvcHRp
bWl6YXRpb24gYWJvdmUgd291bGQgYmUgaWxsZWdhbCwgYnV0IHRoZSBmb2xsb3dpbmcgd291bGQg
YmUgT0s6CisgICAgLy8KKyAgICAvLyBTaWRlRWZmZWN0KC4uLiwgZXhpdDogYmMjNDIpCisgICAg
Ly8gRXhpdHNGb3JFeGNlcHRpb25zKC4uLiwgZXhpdDogI2JjNDIsIEV4aXRJbnZhbGlkKQorICAg
IC8vCisgICAgLy8gSW4gcGFydGljdWxhciwgaXQncyBPSyBmb3IgYSBub2RlIHRoYXQgcmVwb3J0
cyBFeGl0c0ZvckV4Y2VwdGlvbnMgdG8gYmUgZXhlY3V0ZWQgaW4gYSBjb250ZXh0CisgICAgLy8g
d2hlcmUgIU5vZGU6Om9yaWdpbi5leGl0T0suIFRoYXQncyBiZWNhdXNlIHRoaXMgbm9kZSB3aWxs
IG5vdCBleGl0IGluIGEgbWFubmVyIHRoYXQgY291bGQgbGVhZAorICAgIC8vIHRvIHRoZSByZWV4
ZWN1dGlvbiBvZiBTaWRlRWZmZWN0KCkuCisgICAgRXhpdHNGb3JFeGNlcHRpb25zLAorCisgICAg
Ly8gVGhlIG5vZGUgd2lsbCBleGl0IHRvIHRoZSBleGl0IG9yaWdpbi4gVGhpcyBtZWFucyB0aGF0
IHdlIGNhbm5vdCBkbyBzdG9yZSBlbGltaW5hdGlvbiBsaWtlIGZvcgorICAgIC8vIERvZXNOb3RF
eGl0IGFuZCBhbHNvIHdlIGNhbm5vdCBwbGFjZSB0aGlzIG5vZGUgaW4gYW4gRXhpdEludmFsaWQg
Y29udGV4dCwgc2luY2UgdGhpcyB3aWxsIGV4aXQKKyAgICAvLyBpbiBhIG1hbm5lciB0aGF0IHdp
bGwgY2F1c2UgdGhlIHJlZXhlY3V0aW9uIG9mIGFsbCBwcmV2aW91cyBvcGVyYXRpb25zIHdpdGhp
biB0aGlzIGV4aXQgb3JpZ2luLgorICAgIEV4aXRzCit9OworCitFeGl0TW9kZSBtYXlFeGl0KEdy
YXBoJiwgTm9kZSopOwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpERkc6OkV4aXRNb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAogI2VuZGlmIC8vIERGR01heUV4aXRfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01v
dkhpbnRSZW1vdmFsUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDgsNyArMTA4LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3N0YXRlLm9wZXJhbmQobm9kZS0+dW5saW5rZWRM
b2NhbCgpKSA9IEVwb2NoKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAgaWYgKG1heUV4aXQo
bV9ncmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpCiAgICAgICAgICAgICAgICAgY3VycmVudEVw
b2NoLmJ1bXAoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKG5vZGVJbmRleCkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdO
b2RlT3JpZ2luLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCit2b2lkIE5vZGVPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIntzZW1hbnRpYzogIiwgc2VtYW50aWMsICIsIGZvckV4
aXQ6ICIsIGZvckV4aXQsICIsIGV4aXRPSzogIiwgZXhpdE9LLCAifSIpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4ODg4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yOSw5ICsyOSwxMyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAi
Q29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgR3JhcGg7CitzdHJ1Y3QgTm9kZTsK
Kwogc3RydWN0IE5vZGVPcmlnaW4gewogICAgIE5vZGVPcmlnaW4oKSB7IH0KICAgICAKQEAgLTQ4
LDcgKzUyLDcgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgICAgICByZXR1cm4gc2VtYW50aWMu
aXNTZXQoKTsKICAgICB9CiAgICAgCi0gICAgTm9kZU9yaWdpbiB3aXRoU2VtYW50aWMoQ29kZU9y
aWdpbiBzZW1hbnRpYykKKyAgICBOb2RlT3JpZ2luIHdpdGhTZW1hbnRpYyhDb2RlT3JpZ2luIHNl
bWFudGljKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKCFpc1NldCgpKQogICAgICAgICAgICAg
cmV0dXJuIE5vZGVPcmlnaW4oKTsKQEAgLTU4LDcgKzYyLDQ2IEBAIHN0cnVjdCBOb2RlT3JpZ2lu
IHsKICAgICAgICAgICAgIHJlc3VsdC5zZW1hbnRpYyA9IHNlbWFudGljOwogICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KKworICAgIE5vZGVPcmlnaW4gd2l0aEV4aXRPSyhib29sIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiByZXN1bHQgPSAqdGhpczsKKyAgICAg
ICAgcmVzdWx0LmV4aXRPSyA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIE5vZGVPcmlnaW4gd2l0aEludmFsaWRFeGl0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB3aXRoRXhpdE9LKGZhbHNlKTsKKyAgICB9CisKKyAgICBOb2RlT3JpZ2luIHRha2VW
YWxpZEV4aXQoYm9vbCYgY2FuRXhpdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB3aXRo
RXhpdE9LKGV4aXRPSyAmIHN0ZDo6ZXhjaGFuZ2UoY2FuRXhpdCwgZmFsc2UpKTsKKyAgICB9CiAg
ICAgCisgICAgTm9kZU9yaWdpbiBmb3JJbnNlcnRpbmdBZnRlcihHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUpIGNvbnN0CisgICAgeworICAgICAgICBOb2RlT3JpZ2luIHJlc3VsdCA9ICp0aGlzOwor
ICAgICAgICBpZiAoZXhpdE9LICYmIGNsb2JiZXJzRXhpdFN0YXRlKGdyYXBoLCBub2RlKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5leGl0T0sgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTm9kZU9yaWdpbiYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gc2VtYW50aWMgPT0gb3RoZXIuc2VtYW50aWMKKyAg
ICAgICAgICAgICYmIGZvckV4aXQgPT0gb3RoZXIuZm9yRXhpdAorICAgICAgICAgICAgJiYgZXhp
dE9LID09IG90aGVyLmV4aXRPSzsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
Tm9kZU9yaWdpbiYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
ICAgICAvLyBVc2VkIGZvciBkZXRlcm1pbmluZyB3aGF0IGJ5dGVjb2RlIHRoaXMgY2FtZSBmcm9t
LiBUaGlzIGlzIGltcG9ydGFudCBmb3IKICAgICAvLyBkZWJ1Z2dpbmcsIGV4Y2VwdGlvbnMsIGFu
ZCBldmVuIGJhc2ljIGV4ZWN1dGlvbiBzZW1hbnRpY3MuCiAgICAgQ29kZU9yaWdpbiBzZW1hbnRp
YzsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNiArNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgXAogICAgIG1hY3JvKE1vdkhpbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhab21iaWVIaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oRXhpdE9LLCBO
b2RlTXVzdEdlbmVyYXRlKSAvKiBJbmRpY2F0ZXMgdGhhdCBleGl0IHN0YXRlIGlzIGludGFjdC4g
Ki8gXAogICAgIG1hY3JvKFBoYW50b20sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhD
aGVjaywgTm9kZU11c3RHZW5lcmF0ZSkgLyogVXNlZCBpZiB3ZSB3YW50IGp1c3QgYSB0eXBlIGNo
ZWNrIGJ1dCBub3QgbGl2ZW5lc3MuIE5vbi1jaGVja2luZyB1c2VzIHdpbGwgYmUgcmVtb3ZlZC4g
Ki9cCiAgICAgbWFjcm8oVXBzaWxvbiwgMCkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50
cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTg5LDcgKzg5LDkg
QEAgcHVibGljOgogICAgICAgICAvLyBleGVjdXRpb25Db3VudCB0byB1c2UgYmVzdCBqdWRnZW1l
bnQgLSBidXQgdGhhdCBzZWVtcyB1bm5lY2Vzc2FyeSBzaW5jZSB3ZSBrbm93IGZvcgogICAgICAg
ICAvLyBzdXJlIHdoYXQgdGhlIGV4ZWN1dGlvbkNvdW50IHNob3VsZCBiZSBpbiB0aGlzIGNhc2Uu
CiAgICAgICAgIEJhc2ljQmxvY2sqIG5ld1Jvb3QgPSBpbnNlcnRpb25TZXQuaW5zZXJ0KDAsIDEp
OwotICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9IHRhcmdldC0+YXQoMCktPm9yaWdpbjsKKwor
ICAgICAgICAvLyBXZSdkIHJlYWxseSBsaWtlIHRvIHVzZSBhbiB1bnNldCBvcmlnaW4sIGJ1dCBU
aHJlYWRlZENQUyB3b24ndCBhbGxvdyB0aGF0LgorICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbiA9
IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigwKSwgZmFsc2UpOwogICAgICAg
ICAKICAgICAgICAgVmVjdG9yPE5vZGUqPiBsb2NhbHMoYmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVn
aXN0ZXJzKTsKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2VsaW5lLT5t
X251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewpAQCAtMTA2LDYgKzEwOCwxMCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgRWRnZShsb2NhbHNbbG9jYWxdKSk7CiAgICAgICAgIH0KIAor
ICAgICAgICAvLyBOb3cgdXNlIHRoZSBvcmlnaW4gb2YgdGhlIHRhcmdldCwgc2luY2UgaXQncyBu
b3QgT0sgdG8gZXhpdCwgYW5kIHdlIHdpbGwgcHJvYmFibHkgaG9pc3QKKyAgICAgICAgLy8gdHlw
ZSBjaGVja3MgdG8gaGVyZS4KKyAgICAgICAgb3JpZ2luID0gdGFyZ2V0LT5hdCgwKS0+b3JpZ2lu
OworICAgICAgICAKICAgICAgICAgZm9yIChpbnQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJh
c2VsaW5lLT5udW1QYXJhbWV0ZXJzKCk7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGUq
IG9sZE5vZGUgPSB0YXJnZXQtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCk7CiAg
ICAgICAgICAgICBpZiAoIW9sZE5vZGUpIHsKQEAgLTExNyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAgICAgT3BJbmZvKG9sZE5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpKSk7CiAg
ICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IG5vZGU7CiAgICAgICAg
IH0KLSAgICAgICAgCisKICAgICAgICAgZm9yIChpbnQgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2Vs
aW5lLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgKytsb2NhbCkgewogICAgICAgICAgICAgTm9kZSog
cHJldmlvdXNIZWFkID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpOwogICAg
ICAgICAgICAgaWYgKCFwcmV2aW91c0hlYWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNCBA
QAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVk
IHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQotICAgIDogT1NSRXhpdEJhc2Uo
a2luZCwgaml0LT5tX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBqaXQtPm1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlKQorICAgIDogT1NSRXhpdEJhc2Uoa2luZCwgaml0LT5tX29yaWdpbi5mb3JF
eGl0LCBqaXQtPm1fb3JpZ2luLnNlbWFudGljKQogICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFs
dWVTb3VyY2UpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3Bh
dGNoYWJsZUNvZGVPZmZzZXQoMCkKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4
KQogICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1JbmRleCkKIHsKLSAgICBBU1NFUlQobV9jb2Rl
T3JpZ2luLmlzU2V0KCkpOworICAgIERGR19BU1NFUlQoaml0LT5tX2ppdC5ncmFwaCgpLCBqaXQt
Pm1fY3VycmVudE5vZGUsIGppdC0+bV9vcmlnaW4uZXhpdE9LKTsKIH0KIAogdm9pZCBPU1JFeGl0
OjpzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wIGNo
ZWNrKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAko
cmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09i
amVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2Nh
dGlvblNpbmtpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1Nyw3ICs3NTcsNyBAQCBw
cml2YXRlOgogICAgICAgICBwcm9tb3RlTG9jYWxIZWFwKCk7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQotICAgICAgICAgICAgdmFsaWRhdGUobV9n
cmFwaCwgRHVtcEdyYXBoLCBncmFwaEJlZm9yZVNpbmtpbmcpOworICAgICAgICAgICAgREZHOjp2
YWxpZGF0ZShtX2dyYXBoLCBEdW1wR3JhcGgsIGdyYXBoQmVmb3JlU2lua2luZyk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTY3OCw3ICsxNjc4LDggQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgICAgIE5vZGUqIGlkZW50aWZpZXIgPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+
aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6YXRpb24uYWRk
KGlkZW50aWZpZXIsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUoMCwgTm9kZU9yaWdpbigpLCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1f
YXZhaWxhYmlsaXR5LCBpZGVudGlmaWVyLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAg
ICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRz
Rm9yVXBkYXRlKDAsIE5vZGVPcmlnaW4oKSwgY2FuRXhpdCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSwgaWRlbnRpZmllciwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTE2ODgsNiArMTY4OSw3IEBA
IHByaXZhdGU6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgYm9vbCBj
YW5FeGl0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uIDogbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChub2RlKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAobG9jYXRpb24ua2luZCgpICE9IE5hbWVkUHJvcGVydHlQTG9jKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNjk3LDExICsxNjk5LDEzIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRh
aW5zKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9y
aWdpbiwgbV9ib3R0b20pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5j
cmVhdGVIaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2Rl
LT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksIG1fYm90dG9tKSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG1h
dGVyaWFsaXphdGlvbiA6IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxpemF0aW9ucy5n
ZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5vcmlnaW4u
ZXhpdE9LICY9IGNhbkV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGVzY2FwZWUgPSBt
X21hdGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAg
ICAgICAgICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6YXRpb24oYmxvY2ssIG1hdGVyaWFsaXphdGlv
biwgZXNjYXBlZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0
aW9uLnNldChlc2NhcGVlLCBtYXRlcmlhbGl6YXRpb24pOwpAQCAtMTcxMSw3ICsxNzE1LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmb3IgKFByb21v
dGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9SZWNvdmVy
aWVzLmdldChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
KG5vZGVJbmRleCwgY3JlYXRlUmVjb3ZlcnkoYmxvY2ssIGxvY2F0aW9uLCBub2RlKSk7CisgICAg
ICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgsIGNyZWF0ZVJl
Y292ZXJ5KGJsb2NrLCBsb2NhdGlvbiwgbm9kZSwgY2FuRXhpdCkpOwogCiAgICAgICAgICAgICAg
ICAgLy8gV2UgbmVlZCB0byBwdXQgdGhlIE9TUiBoaW50cyBhZnRlciB0aGUgcmVjb3ZlcmllcywK
ICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG9ubHkgd2FudCB0aGUgaGludHMgb25jZSB0
aGUgb2JqZWN0IGlzCkBAIC0xNzE5LDEwICsxNzIzLDE3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6YXRpb24gOiBtX21hdGVyaWFsaXphdGlvblNpdGVU
b01hdGVyaWFsaXphdGlvbnMuZ2V0KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUq
IGVzY2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0ZXJpYWxpemF0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCBjYW5FeGl0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0eSwgZXNjYXBl
ZSwgbWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+b3JpZ2luLmV4aXRPSyAmJiAhY2FuRXhpdCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBpbmRpY2F0ZSB0aGF0IHRoZSBleGl0IHN0YXRlIGlzIGZpbmUgbm93LiBJdCBp
cyBPSyBiZWNhdXNlIHdlIHVwZGF0ZWQgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHN0YXRl
IGFib3ZlLiBXZSBuZWVkIHRvIGluZGljYXRlIHRoaXMgbWFudWFsbHkgYmVjYXVzZSB0aGUgdmFs
aWRhdGlvbiBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZW5vdWdoIGluZm9y
bWF0aW9uIHRvIGluZmVyIHRoYXQgdGhlIGV4aXQgc3RhdGUgaXMgZmluZS4KKyAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNwZWNOb25lLCBF
eGl0T0ssIG5vZGUtPm9yaWdpbik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAg
ICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCiAgICAgICAgICAgICAgICAg
ICAgIG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0aW9uLnNldChub2RlLCBub2RlKTsKIApAQCAtMTc1
MCw4ICsxNzYxLDEwIEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgICAgICAgICAgICAgIGRvTG93
ZXIgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQobm9kZUluZGV4ICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5j
cmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwgbm9kZVZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbm9kZUluZGV4ICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
dGlvbi5jcmVhdGVIaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LCBub2RlLT5vcmlnaW4ud2l0aEludmFsaWRFeGl0KCksIG5vZGVWYWx1ZSkpOwogICAgICAgICAg
ICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0
aW9uIGxvY2F0aW9uKSAtPiBOb2RlKiB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cmVzb2x2ZShibG9jaywgbG9jYXRpb24pOwpAQCAtMTg3MSw3ICsxODg0LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGRlZi0+dmFsdWUoKTsKICAgICB9CiAKLSAgICB2b2lkIGluc2VydE9T
UkhpbnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmlnaW4sIEF2
YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2RlKiBlc2NhcGVlLCBOb2RlKiBtYXRlcmlh
bGl6YXRpb24pCisgICAgdm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSh1bnNpZ25lZCBub2Rl
SW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sJiBjYW5FeGl0LCBBdmFpbGFiaWxpdHlNYXAm
IGF2YWlsYWJpbGl0eSwgTm9kZSogZXNjYXBlZSwgTm9kZSogbWF0ZXJpYWxpemF0aW9uKQogICAg
IHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBmb2xsb3coKSB0aGUgdmFsdWUgaW4gdGhlIGhlYXAu
CiAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZ3JhcGg6CkBAIC0xOTA1LDcgKzE5
MTgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4LCBlbnRy
eS5rZXkuY3JlYXRlSGludChtX2dyYXBoLCBvcmlnaW4sIG1hdGVyaWFsaXphdGlvbikpOworICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICBlbnRyeS5rZXkuY3JlYXRl
SGludChtX2dyYXBoLCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgbWF0ZXJpYWxpemF0
aW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFpbGFiaWxp
dHkubV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0xOTE2LDcgKzE5MzAsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fscy5vcGVy
YW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdpbiwgT3BJ
bmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhp
bnQsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ob3BlcmFuZCksCiAgICAg
ICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTIwNDIsNyArMjA1Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAK
LSAgICBOb2RlKiBjcmVhdGVSZWNvdmVyeShCYXNpY0Jsb2NrKiBibG9jaywgUHJvbW90ZWRIZWFw
TG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIHdoZXJlKQorICAgIE5vZGUqIGNyZWF0ZVJlY292ZXJ5
KEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwgTm9kZSog
d2hlcmUsIGJvb2wmIGNhbkV4aXQpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2coIlJlY292ZXJpbmcgIiwgbG9jYXRpb24sICIgYXQgIiwgd2hlcmUsICJc
biIpOwpAQCAtMjA1MCwxMiArMjA2NCwxNCBAQCBwcml2YXRlOgogICAgICAgICBOb2RlKiBiYXNl
ID0gZ2V0TWF0ZXJpYWxpemF0aW9uKGJsb2NrLCBsb2NhdGlvbi5iYXNlKCkpOwogICAgICAgICBO
b2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsKIAorICAgICAgICBOb2RlT3Jp
Z2luIG9yaWdpbiA9IHdoZXJlLT5vcmlnaW4ud2l0aFNlbWFudGljKGJhc2UtPm9yaWdpbi5zZW1h
bnRpYyk7CisKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCJCYXNl
IGlzICIsIGJhc2UsICIgYW5kIHZhbHVlIGlzICIsIHZhbHVlLCAiXG4iKTsKIAogICAgICAgICBp
ZiAoYmFzZS0+aXNQaGFudG9tQWxsb2NhdGlvbigpKSB7CiAgICAgICAgICAgICByZXR1cm4gUHJv
bW90ZWRIZWFwTG9jYXRpb24oYmFzZSwgbG9jYXRpb24uZGVzY3JpcHRvcigpKS5jcmVhdGVIaW50
KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHdoZXJlLT5vcmlnaW4ud2l0aFNlbWFudGljKGJh
c2UtPm9yaWdpbi5zZW1hbnRpYyksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBv
cmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgdmFsdWUpOwogICAgICAgICB9CiAKICAgICAg
ICAgc3dpdGNoIChsb2NhdGlvbi5raW5kKCkpIHsKQEAgLTIwODksNyArMjEwNSw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgICAgIFB1dEJ5T2Zmc2V0LAotICAg
ICAgICAgICAgICAgICAgICB3aGVyZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICBvcmln
aW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGRh
dGEpLAogICAgICAgICAgICAgICAgICAgICBFZGdlKHN0b3JhZ2UsIEtub3duQ2VsbFVzZSksCiAg
ICAgICAgICAgICAgICAgICAgIEVkZ2UoYmFzZSwgS25vd25DZWxsVXNlKSwKQEAgLTIxMTgsNyAr
MjEzNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKAog
ICAgICAgICAgICAgICAgIFNwZWNOb25lLAogICAgICAgICAgICAgICAgIE11bHRpUHV0QnlPZmZz
ZXQsCi0gICAgICAgICAgICAgICAgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3Jp
Z2luLnNlbWFudGljKSwKKyAgICAgICAgICAgICAgICBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5F
eGl0KSwKICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksCiAgICAgICAgICAgICAgICAgRWRn
ZShiYXNlLCBLbm93bkNlbGxVc2UpLAogICAgICAgICAgICAgICAgIHZhbHVlLT5kZWZhdWx0RWRn
ZSgpKTsKQEAgLTIxMjksNyArMjE0NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4g
bV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgIFNwZWNOb25lLAogICAgICAgICAgICAg
ICAgIFB1dENsb3N1cmVWYXIsCi0gICAgICAgICAgICAgICAgd2hlcmUtPm9yaWdpbi53aXRoU2Vt
YW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKSwKKyAgICAgICAgICAgICAgICBvcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICBPcEluZm8obG9jYXRpb24uaW5m
bygpKSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2UsIEtub3duQ2VsbFVzZSksCiAgICAgICAg
ICAgICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkpIHsKKyAgICAgICAgICAgIGlmICht
YXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KSB7CiAgICAgICAgICAgICAgICAg
Y3VycmVudEVwb2NoLmJ1bXAoKTsKICAgICAgICAgICAgICAgICBsYXN0RXhpdGluZ0luZGV4ID0g
bm9kZUluZGV4OwogICAgICAgICAgICAgfQpAQCAtMTYwLDEwICsxNjAsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBzbyBjcmVh
dGluZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAgICAgICAg
IC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAgICAgICAgICAgICAgICAgICBraWxsZWRO
b2RlLT5wb3N0Zml4UmVmKCk7CisKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbGFzdEV4aXRp
bmdOb2RlID0gYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpOwogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggKyAxLCBTcGVjTm9uZSwgUGhhbnRv
bSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0luZGV4KS0+
b3JpZ2luLCBraWxsZWROb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RFeGl0aW5nTm9kZS0+b3JpZ2luLmZvckluc2VydGluZ0FmdGVyKG1fZ3JhcGgsIGxh
c3RFeGl0aW5nTm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICBraWxsZWROb2RlLT5kZWZh
dWx0RWRnZSgpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3Zv
aWQgUGhhc2U6OnZhbGlkYXRlKCkKK3sKKyAgICBERkc6OnZhbGlkYXRlKG1fZ3JhcGgsIER1bXBH
cmFwaCwgbV9ncmFwaER1bXBCZWZvcmVQaGFzZSk7Cit9CisKIHZvaWQgUGhhc2U6OmJlZ2luUGhh
c2UoKQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKSkgewpA
QCAtNTMsNyArNTgsNyBAQCB2b2lkIFBoYXNlOjplbmRQaGFzZSgpCiB7CiAgICAgaWYgKCFPcHRp
b25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKICAgICAgICAgcmV0dXJuOwotICAgIHZh
bGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFwaCwgbV9ncmFwaER1bXBCZWZvcmVQaGFzZSk7CisgICAg
dmFsaWRhdGUoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2ICs2MCw5
IEBAIHByb3RlY3RlZDoKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0K
ICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1fcHJvZmls
ZWRCbG9jazsgfQorCisgICAgLy8gVGhpcyBydW5zIHZhbGlkYXRpb24sIGFuZCB1c2VzIHRoZSBn
cmFwaCBkdW1wIGJlZm9yZSB0aGUgcGhhc2UgaWYgcG9zc2libGUuCisgICAgdm9pZCB2YWxpZGF0
ZSgpOwogICAgIAogICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjY4LDYgKzY2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RhbnRTdG9yYWdlUG9p
bnRlcjoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6Cisg
ICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0FjY2Vzc0Rh
dGEuYWRkKG9wZXJhbmQsIGZvcm1hdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVk
Z2UoaW5jb21pbmcsIHVzZUtpbmRGb3IoZm9ybWF0KSkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UoaW5jb21pbmcsIHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KSkpOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVkLm9wZXJh
bmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NT
QUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3RhY2ssIG5v
ZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51bmxpbmtl
ZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4
aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKQEAg
LTM0Niw3ICszNDcsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CiAgICAgICAg
ICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3ZhcmlhYmxlRm9y
U1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgICAgICBGbHVz
aEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOworCisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW4gdW5jaGVja2VkIHVzZSBraW5kIGJlY2F1c2UgdGhl
IFNldExvY2FsIHdhcyB0dXJuZWQgaW50byBhIENoZWNrLgorICAgICAgICAgICAgICAgICAgICAv
LyBXZSBoYXZlIHRvIHVzZSBhbiB1bmNoZWNrZWQgdXNlIGJlY2F1c2UgYXQgbGVhc3Qgc29tZXRp
bWVzLCB0aGUgZW5kIG9mIHRoZSBibG9jaworICAgICAgICAgICAgICAgICAgICAvLyBpcyBub3Qg
ZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1bmNoZWNrZWRV
c2VLaW5kRm9yKGZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICAgICAg
dXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9yaWdpbiwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldFN0YWNrOgogICAgIGNhc2Ug
TW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2Fz
ZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNw
cAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5Miw2ICsxODkyLDExIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgbm9SZXN1
bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgRXhpdE9LOiB7Cisg
ICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAgICAgIAog
ICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTcxLDYgKzE5NzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2Ug
RXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNlIEZsdXNo
ZWREb3VibGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEs
NiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsCiAgICAgLCBtX2lu
dGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUpCiAgICAgLCBtX3N0cmVhbSgmaml0Lmpp
dENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKICAgICAsIG1fbWluaWZpZWRHcmFwaCgmaml0
LmppdENvZGUoKS0+bWluaWZpZWRERkcpCi0gICAgLCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVz
KGZhbHNlKQogewogfQogCkBAIC0xOTYsNyArMTk1LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAg
cmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0T1NSRXhpdEZ1enpDaGVj
aygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wTGlzdCBqdW1wc1RvRmFpbDsKQEAgLTIxMiw3ICsyMTAsNiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAg
ICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
YW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBmdXp6SnVtcCA9IGVtaXRPU1JFeGl0RnV6
ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlzU2V0KCkpIHsKICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IG15SnVtcHNUb0ZhaWw7CkBAIC0yMjgsNyArMjI1LDYgQEAgT1NSRXhpdEp1
bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlmICghbV9jb21waWxlT2th
eSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsKLSAgICBBU1NFUlQo
bV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0LnNpemUoKTsKICAgICBtX2ppdC5hcHBlbmRF
eGl0SW5mbygpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtp
bmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpAQCAtMjM3LDE5ICsyMzMs
MTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogCiBPU1JFeGl0
SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQogewotICAg
IEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2RlKCkp
OwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVl
U291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1Zh
bHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
anVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5v
ZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAgLTI1Nyw3ICsyNTAsNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBp
bGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50
VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gbV9qaXQu
aml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKICAgICBtX2pp
dC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVu
ZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgpLm1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5zaXplKCks
IHJlY292ZXJ5SW5kZXgpKTsKQEAgLTI2NSw3ICsyNTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5v
ZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9u
UmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5
cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291
cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwogfQogCkBAIC0yNzMs
NyArMjY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogewog
ICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2Nh
bkV4aXQpOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5hcHBlbmRF
eGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9qaXQuaml0Q29kZSgpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBK
U1ZhbHVlU291cmNlKCksCkBAIC0yODYsNyArMjc2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdEludmFsaWRhdGlvblBvaQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywg
Tm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2NhbkV4aXQpOwogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwogICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGUsIG1faml0Lmp1bXAoKSk7
CkBAIC0yOTcsNyArMjg2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3Vs
YXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgRWRnZSBub2RlVXNlKQog
ewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVV
c2Uubm9kZSgpKTsKIH0KIApAQCAtMTQ2Nyw5ICsxNDU1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5tYWNoaW5l
TG9jYWwoKSwKICAgICAgICAgICAgICAgICBmb3JtYXQpKTsKICAgICB9Ci0gICAgCi0gICAgbV9j
b2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oKTsKLSAgICBtX2NvZGVPcmlnaW5G
b3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oKTsKKworICAgIG1fb3JpZ2luID0gTm9kZU9yaWdp
bigpOwogICAgIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8
IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2N1cnJlbnRO
b2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2spOwpAQCAtMTQ4MSwxNSArMTQ2OCwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQotICAgICAg
ICAgICAgbV9jYW5FeGl0ID0gdHJ1ZTsgLy8gRXNzZW50aWFsbHkgZGlzYWJsZSB0aGUgYXNzZXJ0
aW9ucy4KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gbWF5RXhpdChtX2pp
dC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgCiAgICAgICAgIG1faW50ZXJwcmV0
ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2N1cnJlbnRO
b2RlKTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IG1fY3VycmVudE5vZGUt
Pm9yaWdpbi5mb3JFeGl0OwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1f
Y3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgbV9vcmlnaW4gPSBtX2N1cnJl
bnROb2RlLT5vcmlnaW47CisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQorICAgICAg
ICAgICAgbV9vcmlnaW4uZXhpdE9LICY9IG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9jdXJyZW50
Tm9kZSkgPT0gRXhpdHM7CiAgICAgICAgIG1fbGFzdEdlbmVyYXRlZE5vZGUgPSBtX2N1cnJlbnRO
b2RlLT5vcCgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUtPnNob3Vs
ZEdlbmVyYXRlKCkpOwpAQCAtMTUzNiw5ICsxNTE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUN1cnJlbnRCbG9jawogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5
cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotICAgIG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgPSB0cnVlOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2Rl
T3JpZ2luKDApOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigw
KTsKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9yaWdpbigw
KSwgdHJ1ZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9jaygpLT5u
dW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9qaXQuZ3JhcGgo
KS5tX2FyZ3VtZW50c1tpXTsKQEAgLTE2MDEsNyArMTU4Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQotICAgIG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsKKworICAgIG1fb3JpZ2luID0gTm9kZU9y
aWdpbigpOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4
ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQ1OCw3ICsyNDU4LDYgQEAgcHVibGljOgogICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBOb2RlVHlwZSBtX2xh
c3RHZW5lcmF0ZWROb2RlOwotICAgIGJvb2wgbV9jYW5FeGl0OwogICAgIHVuc2lnbmVkIG1faW5k
ZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2FsIHJlZ2lzdGVyIG1hcHMuCiAg
ICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0aW9uSW5mbzsKQEAgLTI0Nzks
OCArMjQ3OCw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIFZlY3RvcjxCcmFuY2hSZWNvcmQsIDg+
IG1fYnJhbmNoZXM7CiAKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQ7
Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKyAgICBOb2RlT3Jp
Z2luIG1fb3JpZ2luOwogICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAg
ICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9pbnRlcnByZXRl
cjsKQEAgLTI0ODgsOCArMjQ4Niw2IEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZUV2ZW50U3RyZWFt
KiBtX3N0cmVhbTsKICAgICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVkR3JhcGg7CiAgICAgCi0g
ICAgYm9vbCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzOwotICAgIAogICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+LCA4PiBtX3Nsb3dQYXRoR2VuZXJhdG9yczsK
ICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbj4gbV9wbGFuczsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmll
ckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxMCw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBydW4gdGhl
aXIgb3duIGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRl
eCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBpbnNlcnRC
YXJyaWVyV2l0aEludmFsaWRFeGl0KG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUtPmNoaWxk
MSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgbV9ub2RlLT5zZXRF
cG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
QEAgLTQ3NCwxMCArNDc0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAodmVy
Ym9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEluc2VydGluZyBiYXJyaWVy
LlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgsIGJhc2Uubm9kZSgpKTsK
KyAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFzZSk7CiAgICAgfQotICAgIAot
ICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUqIGJhc2UpCisK
KyAgICB2b2lkIGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4aXQodW5zaWduZWQgbm9kZUluZGV4
LCBFZGdlIGJhc2UpCisgICAgeworICAgICAgICBpbnNlcnRCYXJyaWVyKG5vZGVJbmRleCwgYmFz
ZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2Rl
SW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVlKQogICAgIHsKICAgICAgICAgLy8g
SWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUgYmFycmll
cnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KICAgICAgICAgaWYgKCFyZWFsbHlJbnNlcnRCYXJy
aWVycygpKQpAQCAtNDg1LDggKzQ5MCwxOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAg
Ly8gRklYTUU6IFdlIGNvdWxkIHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6KS4gVGhh
dCB3b3VsZCBiZSBzb3J0IG9mIGNvb2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cgd2UgZG9u
J3QgbmVlZCBpdC4KKworICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMgdW5jaGVj
a2VkLCB3ZSBzaG91bGQgYWxzbyBub3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4gYSBjb250
ZXh0CisgICAgICAgIC8vIHdoZXJlIGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdlIGV2ZXIg
ZGlkIGhhdmUgdG8gaW5zZXJ0IGEgYmFycmllciBhdCBhbiBFeGl0SW52YWxpZAorICAgICAgICAv
LyBjb250ZXh0IGFuZCB0aGF0IGJhcnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2UgY291bGQg
bWFrZSB0aGF0IHdvcmsgYnkgaG9pc3RpbmcgdGhlIGNoZWNrLgorICAgICAgICAvLyBUaGF0IGRv
ZXNuJ3QgaGFwcGVuIHJpZ2h0IG5vdy4KKyAgICAgICAgaWYgKGJhc2UudXNlS2luZCgpICE9IEtu
b3duQ2VsbFVzZSkgeworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1f
bm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQoQ2VsbFVz
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG1fbm9k
ZS0+b3JpZ2luLCBFZGdlKGJhc2UsIENlbGxVc2UpKTsKKyAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChleGl0
T0spLCBiYXNlKTsKIAogICAgICAgICBiYXNlLT5zZXRFcG9jaChtX2N1cnJlbnRFcG9jaCk7CiAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5
cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDgsOCArMTA4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlmICghYmxv
Y2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRl
eEZvckNoZWNrcyA9IFVJTlRfTUFYOworICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW5Gb3JD
aGVja3M7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uZXhpdE9LKSB7CisgICAgICAgICAg
ICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJbkJsb2NrOworICAgICAgICAgICAgICAg
ICAgICBvcmlnaW5Gb3JDaGVja3MgPSBub2RlLT5vcmlnaW47CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90IHRvIHVz
ZSAnbm9kZScgYWZ0ZXIgYXBwZW5kaW5nIHRvIHRoZSBncmFwaC4gSW4gdGhvc2Ugc3dpdGNoCiAg
ICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhcHBlbmQsIHdlIGZpcnN0
IGNhcmVmdWxseSBleHRyYWN0IGV2ZXJ5dGhpbmcgd2UgbmVlZAogICAgICAgICAgICAgICAgIC8v
IGZyb20gdGhlIG5vZGUsIGJlZm9yZSBkb2luZyBhbnkgYXBwZW5kaW5nLgpAQCAtMTcwLDEzICsx
NzgsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1
cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1h
bnRpYyhvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVzZSkpOwog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZXItPnZhbHVlLm1fYXJyYXlNb2RlSXNW
YWxpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlLm1fYXJy
YXlNb2RlSG9pc3RpbmdPa2F5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIENoZWNrQXJyYXksIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNrQXJyYXksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1hbnRpYyhvcmlnaW4uc2VtYW50aWMp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhpdGVyLT52YWx1ZS5tX2FycmF5
TW9kZS5hc1dvcmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShjaGlsZDEu
bm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4ODg4NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJD
b2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0YXRlLmgi
CiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTg1LDEzICsxODYsMzAgQEAgcHVibGljOgogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7Ci0g
ICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksIG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pc1NldCgpID09IG5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkp
OwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW1heUV4aXQobV9ncmFwaCwgbm9k
ZSkgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhKCFub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpICYmIG5vZGUtPm9y
aWdpbi5leGl0T0spKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEobWF5RXhp
dChtX2dyYXBoLCBub2RlKSA9PSBFeGl0cyAmJiAhbm9kZS0+b3JpZ2luLmV4aXRPSykpOworCisg
ICAgICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogcHJldmlv
dXNOb2RlID0gYmxvY2stPmF0KGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
CisgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgcHJldmlvdXNOb2RlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgIW5vZGUtPm9yaWdpbi5leGl0T0sKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBu
b2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsKKyAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAobm9k
ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAhKCFwcmV2aW91c05vZGUtPm9yaWdpbi5leGl0
T0sgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5v
ZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBub2RlLT5vcmln
aW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUp
LCAhbm9kZS0+aGFzU3RydWN0dXJlKCkgfHwgISFub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQoKSB8fCBub2Rl
LT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpLmlzQ2VsbCgpKTsKICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSksICFub2RlLT5oYXNDZWxsT3BlcmFuZCgpIHx8ICEhbm9kZS0+Y2VsbE9wZXJh
bmQoKS0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmNoaWxkMygpKTsKQEAgLTIxMCwxMCArMjI4
LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEo
KS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgogICAg
ICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
S25vd25DZWxsVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVwVXNlOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSgobm9kZSksICEiQmFkIHVzZSBraW5kIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDYgKzUxLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUq
IAogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmll
SGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBGbHVz
aDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI3LDkgKzIyNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1h
cCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICBBdmFpbGFiaWxpdHko
Rmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKSkp
OwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBDb2RlT3Jp
Z2luKDApOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4o
MCk7CiAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fb3JpZ2luID0gTm9kZU9y
aWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CiAgICAgICAgICAgICBW
aXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpOwpA
QCAtMzkzLDggKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICBtX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAgICBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9ub2RlLT5vcmlnaW4uZm9yRXhpdDsKKyAgICAgICAg
bV9vcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3Nl
Q29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBt
X25vZGUsICJcbiIpOwpAQCAtODQxLDYgKzgzOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
TG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21iaWVIaW50
OgorICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0Ogog
ICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFudG9tQ3Jl
YXRlQWN0aXZhdGlvbjoKQEAgLTg3OCwxNSArODc3LDE4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBtX291dC5zZXQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgY2FzZSBL
bm93bkludDMyVXNlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDMyKG1fbm9kZS0+Y2hp
bGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJ
bnQ1MlJlcFVzZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dJbnQ1MihtX25vZGUtPmNoaWxk
MSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQm9v
bGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICBtX291
dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBLbm93bkNl
bGxVc2U6CiAgICAgICAgICAgICBtX291dC5zZXQobG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwg
ZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50eXBlZFVz
ZToKQEAgLTQ3NTIsMTAgKzQ3NTQsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW52
YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlNYXAoKSwg
IlxuIik7CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4
aXRPSyk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBw
ZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwgSW52YWxp
ZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCi0gICAgICAgICAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwK
KyAgICAgICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGljLAogICAgICAg
ICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMoKSwKICAg
ICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxzKCkpKTsK
ICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21w
aWxhdGlvbkluZm8oKSk7CkBAIC04MDkzLDYgKzgwOTcsOCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1wKG1fYXZh
aWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CisKKyAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7CiAgICAgICAgIAogICAgICAgICBp
ZiAoZG9PU1JFeGl0RnV6emluZygpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbnVtYmVyT2ZGdXp6
Q2hlY2tzID0gbV9vdXQuYWRkKApAQCAtODExNyw3ICs4MTIzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdCgK
ICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIG1fY29kZU9yaWdp
bkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgICAgICAgICAg
bV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAgICBhdmFpbGFi
aWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAgYXZh
aWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBtX2Z0
bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygp
KTsKQEAgLTg2MTIsOSArODYxOCw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9oaWdo
QmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExCYXNpY0Jsb2Nr
IG1fbmV4dExvd0Jsb2NrOwotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhp
dFRhcmdldDsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOworCisg
ICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAgICBO
b2RlKiBtX25vZGU7CiAgICAgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMTg4ODg2KQor
KysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDggKzU5LDEw
IEBAIHZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYKICAgICAgICAgcmV0
dXJuOwogICAgIHRhcmdldC5ncm93KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25zLnNpemUoKSk7
CiAgICAgc2l6ZV90IGxhc3RJbmRleCA9IHRhcmdldC5zaXplKCk7CisgICAgc2l6ZV90IG9yaWdp
bmFsVGFyZ2V0U2l6ZSA9IHRhcmdldC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaW5kZXhJbklu
c2VydGlvbnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTspIHsKICAg
ICAgICAgQVNTRVJUKCFpbmRleEluSW5zZXJ0aW9ucyB8fCBpbnNlcnRpb25zW2luZGV4SW5JbnNl
cnRpb25zXS5pbmRleCgpID49IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnMgLSAxXS5pbmRl
eCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvcmlnaW5hbFRhcmdldFNpemUsIGluc2VydGlv
bnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgPCBvcmlnaW5hbFRhcmdldFNpemUpOwogICAg
ICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmlu
ZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAgICAgICAgc2l6ZV90IGluZGV4T2Zmc2V0ID0g
aW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFzdEluZGV4
OyAtLWkgPiBmaXJzdEluZGV4OykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259911</attachid>
            <date>2015-08-25 18:39:06 -0700</date>
            <delta_ts>2015-08-25 21:32:18 -0700</delta_ts>
            <desc>even more stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99891</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODg4ODYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjk2LDYgKzI5Niw4IEBACiAJCTBGM0I3RTJBMTlBMTFC
ODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovOyB9OwogCQkwRjNCN0UyQjE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I3RTI1
MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0JEMUI3MUI4OTZBMDcwMDU5OEFBNiAvKiBE
RkdJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYzQkQxQjYxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAg
Ki87IH07CisJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjND
MUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovOyB9Owor
CQkwRjNDMUYxQjFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE5MUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGM0UwMUE4MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVt
YmVyaW5nLmNwcCAqLzsgfTsKIAkJMEYzRTAxQUIxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBv
c3ROdW1iZXJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0MjZBNDgx
NDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTM0Niw2ICszNDgsNyBAQAogCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29w
eVRva2VuLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjVBNTJDRjE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1QTYyODMxODhDOThENDAwNzJDOURG
IC8qIEZUTFZhbHVlUmFuZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY1QTYyODExODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3Bw
ICovOyB9OwogCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QTYyODIxODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjVEMDg1RDFCOENGOTlEMDAxMTQzQjQgLyogREZH
Tm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi87IH07
CiAJCTBGNUVGOTFFMTY4NzhGN0EwMDNFNUMyNSAvKiBKSVRUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUIxNjg3OEY3ODAwM0U1
QzI1IC8qIEpJVFRodW5rcy5jcHAgKi87IH07CiAJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAv
KiBKSVRUaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjVGMDhDRjE0NkM3NjMzMDAw
NDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RjA4Q0UxNDZDNzYyRjAwMDQ3MkE5IC8qIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwpAQCAtMjEwOCw2ICsyMTExLDggQEAKIAkJMEYzQjdFMjQxOUExMUI4MDAwRDlC
QzU2IC8qIENhbGxWYXJpYW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGxWYXJpYW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQjdF
MjUxOUExMUI4MDAwRDlCQzU2IC8qIENhbGxWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGxWYXJpYW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGM0JEMUI2MUI4OTZBMDcwMDU5OEFBNiAvKiBERkdJbnNlcnRpb25TZXQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9
IGRmZy9ERkdJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
OyBwYXRoID0gZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Nsb2JiZXJzRXhpdFN0
YXRlLmg7IHBhdGggPSBkZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHUHJlUG9z
dE51bWJlcmluZy5jcHA7IHBhdGggPSBkZmcvREZHUHJlUG9zdE51bWJlcmluZy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGM0UwMUE5MTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQ
cmVQb3N0TnVtYmVyaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1By
ZVBvc3ROdW1iZXJpbmcuaDsgcGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNDI2QTQ1MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1
ZVJlY292ZXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUmVjb3Zl
cnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIxNTksNiArMjE2NCw3IEBACiAJ
CTBGNUE1MkNGMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29weVRva2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNUE2MjgxMTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlUmFuZ2UuY3BwOyBwYXRoID0g
ZnRsL0ZUTFZhbHVlUmFuZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVB
NjI4MjE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVJhbmdlLmg7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQz
QjQgLyogREZHTm9kZU9yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdOb2RlT3JpZ2luLmNwcDsgcGF0aCA9IGRmZy9ERkdOb2RlT3JpZ2luLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1RUY5MUIxNjg3OEY3ODAwM0U1QzI1IC8qIEpJ
VFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRUaHVu
a3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVFRjkxQzE2ODc4Rjc4MDAz
RTVDMjUgLyogSklUVGh1bmtzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpJ
VFRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVGMDhDRTE0NkM3NjJG
MDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBVbmNvbmRpdGlvbmFsRmluYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC01MTE5LDYgKzUxMjUsOCBAQAogCQkJCUE3N0E0MjM5MTdBMEJCRkQwMEE4
REI4MSAvKiBERkdDbG9iYmVyaXplLmggKi8sCiAJCQkJQTc3QTQyM0ExN0EwQkJGRDAwQThEQjgx
IC8qIERGR0Nsb2JiZXJTZXQuY3BwICovLAogCQkJCUE3N0E0MjNCMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyU2V0LmggKi8sCisJCQkJMEYzQzFGMTgxQjg2OEU3OTAwQUJCMDhCIC8qIERG
R0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCAqLywKKwkJCQkwRjNDMUYxOTFCODY4RTc5MDBBQkIwOEIg
LyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLywKIAkJCQkwRjA0Mzk2QjFCMDNEQzBCMDA5NTk4
QjcgLyogREZHQ29tYmluZWRMaXZlbmVzcy5jcHAgKi8sCiAJCQkJMEYwNDM5NkMxQjAzREMwQjAw
OTU5OEI3IC8qIERGR0NvbWJpbmVkTGl2ZW5lc3MuaCAqLywKIAkJCQkwRkI0QjUxQTE2QjYyNzcy
MDAzRjY5NkIgLyogREZHQ29tbW9uLmNwcCAqLywKQEAgLTUyNDAsNiArNTI0OCw3IEBACiAJCQkJ
MEZCNEI1MUYxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR05vZGVBbGxvY2F0b3IuaCAqLywKIAkJCQkw
RkE1ODFCNzE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCAqLywKIAkJCQkwRkE1
ODFCODE1MEU5NTJBMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmggKi8sCisJCQkJMEY1RDA4NUMx
QjhDRjk5RDAwMTE0M0I0IC8qIERGR05vZGVPcmlnaW4uY3BwICovLAogCQkJCTBGMzAwQjc3MThB
QjA1MTEwMEE2RDcyRSAvKiBERkdOb2RlT3JpZ2luLmggKi8sCiAJCQkJMEZBNTgxQjkxNTBFOTUy
QTAwQjlBMkQ5IC8qIERGR05vZGVUeXBlLmggKi8sCiAJCQkJMEYyQjlDREExOUQwQkE3RDAwQjFE
MUI1IC8qIERGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwICovLApAQCAtNjE0OCw2
ICs2MTU3LDcgQEAKIAkJCQkwRkZGQzk1RTE0RUY5MEI3MDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
M0MxRjFCMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDEwMTdGMTc5REFGODAwMDJFQjhCQSAvKiBERkdTYW5l
U3RyaW5nR2V0QnlWYWxTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkQxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NjYW5uYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MzgxLDYgKzczOTEsNyBAQAogCQkJCTE0OTU1OUVFMEREQ0RERjcwMDY0ODA4NyAvKiBEZWJ1
Z2dlckNhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTdBNThFRjE4MDhBNEM0MDAy
MEJERjcgLyogRGVmZXJHQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5
MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGM0MxRjFBMUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJz
dHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJG
RCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzIxMTg3
NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0
LDYgKzc1NDUsNyBAQAogCQkJCTBGMDMzMkMwMThBREZBRTEwMDVGOTc5QSAvKiBFeGl0aW5nSklU
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4NTE2NzU0ODBGMDBGOEFCNkUgLyog
RXhpdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMUMxNzA4QjAwNzAwQkI3MjJD
IC8qIEZUTEFic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjVEMDg1RDFCOENG
OTlEMDAxMTQzQjQgLyogREZHTm9kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5
MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5NzhCM0IxQUFFQTcxRDAwN0M3MzY5IC8qIENvbnN0YW50TW9kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkUwNTAyNTFBQTkwOTU2MDBEMzNCMzMgLyogQ2xvbmVkQXJndW1lbnRz
LmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdEhlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SGVhcC5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIC0gU3RhY2sgd2l0aCBhIFRPUCBw
YXlsb2FkIGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQKIC8vIC0gU3RhY2sgd2l0aCBhIG5v
bi1UT1AgcGF5bG9hZCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFN0YWNrIHdpdGggYSBUT1AgcGF5
bG9hZC4KIC8vIC0gSGVhcCBpcyBhIGRpcmVjdCBzdWJ0eXBlIG9mIFdvcmxkLgorLy8gLSBTaWRl
U3RhdGUgaXMgYSBkaXJlY3Qgc3VidHlwZSBvZiBXb3JsZC4KIC8vIC0gQW55IG90aGVyIGtpbmQg
d2l0aCBUT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgSGVhcC4KIC8vIC0gQW55
IG90aGVyIGtpbmQgd2l0aCBub24tVE9QIHBheWxvYWQgaXMgdGhlIGRpcmVjdCBzdWJ0eXBlIG9m
IHRoZSBzYW1lIGtpbmQgd2l0aCBhIFRPUCBwYXlsb2FkLgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0NTAsNiArMjQ1
MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IENoZWNrVGllclVwV2l0aE5lc3RlZFRyaWdnZXJBbmRPU1JFbnRlcjoKICAgICBjYXNlIExvb3BI
aW50OgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIFVucmVhY2hhYmxlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODQsMTYgKzQ4NCwyMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lCiAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiAhaW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQogICAg
ICAgICAgICAgICAgICAgICAgICAgJiYgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
IC0gdmFyYXJnc0RhdGEtPm9mZnNldCA8PSB2YXJhcmdzRGF0YS0+bGltaXQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZFZhcmFyZ3Mg
Y2FuIGV4aXQsIHNvIGl0IGJldHRlciBiZSBleGl0T0suCisgICAgICAgICAgICAgICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9yaWdpbi5leGl0T0spOworICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSogYXJndW1lbnRDb3VudCA9IGlu
c2VydGlvblNldC5pbnNlcnRDb25zdGFudCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl
SW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGpzTnVtYmVyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAt
IHZhcmFyZ3NEYXRhLT5vZmZzZXQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlk
RXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8odmFyYXJn
c0RhdGEtPmNvdW50Lm9mZnNldCgpKSwgRWRnZShhcmd1bWVudENvdW50KSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNr
LCBub2RlLT5vcmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQodmFyYXJnc0RhdGEt
PmNvdW50LCBGbHVzaGVkSW50MzIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdl
KGFyZ3VtZW50Q291bnQsIEludDMyVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZShhcmd1bWVudENvdW50LCBLbm93bkludDMyVXNlKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwg
dmFyYXJnc0RhdGEtPmxpbWl0IC0gMSA+PSB2YXJhcmdzRGF0YS0+bWFuZGF0b3J5TWluaW11bSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZpbmUgb3VyIGxpbWl0IHRvIG5vdCBpbmNs
dWRlICJ0aGlzIiwgc2luY2UgdGhhdCdzIGEgYml0IGVhc2llciB0byByZWFzb24gYWJvdXQuCkBA
IC01MTQsNyArNTE5LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5vcmlnaW4sIE9wSW5mbyhkYXRhKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBH
ZXRTdGFjaywgbm9kZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSkpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGRuJ3QgaGF2ZSB0byBzdG9yZSBhbnl0aGluZyBpZgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBzdG9yZUluZGV4ID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRv
cnlNaW5pbXVtLCBidXQgd2Ugd2lsbCBzdGlsbApAQCAtNTI1LDcgKzUzMSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdW5kZWZpbmVkID0gaW5zZXJ0aW9uU2V0Lmluc2VydENvbnN0YW50KAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2lu
LCBqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQpLCBqc1VuZGVmaW5l
ZCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC01MzcsMTQgKzU0MywxNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZChyZWcsIEZsdXNo
ZWRKU1ZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgbm9kZS0+b3JpZ2lu
LCBPcEluZm8ocmVnLm9mZnNldCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
RWRnZSh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgs
IFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKHJlZy5vZmZzZXQoKSksIEVk
Z2UodmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVj
Tm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFZGdlKHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4ud2l0
aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZv
KGRhdGEpLCBFZGdlKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnJlbW92ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3JpZ2luLmV4aXRPSyA9IGNhbkV4aXQ7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVk
ZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZHQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1
ZGUgIkRGR0pJVENvZGUuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCkBAIC0zNjIsNiAr
MzYzLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGFkZFRvR3JhcGgoTW92SGludCwgT3BJ
bmZvKG9wZXJhbmQub2Zmc2V0KCkpLCB2YWx1ZSk7CiAKKyAgICAgICAgLy8gV2UgY2FuJ3QgZXhp
dCBhbnltb3JlIGJlY2F1c2Ugb3VyIE9TUiBleGl0IHN0YXRlIGhhcyBjaGFuZ2VkLgorICAgICAg
ICBtX2V4aXRPSyA9IGZhbHNlOworCiAgICAgICAgIERlbGF5ZWRTZXRMb2NhbCBkZWxheWVkKGN1
cnJlbnRDb2RlT3JpZ2luKCksIG9wZXJhbmQsIHZhbHVlKTsKICAgICAgICAgCiAgICAgICAgIGlm
IChzZXRNb2RlID09IE5vcm1hbFNldCkgewpAQCAtNjUxLDE1ICs2NTUsMTcgQEAgcHJpdmF0ZToK
IAogICAgIE5vZGVPcmlnaW4gY3VycmVudE5vZGVPcmlnaW4oKQogICAgIHsKLSAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBzZXQgdGhlIGZvckV4aXQgb3JpZ2luIG9ubHkgb24gdGhvc2Ugbm9k
ZXMgdGhhdCBjYW4gZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0NTIwNAogICAgICAgICBDb2RlT3JpZ2luIHNlbWFudGljOworICAgICAg
ICBDb2RlT3JpZ2luIGZvckV4aXQ7CisKICAgICAgICAgaWYgKG1fY3VycmVudFNlbWFudGljT3Jp
Z2luLmlzU2V0KCkpCiAgICAgICAgICAgICBzZW1hbnRpYyA9IG1fY3VycmVudFNlbWFudGljT3Jp
Z2luOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzZW1hbnRpYyA9IGN1cnJlbnRDb2RlT3Jp
Z2luKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRpYywgY3Vy
cmVudENvZGVPcmlnaW4oKSwgdHJ1ZSk7CisKKyAgICAgICAgZm9yRXhpdCA9IGN1cnJlbnRDb2Rl
T3JpZ2luKCk7CisKKyAgICAgICAgcmV0dXJuIE5vZGVPcmlnaW4oc2VtYW50aWMsIGZvckV4aXQs
IG1fZXhpdE9LKTsKICAgICB9CiAgICAgCiAgICAgQnJhbmNoRGF0YSogYnJhbmNoRGF0YSh1bnNp
Z25lZCB0YWtlbiwgdW5zaWduZWQgbm90VGFrZW4pCkBAIC02NzcsNiArNjgzLDggQEAgcHJpdmF0
ZToKICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgYXBwZW5kZWQgIiwgbm9kZSwgIiAiLCBHcmFwaDo6
b3BOYW1lKG5vZGUtPm9wKCkpLCAiXG4iKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmFwcGVu
ZChub2RlKTsKKyAgICAgICAgaWYgKGNsb2JiZXJzRXhpdFN0YXRlKG1fZ3JhcGgsIG5vZGUpKQor
ICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAg
fQogICAgIApAQCAtOTAwLDYgKzkwOCw4IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9jdXJy
ZW50SW5kZXg7CiAgICAgLy8gVGhlIHNlbWFudGljIG9yaWdpbiBvZiB0aGUgY3VycmVudCBub2Rl
IGlmIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IEluZGV4LgogICAgIENvZGVPcmlnaW4gbV9j
dXJyZW50U2VtYW50aWNPcmlnaW47CisgICAgLy8gVHJ1ZSBpZiBpdCdzIE9LIHRvIE9TUiBleGl0
IHJpZ2h0IG5vdy4KKyAgICBib29sIG1fZXhpdE9LIHsgZmFsc2UgfTsKIAogICAgIEZyb3plblZh
bHVlKiBtX2NvbnN0YW50VW5kZWZpbmVkOwogICAgIEZyb3plblZhbHVlKiBtX2NvbnN0YW50TnVs
bDsKQEAgLTEwNTMsNiArMTA2Myw3IEBAIHByaXZhdGU6CiAKICNkZWZpbmUgTEFTVF9PUENPREUo
bmFtZSkgXAogICAgIG1fY3VycmVudEluZGV4ICs9IE9QQ09ERV9MRU5HVEgobmFtZSk7IFwKKyAg
ICBtX2V4aXRPSyA9IGZhbHNlOyBcCiAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwog
CiB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5
cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTEzMjQsNiArMTMzNSwxNSBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgVmlydHVhbFJl
Z2lzdGVyIHJlc3VsdFJlZyhyZXN1bHRPcGVyYW5kKTsKICAgICBpZiAocmVzdWx0UmVnLmlzVmFs
aWQoKSkKICAgICAgICAgcmVzdWx0UmVnID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KHJlc3VsdFJlZyk7CisKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGNhbGxlZVZhcmlhYmxlID0g
bnVsbHB0cjsKKyAgICBpZiAoY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSkgeworICAgICAgICBOb2Rl
KiBjYWxsZWVTZXQgPSBzZXQoCisgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpLCBjYWxsVGFyZ2V0Tm9kZSwgSW1tZWRpYXRlTmFrZWRT
ZXQpOworICAgICAgICAKKyAgICAgICAgY2FsbGVlVmFyaWFibGUgPSBjYWxsZWVTZXQtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICBjYWxsZWVWYXJpYWJsZS0+bWVyZ2VTaG91bGROZXZl
clVuYm94KHRydWUpOworICAgIH0KICAgICAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0
YWNrRW50cnkoCiAgICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLmxh
c3RCbG9jaygpLCBjYWxsZWUuZnVuY3Rpb24oKSwgcmVzdWx0UmVnLApAQCAtMTMzMyw2ICsxMzUz
LDkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQogICAgIHVuc2ln
bmVkIG9sZEluZGV4ID0gbV9jdXJyZW50SW5kZXg7CiAgICAgbV9jdXJyZW50SW5kZXggPSAwOwog
CisgICAgLy8gQXQgdGhpcyBwb2ludCwgaXQncyBhZ2FpbiBPSyB0byBPU1IgZXhpdC4KKyAgICBt
X2V4aXRPSyA9IHRydWU7CisKICAgICBJbmxpbmVWYXJpYWJsZURhdGEgaW5saW5lVmFyaWFibGVE
YXRhOwogICAgIGlubGluZVZhcmlhYmxlRGF0YS5pbmxpbmVDYWxsRnJhbWUgPSBtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZTsKICAgICBpbmxpbmVWYXJpYWJsZURhdGEuYXJndW1l
bnRQb3NpdGlvblN0YXJ0ID0gYXJndW1lbnRQb3NpdGlvblN0YXJ0OwpAQCAtMTM0MiwyMCArMTM2
NSwxNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCiAgICAg
ICAgID09IGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpOwogICAgIGlmIChjYWxsZWUuaXNDbG9zdXJl
Q2FsbCgpKSB7Ci0gICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPQot
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihKU1N0YWNrOjpDYWxsZWUpLCBjYWxsVGFy
Z2V0Tm9kZSwgSW1tZWRpYXRlTmFrZWRTZXQpLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAg
ICAgCi0gICAgICAgIGNhbGxlZVZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7
Ci0gICAgICAgIAorICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsZWVWYXJpYWJsZSk7CiAgICAg
ICAgIGlubGluZVZhcmlhYmxlRGF0YS5jYWxsZWVWYXJpYWJsZSA9IGNhbGxlZVZhcmlhYmxlOwog
ICAgIH0KICAgICAKICAgICBtX2dyYXBoLm1faW5saW5lVmFyaWFibGVEYXRhLmFwcGVuZChpbmxp
bmVWYXJpYWJsZURhdGEpOwotICAgIAorCiAgICAgcGFyc2VDb2RlQmxvY2soKTsKICAgICBjbGVh
ckNhY2hlcygpOyAvLyBSZXNldCBvdXIgc3RhdGUgbm93IHRoYXQgd2UncmUgYmFjayB0byB0aGUg
b3V0ZXIgY29kZS4KICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4OworICAgIG1f
ZXhpdE9LID0gZmFsc2U7CiAgICAgCiAgICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVk
IHNvbWUgbmV3IGJhc2ljIGJsb2NrcywgdGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAg
aWYgKGlubGluZVN0YWNrRW50cnkubV9jYWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLmxhc3RC
bG9jaygpKSB7CkBAIC0xNzI0LDYgKzE3NDQsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlSW5saW5pbmcoCiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNhbGxlZSBp
cyBnb2luZyB0byBiZSAiLCBjYWxsZWVSZWcsICJcbiIpOwogICAgIHNldERpcmVjdChjYWxsZWVS
ZWcsIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVTZXRXaXRoRmx1c2gpOworCisgICAgLy8gSXQn
cyBPSyB0byBleGl0IHJpZ2h0IG5vdywgZXZlbiB0aG91Z2ggd2Ugc2V0IHNvbWUgbG9jYWxzLiBU
aGF0J3MgYmVjYXVzZSB0aG9zZSBsb2NhbHMgYXJlIG5vdAorICAgIC8vIHVzZXItdmlzaWJsZS4K
KyAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgYWRkVG9HcmFwaChFeGl0T0spOwogICAgIAogICAg
IFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5tX3N3aXRjaERhdGEuYWRkKCk7CiAgICAgZGF0
YS5raW5kID0gU3dpdGNoQ2VsbDsKQEAgLTE3ODEsNiArMTgwNiw3IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgICAgICB9CiAgICAgICAgIGRhdGEuY2FzZXMuYXBw
ZW5kKFN3aXRjaENhc2UobV9ncmFwaC5mcmVlemUodGhpbmdUb0Nhc2VPbiksIGJsb2NrLmdldCgp
KSk7CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKKyAgICAgICAgbV9leGl0
T0sgPSB0cnVlOwogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOyAvLyBUaGlzIG9ubHkg
Y29tZXMgaW50byBwbGF5IGZvciBpbnRyaW5zaWNzLCBzaW5jZSBub3JtYWwgaW5saW5lZCBjb2Rl
IHdpbGwgbGVhdmUgYW4gZW1wdHkgcXVldWUuCiAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCk7CiAg
ICAgICAgIGlmICh2ZXJib3NlKQpAQCAtMTc5NSw2ICsxODIxLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW5saW5pbmcoCiAgICAgUmVmUHRyPEJhc2ljQmxvY2s+IHNsb3dQYXRoQmxv
Y2sgPSBhZG9wdFJlZigKICAgICAgICAgbmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIG1fbnVtQXJn
dW1lbnRzLCBtX251bUxvY2FscywgUE5hTikpOwogICAgIG1fY3VycmVudEluZGV4ID0gb2xkT2Zm
c2V0OworICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICBkYXRhLmZhbGxUaHJvdWdoID0gQnJhbmNo
VGFyZ2V0KHNsb3dQYXRoQmxvY2suZ2V0KCkpOwogICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soc2xv
d1BhdGhCbG9jayk7CiAgICAgaWYgKHZlcmJvc2UpCkBAIC0xODE2LDYgKzE4NDMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICB9CiAKICAgICBtX2N1cnJlbnRJ
bmRleCA9IG5leHRPZmZzZXQ7CisgICAgbV9leGl0T0sgPSB0cnVlOyAvLyBPcmlnaW4gY2hhbmdl
ZCwgc28gaXQncyBmaW5lIHRvIGV4aXQgYWdhaW4uCiAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUo
KTsKICAgICBhZGRUb0dyYXBoKEp1bXApOwogICAgIGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1fY3Vy
cmVudEJsb2NrKTsKQEAgLTE4MzMsNiArMTg2MSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUlubGluaW5nKAogICAgICAgICBsYW5kaW5nQmxvY2tzW2ldLT50ZXJtaW5hbCgpLT50YXJn
ZXRCbG9jaygpID0gY29udGludWF0aW9uQmxvY2suZ2V0KCk7CiAgICAgCiAgICAgbV9jdXJyZW50
SW5kZXggPSBvbGRPZmZzZXQ7CisgICAgbV9leGl0T0sgPSB0cnVlOwogICAgIAogICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRvbmUgaW5saW5pbmcgKGhhcmQpLlxuIik7CkBA
IC0yNzE0LDYgKzI3NDMsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgK
ICAgICAvLyAgICBzaG9ydGN1dC4KICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0ZXJPZmZz
ZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIobmV4dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisKKyAgICAvLyBX
ZSd2ZSBzZXQgc29tZSBsb2NhbHMsIGJ1dCB0aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdz
IHN0aWxsIE9LIHRvIGV4aXQgZnJvbSBoZXJlLgorICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICBh
ZGRUb0dyYXBoKEV4aXRPSyk7CiAgICAgCiAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgZGVzdGlu
YXRpb25PcGVyYW5kLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGwsIE9QQ09ERV9M
RU5HVEgob3BfZ2V0X2J5X2lkKSwKQEAgLTI4NjksNiArMjkwMiwxMCBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpbnQgbmV4dFJlZ2lzdGVyID0gcmVnaXN0
ZXJPZmZzZXQgKyBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgYmFzZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwog
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKG5leHRSZWdpc3RlcisrKSwgdmFsdWUsIEltbWVk
aWF0ZU5ha2VkU2V0KTsKKworICAgICAgICAvLyBXZSd2ZSBzZXQgc29tZSBsb2NhbHMsIGJ1dCB0
aGV5IGFyZSBub3QgdXNlci12aXNpYmxlLiBJdCdzIHN0aWxsIE9LIHRvIGV4aXQgZnJvbSBoZXJl
LgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIGFkZFRvR3JhcGgoRXhpdE9LKTsK
ICAgICAKICAgICAgICAgaGFuZGxlQ2FsbCgKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcigp
Lm9mZnNldCgpLCBDYWxsLCBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGwsCkBAIC0yOTAxLDEy
ICsyOTM4LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIgPSBtX3ZtLT5pbnRlcnByZXRlcjsKICAgICBJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBibG9ja0JlZ2luID0gbV9j
dXJyZW50SW5kZXg7Ci0gICAgCisKICAgICAvLyBJZiB3ZSBhcmUgdGhlIGZpcnN0IGJhc2ljIGJs
b2NrLCBpbnRyb2R1Y2UgbWFya2VycyBmb3IgYXJndW1lbnRzLiBUaGlzIGFsbG93cwogICAgIC8v
IHVzIHRvIHRyYWNrIGlmIGEgdXNlIG9mIGFuIGFyZ3VtZW50IG1heSB1c2UgdGhlIGFjdHVhbCBh
cmd1bWVudCBwYXNzZWQsIGFzCiAgICAgLy8gb3Bwb3NlZCB0byB1c2luZyBhIHZhbHVlIHdlIHNl
dCBleHBsaWNpdGx5LgogICAgIGlmIChtX2N1cnJlbnRCbG9jayA9PSBtX2dyYXBoLmJsb2NrKDAp
ICYmICFpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzLnJl
c2l6ZShtX251bUFyZ3VtZW50cyk7CisgICAgICAgIC8vIFdlIHdpbGwgZW1pdCBTZXRBcmd1bWVu
dCBub2Rlcy4gVGhleSBkb24ndCBleGl0LCBidXQgd2UncmUgYXQgdGhlIHRvcCBvZiBhbiBvcF9l
bnRlciBzbworICAgICAgICAvLyBleGl0T0sgPSB0cnVlLgorICAgICAgICBtX2V4aXRPSyA9IHRy
dWU7CiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlID0gbmV3VmFyaWFibGVBY2Nlc3NEYXRhKAogICAgICAgICAgICAgICAgIHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KGFyZ3VtZW50KSk7CkBAIC0yOTIyLDYgKzI5NjIsMTAgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIH0KIAogICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIC8vIFdlJ3JlIHN0YXJpbmcgYSBuZXcgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb24uIEhlbmNlLCB3ZSBvbmNlIGFnYWluIGhhdmUgYSBwbGFjZSB0aGF0IHdlIGNhbiBl
eGl0CisgICAgICAgIC8vIHRvLgorICAgICAgICBtX2V4aXRPSyA9IHRydWU7CisgICAgICAgIAog
ICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgICAgICAKICAgICAgICAgLy8gRG9u
J3QgZXh0ZW5kIG92ZXIganVtcCBkZXN0aW5hdGlvbnMuCkBAIC0yOTk4LDcgKzMwNDIsNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAKICAgICAgICAgICAgICAg
ICAgICAgRnJvemVuVmFsdWUqIGZyb3plbiA9IG1fZ3JhcGguZnJlZXplKGNhY2hlZEZ1bmN0aW9u
KTsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0NlbGwsIE9wSW5mbyhmcm96
ZW4pLCBjYWxsZWUpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQsIE9w
SW5mbyhmcm96ZW4pKSk7CiAKICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gPSBzdGF0aWNf
Y2FzdDxKU0Z1bmN0aW9uKj4oY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAgICAgIH0KQEAg
LTM0MjAsNiArMzQ2Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgICAgIGlmICghY29tcGlsZWRBc0dldEJ5SWQpIHsKICAgICAgICAgICAgICAg
ICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51LmFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQpOwogICAgICAgICAgICAgICAgIE5vZGUqIGdl
dEJ5VmFsID0gYWRkVG9HcmFwaChHZXRCeVZhbCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSks
IE9wSW5mbyhwcmVkaWN0aW9uKSwgYmFzZSwgcHJvcGVydHkpOworICAgICAgICAgICAgICAgIG1f
ZXhpdE9LID0gZmFsc2U7IC8vIEdldEJ5VmFsIG11c3QgYmUgdHJlYXRlZCBhcyBpZiBpdCBjbG9i
YmVycyBleGl0IHN0YXRlLCBzaW5jZSBGaXh1cFBoYXNlIG1heSBtYWtlIGl0IGdlbmVyaWMuCiAg
ICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgZ2V0QnlWYWwpOwogICAgICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZH
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3ICsyNDEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChP
cHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKLSAgICAgICAgICAgICAgICB2YWxp
ZGF0ZShtX2dyYXBoKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZSgpOwogICAgICAgICB9IHdo
aWxlIChpbm5lckNoYW5nZWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG91dGVyQ2hhbmdl
ZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZp
c2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjc4LDYgKzI3OCw3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFw
aCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgIAogICAgIGNhc2UgTW92SGludDoKICAgICBj
YXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAgICAgY2FzZSBLaWxsU3RhY2s6CiAg
ICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgUGhpOgpAQCAtMzk2LDYgKzM5Nyw3IEBAIHZvaWQg
Y2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgLy8gVGhpcyBpcyBw
cmV0dHkgd2VpcmQuIEluIGZhY3QsIFN0ckNhdCBoYXMgdmVyeSBsaW1pdGVkIGVmZmVjdGZ1bG5l
c3MgYmVjYXVzZSB3ZSBvbmx5CiAgICAgICAgIC8vIHBhc3MgaXQgcHJpbWl0aXZlIHZhbHVlcy4g
QnV0LCByaWdodCBub3csIHRoZSBjb21waWxlciBpc24ndCBzbWFydCBlbm91Z2ggdG8ga25vdyB0
aGlzCiAgICAgICAgIC8vIGFuZCB0aGF0J3MgcHJvYmFibHkgT0suCisgICAgICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQzCiAgICAgICAg
IHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgcmV0dXJuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2Ji
ZXJzRXhpdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgi
CisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIGNsb2JiZXJzRXhpdFN0YXRlKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZSkKK3sKKyAgICAvLyBUaGVyZSBhcmUgY2VydGFpbiBub2RlcyB3
aG9zZSBlZmZlY3Qgb24gdGhlIGV4aXQgc3RhdGUgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aCB3aGF0
IHRoZXkKKyAgICAvLyBub3JtYWxseSBjbG9iYmVyLgorICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
eworICAgIGNhc2UgTW92SGludDoKKyAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBQdXRI
aW50OgorICAgIGNhc2UgS2lsbFN0YWNrOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGNh
c2UgU2V0TG9jYWw6CisgICAgY2FzZSBQdXRTdGFjazoKKyAgICAgICAgLy8gVGhlc2Ugbm9kZXMg
d3JpdGUgdG8gdGhlIHN0YWNrLCBidXQgdGhleSBtYXkgb25seSBkbyBzbyBhZnRlciB3ZSBoYXZl
IGFscmVhZHkgaGFkIGEgTW92SGludAorICAgICAgICAvLyBmb3IgdGhlIGV4YWN0IHNhbWUgdmFs
dWUgYW5kIHRoZSBzYW1lIHN0YWNrIGxvY2F0aW9uLiBIZW5jZSwgdGhleSBoYXZlIG5vIGZ1cnRo
ZXIgZWZmZWN0IG9uCisgICAgICAgIC8vIGV4aXQgc3RhdGUuCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICBjYXNlIEFycmF5aWZ5Ogor
ICAgIGNhc2UgTmV3T2JqZWN0OgorICAgIGNhc2UgTmV3UmVnZXhwOgorICAgIGNhc2UgTmV3U3Ry
aW5nT2JqZWN0OgorICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKKyAgICBjYXNlIE1hdGVyaWFs
aXplTmV3T2JqZWN0OgorICAgIGNhc2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgorICAgIGNhc2UgUGhh
bnRvbUNyZWF0ZUFjdGl2YXRpb246CisgICAgY2FzZSBNYXRlcmlhbGl6ZUNyZWF0ZUFjdGl2YXRp
b246CisgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKKyAgICAgICAgLy8gVGhlc2UgZG8gY2xvYmJl
ciBtZW1vcnksIGJ1dCBub3RoaW5nIHRoYXQgaXMgb2JzZXJ2YWJsZS4gSXQgbWF5IGJlIG5pY2Ug
dG8gc2VwYXJhdGUgdGhlCisgICAgICAgIC8vIGhlYXBzIGludG8gdGhvc2UgdGhhdCBhcmUgb2Jz
ZXJ2YWJsZSBhbmQgdGhvc2UgdGhhdCBhcmVuJ3QsIGJ1dCB3ZSBkb24ndCBkbyB0aGF0IHJpZ2h0
IG5vdy4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDg0NDAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBDcmVhdGVB
Y3RpdmF0aW9uOgorICAgICAgICAvLyBMaWtlIGFib3ZlLCBidXQgd2l0aCB0aGUgYWN0aXZhdGlv
biBhbGxvY2F0aW9uIGNhdmVhdC4KKyAgICAgICAgcmV0dXJuIG5vZGUtPmNhc3RPcGVyYW5kPFN5
bWJvbFRhYmxlKj4oKS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCk7CisKKyAgICBj
YXNlIE5ld0Fycm93RnVuY3Rpb246CisgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICAgICAgLy8g
TGlrZSBhYm92ZSwgYnV0IHdpdGggdGhlIEpTRnVuY3Rpb24gYWxsb2NhdGlvbiBjYXZlYXQuCisg
ICAgICAgIHJldHVybiBub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpLT5z
aW5nbGV0b25GdW5jdGlvbigpLT5pc1N0aWxsVmFsaWQoKTsKKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIC8vIEZvciBhbGwgb3RoZXIgbm9kZXMsIHdlIGp1c3QgY2FyZSBhYm91dCB3aGV0aGVyIHRo
ZXkgd3JpdGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gU2lkZVN0YXRlLgorICAgICAgICBib29s
IHJlc3VsdCA9IGZhbHNlOworICAgICAgICBjbG9iYmVyaXplKAorICAgICAgICAgICAgZ3JhcGgs
IG5vZGUsIE5vT3BDbG9iYmVyaXplKCksCisgICAgICAgICAgICBbJl0gKGNvbnN0IEFic3RyYWN0
SGVhcCYgaGVhcCkgeworICAgICAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBzdWNo
IGEgdGhpbmcgYXMgYSBzdHJpY3Qgc3VidHlwZSBvZiBTaWRlU3RhdGUuIFRoYXQncyB3aGF0IGFs
bG93cworICAgICAgICAgICAgICAgIC8vIHVzIHRvIHVzZSBhIGZhc3QgIT0gY2hlY2ssIGJlbG93
LgorICAgICAgICAgICAgICAgIEFTU0VSVCghaGVhcC5pc1N0cmljdFN1YnR5cGVPZihTaWRlU3Rh
dGUpKTsKKworICAgICAgICAgICAgICAgIGlmIChoZWFwICE9IFNpZGVTdGF0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBO
b09wQ2xvYmJlcml6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNF
eGl0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQ2xvYmJlcnNFeGl0
U3RhdGVfaAorI2RlZmluZSBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsK
K3N0cnVjdCBOb2RlOworCisvLyBBIGNvbnNlcnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mIHdoZXRo
ZXIgdGhlIG5vZGUgd2lsbCBwZXJmb3JtIGFuIGVmZmVjdCB0aGF0IG1lYW5zIHRoYXQgd2UgY2Fu
IG5vCisvLyBsb25nZXIgZXhpdCB0byB0aGlzIG5vZGUncyBleGl0IG9yaWdpbi4KKworYm9vbCBj
bG9iYmVyc0V4aXRTdGF0ZShHcmFwaCYsIE5vZGUqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdDbG9iYmVy
c0V4aXRTdGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjY3LDYgKzY2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBh
ZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpOwogCisgICAgICAgIG5vZGUtPmNoaWxkMSgpLnNldFVzZUtpbmQoS25vd25DZWxs
VXNlKTsKICAgICAgICAgY2hpbGRFZGdlLnNldFVzZUtpbmQoS25vd25DZWxsVXNlKTsKIAogICAg
ICAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uID0gMDsKQEAgLTY3Nyw2ICs2NzgsOSBAQCBwcml2
YXRlOgogCiAgICAgICAgIEVkZ2UgcHJvcGVydHlTdG9yYWdlOwogCisgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbm9kZSwgb3JpZ2luLmV4aXRPSyk7CisgICAgICAgIGJvb2wgY2FuRXhpdCA9
IHRydWU7CisKICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKQog
ICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gY2hpbGRFZGdlOwogICAgICAgICBlbHNlIGlm
ICghdmFyaWFudC5yZWFsbG9jYXRlc1N0b3JhZ2UoKSkgewpAQCAtNjg3LDcgKzY5MSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0
KCkpKTsKICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICBvcmlnaW4sIE9w
SW5mbyh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAgICAgICBvcmlnaW4udGFr
ZVZhbGlkRXhpdChjYW5FeGl0KSwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2UpOwogICAg
ICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1
cmVGb3JUcmFuc2l0aW9uKCktPm91dE9mTGluZUNhcGFjaXR5KCkpOwpAQCAtNjk1LDcgKzY5OSw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQu
b2Zmc2V0KCkpKTsKIAogICAgICAgICAgICAgTm9kZSogcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgb3JpZ2luLAorICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2UsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAgICAgICAgICAgICAgIE9wSW5m
byh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlLAogICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkpKTsKQEAgLTcwNywxMyArNzEx
LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGRhdGEuaWRlbnRpZmllck51bWJlciA9IGlkZW50aWZp
ZXJOdW1iZXI7CiAgICAgICAgIAogICAgICAgICBub2RlLT5jb252ZXJ0VG9QdXRCeU9mZnNldChk
YXRhLCBwcm9wZXJ0eVN0b3JhZ2UpOworICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2Fu
RXhpdDsKIAogICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRy
YW5zaXRpb24pIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBQdXRTdHJ1Y3R1cmUgZ29lcyBsYXN0
IHVudGlsIHdlIGZpeCBlaXRoZXIKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI5MjEgb3IKICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDI5MjQuCiAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNw
ZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVk
Z2UpOworICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jayArIDEsIFNwZWNOb25lLCBQdXRTdHJ1
Y3R1cmUsIG9yaWdpbi53aXRoSW52YWxpZEV4aXQoKSwgT3BJbmZvKHRyYW5zaXRpb24pLAorICAg
ICAgICAgICAgICAgIGNoaWxkRWRnZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDYgKzU0LDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGlu
dDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIFBoYW50b206CiAgICAgY2FzZSBVcHNpbG9u
OgogICAgIGNhc2UgUGhpOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYyLDYgKzEzNjIsNyBA
QCBwcml2YXRlOgogICAgICAgICBjYXNlIExvb3BIaW50OgogICAgICAgICBjYXNlIE1vdkhpbnQ6
CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgY2FzZSBFeGl0T0s6CiAgICAgICAg
IGNhc2UgQm90dG9tVmFsdWU6CiAgICAgICAgIGNhc2UgVHlwZU9mOgogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNDA4LDkgKzE0MDksNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY29udmVydFN0cmlu
Z0FkZFVzZShOb2RlKiBub2RlLCBFZGdlJiBlZGdlKQogICAgIHsKICAgICAgICAgaWYgKHVzZUtp
bmQgPT0gU3RyaW5nVXNlKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIHByZXNlcnZlcyB0aGUgYmlu
YXJ5VXNlS2luZCgpIGludmFyaWFudCBvdCBWYWx1ZUFkZDogVmFsdWVBZGQncwotICAgICAgICAg
ICAgLy8gdHdvIGVkZ2VzIHdpbGwgYWx3YXlzIGhhdmUgaWRlbnRpY2FsIHVzZSBraW5kcywgd2hp
Y2ggbWFrZXMgdGhlCi0gICAgICAgICAgICAvLyBkZWNpc2lvbiBwcm9jZXNzIG11Y2ggZWFzaWVy
LgogICAgICAgICAgICAgb2JzZXJ2ZVVzZUtpbmRPbk5vZGU8U3RyaW5nVXNlPihlZGdlLm5vZGUo
KSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2ssIG5vZGUtPm9yaWdpbiwKQEAgLTE1
MTIsNiArMTUxMCwxNCBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBhdHRlbXB0VG9NYWtlRmFzdFN0
cmluZ0FkZChOb2RlKiBub2RlKQogICAgIHsKKyAgICAgICAgaWYgKCFub2RlLT5vcmlnaW4uZXhp
dE9LKSB7CisgICAgICAgICAgICAvLyBJZiB0aGlzIGNvZGUgY2Fubm90IGV4aXQsIHRoZW4gd2Ug
c2hvdWxkIG5vdCBjb252ZXJ0IGl0IHRvIGEgTWFrZVJvcGUsIHNpbmNlIE1ha2VSb3BlCisgICAg
ICAgICAgICAvLyBjYW4gZXhpdC4gVGhpcyBhcmlzZXMgYmVjYXVzZSB3ZSB0aGluayB0aGF0IFN0
ckNhdCBjbG9iYmVycyBleGl0IHN0YXRlLCBldmVuIHRob3VnaCBpdAorICAgICAgICAgICAgLy8g
ZG9lc24ndCByZWFsbHkgZG8gdGhhdC4KKyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NDQzCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGJvb2wgZ29vZFRvR28gPSB0cnVl
OwogICAgICAgICBtX2dyYXBoLmRvVG9DaGlsZHJlbigKICAgICAgICAgICAgIG5vZGUsCkBAIC0x
NjM3LDYgKzE2NDMsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICAv
LyBOT1RFOiBBbnkgdHlwZSBjaGVja3Mgd2UgcHV0IGhlcmUgbWF5IGdldCBob2lzdGVkIGJ5IGZp
eHVwQ2hlY2tzSW5CbG9jaygpLiBTbywgaWYgd2UKKyAgICAgICAgICAgICAgICAvLyBhZGQgbmV3
IHR5cGUgY2hlY2tpbmcgdXNlIGtpbmQgZm9yIFNldExvY2Fscywgd2UgbmVlZCB0byBtb2RpZnkg
dGhhdCBjb2RlIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgc3dp
dGNoICh2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgRmx1
c2hlZEpTVmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjExMCw4ICsyMTE5
LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVChibG9j
ay0+aXNSZWFjaGFibGUpOwogICAgICAgICBtX2Jsb2NrID0gYmxvY2s7Ci0gICAgICAgIGZvciAo
bV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsrbV9p
bmRleEluQmxvY2spIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobV9pbmRl
eEluQmxvY2spOworICAgICAgICB1bnNpZ25lZCBpbmRleEZvckNoZWNrcyA9IFVJTlRfTUFYOwor
ICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbkZvckNoZWNrczsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4
SW5CbG9jaykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOworCisgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgbm9kZSBhdCB3aGljaCB3ZSBjb3Vs
ZCBleGl0LCB0aGVuIHNhdmUgaXRzIGluZGV4LiBJZiBub2RlcyBhZnRlciB0aGlzIG9uZQorICAg
ICAgICAgICAgLy8gY2Fubm90IGV4aXQsIHRoZW4gd2Ugd2lsbCBob2lzdCBjaGVja3MgdG8gaGVy
ZS4KKyAgICAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uZXhpdE9LKSB7CisgICAgICAgICAgICAg
ICAgaW5kZXhGb3JDaGVja3MgPSBpbmRleEluQmxvY2s7CisgICAgICAgICAgICAgICAgb3JpZ2lu
Rm9yQ2hlY2tzID0gbm9kZS0+b3JpZ2luOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
cmlnaW5Gb3JDaGVja3MgPSBvcmlnaW5Gb3JDaGVja3Mud2l0aFNlbWFudGljKG5vZGUtPm9yaWdp
bi5zZW1hbnRpYyk7CiAKICAgICAgICAgICAgIC8vIEZpcnN0LCB0cnkgdG8gcmVsYXggdGhlIHJl
cHJlc2VudGF0aW9uYWwgZGVtYW5kcyBvZiBlYWNoIG5vZGUsIGluIG9yZGVyIHRvIGhhdmUKICAg
ICAgICAgICAgIC8vIGZld2VyIGNvbnZlcnNpb25zLgpAQCAtMjE3NSwyMSArMjE5NSwyMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICAgWyZdIChFZGdl
JiBlZGdlKSB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIHJlc3VsdCA9IG51bGxwdHI7Ci0g
ICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRG91YmxlUmVwUmVhbFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3Vi
bGVSZXBNYWNoaW5lSW50VXNlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+
aGFzRG91YmxlUmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+aXNOdW1iZXJDb25zdGFudCgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNCeXRl
Y29kZURvdWJsZSwgRG91YmxlQ29uc3RhbnQsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNCeXRlY29kZURvdWJsZSwgRG91
YmxlQ29uc3RhbnQsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgT3BJbmZvKG1fZ3JhcGguZnJlZXplKGpzRG91YmxlTnVtYmVyKGVkZ2UtPmFzTnVtYmVy
KCkpKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlZGdlLT5oYXNJbnQ1
MlJlc3VsdCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bmRleEluQmxvY2ssIFNwZWNJbnQ1MkFzRG91YmxlLCBEb3VibGVSZXAsIG5vZGUtPm9yaWdpbiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNJbnQ1
MkFzRG91YmxlLCBEb3VibGVSZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgSW50NTJSZXBVc2UpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNl
S2luZCB1c2VLaW5kOwpAQCAtMjIwMSw1MyArMjIyMSw5MCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1c2VLaW5kID0gTm90Q2VsbFVzZTsKIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjQnl0ZWNv
ZGVEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVSZXAs
IG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShl
ZGdlLm5vZGUoKSwgdXNlS2luZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MlJlcFVzZTogewogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGVkZ2UtPmhhc0ludDUyUmVzdWx0KCkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+aXNNYWNoaW5lSW50Q29u
c3RhbnQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9kZS0+b3JpZ2luLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY01hY2hp
bmVJbnQsIEludDUyQ29uc3RhbnQsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgT3BJbmZvKGVkZ2UtPmNvbnN0YW50KCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZWRnZS0+aGFzRG91YmxlUmVzdWx0KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hp
bmVJbnQsIEludDUyUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTWFjaGluZUludCwgSW50NTJSZXAsIG9yaWdpbkZv
ckNoZWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUo
KSwgRG91YmxlUmVwTWFjaGluZUludFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVJbnQzMkZvckFyaXRobWV0aWMoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVj
SW50MzIsIEludDUyUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjSW50MzIsIEludDUyUmVwLCBvcmlnaW5Gb3JDaGVj
a3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIElu
dDMyVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFjaGluZUlu
dCwgSW50NTJSZXAsIG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5kZXhGb3JDaGVja3MsIFNwZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgb3JpZ2luRm9yQ2hl
Y2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBN
YWNoaW5lSW50VXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZWRn
ZS0+aGFzRG91YmxlUmVzdWx0KCkgJiYgIWVkZ2UtPmhhc0ludDUyUmVzdWx0KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+
aGFzRG91YmxlUmVzdWx0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBWYWx1ZVJlcCwgbm9kZS0+
b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywg
U3BlY0J5dGVjb2RlRG91YmxlLCBWYWx1ZVJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBEb3VibGVSZXBVc2UpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQzMiB8IFNwZWNJbnQ1MkFz
RG91YmxlLCBWYWx1ZVJlcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
b3JpZ2luLCBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVzZSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY0ludDMyIHwgU3BlY0ludDUyQXNE
b3VibGUsIFZhbHVlUmVwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5G
b3JDaGVja3MsIEVkZ2UoZWRnZS5ub2RlKCksIEludDUyUmVwVXNlKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1
bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IH0gfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXRO
b2RlKHJlc3VsdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gSXQncyByZW1vdGVseSBwb3Nz
aWJsZSB0aGF0IHRoaXMgbm9kZSBjYW5ub3QgZG8gdHlwZSBjaGVja3MsIGJ1dCB3ZSBub3cgaGF2
ZSBhCisgICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgY2hlY2sgb24gdGhpcyBub2RlLiBXZSBk
b24ndCBoYXZlIHRvIGhhbmRsZSB0aGUgZ2VuZXJhbCBmb3JtIG9mIHRoaXMKKyAgICAgICAgICAg
ICAgICAgICAgLy8gcHJvYmxlbS4gSXQgb25seSBhcmlzZXMgd2hlbiBCeXRlQ29kZVBhcnNlciBl
bWl0cyBhbiBpbW1lZGlhdGUgU2V0TG9jYWwsIHJhdGhlcgorICAgICAgICAgICAgICAgICAgICAv
LyB0aGFuIGEgZGVsYXllZCBvbmUuIFNvLCB3ZSBvbmx5IHdvcnJ5IGFib3V0IHRob3NlIGNoZWNr
cyB0aGF0IHdlIG1heSBoYXZlIHB1dCBvbgorICAgICAgICAgICAgICAgICAgICAvLyBhIFNldExv
Y2FsLiBOb3RlIHRoYXQgImluZGV4Rm9yQ2hlY2tzICE9IGluZGV4SW5CbG9jayIgaXMganVzdCBh
bm90aGVyIHdheSBvZgorICAgICAgICAgICAgICAgICAgICAvLyBzYXlpbmcgIiFub2RlLT5vcmln
aW4uZXhpdE9LIi4KKyAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4Rm9yQ2hlY2tzICE9IGlu
ZGV4SW5CbG9jayAmJiBtYXlIYXZlVHlwZUNoZWNrKGVkZ2UudXNlS2luZCgpKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgVXNlS2luZCBrbm93blVzZUtpbmQ7CisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZWRnZS51c2VLaW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga25vd25Vc2VLaW5kID0gS25vd25JbnQzMlVzZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2Vs
bFVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm93blVzZUtpbmQgPSBLbm93bkNl
bGxVc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a25vd25Vc2VLaW5kID0gS25vd25Cb29sZWFuVXNlOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhbiBvbmx5IGFyaXNlIGlmIHdlIGhhdmUgYSBDaGVj
ayBub2RlLCBhbmQgaW4gdGhhdCBjYXNlLCB3ZSBjYW4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBqdXN0IHJlbW92ZSB0aGUgb3JpZ2luYWwgY2hlY2suCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCBub2RlLT5vcCgpID09IENoZWNr
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm93blVzZUtpbmQgPSBVbnR5cGVkVXNl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTm9u
ZSwgQ2hlY2ssIG9yaWdpbkZvckNoZWNrcywgZWRnZSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVkZ2Uuc2V0VXNlS2luZChrbm93blVzZUtpbmQpOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGbHVzaEZvcm1hdC5oCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDYgKzkwLDI4IEBAIGlubGluZSBVc2VLaW5kIHVzZUtpbmRGb3IoRmx1c2hGb3Jt
YXQgZm8KICAgICByZXR1cm4gVW50eXBlZFVzZTsKIH0KIAoraW5saW5lIFVzZUtpbmQgdW5jaGVj
a2VkVXNlS2luZEZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
IHsKKyAgICBjYXNlIERlYWRGbHVzaDoKKyAgICBjYXNlIEZsdXNoZWRKU1ZhbHVlOgorICAgIGNh
c2UgQ29uZmxpY3RpbmdGbHVzaDoKKyAgICAgICAgcmV0dXJuIFVudHlwZWRVc2U7CisgICAgY2Fz
ZSBGbHVzaGVkQ2VsbDoKKyAgICAgICAgcmV0dXJuIEtub3duQ2VsbFVzZTsKKyAgICBjYXNlIEZs
dXNoZWRJbnQzMjoKKyAgICAgICAgcmV0dXJuIEtub3duSW50MzJVc2U7CisgICAgY2FzZSBGbHVz
aGVkSW50NTI6CisgICAgICAgIHJldHVybiBJbnQ1MlJlcFVzZTsKKyAgICBjYXNlIEZsdXNoZWRE
b3VibGU6CisgICAgICAgIHJldHVybiBEb3VibGVSZXBVc2U7CisgICAgY2FzZSBGbHVzaGVkQm9v
bGVhbjoKKyAgICAgICAgcmV0dXJuIEtub3duQm9vbGVhblVzZTsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gVW50eXBlZFVzZTsKK30KKwogaW5s
aW5lIFNwZWN1bGF0ZWRUeXBlIHR5cGVGaWx0ZXJGb3IoRmx1c2hGb3JtYXQgZm9ybWF0KQogewog
ICAgIHJldHVybiB0eXBlRmlsdGVyRm9yKHVzZUtpbmRGb3IoZm9ybWF0KSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDcgKzM0LDkgQEAKICNpbmNsdWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUg
IkRGR0Jsb2NrV29ya2xpc3QuaCIKICNpbmNsdWRlICJERkdDbG9iYmVyU2V0LmgiCisjaW5jbHVk
ZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5j
bHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAu
aCIKICNpbmNsdWRlICJGdWxsQnl0ZWNvZGVMaXZlbmVzcy5oIgogI2luY2x1ZGUgIkZ1bmN0aW9u
RXhlY3V0YWJsZUR1bXAuaCIKQEAgLTEwMSw4ICsxMDMsMTQgQEAgc3RhdGljIHZvaWQgcHJpbnRX
aGl0ZVNwYWNlKFByaW50U3RyZWFtJgogICAgICAgICBvdXQucHJpbnQoIiAiKTsKIH0KIAotYm9v
bCBHcmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJl
Zml4LCBOb2RlKiBwcmV2aW91c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCog
Y29udGV4dCkKK2Jvb2wgR3JhcGg6OmR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiBvdXQsIGNv
bnN0IGNoYXIqIHByZWZpeCwgTm9kZSomIHByZXZpb3VzTm9kZVJlZiwgTm9kZSogY3VycmVudE5v
ZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQogeworICAgIGlmICghY3VycmVudE5vZGUtPm9yaWdp
bi5zZW1hbnRpYykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIE5vZGUqIHByZXZp
b3VzTm9kZSA9IHByZXZpb3VzTm9kZVJlZjsKKyAgICBwcmV2aW91c05vZGVSZWYgPSBjdXJyZW50
Tm9kZTsKKwogICAgIGlmICghcHJldmlvdXNOb2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgCkBAIC0zNDUsMTIgKzM1MywxOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlzdER1bXAo
cmVhZHMuZGlyZWN0KCksICIsIikpOwogICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGlyZWN0KCks
ICIsIikpOworICAgIEV4aXRNb2RlIGV4aXRNb2RlID0gbWF5RXhpdCgqdGhpcywgbm9kZSk7Cisg
ICAgaWYgKGV4aXRNb2RlICE9IERvZXNOb3RFeGl0KQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IGV4aXRNb2RlKTsKKyAgICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUoKnRoaXMsIG5vZGUpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsICJDbG9iYmVyc0V4aXQiKTsKICAgICBpZiAobm9kZS0+b3Jp
Z2luLmlzU2V0KCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiYmMjIiwgbm9kZS0+b3Jp
Z2luLnNlbWFudGljLmJ5dGVjb2RlSW5kZXgpOwotICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNl
bWFudGljICE9IG5vZGUtPm9yaWdpbi5mb3JFeGl0KQorICAgICAgICBpZiAobm9kZS0+b3JpZ2lu
LnNlbWFudGljICE9IG5vZGUtPm9yaWdpbi5mb3JFeGl0ICYmIG5vZGUtPm9yaWdpbi5mb3JFeGl0
LmlzU2V0KCkpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGl0OiAiLCBub2RlLT5v
cmlnaW4uZm9yRXhpdCk7CiAgICAgfQotICAgIAorICAgIGlmICghbm9kZS0+b3JpZ2luLmV4aXRP
SykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdEludmFsaWQiKTsKICAgICBvdXQucHJp
bnQoIikiKTsKIAogICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKnRoaXMpICYm
IG5vZGUtPnRyeUdldFZhcmlhYmxlQWNjZXNzRGF0YSgpKQpAQCAtNDU1LDcgKzQ2OSw3IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgb3V0LnByaW50
KCIgIEFyZ3VtZW50czogIiwgbGlzdER1bXAobV9hcmd1bWVudHMpLCAiXG4iKTsKICAgICBvdXQu
cHJpbnQoIlxuIik7CiAgICAgCi0gICAgTm9kZSogbGFzdE5vZGUgPSAwOworICAgIE5vZGUqIGxh
c3ROb2RlID0gbnVsbHB0cjsKICAgICBmb3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNp
emUoKTsgKytiKSB7CiAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0
KCk7CiAgICAgICAgIGlmICghYmxvY2spCkBAIC00OTYsNyArNTEwLDYgQEAgdm9pZCBHcmFwaDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgZHVtcENvZGVPcmlnaW4ob3V0
LCAiIiwgbGFzdE5vZGUsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7CiAgICAgICAgICAgICBkdW1w
KG91dCwgIiIsIGJsb2NrLT5hdChpKSwgY29udGV4dCk7Ci0gICAgICAgICAgICBsYXN0Tm9kZSA9
IGJsb2NrLT5hdChpKTsKICAgICAgICAgfQogICAgICAgICBvdXQucHJpbnQoIiAgU3RhdGVzOiAi
LCBibG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uLCAiLCAiLCBibG9jay0+Y2ZhU3RydWN0dXJlQ2xv
YmJlclN0YXRlQXRUYWlsKTsKICAgICAgICAgaWYgKCFibG9jay0+Y2ZhRGlkRmluaXNoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTg4ODg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTAsNyArMjEwLDcgQEAgcHVibGljOgogCiAgICAgLy8gRHVtcCB0aGUgY29kZSBvcmlnaW4gb2Yg
dGhlIGdpdmVuIG5vZGUgYXMgYSBkaWZmIGZyb20gdGhlIGNvZGUgb3JpZ2luIG9mIHRoZQogICAg
IC8vIHByZWNlZGluZyBub2RlLiBSZXR1cm5zIHRydWUgaWYgYW55dGhpbmcgd2FzIHByaW50ZWQu
Ci0gICAgYm9vbCBkdW1wQ29kZU9yaWdpbihQcmludFN0cmVhbSYsIGNvbnN0IGNoYXIqIHByZWZp
eCwgTm9kZSogcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqKTsK
KyAgICBib29sIGR1bXBDb2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4
LCBOb2RlKiYgcHJldmlvdXNOb2RlLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQqKTsK
IAogICAgIEFkZFNwZWN1bGF0aW9uTW9kZSBhZGRTcGVjdWxhdGlvbk1vZGUoTm9kZSogYWRkLCBi
b29sIGxlZnRTaG91bGRTcGVjdWxhdGVJbnQzMiwgYm9vbCByaWdodFNob3VsZFNwZWN1bGF0ZUlu
dDMyLCBQcmVkaWN0aW9uUGFzcyBwYXNzKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDIsNyArNDIsNyBAQCB2b2lkIEluc2VydGlvblNldDo6aW5zZXJ0U2xvdyhjb25zdCBJ
bnNlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIG1faW5zZXJ0aW9ucy5pbnNlcnQoMCwgaW5zZXJ0aW9uKTsKIH0KIAogdm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCw2ICsx
MDQsMTMgQEAgcHVibGljOgogICAgICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IGlzIHRoZSBERkcg
U1NBIGNvbnZlbnRpb24uIFRoZXJlZm9yZSwgZWFjaCBwcmVkZWNlc3NvciBvZiB0aGUgbG9vcAog
ICAgICAgICAgICAgLy8gaGVhZGVyIG11c3QgaGF2ZSBvbmx5IG9uZSBzdWNjZXNzb3IuCiAgICAg
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG51bGxwdHIsIGV4aXN0aW5nUHJlSGVhZGVyLT50
ZXJtaW5hbCgpLT5vcCgpID09IEp1bXApOworCisgICAgICAgICAgICAvLyBBIHByZS1oZWFkZXIg
aXMgbW9zdCB1c2VmdWwgaWYgaXQncyBwb3NzaWJsZSB0byBleGl0IGZyb20gaXRzIHRlcm1pbmFs
LiBIZW5jZQorICAgICAgICAgICAgLy8gaWYgdGhlIHRlcm1pbmFsIG9mIHRoZSBleGlzdGluZyBw
cmUtaGVhZGVyIGRvZXNuJ3QgYWxsb3cgZm9yIGV4aXQsIGJ1dCB0aGUgZmlyc3QKKyAgICAgICAg
ICAgIC8vIG9yaWdpbiBvZiB0aGUgbG9vcCBoZWFkZXIgZG9lcywgdGhlbiB3ZSBzaG91bGQgY3Jl
YXRlIGEgbmV3IHByZS1oZWFkZXIuCisgICAgICAgICAgICBpZiAoIW5lZWRzTmV3UHJlSGVhZGVy
ICYmIGxvb3AuaGVhZGVyKCktPmZpcnN0T3JpZ2luKCkuZXhpdE9LCisgICAgICAgICAgICAgICAg
JiYgIWV4aXN0aW5nUHJlSGVhZGVyLT50ZXJtaW5hbCgpLT5vcmlnaW4uZXhpdE9LKQorICAgICAg
ICAgICAgICAgIG5lZWRzTmV3UHJlSGVhZGVyID0gdHJ1ZTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKCFuZWVkc05ld1ByZUhlYWRlcikKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWF5RXhpdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkocmV2aXNpb24g
MTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksMTIgKzc5LDE0IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQogCi1ib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQorRXhp
dE1vZGUgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiB7CisgICAgRXhpdE1vZGUg
cmVzdWx0ID0gRG9lc05vdEV4aXQ7CisgICAgCiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAg
ICAgLy8gVGhpcyBpcyBhIGNhcmVmdWxseSBjdXJhdGVkIGxpc3Qgb2Ygbm9kZXMgdGhhdCBkZWZp
bml0ZWx5IGRvIG5vdCBleGl0LiBXZSB0cnkgdG8gYmUgdmVyeQogICAgIC8vIGNvbnNlcnZhdGl2
ZSB3aGVuIG1haW50YWluaW5nIHRoaXMgbGlzdCwgYmVjYXVzZSBhZGRpbmcgbmV3IG5vZGUgdHlw
ZXMgdG8gaXQgZG9lc24ndAotICAgIC8vIGdlbmVyYWxseSBtYWtlIHRoaW5ncyBhIGxvdCBiZXR0
ZXIgYnV0IGl0IG1pZ2h0IGludHJvZHVjZSBpbnNhbmVseSBzdWJ0bGUgYnVncy4KKyAgICAvLyBn
ZW5lcmFsbHkgbWFrZSB0aGluZ3MgYSBsb3QgYmV0dGVyIGJ1dCBpdCBtaWdodCBpbnRyb2R1Y2Ug
c3VidGxlIGJ1Z3MuCiAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICBjYXNlIEpTQ29uc3RhbnQ6
CiAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKQEAgLTk0LDExICs5NiwxMyBAQCBib29sIG1heUV4
aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgRmx1c2g6CiAgICAgY2FzZSBQ
aGFudG9tOgogICAgIGNhc2UgQ2hlY2s6CisgICAgY2FzZSBJZGVudGl0eToKICAgICBjYXNlIEdl
dExvY2FsOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBQaGk6CiAgICAgY2FzZSBVcHNp
bG9uOgogICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEJv
dHRvbVZhbHVlOgogICAgIGNhc2UgUHV0SGludDoKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6
CkBAIC0xMTYsMTggKzEyMCw2NiBAQCBib29sIG1heUV4aXQoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQogICAgIGNhc2UgRG91YmxlUmVwOgogICAgIGNhc2UgSW50NTJSZXA6CiAgICAgY2FzZSBW
YWx1ZVJlcDoKKyAgICBjYXNlIEV4dHJhY3RPU1JFbnRyeUxvY2FsOgorICAgIGNhc2UgTG9naWNh
bE5vdDoKKyAgICBjYXNlIE5vdGlmeVdyaXRlOgorICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAg
IGNhc2UgU3RvcmVCYXJyaWVyOgorICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgY2FzZSBQdXRD
bG9zdXJlVmFyOgogICAgICAgICBicmVhazsKLSAgICAgICAgCisKKyAgICBjYXNlIFN0ckNhdDoK
KyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgY2FzZSBDYWxsVmFyYXJn
czoKKyAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFy
Z3M6CisgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIE1hdGVyaWFs
aXplQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgorICAg
IGNhc2UgTmV3RnVuY3Rpb246CisgICAgY2FzZSBOZXdBcnJvd0Z1bmN0aW9uOgorICAgIGNhc2Ug
TmV3U3RyaW5nT2JqZWN0OgorICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAgcmVz
dWx0ID0gRXhpdHNGb3JFeGNlcHRpb25zOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIC8vIElmIGluIGRvdWJ0LCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBFeGl0czsKICAgICB9CiAKICAgICBFZGdlTWF5RXhpdCBmdW5j
dG9yOwogICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKGdyYXBoLCBub2RlLCBmdW5jdG9yKTsK
LSAgICByZXR1cm4gZnVuY3Rvci5yZXN1bHQoKTsKKyAgICBpZiAoZnVuY3Rvci5yZXN1bHQoKSkK
KyAgICAgICAgcmVzdWx0ID0gRXhpdHM7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6REZHOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
RXhpdE1vZGUgbW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIERvZXNOb3RF
eGl0OgorICAgICAgICBvdXQucHJpbnQoIkRvZXNOb3RFeGl0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEV4aXRzRm9yRXhjZXB0aW9uczoKKyAgICAgICAgb3V0LnByaW50KCJFeGl0c0Zv
ckV4Y2VwdGlvbnMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdHM6CisgICAgICAg
IG91dC5wcmludCgiRXhpdHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
YXlFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlF
eGl0LmgJKHJldmlzaW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWF5RXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMCArMzYsNDggQEAgc3RydWN0IE5vZGU7CiAv
LyBBICp2ZXJ5KiBjb25zZXJ2YXRpdmUgYXBwcm94aW1hdGlvbiBvZiB3aGV0aGVyIG9yIG5vdCBh
IG5vZGUgY291bGQgcG9zc2libHkgZXhpdC4gVXN1YWxseQogLy8gcmV0dXJucyB0cnVlIGV4Y2Vw
dCBpbiBjYXNlcyB3aGVyZSB3ZSBvYnZpb3VzbHkgZG9uJ3QgZXhwZWN0IGFuIGV4aXQuCiAKLWJv
b2wgbWF5RXhpdChHcmFwaCYsIE5vZGUqKTsKK2VudW0gRXhpdE1vZGUgeworICAgIC8vIFRoZSBu
b2RlIGRvZXMgbm90IGV4aXQgYXQgYWxsLiBUaGlzIG1lYW5zIHRoYXQgaXQncyBsZWdhbCB0byBl
bGltaW5hdGUgdGhlIGZpcnN0IHN0b3JlIGluIGEKKyAgICAvLyBwcm9ncmFtIGxpa2U6CisgICAg
Ly8KKyAgICAvLyBnbG9iYWwgPSAxIC8vIGZpcnN0IHN0b3JlCisgICAgLy8gRG9lc05vdEV4aXQo
KTsgLy8gbGV0J3MgYXNzdW1lIHRoYXQgdGhpcyBhbHNvIGRvZXNuJ3QgcmVhZCAiZ2xvYmFsIgor
ICAgIC8vIGdsb2JhbCA9IDIgLy8gc2Vjb25kIHN0b3JlCisgICAgLy8KKyAgICAvLyBJdCdzIGxl
Z2FsIHRvIGVsaW1pbmF0ZSB0aGUgZmlyc3Qgb25lIHNpbmNlIG5vYm9keSB3aWxsIHNlZSBpdDsg
dGhlIHNlY29uZCBzdG9yZSBpcyBhbHdheXMKKyAgICAvLyBleGVjdXRlZCByaWdodCBhZnRlci4K
KyAgICBEb2VzTm90RXhpdCwKKworICAgIC8vIFRoZSBub2RlIHdpbGwgZXhpdCwgYnV0IG9ubHkg
YnkgcHJvcGVybHkgdGhyb3dpbmcgZXhjZXB0aW9ucy4gQSBwcm9wZXIgZXhjZXB0aW9uIHRocm93
IHdpbGwKKyAgICAvLyBkaXZlcnQgZXhlY3V0aW9uIHRvIHRoZSBtYXRjaGluZyBvcF9jYXRjaCBh
bmQgd2lsbCBub3QgcmVleGVjdXRlIHRoZSBleGl0IG9yaWdpbi4gVGhpcyBtZWFucworICAgIC8v
IHRoYXQgdGhlIHN0b3JlIGVsaW1pbmF0aW9uIG9wdGltaXphdGlvbiBhYm92ZSB3b3VsZCBiZSBp
bGxlZ2FsLCBidXQgdGhlIGZvbGxvd2luZyB3b3VsZCBiZSBPSzoKKyAgICAvLworICAgIC8vIFNp
ZGVFZmZlY3QoLi4uLCBleGl0OiBiYyM0MikKKyAgICAvLyBFeGl0c0ZvckV4Y2VwdGlvbnMoLi4u
LCBleGl0OiAjYmM0MiwgRXhpdEludmFsaWQpCisgICAgLy8KKyAgICAvLyBJbiBwYXJ0aWN1bGFy
LCBpdCdzIE9LIGZvciBhIG5vZGUgdGhhdCByZXBvcnRzIEV4aXRzRm9yRXhjZXB0aW9ucyB0byBi
ZSBleGVjdXRlZCBpbiBhIGNvbnRleHQKKyAgICAvLyB3aGVyZSAhTm9kZTo6b3JpZ2luLmV4aXRP
Sy4gVGhhdCdzIGJlY2F1c2UgdGhpcyBub2RlIHdpbGwgbm90IGV4aXQgaW4gYSBtYW5uZXIgdGhh
dCBjb3VsZCBsZWFkCisgICAgLy8gdG8gdGhlIHJlZXhlY3V0aW9uIG9mIFNpZGVFZmZlY3QoKS4K
KyAgICBFeGl0c0ZvckV4Y2VwdGlvbnMsCisKKyAgICAvLyBUaGUgbm9kZSB3aWxsIGV4aXQgdG8g
dGhlIGV4aXQgb3JpZ2luLiBUaGlzIG1lYW5zIHRoYXQgd2UgY2Fubm90IGRvIHN0b3JlIGVsaW1p
bmF0aW9uIGxpa2UgZm9yCisgICAgLy8gRG9lc05vdEV4aXQgYW5kIGFsc28gd2UgY2Fubm90IHBs
YWNlIHRoaXMgbm9kZSBpbiBhbiBFeGl0SW52YWxpZCBjb250ZXh0LCBzaW5jZSB0aGlzIHdpbGwg
ZXhpdAorICAgIC8vIGluIGEgbWFubmVyIHRoYXQgd2lsbCBjYXVzZSB0aGUgcmVleGVjdXRpb24g
b2YgYWxsIHByZXZpb3VzIG9wZXJhdGlvbnMgd2l0aGluIHRoaXMgZXhpdCBvcmlnaW4uCisgICAg
RXhpdHMKK307CisKK0V4aXRNb2RlIG1heUV4aXQoR3JhcGgmLCBOb2RlKik7CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFt
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkRGRzo6RXhpdE1vZGUp
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQogCiAj
ZW5kaWYgLy8gREZHTWF5RXhpdF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOCw3ICsxMDgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IG1fc3RhdGUub3BlcmFuZChub2RlLT51bmxpbmtlZExvY2FsKCkpID0gRXBvY2goKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwg
bm9kZSkpCisgICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSAhPSBEb2VzTm90
RXhpdCkKICAgICAgICAgICAgICAgICBjdXJyZW50RXBvY2guYnVtcCgpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBpZiAobm9kZUluZGV4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgTm9k
ZU9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
e3NlbWFudGljOiAiLCBzZW1hbnRpYywgIiwgZm9yRXhpdDogIiwgZm9yRXhpdCwgIiwgZXhpdE9L
OiAiLCBleGl0T0ssICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVPcmlnaW4uaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDkgKzI5LDEzIEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAi
REZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCitjbGFzcyBHcmFwaDsKK3N0cnVjdCBOb2RlOworCiBzdHJ1Y3QgTm9kZU9yaWdpbiB7CiAg
ICAgTm9kZU9yaWdpbigpIHsgfQogICAgIApAQCAtNDgsNyArNTIsNyBAQCBzdHJ1Y3QgTm9kZU9y
aWdpbiB7CiAgICAgICAgIHJldHVybiBzZW1hbnRpYy5pc1NldCgpOwogICAgIH0KICAgICAKLSAg
ICBOb2RlT3JpZ2luIHdpdGhTZW1hbnRpYyhDb2RlT3JpZ2luIHNlbWFudGljKQorICAgIE5vZGVP
cmlnaW4gd2l0aFNlbWFudGljKENvZGVPcmlnaW4gc2VtYW50aWMpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAoIWlzU2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gTm9kZU9yaWdpbigpOwpAQCAt
NTgsNyArNjIsNDYgQEAgc3RydWN0IE5vZGVPcmlnaW4gewogICAgICAgICAgICAgcmVzdWx0LnNl
bWFudGljID0gc2VtYW50aWM7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAg
Tm9kZU9yaWdpbiB3aXRoRXhpdE9LKGJvb2wgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBO
b2RlT3JpZ2luIHJlc3VsdCA9ICp0aGlzOworICAgICAgICByZXN1bHQuZXhpdE9LID0gdmFsdWU7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgTm9kZU9yaWdpbiB3aXRoSW52
YWxpZEV4aXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhFeGl0T0soZmFsc2Up
OworICAgIH0KKworICAgIE5vZGVPcmlnaW4gdGFrZVZhbGlkRXhpdChib29sJiBjYW5FeGl0KSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHdpdGhFeGl0T0soZXhpdE9LICYgc3RkOjpleGNo
YW5nZShjYW5FeGl0LCBmYWxzZSkpOworICAgIH0KICAgICAKKyAgICBOb2RlT3JpZ2luIGZvcklu
c2VydGluZ0FmdGVyKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIE5vZGVPcmlnaW4gcmVzdWx0ID0gKnRoaXM7CisgICAgICAgIGlmIChleGl0T0sgJiYgY2xv
YmJlcnNFeGl0U3RhdGUoZ3JhcGgsIG5vZGUpKQorICAgICAgICAgICAgcmVzdWx0LmV4aXRPSyA9
IGZhbHNlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBOb2RlT3JpZ2luJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBzZW1hbnRpYyA9PSBvdGhlci5zZW1hbnRpYworICAgICAgICAgICAgJiYgZm9yRXhpdCA9PSBv
dGhlci5mb3JFeGl0CisgICAgICAgICAgICAmJiBleGl0T0sgPT0gb3RoZXIuZXhpdE9LOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBOb2RlT3JpZ2luJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwogICAgIC8vIFVzZWQgZm9yIGRldGVybWlu
aW5nIHdoYXQgYnl0ZWNvZGUgdGhpcyBjYW1lIGZyb20uIFRoaXMgaXMgaW1wb3J0YW50IGZvcgog
ICAgIC8vIGRlYnVnZ2luZywgZXhjZXB0aW9ucywgYW5kIGV2ZW4gYmFzaWMgZXhlY3V0aW9uIHNl
bWFudGljcy4KICAgICBDb2RlT3JpZ2luIHNlbWFudGljOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MSw2ICs3MSw3
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBcCiAgICAgbWFjcm8oTW92
SGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFpvbWJpZUhpbnQsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKKyAgICBtYWNybyhFeGl0T0ssIE5vZGVNdXN0R2VuZXJhdGUpIC8qIEluZGlj
YXRlcyB0aGF0IGV4aXQgc3RhdGUgaXMgaW50YWN0LiAqLyBcCiAgICAgbWFjcm8oUGhhbnRvbSwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENoZWNrLCBOb2RlTXVzdEdlbmVyYXRlKSAv
KiBVc2VkIGlmIHdlIHdhbnQganVzdCBhIHR5cGUgY2hlY2sgYnV0IG5vdCBsaXZlbmVzcy4gTm9u
LWNoZWNraW5nIHVzZXMgd2lsbCBiZSByZW1vdmVkLiAqL1wKICAgICBtYWNybyhVcHNpbG9uLCAw
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVh
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODksNyArODksOSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGV4
ZWN1dGlvbkNvdW50IHRvIHVzZSBiZXN0IGp1ZGdlbWVudCAtIGJ1dCB0aGF0IHNlZW1zIHVubmVj
ZXNzYXJ5IHNpbmNlIHdlIGtub3cgZm9yCiAgICAgICAgIC8vIHN1cmUgd2hhdCB0aGUgZXhlY3V0
aW9uQ291bnQgc2hvdWxkIGJlIGluIHRoaXMgY2FzZS4KICAgICAgICAgQmFzaWNCbG9jayogbmV3
Um9vdCA9IGluc2VydGlvblNldC5pbnNlcnQoMCwgMSk7Ci0gICAgICAgIE5vZGVPcmlnaW4gb3Jp
Z2luID0gdGFyZ2V0LT5hdCgwKS0+b3JpZ2luOworCisgICAgICAgIC8vIFdlJ2QgcmVhbGx5IGxp
a2UgdG8gdXNlIGFuIHVuc2V0IG9yaWdpbiwgYnV0IFRocmVhZGVkQ1BTIHdvbid0IGFsbG93IHRo
YXQuCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDAp
LCBDb2RlT3JpZ2luKDApLCBmYWxzZSk7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8Tm9kZSo+
IGxvY2FscyhiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnMpOwogICAgICAgICBmb3IgKGlu
dCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyArK2xv
Y2FsKSB7CkBAIC0xMDYsNiArMTA4LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBFZGdl
KGxvY2Fsc1tsb2NhbF0pKTsKICAgICAgICAgfQogCisgICAgICAgIC8vIE5vdyB1c2UgdGhlIG9y
aWdpbiBvZiB0aGUgdGFyZ2V0LCBzaW5jZSBpdCdzIG5vdCBPSyB0byBleGl0LCBhbmQgd2Ugd2ls
bCBwcm9iYWJseSBob2lzdAorICAgICAgICAvLyB0eXBlIGNoZWNrcyB0byBoZXJlLgorICAgICAg
ICBvcmlnaW4gPSB0YXJnZXQtPmF0KDApLT5vcmlnaW47CisgICAgICAgIAogICAgICAgICBmb3Ig
KGludCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFzZWxpbmUtPm51bVBhcmFtZXRlcnMoKTsg
Kythcmd1bWVudCkgewogICAgICAgICAgICAgTm9kZSogb2xkTm9kZSA9IHRhcmdldC0+dmFyaWFi
bGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KTsKICAgICAgICAgICAgIGlmICghb2xkTm9kZSkg
ewpAQCAtMTE3LDcgKzEyMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBPcEluZm8ob2xk
Tm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCkpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1
bWVudHNbYXJndW1lbnRdID0gbm9kZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBm
b3IgKGludCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzZWxpbmUtPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
OyArK2xvY2FsKSB7CiAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c0hlYWQgPSB0YXJnZXQtPnZh
cmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCk7CiAgICAgICAgICAgICBpZiAoIXByZXZpb3VzSGVh
ZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNp
b24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE0IEBACiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmls
ZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJl
Y292ZXJ5SW5kZXgpCi0gICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZv
ckV4aXRUYXJnZXQsIGppdC0+bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUpCisgICAgOiBPU1JF
eGl0QmFzZShraW5kLCBqaXQtPm1fb3JpZ2luLmZvckV4aXQsIGppdC0+bV9vcmlnaW4uc2VtYW50
aWMpCiAgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQ
cm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCgwKQogICAg
ICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAgLCBtX3N0cmVhbUluZGV4KHN0
cmVhbUluZGV4KQogewotICAgIEFTU0VSVChtX2NvZGVPcmlnaW4uaXNTZXQoKSk7CisgICAgREZH
X0FTU0VSVChqaXQtPm1faml0LmdyYXBoKCksIGppdC0+bV9jdXJyZW50Tm9kZSwgaml0LT5tX29y
aWdpbi5leGl0T0spOwogfQogCiB2b2lkIE9TUkV4aXQ6OnNldFBhdGNoYWJsZUNvZGVPZmZzZXQo
TWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgY2hlY2spCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RB
bGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5j
bHVkZSAiREZHQmxvY2tNYXBJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuaCIKICNpbmNsdWRlICJERkdDb21iaW5lZExpdmVuZXNzLmgiCiAjaW5jbHVkZSAiREZHR3Jh
cGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRpb25TZXQuaCIKQEAgLTc1Nyw3ICs3NTgsNyBAQCBw
cml2YXRlOgogICAgICAgICBwcm9tb3RlTG9jYWxIZWFwKCk7CiAKICAgICAgICAgaWYgKE9wdGlv
bnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpKQotICAgICAgICAgICAgdmFsaWRhdGUobV9n
cmFwaCwgRHVtcEdyYXBoLCBncmFwaEJlZm9yZVNpbmtpbmcpOworICAgICAgICAgICAgREZHOjp2
YWxpZGF0ZShtX2dyYXBoLCBEdW1wR3JhcGgsIGdyYXBoQmVmb3JlU2lua2luZyk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTY3OCw3ICsxNjc5LDggQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgICAgIE5vZGUqIGlkZW50aWZpZXIgPSBpbmRleFRvTm9kZVt2YXJpYWJsZS0+
aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6YXRpb24uYWRk
KGlkZW50aWZpZXIsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0T1NS
SGludHNGb3JVcGRhdGUoMCwgTm9kZU9yaWdpbigpLCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1f
YXZhaWxhYmlsaXR5LCBpZGVudGlmaWVyLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAg
ICAgIGJvb2wgY2FuRXhpdCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGluc2VydE9TUkhpbnRz
Rm9yVXBkYXRlKDAsIE5vZGVPcmlnaW4oKSwgY2FuRXhpdCwgYXZhaWxhYmlsaXR5Q2FsY3VsYXRv
ci5tX2F2YWlsYWJpbGl0eSwgaWRlbnRpZmllciwgcGhpRGVmLT52YWx1ZSgpKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKQEAgLTE2ODgsNiArMTY5MCw4IEBA
IHByaXZhdGU6CiAKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKICAgICAgICAgICAgICAgICBO
b2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAgICAgYm9vbCBj
YW5FeGl0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBib29sIG5leHRDYW5FeGl0ID0gbm9kZS0+
b3JpZ2luLmV4aXRPSzsKICAgICAgICAgICAgICAgICBmb3IgKFByb21vdGVkSGVhcExvY2F0aW9u
IGxvY2F0aW9uIDogbV9sb2NhdGlvbnNGb3JBbGxvY2F0aW9uLmdldChub2RlKSkgewogICAgICAg
ICAgICAgICAgICAgICBpZiAobG9jYXRpb24ua2luZCgpICE9IE5hbWVkUHJvcGVydHlQTG9jKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xNjk3LDExICsxNzAxLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRh
aW5zKG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9y
aWdpbiwgbV9ib3R0b20pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5j
cmVhdGVIaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2Rl
LT5vcmlnaW4udGFrZVZhbGlkRXhpdChuZXh0Q2FuRXhpdCksIG1fYm90dG9tKSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIG1hdGVyaWFsaXphdGlvbiA6IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJpYWxp
emF0aW9ucy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9u
LT5vcmlnaW4uZXhpdE9LICY9IGNhbkV4aXQ7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGVz
Y2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0ZXJpYWxpemF0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGVNYXRlcmlhbGl6YXRpb24oYmxvY2ssIG1hdGVy
aWFsaXphdGlvbiwgZXNjYXBlZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fZXNjYXBlZVRvTWF0
ZXJpYWxpemF0aW9uLnNldChlc2NhcGVlLCBtYXRlcmlhbGl6YXRpb24pOwpAQCAtMTcxMSw3ICsx
NzE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBm
b3IgKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uIDogbV9tYXRlcmlhbGl6YXRpb25TaXRl
VG9SZWNvdmVyaWVzLmdldChub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0KG5vZGVJbmRleCwgY3JlYXRlUmVjb3ZlcnkoYmxvY2ssIGxvY2F0aW9uLCBub2Rl
KSk7CisgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChub2RlSW5kZXgs
IGNyZWF0ZVJlY292ZXJ5KGJsb2NrLCBsb2NhdGlvbiwgbm9kZSwgY2FuRXhpdCkpOwogCiAgICAg
ICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBwdXQgdGhlIE9TUiBoaW50cyBhZnRlciB0aGUgcmVj
b3ZlcmllcywKICAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG9ubHkgd2FudCB0aGUgaGlu
dHMgb25jZSB0aGUgb2JqZWN0IGlzCkBAIC0xNzE5LDE1ICsxNzI1LDI0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgZm9yIChOb2RlKiBtYXRlcmlhbGl6YXRpb24gOiBtX21hdGVyaWFsaXph
dGlvblNpdGVUb01hdGVyaWFsaXphdGlvbnMuZ2V0KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIE5vZGUqIGVzY2FwZWUgPSBtX21hdGVyaWFsaXphdGlvblRvRXNjYXBlZS5nZXQobWF0ZXJp
YWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIG5vZGUtPm9yaWdpbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLCBjYW5FeGl0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5tX2F2YWlsYWJpbGl0
eSwgZXNjYXBlZSwgbWF0ZXJpYWxpemF0aW9uKTsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+b3JpZ2luLmV4aXRPSyAmJiAhY2FuRXhpdCkgeworICAgICAg
ICAgICAgICAgICAgICAvLyBXZSBpbmRpY2F0ZSB0aGF0IHRoZSBleGl0IHN0YXRlIGlzIGZpbmUg
bm93LiBJdCBpcyBPSyBiZWNhdXNlIHdlIHVwZGF0ZWQgdGhlCisgICAgICAgICAgICAgICAgICAg
IC8vIHN0YXRlIGFib3ZlLiBXZSBuZWVkIHRvIGluZGljYXRlIHRoaXMgbWFudWFsbHkgYmVjYXVz
ZSB0aGUgdmFsaWRhdGlvbiBkb2Vzbid0CisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgZW5v
dWdoIGluZm9ybWF0aW9uIHRvIGluZmVyIHRoYXQgdGhlIGV4aXQgc3RhdGUgaXMgZmluZS4KKyAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXgsIFNw
ZWNOb25lLCBFeGl0T0ssIG5vZGUtPm9yaWdpbik7CisgICAgICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpCiAgICAgICAg
ICAgICAgICAgICAgIG1fZXNjYXBlZVRvTWF0ZXJpYWxpemF0aW9uLnNldChub2RlLCBub2RlKTsK
IAogICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IuZXhlY3V0ZU5vZGUobm9k
ZSk7CiAKKyAgICAgICAgICAgICAgICBib29sIGRlc2lyZWROZXh0RXhpdE9LID0gbm9kZS0+b3Jp
Z2luLmV4aXRPSyAmJiAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbm9kZSk7CisKICAgICAg
ICAgICAgICAgICBib29sIGRvTG93ZXIgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBoYW5kbGVO
b2RlKAogICAgICAgICAgICAgICAgICAgICBub2RlLApAQCAtMTc1MCwxMyArMTc2NSwyMSBAQCBw
cml2YXRlOgogCiAgICAgICAgICAgICAgICAgICAgICAgICBkb0xvd2VyID0gdHJ1ZTsKIAotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCArIDEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRlSGludChtX2dyYXBo
LCBub2RlLT5vcmlnaW4sIG5vZGVWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRl
eCArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uY3JlYXRlSGludCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgbm9kZS0+b3JpZ2luLnRh
a2VWYWxpZEV4aXQobmV4dENhbkV4aXQpLCBub2RlVmFsdWUpKTsKICAgICAgICAgICAgICAgICAg
ICAgfSwKICAgICAgICAgICAgICAgICAgICAgWyZdIChQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2Nh
dGlvbikgLT4gTm9kZSogewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUo
YmxvY2ssIGxvY2F0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgfSk7CiAKKyAgICAgICAgICAg
ICAgICBpZiAoIW5leHRDYW5FeGl0ICYmIGRlc2lyZWROZXh0RXhpdE9LKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGluZGljYXRlIHRoYXQgdGhlIGV4aXQgc3RhdGUgaXMgZmluZSBub3cu
IFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIHdlCisgICAgICAgICAgICAgICAgICAgIC8vIGVt
aXR0ZWQgaGludHMgdGhhdCBhcHBlYXIgdG8gaW52YWxpZGF0ZSB0aGUgZXhpdCBzdGF0ZS4KKyAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShub2RlSW5kZXggKyAx
LCBTcGVjTm9uZSwgRXhpdE9LLCBub2RlLT5vcmlnaW4pOworICAgICAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgICAgIGlmIChtX3NpbmtDYW5kaWRhdGVzLmNvbnRhaW5zKG5vZGUpIHx8IGRv
TG93ZXIpIHsKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgpAQCAtMTg3MSw3ICsxODk0LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgcmV0dXJuIGRlZi0+dmFsdWUoKTsKICAgICB9CiAKLSAgICB2b2lkIGlu
c2VydE9TUkhpbnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZU9yaWdpbiBvcmln
aW4sIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmlsaXR5LCBOb2RlKiBlc2NhcGVlLCBOb2RlKiBt
YXRlcmlhbGl6YXRpb24pCisgICAgdm9pZCBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSh1bnNpZ25l
ZCBub2RlSW5kZXgsIE5vZGVPcmlnaW4gb3JpZ2luLCBib29sJiBjYW5FeGl0LCBBdmFpbGFiaWxp
dHlNYXAmIGF2YWlsYWJpbGl0eSwgTm9kZSogZXNjYXBlZSwgTm9kZSogbWF0ZXJpYWxpemF0aW9u
KQogICAgIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBmb2xsb3coKSB0aGUgdmFsdWUgaW4gdGhl
IGhlYXAuCiAgICAgICAgIC8vIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgZ3JhcGg6CkBAIC0xOTA1
LDcgKzE5MjgsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQoCi0gICAgICAgICAgICAgICAgbm9kZUluZGV4
LCBlbnRyeS5rZXkuY3JlYXRlSGludChtX2dyYXBoLCBvcmlnaW4sIG1hdGVyaWFsaXphdGlvbikp
OworICAgICAgICAgICAgICAgIG5vZGVJbmRleCwKKyAgICAgICAgICAgICAgICBlbnRyeS5rZXku
Y3JlYXRlSGludChtX2dyYXBoLCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgbWF0ZXJp
YWxpemF0aW9uKSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBhdmFp
bGFiaWxpdHkubV9sb2NhbHMuc2l6ZSgpOyBpLS07KSB7CkBAIC0xOTE2LDcgKzE5NDAsNyBAQCBw
cml2YXRlOgogCiAgICAgICAgICAgICBpbnQgb3BlcmFuZCA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5vcGVyYW5kRm9ySW5kZXgoaSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhpbnQsIG9yaWdp
biwgT3BJbmZvKG9wZXJhbmQpLAorICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUs
IE1vdkhpbnQsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBPcEluZm8ob3BlcmFuZCks
CiAgICAgICAgICAgICAgICAgbWF0ZXJpYWxpemF0aW9uLT5kZWZhdWx0RWRnZSgpKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTIwNDIsNyArMjA2Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBOb2RlKiBjcmVhdGVSZWNvdmVyeShCYXNpY0Jsb2NrKiBibG9jaywgUHJvbW90
ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24sIE5vZGUqIHdoZXJlKQorICAgIE5vZGUqIGNyZWF0ZVJl
Y292ZXJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBsb2NhdGlvbiwg
Tm9kZSogd2hlcmUsIGJvb2wmIGNhbkV4aXQpCiAgICAgewogICAgICAgICBpZiAodmVyYm9zZSkK
ICAgICAgICAgICAgIGRhdGFMb2coIlJlY292ZXJpbmcgIiwgbG9jYXRpb24sICIgYXQgIiwgd2hl
cmUsICJcbiIpOwpAQCAtMjA1MCwxMiArMjA3NCwxNCBAQCBwcml2YXRlOgogICAgICAgICBOb2Rl
KiBiYXNlID0gZ2V0TWF0ZXJpYWxpemF0aW9uKGJsb2NrLCBsb2NhdGlvbi5iYXNlKCkpOwogICAg
ICAgICBOb2RlKiB2YWx1ZSA9IHJlc29sdmUoYmxvY2ssIGxvY2F0aW9uKTsKIAorICAgICAgICBO
b2RlT3JpZ2luIG9yaWdpbiA9IHdoZXJlLT5vcmlnaW4ud2l0aFNlbWFudGljKGJhc2UtPm9yaWdp
bi5zZW1hbnRpYyk7CisKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCJCYXNlIGlzICIsIGJhc2UsICIgYW5kIHZhbHVlIGlzICIsIHZhbHVlLCAiXG4iKTsKIAogICAg
ICAgICBpZiAoYmFzZS0+aXNQaGFudG9tQWxsb2NhdGlvbigpKSB7CiAgICAgICAgICAgICByZXR1
cm4gUHJvbW90ZWRIZWFwTG9jYXRpb24oYmFzZSwgbG9jYXRpb24uZGVzY3JpcHRvcigpKS5jcmVh
dGVIaW50KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIHdoZXJlLT5vcmlnaW4ud2l0aFNlbWFu
dGljKGJhc2UtPm9yaWdpbi5zZW1hbnRpYyksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICBtX2dy
YXBoLCBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwgdmFsdWUpOwogICAgICAgICB9CiAK
ICAgICAgICAgc3dpdGNoIChsb2NhdGlvbi5raW5kKCkpIHsKQEAgLTIwODksNyArMjExNSw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ3JhcGguYWRkTm9kZSgKICAgICAg
ICAgICAgICAgICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgICAgIFB1dEJ5T2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgICB3aGVyZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAg
ICBvcmlnaW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICAgICAgT3BJ
bmZvKGRhdGEpLAogICAgICAgICAgICAgICAgICAgICBFZGdlKHN0b3JhZ2UsIEtub3duQ2VsbFVz
ZSksCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UoYmFzZSwgS25vd25DZWxsVXNlKSwKQEAgLTIx
MTgsNyArMjE0NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGRO
b2RlKAogICAgICAgICAgICAgICAgIFNwZWNOb25lLAogICAgICAgICAgICAgICAgIE11bHRpUHV0
QnlPZmZzZXQsCi0gICAgICAgICAgICAgICAgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFz
ZS0+b3JpZ2luLnNlbWFudGljKSwKKyAgICAgICAgICAgICAgICBvcmlnaW4udGFrZVZhbGlkRXhp
dChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksCiAgICAgICAgICAgICAg
ICAgRWRnZShiYXNlLCBLbm93bkNlbGxVc2UpLAogICAgICAgICAgICAgICAgIHZhbHVlLT5kZWZh
dWx0RWRnZSgpKTsKQEAgLTIxMjksNyArMjE1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBy
ZXR1cm4gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgIFNwZWNOb25lLAogICAgICAg
ICAgICAgICAgIFB1dENsb3N1cmVWYXIsCi0gICAgICAgICAgICAgICAgd2hlcmUtPm9yaWdpbi53
aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKSwKKyAgICAgICAgICAgICAgICBvcmln
aW4udGFrZVZhbGlkRXhpdChjYW5FeGl0KSwKICAgICAgICAgICAgICAgICBPcEluZm8obG9jYXRp
b24uaW5mbygpKSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2UsIEtub3duQ2VsbFVzZSksCiAg
ICAgICAgICAgICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhbnRvbUluc2VydGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFudG9t
SW5zZXJ0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsNyArMTIzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAotICAgICAgICAgICAgaWYgKG1heUV4aXQobV9ncmFwaCwgbm9kZSkpIHsKKyAgICAgICAgICAg
IGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KSB7CiAgICAgICAgICAg
ICAgICAgY3VycmVudEVwb2NoLmJ1bXAoKTsKICAgICAgICAgICAgICAgICBsYXN0RXhpdGluZ0lu
ZGV4ID0gbm9kZUluZGV4OwogICAgICAgICAgICAgfQpAQCAtMTYwLDEwICsxNjAsMTMgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBleGFjdCByZWYgY291bnRzLCBz
byBjcmVhdGluZyBhIG5ldyB1c2UgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAg
ICAgICAgIC8vIGluY3JlbWVudCB0aGUgcmVmIGNvdW50LgogICAgICAgICAgICAgICAgICAgICBr
aWxsZWROb2RlLT5wb3N0Zml4UmVmKCk7CisKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbGFz
dEV4aXRpbmdOb2RlID0gYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpOwogICAgICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggKyAxLCBTcGVjTm9uZSwg
UGhhbnRvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5hdChsYXN0RXhpdGluZ0lu
ZGV4KS0+b3JpZ2luLCBraWxsZWROb2RlLT5kZWZhdWx0RWRnZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3RFeGl0aW5nTm9kZS0+b3JpZ2luLmZvckluc2VydGluZ0FmdGVyKG1fZ3Jh
cGgsIGxhc3RFeGl0aW5nTm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICBraWxsZWROb2Rl
LT5kZWZhdWx0RWRnZSgpKTsKICAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAgICAgICAgIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODg4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMywxMSBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKK3ZvaWQgUGhhc2U6OnZhbGlkYXRlKCkKK3sKKyAgICBERkc6OnZhbGlkYXRlKG1fZ3JhcGgs
IER1bXBHcmFwaCwgbV9ncmFwaER1bXBCZWZvcmVQaGFzZSk7Cit9CisKIHZvaWQgUGhhc2U6OmJl
Z2luUGhhc2UoKQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUo
KSkgewpAQCAtNTMsNyArNTgsNyBAQCB2b2lkIFBoYXNlOjplbmRQaGFzZSgpCiB7CiAgICAgaWYg
KCFPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIHZhbGlkYXRlKG1fZ3JhcGgsIER1bXBHcmFwaCwgbV9ncmFwaER1bXBCZWZvcmVQaGFzZSk7
CisgICAgdmFsaWRhdGUoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGhhc2UuaAkocmV2aXNpb24gMTg4ODg2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw2
ICs2MCw5IEBAIHByb3RlY3RlZDoKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07
IH0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxv
Y2s7IH0KICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2soKSB7IHJldHVybiBtX2dyYXBoLm1f
cHJvZmlsZWRCbG9jazsgfQorCisgICAgLy8gVGhpcyBydW5zIHZhbGlkYXRpb24sIGFuZCB1c2Vz
IHRoZSBncmFwaCBkdW1wIGJlZm9yZSB0aGUgcGhhc2UgaWYgcG9zc2libGUuCisgICAgdm9pZCB2
YWxpZGF0ZSgpOwogICAgIAogICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjY4LDYgKzY2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ29uc3RhbnRTdG9y
YWdlUG9pbnRlcjoKICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhp
bnQ6CisgICAgICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCShyZXZpc2lvbiAx
ODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDcgKzQ2MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmln
aW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgubV9zdGFja0Fj
Y2Vzc0RhdGEuYWRkKG9wZXJhbmQsIGZvcm1hdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVkZ2UoaW5jb21pbmcsIHVzZUtpbmRGb3IoZm9ybWF0KSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVkZ2UoaW5jb21pbmcsIHVuY2hlY2tlZFVzZUtpbmRGb3IoZm9ybWF0KSkp
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVycmVk
Lm9wZXJhbmQob3BlcmFuZCkgPSBEZWFkRmx1c2g7CiAgICAgICAgICAgICAgICAgICAgIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTU0FDb252ZXJzaW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSw2ICsyNzEs
NyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBLaWxsU3Rh
Y2ssIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhub2RlLT51
bmxpbmtlZExvY2FsKCkub2Zmc2V0KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+b3Jp
Z2luLmV4aXRPSyA9IGZhbHNlOyAvLyBLaWxsU3RhY2sgY2xvYmJlcnMgZXhpdC4KICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKQEAgLTM0Niw3ICszNDcsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogc3NhVmFyaWFibGUgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CiAg
ICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX3Zhcmlh
YmxlRm9yU1NBSW5kZXhbc3NhVmFyaWFibGUtPmluZGV4KCldOwogICAgICAgICAgICAgICAgICAg
ICBGbHVzaEZvcm1hdCBmb3JtYXQgPSB2YXJpYWJsZS0+Zmx1c2hGb3JtYXQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgVXNlS2luZCB1c2VLaW5kID0gdXNlS2luZEZvcihmb3JtYXQpOworCisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW4gdW5jaGVja2VkIHVzZSBraW5kIGJlY2F1
c2UgdGhlIFNldExvY2FsIHdhcyB0dXJuZWQgaW50byBhIENoZWNrLgorICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIHRvIHVzZSBhbiB1bmNoZWNrZWQgdXNlIGJlY2F1c2UgYXQgbGVhc3Qg
c29tZXRpbWVzLCB0aGUgZW5kIG9mIHRoZSBibG9jaworICAgICAgICAgICAgICAgICAgICAvLyBp
cyBub3QgZXhpdE9LLgorICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSB1bmNo
ZWNrZWRVc2VLaW5kRm9yKGZvcm1hdCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICAgICAgdXBzaWxvbkluc2VydGlvblBvaW50LCBTcGVjTm9uZSwgVXBzaWxvbiwgdXBzaWxvbk9y
aWdpbiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0
ZS5oCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nh
ZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw3IEBAIGJvb2wgc2Fm
ZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIEdldFN0YWNrOgogICAg
IGNhc2UgTW92SGludDoKICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgY2FzZSBFeGl0T0s6CiAg
ICAgY2FzZSBQaGFudG9tOgogICAgIGNhc2UgVXBzaWxvbjoKICAgICBjYXNlIFBoaToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5Miw2ICsxODky
LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAg
bm9SZXN1bHQobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KKworICAgIGNhc2UgRXhpdE9L
OiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsKKyAgICB9CiAgICAg
ICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODg4ODYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTcxLDYgKzE5NzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAg
IGNhc2UgRXhpdE9LOiB7CisgICAgICAgIG5vUmVzdWx0KG5vZGUpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgIAogICAgIGNhc2UgU2V0TG9jYWw6IHsKICAgICAgICAgc3dpdGNoIChu
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+Zmx1c2hGb3JtYXQoKSkgewogICAgICAgICBjYXNl
IEZsdXNoZWREb3VibGU6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEs
NyArNjEsNiBAQCBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSklUQ29tcGlsCiAgICAg
LCBtX2ludGVycHJldGVyKG1faml0LmdyYXBoKCksIG1fc3RhdGUpCiAgICAgLCBtX3N0cmVhbSgm
aml0LmppdENvZGUoKS0+dmFyaWFibGVFdmVudFN0cmVhbSkKICAgICAsIG1fbWluaWZpZWRHcmFw
aCgmaml0LmppdENvZGUoKS0+bWluaWZpZWRERkcpCi0gICAgLCBtX2lzQ2hlY2tpbmdBcmd1bWVu
dFR5cGVzKGZhbHNlKQogewogfQogCkBAIC0xOTYsNyArMTk1LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeAogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAg
ICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1f
Y2FuRXhpdCk7CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZnV6ekp1bXAgPSBlbWl0T1NSRXhpdEZ1
enpDaGVjaygpOwogICAgIGlmIChmdXp6SnVtcC5pc1NldCgpKSB7CiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wTGlzdCBqdW1wc1RvRmFpbDsKQEAgLTIxMiw3ICsyMTAsNiBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5
KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMg
fHwgbV9jYW5FeGl0KTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBmdXp6SnVtcCA9IGVtaXRPU1JF
eGl0RnV6ekNoZWNrKCk7CiAgICAgaWYgKGZ1enpKdW1wLmlzU2V0KCkpIHsKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXBMaXN0IG15SnVtcHNUb0ZhaWw7CkBAIC0yMjgsNyArMjI1LDYgQEAgT1NS
RXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogewogICAgIGlmICghbV9jb21w
aWxlT2theSkKICAgICAgICAgcmV0dXJuIE9TUkV4aXRKdW1wUGxhY2Vob2xkZXIoKTsKLSAgICBB
U1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwogICAgIHVuc2ln
bmVkIGluZGV4ID0gbV9qaXQuaml0Q29kZSgpLT5vc3JFeGl0LnNpemUoKTsKICAgICBtX2ppdC5h
cHBlbmRFeGl0SW5mbygpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSkpOwpAQCAtMjM3LDE5
ICsyMzMsMTYgQEAgT1NSRXhpdEp1bXBQbGFjZWhvbGRlciBTcGVjdWxhdGl2ZUpJVDo6cwogCiBP
U1JFeGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlKQog
ewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5u
b2RlKCkpOwogfQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4aXRL
aW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgRWRnZSBub2RlVXNlLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdB
cmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBq
c1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCk7CiB9CiAKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIGNvbnN0IE1hY3JvQXNzZW1ibGVyOjpKdW1w
TGlzdCYganVtcHNUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlw
ZXMgfHwgbV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG5vZGVVc2Uubm9kZSgpLCBqdW1wc1RvRmFpbCk7CiB9CiAKQEAgLTI1Nyw3ICsyNTAsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiB7CiAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0Fy
Z3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0g
bV9qaXQuaml0Q29kZSgpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKICAg
ICBtX2ppdC5hcHBlbmRFeGl0SW5mbyhqdW1wVG9GYWlsKTsKICAgICBtX2ppdC5qaXRDb2RlKCkt
PmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC5ncmFwaCgp
Lm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3Iobm9kZSksIHRoaXMsIG1fc3RyZWFtLT5z
aXplKCksIHJlY292ZXJ5SW5kZXgpKTsKQEAgLTI2NSw3ICsyNTcsNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpzcGVjdWxhdGlvbkNoZWNrKEV4CiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBF
ZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1
bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1
bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1Zh
bHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSwganVtcFRvRmFpbCwgcmVjb3ZlcnkpOwogfQogCkBA
IC0yNzMsNyArMjY0LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBv
aQogewogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VChtX2NhbkV4aXQpOwogICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2ppdC5h
cHBlbmRFeGl0SW5mbyhKSVRDb21waWxlcjo6SnVtcExpc3QoKSk7CiAgICAgbV9qaXQuaml0Q29k
ZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoCiAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0
aW9uLCBKU1ZhbHVlU291cmNlKCksCkBAIC0yODYsNyArMjc2LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEludmFsaWRhdGlvblBvaQogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVl
UmVncywgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyB8fCBtX2NhbkV4aXQpOwogICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgcmV0dXJu
OwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGUsIG1faml0Lmp1
bXAoKSk7CkBAIC0yOTcsNyArMjg2LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRl
U3BlY3VsYXRpdgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgRWRnZSBub2Rl
VXNlKQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhp
dCk7CiAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oa2luZCwganNWYWx1ZVJlZ3Ms
IG5vZGVVc2Uubm9kZSgpKTsKIH0KIApAQCAtMTQ2Nyw5ICsxNDU1LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5t
YWNoaW5lTG9jYWwoKSwKICAgICAgICAgICAgICAgICBmb3JtYXQpKTsKICAgICB9Ci0gICAgCi0g
ICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oKTsKLSAgICBtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVPcmlnaW4oKTsKKworICAgIG1fb3JpZ2luID0gTm9k
ZU9yaWdpbigpOwogICAgIAogICAgIGZvciAobV9pbmRleEluQmxvY2sgPSAwOyBtX2luZGV4SW5C
bG9jayA8IG1fYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewogICAgICAgICBtX2N1
cnJlbnROb2RlID0gbV9ibG9jay0+YXQobV9pbmRleEluQmxvY2spOwpAQCAtMTQ4MSwxNSArMTQ2
OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3VycmVudEJsb2NrCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQot
ICAgICAgICAgICAgbV9jYW5FeGl0ID0gdHJ1ZTsgLy8gRXNzZW50aWFsbHkgZGlzYWJsZSB0aGUg
YXNzZXJ0aW9ucy4KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jYW5FeGl0ID0gbWF5RXhp
dChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKTsKLSAgICAgICAgCiAgICAgICAgIG1faW50
ZXJwcmV0ZXIuc3RhcnRFeGVjdXRpbmcoKTsKICAgICAgICAgbV9qaXQuc2V0Rm9yTm9kZShtX2N1
cnJlbnROb2RlKTsKLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IG1fY3VycmVu
dE5vZGUtPm9yaWdpbi5mb3JFeGl0OwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmls
ZSA9IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICAgICAgbV9vcmlnaW4gPSBt
X2N1cnJlbnROb2RlLT5vcmlnaW47CisgICAgICAgIGlmICh2YWxpZGF0aW9uRW5hYmxlZCgpKQor
ICAgICAgICAgICAgbV9vcmlnaW4uZXhpdE9LICY9IG1heUV4aXQobV9qaXQuZ3JhcGgoKSwgbV9j
dXJyZW50Tm9kZSkgPT0gRXhpdHM7CiAgICAgICAgIG1fbGFzdEdlbmVyYXRlZE5vZGUgPSBtX2N1
cnJlbnROb2RlLT5vcCgpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUt
PnNob3VsZEdlbmVyYXRlKCkpOwpAQCAtMTUzNiw5ICsxNTE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUN1cnJlbnRCbG9jawogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1
bWVudFR5cGVzKCkKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudE5vZGUpOwotICAgIG1faXNDaGVj
a2luZ0FyZ3VtZW50VHlwZXMgPSB0cnVlOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQg
PSBDb2RlT3JpZ2luKDApOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9y
aWdpbigwKTsKKyAgICBtX29yaWdpbiA9IE5vZGVPcmlnaW4oQ29kZU9yaWdpbigwKSwgQ29kZU9y
aWdpbigwKSwgdHJ1ZSk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1faml0LmNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICBOb2RlKiBub2RlID0gbV9qaXQu
Z3JhcGgoKS5tX2FyZ3VtZW50c1tpXTsKQEAgLTE2MDEsNyArMTU4Miw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgfQogI2VuZGlmCiAgICAgfQot
ICAgIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgPSBmYWxzZTsKKworICAgIG1fb3JpZ2luID0g
Tm9kZU9yaWdpbigpOwogfQogCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlz
aW9uIDE4ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1OCw3ICsyNDU4LDYgQEAgcHVibGljOgogICAgIEJh
c2ljQmxvY2sqIG1fYmxvY2s7CiAgICAgTm9kZSogbV9jdXJyZW50Tm9kZTsKICAgICBOb2RlVHlw
ZSBtX2xhc3RHZW5lcmF0ZWROb2RlOwotICAgIGJvb2wgbV9jYW5FeGl0OwogICAgIHVuc2lnbmVk
IG1faW5kZXhJbkJsb2NrOwogICAgIC8vIFZpcnR1YWwgYW5kIHBoeXNpY2FsIHJlZ2lzdGVyIG1h
cHMuCiAgICAgVmVjdG9yPEdlbmVyYXRpb25JbmZvLCAzMj4gbV9nZW5lcmF0aW9uSW5mbzsKQEAg
LTI0NzksOCArMjQ3OCw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIFZlY3RvcjxCcmFuY2hSZWNv
cmQsIDg+IG1fYnJhbmNoZXM7CiAKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRU
YXJnZXQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKyAgICBO
b2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRlIG1fc3Rh
dGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4gbV9pbnRl
cnByZXRlcjsKQEAgLTI0ODgsOCArMjQ4Niw2IEBAIHB1YmxpYzoKICAgICBWYXJpYWJsZUV2ZW50
U3RyZWFtKiBtX3N0cmVhbTsKICAgICBNaW5pZmllZEdyYXBoKiBtX21pbmlmaWVkR3JhcGg7CiAg
ICAgCi0gICAgYm9vbCBtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzOwotICAgIAogICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8U2xvd1BhdGhHZW5lcmF0b3I+LCA4PiBtX3Nsb3dQYXRoR2VuZXJh
dG9yczsKICAgICBWZWN0b3I8U2lsZW50UmVnaXN0ZXJTYXZlUGxhbj4gbV9wbGFuczsKIH07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3JlQmFycmllckluc2VydGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0b3Jl
QmFycmllckluc2VydGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4ODg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdG9yZUJhcnJpZXJJbnNlcnRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMCw3ICszMTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhbGxvY2F0ZSBidXQgdGhlbiBy
dW4gdGhlaXIgb3duIGJhcnJpZXIuCi0gICAgICAgICAgICAgICAgaW5zZXJ0QmFycmllcihtX25v
ZGVJbmRleCArIDEsIG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBp
bnNlcnRCYXJyaWVyV2l0aEludmFsaWRFeGl0KG1fbm9kZUluZGV4ICsgMSwgRWRnZShtX25vZGUt
PmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgbV9ub2Rl
LT5zZXRFcG9jaChFcG9jaCgpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKQEAgLTQ3NCwxMCArNDc0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBp
ZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgICAgIEluc2VydGluZyBi
YXJyaWVyLlxuIik7Ci0gICAgICAgIGluc2VydEJhcnJpZXIobV9ub2RlSW5kZXgsIGJhc2Uubm9k
ZSgpKTsKKyAgICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFzZSk7CiAgICAgfQot
ICAgIAotICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25lZCBub2RlSW5kZXgsIE5vZGUqIGJh
c2UpCisKKyAgICB2b2lkIGluc2VydEJhcnJpZXJXaXRoSW52YWxpZEV4aXQodW5zaWduZWQgbm9k
ZUluZGV4LCBFZGdlIGJhc2UpCisgICAgeworICAgICAgICBpbnNlcnRCYXJyaWVyKG5vZGVJbmRl
eCwgYmFzZSwgZmFsc2UpOworICAgIH0KKworICAgIHZvaWQgaW5zZXJ0QmFycmllcih1bnNpZ25l
ZCBub2RlSW5kZXgsIEVkZ2UgYmFzZSwgYm9vbCBleGl0T0sgPSB0cnVlKQogICAgIHsKICAgICAg
ICAgLy8gSWYgd2UncmUgaW4gZ2xvYmFsIG1vZGUsIHdlIHNob3VsZCBvbmx5IGluc2VydCB0aGUg
YmFycmllcnMgb25jZSB3ZSBoYXZlIGNvbnZlcmdlZC4KICAgICAgICAgaWYgKCFyZWFsbHlJbnNl
cnRCYXJyaWVycygpKQpAQCAtNDg1LDggKzQ5MCwxOCBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHN1cHBvcnQgU3RvcmVCYXJyaWVyKFVudHlwZWRVc2U6
KS4gVGhhdCB3b3VsZCBiZSBzb3J0IG9mIGNvb2wuCiAgICAgICAgIC8vIEJ1dCByaWdodCBub3cg
d2UgZG9uJ3QgbmVlZCBpdC4KKworICAgICAgICAvLyBJZiB0aGUgb3JpZ2luYWwgZWRnZSB3YXMg
dW5jaGVja2VkLCB3ZSBzaG91bGQgYWxzbyBub3QgaGF2ZSBhIGNoZWNrLiBXZSBtYXkgYmUgaW4g
YSBjb250ZXh0CisgICAgICAgIC8vIHdoZXJlIGNoZWNrcyBhcmUgbm90IGFsbG93ZWQuIElmIHdl
IGV2ZXIgZGlkIGhhdmUgdG8gaW5zZXJ0IGEgYmFycmllciBhdCBhbiBFeGl0SW52YWxpZAorICAg
ICAgICAvLyBjb250ZXh0IGFuZCB0aGF0IGJhcnJpZXIgbmVlZGVkIGEgY2hlY2ssIHRoZW4gd2Ug
Y291bGQgbWFrZSB0aGF0IHdvcmsgYnkgaG9pc3RpbmcgdGhlIGNoZWNrLgorICAgICAgICAvLyBU
aGF0IGRvZXNuJ3QgaGFwcGVuIHJpZ2h0IG5vdy4KKyAgICAgICAgaWYgKGJhc2UudXNlS2luZCgp
ICE9IEtub3duQ2VsbFVzZSkgeworICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIG1fbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICBiYXNlLnNldFVzZUtpbmQo
Q2VsbFVzZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCi0gICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIs
IG1fbm9kZS0+b3JpZ2luLCBFZGdlKGJhc2UsIENlbGxVc2UpKTsKKyAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhp
dChleGl0T0spLCBiYXNlKTsKIAogICAgICAgICBiYXNlLT5zZXRFcG9jaChtX2N1cnJlbnRFcG9j
aCk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tI
b2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODg4ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDgsOCArMTA4LDE2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKICAgICAgICAgICAgIGlm
ICghYmxvY2spCiAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbmRleEZvckNoZWNrcyA9IFVJTlRfTUFYOworICAgICAgICAgICAgTm9kZU9yaWdpbiBvcmln
aW5Gb3JDaGVja3M7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7
IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAg
ICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uZXhpdE9LKSB7CisgICAg
ICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzID0gaW5kZXhJbkJsb2NrOworICAgICAgICAg
ICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3MgPSBub2RlLT5vcmlnaW47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIEJlIGNhcmVmdWwgbm90
IHRvIHVzZSAnbm9kZScgYWZ0ZXIgYXBwZW5kaW5nIHRvIHRoZSBncmFwaC4gSW4gdGhvc2Ugc3dp
dGNoCiAgICAgICAgICAgICAgICAgLy8gY2FzZXMgd2hlcmUgd2UgbmVlZCB0byBhcHBlbmQsIHdl
IGZpcnN0IGNhcmVmdWxseSBleHRyYWN0IGV2ZXJ5dGhpbmcgd2UgbmVlZAogICAgICAgICAgICAg
ICAgIC8vIGZyb20gdGhlIG5vZGUsIGJlZm9yZSBkb2luZyBhbnkgYXBwZW5kaW5nLgpAQCAtMTcw
LDEzICsxNzgsMTUgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLndp
dGhTZW1hbnRpYyhvcmlnaW4uc2VtYW50aWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChpdGVyLT52YWx1ZS5tX3N0cnVjdHVyZSkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoY2hpbGQxLm5vZGUoKSwgQ2VsbFVz
ZSkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZXItPnZhbHVlLm1fYXJyYXlN
b2RlSXNWYWxpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVl
Lm1fYXJyYXlNb2RlSG9pc3RpbmdPa2F5KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIENoZWNrQXJyYXksIG9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY05vbmUsIENoZWNrQXJyYXksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3JpZ2luRm9yQ2hlY2tzLndpdGhTZW1hbnRpYyhvcmlnaW4uc2Vt
YW50aWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhpdGVyLT52YWx1ZS5t
X2FycmF5TW9kZS5hc1dvcmQoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShj
aGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE4
ODg4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNs
dWRlICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgorI2luY2x1ZGUgIkRGR0Nsb2JiZXJzRXhpdFN0
YXRlLmgiCiAjaW5jbHVkZSAiREZHTWF5RXhpdC5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtMTg1LDEzICsxODYsMzAgQEAgcHVibGlj
OgogICAgICAgICAgICAgCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2Nr
LT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
aSk7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSks
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5pc1NldCgpID09IG5vZGUtPm9yaWdpbi5mb3JFeGl0Lmlz
U2V0KCkpOwotICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW1heUV4aXQobV9ncmFw
aCwgbm9kZSkgfHwgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoKG5vZGUpLCAhKCFub2RlLT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpICYmIG5v
ZGUtPm9yaWdpbi5leGl0T0spKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICEo
bWF5RXhpdChtX2dyYXBoLCBub2RlKSA9PSBFeGl0cyAmJiAhbm9kZS0+b3JpZ2luLmV4aXRPSykp
OworCisgICAgICAgICAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
cHJldmlvdXNOb2RlID0gYmxvY2stPmF0KGkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoCisgICAgICAgICAgICAgICAgICAgICAgICAobm9kZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAhY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgcHJldmlvdXNOb2RlKQorICAgICAg
ICAgICAgICAgICAgICAgICAgfHwgIW5vZGUtPm9yaWdpbi5leGl0T0sKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBub2RlLT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0
KTsKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICAg
ICAobm9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAhKCFwcmV2aW91c05vZGUtPm9yaWdp
bi5leGl0T0sgJiYgbm9kZS0+b3JpZ2luLmV4aXRPSykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHx8IG5vZGUtPm9wKCkgPT0gRXhpdE9LCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBub2Rl
LT5vcmlnaW4uZm9yRXhpdCAhPSBwcmV2aW91c05vZGUtPm9yaWdpbi5mb3JFeGl0KTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVkFMSURBVEUo
KG5vZGUpLCAhbm9kZS0+aGFzU3RydWN0dXJlKCkgfHwgISFub2RlLT5zdHJ1Y3R1cmUoKSk7CiAg
ICAgICAgICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbm9kZS0+aGFzQ2VsbE9wZXJhbmQoKSB8
fCBub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1ZSgpLmlzQ2VsbCgpKTsKICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksICFub2RlLT5oYXNDZWxsT3BlcmFuZCgpIHx8ICEhbm9kZS0+Y2Vs
bE9wZXJhbmQoKS0+dmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghKG5vZGUtPmZsYWdzKCkgJiBOb2RlSGFzVmFyQXJncykp
IHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFub2RlLT5jaGlsZDIoKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIW5vZGUtPmNoaWxkMygpKTsKQEAgLTIxMCwx
MCArMjI4LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBVbnR5cGVkVXNl
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIENlbGxVc2U6CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgS25vd25DZWxsVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVXNlOgor
ICAgICAgICAgICAgICAgICAgICBjYXNlIEtub3duSW50MzJVc2U6CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgSW50NTJSZXBVc2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlUmVw
VXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgS25vd25Cb29sZWFuVXNlOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBWQUxJREFURSgobm9kZSksICEiQmFkIHVzZSBraW5kIik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxLDYgKzUxLDcgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2Ug
Wm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIFBoYW50b206CiAgICAgY2Fz
ZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b21Mb2NhbDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODg4ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI3LDkgKzIyNyw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGF2YWlsYWJp
bGl0eU1hcCgpLm1fbG9jYWxzLmFyZ3VtZW50KGkpID0KICAgICAgICAgICAgICAgICBBdmFpbGFi
aWxpdHkoRmx1c2hlZEF0KEZsdXNoZWRKU1ZhbHVlLCB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVu
dChpKSkpOwogICAgICAgICB9Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRUYXJnZXQgPSBD
b2RlT3JpZ2luKDApOwotICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IENvZGVP
cmlnaW4oMCk7CiAgICAgICAgIG1fbm9kZSA9IG51bGxwdHI7CisgICAgICAgIG1fb3JpZ2luID0g
Tm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gY29kZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewog
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CiAgICAgICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50
KGkpOwpAQCAtMzkzLDggKzM5Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIG1fbm9kZSA9IG1faGlnaEJsb2NrLT5hdChub2RlSW5kZXgpOwotICAgICAgICBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljOwotICAgICAg
ICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9ub2RlLT5vcmlnaW4uZm9yRXhpdDsKKyAg
ICAgICAgbV9vcmlnaW4gPSBtX25vZGUtPm9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmlu
ZyAiLCBtX25vZGUsICJcbiIpOwpAQCAtODQxLDYgKzgzOSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBab21i
aWVIaW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBQaGFudG9tTmV3T2Jq
ZWN0OgogICAgICAgICBjYXNlIFBoYW50b21OZXdGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQaGFu
dG9tQ3JlYXRlQWN0aXZhdGlvbjoKQEAgLTg3OCwxNSArODc3LDE4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBtX291dC5zZXQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlv
bik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAg
Y2FzZSBLbm93bkludDMyVXNlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBJbnQ1MlJlcFVzZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dJbnQ1MihtX25vZGUt
PmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQm9vbGVhblVzZToKKyAgICAgICAgY2FzZSBLbm93bkJvb2xlYW5Vc2U6CiAgICAgICAgICAg
ICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24pOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgY2FzZSBL
bm93bkNlbGxVc2U6CiAgICAgICAgICAgICBtX291dC5zZXQobG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgVW50
eXBlZFVzZToKQEAgLTQ3NTIsMTAgKzQ3NTQsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCIg
ICAgSW52YWxpZGF0aW9uIHBvaW50IHdpdGggYXZhaWxhYmlsaXR5OiAiLCBhdmFpbGFiaWxpdHlN
YXAoKSwgIlxuIik7CisKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3Jp
Z2luLmV4aXRPSyk7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4
aXQuYXBwZW5kKE9TUkV4aXQoCiAgICAgICAgICAgICBVbmNvdW50YWJsZUludmFsaWRhdGlvbiwg
SW52YWxpZFZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlKCksCi0gICAg
ICAgICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0LCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJv
ZmlsZSwKKyAgICAgICAgICAgIG1fb3JpZ2luLmZvckV4aXQsIG1fb3JpZ2luLnNlbWFudGljLAog
ICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZBcmd1bWVudHMo
KSwKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgpLm1fbG9jYWxzLm51bWJlck9mTG9jYWxz
KCkpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5maW5hbGl6ZXItPm9zckV4aXQuYXBwZW5kKE9TUkV4
aXRDb21waWxhdGlvbkluZm8oKSk7CkBAIC04MDkzLDYgKzgwOTcsOCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgaWYgKCFtX2F2YWlsYWJsZVJlY292ZXJpZXMuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgQXZhaWxhYmxlIHJlY292ZXJpZXM6ICIsIGxpc3REdW1w
KG1fYXZhaWxhYmxlUmVjb3ZlcmllcyksICJcbiIpOwogICAgICAgICB9CisKKyAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIG1fb3JpZ2luLmV4aXRPSyk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoZG9PU1JFeGl0RnV6emluZygpKSB7CiAgICAgICAgICAgICBMVmFsdWUgbnVtYmVy
T2ZGdXp6Q2hlY2tzID0gbV9vdXQuYWRkKApAQCAtODExNyw3ICs4MTIzLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NS
RXhpdCgKICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKLSAgICAgICAgICAgIG1fY29k
ZU9yaWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgICAg
ICAgICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAgICBh
dmFpbGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAg
ICBtX2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9u
SW5mbygpKTsKQEAgLTg2MTIsOSArODYxOCw4IEBAIHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayog
bV9oaWdoQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExCYXNp
Y0Jsb2NrIG1fbmV4dExvd0Jsb2NrOwotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2lu
Rm9yRXhpdFRhcmdldDsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxl
OworCisgICAgTm9kZU9yaWdpbiBtX29yaWdpbjsKICAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsK
ICAgICBOb2RlKiBtX25vZGU7CiAgICAgCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbnNlcnRpb24uaAkocmV2aXNpb24gMTg4
ODg2KQorKysgU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU5LDgg
KzU5LDEwIEBAIHZvaWQgZXhlY3V0ZUluc2VydGlvbnMoVGFyZ2V0VmVjdG9yVHlwZSYKICAgICAg
ICAgcmV0dXJuOwogICAgIHRhcmdldC5ncm93KHRhcmdldC5zaXplKCkgKyBpbnNlcnRpb25zLnNp
emUoKSk7CiAgICAgc2l6ZV90IGxhc3RJbmRleCA9IHRhcmdldC5zaXplKCk7CisgICAgc2l6ZV90
IG9yaWdpbmFsVGFyZ2V0U2l6ZSA9IHRhcmdldC5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaW5k
ZXhJbkluc2VydGlvbnMgPSBpbnNlcnRpb25zLnNpemUoKTsgaW5kZXhJbkluc2VydGlvbnMtLTsp
IHsKICAgICAgICAgQVNTRVJUKCFpbmRleEluSW5zZXJ0aW9ucyB8fCBpbnNlcnRpb25zW2luZGV4
SW5JbnNlcnRpb25zXS5pbmRleCgpID49IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnMgLSAx
XS5pbmRleCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChvcmlnaW5hbFRhcmdldFNpemUsIGlu
c2VydGlvbnNbaW5kZXhJbkluc2VydGlvbnNdLmluZGV4KCkgPCBvcmlnaW5hbFRhcmdldFNpemUp
OwogICAgICAgICBzaXplX3QgZmlyc3RJbmRleCA9IGluc2VydGlvbnNbaW5kZXhJbkluc2VydGlv
bnNdLmluZGV4KCkgKyBpbmRleEluSW5zZXJ0aW9uczsKICAgICAgICAgc2l6ZV90IGluZGV4T2Zm
c2V0ID0gaW5kZXhJbkluc2VydGlvbnMgKyAxOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gbGFz
dEluZGV4OyAtLWkgPiBmaXJzdEluZGV4OykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259919</attachid>
            <date>2015-08-25 21:32:18 -0700</date>
            <delta_ts>2015-08-25 22:59:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>115570</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4OTQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxMyBA
QAorMjAxNS0wOC0yNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE5vZGU6Om9yaWdpbiBzaG91bGQgYmUgYWJsZSB0byB0ZWxsIHlvdSBpZiBpdCdzIE9LIHRvIGV4
aXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTIw
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
aXMgYSBtYWpvciBjaGFuZ2UgdG8gREZHIElSLCB0aGF0IG1ha2VzIGl0IGVhc2llciB0byByZWFz
b24gYWJvdXQgd2hlcmUgbm9kZXMgd2l0aAorICAgICAgICBzcGVjdWxhdGlvbnMgY2FuIGJlIHNv
dW5kbHkgaG9pc3RlZC4KKworICAgICAgICBBIHByb2dyYW0gaW4gREZHIElSIGlzIGEgc2VxdWVu
Y2Ugb2Ygb3BlcmF0aW9ucyB0aGF0IGNvbXB1dGUgdGhlIHZhbHVlcyBvZiBTU0EgdmFyaWFibGVz
LAorICAgICAgICBwZXJmb3JtIGVmZmVjdHMgb24gdGhlIGhlYXAgb3Igc3RhY2ssIGFuZCBwZXJm
b3JtIHVwZGF0ZXMgdG8gdGhlIE9TUiBleGl0IHN0YXRlLiBCZWNhdXNlCisgICAgICAgIGVmZmVj
dHMgYW5kIE9TUiBleGl0IHVwZGF0ZXMgYXJlIGludGVybGVhdmVkLCB0aGVyZSBhcmUgcG9pbnRz
IGluIGV4ZWN1dGlvbiB3aGVyZSBleGl0aW5nCisgICAgICAgIHNpbXBseSB3b24ndCB3b3JrLiBG
b3IgZXhhbXBsZSwgd2UgbWF5IGhhdmUgc29tZSBieXRlY29kZSBvcGVyYXRpb246CisKKyAgICAg
ICAgICAgIFsgIDI0XSBvcF9mb28gbG9jNDIgLy8gZG9lcyBzb21ldGhpbmcsIGFuZCBwdXRzIGEg
dmFsdWUgaW4gbG9jNDIuCisKKyAgICAgICAgdGhhdCBnZXRzIGNvbXBpbGVkIGRvd24gdG8gYSBz
ZXF1ZW5jZSBvZiBERkcgSVIgbm9kZXMgbGlrZToKKworICAgICAgICAgICAgYTogRm9vKFc6SGVh
cCwgUjpXb3JsZCwgYmMjMjQpCisgICAgICAgICAgICBiOiBNb3ZIaW50KEBhLCBsb2M0MiwgYmMj
MjQpCisgICAgICAgICAgICBjOiBTZXRMb2NhbChJbnQzMjpAYSwgbG9jNDIsIGJjIzI0LCBleGl0
OiBiYyMyNikKKworICAgICAgICBOb3RlIHRoYXQgd2UgY2FuIE9TUiBleGl0IGF0IEBhIGJlY2F1
c2Ugd2UgaGF2ZW4ndCB5ZXQgcGVyZm9ybWVkIGFueSBlZmZlY3RzIGZvciBiYyMyNCB5ZXQgYW5k
CisgICAgICAgIHdlIGhhdmUgcGVyZm9ybWVkIGFsbCBlZmZlY3RzIGZvciBwcmlvciBieXRlY29k
ZSBvcGVyYXRpb25zLiBUaGF0J3Mgd2hhdCB0aGUgb3JpZ2luLmZvckV4aXQKKyAgICAgICAgYmVp
bmcgc2V0IHRvICJiYyMyNCIgZ3VhcmFudGVlcy4gU28sIGFuIE9TUiBleGl0IHdvdWxkIHRyYW5z
ZmVyIGV4ZWN1dGlvbiB0byBiYyMyNC4gQnV0IGF0IEBiLAorICAgICAgICBpZiB3ZSB0cnkgdG8g
ZXhpdCB0byBiYyMyNCBhcyBpbmRpY2F0ZWQgYnkgZm9yRXhpdCwgd2Ugd291bGQgZW5kIHVwIGNh
dXNpbmcgdGhlIHNpZGUgZWZmZWN0IG9mCisgICAgICAgIGJjIzI0IHRvIGV4ZWN1dGUgYSBzZWNv
bmQgdGltZS4gQW5kIHdlIGNhbm5vdCBleGl0IHRvIHRoZSBuZXh0IGluc3RydWN0aW9uIC0gYmMj
MjYgLSBlaXRoZXIsCisgICAgICAgIGJlY2F1c2UgQGIgaXMgcmVzcG9uc2libGUgZm9yIHVwZGF0
aW5nIHRoZSBPU1Igc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgcmVzdWx0IG9mIEBhIHNob3Vs
ZAorICAgICAgICBiZSBwdXQgaW50byBsb2M0Mi4gSXQncyBub3QgdW50aWwgd2UgZ2V0IHRvIEBj
IHRoYXQgd2UgY2FuIGV4aXQgYWdhaW4uCisKKyAgICAgICAgVGhpcyBpcyBhIGNvbmZ1c2luZywg
YnV0IHVzZWZ1bCwgcHJvcGVydHkgb2YgREZHIElSLiBJdCdzIHVzZWZ1bCBiZWNhdXNlIGl0IGFs
bG93cyB1cyB0byB1c2UgSVIKKyAgICAgICAgdG8gc3BlbGwgb3V0IGhvdyB3ZSB3b3VsZCBoYXZl
IGFmZmVjdGVkIHRoZSBieXRlY29kZSBzdGF0ZSwgYW5kIHdlIHVzZSB0aGlzIHRvIGltcGxlbWVu
dCBoYXJkCisgICAgICAgIHRoaW5ncyBsaWtlIG9iamVjdCBhbGxvY2F0aW9uIGVsaW1pbmF0aW9u
LCB3aGVyZSB3ZSB1c2UgSVIgaW5zdHJ1Y3Rpb25zIHRvIGluZGljYXRlIHdoYXQgb2JqZWN0Cisg
ICAgICAgIGFsbG9jYXRpb24gYW5kIG11dGF0aW9uIG9wZXJhdGlvbnMgd2Ugd291bGQgaGF2ZSBw
ZXJmb3JtZWQsIGFuZCB3aGljaCBieXRlY29kZSB2YXJpYWJsZXMgd291bGQKKyAgICAgICAgaGF2
ZSBwb2ludGVkIHRvIHRob3NlIG9iamVjdHMuIFNvIGxvbmcgYXMgSVIgYWxsb3dzIHVzIHRvIGRl
c2NyaWJlIGhvdyBPU1IgZXhpdCBzdGF0ZSBpcworICAgICAgICB1cGRhdGVkLCB0aGVyZSB3aWxs
IGJlIHBvaW50cyBpbiBleGVjdXRpb24gd2hlcmUgdGhhdCBzdGF0ZSBpcyBpbnZhbGlkIC0gZXNw
ZWNpYWxseSBpZiB0aGUgSVIKKyAgICAgICAgdG8gdXBkYXRlIGV4aXQgc3RhdGUgaXMgc2VwYXJh
dGUgZnJvbSB0aGUgSVIgdG8gcGVyZm9ybSBhY3R1YWwgZWZmZWN0cy4KKworICAgICAgICBCdXQg
dGhpcyBwcm9wZXJ0eSBpcyBzdXBlciBjb25mdXNpbmchIEl0J3MgZGlmZmljdWx0IHRvIGV4cGxh
aW4gdGhhdCBzb21laG93IG1hZ2ljYWxseSwgQGIgaXMgYQorICAgICAgICBiYWQgcGxhY2UgdG8g
cHV0IE9TUiBleGl0cywgYW5kIHRoYXQgbWFnaWNhbGx5IHdlIHdpbGwgb25seSBoYXZlIE9TUiBl
eGl0cyBhdCBAYS4gT2YgY291cnNlLCBpdAorICAgICAgICBhbGwga2luZCBvZiBtYWtlcyBzZW5z
ZSAtIHdlIGluc2VydCBPU1IgZXhpdCBjaGVja3MgaW4gcGhhc2VzIHRoYXQgKmtub3cqIHdoZXJl
IGl0J3Mgc2FmZSB0bworICAgICAgICBleGl0IC0gYnV0IGl0J3MganVzdCB0b28gb3BhcXVlLiBU
aGlzIGFsc28gZ2V0cyBpbiB0aGUgd2F5IG9mIG1vcmUgc29waGlzdGljYXRlZAorICAgICAgICB0
cmFuc2Zvcm1hdGlvbnMuIEZvciBleGFtcGxlLCBMSUNNIGJhcmVseSB3b3JrcyAtIGl0IG1hZ2lj
YWxseSBrbm93cyB0aGF0IGxvb3AgcHJlLWhlYWRlcnMgYXJlCisgICAgICAgIGdvb2QgcGxhY2Vz
IHRvIGV4aXQgZnJvbSwgYnV0IGl0IGhhcyBubyB3YXkgb2YgZGV0ZXJtaW5pbmcgaWYgdGhhdCBp
cyBhY3R1YWxseSB0cnVlLiBJdCB3b3VsZAorICAgICAgICBiZSBvZGQgdG8gaW50cm9kdWNlIGEg
cmVzdHJpY3Rpb24gdGhhdCBhbnl0aW1lIHNvbWUgYmxvY2sgcXVhbGlmaWVzIGFzIGEgcHJlLWhl
YWRlciBhY2NvcmRpbmcKKyAgICAgICAgdG8gb3VyIGxvb3AgY2FsY3VsYXRvciwgaXQgbXVzdCBl
bmQgd2l0aCBhIHRlcm1pbmFsIGF0IHdoaWNoIGl0IGlzIE9LIHRvIGV4aXQuIFNvLCBvdXIgY2hv
aWNlcworICAgICAgICBhcmUgdG8gZWl0aGVyIGxlYXZlIExJQ00gaW4gYSBtYWdpY2FsIHN0YXRl
IGFuZCBleGVyY2lzZSBleHRyZW1lIGNhdXRpb24gd2hlbiBpbnRyb2R1Y2luZyBuZXcKKyAgICAg
ICAgb3B0aW1pemF0aW9ucyB0aGF0IGhvaXN0IGNoZWNrcywgb3IgdG8gZG8gc29tZXRoaW5nIHRv
IG1ha2UgdGhlICJjYW4gSSBleGl0IGhlcmUiIHByb3BlcnR5IG1vcmUKKyAgICAgICAgZXhwbGlj
aXQgaW4gSVIuCisKKyAgICAgICAgV2UgaGF2ZSBhbHJlYWR5LCBpbiBhIHNlcGFyYXRlIGNoYW5n
ZSwgYWRkZWQgYSBOb2RlT3JpZ2luOjpleGl0T0sgcHJvcGVydHksIHRob3VnaCBpdCBkaWRuJ3Qg
ZG8KKyAgICAgICAgYW55dGhpbmcgeWV0LiBUaGlzIGNoYW5nZSBwdXRzIGV4aXRPSyB0byB3b3Jr
LCBhbmQgbWFrZXMgaXQgYW4gaW50ZWdyYWwgcGFydCBvZiBJUi4gVGhlIGtleQorICAgICAgICBp
bnR1aXRpb24gYmVoaW5kIHRoaXMgY2hhbmdlIGlzIHRoYXQgaWYgd2Uga25vdyB3aGljaCBub2Rl
cyBjbG9iYmVyIGV4aXQgc3RhdGUgLSBpLmUuIGFmdGVyIHRoZQorICAgICAgICBub2RlLCBpdCdz
IG5vIGxvbmdlciBwb3NzaWJsZSB0byBPU1IgZXhpdCB1bnRpbCB0aGUgZXhpdCBzdGF0ZSBpcyBm
aXhlZCB1cCAtIHRoZW4gd2UgY2FuIGZpZ3VyZQorICAgICAgICBvdXQgd2hlcmUgaXQncyBmaW5l
IHRvIGV4aXQuIFRoaXMgY2hhbmdlIG1vc3RseSBhZG9wdHMgdGhlIGFscmVhZHkgaW1wbGljaXQg
cnVsZSB0aGF0IGl0J3MKKyAgICAgICAgYWx3YXlzIHNhZmUgdG8gZXhpdCByaWdodCBhdCB0aGUg
Ym91bmRhcnkgb2YgZXhpdCBvcmlnaW5zIChpbiBiZXR3ZWVuIHR3byBub2RlcyB3aGVyZQorICAg
ICAgICBvcmlnaW4uZm9yRXhpdCBkaWZmZXJzKSwgYW5kIGFkZHMgYSBuZXcgbm9kZSwgY2FsbGVk
IEV4aXRPSywgd2hpY2ggaXMgYSBraW5kIG9mIGRlY2xhcmF0aW9uCisgICAgICAgIHRoYXQgZXhp
dCBzdGF0ZSBpcyBnb29kIGFnYWluLiBXaGVuIG1ha2luZyB0aGlzIGNoYW5nZSwgSSBzdHJ1Z2ds
ZWQgd2l0aCB0aGUgcXVlc3Rpb24gb2YKKyAgICAgICAgd2hldGhlciB0byBtYWtlIG9yaWdpbi5l
eGl0T0sgYmUgZXhwbGljaXQsIG9yIHNvbWV0aGluZyB0aGF0IHdlIGNhbiBjb21wdXRlIHdpdGgg
YW4gYW5hbHlzaXMuCisgICAgICAgIE9mIGNvdXJzZSBpZiB3ZSBhcmUgYXJtZWQgd2l0aCBhIGNs
b2JiZXJzRXhpdFN0YXRlKE5vZGUqKSBmdW5jdGlvbiwgd2UgY2FuIGZpbmQgdGhlIHBsYWNlcwor
ICAgICAgICB3aGVyZSBpdCdzIGZpbmUgdG8gZXhpdC4gQnV0IHRoaXMga2luZCBvZiBjb21wdXRh
dGlvbiBjb3VsZCBnZXQgcXVpdGUgc29waGlzdGljYXRlZCBpZiB0aGUKKyAgICAgICAgbm9kZXMg
YmVsb25naW5nIHRvIGFuIGV4aXQgb3JpZ2luIGFyZSBsb3dlcmVkIHRvIGEgY29udHJvbC1mbG93
IGNvbnN0cnVjdC4gSXQgd291bGQgYWxzbyBiZQorICAgICAgICBoYXJkZXIgdG8gc2VlIHdoYXQg
dGhlIG9yaWdpbmFsIGludGVudCB3YXMsIGlmIHdlIGZvdW5kIGFuIGVycm9yOiBpcyB0aGUgYnVn
IHRoYXQgd2Ugc2hvdWxkbid0CisgICAgICAgIGJlIGNsb2JiZXJpbmcgZXhpdCBzdGF0ZSwgb3Ig
dGhhdCB3ZSBzaG91bGRuJ3QgYmUgZXhpdGluZz8gVGhpcyBjaGFuZ2Ugb3B0cyB0byBtYWtlIGV4
aXRPSyBiZQorICAgICAgICBhbiBleHBsaWNpdCBwcm9wZXJ0eSBvZiBJUiwgc28gdGhhdCBERkcg
SVIgdmFsaWRhdGlvbiB3aWxsIHJlamVjdCBhbnkgcHJvZ3JhbSB3aGVyZSBleGl0T0sgaXMKKyAg
ICAgICAgdHJ1ZSBhZnRlciBhIG5vZGUgdGhhdCBjbG9iYmVyc0V4aXRTdGF0ZSgpLCBvciBpZiBl
eGl0T0sgaXMgdHJ1ZSBhZnRlciBhIG5vZGUgaGFzIGV4aXRPSyBzZXQgdG8KKyAgICAgICAgZmFs
c2UgLSB1bmxlc3MgdGhlIGxhdHRlciBub2RlIGhhcyBhIGRpZmZlcmVudCBleGl0IG9yaWdpbiBv
ciBpcyBhbiBFeGl0T0sgbm9kZS4gSXQgd2lsbCBhbHNvCisgICAgICAgIHJlamVjdCBhbnkgcHJv
Z3JhbSB3aGVyZSBhIG5vZGUgbWF5RXhpdCgpIHdpdGggIWV4aXRPSy4KKworICAgICAgICBJdCB0
dXJucyBvdXQgdGhhdCB0aGlzIHJldmVhbGVkIGEgbG90IG9mIHNsb3BwaW5lc3MgYW5kIHdoYXQg
YWxtb3N0IGxvb2tlZCBsaWtlIGFuIG91dHJpZ2h0CisgICAgICAgIGJ1ZzogdGhlIGNhbGxlZSBw
cm9wZXJ0eSBvZiBhbiBpbmxpbmUgY2xvc3VyZSBjYWxsIGZyYW1lIHdhcyBiZWluZyBzZXQgdXAg
ImFzIGlmIiBieSB0aGUKKyAgICAgICAgY2FsbGVlJ3Mgb3BfZW50ZXIuIElmIHdlIGRpZCBob2lz
dCBhIGNoZWNrIHBlciB0aGUgb2xkIHJ1bGUgLSB0byB0aGUgYm91bmRhcnkgb2YgZXhpdCBvcmln
aW5zIC0KKyAgICAgICAgdGhlbiB3ZSB3b3VsZCBjcmFzaCBiZWNhdXNlIHRoZSBjYWxsZWUgaXMg
dW5rbm93bi4gSXQgYWxzbyByZXZlYWxlZCB0aGF0IExJQ00gY291bGQgKmFsbW9zdCoKKyAgICAg
ICAgZ2V0IGhvc2VkIGJ5IGhhdmluZyBhIHByZS1oZWFkZXIgd2hlcmUgdGhlcmUgYXJlIGVmZmVj
dHMgYmVmb3JlIHRoZSBqdW1wLiBJIHdhc24ndCBhYmxlIHRvCisgICAgICAgIGNvbnN0cnVjdCBh
IHRlc3QgY2FzZSB0aGF0IHdvdWxkIGNyYXNoIHRydW5rLCBidXQgSSBhbHNvIGNvdWxkbid0IHF1
aXRlIHByb3ZlIHdoeSBzdWNoIGEKKyAgICAgICAgcHJvZ3JhbSBjb3VsZG4ndCBiZSBjb25zdHJ1
Y3RlZC4gSSBkaWQgZml4IHRoZSBpc3N1ZSBpbiBsb29wIHByZS1oZWFkZXIgY3JlYXRpb24sIGFu
ZCB0aGUKKyAgICAgICAgdmFsaWRhdGVyIGRvZXMgY2F0Y2ggdGhlIGlzc3VlIGJlY2F1c2Ugb2Yg
aXRzIGV4aXRPSyBhc3NlcnRpb25zLgorCisgICAgICAgIFRoaXMgZG9lc24ndCB5ZXQgYWRkIGFu
eSBvdGhlciBzYWZlZ3VhcmRzIHRvIExJQ00gLSB0aGF0IHBoYXNlIHN0aWxsIGV4cGVjdHMgdGhh
dCBwcmUtaGVhZGVycworICAgICAgICBhcmUgaW4gcGxhY2UgYW5kIHRoYXQgdGhleSB3ZXJlIGNy
ZWF0ZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoZWlyIHRlcm1pbmFsIG9yaWdpbnMgaGF2ZSBleGl0
T0suCisgICAgICAgIEl0IGFsc28gc3RpbGwga2VlcHMgdGhlIG9sZCB3YXkgb2Ygc2F5aW5nICJu
b3QgT0sgdG8gZXhpdCIgLSBoYXZpbmcgYSBjbGVhciBOb2RlT3JpZ2luLiBJbiBhCisgICAgICAg
IGxhdGVyIHBhdGNoIEknbGwgcmVtb3ZlIHRoYXQgYW5kIHVzZSAhZXhpdE9LIGV2ZXJ5d2hlcmUu
IE5vdGUgdGhhdCBJIGRpZCBjb25zaWRlciB1c2luZyBjbGVhcgorICAgICAgICBOb2RlT3JpZ2lu
cyB0byBzaWduaWZ5IHRoYXQgaXQncyBub3QgT0sgdG8gZXhpdCwgYnV0IHRoYXQgd291bGQgbWFr
ZSBERkdGb3JBbGxLaWxscyBhIGxvdCBtb3JlCisgICAgICAgIGV4cGVuc2l2ZSAtIGl0IHdvdWxk
IGhhdmUgdG8gc29tZXRpbWVzIHNlYXJjaCB0byBmaW5kIG5lYXJieSBmb3JFeGl0IG9yaWdpbnMg
aWYgdGhlIGN1cnJlbnQKKyAgICAgICAgbm9kZSBkb2Vzbid0IGhhdmUgaXQgc2V0IC0gYW5kIHRo
YXQncyBhIGNyaXRpY2FsIHBoYXNlIGZvciBERkcgY29tcGlsYXRpb24gcGVyZm9ybWFuY2UuCisg
ICAgICAgIFJlcXVpcmluZyB0aGF0IGZvckV4aXQgaXMgdXN1YWxseSBzZXQgdG8gKnNvbWV0aGlu
ZyogYW5kIHRoYXQgcHJvcGVybHkgc2hhZG93cyB0aGUgb3JpZ2luYWwKKyAgICAgICAgYnl0ZWNv
ZGUgaXMgY2hlYXAgYW5kIGVhc3ksIHNvIGl0IHNlZW1lZCBsaWtlIGEgZ29vZCB0cmFkZS1vZmYu
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaGFzIG5vIHBlcmZvcm1hbmNlIGVmZmVjdC4gSXRzIG9u
bHkgZWZmZWN0IGlzIHRoYXQgaXQgbWFrZXMgdGhlIGNvbXBpbGVyIGVhc2llciB0bworICAgICAg
ICB1bmRlcnN0YW5kIGJ5IHR1cm5pbmcgYSBwcmV2aW91c2x5IG1hZ2ljYWwgY29uY2VwdCBpbnRv
IGFuIGV4cGxpY2l0IG9uZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEhlYXAuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXREaXJlY3QpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjdXJyZW50Tm9kZU9yaWdpbik6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmJyYW5jaERhdGEpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRUb0dyYXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUdldEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6Cisg
ICAgICAgICogZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkNGR1NpbXBsaWZpY2F0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogZGZnL0RGR0Ns
b2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBk
ZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpj
bG9iYmVyc0V4aXRTdGF0ZSk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmg6
IEFkZGVkLgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRQdXRCeU9mZnNldCk6Cisg
ICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToK
KyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4
dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpjb252
ZXJ0U3RyaW5nQWRkVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjphdHRlbXB0
VG9NYWtlRmFzdFN0cmluZ0FkZCk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4
dXBHZXRBbmRTZXRMb2NhbHNJbkJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cENoZWNrc0luQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdGbHVzaEZvcm1hdC5oOgor
ICAgICAgICAoSlNDOjpERkc6OnVzZUtpbmRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OnVuY2hl
Y2tlZFVzZUtpbmRGb3IpOgorICAgICAgICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJpbnRXaGl0ZVNw
YWNlKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcENvZGVPcmlnaW4pOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkU3BlY3VsYXRpb25Nb2RlKToKKyAgICAgICAgKiBk
ZmcvREZHSW5zZXJ0aW9uU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpJbnNlcnRpb25TZXQ6
Omluc2VydFNsb3cpOgorICAgICAgICAoSlNDOjpERkc6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAg
KiBkZmcvREZHTWF5RXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6bWF5RXhpdCk6CisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGRmZy9ERkdNYXlFeGl0Lmg6Cisg
ICAgICAgICogZGZnL0RGR01vdkhpbnRSZW1vdmFsUGhhc2UuY3BwOgorICAgICAgICAqIGRmZy9E
RkdOb2RlT3JpZ2luLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZU9yaWdpbjo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR05vZGVPcmlnaW4uaDoKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlT3JpZ2luOjpOb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlT3JpZ2lu
Ojppc1NldCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZU9yaWdpbjo6d2l0aFNlbWFudGljKToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlT3JpZ2luOjp3aXRoRXhpdE9LKToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlT3JpZ2luOjp3aXRoSW52YWxpZEV4aXQpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVPcmlnaW46OnRha2VWYWxpZEV4aXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVPcmln
aW46OmZvckluc2VydGluZ0FmdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlT3JpZ2luOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlT3JpZ2luOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnlw
b2ludENyZWF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkVudHJ5cG9pbnRD
cmVhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JF
eGl0OjpzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJh
c2UuaDoKKyAgICAgICAgKiBkZmcvREZHT2JqZWN0QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHA6
CisgICAgICAgICogZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHA6CisgICAgICAgICog
ZGZnL0RGR1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQaGFzZTo6dmFsaWRhdGUpOgor
ICAgICAgICAoSlNDOjpERkc6OlBoYXNlOjpiZWdpblBoYXNlKToKKyAgICAgICAgKEpTQzo6REZH
OjpQaGFzZTo6ZW5kUGhhc2UpOgorICAgICAgICAqIGRmZy9ERkdQaGFzZS5oOgorICAgICAgICAo
SlNDOjpERkc6OlBoYXNlOjp2bSk6CisgICAgICAgIChKU0M6OkRGRzo6UGhhc2U6OmNvZGVCbG9j
ayk6CisgICAgICAgIChKU0M6OkRGRzo6UGhhc2U6OnByb2ZpbGVkQmxvY2spOgorICAgICAgICAq
IGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZn
L0RGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHU1NBQ29udmVy
c2lvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTU0FDb252ZXJzaW9uUGhhc2U6OnJ1
bik6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0SW52YWxpZGF0aW9uUG9pbnQpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50
QmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50
VHlwZXMpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0
b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHVmFsaWRhdGUuY3BwOgorICAgICAgICAoSlND
OjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29t
cGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVVcHNpbG9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21w
aWxlSW52YWxpZGF0aW9uUG9pbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06OmFwcGVuZE9TUkV4aXQpOgorCiAyMDE1LTA4LTI1ICBTYWFtIGJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgogCiAgICAgICAgIExldHMgcmVuYW1lIGNvZGVPcmlnaW5JbmRleCB0byBj
YWxsU2l0ZUluZGV4IGFuZCBnZXQgcmlkIG9mIENhbGxGcmFtZTo6TG9jYXRpb24uCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2
ICsxNTcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRmZy9ERkdDbGVhblVw
UGhhc2UuY3BwCiAgICAgZGZnL0RGR0Nsb2JiZXJTZXQuY3BwCiAgICAgZGZnL0RGR0Nsb2JiZXJp
emUuY3BwCisgICAgZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAogICAgIGRmZy9ERkdDb21i
aW5lZExpdmVuZXNzLmNwcAogICAgIGRmZy9ERkdDb21tb24uY3BwCiAgICAgZGZnL0RGR0NvbW1v
bkRhdGEuY3BwCkBAIC0yMTAsNiArMjExLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
ICAgICBkZmcvREZHTmF0dXJhbExvb3BzLmNwcAogICAgIGRmZy9ERkdOb2RlLmNwcAogICAgIGRm
Zy9ERkdOb2RlRmxhZ3MuY3BwCisgICAgZGZnL0RGR05vZGVPcmlnaW4uY3BwCiAgICAgZGZnL0RG
R09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuY3BwCiAgICAgZGZnL0RGR09TUkVudHJ5LmNw
cAogICAgIGRmZy9ERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTg4OTM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzkxLDYgKzM5MSw3IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2xlYW5VcFBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdDbG9iYmVyaXplLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdDbG9iYmVyU2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHQ29tYmluZWRMaXZlbmVzcy5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9uLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdDb21tb25EYXRhLmNwcCIgLz4KQEAgLTQ0Niw2ICs0NDcsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR05hdHVyYWxMb29wcy5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHTm9kZUZsYWdzLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGRmZ1xERkdOb2RlT3JpZ2luLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdPcGVyYXRpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGRmZ1xERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdPU1JFbnRyeS5jcHAiIC8+CkBAIC0xMTA4LDYgKzEx
MTAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0NsZWFuVXBQaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR0Nsb2JiZXJpemUuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDbG9iYmVyU2V0LmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdDb21iaW5lZExpdmVuZXNzLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9uLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHQ29tbW9uRGF0YS5oIiAvPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTYsNiArMjk2LDggQEAKIAkJMEYzQjdFMkExOUExMUI4MDAwRDlCQzU2IC8qIENh
bGxWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGM0I3RTI0MTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5jcHAgKi87IH07CiAJ
CTBGM0I3RTJCMTlBMTFCODAwMEQ5QkM1NiAvKiBDYWxsVmFyaWFudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjdFMjUxOUExMUI4MDAwRDlCQzU2
IC8qIENhbGxWYXJpYW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEYzQkQxQjcxQjg5NkEwNzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjNCRDFC
NjFCODk2QTA3MDA1OThBQTYgLyogREZHSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEYzQzFG
MUExQjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0MxRjE4MUI4NjhFNzkwMEFC
QjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi87IH07CisJCTBGM0MxRjFCMUI4NjhF
NzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQzFGMTkxQjg2OEU3OTAwQUJCMDhCIC8qIERG
R0Nsb2JiZXJzRXhpdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYzRTAxQTgxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwICovOyB9
OwogCQkwRjNFMDFBQjE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzRTAxQTkxOUQz
NTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYg
LyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQ2LDYgKzM0
OCw3IEBACiAJCTBGNUE1MkQwMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUE1MkNGMTdBREQ3MTcw
MDhFQ0IyRCAvKiBDb3B5VG9rZW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjVBNjI4MzE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVB
NjI4MTE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5jcHAgKi87IH07CiAJCTBGNUE2
Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVBNjI4MjE4OEM5OEQ0MDA3MkM5REYgLyog
RlRMVmFsdWVSYW5nZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNUQwODVEMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUQwODVDMUI4
Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3JpZ2luLmNwcCAqLzsgfTsKIAkJMEY1RUY5MUUxNjg3
OEY3QTAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtz
LmNwcCAqLzsgfTsKIAkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1RUY5MUMxNjg3
OEY3ODAwM0U1QzI1IC8qIEpJVFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNUYwOENGMTQ2Qzc2MzMwMDA0NzJBOSAvKiBVbmNvbmRp
dGlvbmFsRmluYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjVGMDhDRTE0NkM3NjJGMDAwNDcyQTkgLyogVW5jb25kaXRpb25hbEZpbmFsaXpl
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0y
MTA4LDYgKzIxMTEsOCBAQAogCQkwRjNCN0UyNDE5QTExQjgwMDBEOUJDNTYgLyogQ2FsbFZhcmlh
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsbFZhcmlhbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjNCN0UyNTE5QTExQjgwMDBEOUJD
NTYgLyogQ2FsbFZhcmlhbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2Fs
bFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzQkQxQjYxQjg5NkEw
NzAwNTk4QUE2IC8qIERGR0luc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gZGZnL0RGR0luc2VydGlv
blNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGM0MxRjE4MUI4NjhFNzkw
MEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdDbG9iYmVyc0V4aXRTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZH
Q2xvYmJlcnNFeGl0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjND
MUYxOTFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ2xvYmJlcnNFeGl0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjNFMDFBODE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsg
cGF0aCA9IGRmZy9ERkdQcmVQb3N0TnVtYmVyaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYzRTAxQTkxOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHUHJlUG9zdE51bWJlcmluZy5o
OyBwYXRoID0gZGZnL0RGR1ByZVBvc3ROdW1iZXJpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVSZWNvdmVyeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjE1OSw2ICsyMTY0LDcgQEAKIAkJMEY1QTUyQ0YxN0FERDcx
NzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb3B5VG9rZW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY1QTYyODExODhD
OThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMVmFsdWVSYW5nZS5jcHA7IHBhdGggPSBmdGwvRlRMVmFsdWVSYW5n
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUE2MjgyMTg4Qzk4RDQwMDcy
QzlERiAvKiBGVExWYWx1ZVJhbmdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTFZhbHVlUmFuZ2UuaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVJhbmdlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGNUQwODVDMUI4Q0Y5OUQwMDExNDNCNCAvKiBERkdOb2RlT3Jp
Z2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR05vZGVPcmln
aW4uY3BwOyBwYXRoID0gZGZnL0RGR05vZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjVFRjkxQjE2ODc4Rjc4MDAzRTVDMjUgLyogSklUVGh1bmtzLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVFRodW5rcy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUVGOTFDMTY4NzhGNzgwMDNFNUMyNSAvKiBKSVRUaHVu
a3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSklUVGh1bmtzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUYwOENFMTQ2Qzc2MkYwMDA0NzJBOSAvKiBVbmNv
bmRpdGlvbmFsRmluYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUx
MTksNiArNTEyNSw4IEBACiAJCQkJQTc3QTQyMzkxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2Ji
ZXJpemUuaCAqLywKIAkJCQlBNzdBNDIzQTE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlclNl
dC5jcHAgKi8sCiAJCQkJQTc3QTQyM0IxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJTZXQu
aCAqLywKKwkJCQkwRjNDMUYxODFCODY4RTc5MDBBQkIwOEIgLyogREZHQ2xvYmJlcnNFeGl0U3Rh
dGUuY3BwICovLAorCQkJCTBGM0MxRjE5MUI4NjhFNzkwMEFCQjA4QiAvKiBERkdDbG9iYmVyc0V4
aXRTdGF0ZS5oICovLAogCQkJCTBGMDQzOTZCMUIwM0RDMEIwMDk1OThCNyAvKiBERkdDb21iaW5l
ZExpdmVuZXNzLmNwcCAqLywKIAkJCQkwRjA0Mzk2QzFCMDNEQzBCMDA5NTk4QjcgLyogREZHQ29t
YmluZWRMaXZlbmVzcy5oICovLAogCQkJCTBGQjRCNTFBMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdD
b21tb24uY3BwICovLApAQCAtNTI0MCw2ICs1MjQ4LDcgQEAKIAkJCQkwRkI0QjUxRjE2QjYyNzcy
MDAzRjY5NkIgLyogREZHTm9kZUFsbG9jYXRvci5oICovLAogCQkJCTBGQTU4MUI3MTUwRTk1MkEw
MEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwICovLAogCQkJCTBGQTU4MUI4MTUwRTk1MkEwMEI5
QTJEOSAvKiBERkdOb2RlRmxhZ3MuaCAqLywKKwkJCQkwRjVEMDg1QzFCOENGOTlEMDAxMTQzQjQg
LyogREZHTm9kZU9yaWdpbi5jcHAgKi8sCiAJCQkJMEYzMDBCNzcxOEFCMDUxMTAwQTZENzJFIC8q
IERGR05vZGVPcmlnaW4uaCAqLywKIAkJCQkwRkE1ODFCOTE1MEU5NTJBMDBCOUEyRDkgLyogREZH
Tm9kZVR5cGUuaCAqLywKIAkJCQkwRjJCOUNEQTE5RDBCQTdEMDBCMUQxQjUgLyogREZHT2JqZWN0
QWxsb2NhdGlvblNpbmtpbmdQaGFzZS5jcHAgKi8sCkBAIC02MTQ4LDYgKzYxNTcsNyBAQAogCQkJ
CTBGRkZDOTVFMTRFRjkwQjcwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1Jl
Z2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkMxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1NhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYzQzFGMUIxQjg2OEU3OTAw
QUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzdB
NDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0MTAxN0YxNzlEQUY4MDAwMkVCOEJBIC8qIERGR1NhbmVTdHJpbmdHZXRCeVZhbFNs
b3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGRDE4QTYwMDcwMDAx
QTI3RjggLyogREZHU2Nhbm5hYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTczODEsNiArNzM5MSw3
IEBACiAJCQkJMTQ5NTU5RUUwRERDRERGNzAwNjQ4MDg3IC8qIERlYnVnZ2VyQ2FsbEZyYW1lLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTJBN0E1OEVGMTgwOEE0QzQwMDIwQkRGNyAvKiBEZWZlckdD
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYzQzFGMUEx
Qjg2OEU3OTAwQUJCMDhCIC8qIERGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjExODc3NTA1NjAwODNCNjg3IC8q
IERGR0FyaXRoTW9kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1MzQsNiArNzU0NSw3IEBACiAJ
CQkJMEYwMzMyQzAxOEFERkFFMTAwNUY5NzlBIC8qIEV4aXRpbmdKSVRUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQjEwNTg1MTY3NTQ4MEYwMEY4QUI2RSAvKiBFeGl0S2luZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkVBMEExQzE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RI
ZWFwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUQwODVEMUI4Q0Y5OUQwMDExNDNCNCAvKiBE
RkdOb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVE
QUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjk3OEIzQjFB
QUVBNzFEMDA3QzczNjkgLyogQ29uc3RhbnRNb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RTA1MDI1MUFBOTA5NTYwMEQzM0IzMyAvKiBDbG9uZWRBcmd1bWVudHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SGVhcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RIZWFwLmgJ
KHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RIZWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogLy8gLSBTdGFjayB3aXRoIGEgVE9QIHBheWxvYWQgaXMgYSBkaXJl
Y3Qgc3VidHlwZSBvZiBXb3JsZAogLy8gLSBTdGFjayB3aXRoIGEgbm9uLVRPUCBwYXlsb2FkIGlz
IGEgZGlyZWN0IHN1YnR5cGUgb2YgU3RhY2sgd2l0aCBhIFRPUCBwYXlsb2FkLgogLy8gLSBIZWFw
IGlzIGEgZGlyZWN0IHN1YnR5cGUgb2YgV29ybGQuCisvLyAtIFNpZGVTdGF0ZSBpcyBhIGRpcmVj
dCBzdWJ0eXBlIG9mIFdvcmxkLgogLy8gLSBBbnkgb3RoZXIga2luZCB3aXRoIFRPUCBwYXlsb2Fk
IGlzIHRoZSBkaXJlY3Qgc3VidHlwZSBvZiBIZWFwLgogLy8gLSBBbnkgb3RoZXIga2luZCB3aXRo
IG5vbi1UT1AgcGF5bG9hZCBpcyB0aGUgZGlyZWN0IHN1YnR5cGUgb2YgdGhlIHNhbWUga2luZCB3
aXRoIGEgVE9QIHBheWxvYWQuCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4
ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ1MCw2ICsyNDUwLDcgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQ2hlY2tUaWVyVXBXaXRo
TmVzdGVkVHJpZ2dlckFuZE9TUkVudGVyOgogICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgY2FzZSBa
b21iaWVIaW50OgorICAgIGNhc2UgRXhpdE9LOgogICAgICAgICBicmVhazsKIAogICAgIGNhc2Ug
VW5yZWFjaGFibGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE4ODkzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCwxNiArNDg0LDIxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUKICAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFpbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAmJiBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSB2YXJhcmdzRGF0YS0+
b2Zmc2V0IDw9IHZhcmFyZ3NEYXRhLT5saW1pdCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkVmFyYXJncyBjYW4gZXhpdCwgc28gaXQg
YmV0dGVyIGJlIGV4aXRPSy4KKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9n
cmFwaCwgbm9kZSwgbm9kZS0+b3JpZ2luLmV4aXRPSyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIGNhbkV4aXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBhcmd1bWVudENvdW50ID0gaW5zZXJ0aW9uU2V0Lmluc2Vy
dENvbnN0YW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+
b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3Jp
Z2luLndpdGhFeGl0T0soY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNO
dW1iZXIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpIC0gdmFyYXJnc0RhdGEtPm9m
ZnNldCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGlu
dCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwg
U3BlY05vbmUsIE1vdkhpbnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyh2YXJhcmdzRGF0YS0+Y291bnQub2Zm
c2V0KCkpLCBFZGdlKGFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJ
bmRleCwgU3BlY05vbmUsIFB1dFN0YWNrLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53
aXRoRXhpdE9LKGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyht
X2dyYXBoLm1fc3RhY2tBY2Nlc3NEYXRhLmFkZCh2YXJhcmdzRGF0YS0+Y291bnQsIEZsdXNoZWRJ
bnQzMikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoYXJndW1lbnRDb3VudCwg
SW50MzJVc2UpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGFyZ3VtZW50Q291
bnQsIEtub3duSW50MzJVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCB2YXJhcmdzRGF0YS0+bGlt
aXQgLSAxID49IHZhcmFyZ3NEYXRhLT5tYW5kYXRvcnlNaW5pbXVtKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERlZmluZSBvdXIgbGltaXQgdG8gbm90IGluY2x1ZGUgInRoaXMiLCBzaW5j
ZSB0aGF0J3MgYSBiaXQgZWFzaWVyIHRvIHJlYXNvbiBhYm91dC4KQEAgLTUxNCw3ICs1MTksOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnLCBGbHVz
aGVkSlNWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGluc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
R2V0U3RhY2ssIG5vZGUtPm9yaWdpbiwgT3BJbmZvKGRhdGEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEdldFN0YWNrLCBub2RlLT5v
cmlnaW4ud2l0aEV4aXRPSyhjYW5FeGl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE9wSW5mbyhkYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBoYXZlIHRvIHN0b3JlIGFueXRoaW5nIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHN0b3JlSW5kZXggPj0gdmFyYXJnc0RhdGEtPm1hbmRhdG9yeU1pbmltdW0sIGJ1dCB3
ZSB3aWxsIHN0aWxsCkBAIC01MjUsNyArNTMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
dW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmlu
ZWQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0Q29uc3RhbnQoCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIGpzVW5kZWZpbmVkKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgbm9k
ZS0+b3JpZ2luLndpdGhFeGl0T0soY2FuRXhpdCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTUz
NywxNCArNTQzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV9zdGFja0FjY2Vzc0RhdGEuYWRkKHJlZywgRmx1c2hlZEpTVmFsdWUpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b2RlSW5kZXgsIFNwZWNOb25lLCBNb3ZIaW50LCBub2RlLT5vcmlnaW4sIE9wSW5mbyhyZWcub2Zm
c2V0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKHZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIE1vdkhp
bnQsIG5vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8ocmVnLm9mZnNldCgpKSwgRWRnZSh2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlSW5kZXgsIFNwZWNOb25lLCBQdXRTdGFjaywg
bm9kZS0+b3JpZ2luLCBPcEluZm8oZGF0YSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEVkZ2UodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUlu
ZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbi53aXRoRXhpdE9LKGNhbkV4aXQp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksIEVkZ2UodmFs
dWUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+cmVtb3ZlKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gY2FuRXhpdDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNsdWRlICJERkdBcnJheU1vZGUu
aCIKICNpbmNsdWRlICJERkdDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4
aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHSklUQ29kZS5o
IgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKQEAgLTM2Miw2ICszNjMsOSBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgYWRkVG9HcmFwaChNb3ZIaW50LCBPcEluZm8ob3BlcmFuZC5vZmZz
ZXQoKSksIHZhbHVlKTsKIAorICAgICAgICAvLyBXZSBjYW4ndCBleGl0IGFueW1vcmUgYmVjYXVz
ZSBvdXIgT1NSIGV4aXQgc3RhdGUgaGFzIGNoYW5nZWQuCisgICAgICAgIG1fZXhpdE9LID0gZmFs
c2U7CisKICAgICAgICAgRGVsYXllZFNldExvY2FsIGRlbGF5ZWQoY3VycmVudENvZGVPcmlnaW4o
KSwgb3BlcmFuZCwgdmFsdWUpOwogICAgICAgICAKICAgICAgICAgaWYgKHNldE1vZGUgPT0gTm9y
bWFsU2V0KSB7CkBAIC02NTEsMTUgKzY1NSwxNyBAQCBwcml2YXRlOgogCiAgICAgTm9kZU9yaWdp
biBjdXJyZW50Tm9kZU9yaWdpbigpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHNldCB0aGUgZm9yRXhpdCBvcmlnaW4gb25seSBvbiB0aG9zZSBub2RlcyB0aGF0IGNhbiBleGl0
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1
MjA0CiAgICAgICAgIENvZGVPcmlnaW4gc2VtYW50aWM7CisgICAgICAgIENvZGVPcmlnaW4gZm9y
RXhpdDsKKwogICAgICAgICBpZiAobV9jdXJyZW50U2VtYW50aWNPcmlnaW4uaXNTZXQoKSkKICAg
ICAgICAgICAgIHNlbWFudGljID0gbV9jdXJyZW50U2VtYW50aWNPcmlnaW47CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHNlbWFudGljID0gY3VycmVudENvZGVPcmlnaW4oKTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBOb2RlT3JpZ2luKHNlbWFudGljLCBjdXJyZW50Q29kZU9yaWdpbigp
LCB0cnVlKTsKKworICAgICAgICBmb3JFeGl0ID0gY3VycmVudENvZGVPcmlnaW4oKTsKKworICAg
ICAgICByZXR1cm4gTm9kZU9yaWdpbihzZW1hbnRpYywgZm9yRXhpdCwgbV9leGl0T0spOwogICAg
IH0KICAgICAKICAgICBCcmFuY2hEYXRhKiBicmFuY2hEYXRhKHVuc2lnbmVkIHRha2VuLCB1bnNp
Z25lZCBub3RUYWtlbikKQEAgLTY3Nyw2ICs2ODMsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICAgICAgZGF0YUxv
ZygiICAgICAgICBhcHBlbmRlZCAiLCBub2RlLCAiICIsIEdyYXBoOjpvcE5hbWUobm9kZS0+b3Ao
KSksICJcbiIpOwogICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kKG5vZGUpOworICAgICAg
ICBpZiAoY2xvYmJlcnNFeGl0U3RhdGUobV9ncmFwaCwgbm9kZSkpCisgICAgICAgICAgICBtX2V4
aXRPSyA9IGZhbHNlOwogICAgICAgICByZXR1cm4gbm9kZTsKICAgICB9CiAgICAgCkBAIC05MDAs
NiArOTA4LDggQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKICAgICAv
LyBUaGUgc2VtYW50aWMgb3JpZ2luIG9mIHRoZSBjdXJyZW50IG5vZGUgaWYgZGlmZmVyZW50IGZy
b20gdGhlIGN1cnJlbnQgSW5kZXguCiAgICAgQ29kZU9yaWdpbiBtX2N1cnJlbnRTZW1hbnRpY09y
aWdpbjsKKyAgICAvLyBUcnVlIGlmIGl0J3MgT0sgdG8gT1NSIGV4aXQgcmlnaHQgbm93LgorICAg
IGJvb2wgbV9leGl0T0sgeyBmYWxzZSB9OwogCiAgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnRV
bmRlZmluZWQ7CiAgICAgRnJvemVuVmFsdWUqIG1fY29uc3RhbnROdWxsOwpAQCAtMTA1Myw2ICsx
MDYzLDcgQEAgcHJpdmF0ZToKIAogI2RlZmluZSBMQVNUX09QQ09ERShuYW1lKSBcCiAgICAgbV9j
dXJyZW50SW5kZXggKz0gT1BDT0RFX0xFTkdUSChuYW1lKTsgXAorICAgIG1fZXhpdE9LID0gZmFs
c2U7IFwKICAgICByZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nCiAKIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTMyNCw2ICsxMzM1LDE1IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVn
KHJlc3VsdE9wZXJhbmQpOwogICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQogICAgICAgICBy
ZXN1bHRSZWcgPSBtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0UmVnKTsKKwor
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogY2FsbGVlVmFyaWFibGUgPSBudWxscHRyOworICAgIGlm
IChjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpKSB7CisgICAgICAgIE5vZGUqIGNhbGxlZVNldCA9IHNl
dCgKKyAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6
OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlhdGVOYWtlZFNldCk7CisgICAgICAgIAor
ICAgICAgICBjYWxsZWVWYXJpYWJsZSA9IGNhbGxlZVNldC0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgIGNhbGxlZVZhcmlhYmxlLT5tZXJnZVNob3VsZE5ldmVyVW5ib3godHJ1ZSk7Cisg
ICAgfQogICAgIAogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKICAgICAg
ICAgdGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3JhcGgubGFzdEJsb2NrKCksIGNhbGxl
ZS5mdW5jdGlvbigpLCByZXN1bHRSZWcsCkBAIC0xMzMzLDYgKzEzNTMsOSBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBt
X2N1cnJlbnRJbmRleDsKICAgICBtX2N1cnJlbnRJbmRleCA9IDA7CiAKKyAgICAvLyBBdCB0aGlz
IHBvaW50LCBpdCdzIGFnYWluIE9LIHRvIE9TUiBleGl0LgorICAgIG1fZXhpdE9LID0gdHJ1ZTsK
KwogICAgIElubGluZVZhcmlhYmxlRGF0YSBpbmxpbmVWYXJpYWJsZURhdGE7CiAgICAgaW5saW5l
VmFyaWFibGVEYXRhLmlubGluZUNhbGxGcmFtZSA9IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5l
Q2FsbEZyYW1lOwogICAgIGlubGluZVZhcmlhYmxlRGF0YS5hcmd1bWVudFBvc2l0aW9uU3RhcnQg
PSBhcmd1bWVudFBvc2l0aW9uU3RhcnQ7CkBAIC0xMzQyLDIwICsxMzY1LDE3IEBAIHZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKICAgICAgICAgPT0gY2FsbGVlLmlz
Q2xvc3VyZUNhbGwoKSk7CiAgICAgaWYgKGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpIHsKLSAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBjYWxsZWVWYXJpYWJsZSA9Ci0gICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKEpTU3RhY2s6OkNhbGxlZSksIGNhbGxUYXJnZXROb2RlLCBJbW1lZGlh
dGVOYWtlZFNldCktPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICAKLSAgICAgICAgY2Fs
bGVlVmFyaWFibGUtPm1lcmdlU2hvdWxkTmV2ZXJVbmJveCh0cnVlKTsKLSAgICAgICAgCisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxlZVZhcmlhYmxlKTsKICAgICAgICAgaW5saW5lVmFyaWFi
bGVEYXRhLmNhbGxlZVZhcmlhYmxlID0gY2FsbGVlVmFyaWFibGU7CiAgICAgfQogICAgIAogICAg
IG1fZ3JhcGgubV9pbmxpbmVWYXJpYWJsZURhdGEuYXBwZW5kKGlubGluZVZhcmlhYmxlRGF0YSk7
Ci0gICAgCisKICAgICBwYXJzZUNvZGVCbG9jaygpOwogICAgIGNsZWFyQ2FjaGVzKCk7IC8vIFJl
c2V0IG91ciBzdGF0ZSBub3cgdGhhdCB3ZSdyZSBiYWNrIHRvIHRoZSBvdXRlciBjb2RlLgogICAg
IAogICAgIG1fY3VycmVudEluZGV4ID0gb2xkSW5kZXg7CisgICAgbV9leGl0T0sgPSBmYWxzZTsK
ICAgICAKICAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBuZXcgYmFzaWMg
YmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4KICAgICBpZiAoaW5saW5lU3RhY2tF
bnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubGFzdEJsb2NrKCkpIHsKQEAgLTE3
MjQsNiArMTc0NCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAg
ICBpZiAodmVyYm9zZSkKICAgICAgICAgZGF0YUxvZygiQ2FsbGVlIGlzIGdvaW5nIHRvIGJlICIs
IGNhbGxlZVJlZywgIlxuIik7CiAgICAgc2V0RGlyZWN0KGNhbGxlZVJlZywgY2FsbFRhcmdldE5v
ZGUsIEltbWVkaWF0ZVNldFdpdGhGbHVzaCk7CisKKyAgICAvLyBJdCdzIE9LIHRvIGV4aXQgcmln
aHQgbm93LCBldmVuIHRob3VnaCB3ZSBzZXQgc29tZSBsb2NhbHMuIFRoYXQncyBiZWNhdXNlIHRo
b3NlIGxvY2FscyBhcmUgbm90CisgICAgLy8gdXNlci12aXNpYmxlLgorICAgIG1fZXhpdE9LID0g
dHJ1ZTsKKyAgICBhZGRUb0dyYXBoKEV4aXRPSyk7CiAgICAgCiAgICAgU3dpdGNoRGF0YSYgZGF0
YSA9ICptX2dyYXBoLm1fc3dpdGNoRGF0YS5hZGQoKTsKICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hD
ZWxsOwpAQCAtMTc4MSw2ICsxODA2LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5s
aW5pbmcoCiAgICAgICAgIH0KICAgICAgICAgZGF0YS5jYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZSht
X2dyYXBoLmZyZWV6ZSh0aGluZ1RvQ2FzZU9uKSwgYmxvY2suZ2V0KCkpKTsKICAgICAgICAgbV9j
dXJyZW50SW5kZXggPSBuZXh0T2Zmc2V0OworICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAg
ICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7IC8vIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkg
Zm9yIGludHJpbnNpY3MsIHNpbmNlIG5vcm1hbCBpbmxpbmVkIGNvZGUgd2lsbCBsZWF2ZSBhbiBl
bXB0eSBxdWV1ZS4KICAgICAgICAgYWRkVG9HcmFwaChKdW1wKTsKICAgICAgICAgaWYgKHZlcmJv
c2UpCkBAIC0xNzk1LDYgKzE4MjEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxp
bmluZygKICAgICBSZWZQdHI8QmFzaWNCbG9jaz4gc2xvd1BhdGhCbG9jayA9IGFkb3B0UmVmKAog
ICAgICAgICBuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9j
YWxzLCBQTmFOKSk7CiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRPZmZzZXQ7CisgICAgbV9leGl0
T0sgPSB0cnVlOwogICAgIGRhdGEuZmFsbFRocm91Z2ggPSBCcmFuY2hUYXJnZXQoc2xvd1BhdGhC
bG9jay5nZXQoKSk7CiAgICAgbV9ncmFwaC5hcHBlbmRCbG9jayhzbG93UGF0aEJsb2NrKTsKICAg
ICBpZiAodmVyYm9zZSkKQEAgLTE4MTYsNiArMTg0Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKAogICAgIH0KIAogICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNl
dDsKKyAgICBtX2V4aXRPSyA9IHRydWU7IC8vIE9yaWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUg
dG8gZXhpdCBhZ2Fpbi4KICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwogICAgIGFkZFRvR3Jh
cGgoSnVtcCk7CiAgICAgbGFuZGluZ0Jsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOwpAQCAt
MTgzMyw2ICsxODYxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoCiAg
ICAgICAgIGxhbmRpbmdCbG9ja3NbaV0tPnRlcm1pbmFsKCktPnRhcmdldEJsb2NrKCkgPSBjb250
aW51YXRpb25CbG9jay5nZXQoKTsKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZE9mZnNl
dDsKKyAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgZGF0YUxvZygiRG9uZSBpbmxpbmluZyAoaGFyZCkuXG4iKTsKQEAgLTI3MTQsNiArMjc0Mywx
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIC8vICAgIHNob3J0
Y3V0LgogICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemU7CiAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihuZXh0UmVnaXN0ZXIr
KyksIGJhc2UsIEltbWVkaWF0ZU5ha2VkU2V0KTsKKworICAgIC8vIFdlJ3ZlIHNldCBzb21lIGxv
Y2FscywgYnV0IHRoZXkgYXJlIG5vdCB1c2VyLXZpc2libGUuIEl0J3Mgc3RpbGwgT0sgdG8gZXhp
dCBmcm9tIGhlcmUuCisgICAgbV9leGl0T0sgPSB0cnVlOworICAgIGFkZFRvR3JhcGgoRXhpdE9L
KTsKICAgICAKICAgICBoYW5kbGVDYWxsKAogICAgICAgICBkZXN0aW5hdGlvbk9wZXJhbmQsIENh
bGwsIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbCwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpLApAQCAtMjg2OSw2ICsyOTAyLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1
dEJ5SWQoCiAgICAgICAgIGludCBuZXh0UmVnaXN0ZXIgPSByZWdpc3Rlck9mZnNldCArIEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIobmV4
dFJlZ2lzdGVyKyspLCBiYXNlLCBJbW1lZGlhdGVOYWtlZFNldCk7CiAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIobmV4dFJlZ2lzdGVyKyspLCB2YWx1ZSwgSW1tZWRpYXRlTmFrZWRTZXQpOwor
CisgICAgICAgIC8vIFdlJ3ZlIHNldCBzb21lIGxvY2FscywgYnV0IHRoZXkgYXJlIG5vdCB1c2Vy
LXZpc2libGUuIEl0J3Mgc3RpbGwgT0sgdG8gZXhpdCBmcm9tIGhlcmUuCisgICAgICAgIG1fZXhp
dE9LID0gdHJ1ZTsKKyAgICAgICAgYWRkVG9HcmFwaChFeGl0T0spOwogICAgIAogICAgICAgICBo
YW5kbGVDYWxsKAogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCksIENhbGws
IElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbCwKQEAgLTI5MDEsMTIgKzI5MzgsMTUgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgIEludGVycHJldGVyKiBp
bnRlcnByZXRlciA9IG1fdm0tPmludGVycHJldGVyOwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbnNCZWdpbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KS5iZWdpbigpOwogICAgIHVuc2lnbmVkIGJsb2NrQmVnaW4gPSBtX2N1cnJlbnRJbmRleDsKLSAg
ICAKKwogICAgIC8vIElmIHdlIGFyZSB0aGUgZmlyc3QgYmFzaWMgYmxvY2ssIGludHJvZHVjZSBt
YXJrZXJzIGZvciBhcmd1bWVudHMuIFRoaXMgYWxsb3dzCiAgICAgLy8gdXMgdG8gdHJhY2sgaWYg
YSB1c2Ugb2YgYW4gYXJndW1lbnQgbWF5IHVzZSB0aGUgYWN0dWFsIGFyZ3VtZW50IHBhc3NlZCwg
YXMKICAgICAvLyBvcHBvc2VkIHRvIHVzaW5nIGEgdmFsdWUgd2Ugc2V0IGV4cGxpY2l0bHkuCiAg
ICAgaWYgKG1fY3VycmVudEJsb2NrID09IG1fZ3JhcGguYmxvY2soMCkgJiYgIWlubGluZUNhbGxG
cmFtZSgpKSB7CiAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHMucmVzaXplKG1fbnVtQXJndW1l
bnRzKTsKKyAgICAgICAgLy8gV2Ugd2lsbCBlbWl0IFNldEFyZ3VtZW50IG5vZGVzLiBUaGV5IGRv
bid0IGV4aXQsIGJ1dCB3ZSdyZSBhdCB0aGUgdG9wIG9mIGFuIG9wX2VudGVyIHNvCisgICAgICAg
IC8vIGV4aXRPSyA9IHRydWUuCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJn
dW1lbnQpIHsKICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoCiAgICAgICAgICAgICAgICAgdmlydHVhbFJlZ2lzdGVyRm9yQXJn
dW1lbnQoYXJndW1lbnQpKTsKQEAgLTI5MjIsNiArMjk2MiwxMCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgLy8gV2UncmUgc3RhcmluZyBhIG5ldyBieXRlY29kZSBpbnN0cnVjdGlvbi4gSGVuY2Us
IHdlIG9uY2UgYWdhaW4gaGF2ZSBhIHBsYWNlIHRoYXQgd2UgY2FuIGV4aXQKKyAgICAgICAgLy8g
dG8uCisgICAgICAgIG1fZXhpdE9LID0gdHJ1ZTsKKyAgICAgICAgCiAgICAgICAgIHByb2Nlc3NT
ZXRMb2NhbFF1ZXVlKCk7CiAgICAgICAgIAogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBq
dW1wIGRlc3RpbmF0aW9ucy4KQEAgLTI5OTgsNyArMzA0Miw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKIAogICAgICAgICAgICAgICAgICAgICBGcm96ZW5WYWx1
ZSogZnJvemVuID0gbV9ncmFwaC5mcmVlemUoY2FjaGVkRnVuY3Rpb24pOwogICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKENoZWNrQ2VsbCwgT3BJbmZvKGZyb3plbiksIGNhbGxlZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSlNDb25zdGFudCwgT3BJbmZvKGZyb3plbikpKTsK
IAogICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiA9IHN0YXRpY19jYXN0PEpTRnVuY3Rpb24q
PihjYWNoZWRGdW5jdGlvbik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMzQyMCw2ICszNDYzLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
aWYgKCFjb21waWxlZEFzR2V0QnlJZCkgewogICAgICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJh
eU1vZGUgPSBnZXRBcnJheU1vZGUoY3VycmVudEluc3RydWN0aW9uWzRdLnUuYXJyYXlQcm9maWxl
LCBBcnJheTo6UmVhZCk7CiAgICAgICAgICAgICAgICAgTm9kZSogZ2V0QnlWYWwgPSBhZGRUb0dy
YXBoKEdldEJ5VmFsLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rp
b24pLCBiYXNlLCBwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsg
Ly8gR2V0QnlWYWwgbXVzdCBiZSB0cmVhdGVkIGFzIGlmIGl0IGNsb2JiZXJzIGV4aXQgc3RhdGUs
IHNpbmNlIEZpeHVwUGhhc2UgbWF5IG1ha2UgaXQgZ2VuZXJpYy4KICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBnZXRC
eVZhbCk7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTg4
OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQxLDcgKzI0MSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRl
R3JhcGhBdEVhY2hQaGFzZSgpKQotICAgICAgICAgICAgICAgIHZhbGlkYXRlKG1fZ3JhcGgpOwor
ICAgICAgICAgICAgICAgIHZhbGlkYXRlKCk7CiAgICAgICAgIH0gd2hpbGUgKGlubmVyQ2hhbmdl
ZCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gb3V0ZXJDaGFuZ2VkOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4ODkzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNzgsNiArMjc4LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgICAgICAgCiAgICAgY2FzZSBNb3ZIaW50OgogICAgIGNhc2UgWm9tYmllSGludDoK
KyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIEtpbGxTdGFjazoKICAgICBjYXNlIFVwc2lsb246
CiAgICAgY2FzZSBQaGk6CkBAIC0zOTYsNiArMzk3LDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSB3ZWlyZC4gSW4g
ZmFjdCwgU3RyQ2F0IGhhcyB2ZXJ5IGxpbWl0ZWQgZWZmZWN0ZnVsbmVzcyBiZWNhdXNlIHdlIG9u
bHkKICAgICAgICAgLy8gcGFzcyBpdCBwcmltaXRpdmUgdmFsdWVzLiBCdXQsIHJpZ2h0IG5vdywg
dGhlIGNvbXBpbGVyIGlzbid0IHNtYXJ0IGVub3VnaCB0byBrbm93IHRoaXMKICAgICAgICAgLy8g
YW5kIHRoYXQncyBwcm9iYWJseSBPSy4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg0NDMKICAgICAgICAgcmVhZChXb3JsZCk7CiAg
ICAgICAgIHdyaXRlKEhlYXApOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcnNFeGl0U3RhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdDbG9iYmVyaXplLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdO
b2RlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2Jvb2wgY2xvYmJlcnNFeGl0U3RhdGUoR3JhcGgmIGdyYXBoLCBOb2RlKiBu
b2RlKQoreworICAgIC8vIFRoZXJlIGFyZSBjZXJ0YWluIG5vZGVzIHdob3NlIGVmZmVjdCBvbiB0
aGUgZXhpdCBzdGF0ZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIHdoYXQgdGhleQorICAgIC8vIG5v
cm1hbGx5IGNsb2JiZXIuCisgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgY2FzZSBNb3ZI
aW50OgorICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIFB1dEhpbnQ6CisgICAgY2FzZSBL
aWxsU3RhY2s6CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgY2FzZSBTZXRMb2NhbDoKKyAg
ICBjYXNlIFB1dFN0YWNrOgorICAgICAgICAvLyBUaGVzZSBub2RlcyB3cml0ZSB0byB0aGUgc3Rh
Y2ssIGJ1dCB0aGV5IG1heSBvbmx5IGRvIHNvIGFmdGVyIHdlIGhhdmUgYWxyZWFkeSBoYWQgYSBN
b3ZIaW50CisgICAgICAgIC8vIGZvciB0aGUgZXhhY3Qgc2FtZSB2YWx1ZSBhbmQgdGhlIHNhbWUg
c3RhY2sgbG9jYXRpb24uIEhlbmNlLCB0aGV5IGhhdmUgbm8gZnVydGhlciBlZmZlY3Qgb24KKyAg
ICAgICAgLy8gZXhpdCBzdGF0ZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBB
cnJheWlmeVRvU3RydWN0dXJlOgorICAgIGNhc2UgQXJyYXlpZnk6CisgICAgY2FzZSBOZXdPYmpl
Y3Q6CisgICAgY2FzZSBOZXdSZWdleHA6CisgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Cisg
ICAgY2FzZSBQaGFudG9tTmV3RnVuY3Rpb246CisgICAgY2FzZSBQaGFudG9tQ3JlYXRlQWN0aXZh
dGlvbjoKKyAgICBjYXNlIE1hdGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICBjYXNlIENv
dW50RXhlY3V0aW9uOgorICAgICAgICAvLyBUaGVzZSBkbyBjbG9iYmVyIG1lbW9yeSwgYnV0IG5v
dGhpbmcgdGhhdCBpcyBvYnNlcnZhYmxlLiBJdCBtYXkgYmUgbmljZSB0byBzZXBhcmF0ZSB0aGUK
KyAgICAgICAgLy8gaGVhcHMgaW50byB0aG9zZSB0aGF0IGFyZSBvYnNlcnZhYmxlIGFuZCB0aG9z
ZSB0aGF0IGFyZW4ndCwgYnV0IHdlIGRvbid0IGRvIHRoYXQgcmlnaHQgbm93LgorICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODQ0MAor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAg
ICAgIC8vIExpa2UgYWJvdmUsIGJ1dCB3aXRoIHRoZSBhY3RpdmF0aW9uIGFsbG9jYXRpb24gY2F2
ZWF0LgorICAgICAgICByZXR1cm4gbm9kZS0+Y2FzdE9wZXJhbmQ8U3ltYm9sVGFibGUqPigpLT5z
aW5nbGV0b25TY29wZSgpLT5pc1N0aWxsVmFsaWQoKTsKKworICAgIGNhc2UgTmV3QXJyb3dGdW5j
dGlvbjoKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgICAgICAvLyBMaWtlIGFib3ZlLCBidXQg
d2l0aCB0aGUgSlNGdW5jdGlvbiBhbGxvY2F0aW9uIGNhdmVhdC4KKyAgICAgICAgcmV0dXJuIG5v
ZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCktPnNpbmdsZXRvbkZ1bmN0aW9u
KCktPmlzU3RpbGxWYWxpZCgpOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLy8gRm9yIGFsbCBv
dGhlciBub2Rlcywgd2UganVzdCBjYXJlIGFib3V0IHdoZXRoZXIgdGhleSB3cml0ZSB0byBzb21l
dGhpbmcgb3RoZXIgdGhhbiBTaWRlU3RhdGUuCisgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
CisgICAgICAgIGNsb2JiZXJpemUoCisgICAgICAgICAgICBncmFwaCwgbm9kZSwgTm9PcENsb2Ji
ZXJpemUoKSwKKyAgICAgICAgICAgIFsmXSAoY29uc3QgQWJzdHJhY3RIZWFwJiBoZWFwKSB7Cisg
ICAgICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHN1Y2ggYSB0aGluZyBhcyBhIHN0
cmljdCBzdWJ0eXBlIG9mIFNpZGVTdGF0ZS4gVGhhdCdzIHdoYXQgYWxsb3dzCisgICAgICAgICAg
ICAgICAgLy8gdXMgdG8gdXNlIGEgZmFzdCAhPSBjaGVjaywgYmVsb3cuCisgICAgICAgICAgICAg
ICAgQVNTRVJUKCFoZWFwLmlzU3RyaWN0U3VidHlwZU9mKFNpZGVTdGF0ZSkpOworCisgICAgICAg
ICAgICAgICAgaWYgKGhlYXAgIT0gU2lkZVN0YXRlKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSB0cnVlOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIE5vT3BDbG9iYmVyaXplKCkp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJzRXhpdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyc0V4aXRTdGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdDbG9iYmVyc0V4aXRTdGF0ZV9oCisjZGVmaW5l
IERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBoOworc3RydWN0IE5vZGU7CisK
Ky8vIEEgY29uc2VydmF0aXZlIGFwcHJveGltYXRpb24gb2Ygd2hldGhlciB0aGUgbm9kZSB3aWxs
IHBlcmZvcm0gYW4gZWZmZWN0IHRoYXQgbWVhbnMgdGhhdCB3ZSBjYW4gbm8KKy8vIGxvbmdlciBl
eGl0IHRvIHRoaXMgbm9kZSdzIGV4aXQgb3JpZ2luLgorCitib29sIGNsb2JiZXJzRXhpdFN0YXRl
KEdyYXBoJiwgTm9kZSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Nsb2JiZXJzRXhpdFN0YXRlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Njcs
NiArNjY3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRl
eEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1ZSwgdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CiAKKyAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogICAgICAgICBj
aGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNlbGxVc2UpOwogCiAgICAgICAgIFRyYW5zaXRpb24q
IHRyYW5zaXRpb24gPSAwOwpAQCAtNjc3LDYgKzY3OCw5IEBAIHByaXZhdGU6CiAKICAgICAgICAg
RWRnZSBwcm9wZXJ0eVN0b3JhZ2U7CiAKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2Rl
LCBvcmlnaW4uZXhpdE9LKTsKKyAgICAgICAgYm9vbCBjYW5FeGl0ID0gdHJ1ZTsKKwogICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpCiAgICAgICAgICAgICBwcm9w
ZXJ0eVN0b3JhZ2UgPSBjaGlsZEVkZ2U7CiAgICAgICAgIGVsc2UgaWYgKCF2YXJpYW50LnJlYWxs
b2NhdGVzU3RvcmFnZSgpKSB7CkBAIC02ODcsNyArNjkxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOwogICAgICAgICAg
ICAgTm9kZSogYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIEFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlLAotICAgICAgICAgICAgICAgIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb24p
LCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4
aXQpLCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICBwcm9wZXJ0
eVN0b3JhZ2UgPSBFZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZUZvclRyYW5zaXRpb24o
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CkBAIC02OTUsNyArNjk5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIEFTU0VSVCghaXNJbmxpbmVPZmZzZXQodmFyaWFudC5vZmZzZXQoKSkpOwogCiAg
ICAgICAgICAgICBOb2RlKiByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBvcmlnaW4sCisgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgb3JpZ2luLnRha2VW
YWxpZEV4aXQoY2FuRXhpdCksCiAgICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb24pLCBj
aGlsZEVkZ2UsCiAgICAgICAgICAgICAgICAgRWRnZShtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBHZXRCdXR0ZXJm
bHksIG9yaWdpbiwgY2hpbGRFZGdlKSkpOwpAQCAtNzA3LDEzICs3MTEsMTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgZGF0YS5pZGVudGlmaWVyTnVtYmVyID0gaWRlbnRpZmllck51bWJlcjsKICAgICAg
ICAgCiAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1B1dEJ5T2Zmc2V0KGRhdGEsIHByb3BlcnR5U3Rv
cmFnZSk7CisgICAgICAgIG5vZGUtPm9yaWdpbi5leGl0T0sgPSBjYW5FeGl0OwogCiAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewogICAg
ICAgICAgICAgLy8gRklYTUU6IFB1dFN0cnVjdHVyZSBnb2VzIGxhc3QgdW50aWwgd2UgZml4IGVp
dGhlcgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MjkyMSBvcgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0MjkyNC4KICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIFB1dFN0cnVj
dHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CisgICAgICAgICAg
ICAgICAgaW5kZXhJbkJsb2NrICsgMSwgU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLndp
dGhJbnZhbGlkRXhpdCgpLCBPcEluZm8odHJhbnNpdGlvbiksCisgICAgICAgICAgICAgICAgY2hp
bGRFZGdlKTsKICAgICAgICAgfQogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsNyBA
QCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBTZXRMb2Nh
bDoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgorICAgIGNhc2UgRXhp
dE9LOgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBQaGk6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJl
dmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjIsNiArMTM2Miw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgTG9vcEhpbnQ6CiAgICAgICAgIGNhc2UgTW92SGludDoKICAgICAgICAgY2FzZSBa
b21iaWVIaW50OgorICAgICAgICBjYXNlIEV4aXRPSzoKICAgICAgICAgY2FzZSBCb3R0b21WYWx1
ZToKICAgICAgICAgY2FzZSBUeXBlT2Y6CiAgICAgICAgICAgICBicmVhazsKQEAgLTE0MDgsOSAr
MTQwOSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb252ZXJ0U3RyaW5nQWRkVXNlKE5vZGUqIG5v
ZGUsIEVkZ2UmIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAodXNlS2luZCA9PSBTdHJpbmdVc2Up
IHsKLSAgICAgICAgICAgIC8vIFRoaXMgcHJlc2VydmVzIHRoZSBiaW5hcnlVc2VLaW5kKCkgaW52
YXJpYW50IG90IFZhbHVlQWRkOiBWYWx1ZUFkZCdzCi0gICAgICAgICAgICAvLyB0d28gZWRnZXMg
d2lsbCBhbHdheXMgaGF2ZSBpZGVudGljYWwgdXNlIGtpbmRzLCB3aGljaCBtYWtlcyB0aGUKLSAg
ICAgICAgICAgIC8vIGRlY2lzaW9uIHByb2Nlc3MgbXVjaCBlYXNpZXIuCiAgICAgICAgICAgICBv
YnNlcnZlVXNlS2luZE9uTm9kZTxTdHJpbmdVc2U+KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBDaGVjaywgbm9kZS0+b3JpZ2luLApAQCAtMTUxMiw2ICsxNTEwLDE0IEBA
IHByaXZhdGU6CiAKICAgICBib29sIGF0dGVtcHRUb01ha2VGYXN0U3RyaW5nQWRkKE5vZGUqIG5v
ZGUpCiAgICAgeworICAgICAgICBpZiAoIW5vZGUtPm9yaWdpbi5leGl0T0spIHsKKyAgICAgICAg
ICAgIC8vIElmIHRoaXMgY29kZSBjYW5ub3QgZXhpdCwgdGhlbiB3ZSBzaG91bGQgbm90IGNvbnZl
cnQgaXQgdG8gYSBNYWtlUm9wZSwgc2luY2UgTWFrZVJvcGUKKyAgICAgICAgICAgIC8vIGNhbiBl
eGl0LiBUaGlzIGFyaXNlcyBiZWNhdXNlIHdlIHRoaW5rIHRoYXQgU3RyQ2F0IGNsb2JiZXJzIGV4
aXQgc3RhdGUsIGV2ZW4gdGhvdWdoIGl0CisgICAgICAgICAgICAvLyBkb2Vzbid0IHJlYWxseSBk
byB0aGF0LgorICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDg0NDMKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgYm9vbCBnb29kVG9HbyA9IHRydWU7CiAgICAgICAgIG1fZ3Jh
cGguZG9Ub0NoaWxkcmVuKAogICAgICAgICAgICAgbm9kZSwKQEAgLTE2MzcsNiArMTY0Myw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAgICAgICAgIC8vIE5PVEU6IEFueSB0eXBl
IGNoZWNrcyB3ZSBwdXQgaGVyZSBtYXkgZ2V0IGhvaXN0ZWQgYnkgZml4dXBDaGVja3NJbkJsb2Nr
KCkuIFNvLCBpZiB3ZQorICAgICAgICAgICAgICAgIC8vIGFkZCBuZXcgdHlwZSBjaGVja2luZyB1
c2Uga2luZCBmb3IgU2V0TG9jYWxzLCB3ZSBuZWVkIHRvIG1vZGlmeSB0aGF0IGNvZGUgYXMgd2Vs
bC4KKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhcmlhYmxlLT5m
bHVzaEZvcm1hdCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBGbHVzaGVkSlNWYWx1ZToKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTEwLDggKzIxMTksMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQVNTRVJUKGJsb2NrLT5pc1JlYWNoYWJsZSk7
CiAgICAgICAgIG1fYmxvY2sgPSBibG9jazsKLSAgICAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9
IDA7IG1faW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4SW5CbG9jaykgewot
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChtX2luZGV4SW5CbG9jayk7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4Rm9yQ2hlY2tzID0gVUlOVF9NQVg7CisgICAgICAgIE5vZGVPcmln
aW4gb3JpZ2luRm9yQ2hlY2tzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9
IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisKKyAgICAgICAg
ICAgIC8vIElmIHRoaXMgaXMgYSBub2RlIGF0IHdoaWNoIHdlIGNvdWxkIGV4aXQsIHRoZW4gc2F2
ZSBpdHMgaW5kZXguIElmIG5vZGVzIGFmdGVyIHRoaXMgb25lCisgICAgICAgICAgICAvLyBjYW5u
b3QgZXhpdCwgdGhlbiB3ZSB3aWxsIGhvaXN0IGNoZWNrcyB0byBoZXJlLgorICAgICAgICAgICAg
aWYgKG5vZGUtPm9yaWdpbi5leGl0T0spIHsKKyAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNr
cyA9IGluZGV4SW5CbG9jazsKKyAgICAgICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3MgPSBub2Rl
LT5vcmlnaW47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcyA9
IG9yaWdpbkZvckNoZWNrcy53aXRoU2VtYW50aWMobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKIAog
ICAgICAgICAgICAgLy8gRmlyc3QsIHRyeSB0byByZWxheCB0aGUgcmVwcmVzZW50YXRpb25hbCBk
ZW1hbmRzIG9mIGVhY2ggbm9kZSwgaW4gb3JkZXIgdG8gaGF2ZQogICAgICAgICAgICAgLy8gZmV3
ZXIgY29udmVyc2lvbnMuCkBAIC0yMTc1LDIxICsyMTk1LDIxIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICAgICBbJl0gKEVkZ2UmIGVkZ2UpIHsKICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogcmVzdWx0ID0gbnVsbHB0cjsKLSAgICAgICAgCisKICAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgewogICAgICAgICAgICAgICAg
ICAgICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVS
ZXBSZWFsVXNlOgogICAgICAgICAgICAgICAgICAgICBjYXNlIERvdWJsZVJlcE1hY2hpbmVJbnRV
c2U6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQo
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChlZGdlLT5pc051bWJlckNvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3Vi
bGVDb25zdGFudCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbmRleEZvckNoZWNrcywgU3BlY0J5dGVjb2RlRG91YmxlLCBEb3VibGVDb25zdGFudCwgb3Jp
Z2luRm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9n
cmFwaC5mcmVlemUoanNEb3VibGVOdW1iZXIoZWRnZS0+YXNOdW1iZXIoKSkpKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkZ2UtPmhhc0ludDUyUmVzdWx0KCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3Bl
Y0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNrcywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJs
ZVJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF
ZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVzZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQ7CkBA
IC0yMjAxLDUzICsyMjIxLDkwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZUtpbmQgPSBOb3RDZWxsVXNlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNCeXRlY29kZURvdWJsZSwgRG91Ymxl
UmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4
Rm9yQ2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZVJlcCwgb3JpZ2luRm9yQ2hlY2tz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCB1c2VL
aW5kKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBjYXNlIEludDUyUmVwVXNlOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRnZS0+
aGFzSW50NTJSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChlZGdlLT5pc01hY2hpbmVJbnRDb25zdGFudCgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNN
YWNoaW5lSW50LCBJbnQ1MkNvbnN0YW50LCBub2RlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25z
dGFudCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP
cEluZm8oZWRnZS0+Y29uc3RhbnQoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJSZXAs
IG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JD
aGVja3MsIFNwZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgb3JpZ2luRm9yQ2hlY2tzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBEb3VibGVSZXBNYWNo
aW5lSW50VXNlKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVkZ2UtPnNo
b3VsZFNwZWN1bGF0ZUludDMyRm9yQXJpdGhtZXRpYygpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNJbnQzMiwgSW50NTJSZXAs
IG5vZGUtPm9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhGb3JD
aGVja3MsIFNwZWNJbnQzMiwgSW50NTJSZXAsIG9yaWdpbkZvckNoZWNrcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgSW50MzJVc2UpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNNYWNoaW5lSW50LCBJbnQ1MlJlcCwgbm9k
ZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleEZvckNoZWNr
cywgU3BlY01hY2hpbmVJbnQsIEludDUyUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIE1hY2hpbmVJbnRVc2UpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZWRn
ZS5zZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDogewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlZGdlLT5oYXNEb3VibGVSZXN1
bHQoKSAmJiAhZWRnZS0+aGFzSW50NTJSZXN1bHQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlZGdlLT5oYXNEb3VibGVSZXN1bHQo
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJs
b2NrLCBTcGVjQnl0ZWNvZGVEb3VibGUsIFZhbHVlUmVwLCBub2RlLT5vcmlnaW4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9yQ2hlY2tzLCBTcGVjQnl0ZWNvZGVEb3Vi
bGUsIFZhbHVlUmVwLCBvcmlnaW5Gb3JDaGVja3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIERvdWJsZVJlcFVzZSkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyIHwgU3BlY0ludDUyQXNEb3VibGUsIFZhbHVlUmVw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4sIEVkZ2UoZWRn
ZS5ub2RlKCksIEludDUyUmVwVXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4Rm9yQ2hlY2tzLCBTcGVjSW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZSwgVmFsdWVSZXAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbkZvckNoZWNrcywgRWRnZShl
ZGdlLm5vZGUoKSwgSW50NTJSZXBVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJlc3VsdCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfSB9Ci0gICAgICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKKwor
ICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgdGhpcyBu
b2RlIGNhbm5vdCBkbyB0eXBlIGNoZWNrcywgYnV0IHdlIG5vdyBoYXZlIGEKKyAgICAgICAgICAg
ICAgICAgICAgLy8gdHlwZSBjaGVjayBvbiB0aGlzIG5vZGUuIFdlIGRvbid0IGhhdmUgdG8gaGFu
ZGxlIHRoZSBnZW5lcmFsIGZvcm0gb2YgdGhpcworICAgICAgICAgICAgICAgICAgICAvLyBwcm9i
bGVtLiBJdCBvbmx5IGFyaXNlcyB3aGVuIEJ5dGVDb2RlUGFyc2VyIGVtaXRzIGFuIGltbWVkaWF0
ZSBTZXRMb2NhbCwgcmF0aGVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYW4gYSBkZWxheWVk
IG9uZS4gU28sIHdlIG9ubHkgd29ycnkgYWJvdXQgdGhvc2UgY2hlY2tzIHRoYXQgd2UgbWF5IGhh
dmUgcHV0IG9uCisgICAgICAgICAgICAgICAgICAgIC8vIGEgU2V0TG9jYWwuIE5vdGUgdGhhdCAi
aW5kZXhGb3JDaGVja3MgIT0gaW5kZXhJbkJsb2NrIiBpcyBqdXN0IGFub3RoZXIgd2F5IG9mCisg
ICAgICAgICAgICAgICAgICAgIC8vIHNheWluZyAiIW5vZGUtPm9yaWdpbi5leGl0T0siLgorICAg
ICAgICAgICAgICAgICAgICBpZiAoaW5kZXhGb3JDaGVja3MgIT0gaW5kZXhJbkJsb2NrICYmIG1h
eUhhdmVUeXBlQ2hlY2soZWRnZS51c2VLaW5kKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBVc2VLaW5kIGtub3duVXNlS2luZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBJbnQzMlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
bm93blVzZUtpbmQgPSBLbm93bkludDMyVXNlOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IEtub3duQ2VsbFVzZTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
Qm9vbGVhblVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbm93blVzZUtpbmQgPSBL
bm93bkJvb2xlYW5Vc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgY2FuIG9ubHkgYXJpc2UgaWYgd2UgaGF2ZSBhIENoZWNrIG5vZGUsIGFuZCBpbiB0
aGF0IGNhc2UsIHdlIGNhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgcmVt
b3ZlIHRoZSBvcmlnaW5hbCBjaGVjay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERkdf
QVNTRVJUKG1fZ3JhcGgsIG5vZGUsIG5vZGUtPm9wKCkgPT0gQ2hlY2spOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtub3duVXNlS2luZCA9IFVudHlwZWRVc2U7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNOb25lLCBDaGVjaywgb3JpZ2lu
Rm9yQ2hlY2tzLCBlZGdlKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZWRnZS5zZXRVc2VL
aW5kKGtub3duVXNlS2luZCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9KTsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRmx1c2hGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZsdXNoRm9ybWF0LmgJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRmx1c2hGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAs
MjggQEAgaW5saW5lIFVzZUtpbmQgdXNlS2luZEZvcihGbHVzaEZvcm1hdCBmbwogICAgIHJldHVy
biBVbnR5cGVkVXNlOwogfQogCitpbmxpbmUgVXNlS2luZCB1bmNoZWNrZWRVc2VLaW5kRm9yKEZs
dXNoRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRGVh
ZEZsdXNoOgorICAgIGNhc2UgRmx1c2hlZEpTVmFsdWU6CisgICAgY2FzZSBDb25mbGljdGluZ0Zs
dXNoOgorICAgICAgICByZXR1cm4gVW50eXBlZFVzZTsKKyAgICBjYXNlIEZsdXNoZWRDZWxsOgor
ICAgICAgICByZXR1cm4gS25vd25DZWxsVXNlOworICAgIGNhc2UgRmx1c2hlZEludDMyOgorICAg
ICAgICByZXR1cm4gS25vd25JbnQzMlVzZTsKKyAgICBjYXNlIEZsdXNoZWRJbnQ1MjoKKyAgICAg
ICAgcmV0dXJuIEludDUyUmVwVXNlOworICAgIGNhc2UgRmx1c2hlZERvdWJsZToKKyAgICAgICAg
cmV0dXJuIERvdWJsZVJlcFVzZTsKKyAgICBjYXNlIEZsdXNoZWRCb29sZWFuOgorICAgICAgICBy
ZXR1cm4gS25vd25Cb29sZWFuVXNlOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBVbnR5cGVkVXNlOworfQorCiBpbmxpbmUgU3BlY3VsYXRlZFR5
cGUgdHlwZUZpbHRlckZvcihGbHVzaEZvcm1hdCBmb3JtYXQpCiB7CiAgICAgcmV0dXJuIHR5cGVG
aWx0ZXJGb3IodXNlS2luZEZvcihmb3JtYXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsOSBAQAogI2lu
Y2x1ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQmxvY2tXb3JrbGlz
dC5oIgogI2luY2x1ZGUgIkRGR0Nsb2JiZXJTZXQuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4
aXRTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0pJVENvZGUuaCIKKyNpbmNsdWRlICJERkdNYXlFeGl0
LmgiCiAjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIgogI2luY2x1ZGUgIkZ1
bGxCeXRlY29kZUxpdmVuZXNzLmgiCiAjaW5jbHVkZSAiRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5o
IgpAQCAtMTAxLDggKzEwMywxNCBAQCBzdGF0aWMgdm9pZCBwcmludFdoaXRlU3BhY2UoUHJpbnRT
dHJlYW0mCiAgICAgICAgIG91dC5wcmludCgiICIpOwogfQogCi1ib29sIEdyYXBoOjpkdW1wQ29k
ZU9yaWdpbihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqIHByZXZp
b3VzTm9kZSwgTm9kZSogY3VycmVudE5vZGUsIER1bXBDb250ZXh0KiBjb250ZXh0KQorYm9vbCBH
cmFwaDo6ZHVtcENvZGVPcmlnaW4oUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgY2hhciogcHJlZml4
LCBOb2RlKiYgcHJldmlvdXNOb2RlUmVmLCBOb2RlKiBjdXJyZW50Tm9kZSwgRHVtcENvbnRleHQq
IGNvbnRleHQpCiB7CisgICAgaWYgKCFjdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgTm9kZSogcHJldmlvdXNOb2RlID0gcHJldmlv
dXNOb2RlUmVmOworICAgIHByZXZpb3VzTm9kZVJlZiA9IGN1cnJlbnROb2RlOworCiAgICAgaWYg
KCFwcmV2aW91c05vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKQEAgLTM0NSwxMiAr
MzUzLDE4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCAiUjoiLCBzb3J0ZWRMaXN0RHVtcChyZWFkcy5kaXJlY3QoKSwg
IiwiKSk7CiAgICAgaWYgKCF3cml0ZXMuaXNFbXB0eSgpKQogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJXOiIsIHNvcnRlZExpc3REdW1wKHdyaXRlcy5kaXJlY3QoKSwgIiwiKSk7CisgICAgRXhp
dE1vZGUgZXhpdE1vZGUgPSBtYXlFeGl0KCp0aGlzLCBub2RlKTsKKyAgICBpZiAoZXhpdE1vZGUg
IT0gRG9lc05vdEV4aXQpCisgICAgICAgIG91dC5wcmludChjb21tYSwgZXhpdE1vZGUpOworICAg
IGlmIChjbG9iYmVyc0V4aXRTdGF0ZSgqdGhpcywgbm9kZSkpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgIkNsb2JiZXJzRXhpdCIpOwogICAgIGlmIChub2RlLT5vcmlnaW4uaXNTZXQoKSkgewog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBub2RlLT5vcmlnaW4uc2VtYW50aWMuYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9kZS0+
b3JpZ2luLmZvckV4aXQpCisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMgIT0gbm9k
ZS0+b3JpZ2luLmZvckV4aXQgJiYgbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSkKICAgICAg
ICAgICAgIG91dC5wcmludChjb21tYSwgImV4aXQ6ICIsIG5vZGUtPm9yaWdpbi5mb3JFeGl0KTsK
ICAgICB9Ci0gICAgCisgICAgaWYgKCFub2RlLT5vcmlnaW4uZXhpdE9LKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJFeGl0SW52YWxpZCIpOwogICAgIG91dC5wcmludCgiKSIpOwogCiAgICAg
aWYgKG5vZGUtPmhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgqdGhpcykgJiYgbm9kZS0+dHJ5R2V0VmFy
aWFibGVBY2Nlc3NEYXRhKCkpCkBAIC00NTUsNyArNDY5LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICBvdXQucHJpbnQoIiAgQXJndW1lbnRzOiAi
LCBsaXN0RHVtcChtX2FyZ3VtZW50cyksICJcbiIpOwogICAgIG91dC5wcmludCgiXG4iKTsKICAg
ICAKLSAgICBOb2RlKiBsYXN0Tm9kZSA9IDA7CisgICAgTm9kZSogbGFzdE5vZGUgPSBudWxscHRy
OwogICAgIGZvciAoc2l6ZV90IGIgPSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKICAgICAgICAgaWYg
KCFibG9jaykKQEAgLTQ5Niw3ICs1MTAsNiBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIER1bXBDCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICBkdW1wQ29kZU9yaWdpbihvdXQsICIiLCBsYXN0Tm9kZSwg
YmxvY2stPmF0KGkpLCBjb250ZXh0KTsKICAgICAgICAgICAgIGR1bXAob3V0LCAiIiwgYmxvY2st
PmF0KGkpLCBjb250ZXh0KTsKLSAgICAgICAgICAgIGxhc3ROb2RlID0gYmxvY2stPmF0KGkpOwog
ICAgICAgICB9CiAgICAgICAgIG91dC5wcmludCgiICBTdGF0ZXM6ICIsIGJsb2NrLT5jZmFCcmFu
Y2hEaXJlY3Rpb24sICIsICIsIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwp
OwogICAgICAgICBpZiAoIWJsb2NrLT5jZmFEaWRGaW5pc2gpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxMCw3ICsyMTAsNyBAQCBw
dWJsaWM6CiAKICAgICAvLyBEdW1wIHRoZSBjb2RlIG9yaWdpbiBvZiB0aGUgZ2l2ZW4gbm9kZSBh
cyBhIGRpZmYgZnJvbSB0aGUgY29kZSBvcmlnaW4gb2YgdGhlCiAgICAgLy8gcHJlY2VkaW5nIG5v
ZGUuIFJldHVybnMgdHJ1ZSBpZiBhbnl0aGluZyB3YXMgcHJpbnRlZC4KLSAgICBib29sIGR1bXBD
b2RlT3JpZ2luKFByaW50U3RyZWFtJiwgY29uc3QgY2hhciogcHJlZml4LCBOb2RlKiBwcmV2aW91
c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCopOworICAgIGJvb2wgZHVtcENv
ZGVPcmlnaW4oUHJpbnRTdHJlYW0mLCBjb25zdCBjaGFyKiBwcmVmaXgsIE5vZGUqJiBwcmV2aW91
c05vZGUsIE5vZGUqIGN1cnJlbnROb2RlLCBEdW1wQ29udGV4dCopOwogCiAgICAgQWRkU3BlY3Vs
YXRpb25Nb2RlIGFkZFNwZWN1bGF0aW9uTW9kZShOb2RlKiBhZGQsIGJvb2wgbGVmdFNob3VsZFNw
ZWN1bGF0ZUludDMyLCBib29sIHJpZ2h0U2hvdWxkU3BlY3VsYXRlSW50MzIsIFByZWRpY3Rpb25Q
YXNzIHBhc3MpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJbnNl
cnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMTg4OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIHZvaWQgSW5zZXJ0aW9uU2V0OjppbnNlcnRTbG93KGNvbnN0IEluc2UKICAgICAgICAgfQog
ICAgIH0KIAotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgbV9pbnNlcnRp
b25zLmluc2VydCgwLCBpbnNlcnRpb24pOwogfQogCiB2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0
ZShCYXNpY0Jsb2NrKiBibG9jaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lv
biAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xvb3BQcmVIZWFkZXJD
cmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTA0LDYgKzEwNCwxMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgaXMgdGhlIERGRyBTU0EgY29udmVudGlvbi4g
VGhlcmVmb3JlLCBlYWNoIHByZWRlY2Vzc29yIG9mIHRoZSBsb29wCiAgICAgICAgICAgICAvLyBo
ZWFkZXIgbXVzdCBoYXZlIG9ubHkgb25lIHN1Y2Nlc3Nvci4KICAgICAgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbnVsbHB0ciwgZXhpc3RpbmdQcmVIZWFkZXItPnRlcm1pbmFsKCktPm9wKCkg
PT0gSnVtcCk7CisKKyAgICAgICAgICAgIC8vIEEgcHJlLWhlYWRlciBpcyBtb3N0IHVzZWZ1bCBp
ZiBpdCdzIHBvc3NpYmxlIHRvIGV4aXQgZnJvbSBpdHMgdGVybWluYWwuIEhlbmNlCisgICAgICAg
ICAgICAvLyBpZiB0aGUgdGVybWluYWwgb2YgdGhlIGV4aXN0aW5nIHByZS1oZWFkZXIgZG9lc24n
dCBhbGxvdyBmb3IgZXhpdCwgYnV0IHRoZSBmaXJzdAorICAgICAgICAgICAgLy8gb3JpZ2luIG9m
IHRoZSBsb29wIGhlYWRlciBkb2VzLCB0aGVuIHdlIHNob3VsZCBjcmVhdGUgYSBuZXcgcHJlLWhl
YWRlci4KKyAgICAgICAgICAgIGlmICghbmVlZHNOZXdQcmVIZWFkZXIgJiYgbG9vcC5oZWFkZXIo
KS0+Zmlyc3RPcmlnaW4oKS5leGl0T0sKKyAgICAgICAgICAgICAgICAmJiAhZXhpc3RpbmdQcmVI
ZWFkZXItPnRlcm1pbmFsKCktPm9yaWdpbi5leGl0T0spCisgICAgICAgICAgICAgICAgbmVlZHNO
ZXdQcmVIZWFkZXIgPSB0cnVlOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW5lZWRz
TmV3UHJlSGVhZGVyKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
OSwxMiArNzksMTQgQEAgcHJpdmF0ZToKIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCiAKLWJv
b2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCitFeGl0TW9kZSBtYXlFeGl0KEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKKyAgICBFeGl0TW9kZSByZXN1bHQgPSBEb2VzTm90
RXhpdDsKKyAgICAKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAvLyBUaGlzIGlzIGEg
Y2FyZWZ1bGx5IGN1cmF0ZWQgbGlzdCBvZiBub2RlcyB0aGF0IGRlZmluaXRlbHkgZG8gbm90IGV4
aXQuIFdlIHRyeSB0byBiZSB2ZXJ5CiAgICAgLy8gY29uc2VydmF0aXZlIHdoZW4gbWFpbnRhaW5p
bmcgdGhpcyBsaXN0LCBiZWNhdXNlIGFkZGluZyBuZXcgbm9kZSB0eXBlcyB0byBpdCBkb2Vzbid0
Ci0gICAgLy8gZ2VuZXJhbGx5IG1ha2UgdGhpbmdzIGEgbG90IGJldHRlciBidXQgaXQgbWlnaHQg
aW50cm9kdWNlIGluc2FuZWx5IHN1YnRsZSBidWdzLgorICAgIC8vIGdlbmVyYWxseSBtYWtlIHRo
aW5ncyBhIGxvdCBiZXR0ZXIgYnV0IGl0IG1pZ2h0IGludHJvZHVjZSBzdWJ0bGUgYnVncy4KICAg
ICBjYXNlIFNldEFyZ3VtZW50OgogICAgIGNhc2UgSlNDb25zdGFudDoKICAgICBjYXNlIERvdWJs
ZUNvbnN0YW50OgpAQCAtOTQsMTEgKzk2LDEzIEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBGbHVzaDoKICAgICBjYXNlIFBoYW50b206CiAgICAgY2Fz
ZSBDaGVjazoKKyAgICBjYXNlIElkZW50aXR5OgogICAgIGNhc2UgR2V0TG9jYWw6CiAgICAgY2Fz
ZSBMb29wSGludDoKICAgICBjYXNlIFBoaToKICAgICBjYXNlIFVwc2lsb246CiAgICAgY2FzZSBa
b21iaWVIaW50OgorICAgIGNhc2UgRXhpdE9LOgogICAgIGNhc2UgQm90dG9tVmFsdWU6CiAgICAg
Y2FzZSBQdXRIaW50OgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKQEAgLTExNiwxOCArMTIw
LDY2IEBAIGJvb2wgbWF5RXhpdChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBE
b3VibGVSZXA6CiAgICAgY2FzZSBJbnQ1MlJlcDoKICAgICBjYXNlIFZhbHVlUmVwOgorICAgIGNh
c2UgRXh0cmFjdE9TUkVudHJ5TG9jYWw6CisgICAgY2FzZSBMb2dpY2FsTm90OgorICAgIGNhc2Ug
Tm90aWZ5V3JpdGU6CisgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgY2FzZSBTdG9yZUJhcnJp
ZXI6CisgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAg
ICAgIGJyZWFrOwotICAgICAgICAKKworICAgIGNhc2UgU3RyQ2F0OgorICAgIGNhc2UgQ2FsbDoK
KyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgQ29u
c3RydWN0VmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIENv
bnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgTWF0ZXJpYWxpemVDcmVhdGVBY3RpdmF0
aW9uOgorICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6CisgICAgY2FzZSBOZXdGdW5jdGlv
bjoKKyAgICBjYXNlIE5ld0Fycm93RnVuY3Rpb246CisgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6
CisgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICByZXN1bHQgPSBFeGl0c0ZvckV4
Y2VwdGlvbnM7CisgICAgICAgIGJyZWFrOworCiAgICAgZGVmYXVsdDoKICAgICAgICAgLy8gSWYg
aW4gZG91YnQsIHJldHVybiB0cnVlLgotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIEV4aXRzOwogICAgIH0KIAogICAgIEVkZ2VNYXlFeGl0IGZ1bmN0b3I7CiAgICAgREZHX05P
REVfRE9fVE9fQ0hJTERSRU4oZ3JhcGgsIG5vZGUsIGZ1bmN0b3IpOwotICAgIHJldHVybiBmdW5j
dG9yLnJlc3VsdCgpOworICAgIGlmIChmdW5jdG9yLnJlc3VsdCgpKQorICAgICAgICByZXN1bHQg
PSBFeGl0czsKKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBFeGl0TW9kZSBtb2RlKQor
eworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgRG9lc05vdEV4aXQ6CisgICAgICAgIG91
dC5wcmludCgiRG9lc05vdEV4aXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdHNG
b3JFeGNlcHRpb25zOgorICAgICAgICBvdXQucHJpbnQoIkV4aXRzRm9yRXhjZXB0aW9ucyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0czoKKyAgICAgICAgb3V0LnByaW50KCJFeGl0
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01heUV4aXQuaAkocmV2aXNpb24g
MTg4OTM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNYXlFeGl0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM2LDEwICszNiw0OCBAQCBzdHJ1Y3QgTm9kZTsKIC8vIEEgKnZlcnkqIGNvbnNl
cnZhdGl2ZSBhcHByb3hpbWF0aW9uIG9mIHdoZXRoZXIgb3Igbm90IGEgbm9kZSBjb3VsZCBwb3Nz
aWJseSBleGl0LiBVc3VhbGx5CiAvLyByZXR1cm5zIHRydWUgZXhjZXB0IGluIGNhc2VzIHdoZXJl
IHdlIG9idmlvdXNseSBkb24ndCBleHBlY3QgYW4gZXhpdC4KIAotYm9vbCBtYXlFeGl0KEdyYXBo
JiwgTm9kZSopOworZW51bSBFeGl0TW9kZSB7CisgICAgLy8gVGhlIG5vZGUgZG9lcyBub3QgZXhp
dCBhdCBhbGwuIFRoaXMgbWVhbnMgdGhhdCBpdCdzIGxlZ2FsIHRvIGVsaW1pbmF0ZSB0aGUgZmly
c3Qgc3RvcmUgaW4gYQorICAgIC8vIHByb2dyYW0gbGlrZToKKyAgICAvLworICAgIC8vIGdsb2Jh
bCA9IDEgLy8gZmlyc3Qgc3RvcmUKKyAgICAvLyBEb2VzTm90RXhpdCgpOyAvLyBsZXQncyBhc3N1
bWUgdGhhdCB0aGlzIGFsc28gZG9lc24ndCByZWFkICJnbG9iYWwiCisgICAgLy8gZ2xvYmFsID0g
MiAvLyBzZWNvbmQgc3RvcmUKKyAgICAvLworICAgIC8vIEl0J3MgbGVnYWwgdG8gZWxpbWluYXRl
IHRoZSBmaXJzdCBvbmUgc2luY2Ugbm9ib2R5IHdpbGwgc2VlIGl0OyB0aGUgc2Vjb25kIHN0b3Jl
IGlzIGFsd2F5cworICAgIC8vIGV4ZWN1dGVkIHJpZ2h0IGFmdGVyLgorICAgIERvZXNOb3RFeGl0
LAorCisgICAgLy8gVGhlIG5vZGUgd2lsbCBleGl0LCBidXQgb25seSBieSBwcm9wZXJseSB0aHJv
d2luZyBleGNlcHRpb25zLiBBIHByb3BlciBleGNlcHRpb24gdGhyb3cgd2lsbAorICAgIC8vIGRp
dmVydCBleGVjdXRpb24gdG8gdGhlIG1hdGNoaW5nIG9wX2NhdGNoIGFuZCB3aWxsIG5vdCByZWV4
ZWN1dGUgdGhlIGV4aXQgb3JpZ2luLiBUaGlzIG1lYW5zCisgICAgLy8gdGhhdCB0aGUgc3RvcmUg
ZWxpbWluYXRpb24gb3B0aW1pemF0aW9uIGFib3ZlIHdvdWxkIGJlIGlsbGVnYWwsIGJ1dCB0aGUg
Zm9sbG93aW5nIHdvdWxkIGJlIE9LOgorICAgIC8vCisgICAgLy8gU2lkZUVmZmVjdCguLi4sIGV4
aXQ6IGJjIzQyKQorICAgIC8vIEV4aXRzRm9yRXhjZXB0aW9ucyguLi4sIGV4aXQ6ICNiYzQyLCBF
eGl0SW52YWxpZCkKKyAgICAvLworICAgIC8vIEluIHBhcnRpY3VsYXIsIGl0J3MgT0sgZm9yIGEg
bm9kZSB0aGF0IHJlcG9ydHMgRXhpdHNGb3JFeGNlcHRpb25zIHRvIGJlIGV4ZWN1dGVkIGluIGEg
Y29udGV4dAorICAgIC8vIHdoZXJlICFOb2RlOjpvcmlnaW4uZXhpdE9LLiBUaGF0J3MgYmVjYXVz
ZSB0aGlzIG5vZGUgd2lsbCBub3QgZXhpdCBpbiBhIG1hbm5lciB0aGF0IGNvdWxkIGxlYWQKKyAg
ICAvLyB0byB0aGUgcmVleGVjdXRpb24gb2YgU2lkZUVmZmVjdCgpLgorICAgIEV4aXRzRm9yRXhj
ZXB0aW9ucywKKworICAgIC8vIFRoZSBub2RlIHdpbGwgZXhpdCB0byB0aGUgZXhpdCBvcmlnaW4u
IFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW5ub3QgZG8gc3RvcmUgZWxpbWluYXRpb24gbGlrZSBmb3IK
KyAgICAvLyBEb2VzTm90RXhpdCBhbmQgYWxzbyB3ZSBjYW5ub3QgcGxhY2UgdGhpcyBub2RlIGlu
IGFuIEV4aXRJbnZhbGlkIGNvbnRleHQsIHNpbmNlIHRoaXMgd2lsbCBleGl0CisgICAgLy8gaW4g
YSBtYW5uZXIgdGhhdCB3aWxsIGNhdXNlIHRoZSByZWV4ZWN1dGlvbiBvZiBhbGwgcHJldmlvdXMg
b3BlcmF0aW9ucyB3aXRoaW4gdGhpcyBleGl0IG9yaWdpbi4KKyAgICBFeGl0cworfTsKKworRXhp
dE1vZGUgbWF5RXhpdChHcmFwaCYsIE5vZGUqKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwogCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6REZHOjpFeGl0TW9kZSk7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICNlbmRpZiAvLyBERkdNYXlF
eGl0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTW92SGludFJlbW92YWxQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNb3ZI
aW50UmVtb3ZhbFBoYXNlLmNwcAkocmV2aXNpb24gMTg4OTM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDcgKzEwOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9zdGF0ZS5vcGVyYW5k
KG5vZGUtPnVubGlua2VkTG9jYWwoKSkgPSBFcG9jaCgpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSkKKyAgICAgICAg
ICAgIGlmIChtYXlFeGl0KG1fZ3JhcGgsIG5vZGUpICE9IERvZXNOb3RFeGl0KQogICAgICAgICAg
ICAgICAgIGN1cnJlbnRFcG9jaC5idW1wKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChub2RlSW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9y
aWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
T3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9pZCBOb2RlT3JpZ2luOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ7c2VtYW50aWM6ICIsIHNl
bWFudGljLCAiLCBmb3JFeGl0OiAiLCBmb3JFeGl0LCAiLCBleGl0T0s6ICIsIGV4aXRPSywgIn0i
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZU9yaWdpbi5o
CShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVP
cmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksOSArMjksMTMgQEAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRT
dGF0ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIEdyYXBo
Oworc3RydWN0IE5vZGU7CisKIHN0cnVjdCBOb2RlT3JpZ2luIHsKICAgICBOb2RlT3JpZ2luKCkg
eyB9CiAgICAgCkBAIC00OCw3ICs1Miw3IEBAIHN0cnVjdCBOb2RlT3JpZ2luIHsKICAgICAgICAg
cmV0dXJuIHNlbWFudGljLmlzU2V0KCk7CiAgICAgfQogICAgIAotICAgIE5vZGVPcmlnaW4gd2l0
aFNlbWFudGljKENvZGVPcmlnaW4gc2VtYW50aWMpCisgICAgTm9kZU9yaWdpbiB3aXRoU2VtYW50
aWMoQ29kZU9yaWdpbiBzZW1hbnRpYykgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghaXNTZXQo
KSkKICAgICAgICAgICAgIHJldHVybiBOb2RlT3JpZ2luKCk7CkBAIC01OCw3ICs2Miw0NiBAQCBz
dHJ1Y3QgTm9kZU9yaWdpbiB7CiAgICAgICAgICAgICByZXN1bHQuc2VtYW50aWMgPSBzZW1hbnRp
YzsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBOb2RlT3JpZ2luIHdpdGhF
eGl0T0soYm9vbCB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIE5vZGVPcmlnaW4gcmVzdWx0
ID0gKnRoaXM7CisgICAgICAgIHJlc3VsdC5leGl0T0sgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBOb2RlT3JpZ2luIHdpdGhJbnZhbGlkRXhpdCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gd2l0aEV4aXRPSyhmYWxzZSk7CisgICAgfQorCisgICAg
Tm9kZU9yaWdpbiB0YWtlVmFsaWRFeGl0KGJvb2wmIGNhbkV4aXQpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gd2l0aEV4aXRPSyhleGl0T0sgJiBzdGQ6OmV4Y2hhbmdlKGNhbkV4aXQsIGZh
bHNlKSk7CisgICAgfQogICAgIAorICAgIE5vZGVPcmlnaW4gZm9ySW5zZXJ0aW5nQWZ0ZXIoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlKSBjb25zdAorICAgIHsKKyAgICAgICAgTm9kZU9yaWdpbiBy
ZXN1bHQgPSAqdGhpczsKKyAgICAgICAgaWYgKGV4aXRPSyAmJiBjbG9iYmVyc0V4aXRTdGF0ZShn
cmFwaCwgbm9kZSkpCisgICAgICAgICAgICByZXN1bHQuZXhpdE9LID0gZmFsc2U7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE5vZGVP
cmlnaW4mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHNlbWFudGljID09IG90
aGVyLnNlbWFudGljCisgICAgICAgICAgICAmJiBmb3JFeGl0ID09IG90aGVyLmZvckV4aXQKKyAg
ICAgICAgICAgICYmIGV4aXRPSyA9PSBvdGhlci5leGl0T0s7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IE5vZGVPcmlnaW4mIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCiAgICAgLy8gVXNlZCBmb3IgZGV0ZXJtaW5pbmcgd2hhdCBieXRlY29k
ZSB0aGlzIGNhbWUgZnJvbS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yCiAgICAgLy8gZGVidWdnaW5n
LCBleGNlcHRpb25zLCBhbmQgZXZlbiBiYXNpYyBleGVjdXRpb24gc2VtYW50aWNzLgogICAgIENv
ZGVPcmlnaW4gc2VtYW50aWM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDcgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogICAgIFwKICAgICBtYWNybyhNb3ZIaW50LCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgbWFjcm8oWm9tYmllSGludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKEV4aXRPSywgTm9kZU11c3RHZW5lcmF0ZSkgLyogSW5kaWNhdGVzIHRoYXQgZXhpdCBz
dGF0ZSBpcyBpbnRhY3QuICovIFwKICAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oQ2hlY2ssIE5vZGVNdXN0R2VuZXJhdGUpIC8qIFVzZWQgaWYgd2Ugd2Fu
dCBqdXN0IGEgdHlwZSBjaGVjayBidXQgbm90IGxpdmVuZXNzLiBOb24tY2hlY2tpbmcgdXNlcyB3
aWxsIGJlIHJlbW92ZWQuICovXAogICAgIG1hY3JvKFVwc2lsb24sIDApIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENyZWF0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnlwb2ludENy
ZWF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC04OSw3ICs4OSw5IEBAIHB1YmxpYzoKICAgICAgICAgLy8gZXhlY3V0aW9uQ291bnQgdG8g
dXNlIGJlc3QganVkZ2VtZW50IC0gYnV0IHRoYXQgc2VlbXMgdW5uZWNlc3Nhcnkgc2luY2Ugd2Ug
a25vdyBmb3IKICAgICAgICAgLy8gc3VyZSB3aGF0IHRoZSBleGVjdXRpb25Db3VudCBzaG91bGQg
YmUgaW4gdGhpcyBjYXNlLgogICAgICAgICBCYXNpY0Jsb2NrKiBuZXdSb290ID0gaW5zZXJ0aW9u
U2V0Lmluc2VydCgwLCAxKTsKLSAgICAgICAgTm9kZU9yaWdpbiBvcmlnaW4gPSB0YXJnZXQtPmF0
KDApLT5vcmlnaW47CisKKyAgICAgICAgLy8gV2UnZCByZWFsbHkgbGlrZSB0byB1c2UgYW4gdW5z
ZXQgb3JpZ2luLCBidXQgVGhyZWFkZWRDUFMgd29uJ3QgYWxsb3cgdGhhdC4KKyAgICAgICAgTm9k
ZU9yaWdpbiBvcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVPcmlnaW4oMCksIENvZGVPcmlnaW4oMCks
IGZhbHNlKTsKICAgICAgICAgCiAgICAgICAgIFZlY3RvcjxOb2RlKj4gbG9jYWxzKGJhc2VsaW5l
LT5tX251bUNhbGxlZVJlZ2lzdGVycyk7CiAgICAgICAgIGZvciAoaW50IGxvY2FsID0gMDsgbG9j
YWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKQEAgLTEwNiw2
ICsxMDgsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIEVkZ2UobG9jYWxzW2xvY2FsXSkp
OwogICAgICAgICB9CiAKKyAgICAgICAgLy8gTm93IHVzZSB0aGUgb3JpZ2luIG9mIHRoZSB0YXJn
ZXQsIHNpbmNlIGl0J3Mgbm90IE9LIHRvIGV4aXQsIGFuZCB3ZSB3aWxsIHByb2JhYmx5IGhvaXN0
CisgICAgICAgIC8vIHR5cGUgY2hlY2tzIHRvIGhlcmUuCisgICAgICAgIG9yaWdpbiA9IHRhcmdl
dC0+YXQoMCktPm9yaWdpbjsKKyAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBiYXNlbGluZS0+bnVtUGFyYW1ldGVycygpOyArK2FyZ3VtZW50KSB7CiAg
ICAgICAgICAgICBOb2RlKiBvbGROb2RlID0gdGFyZ2V0LT52YXJpYWJsZXNBdEhlYWQuYXJndW1l
bnQoYXJndW1lbnQpOwogICAgICAgICAgICAgaWYgKCFvbGROb2RlKSB7CkBAIC0xMTcsNyArMTIz
LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIE9wSW5mbyhvbGROb2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBub2RlOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoaW50IGxvY2FsID0g
MDsgbG9jYWwgPCBiYXNlbGluZS0+bV9udW1DYWxsZWVSZWdpc3RlcnM7ICsrbG9jYWwpIHsKICAg
ICAgICAgICAgIE5vZGUqIHByZXZpb3VzSGVhZCA9IHRhcmdldC0+dmFyaWFibGVzQXRIZWFkLmxv
Y2FsKGxvY2FsKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNIZWFkKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxODg5MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxNCArMzYsMTQgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogT1NS
RXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJ
VCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKLSAg
ICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCwgaml0
LT5tX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSkKKyAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGpp
dC0+bV9vcmlnaW4uZm9yRXhpdCwgaml0LT5tX29yaWdpbi5zZW1hbnRpYykKICAgICAsIG1fanNW
YWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9m
aWxlKQogICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX3JlY292ZXJ5SW5k
ZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fc3RyZWFtSW5kZXgoc3RyZWFtSW5kZXgpCiB7Ci0g
ICAgQVNTRVJUKG1fY29kZU9yaWdpbi5pc1NldCgpKTsKKyAgICBERkdfQVNTRVJUKGppdC0+bV9q
aXQuZ3JhcGgoKSwgaml0LT5tX2N1cnJlbnROb2RlLCBqaXQtPm1fb3JpZ2luLmV4aXRPSyk7CiB9
CiAKIHZvaWQgT1NSRXhpdDo6c2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCBjaGVjaykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPYmplY3RBbGxvY2F0aW9uU2lua2luZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09iamVjdEFsbG9jYXRpb25TaW5raW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJERkdCbG9ja01h
cElubGluZXMuaCIKKyNpbmNsdWRlICJERkdDbG9iYmVyc0V4aXRTdGF0ZS5oIgogI2luY2x1ZGUg
IkRGR0NvbWJpbmVkTGl2ZW5lc3MuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUg
IkRGR0luc2VydGlvblNldC5oIgpAQCAtNzU3LDcgKzc1OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IHByb21vdGVMb2NhbEhlYXAoKTsKIAogICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVHcmFw
aEF0RWFjaFBoYXNlKCkpCi0gICAgICAgICAgICB2YWxpZGF0ZShtX2dyYXBoLCBEdW1wR3JhcGgs
IGdyYXBoQmVmb3JlU2lua2luZyk7CisgICAgICAgICAgICBERkc6OnZhbGlkYXRlKG1fZ3JhcGgs
IER1bXBHcmFwaCwgZ3JhcGhCZWZvcmVTaW5raW5nKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkBAIC0xNjc4LDcgKzE2NzksOCBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAgICAg
Tm9kZSogaWRlbnRpZmllciA9IGluZGV4VG9Ob2RlW3ZhcmlhYmxlLT5pbmRleCgpXTsKICAgICAg
ICAgICAgICAgICBtX2VzY2FwZWVUb01hdGVyaWFsaXphdGlvbi5hZGQoaWRlbnRpZmllciwgcGhp
RGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgw
LCBOb2RlT3JpZ2luKCksIGF2YWlsYWJpbGl0eUNhbGN1bGF0b3IubV9hdmFpbGFiaWxpdHksIGlk
ZW50aWZpZXIsIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgYm9vbCBjYW5FeGl0
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaW5zZXJ0T1NSSGludHNGb3JVcGRhdGUoMCwgTm9k
ZU9yaWdpbigpLCBjYW5FeGl0LCBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5
LCBpZGVudGlmaWVyLCBwaGlEZWYtPnZhbHVlKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkgewpAQCAtMTY4OCw2ICsxNjkwLDggQEAgcHJpdmF0ZToKIAogICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK25vZGVJbmRleCkgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9j
ay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBib29sIGNhbkV4aXQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGJvb2wgbmV4dENhbkV4aXQgPSBub2RlLT5vcmlnaW4uZXhpdE9LOwog
ICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFwTG9jYXRpb24gbG9jYXRpb24gOiBtX2xv
Y2F0aW9uc0ZvckFsbG9jYXRpb24uZ2V0KG5vZGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChsb2NhdGlvbi5raW5kKCkgIT0gTmFtZWRQcm9wZXJ0eVBMb2MpCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTE2OTcsMTEgKzE3MDEsMTMgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydCgKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlSW5kZXggKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQobV9ncmFwaCwgbm9kZS0+b3JpZ2luLCBtX2JvdHRvbSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLmNyZWF0ZUhpbnQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG5vZGUtPm9yaWdpbi50YWtlVmFs
aWRFeGl0KG5leHRDYW5FeGl0KSwgbV9ib3R0b20pKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZvciAoTm9kZSogbWF0ZXJpYWxp
emF0aW9uIDogbV9tYXRlcmlhbGl6YXRpb25TaXRlVG9NYXRlcmlhbGl6YXRpb25zLmdldChub2Rl
KSkgeworICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbGl6YXRpb24tPm9yaWdpbi5leGl0T0sg
Jj0gY2FuRXhpdDsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZXNjYXBlZSA9IG1fbWF0ZXJp
YWxpemF0aW9uVG9Fc2NhcGVlLmdldChtYXRlcmlhbGl6YXRpb24pOwogICAgICAgICAgICAgICAg
ICAgICBwb3B1bGF0ZU1hdGVyaWFsaXphdGlvbihibG9jaywgbWF0ZXJpYWxpemF0aW9uLCBlc2Nh
cGVlKTsKICAgICAgICAgICAgICAgICAgICAgbV9lc2NhcGVlVG9NYXRlcmlhbGl6YXRpb24uc2V0
KGVzY2FwZWUsIG1hdGVyaWFsaXphdGlvbik7CkBAIC0xNzExLDcgKzE3MTcsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZvciAoUHJvbW90ZWRIZWFw
TG9jYXRpb24gbG9jYXRpb24gOiBtX21hdGVyaWFsaXphdGlvblNpdGVUb1JlY292ZXJpZXMuZ2V0
KG5vZGUpKQotICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUlu
ZGV4LCBjcmVhdGVSZWNvdmVyeShibG9jaywgbG9jYXRpb24sIG5vZGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KG5vZGVJbmRleCwgY3JlYXRlUmVjb3Zlcnko
YmxvY2ssIGxvY2F0aW9uLCBub2RlLCBjYW5FeGl0KSk7CiAKICAgICAgICAgICAgICAgICAvLyBX
ZSBuZWVkIHRvIHB1dCB0aGUgT1NSIGhpbnRzIGFmdGVyIHRoZSByZWNvdmVyaWVzLAogICAgICAg
ICAgICAgICAgIC8vIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRoZSBoaW50cyBvbmNlIHRoZSBvYmpl
Y3QgaXMKQEAgLTE3MTksMTUgKzE3MjUsMjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBm
b3IgKE5vZGUqIG1hdGVyaWFsaXphdGlvbiA6IG1fbWF0ZXJpYWxpemF0aW9uU2l0ZVRvTWF0ZXJp
YWxpemF0aW9ucy5nZXQobm9kZSkpIHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSogZXNjYXBl
ZSA9IG1fbWF0ZXJpYWxpemF0aW9uVG9Fc2NhcGVlLmdldChtYXRlcmlhbGl6YXRpb24pOwogICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRPU1JIaW50c0ZvclVwZGF0ZSgKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGVJbmRleCwgbm9kZS0+b3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LCBub2RlLT5vcmlnaW4sIGNhbkV4aXQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBhdmFpbGFiaWxpdHlDYWxjdWxhdG9yLm1fYXZhaWxhYmlsaXR5LCBlc2NhcGVlLCBtYXRl
cmlhbGl6YXRpb24pOwogICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5vcmlnaW4uZXhpdE9LICYmICFjYW5FeGl0KSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGluZGljYXRlIHRoYXQgdGhlIGV4aXQgc3RhdGUgaXMgZmluZSBub3cuIEl0IGlzIE9LIGJl
Y2F1c2Ugd2UgdXBkYXRlZCB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGUgYWJvdmUu
IFdlIG5lZWQgdG8gaW5kaWNhdGUgdGhpcyBtYW51YWxseSBiZWNhdXNlIHRoZSB2YWxpZGF0aW9u
IGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24g
dG8gaW5mZXIgdGhhdCB0aGUgZXhpdCBzdGF0ZSBpcyBmaW5lLgorICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCwgU3BlY05vbmUsIEV4aXRPSywg
bm9kZS0+b3JpZ2luKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAo
bV9zaW5rQ2FuZGlkYXRlcy5jb250YWlucyhub2RlKSkKICAgICAgICAgICAgICAgICAgICAgbV9l
c2NhcGVlVG9NYXRlcmlhbGl6YXRpb24uc2V0KG5vZGUsIG5vZGUpOwogCiAgICAgICAgICAgICAg
ICAgYXZhaWxhYmlsaXR5Q2FsY3VsYXRvci5leGVjdXRlTm9kZShub2RlKTsKIAorICAgICAgICAg
ICAgICAgIGJvb2wgZGVzaXJlZE5leHRFeGl0T0sgPSBub2RlLT5vcmlnaW4uZXhpdE9LICYmICFj
bG9iYmVyc0V4aXRTdGF0ZShtX2dyYXBoLCBub2RlKTsKKwogICAgICAgICAgICAgICAgIGJvb2wg
ZG9Mb3dlciA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGhhbmRsZU5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgIG5vZGUsCkBAIC0xNzUwLDEzICsxNzY1LDIxIEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvTG93ZXIgPSB0cnVlOwogCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnQobm9kZUluZGV4ICsgMSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVhdGVIaW50KG1fZ3JhcGgsIG5vZGUtPm9yaWdpbiwg
bm9kZVZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUluZGV4ICsgMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5jcmVhdGVIaW50KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCBub2RlLT5vcmlnaW4udGFrZVZhbGlkRXhpdChuZXh0
Q2FuRXhpdCksIG5vZGVWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAg
ICAgICAgICAgICBbJl0gKFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uKSAtPiBOb2RlKiB7
CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShibG9jaywgbG9jYXRpb24p
OwogICAgICAgICAgICAgICAgICAgICB9KTsKIAorICAgICAgICAgICAgICAgIGlmICghbmV4dENh
bkV4aXQgJiYgZGVzaXJlZE5leHRFeGl0T0spIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ug
aW5kaWNhdGUgdGhhdCB0aGUgZXhpdCBzdGF0ZSBpcyBmaW5lIG5vdy4gV2UgbmVlZCB0byBkbyB0
aGlzIGJlY2F1c2Ugd2UKKyAgICAgICAgICAgICAgICAgICAgLy8gZW1pdHRlZCBoaW50cyB0aGF0
IGFwcGVhciB0byBpbnZhbGlkYXRlIHRoZSBleGl0IHN0YXRlLgorICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG5vZGVJbmRleCArIDEsIFNwZWNOb25lLCBFeGl0
T0ssIG5vZGUtPm9yaWdpbik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAg
aWYgKG1fc2lua0NhbmRpZGF0ZXMuY29udGFpbnMobm9kZSkgfHwgZG9Mb3dlcikgewogICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBOZXdPYmplY3Q6CkBAIC0xODcxLDcgKzE4OTQsNyBAQCBwcml2YXRlOgogICAgICAgICBy
ZXR1cm4gZGVmLT52YWx1ZSgpOwogICAgIH0KIAotICAgIHZvaWQgaW5zZXJ0T1NSSGludHNGb3JV
cGRhdGUodW5zaWduZWQgbm9kZUluZGV4LCBOb2RlT3JpZ2luIG9yaWdpbiwgQXZhaWxhYmlsaXR5
TWFwJiBhdmFpbGFiaWxpdHksIE5vZGUqIGVzY2FwZWUsIE5vZGUqIG1hdGVyaWFsaXphdGlvbikK
KyAgICB2b2lkIGluc2VydE9TUkhpbnRzRm9yVXBkYXRlKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9k
ZU9yaWdpbiBvcmlnaW4sIGJvb2wmIGNhbkV4aXQsIEF2YWlsYWJpbGl0eU1hcCYgYXZhaWxhYmls
aXR5LCBOb2RlKiBlc2NhcGVlLCBOb2RlKiBtYXRlcmlhbGl6YXRpb24pCiAgICAgewogICAgICAg
ICAvLyBXZSBuZWVkIHRvIGZvbGxvdygpIHRoZSB2YWx1ZSBpbiB0aGUgaGVhcC4KICAgICAgICAg
Ly8gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBncmFwaDoKQEAgLTE5MDUsNyArMTkyOCw4IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIG1faW5zZXJ0
aW9uU2V0Lmluc2VydCgKLSAgICAgICAgICAgICAgICBub2RlSW5kZXgsIGVudHJ5LmtleS5jcmVh
dGVIaW50KG1fZ3JhcGgsIG9yaWdpbiwgbWF0ZXJpYWxpemF0aW9uKSk7CisgICAgICAgICAgICAg
ICAgbm9kZUluZGV4LAorICAgICAgICAgICAgICAgIGVudHJ5LmtleS5jcmVhdGVIaW50KG1fZ3Jh
cGgsIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLCBtYXRlcmlhbGl6YXRpb24pKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGF2YWlsYWJpbGl0eS5tX2xvY2Fs
cy5zaXplKCk7IGktLTspIHsKQEAgLTE5MTYsNyArMTk0MCw3IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgICAgIGludCBvcGVyYW5kID0gYXZhaWxhYmlsaXR5Lm1fbG9jYWxzLm9wZXJhbmRGb3JJbmRl
eChpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAg
ICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2luLCBPcEluZm8ob3BlcmFu
ZCksCisgICAgICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwgTW92SGludCwgb3JpZ2lu
LnRha2VWYWxpZEV4aXQoY2FuRXhpdCksIE9wSW5mbyhvcGVyYW5kKSwKICAgICAgICAgICAgICAg
ICBtYXRlcmlhbGl6YXRpb24tPmRlZmF1bHRFZGdlKCkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjA0Miw3ICsyMDY2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIE5vZGUq
IGNyZWF0ZVJlY292ZXJ5KEJhc2ljQmxvY2sqIGJsb2NrLCBQcm9tb3RlZEhlYXBMb2NhdGlvbiBs
b2NhdGlvbiwgTm9kZSogd2hlcmUpCisgICAgTm9kZSogY3JlYXRlUmVjb3ZlcnkoQmFzaWNCbG9j
ayogYmxvY2ssIFByb21vdGVkSGVhcExvY2F0aW9uIGxvY2F0aW9uLCBOb2RlKiB3aGVyZSwgYm9v
bCYgY2FuRXhpdCkKICAgICB7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0
YUxvZygiUmVjb3ZlcmluZyAiLCBsb2NhdGlvbiwgIiBhdCAiLCB3aGVyZSwgIlxuIik7CkBAIC0y
MDUwLDEyICsyMDc0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXRNYXRl
cmlhbGl6YXRpb24oYmxvY2ssIGxvY2F0aW9uLmJhc2UoKSk7CiAgICAgICAgIE5vZGUqIHZhbHVl
ID0gcmVzb2x2ZShibG9jaywgbG9jYXRpb24pOwogCisgICAgICAgIE5vZGVPcmlnaW4gb3JpZ2lu
ID0gd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2luLnNlbWFudGljKTsKKwog
ICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFMb2coIkJhc2UgaXMgIiwgYmFz
ZSwgIiBhbmQgdmFsdWUgaXMgIiwgdmFsdWUsICJcbiIpOwogCiAgICAgICAgIGlmIChiYXNlLT5p
c1BoYW50b21BbGxvY2F0aW9uKCkpIHsKICAgICAgICAgICAgIHJldHVybiBQcm9tb3RlZEhlYXBM
b2NhdGlvbihiYXNlLCBsb2NhdGlvbi5kZXNjcmlwdG9yKCkpLmNyZWF0ZUhpbnQoCi0gICAgICAg
ICAgICAgICAgbV9ncmFwaCwgd2hlcmUtPm9yaWdpbi53aXRoU2VtYW50aWMoYmFzZS0+b3JpZ2lu
LnNlbWFudGljKSwgdmFsdWUpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgsIG9yaWdpbi50YWtl
VmFsaWRFeGl0KGNhbkV4aXQpLCB2YWx1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2gg
KGxvY2F0aW9uLmtpbmQoKSkgewpAQCAtMjA4OSw3ICsyMTE1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9ncmFwaC5hZGROb2RlKAogICAgICAgICAgICAgICAgICAgICBT
cGVjTm9uZSwKICAgICAgICAgICAgICAgICAgICAgUHV0QnlPZmZzZXQsCi0gICAgICAgICAgICAg
ICAgICAgIHdoZXJlLT5vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFs
aWRFeGl0KGNhbkV4aXQpLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oZGF0YSksCiAgICAg
ICAgICAgICAgICAgICAgIEVkZ2Uoc3RvcmFnZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAg
ICAgICAgICAgRWRnZShiYXNlLCBLbm93bkNlbGxVc2UpLApAQCAtMjExOCw3ICsyMTQ0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFkZE5vZGUoCiAgICAgICAgICAg
ICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldCwKLSAgICAg
ICAgICAgICAgICB3aGVyZS0+b3JpZ2luLndpdGhTZW1hbnRpYyhiYXNlLT5vcmlnaW4uc2VtYW50
aWMpLAorICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0KGNhbkV4aXQpLAogICAg
ICAgICAgICAgICAgIE9wSW5mbyhkYXRhKSwKICAgICAgICAgICAgICAgICBFZGdlKGJhc2UsIEtu
b3duQ2VsbFVzZSksCiAgICAgICAgICAgICAgICAgdmFsdWUtPmRlZmF1bHRFZGdlKCkpOwpAQCAt
MjEyOSw3ICsyMTU1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBtX2dyYXBoLmFk
ZE5vZGUoCiAgICAgICAgICAgICAgICAgU3BlY05vbmUsCiAgICAgICAgICAgICAgICAgUHV0Q2xv
c3VyZVZhciwKLSAgICAgICAgICAgICAgICB3aGVyZS0+b3JpZ2luLndpdGhTZW1hbnRpYyhiYXNl
LT5vcmlnaW4uc2VtYW50aWMpLAorICAgICAgICAgICAgICAgIG9yaWdpbi50YWtlVmFsaWRFeGl0
KGNhbkV4aXQpLAogICAgICAgICAgICAgICAgIE9wSW5mbyhsb2NhdGlvbi5pbmZvKCkpLAogICAg
ICAgICAgICAgICAgIEVkZ2UoYmFzZSwgS25vd25DZWxsVXNlKSwKICAgICAgICAgICAgICAgICB2
YWx1ZS0+ZGVmYXVsdEVkZ2UoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxODg5Mzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BoYW50b21JbnNlcnRpb25QaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobWF5RXhpdChtX2dyYXBoLCBub2RlKSkgeworICAgICAgICAgICAgaWYgKG1heUV4aXQobV9n
cmFwaCwgbm9kZSkgIT0gRG9lc05vdEV4aXQpIHsKICAgICAgICAgICAgICAgICBjdXJyZW50RXBv
Y2guYnVtcCgpOwogICAgICAgICAgICAgICAgIGxhc3RFeGl0aW5nSW5kZXggPSBub2RlSW5kZXg7
CiAgICAgICAgICAgICB9CkBAIC0xNjAsMTAgKzE2MCwxMyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBoYXZlIGV4YWN0IHJlZiBjb3VudHMsIHNvIGNyZWF0aW5nIGEgbmV3
IHVzZSBtZWFucyB0aGF0IHdlIGhhdmUgdG8KICAgICAgICAgICAgICAgICAgICAgLy8gaW5jcmVt
ZW50IHRoZSByZWYgY291bnQuCiAgICAgICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPnBvc3Rm
aXhSZWYoKTsKKworICAgICAgICAgICAgICAgICAgICBOb2RlKiBsYXN0RXhpdGluZ05vZGUgPSBi
bG9jay0+YXQobGFzdEV4aXRpbmdJbmRleCk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdEV4aXRpbmdJbmRleCArIDEsIFNwZWNOb25lLCBQaGFudG9tLAotICAgICAg
ICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KGxhc3RFeGl0aW5nSW5kZXgpLT5vcmlnaW4sIGtp
bGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEV4
aXRpbmdOb2RlLT5vcmlnaW4uZm9ySW5zZXJ0aW5nQWZ0ZXIobV9ncmFwaCwgbGFzdEV4aXRpbmdO
b2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxlZE5vZGUtPmRlZmF1bHRFZGdlKCkp
OwogICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1BoYXNlLmNwcAkocmV2aXNpb24gMTg4OTM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMz
LDExIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAordm9pZCBQaGFzZTo6
dmFsaWRhdGUoKQoreworICAgIERGRzo6dmFsaWRhdGUobV9ncmFwaCwgRHVtcEdyYXBoLCBtX2dy
YXBoRHVtcEJlZm9yZVBoYXNlKTsKK30KKwogdm9pZCBQaGFzZTo6YmVnaW5QaGFzZSgpCiB7CiAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpKSB7CkBAIC01Myw3ICs1
OCw3IEBAIHZvaWQgUGhhc2U6OmVuZFBoYXNlKCkKIHsKICAgICBpZiAoIU9wdGlvbnM6OnZhbGlk
YXRlR3JhcGhBdEVhY2hQaGFzZSgpKQogICAgICAgICByZXR1cm47Ci0gICAgdmFsaWRhdGUobV9n
cmFwaCwgRHVtcEdyYXBoLCBtX2dyYXBoRHVtcEJlZm9yZVBoYXNlKTsKKyAgICB2YWxpZGF0ZSgp
OwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQaGFzZS5oCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BoYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDkgQEAgcHJvdGVj
dGVkOgogICAgIFZNJiB2bSgpIHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrKCkgeyByZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQogICAgIENvZGVC
bG9jayogcHJvZmlsZWRCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9wcm9maWxlZEJsb2NrOyB9
CisKKyAgICAvLyBUaGlzIHJ1bnMgdmFsaWRhdGlvbiwgYW5kIHVzZXMgdGhlIGdyYXBoIGR1bXAg
YmVmb3JlIHRoZSBwaGFzZSBpZiBwb3NzaWJsZS4KKyAgICB2b2lkIHZhbGlkYXRlKCk7CiAgICAg
CiAgICAgY29uc3QgY2hhciogbV9uYW1lOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJl
ZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjgsNiArNjY4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDb25zdGFudFN0b3JhZ2VQb2ludGVyOgogICAg
ICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgY2Fz
ZSBFeGl0T0s6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQdXRTdGFj
a1NpbmtpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQdXRTdGFja1NpbmtpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NjEsNyArNDYxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZUluZGV4LCBTcGVjTm9uZSwgUHV0U3RhY2ssIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5tX3N0YWNrQWNjZXNzRGF0YS5hZGQob3Bl
cmFuZCwgZm9ybWF0KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRnZShpbmNvbWlu
ZywgdXNlS2luZEZvcihmb3JtYXQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRWRn
ZShpbmNvbWluZywgdW5jaGVja2VkVXNlS2luZEZvcihmb3JtYXQpKSk7CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmZXJyZWQub3BlcmFuZChvcGVyYW5k
KSA9IERlYWRGbHVzaDsKICAgICAgICAgICAgICAgICAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NTQUNvbnZlcnNpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU1NBQ29udmVyc2lv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDYgKzI3MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIEtpbGxTdGFjaywgbm9kZS0+b3JpZ2lu
LAogICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG5vZGUtPnVubGlua2VkTG9jYWwoKS5v
ZmZzZXQoKSkpOworICAgICAgICAgICAgICAgICAgICBub2RlLT5vcmlnaW4uZXhpdE9LID0gZmFs
c2U7IC8vIEtpbGxTdGFjayBjbG9iYmVycyBleGl0LgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMzQ2LDcgKzM0
NywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlKiBzc2FWYXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKICAgICAgICAgICAgICAgICAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fdmFyaWFibGVGb3JTU0FJbmRleFtz
c2FWYXJpYWJsZS0+aW5kZXgoKV07CiAgICAgICAgICAgICAgICAgICAgIEZsdXNoRm9ybWF0IGZv
cm1hdCA9IHZhcmlhYmxlLT5mbHVzaEZvcm1hdCgpOwotICAgICAgICAgICAgICAgICAgICBVc2VL
aW5kIHVzZUtpbmQgPSB1c2VLaW5kRm9yKGZvcm1hdCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIHVzZSBhbiB1bmNoZWNrZWQgdXNlIGtpbmQgYmVjYXVzZSB0aGUgU2V0TG9jYWwg
d2FzIHR1cm5lZCBpbnRvIGEgQ2hlY2suCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dG8gdXNlIGFuIHVuY2hlY2tlZCB1c2UgYmVjYXVzZSBhdCBsZWFzdCBzb21ldGltZXMsIHRoZSBl
bmQgb2YgdGhlIGJsb2NrCisgICAgICAgICAgICAgICAgICAgIC8vIGlzIG5vdCBleGl0T0suCisg
ICAgICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IHVuY2hlY2tlZFVzZUtpbmRGb3Io
Zm9ybWF0KTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICB1cHNpbG9uSW5z
ZXJ0aW9uUG9pbnQsIFNwZWNOb25lLCBVcHNpbG9uLCB1cHNpbG9uT3JpZ2luLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE4
ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3Ry
YWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgR2V0U3RhY2s6CiAgICAgY2FzZSBNb3ZIaW50Ogog
ICAgIGNhc2UgWm9tYmllSGludDoKKyAgICBjYXNlIEV4aXRPSzoKICAgICBjYXNlIFBoYW50b206
CiAgICAgY2FzZSBVcHNpbG9uOgogICAgIGNhc2UgUGhpOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODkyLDYgKzE4OTIsMTEgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBub1Jlc3VsdChub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBFeGl0T0s6IHsKKyAgICAgICAgbm9S
ZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBT
ZXRMb2NhbDogewogICAgICAgICBzd2l0Y2ggKG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5m
bHVzaEZvcm1hdCgpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5NzEsNiArMTk3MSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBFeGl0T0s6IHsK
KyAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
CiAgICAgY2FzZSBTZXRMb2NhbDogewogICAgICAgICBzd2l0Y2ggKG5vZGUtPnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5mbHVzaEZvcm1hdCgpKSB7CiAgICAgICAgIGNhc2UgRmx1c2hlZERvdWJsZTog
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw2IEBAIFNwZWN1
bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSVRDb21waWwKICAgICAsIG1faW50ZXJwcmV0ZXIo
bV9qaXQuZ3JhcGgoKSwgbV9zdGF0ZSkKICAgICAsIG1fc3RyZWFtKCZqaXQuaml0Q29kZSgpLT52
YXJpYWJsZUV2ZW50U3RyZWFtKQogICAgICwgbV9taW5pZmllZEdyYXBoKCZqaXQuaml0Q29kZSgp
LT5taW5pZmllZERGRykKLSAgICAsIG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMoZmFsc2UpCiB7
CiB9CiAKQEAgLTE5Niw3ICsxOTUsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlv
bkNoZWNrKEV4CiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICBK
SVRDb21waWxlcjo6SnVtcCBmdXp6SnVtcCA9IGVtaXRPU1JFeGl0RnV6ekNoZWNrKCk7CiAgICAg
aWYgKGZ1enpKdW1wLmlzU2V0KCkpIHsKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGp1
bXBzVG9GYWlsOwpAQCAtMjEyLDcgKzIxMCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1
bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQpOwog
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGZ1enpKdW1wID0gZW1pdE9TUkV4aXRGdXp6Q2hlY2soKTsK
ICAgICBpZiAoZnV6ekp1bXAuaXNTZXQoKSkgewogICAgICAgICBKSVRDb21waWxlcjo6SnVtcExp
c3QgbXlKdW1wc1RvRmFpbDsKQEAgLTIyOCw3ICsyMjUsNiBAQCBPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyIFNwZWN1bGF0aXZlSklUOjpzCiB7CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAg
ICByZXR1cm4gT1NSRXhpdEp1bXBQbGFjZWhvbGRlcigpOwotICAgIEFTU0VSVChtX2lzQ2hlY2tp
bmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7CiAgICAgdW5zaWduZWQgaW5kZXggPSBtX2pp
dC5qaXRDb2RlKCktPm9zckV4aXQuc2l6ZSgpOwogICAgIG1faml0LmFwcGVuZEV4aXRJbmZvKCk7
CiAgICAgbV9qaXQuaml0Q29kZSgpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1
ZVNvdXJjZSwgbV9qaXQuZ3JhcGgoKS5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKG5v
ZGUpLCB0aGlzLCBtX3N0cmVhbS0+c2l6ZSgpKSk7CkBAIC0yMzcsMTkgKzIzMywxNiBAQCBPU1JF
eGl0SnVtcFBsYWNlaG9sZGVyIFNwZWN1bGF0aXZlSklUOjpzCiAKIE9TUkV4aXRKdW1wUGxhY2Vo
b2xkZXIgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNTRVJUKG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICByZXR1cm4gc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlVXNlLm5vZGUoKSk7CiB9CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBFZGdlIG5vZGVVc2UsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwg
bV9jYW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5v
ZGVVc2Uubm9kZSgpLCBqdW1wVG9GYWlsKTsKIH0KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3Bl
Y3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IEVkZ2Ugbm9kZVVzZSwgY29uc3QgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFp
bCkKIHsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBtX2NhbkV4aXQp
OwogICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZVVzZS5ub2Rl
KCksIGp1bXBzVG9GYWlsKTsKIH0KIApAQCAtMjU3LDcgKzI1MCw2IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2soRXgKIHsKICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQobV9pc0NoZWNraW5nQXJndW1lbnRUeXBlcyB8fCBt
X2NhbkV4aXQpOwogICAgIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBtX2ppdC5qaXRDb2RlKCkt
PmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwogICAgIG1faml0LmFwcGVuZEV4
aXRJbmZvKGp1bXBUb0ZhaWwpOwogICAgIG1faml0LmppdENvZGUoKS0+YXBwZW5kT1NSRXhpdChP
U1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LmdyYXBoKCkubWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZUZvcihub2RlKSwgdGhpcywgbV9zdHJlYW0tPnNpemUoKSwgcmVjb3ZlcnlJ
bmRleCkpOwpAQCAtMjY1LDcgKzI1Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0
aW9uQ2hlY2soRXgKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayhFeGl0
S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIEVkZ2Ugbm9kZVVzZSwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYg
cmVjb3ZlcnkpCiB7Ci0gICAgQVNTRVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9j
YW5FeGl0KTsKICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVV
c2Uubm9kZSgpLCBqdW1wVG9GYWlsLCByZWNvdmVyeSk7CiB9CiAKQEAgLTI3Myw3ICsyNjQsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0SW52YWxpZGF0aW9uUG9pCiB7CiAgICAgaWYgKCFt
X2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKG1fY2FuRXhpdCk7CiAg
ICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1faml0LmFwcGVuZEV4aXRJbmZvKEpJ
VENvbXBpbGVyOjpKdW1wTGlzdCgpKTsKICAgICBtX2ppdC5qaXRDb2RlKCktPmFwcGVuZE9TUkV4
aXQoT1NSRXhpdCgKICAgICAgICAgVW5jb3VudGFibGVJbnZhbGlkYXRpb24sIEpTVmFsdWVTb3Vy
Y2UoKSwKQEAgLTI4Niw3ICsyNzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0SW52YWxp
ZGF0aW9uUG9pCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlKiBub2Rl
KQogewotICAgIEFTU0VSVChtX2lzQ2hlY2tpbmdBcmd1bWVudFR5cGVzIHx8IG1fY2FuRXhpdCk7
CiAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICByZXR1cm47CiAgICAgc3BlY3VsYXRp
b25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZSwgbV9qaXQuanVtcCgpKTsKQEAgLTI5Nyw3
ICsyODYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2CiAKIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBFZGdlIG5vZGVVc2UpCiB7Ci0gICAgQVNT
RVJUKG1faXNDaGVja2luZ0FyZ3VtZW50VHlwZXMgfHwgbV9jYW5FeGl0KTsKICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihraW5kLCBqc1ZhbHVlUmVncywgbm9kZVVzZS5ub2RlKCkp
OwogfQogCkBAIC0xNDY4LDkgKzE0NTYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
Q3VycmVudEJsb2NrCiAgICAgICAgICAgICAgICAgdmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpLAog
ICAgICAgICAgICAgICAgIGZvcm1hdCkpOwogICAgIH0KLSAgICAKLSAgICBtX2NvZGVPcmlnaW5G
b3JFeGl0VGFyZ2V0ID0gQ29kZU9yaWdpbigpOwotICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlID0gQ29kZU9yaWdpbigpOworCisgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CiAgICAg
CiAgICAgZm9yIChtX2luZGV4SW5CbG9jayA9IDA7IG1faW5kZXhJbkJsb2NrIDwgbV9ibG9jay0+
c2l6ZSgpOyArK21faW5kZXhJbkJsb2NrKSB7CiAgICAgICAgIG1fY3VycmVudE5vZGUgPSBtX2Js
b2NrLT5hdChtX2luZGV4SW5CbG9jayk7CkBAIC0xNDgyLDE1ICsxNDY5LDExIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVDdXJyZW50QmxvY2sKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCi0gICAgICAgICAgICBtX2Nh
bkV4aXQgPSB0cnVlOyAvLyBFc3NlbnRpYWxseSBkaXNhYmxlIHRoZSBhc3NlcnRpb25zLgotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2NhbkV4aXQgPSBtYXlFeGl0KG1faml0LmdyYXBoKCks
IG1fY3VycmVudE5vZGUpOwotICAgICAgICAKICAgICAgICAgbV9pbnRlcnByZXRlci5zdGFydEV4
ZWN1dGluZygpOwogICAgICAgICBtX2ppdC5zZXRGb3JOb2RlKG1fY3VycmVudE5vZGUpOwotICAg
ICAgICBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0ID0gbV9jdXJyZW50Tm9kZS0+b3JpZ2luLmZv
ckV4aXQ7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gbV9jdXJyZW50Tm9k
ZS0+b3JpZ2luLnNlbWFudGljOworICAgICAgICBtX29yaWdpbiA9IG1fY3VycmVudE5vZGUtPm9y
aWdpbjsKKyAgICAgICAgaWYgKHZhbGlkYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICBtX29y
aWdpbi5leGl0T0sgJj0gbWF5RXhpdChtX2ppdC5ncmFwaCgpLCBtX2N1cnJlbnROb2RlKSA9PSBF
eGl0czsKICAgICAgICAgbV9sYXN0R2VuZXJhdGVkTm9kZSA9IG1fY3VycmVudE5vZGUtPm9wKCk7
CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZS0+c2hvdWxkR2VuZXJhdGUo
KSk7CkBAIC0xNTM3LDkgKzE1MjAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3Vy
cmVudEJsb2NrCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoKQogewog
ICAgIEFTU0VSVCghbV9jdXJyZW50Tm9kZSk7Ci0gICAgbV9pc0NoZWNraW5nQXJndW1lbnRUeXBl
cyA9IHRydWU7Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7
Ci0gICAgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUgPSBDb2RlT3JpZ2luKDApOworICAgIG1f
b3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsK
IAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9qaXQuY29kZUJsb2NrKCktPm51bVBhcmFtZXRl
cnMoKTsgKytpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2ppdC5ncmFwaCgpLm1fYXJndW1l
bnRzW2ldOwpAQCAtMTYwMiw3ICsxNTgzLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tB
cmd1bWVudFR5cGVzKAogICAgICAgICB9CiAjZW5kaWYKICAgICB9Ci0gICAgbV9pc0NoZWNraW5n
QXJndW1lbnRUeXBlcyA9IGZhbHNlOworCisgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKCk7CiB9
CiAKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTg4OTM4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNDU4LDcgKzI0NTgsNiBAQCBwdWJsaWM6CiAgICAgQmFzaWNCbG9jayogbV9ibG9j
azsKICAgICBOb2RlKiBtX2N1cnJlbnROb2RlOwogICAgIE5vZGVUeXBlIG1fbGFzdEdlbmVyYXRl
ZE5vZGU7Ci0gICAgYm9vbCBtX2NhbkV4aXQ7CiAgICAgdW5zaWduZWQgbV9pbmRleEluQmxvY2s7
CiAgICAgLy8gVmlydHVhbCBhbmQgcGh5c2ljYWwgcmVnaXN0ZXIgbWFwcy4KICAgICBWZWN0b3I8
R2VuZXJhdGlvbkluZm8sIDMyPiBtX2dlbmVyYXRpb25JbmZvOwpAQCAtMjQ3OSw4ICsyNDc4LDcg
QEAgcHVibGljOgogICAgIH07CiAgICAgVmVjdG9yPEJyYW5jaFJlY29yZCwgOD4gbV9icmFuY2hl
czsKIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldDsKLSAgICBDb2Rl
T3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOworICAgIE5vZGVPcmlnaW4gbV9vcmln
aW47CiAgICAgCiAgICAgSW5QbGFjZUFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBBYnN0cmFj
dEludGVycHJldGVyPEluUGxhY2VBYnN0cmFjdFN0YXRlPiBtX2ludGVycHJldGVyOwpAQCAtMjQ4
OCw4ICsyNDg2LDYgQEAgcHVibGljOgogICAgIFZhcmlhYmxlRXZlbnRTdHJlYW0qIG1fc3RyZWFt
OwogICAgIE1pbmlmaWVkR3JhcGgqIG1fbWluaWZpZWRHcmFwaDsKICAgICAKLSAgICBib29sIG1f
aXNDaGVja2luZ0FyZ3VtZW50VHlwZXM7Ci0gICAgCiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxTbG93UGF0aEdlbmVyYXRvcj4sIDg+IG1fc2xvd1BhdGhHZW5lcmF0b3JzOwogICAgIFZlY3Rv
cjxTaWxlbnRSZWdpc3RlclNhdmVQbGFuPiBtX3BsYW5zOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RvcmVCYXJyaWVySW5zZXJ0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxODg5MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0b3JlQmFycmllckluc2VydGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEw
LDcgKzMxMCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgogICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAg
ICAgICAgICAgICAgIC8vIFRoZXNlIGFsbG9jYXRlIGJ1dCB0aGVuIHJ1biB0aGVpciBvd24gYmFy
cmllci4KLSAgICAgICAgICAgICAgICBpbnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4ICsgMSwgbV9u
b2RlLT5jaGlsZDEoKS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGluc2VydEJhcnJpZXJXaXRo
SW52YWxpZEV4aXQobV9ub2RlSW5kZXggKyAxLCBFZGdlKG1fbm9kZS0+Y2hpbGQxKCkubm9kZSgp
LCBLbm93bkNlbGxVc2UpKTsKICAgICAgICAgICAgICAgICBtX25vZGUtPnNldEVwb2NoKEVwb2No
KCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNDc0LDEw
ICs0NzQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICAgICAgSW5zZXJ0aW5nIGJhcnJpZXIuXG4iKTsKLSAg
ICAgICAgaW5zZXJ0QmFycmllcihtX25vZGVJbmRleCwgYmFzZS5ub2RlKCkpOworICAgICAgICBp
bnNlcnRCYXJyaWVyKG1fbm9kZUluZGV4LCBiYXNlKTsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBp
bnNlcnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgTm9kZSogYmFzZSkKKworICAgIHZvaWQg
aW5zZXJ0QmFycmllcldpdGhJbnZhbGlkRXhpdCh1bnNpZ25lZCBub2RlSW5kZXgsIEVkZ2UgYmFz
ZSkKKyAgICB7CisgICAgICAgIGluc2VydEJhcnJpZXIobm9kZUluZGV4LCBiYXNlLCBmYWxzZSk7
CisgICAgfQorCisgICAgdm9pZCBpbnNlcnRCYXJyaWVyKHVuc2lnbmVkIG5vZGVJbmRleCwgRWRn
ZSBiYXNlLCBib29sIGV4aXRPSyA9IHRydWUpCiAgICAgewogICAgICAgICAvLyBJZiB3ZSdyZSBp
biBnbG9iYWwgbW9kZSwgd2Ugc2hvdWxkIG9ubHkgaW5zZXJ0IHRoZSBiYXJyaWVycyBvbmNlIHdl
IGhhdmUgY29udmVyZ2VkLgogICAgICAgICBpZiAoIXJlYWxseUluc2VydEJhcnJpZXJzKCkpCkBA
IC00ODUsOCArNDkwLDE4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICAvLyBGSVhNRTog
V2UgY291bGQgc3VwcG9ydCBTdG9yZUJhcnJpZXIoVW50eXBlZFVzZTopLiBUaGF0IHdvdWxkIGJl
IHNvcnQgb2YgY29vbC4KICAgICAgICAgLy8gQnV0IHJpZ2h0IG5vdyB3ZSBkb24ndCBuZWVkIGl0
LgorCisgICAgICAgIC8vIElmIHRoZSBvcmlnaW5hbCBlZGdlIHdhcyB1bmNoZWNrZWQsIHdlIHNo
b3VsZCBhbHNvIG5vdCBoYXZlIGEgY2hlY2suIFdlIG1heSBiZSBpbiBhIGNvbnRleHQKKyAgICAg
ICAgLy8gd2hlcmUgY2hlY2tzIGFyZSBub3QgYWxsb3dlZC4gSWYgd2UgZXZlciBkaWQgaGF2ZSB0
byBpbnNlcnQgYSBiYXJyaWVyIGF0IGFuIEV4aXRJbnZhbGlkCisgICAgICAgIC8vIGNvbnRleHQg
YW5kIHRoYXQgYmFycmllciBuZWVkZWQgYSBjaGVjaywgdGhlbiB3ZSBjb3VsZCBtYWtlIHRoYXQg
d29yayBieSBob2lzdGluZyB0aGUgY2hlY2suCisgICAgICAgIC8vIFRoYXQgZG9lc24ndCBoYXBw
ZW4gcmlnaHQgbm93LgorICAgICAgICBpZiAoYmFzZS51c2VLaW5kKCkgIT0gS25vd25DZWxsVXNl
KSB7CisgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9ub2RlLT5vcmln
aW4uZXhpdE9LKTsKKyAgICAgICAgICAgIGJhc2Uuc2V0VXNlS2luZChDZWxsVXNlKTsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAg
ICAgICAgIG5vZGVJbmRleCwgU3BlY05vbmUsIFN0b3JlQmFycmllciwgbV9ub2RlLT5vcmlnaW4s
IEVkZ2UoYmFzZSwgQ2VsbFVzZSkpOworICAgICAgICAgICAgbm9kZUluZGV4LCBTcGVjTm9uZSwg
U3RvcmVCYXJyaWVyLCBtX25vZGUtPm9yaWdpbi50YWtlVmFsaWRFeGl0KGV4aXRPSyksIGJhc2Up
OwogCiAgICAgICAgIGJhc2UtPnNldEVwb2NoKG1fY3VycmVudEVwb2NoKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OCw4ICsxMDgsMTYgQEAgcHVibGljOgogICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBt
X2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAgICAgICAgICAgaWYgKCFibG9jaykKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4Rm9yQ2hlY2tz
ID0gVUlOVF9NQVg7CisgICAgICAgICAgICBOb2RlT3JpZ2luIG9yaWdpbkZvckNoZWNrczsKICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwg
YmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5leGl0T0spIHsKKyAgICAgICAgICAgICAgICAgICAg
aW5kZXhGb3JDaGVja3MgPSBpbmRleEluQmxvY2s7CisgICAgICAgICAgICAgICAgICAgIG9yaWdp
bkZvckNoZWNrcyA9IG5vZGUtPm9yaWdpbjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgLy8gQmUgY2FyZWZ1bCBub3QgdG8gdXNlICdub2RlJyBh
ZnRlciBhcHBlbmRpbmcgdG8gdGhlIGdyYXBoLiBJbiB0aG9zZSBzd2l0Y2gKICAgICAgICAgICAg
ICAgICAvLyBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIGFwcGVuZCwgd2UgZmlyc3QgY2FyZWZ1bGx5
IGV4dHJhY3QgZXZlcnl0aGluZyB3ZSBuZWVkCiAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUg
bm9kZSwgYmVmb3JlIGRvaW5nIGFueSBhcHBlbmRpbmcuCkBAIC0xNzAsMTMgKzE3OCwxNSBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoaXRl
ci0+dmFsdWUubV9zdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5kZXhGb3JDaGVja3MsIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Gb3JDaGVja3Mud2l0aFNlbWFudGljKG9yaWdp
bi5zZW1hbnRpYyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGl0ZXItPnZhbHVlLm1fc3RydWN0dXJlKSksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRWRnZShjaGlsZDEubm9kZSgpLCBDZWxsVXNlKSk7CiAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaXRlci0+dmFsdWUubV9hcnJheU1vZGVJc1ZhbGlkKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUubV9hcnJheU1vZGVIb2lz
dGluZ09rYXkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Q2hlY2tBcnJheSwgb3JpZ2luLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9y
Q2hlY2tzLCBTcGVjTm9uZSwgQ2hlY2tBcnJheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW5Gb3JDaGVja3Mud2l0aFNlbWFudGljKG9yaWdpbi5zZW1hbnRpYyksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGl0ZXItPnZhbHVlLm1fYXJyYXlNb2RlLmFzV29y
ZCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGdlKGNoaWxkMS5ub2RlKCksIENl
bGxVc2UpKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTg4OTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9ja1dp
dGhKSVRUeXBlLmgiCisjaW5jbHVkZSAiREZHQ2xvYmJlcnNFeGl0U3RhdGUuaCIKICNpbmNsdWRl
ICJERkdNYXlFeGl0LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CkBAIC0xODUsMTMgKzE4NiwzMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpKTsKLSAgICAgICAgICAg
ICAgICAKKwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgbm9kZS0+b3JpZ2luLnNl
bWFudGljLmlzU2V0KCkgPT0gbm9kZS0+b3JpZ2luLmZvckV4aXQuaXNTZXQoKSk7Ci0gICAgICAg
ICAgICAgICAgVkFMSURBVEUoKG5vZGUpLCAhbWF5RXhpdChtX2dyYXBoLCBub2RlKSB8fCBub2Rl
LT5vcmlnaW4uZm9yRXhpdC5pc1NldCgpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgobm9k
ZSksICEoIW5vZGUtPm9yaWdpbi5mb3JFeGl0LmlzU2V0KCkgJiYgbm9kZS0+b3JpZ2luLmV4aXRP
SykpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2RlKSwgIShtYXlFeGl0KG1fZ3JhcGgs
IG5vZGUpID09IEV4aXRzICYmICFub2RlLT5vcmlnaW4uZXhpdE9LKSk7CisKKyAgICAgICAgICAg
ICAgICBpZiAoaSkgeworICAgICAgICAgICAgICAgICAgICBOb2RlKiBwcmV2aW91c05vZGUgPSBi
bG9jay0+YXQoaSAtIDEpOworICAgICAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIChub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICFjbG9iYmVy
c0V4aXRTdGF0ZShtX2dyYXBoLCBwcmV2aW91c05vZGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICB8fCAhbm9kZS0+b3JpZ2luLmV4aXRPSworICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9k
ZS0+b3AoKSA9PSBFeGl0T0sKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9yaWdp
bi5mb3JFeGl0ICE9IHByZXZpb3VzTm9kZS0+b3JpZ2luLmZvckV4aXQpOworICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgICAgIChub2RlKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICEoIXByZXZpb3VzTm9kZS0+b3JpZ2luLmV4aXRPSyAmJiBub2Rl
LT5vcmlnaW4uZXhpdE9LKQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgbm9kZS0+b3AoKSA9
PSBFeGl0T0sKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5vZGUtPm9yaWdpbi5mb3JFeGl0
ICE9IHByZXZpb3VzTm9kZS0+b3JpZ2luLmZvckV4aXQpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWQUxJREFURSgobm9kZSksICFub2RlLT5o
YXNTdHJ1Y3R1cmUoKSB8fCAhIW5vZGUtPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBW
QUxJREFURSgobm9kZSksICFub2RlLT5oYXNDZWxsT3BlcmFuZCgpIHx8IG5vZGUtPmNlbGxPcGVy
YW5kKCktPnZhbHVlKCkuaXNDZWxsKCkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgIW5vZGUtPmhhc0NlbGxPcGVyYW5kKCkgfHwgISFub2RlLT5jZWxsT3BlcmFuZCgpLT52YWx1
ZSgpKTsKLSAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCEobm9kZS0+ZmxhZ3MoKSAmIE5vZGVIYXNWYXJBcmdzKSkgewogICAgICAgICAgICAg
ICAgICAgICBpZiAoIW5vZGUtPmNoaWxkMigpKQogICAgICAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoKG5vZGUpLCAhbm9kZS0+Y2hpbGQzKCkpOwpAQCAtMjEwLDEwICsyMjgsMTMgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQo
KSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFVudHlwZWRVc2U6CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQ2VsbFVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLbm93bkNlbGxV
c2U6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgS25vd25JbnQzMlVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQ1MlJl
cFVzZToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBVc2U6CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQm9vbGVhblVzZToKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBLbm93
bkJvb2xlYW5Vc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKChub2Rl
KSwgISJCYWQgdXNlIGtpbmQiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiAr
NTEsNyBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBHZXRTdGFjazoKICAgICBjYXNlIE1vdkhpbnQ6CiAgICAgY2FzZSBab21iaWVIaW50OgorICAg
IGNhc2UgRXhpdE9LOgogICAgIGNhc2UgUGhhbnRvbToKICAgICBjYXNlIEZsdXNoOgogICAgIGNh
c2UgUGhhbnRvbUxvY2FsOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4ODkzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjcs
OSArMjI3LDggQEAgcHVibGljOgogICAgICAgICAgICAgYXZhaWxhYmlsaXR5TWFwKCkubV9sb2Nh
bHMuYXJndW1lbnQoaSkgPQogICAgICAgICAgICAgICAgIEF2YWlsYWJpbGl0eShGbHVzaGVkQXQo
Rmx1c2hlZEpTVmFsdWUsIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpKSk7CiAgICAgICAg
IH0KLSAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRhcmdldCA9IENvZGVPcmlnaW4oMCk7Ci0g
ICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlID0gQ29kZU9yaWdpbigwKTsKICAgICAg
ICAgbV9ub2RlID0gbnVsbHB0cjsKKyAgICAgICAgbV9vcmlnaW4gPSBOb2RlT3JpZ2luKENvZGVP
cmlnaW4oMCksIENvZGVPcmlnaW4oMCksIHRydWUpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpOyBpLS07KSB7CiAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlciBvcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSk7CkBAIC0zOTMsOCAr
MzkyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9ub2RlID0g
bV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7Ci0gICAgICAgIG1fY29kZU9yaWdpbkZv
ckV4aXRUYXJnZXQgPSBtX25vZGUtPm9yaWdpbi5mb3JFeGl0OworICAgICAgICBtX29yaWdpbiA9
IG1fbm9kZS0+b3JpZ2luOwogICAgICAgICAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSkKICAgICAgICAgICAgIGRhdGFMb2coIkxvd2VyaW5nICIsIG1fbm9kZSwgIlxu
Iik7CkBAIC04NDEsNiArODM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBMb29wSGludDoK
ICAgICAgICAgY2FzZSBNb3ZIaW50OgogICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAg
IGNhc2UgRXhpdE9LOgogICAgICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgICAgIGNh
c2UgUGhhbnRvbU5ld0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFBoYW50b21DcmVhdGVBY3RpdmF0
aW9uOgpAQCAtODc4LDE1ICs4NzcsMTggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fb3V0LnNl
dChsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIEludDMyVXNlOgorICAgICAgICBjYXNlIEtub3duSW50MzJV
c2U6CiAgICAgICAgICAgICBtX291dC5zZXQobG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksIGRl
c3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEludDUyUmVwVXNl
OgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0ludDUyKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0
aW5hdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgor
ICAgICAgICBjYXNlIEtub3duQm9vbGVhblVzZToKICAgICAgICAgICAgIG1fb3V0LnNldChsb3dC
b29sZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDZWxsVXNlOgorICAgICAgICBjYXNlIEtub3duQ2VsbFVzZToKICAg
ICAgICAgICAgIG1fb3V0LnNldChsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpLCBkZXN0aW5hdGlv
bik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBVbnR5cGVkVXNlOgpAQCAtNDc1
MiwxMCArNDc1NCwxMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIGRhdGFMb2coIiAgICBJbnZhbGlkYXRpb24g
cG9pbnQgd2l0aCBhdmFpbGFiaWxpdHk6ICIsIGF2YWlsYWJpbGl0eU1hcCgpLCAiXG4iKTsKKwor
ICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKICAg
ICAgICAgCiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoT1NSRXhp
dCgKICAgICAgICAgICAgIFVuY291bnRhYmxlSW52YWxpZGF0aW9uLCBJbnZhbGlkVmFsdWVGb3Jt
YXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUoKSwKLSAgICAgICAgICAgIG1fY29kZU9y
aWdpbkZvckV4aXRUYXJnZXQsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLAorICAgICAgICAg
ICAgbV9vcmlnaW4uZm9yRXhpdCwgbV9vcmlnaW4uc2VtYW50aWMsCiAgICAgICAgICAgICBhdmFp
bGFiaWxpdHlNYXAoKS5tX2xvY2Fscy5udW1iZXJPZkFyZ3VtZW50cygpLAogICAgICAgICAgICAg
YXZhaWxhYmlsaXR5TWFwKCkubV9sb2NhbHMubnVtYmVyT2ZMb2NhbHMoKSkpOwogICAgICAgICBt
X2Z0bFN0YXRlLmZpbmFsaXplci0+b3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5m
bygpKTsKQEAgLTgwOTIsNiArODA5Niw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoIW1f
YXZhaWxhYmxlUmVjb3Zlcmllcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgZGF0YUxvZygi
ICAgICAgICBBdmFpbGFibGUgcmVjb3ZlcmllczogIiwgbGlzdER1bXAobV9hdmFpbGFibGVSZWNv
dmVyaWVzKSwgIlxuIik7CiAgICAgICAgIH0KKworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgbV9vcmlnaW4uZXhpdE9LKTsKICAgICAgICAgCiAgICAgICAgIGlmIChkb09TUkV4
aXRGdXp6aW5nKCkpIHsKICAgICAgICAgICAgIExWYWx1ZSBudW1iZXJPZkZ1enpDaGVja3MgPSBt
X291dC5hZGQoCkBAIC04MTE2LDcgKzgxMjIsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAg
ICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0KAogICAgICAgICAg
ICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihoaWdoVmFsdWUpLAotICAgICAgICAgICAgbV9jb2RlT3JpZ2luRm9yRXhpdFRh
cmdldCwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsCisgICAgICAgICAgICBtX29yaWdpbi5m
b3JFeGl0LCBtX29yaWdpbi5zZW1hbnRpYywKICAgICAgICAgICAgIGF2YWlsYWJpbGl0eU1hcCgp
Lm1fbG9jYWxzLm51bWJlck9mQXJndW1lbnRzKCksCiAgICAgICAgICAgICBhdmFpbGFiaWxpdHlN
YXAoKS5tX2xvY2Fscy5udW1iZXJPZkxvY2FscygpKSk7CiAgICAgICAgIG1fZnRsU3RhdGUuZmlu
YWxpemVyLT5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOwpAQCAtODYx
MSw5ICs4NjE3LDggQEAgcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKICAg
ICBCYXNpY0Jsb2NrKiBtX25leHRIaWdoQmxvY2s7CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0TG93
QmxvY2s7Ci0gICAgCi0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0VGFyZ2V0Owot
ICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisKKyAgICBOb2RlT3Jp
Z2luIG1fb3JpZ2luOwogICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIE5vZGUqIG1fbm9k
ZTsKICAgICAKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODg5NDMpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE1LTA4LTI1ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgTm9kZTo6b3JpZ2luIHNob3VsZCBiZSBh
YmxlIHRvIHRlbGwgeW91IGlmIGl0J3MgT0sgdG8gZXhpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYvSW5zZXJ0aW9uLmg6CisgICAgICAgIChX
VEY6OmV4ZWN1dGVJbnNlcnRpb25zKTogQWRkIGEgdXNlZnVsIGFzc2VydGlvbi4gVGhpcyBjb21l
IGludG8gcGxheSBiZWNhdXNlIEpTQyB3aWxsIHVzZSBVSU5UX01BWCBhcyAiaW52YWxpZCBpbmRl
eCIsIGFuZCB0aGF0IG91Z2h0IHRvIHRyaWdnZXIgdGhpcyBhc3NlcnRpb24uCisKIDIwMTUtMDgt
MjUgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXF1
aXJlIEdDQyB2ZXJzaW9uIGF0IGxlYXN0IDQuOQpJbmRleDogU291cmNlL1dURi93dGYvSW5zZXJ0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5zZXJ0aW9uLmgJKHJldmlzaW9u
IDE4ODkzOCkKKysrIFNvdXJjZS9XVEYvd3RmL0luc2VydGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01
OSw4ICs1OSwxMCBAQCB2b2lkIGV4ZWN1dGVJbnNlcnRpb25zKFRhcmdldFZlY3RvclR5cGUmCiAg
ICAgICAgIHJldHVybjsKICAgICB0YXJnZXQuZ3Jvdyh0YXJnZXQuc2l6ZSgpICsgaW5zZXJ0aW9u
cy5zaXplKCkpOwogICAgIHNpemVfdCBsYXN0SW5kZXggPSB0YXJnZXQuc2l6ZSgpOworICAgIHNp
emVfdCBvcmlnaW5hbFRhcmdldFNpemUgPSB0YXJnZXQuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90
IGluZGV4SW5JbnNlcnRpb25zID0gaW5zZXJ0aW9ucy5zaXplKCk7IGluZGV4SW5JbnNlcnRpb25z
LS07KSB7CiAgICAgICAgIEFTU0VSVCghaW5kZXhJbkluc2VydGlvbnMgfHwgaW5zZXJ0aW9uc1tp
bmRleEluSW5zZXJ0aW9uc10uaW5kZXgoKSA+PSBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25z
IC0gMV0uaW5kZXgoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQob3JpZ2luYWxUYXJnZXRTaXpl
LCBpbnNlcnRpb25zW2luZGV4SW5JbnNlcnRpb25zXS5pbmRleCgpIDwgb3JpZ2luYWxUYXJnZXRT
aXplKTsKICAgICAgICAgc2l6ZV90IGZpcnN0SW5kZXggPSBpbnNlcnRpb25zW2luZGV4SW5JbnNl
cnRpb25zXS5pbmRleCgpICsgaW5kZXhJbkluc2VydGlvbnM7CiAgICAgICAgIHNpemVfdCBpbmRl
eE9mZnNldCA9IGluZGV4SW5JbnNlcnRpb25zICsgMTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IGxhc3RJbmRleDsgLS1pID4gZmlyc3RJbmRleDspCg==
</data>
<flag name="review"
          id="285114"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>