<?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>128073</bug_id>
          
          <creation_ts>2014-02-02 10:25:18 -0800</creation_ts>
          <short_desc>[ftlopt] AI should be able track structure sets larger than 1</short_desc>
          <delta_ts>2014-07-23 16:36:31 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>133014</dependson>
          <blocked>132357</blocked>
    
    <blocked>133229</blocked>
    
    <blocked>133398</blocked>
    
    <blocked>133426</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>bfulgham</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>974783</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-02-02 10:25:18 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011064</commentid>
    <comment_count>1</comment_count>
      <attachid>231915</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-22 14:41:26 -0700</bug_when>
    <thetext>Created attachment 231915
the wrong way

I think that the right way to do this is to have the DFG watch any watchable structure and then to have clobbering assume that you don&apos;t need to clobber watchable structures.

Easy as pie.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011066</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-22 14:41:55 -0700</bug_when>
    <thetext>Oh and here are the perf numbers of watching all watchable structures:

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/ftlopt/OpenSource/WebKitBuild/Release/jsc (r169210)
&quot;MoreWatchpoints&quot; at /Volumes/Data/fromMiniMe/secondary/OpenSource/WebKitBuild/Release/jsc (r169210)

Collected 6 samples per benchmark/VM, with 6 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              MoreWatchpoints                                  
SunSpider:
   3d-cube                                            7.7771+-0.0765     ?      7.8234+-0.0980        ?
   3d-morph                                           9.3914+-0.0579     ?      9.3939+-0.0894        ?
   3d-raytrace                                       10.0005+-0.1363     ?     10.0189+-0.0705        ?
   access-binary-trees                                2.8274+-0.0324            2.7395+-0.0799          might be 1.0321x faster
   access-fannkuch                                    9.3280+-0.2334            9.2397+-0.1727        
   access-nbody                                       4.7224+-0.0739            4.6570+-0.0072          might be 1.0140x faster
   access-nsieve                                      5.5432+-0.0947            5.4903+-0.0789        
   bitops-3bit-bits-in-byte                           1.8588+-0.0146            1.8572+-0.0087        
   bitops-bits-in-byte                                6.5026+-0.0657     ?      6.5251+-0.1344        ?
   bitops-bitwise-and                                 3.2026+-0.0715            3.1766+-0.0577        
   bitops-nsieve-bits                                 5.8017+-0.0236     ^      5.7067+-0.0347        ^ definitely 1.0166x faster
   controlflow-recursive                              2.8598+-0.0998     ?      2.9045+-0.0490        ? might be 1.0156x slower
   crypto-aes                                         6.2783+-0.0891            6.2756+-0.0356        
   crypto-md5                                         3.5803+-0.1423            3.4563+-0.0754          might be 1.0359x faster
   crypto-sha1                                        3.7611+-0.1029            3.7411+-0.0622        
   date-format-tofte                                 13.2462+-0.1423     ?     13.2799+-0.2038        ?
   date-format-xparb                                  9.9740+-0.2692     ?     10.2703+-0.1868        ? might be 1.0297x slower
   math-cordic                                        4.8072+-0.0929            4.7590+-0.0705          might be 1.0101x faster
   math-partial-sums                                 10.6381+-0.2241           10.4179+-0.0312          might be 1.0211x faster
   math-spectral-norm                                 3.0695+-0.0476            3.0588+-0.0250        
   regexp-dna                                        12.0284+-0.1739     ?     12.0312+-0.1050        ?
   string-base64                                      6.3721+-0.0758     ?      6.4257+-0.0831        ?
   string-fasta                                      10.3696+-0.2276     ?     10.4851+-0.2843        ? might be 1.0111x slower
   string-tagcloud                                   15.6822+-0.2678     ?     15.6900+-0.2550        ?
   string-unpack-code                                32.6667+-0.9394     ?     33.0823+-0.7772        ? might be 1.0127x slower
   string-validate-input                              7.6398+-0.1135     ?      7.6860+-0.0958        ?

   &lt;arithmetic&gt; *                                     8.0742+-0.0463     ?      8.0843+-0.0396        ? might be 1.0013x slower
   &lt;geometric&gt;                                        6.5635+-0.0314            6.5467+-0.0135          might be 1.0026x faster
   &lt;harmonic&gt;                                         5.4333+-0.0336            5.4043+-0.0100          might be 1.0054x faster

                                                        TipOfTree              MoreWatchpoints                                  
LongSpider:
   3d-cube                                         1392.5235+-13.7862    ?   1399.5999+-36.3436       ?
   3d-morph                                        2286.8144+-3.6939     ?   2303.5964+-50.0452       ?
   3d-raytrace                                     1465.7306+-17.6457    ?   1476.8281+-42.8307       ?
   access-binary-trees                             1673.0638+-10.5233    ?   1673.7282+-24.4042       ?
   access-fannkuch                                  531.7426+-18.5349         527.1615+-7.0910        
   access-nbody                                    1245.1110+-3.4118     !   1264.6690+-8.2210        ! definitely 1.0157x slower
   access-nsieve                                   1640.3402+-28.3113    ?   1646.5381+-17.5246       ?
   bitops-3bit-bits-in-byte                          60.1423+-1.6833           59.5509+-0.3792        
   bitops-bits-in-byte                              398.1725+-6.7979          397.7773+-2.5917        
   bitops-nsieve-bits                              1184.2798+-9.0461         1179.9860+-4.7959        
   controlflow-recursive                            880.0491+-3.2549     ^    869.0289+-2.4819        ^ definitely 1.0127x faster
   crypto-aes                                      1142.6767+-5.1522         1141.9144+-2.3591        
   crypto-md5                                      1083.0818+-11.1079        1080.2807+-2.9691        
   crypto-sha1                                     1190.7148+-8.5779     !   1213.8315+-4.9607        ! definitely 1.0194x slower
   date-format-tofte                               1178.0194+-13.8008    ?   1191.1342+-24.8269       ? might be 1.0111x slower
   date-format-xparb                               1669.2515+-46.4507    ?   1721.0008+-24.0433       ? might be 1.0310x slower
   math-cordic                                      841.6890+-1.6275     ?    842.9717+-4.5294        ?
   math-partial-sums                               1332.5089+-29.8564    ?   1335.7389+-4.2825        ?
   math-spectral-norm                              1297.8143+-2.1156         1296.9032+-1.0592        
   string-base64                                    600.1566+-4.4973          598.4666+-2.8850        
   string-fasta                                     921.1930+-11.6825    ?    931.5115+-20.7722       ? might be 1.0112x slower
   string-tagcloud                                  395.8900+-2.4269     !    401.2414+-2.5614        ! definitely 1.0135x slower

   &lt;arithmetic&gt;                                    1109.5894+-2.6131     !   1116.0663+-3.6050        ! definitely 1.0058x slower
   &lt;geometric&gt; *                                    928.4002+-1.8726     ?    932.0723+-2.3276        ? might be 1.0040x slower
   &lt;harmonic&gt;                                       565.0984+-5.9059          563.9037+-2.0471          might be 1.0021x faster

                                                        TipOfTree              MoreWatchpoints                                  
V8Spider:
   crypto                                            85.3139+-0.7514           85.2372+-0.8758        
   deltablue                                        102.8488+-1.9532          102.7127+-0.7693        
   earley-boyer                                      70.5732+-0.7658     ?     70.7522+-0.6031        ?
   raytrace                                          44.3500+-1.1640           44.0350+-0.4654        
   regexp                                           106.7197+-1.8913     ?    107.8785+-3.9170        ? might be 1.0109x slower
   richards                                         105.5955+-1.2877          105.5417+-2.2585        
   splay                                             50.1009+-1.4837           49.8695+-1.3021        

   &lt;arithmetic&gt;                                      80.7860+-0.7444     ?     80.8609+-0.5874        ? might be 1.0009x slower
   &lt;geometric&gt; *                                     76.6146+-0.7517           76.5999+-0.5698          might be 1.0002x faster
   &lt;harmonic&gt;                                        72.1769+-0.8650           72.0692+-0.6004          might be 1.0015x faster

                                                        TipOfTree              MoreWatchpoints                                  
Octane and V8v7:
   encrypt                                           0.44408+-0.00079          0.44308+-0.00057       
   decrypt                                           8.07308+-0.01892    ?     8.09506+-0.07076       ?
   deltablue                                x2       0.43958+-0.00341    ?     0.43972+-0.00456       ?
   earley                                            0.95255+-0.00454    ?     0.96057+-0.00994       ?
   boyer                                            10.73367+-0.06255         10.64704+-0.08970       
   navier-stokes                            x2       7.73307+-0.03891    ?     7.76652+-0.04507       ?
   raytrace                                 x2       2.88814+-0.03646          2.88010+-0.10274       
   regexp                                   x2      33.35482+-0.28566    ?    33.54462+-0.60686       ?
   richards                                 x2       0.23160+-0.00738          0.23102+-0.00940       
   splay                                    x2       0.64467+-0.00324          0.63414+-0.00934         might be 1.0166x faster
   pdfjs                                    x2      94.15011+-0.40260    ?    94.92090+-0.69038       ?
   mandreel                                 x2      99.79389+-2.42707    ?   102.66708+-0.57945       ? might be 1.0288x slower
   gbemu                                    x2      87.14594+-0.49203    ?    87.25374+-2.53782       ?
   closure                                           0.89295+-0.00343    ?     0.89574+-0.00351       ?
   jquery                                           10.88682+-0.02694    !    11.00441+-0.05043       ! definitely 1.0108x slower
   box2d                                    x2      28.34540+-0.98337    ^    26.77438+-0.16349       ^ definitely 1.0587x faster
   zlib                                     x2     776.30600+-45.72154   ?   790.63684+-39.93611      ? might be 1.0185x slower
   typescript                               x2    1251.28735+-13.61991   ?  1264.43412+-17.06716      ? might be 1.0105x slower

V8v7:
   &lt;arithmetic&gt;                                      6.92419+-0.03956    ?     6.94612+-0.07113       ? might be 1.0032x slower
   &lt;geometric&gt; *                                     2.03652+-0.00917          2.03349+-0.01206         might be 1.0015x faster
   &lt;harmonic&gt;                                        0.76841+-0.00949          0.76574+-0.01221         might be 1.0035x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                    159.88748+-3.12515    ?   161.88041+-2.94088       ? might be 1.0125x slower
   &lt;geometric&gt; *                                    12.24100+-0.10515    ?    12.24498+-0.06011       ? might be 1.0003x slower
   &lt;harmonic&gt;                                        1.35300+-0.01584          1.34864+-0.02021         might be 1.0032x faster

                                                        TipOfTree              MoreWatchpoints                                  
Kraken:
   ai-astar                                          530.225+-2.260      ?     535.066+-14.375        ?
   audio-beat-detection                              199.759+-0.816      !     206.302+-1.222         ! definitely 1.0328x slower
   audio-dft                                         262.440+-1.998      ?     262.815+-3.080         ?
   audio-fft                                         116.362+-3.111      !     122.707+-2.185         ! definitely 1.0545x slower
   audio-oscillator                                  380.180+-3.725            379.794+-0.939         
   imaging-darkroom                                  295.266+-1.255      ?     296.137+-1.336         ?
   imaging-desaturate                                122.150+-0.211      !     124.321+-0.221         ! definitely 1.0178x slower
   imaging-gaussian-blur                             181.874+-8.021            178.747+-0.916           might be 1.0175x faster
   json-parse-financial                               82.596+-0.425      ?      83.425+-1.044         ? might be 1.0100x slower
   json-stringify-tinderbox                          102.493+-0.767      ?     103.041+-1.382         ?
   stanford-crypto-aes                                94.528+-1.589             93.374+-1.203           might be 1.0124x faster
   stanford-crypto-ccm                                90.347+-11.727     ?      98.094+-11.975        ? might be 1.0857x slower
   stanford-crypto-pbkdf2                            244.941+-2.952      ?     248.928+-5.200         ? might be 1.0163x slower
   stanford-crypto-sha256-iterative                  111.250+-0.751            109.933+-0.819           might be 1.0120x faster

   &lt;arithmetic&gt; *                                    201.029+-0.693      ?     203.049+-1.524         ? might be 1.0100x slower
   &lt;geometric&gt;                                       169.214+-1.375      ?     171.506+-1.682         ? might be 1.0135x slower
   &lt;harmonic&gt;                                        146.265+-1.961      ?     148.701+-2.103         ? might be 1.0167x slower

                                                        TipOfTree              MoreWatchpoints                                  
JSRegress:
   adapt-to-double-divide                            20.5333+-0.1256           20.3048+-0.2575          might be 1.0113x faster
   aliased-arguments-getbyval                         1.1356+-0.0083     ?      1.1419+-0.0252        ?
   allocate-big-object                                3.6930+-0.0552     ?      3.7361+-0.2221        ? might be 1.0117x slower
   arity-mismatch-inlining                            1.0171+-0.0081     ?      1.0253+-0.0040        ?
   array-access-polymorphic-structure                10.8464+-0.2078     ?     10.9752+-0.1368        ? might be 1.0119x slower
   array-nonarray-polymorhpic-access                 63.0035+-0.2609     ?     63.1164+-0.2395        ?
   array-prototype-every                            124.2277+-0.7453     ?    125.2723+-4.0609        ?
   array-prototype-forEach                          125.8820+-5.9883          122.4917+-1.2804          might be 1.0277x faster
   array-prototype-map                              149.6750+-1.9558     ?    150.1027+-3.1018        ?
   array-prototype-some                             127.4970+-5.2922          124.0220+-1.3912          might be 1.0280x faster
   array-with-double-add                              6.8075+-0.0920     ?      6.8321+-0.0953        ?
   array-with-double-increment                        4.6938+-0.0713            4.6933+-0.0622        
   array-with-double-mul-add                          7.7180+-0.1691     ?      7.7552+-0.1286        ?
   array-with-double-sum                              4.9797+-0.0220     ?      5.0618+-0.0639        ? might be 1.0165x slower
   array-with-int32-add-sub                          12.0926+-0.2850           11.8693+-0.1416          might be 1.0188x faster
   array-with-int32-or-double-sum                     5.1465+-0.0861            5.1106+-0.0722        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    115.3361+-1.0193     ?    116.9484+-1.3693        ? might be 1.0140x slower
   ArrayBuffer-DataView-alloc-long-lived             32.2650+-0.5117     ?     32.9274+-0.9663        ? might be 1.0205x slower
   ArrayBuffer-Int32Array-byteOffset                  5.3347+-0.1216            5.2607+-0.0220          might be 1.0141x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    121.1551+-1.3311     ?    123.3958+-3.5301        ? might be 1.0185x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     53.6058+-3.2151           52.7168+-1.1229          might be 1.0169x faster
   ArrayBuffer-Int8Array-alloc-long-lived            31.7171+-0.9334     ?     32.0137+-0.8772        ?
   ArrayBuffer-Int8Array-alloc                       27.5731+-0.3854     ?     27.9642+-0.3072        ? might be 1.0142x slower
   asmjs_bool_bug                                     9.8872+-0.1698            9.8593+-0.1764        
   assign-custom-setter-polymorphic                   4.8088+-0.0856            4.7750+-0.0313        
   assign-custom-setter                               6.7212+-0.1015            6.7050+-0.0352        
   basic-set                                         16.2764+-0.4493           16.1560+-0.4746        
   big-int-mul                                        6.2260+-0.0299     !      6.3670+-0.1085        ! definitely 1.0226x slower
   boolean-test                                       4.7665+-0.0480     ?      4.8164+-0.0913        ? might be 1.0105x slower
   branch-fold                                        5.2085+-0.0485            5.2044+-0.0555        
   by-val-generic                                    14.1506+-0.1118     ?     14.3477+-0.3354        ? might be 1.0139x slower
   call-spread-apply                                 21.6709+-0.4956           21.0075+-0.6559          might be 1.0316x faster
   call-spread-call                                   9.0597+-0.1121            8.9308+-0.1150          might be 1.0144x faster
   captured-assignments                               0.5697+-0.0071     ?      0.5698+-0.0089        ?
   cast-int-to-double                                12.7871+-0.0640           12.7342+-0.1065        
   cell-argument                                     11.0463+-0.2782     ?     11.0630+-0.1227        ?
   cfg-simplify                                       4.1772+-0.0683            4.1655+-0.0167        
   chain-getter-access                               13.2966+-0.2700     ?     13.3060+-0.2649        ?
   cmpeq-obj-to-obj-other                            13.3462+-0.2013     ?     13.8802+-0.8623        ? might be 1.0400x slower
   constant-test                                      8.8769+-0.1412            8.8630+-0.1121        
   DataView-custom-properties                       122.8341+-1.8119     ?    124.9811+-1.8414        ? might be 1.0175x slower
   delay-tear-off-arguments-strictmode                3.6833+-0.0231     ?      3.6979+-0.0265        ?
   delete-a-few-properties-then-get-by-id             9.5176+-0.1033     ?      9.5208+-0.0895        ?
   destructuring-arguments                            8.9106+-0.0502     !      9.1007+-0.0879        ! definitely 1.0213x slower
   destructuring-swap                                 8.9639+-0.1945     ?      8.9794+-0.0992        ?
   direct-arguments-getbyval                          1.1162+-0.0072     ?      1.1298+-0.0142        ? might be 1.0122x slower
   double-get-by-val-out-of-bounds                    6.7505+-0.0922     !      7.0553+-0.0492        ! definitely 1.0451x slower
   double-pollution-getbyval                         11.3744+-0.1535     ?     11.4148+-0.2345        ?
   double-pollution-putbyoffset                       6.2481+-0.1355     ?      6.3192+-0.1552        ? might be 1.0114x slower
   double-to-int32-typed-array-no-inline              3.0890+-0.1032     ?      3.1257+-0.0813        ? might be 1.0119x slower
   double-to-int32-typed-array                        2.4830+-0.0381     ?      2.4949+-0.0804        ?
   double-to-uint32-typed-array-no-inline             3.1748+-0.0890            3.1329+-0.0722          might be 1.0134x faster
   double-to-uint32-typed-array                       2.6480+-0.0427            2.6260+-0.0190        
   empty-string-plus-int                             10.3037+-0.0647     ?     10.4934+-0.1908        ? might be 1.0184x slower
   emscripten-cube2hash                              54.5830+-0.6695     ?     55.7453+-3.4793        ? might be 1.0213x slower
   external-arguments-getbyval                        2.0540+-0.0063     ?      2.0717+-0.0166        ?
   external-arguments-putbyval                        3.0029+-0.0288     ?      3.0055+-0.0263        ?
   fixed-typed-array-storage-var-index                1.5470+-0.0795            1.5250+-0.0253          might be 1.0144x faster
   fixed-typed-array-storage                          1.1222+-0.0122     ?      1.1455+-0.0492        ? might be 1.0208x slower
   Float32Array-matrix-mult                           8.2343+-0.3501            8.1945+-0.3354        
   Float32Array-to-Float64Array-set                  87.7768+-1.7079     ?     89.1653+-1.4118        ? might be 1.0158x slower
   Float64Array-alloc-long-lived                    102.2710+-1.4948          101.8018+-0.6038        
   Float64Array-to-Int16Array-set                   114.2320+-0.7681     ?    114.6808+-0.5430        ?
   fold-double-to-int                                20.1745+-0.3199           20.0468+-0.1923        
   for-of-iterate-array-entries                       9.7022+-0.1376            9.4815+-0.2203          might be 1.0233x faster
   for-of-iterate-array-keys                          3.6357+-0.0798     ?      3.6581+-0.0952        ?
   for-of-iterate-array-values                        3.3033+-0.2071            3.2525+-0.0951          might be 1.0156x faster
   fround                                            24.2799+-0.2525     ?     24.3980+-0.4653        ?
   function-dot-apply                                 1.7457+-0.0130     ?      1.7573+-0.0283        ?
   function-test                                      5.0794+-0.1735            5.0329+-0.0605        
   function-with-eval                                43.6060+-1.6963           43.5748+-1.3587        
   get-by-id-chain-from-try-block                     8.1850+-0.2263            8.1650+-0.2759        
   get-by-id-proto-or-self                           25.3110+-1.8492           24.5718+-0.5706          might be 1.0301x faster
   get-by-id-self-or-proto                           26.2433+-1.5514           24.8328+-0.6605          might be 1.0568x faster
   get-by-val-out-of-bounds                           6.9151+-0.3206     ?      7.0406+-0.1470        ? might be 1.0182x slower
   get_callee_monomorphic                             5.4445+-0.1011     ?      5.4617+-0.0928        ?
   get_callee_polymorphic                             4.9743+-0.0560            4.9473+-0.1023        
   getter                                             7.5754+-0.1113            7.4965+-0.0766          might be 1.0105x faster
   global-var-const-infer-fire-from-opt               1.2644+-0.0767            1.2576+-0.0330        
   global-var-const-infer                             1.0667+-0.0753            1.0448+-0.0170          might be 1.0209x faster
   HashMap-put-get-iterate-keys                      40.5096+-0.8652           39.7905+-0.4765          might be 1.0181x faster
   HashMap-put-get-iterate                           39.3597+-0.2793           39.3303+-0.5803        
   HashMap-string-put-get-iterate                    45.1345+-0.6831     ?     45.6181+-0.4372        ? might be 1.0107x slower
   imul-double-only                                  10.5515+-0.2282     ?     10.9026+-0.7362        ? might be 1.0333x slower
   imul-int-only                                     13.6208+-0.3945           13.5826+-0.1528        
   imul-mixed                                         9.6903+-0.1031     ?     10.1667+-0.6872        ? might be 1.0492x slower
   in-four-cases                                     23.0684+-0.2235           22.6930+-0.2248          might be 1.0165x faster
   in-one-case-false                                 12.7287+-0.2103           12.7166+-0.0481        
   in-one-case-true                                  12.8008+-0.0638           12.7302+-0.1011        
   in-two-cases                                      13.2018+-0.1093           13.1600+-0.0956        
   indexed-properties-in-objects                      4.5079+-0.0856            4.5022+-0.1153        
   infer-closure-const-then-mov-no-inline             5.0676+-0.0421     ?      5.0782+-0.0148        ?
   infer-closure-const-then-mov                      29.1510+-0.0669     ?     29.4385+-0.6469        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.7560+-0.3437           17.5952+-0.0387        
   infer-closure-const-then-put-to-scope             33.4961+-0.4327           33.1643+-0.0678          might be 1.0100x faster
   infer-closure-const-then-reenter-no-inline   
                                                     77.2409+-0.2342           77.1890+-0.1659        
   infer-closure-const-then-reenter                  33.4610+-0.4011     ?     37.2127+-6.3382        ? might be 1.1121x slower
   infer-one-time-closure-ten-vars                   16.3922+-0.1322           16.3694+-0.1358        
   infer-one-time-closure-two-vars                   15.6941+-0.1222     ?     15.7840+-0.2018        ?
   infer-one-time-closure                            15.5685+-0.2210     ?     15.5730+-0.0987        ?
   infer-one-time-deep-closure                       28.2675+-0.1738     ?     28.4586+-0.3574        ?
   inline-arguments-access                            1.6444+-0.0295     ?      1.7155+-0.1245        ? might be 1.0432x slower
   inline-arguments-aliased-access                    1.8289+-0.0650            1.8031+-0.0171          might be 1.0143x faster
   inline-arguments-local-escape                     19.7581+-0.5007           19.7360+-0.3671        
   inline-get-scoped-var                              7.5521+-0.1077     ?      7.5922+-0.0845        ?
   inlined-put-by-id-transition                      15.4963+-0.4271     ?     16.0201+-0.3002        ? might be 1.0338x slower
   int-or-other-abs-then-get-by-val                   9.8164+-0.0803            9.7895+-0.0794        
   int-or-other-abs-zero-then-get-by-val             33.5404+-0.6161           33.4929+-0.2412        
   int-or-other-add-then-get-by-val                  11.0877+-0.0695     ?     11.1717+-0.0920        ?
   int-or-other-add                                  11.0020+-0.0305     ?     11.1131+-0.1666        ? might be 1.0101x slower
   int-or-other-div-then-get-by-val                   6.8377+-0.0551     ?      6.8541+-0.1058        ?
   int-or-other-max-then-get-by-val                   7.9169+-0.1548     ?      8.1359+-0.5495        ? might be 1.0277x slower
   int-or-other-min-then-get-by-val                   7.5809+-0.0860     ?      7.5817+-0.0407        ?
   int-or-other-mod-then-get-by-val                   6.6038+-0.0116     ?      6.6370+-0.0834        ?
   int-or-other-mul-then-get-by-val                   6.8761+-0.0464     ?      6.9412+-0.0706        ?
   int-or-other-neg-then-get-by-val                   8.5790+-0.1083     ?      8.6311+-0.1939        ?
   int-or-other-neg-zero-then-get-by-val             33.9577+-0.2122           33.8481+-0.0609        
   int-or-other-sub-then-get-by-val                  11.5461+-0.1396     ?     11.5468+-0.0539        ?
   int-or-other-sub                                   9.9382+-0.1516            9.9151+-0.0864        
   int-overflow-local                                 6.6544+-0.0664            6.6519+-0.0608        
   Int16Array-alloc-long-lived                       74.1479+-0.7807           73.1340+-0.8934          might be 1.0139x faster
   Int16Array-bubble-sort-with-byteLength            48.4777+-1.0134           48.2369+-0.2939        
   Int16Array-bubble-sort                            47.5313+-0.1708           47.4182+-0.1796        
   Int16Array-load-int-mul                            2.0968+-0.0293     ?      2.1041+-0.0304        ?
   Int16Array-to-Int32Array-set                      88.6609+-1.5779     ?     88.8154+-1.0664        ?
   Int32Array-alloc-large                            44.3022+-1.4194           43.2633+-1.9113          might be 1.0240x faster
   Int32Array-alloc-long-lived                       81.7672+-0.9437           81.7547+-0.5648        
   Int32Array-alloc                                   4.8077+-0.0701            4.7721+-0.1318        
   Int32Array-Int8Array-view-alloc                   15.0806+-0.0489     !     15.5206+-0.3298        ! definitely 1.0292x slower
   int52-spill                                       12.0135+-0.2067     ?     12.1259+-0.1624        ?
   Int8Array-alloc-long-lived                        67.8793+-0.6060           67.7196+-1.0159        
   Int8Array-load-with-byteLength                     5.5367+-0.0862            5.4846+-0.0470        
   Int8Array-load                                     5.5559+-0.0736            5.4939+-0.0581          might be 1.0113x faster
   integer-divide                                    16.8934+-0.1104     ?     16.9394+-0.1017        ?
   integer-modulo                                     3.2019+-0.5093     ?      3.3615+-0.6251        ? might be 1.0498x slower
   large-int-captured                                10.5197+-0.2275     ?     10.7220+-0.2269        ? might be 1.0192x slower
   large-int-neg                                     24.6471+-0.3766           24.2861+-0.4379          might be 1.0149x faster
   large-int                                         21.5225+-0.2429           21.2903+-0.2123          might be 1.0109x faster
   logical-not                                        6.8776+-0.1452     ?      6.9920+-0.1286        ? might be 1.0166x slower
   lots-of-fields                                    14.0198+-0.1852     ?     14.1880+-0.1834        ? might be 1.0120x slower
   make-indexed-storage                               4.5131+-0.1558     ?      4.5777+-0.0976        ? might be 1.0143x slower
   make-rope-cse                                      6.2966+-0.1481     ?      6.4371+-0.3165        ? might be 1.0223x slower
   marsaglia-larger-ints                             59.2677+-0.2892     ?     59.7434+-0.3567        ?
   marsaglia-osr-entry                               31.1832+-0.3329     ?     31.5530+-0.6854        ? might be 1.0119x slower
   method-on-number                                  31.1452+-0.5554           30.9604+-0.4510        
   misc-strict-eq                                    58.5205+-2.2806           55.9806+-0.6744          might be 1.0454x faster
   negative-zero-divide                               0.4526+-0.0035            0.4522+-0.0065        
   negative-zero-modulo                               0.4561+-0.0121            0.4539+-0.0061        
   negative-zero-negate                               0.4170+-0.0010     ?      0.4362+-0.0206        ? might be 1.0461x slower
   nested-function-parsing                           49.2274+-0.3776     ?     49.2649+-0.1735        ?
   new-array-buffer-dead                              4.0252+-0.0747     ?      4.0310+-0.0759        ?
   new-array-buffer-push                             10.9611+-0.2143     ?     11.0247+-0.3392        ?
   new-array-dead                                    14.2517+-0.3055           14.2213+-0.1777        
   new-array-push                                     7.6506+-0.1209     ?      7.7250+-0.0949        ?
   number-test                                        4.7053+-0.0630     ?      4.7058+-0.0573        ?
   object-closure-call                                8.7762+-0.0980     ?      8.8179+-0.1714        ?
   object-test                                        5.0815+-0.2077            4.9014+-0.0618          might be 1.0367x faster
   poly-stricteq                                     82.4983+-0.1684     ?     83.0643+-0.7154        ?
   polymorphic-array-call                             2.2952+-0.0232     ?      2.3699+-0.1491        ? might be 1.0326x slower
   polymorphic-get-by-id                              4.7668+-0.0489     ?      4.7733+-0.0432        ?
   polymorphic-put-by-id                             68.4646+-14.9501    ?     97.9801+-30.5952       ? might be 1.4311x slower
   polymorphic-structure                             30.6978+-0.7016           30.5213+-0.2114        
   polyvariant-monomorphic-get-by-id                 13.4130+-0.1494           13.3973+-0.1811        
   proto-getter-access                               13.2632+-0.5297     ?     13.3724+-0.2673        ?
   put-by-id                                         20.9181+-0.4509     ?     21.0691+-0.4068        ?
   put-by-val-large-index-blank-indexing-type   
                                                     10.8980+-0.1888     ?     10.9673+-0.1398        ?
   put-by-val-machine-int                             4.5601+-0.2307     ?      4.8675+-0.1557        ? might be 1.0674x slower
   rare-osr-exit-on-local                            21.7821+-0.1125           21.5041+-0.2282          might be 1.0129x faster
   register-pressure-from-osr                        31.3279+-0.2581     ?     31.5902+-0.3111        ?
   setter                                            20.3919+-0.0463           20.3894+-0.1465        
   simple-activation-demo                            35.2197+-0.3730     ?     35.4728+-0.3429        ?
   simple-getter-access                              17.2648+-0.3263           17.0821+-0.3085          might be 1.0107x faster
   slow-array-profile-convergence                     4.5045+-0.2835            4.3393+-0.1965          might be 1.0381x faster
   slow-convergence                                   4.7700+-0.0526     ?      4.7861+-0.0743        ?
   sparse-conditional                                 1.5181+-0.0080     ?      1.5276+-0.0049        ?
   splice-to-remove                                  78.6892+-0.3188     ?     78.9272+-0.2438        ?
   string-char-code-at                               25.5967+-0.1174           25.5961+-0.0976        
   string-concat-object                               3.2482+-0.0904     ?      3.2895+-0.0917        ? might be 1.0127x slower
   string-concat-pair-object                          3.1148+-0.0480            3.1123+-0.0283        
   string-concat-pair-simple                         18.8750+-0.2633           18.8033+-0.4201        
   string-concat-simple                              19.0921+-0.3003           19.0136+-0.3792        
   string-cons-repeat                                11.9711+-0.0861     ?     12.0818+-0.1712        ?
   string-cons-tower                                 11.1866+-0.6729           11.0185+-0.1242          might be 1.0153x faster
   string-equality                                   44.2296+-0.2996           44.2172+-0.3182        
   string-get-by-val-big-char                        14.8597+-0.2010     ^     14.1451+-0.0896        ^ definitely 1.0505x faster
   string-get-by-val-out-of-bounds-insane             6.4963+-0.6378            6.2823+-0.0632          might be 1.0341x faster
   string-get-by-val-out-of-bounds                    7.1814+-0.1000     ?      7.1861+-0.1005        ?
   string-get-by-val                                  5.5677+-0.0091            5.5545+-0.0059        
   string-hash                                        3.1042+-0.0442     ?      3.1047+-0.0451        ?
   string-long-ident-equality                        39.9892+-0.9544           39.3463+-0.1359          might be 1.0163x faster
   string-repeat-arith                               47.4873+-0.3796     ?     48.0150+-0.5409        ? might be 1.0111x slower
   string-sub                                        96.3682+-1.5010     ?     96.6788+-1.4193        ?
   string-test                                        4.5493+-0.0528     !      4.7128+-0.0901        ! definitely 1.0359x slower
   string-var-equality                               71.6147+-0.3552     ?     73.0184+-1.7446        ? might be 1.0196x slower
   structure-hoist-over-transitions                   3.9513+-0.1008            3.9327+-0.0269        
   switch-char-constant                               3.6322+-0.0182     ?      3.6571+-0.0458        ?
   switch-char                                        9.2320+-0.0793     ?      9.3035+-0.1236        ?
   switch-constant                                   11.6372+-0.1401     ?     11.8248+-0.1716        ? might be 1.0161x slower
   switch-string-basic-big-var                       25.0465+-1.5643     ?     25.5822+-0.8310        ? might be 1.0214x slower
   switch-string-basic-big                           31.6306+-2.6749           29.3867+-4.6465          might be 1.0764x faster
   switch-string-basic-var                           31.1637+-1.1877           30.9487+-0.5910        
   switch-string-basic                               31.4090+-2.1147     ?     32.4176+-1.8524        ? might be 1.0321x slower
   switch-string-big-length-tower-var                30.1494+-0.2345     ?     30.1779+-0.2600        ?
   switch-string-length-tower-var                    24.1811+-0.3998           24.0538+-0.1162        
   switch-string-length-tower                        17.3984+-0.0766     ?     17.5229+-0.2191        ?
   switch-string-short                               17.5410+-0.1792           17.4399+-0.1283        
   switch                                            16.1087+-0.3870     ?     16.2246+-0.1827        ?
   tear-off-arguments-simple                          2.6045+-0.0537     ?      2.6092+-0.0613        ?
   tear-off-arguments                                 4.0468+-0.1011            3.9710+-0.0267          might be 1.0191x faster
   temporal-structure                                19.3706+-0.1459           19.2605+-0.2632        
   to-int32-boolean                                  24.1540+-0.1033     ?     24.2052+-0.0750        ?
   undefined-test                                     4.8934+-0.0556     ?      4.9570+-0.1202        ? might be 1.0130x slower
   unprofiled-licm                                   30.7761+-0.4474           30.5203+-0.5652        
   weird-inlining-const-prop                          2.7337+-0.1291            2.7109+-0.1413        

   &lt;arithmetic&gt;                                      22.6385+-0.0804     ?     22.7941+-0.1558        ? might be 1.0069x slower
   &lt;geometric&gt; *                                     11.6269+-0.0265     ?     11.6693+-0.0284        ? might be 1.0036x slower
   &lt;harmonic&gt;                                         5.4418+-0.0144     ?      5.4695+-0.0235        ? might be 1.0051x slower

                                                        TipOfTree              MoreWatchpoints                                  
AsmBench:
   bigfib.cpp                                       818.1274+-5.0017     ?    819.1523+-4.4294        ?
   cray.c                                           799.0123+-5.3850          797.0378+-1.6730        
   dry.c                                            841.9770+-42.5950         792.7522+-46.0816         might be 1.0621x faster
   FloatMM.c                                       1110.8728+-1.9055     ?   1111.5527+-2.2410        ?
   gcc-loops.cpp                                   7555.2723+-47.2615    ^   7484.3604+-15.7308       ^ definitely 1.0095x faster
   n-body.c                                        2071.9841+-6.4904         2048.4736+-20.7510         might be 1.0115x faster
   Quicksort.c                                      687.8965+-7.6058     ?    690.5671+-0.6573        ?
   stepanov_container.cpp                          5831.6206+-20.4313    ?   5851.4619+-81.5362       ?
   Towers.c                                         502.5197+-2.5154     ^    496.1133+-1.6814        ^ definitely 1.0129x faster

   &lt;arithmetic&gt;                                    2246.5870+-5.2677         2232.3857+-12.4340         might be 1.0064x faster
   &lt;geometric&gt; *                                   1389.2427+-7.2557         1375.8130+-11.3310         might be 1.0098x faster
   &lt;harmonic&gt;                                      1023.4015+-6.9354         1011.7254+-9.3500          might be 1.0115x faster

                                                        TipOfTree              MoreWatchpoints                                  
All benchmarks:
   &lt;arithmetic&gt;                                     179.6936+-0.3655     ?    180.1186+-0.3457        ? might be 1.0024x slower
   &lt;geometric&gt;                                       20.1321+-0.0411     ?     20.1889+-0.0373        ? might be 1.0028x slower
   &lt;harmonic&gt;                                         4.8402+-0.0219     ?      4.8477+-0.0262        ? might be 1.0015x slower

                                                        TipOfTree              MoreWatchpoints                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                   80.9745+-0.2792     ?     81.0814+-0.1969        ? might be 1.0013x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011134</commentid>
    <comment_count>3</comment_count>
      <attachid>231935</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-22 20:23:33 -0700</bug_when>
    <thetext>Created attachment 231935
starting to look sensible</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1011347</commentid>
    <comment_count>4</comment_count>
      <attachid>231983</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-23 14:01:30 -0700</bug_when>
    <thetext>Created attachment 231983
more!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012343</commentid>
    <comment_count>5</comment_count>
      <attachid>232228</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-28 19:03:31 -0700</bug_when>
    <thetext>Created attachment 232228
a bit more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012352</commentid>
    <comment_count>6</comment_count>
      <attachid>232232</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-28 20:45:04 -0700</bug_when>
    <thetext>Created attachment 232232
crashes on launch

But at least it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012503</commentid>
    <comment_count>7</comment_count>
      <attachid>232264</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-29 15:09:22 -0700</bug_when>
    <thetext>Created attachment 232264
starting to work

In the quadmorphic example, it eliminates all structure checks because it realizes that the variable can point to one of four objects and all of them have the field we want at the same offset.  Cool!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012525</commentid>
    <comment_count>8</comment_count>
      <attachid>232270</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-29 16:39:52 -0700</bug_when>
    <thetext>Created attachment 232270
now it only fails thousands of tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012573</commentid>
    <comment_count>9</comment_count>
      <attachid>232281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-29 23:06:19 -0700</bug_when>
    <thetext>Created attachment 232281
less then a hundred failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012680</commentid>
    <comment_count>10</comment_count>
      <attachid>232304</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-05-30 14:35:35 -0700</bug_when>
    <thetext>Created attachment 232304
using a slightly more complicated approach

I&apos;m going to fix https://bugs.webkit.org/show_bug.cgi?id=133398 as part of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012839</commentid>
    <comment_count>11</comment_count>
      <attachid>232349</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-01 10:50:25 -0700</bug_when>
    <thetext>Created attachment 232349
almost done

It turns out that AI for MultiPutByOffset was totally busted.  I&apos;m fixing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1012840</commentid>
    <comment_count>12</comment_count>
      <attachid>232350</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-01 11:36:46 -0700</bug_when>
    <thetext>Created attachment 232350
almoster doner</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013035</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-02 16:57:24 -0700</bug_when>
    <thetext>Two things left to do, as far as I can tell:

- Make the abstract interpreter track whether our current state is &quot;clobbered&quot; or &quot;valid&quot;.  We&apos;re valid by default and become clobbered at any instruction that affects structure transition watchpoints.  We become valid again at an invalidation point.  New constants introduced while we&apos;re clobbered should have their structure sets clobbered.

- Make the FTL backend robust against the AI become more precise, for example because a constant transitioned to a new structure and that structure contradicts checks we&apos;ve already emitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013047</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-02 18:17:44 -0700</bug_when>
    <thetext>Also, we should convert uses of transitionWatchpointSetIsStillValid() into dfgShouldWatch(), which refuses to watch dictionaries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013051</commentid>
    <comment_count>15</comment_count>
      <attachid>232413</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-02 20:19:22 -0700</bug_when>
    <thetext>Created attachment 232413
basically works

It doesn&apos;t appear to be a regression on anything we care about, which is basically all I was hoping for with this change.  There do appear to be some opportunities to reduce the effects of this on SunSpider and JSRegress.  I believe that we&apos;re just getting hit by compile times on those benchmarks.


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

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

Collected 6 samples per benchmark/VM, with 6 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                  BigSets                                      
SunSpider:
   3d-cube                                            7.7753+-0.1781     ?      7.8299+-0.2433        ?
   3d-morph                                           9.4253+-0.0941            9.4149+-0.0919        
   3d-raytrace                                        9.8794+-0.1554     ?     10.0020+-0.2272        ? might be 1.0124x slower
   access-binary-trees                                2.8346+-0.1051            2.7673+-0.0954          might be 1.0243x faster
   access-fannkuch                                    9.2872+-0.1890     ?      9.2996+-0.1395        ?
   access-nbody                                       4.7028+-0.0186     ?      4.7164+-0.0909        ?
   access-nsieve                                      5.5726+-0.1068            5.5328+-0.1197        
   bitops-3bit-bits-in-byte                           1.8632+-0.0159     ?      1.8786+-0.0128        ?
   bitops-bits-in-byte                                6.5753+-0.1886     ?      6.6090+-0.2209        ?
   bitops-bitwise-and                                 3.1583+-0.0892     ?      3.2153+-0.0593        ? might be 1.0181x slower
   bitops-nsieve-bits                                 5.7968+-0.0336     ?      5.8070+-0.0779        ?
   controlflow-recursive                              2.9232+-0.0921            2.9199+-0.0979        
   crypto-aes                                         6.2570+-0.0817     ?      6.3948+-0.1602        ? might be 1.0220x slower
   crypto-md5                                         3.6345+-0.1306            3.4263+-0.0803          might be 1.0608x faster
   crypto-sha1                                        3.7146+-0.1349     ?      3.7371+-0.1313        ?
   date-format-tofte                                 13.2209+-0.1700     ?     13.3746+-0.2641        ? might be 1.0116x slower
   date-format-xparb                                  9.8283+-0.1877     ?     10.1872+-0.2977        ? might be 1.0365x slower
   math-cordic                                        4.7172+-0.0329            4.7015+-0.0168        
   math-partial-sums                                 10.5381+-0.0969           10.5341+-0.1619        
   math-spectral-norm                                 3.0562+-0.0387     ?      3.0576+-0.0287        ?
   regexp-dna                                        11.8872+-0.1811     ?     11.9934+-0.1161        ?
   string-base64                                      6.3839+-0.0716     ?      6.4011+-0.1083        ?
   string-fasta                                      10.2702+-0.2018           10.1937+-0.1540        
   string-tagcloud                                   15.7653+-0.2020     ?     16.0267+-0.1243        ? might be 1.0166x slower
   string-unpack-code                                32.4095+-0.1854     !     33.6371+-0.3951        ! definitely 1.0379x slower
   string-validate-input                              7.7344+-0.2497     ?      7.7383+-0.0816        ?

   &lt;arithmetic&gt; *                                     8.0466+-0.0370     !      8.1306+-0.0385        ! definitely 1.0104x slower
   &lt;geometric&gt;                                        6.5511+-0.0362     ?      6.5748+-0.0194        ? might be 1.0036x slower
   &lt;harmonic&gt;                                         5.4306+-0.0327            5.4290+-0.0127          might be 1.0003x faster

                                                        TipOfTree                  BigSets                                      
LongSpider:
   3d-cube                                         1382.6227+-13.1741    ?   1397.3690+-26.8914       ? might be 1.0107x slower
   3d-morph                                        2286.1527+-2.9878         2277.8416+-11.6817       
   3d-raytrace                                     1457.0853+-13.9387    ?   1464.1174+-11.6962       ?
   access-binary-trees                             1680.4635+-6.3164     ^   1657.2703+-7.0905        ^ definitely 1.0140x faster
   access-fannkuch                                  519.7079+-19.7181         518.0140+-19.1024       
   access-nbody                                    1250.1082+-6.9376     !   1264.4066+-6.0683        ! definitely 1.0114x slower
   access-nsieve                                   1627.3814+-6.1687     ?   1629.3693+-12.1729       ?
   bitops-3bit-bits-in-byte                          59.4247+-0.3956     ?     59.6086+-0.6038        ?
   bitops-bits-in-byte                              397.5146+-5.3163     ?    398.9239+-9.7011        ?
   bitops-nsieve-bits                              1178.8156+-3.5084         1178.4617+-3.1543        
   controlflow-recursive                            878.3545+-1.2668     ^    867.1393+-0.7614        ^ definitely 1.0129x faster
   crypto-aes                                      1140.8805+-3.3996     ?   1141.9679+-3.9428        ?
   crypto-md5                                      1080.2677+-2.4448     !   1088.8383+-4.4293        ! definitely 1.0079x slower
   crypto-sha1                                     1191.4772+-7.2704     ?   1200.9441+-9.3170        ?
   date-format-tofte                               1181.5614+-17.9773    ?   1198.7513+-28.2021       ? might be 1.0145x slower
   date-format-xparb                               1675.9474+-51.7237        1675.1822+-13.3581       
   math-cordic                                      843.4293+-6.2157          838.3862+-1.1058        
   math-partial-sums                               1329.9974+-27.6891    ?   1332.1711+-5.1968        ?
   math-spectral-norm                              1296.6384+-1.9348     ?   1301.0095+-13.3373       ?
   string-base64                                    601.0402+-2.9884          599.1828+-2.6395        
   string-fasta                                     922.5584+-15.7978    ?    927.2976+-17.9817       ?
   string-tagcloud                                  397.7267+-4.3388     ?    400.6536+-2.9687        ?

   &lt;arithmetic&gt;                                    1108.1434+-3.0141     ?   1109.8594+-2.0046        ? might be 1.0015x slower
   &lt;geometric&gt; *                                    926.4895+-2.5047     ?    928.1698+-2.2433        ? might be 1.0018x slower
   &lt;harmonic&gt;                                       561.6440+-1.2295     ?    562.9653+-2.8997        ? might be 1.0024x slower

                                                        TipOfTree                  BigSets                                      
V8Spider:
   crypto                                            85.0902+-1.1393     ?     85.1495+-0.6560        ?
   deltablue                                        101.9537+-0.7946     ?    105.0560+-5.9800        ? might be 1.0304x slower
   earley-boyer                                      70.6561+-0.5646     !     71.9822+-0.6480        ! definitely 1.0188x slower
   raytrace                                          44.1021+-0.5614     !     46.6855+-0.2737        ! definitely 1.0586x slower
   regexp                                           106.0486+-0.7262          105.4491+-0.3676        
   richards                                         105.0144+-1.2623     ?    106.8607+-1.0600        ? might be 1.0176x slower
   splay                                             50.1980+-0.5172     ?     50.7738+-1.4567        ? might be 1.0115x slower

   &lt;arithmetic&gt;                                      80.4376+-0.3166     !     81.7081+-0.8822        ! definitely 1.0158x slower
   &lt;geometric&gt; *                                     76.3389+-0.2942     !     77.7501+-0.6690        ! definitely 1.0185x slower
   &lt;harmonic&gt;                                        71.9655+-0.2969     !     73.5724+-0.5299        ! definitely 1.0223x slower

                                                        TipOfTree                  BigSets                                      
Octane and V8v7:
   encrypt                                           0.44447+-0.00161          0.44259+-0.00366       
   decrypt                                           8.10327+-0.08918          8.05332+-0.07556       
   deltablue                                x2       0.44338+-0.00203    ?     0.44564+-0.00534       ?
   earley                                            0.95113+-0.00612    ?     0.95475+-0.00885       ?
   boyer                                            10.76136+-0.04234         10.63924+-0.12668         might be 1.0115x faster
   navier-stokes                            x2       7.74212+-0.03295          7.74188+-0.00286       
   raytrace                                 x2       2.87277+-0.03016    ?     2.92832+-0.05166       ? might be 1.0193x slower
   regexp                                   x2      33.13449+-0.18989    ?    33.23515+-0.32820       ?
   richards                                 x2       0.23114+-0.01077          0.22722+-0.00280         might be 1.0172x faster
   splay                                    x2       0.64505+-0.00629          0.63641+-0.00810         might be 1.0136x faster
   pdfjs                                    x2      93.88723+-0.27887    !    96.30375+-0.43364       ! definitely 1.0257x slower
   mandreel                                 x2      99.33370+-1.36395    !   102.60518+-0.69602       ! definitely 1.0329x slower
   gbemu                                    x2      87.10547+-1.01810    ^    84.07424+-0.46115       ^ definitely 1.0361x faster
   closure                                           0.88921+-0.00225    !     0.89629+-0.00370       ! definitely 1.0080x slower
   jquery                                           10.89807+-0.03317    !    11.02353+-0.04764       ! definitely 1.0115x slower
   box2d                                    x2      28.74254+-0.91304    ^    27.31876+-0.45933       ^ definitely 1.0521x faster
   zlib                                     x2     803.03984+-2.65376    !   857.73347+-1.71022       ! definitely 1.0681x slower
   typescript                               x2    1251.62419+-4.26602    ?  1265.14954+-9.28190       ? might be 1.0108x slower

V8v7:
   &lt;arithmetic&gt;                                      6.89988+-0.02058    ?     6.90745+-0.04615       ? might be 1.0011x slower
   &lt;geometric&gt; *                                     2.03622+-0.01025          2.03322+-0.00958         might be 1.0015x faster
   &lt;harmonic&gt;                                        0.76901+-0.01396          0.76334+-0.00538         might be 1.0074x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                    161.65504+-0.42141    !   166.29363+-0.58819       ! definitely 1.0287x slower
   &lt;geometric&gt; *                                    12.27262+-0.05906    ?    12.31063+-0.02855       ? might be 1.0031x slower
   &lt;harmonic&gt;                                        1.35374+-0.02309          1.34480+-0.00876         might be 1.0067x faster

                                                        TipOfTree                  BigSets                                      
Kraken:
   ai-astar                                          528.543+-1.029      ?     529.102+-1.681         ?
   audio-beat-detection                              200.451+-1.934      ?     204.646+-3.129         ? might be 1.0209x slower
   audio-dft                                         263.205+-2.007            261.964+-4.323         
   audio-fft                                         114.335+-0.197      !     121.888+-1.158         ! definitely 1.0661x slower
   audio-oscillator                                  381.506+-7.248      ^     373.069+-0.573         ^ definitely 1.0226x faster
   imaging-darkroom                                  295.425+-1.754      ?     298.930+-7.529         ? might be 1.0119x slower
   imaging-desaturate                                122.175+-0.378      !     124.179+-0.278         ! definitely 1.0164x slower
   imaging-gaussian-blur                             181.351+-8.082            178.821+-0.279           might be 1.0142x faster
   json-parse-financial                               82.163+-0.469      !      83.913+-0.473         ! definitely 1.0213x slower
   json-stringify-tinderbox                          102.741+-1.622      ?     103.798+-3.596         ? might be 1.0103x slower
   stanford-crypto-aes                                94.010+-2.459      ?      94.151+-3.179         ?
   stanford-crypto-ccm                                97.559+-12.788     ?      98.872+-12.009        ? might be 1.0135x slower
   stanford-crypto-pbkdf2                            244.976+-5.852      ?     248.728+-6.559         ? might be 1.0153x slower
   stanford-crypto-sha256-iterative                  111.311+-1.439            110.867+-2.503         

   &lt;arithmetic&gt; *                                    201.411+-1.075      ?     202.352+-1.192         ? might be 1.0047x slower
   &lt;geometric&gt;                                       169.881+-1.418      ?     171.476+-1.507         ? might be 1.0094x slower
   &lt;harmonic&gt;                                        147.150+-2.007      ?     149.040+-1.849         ? might be 1.0128x slower

                                                        TipOfTree                  BigSets                                      
JSRegress:
   abs-boolean                                       24.2047+-0.2798     ?     24.6338+-0.6343        ? might be 1.0177x slower
   adapt-to-double-divide                            19.8609+-0.2631     ?     20.2351+-0.3608        ? might be 1.0188x slower
   aliased-arguments-getbyval                         1.1323+-0.0073     ?      1.1358+-0.0163        ?
   allocate-big-object                                3.6776+-0.0905     ?      3.7087+-0.1944        ?
   arity-mismatch-inlining                            1.0141+-0.0064     ?      1.0459+-0.0321        ? might be 1.0314x slower
   array-access-polymorphic-structure                10.8029+-0.1185     ?     10.8637+-0.0665        ?
   array-nonarray-polymorhpic-access                 63.0277+-0.2696     ?     63.5662+-0.9630        ?
   array-prototype-every                            123.8875+-0.5850          122.1482+-1.5397          might be 1.0142x faster
   array-prototype-forEach                          121.9103+-0.2426     ?    122.0203+-2.9471        ?
   array-prototype-map                              148.8099+-2.0023          146.5709+-0.9322          might be 1.0153x faster
   array-prototype-some                             124.7983+-1.3295     ^    120.8228+-1.6915        ^ definitely 1.0329x faster
   array-splice-contiguous                          125.8057+-8.5855     ?    125.9599+-9.7902        ?
   array-with-double-add                              6.8195+-0.0819     ?      6.8392+-0.0965        ?
   array-with-double-increment                        4.7582+-0.0768            4.7530+-0.0864        
   array-with-double-mul-add                          7.7841+-0.1143            7.7735+-0.0670        
   array-with-double-sum                              5.0301+-0.0707     ?      5.0673+-0.0819        ?
   array-with-int32-add-sub                          12.1351+-0.2754           11.8594+-0.1278          might be 1.0233x faster
   array-with-int32-or-double-sum                     5.1566+-0.0720            5.1490+-0.0765        
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    115.4014+-1.7875     ?    115.9180+-0.7010        ?
   ArrayBuffer-DataView-alloc-long-lived             32.4842+-1.0927     ?     33.1648+-0.3614        ? might be 1.0210x slower
   ArrayBuffer-Int32Array-byteOffset                  5.2930+-0.0811            5.2780+-0.0176        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    120.0850+-1.4247     ?    122.0804+-1.1859        ? might be 1.0166x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     50.9678+-0.5532     !     53.9848+-1.0396        ! definitely 1.0592x slower
   ArrayBuffer-Int8Array-alloc-long-lived            31.2546+-0.3130     !     33.7594+-0.7155        ! definitely 1.0801x slower
   ArrayBuffer-Int8Array-alloc                       27.3053+-0.1867     !     29.9793+-0.8005        ! definitely 1.0979x slower
   asmjs_bool_bug                                     9.9059+-0.1278     !     10.2899+-0.1359        ! definitely 1.0388x slower
   assign-custom-setter-polymorphic                   4.7870+-0.0450            4.7758+-0.0609        
   assign-custom-setter                               6.7126+-0.0599     ?      6.7207+-0.0651        ?
   basic-set                                         16.1139+-0.2932           15.8476+-0.1795          might be 1.0168x faster
   big-int-mul                                        6.3922+-0.0984            6.3849+-0.1242        
   boolean-test                                       4.7839+-0.0735     ?      4.8141+-0.0722        ?
   branch-fold                                        5.2828+-0.0909            5.2808+-0.0513        
   by-val-generic                                    14.2164+-0.2624     ?     14.2278+-0.4280        ?
   call-spread-apply                                 21.4137+-0.5961           20.7463+-0.1317          might be 1.0322x faster
   call-spread-call                                   9.1325+-0.1823            8.9773+-0.2167          might be 1.0173x faster
   captured-assignments                               0.5686+-0.0069            0.5645+-0.0046        
   cast-int-to-double                                12.8130+-0.1125     ?     12.9089+-0.2218        ?
   cell-argument                                     11.0360+-0.1910           10.9884+-0.1658        
   cfg-simplify                                       4.1608+-0.0355     ?      4.1998+-0.0569        ?
   chain-getter-access                               13.2213+-0.2400     ?     13.2985+-0.3058        ?
   cmpeq-obj-to-obj-other                            13.3061+-0.2166     ?     13.7000+-0.7900        ? might be 1.0296x slower
   constant-test                                      8.8868+-0.1093            8.8713+-0.1556        
   DataView-custom-properties                       123.6600+-0.9483     ?    124.8651+-0.6209        ?
   delay-tear-off-arguments-strictmode                3.6818+-0.0191     ?      3.7555+-0.1148        ? might be 1.0200x slower
   destructuring-arguments                            8.9878+-0.0976     ?      9.0378+-0.1605        ?
   destructuring-swap                                 8.9653+-0.0988     ?      8.9729+-0.0930        ?
   direct-arguments-getbyval                          1.1149+-0.0139     ?      1.1734+-0.0885        ? might be 1.0525x slower
   div-boolean-double                                22.8300+-1.2688           22.8261+-0.9473        
   div-boolean                                       23.9832+-1.2816           23.2281+-0.9023          might be 1.0325x faster
   double-get-by-val-out-of-bounds                    6.7007+-0.1069     ?      6.8245+-0.3028        ? might be 1.0185x slower
   double-pollution-getbyval                         11.4920+-0.1544           11.3292+-0.1212          might be 1.0144x faster
   double-pollution-putbyoffset                       6.2142+-0.1233            6.1781+-0.0845        
   double-to-int32-typed-array-no-inline              3.1379+-0.1243            3.0723+-0.0436          might be 1.0214x faster
   double-to-int32-typed-array                        2.5092+-0.0560     ?      2.5513+-0.0860        ? might be 1.0168x slower
   double-to-uint32-typed-array-no-inline             3.2657+-0.1063            3.1624+-0.0964          might be 1.0327x faster
   double-to-uint32-typed-array                       2.6460+-0.0607     ?      2.7254+-0.0885        ? might be 1.0300x slower
   empty-string-plus-int                             10.2695+-0.1125     ?     10.6130+-0.3169        ? might be 1.0334x slower
   emscripten-cube2hash                              55.2334+-0.5508     ^     54.1699+-0.4404        ^ definitely 1.0196x faster
   external-arguments-getbyval                        2.0703+-0.0202     ?      2.0718+-0.0150        ?
   external-arguments-putbyval                        3.0388+-0.0676            2.9932+-0.0198          might be 1.0152x faster
   fixed-typed-array-storage-var-index                1.5413+-0.0330     ?      1.5855+-0.0895        ? might be 1.0287x slower
   fixed-typed-array-storage                          1.1119+-0.0057     ?      1.1286+-0.0175        ? might be 1.0151x slower
   Float32Array-matrix-mult                           8.4384+-0.3189            8.1210+-0.3789          might be 1.0391x faster
   Float32Array-to-Float64Array-set                  87.7498+-1.3153           87.0756+-0.1769        
   Float64Array-alloc-long-lived                    102.4223+-0.7615          102.1812+-0.7907        
   Float64Array-to-Int16Array-set                   114.8465+-0.7760     !    118.3255+-2.2514        ! definitely 1.0303x slower
   fold-double-to-int                                20.1337+-0.3308     !     20.8423+-0.1907        ! definitely 1.0352x slower
   for-of-iterate-array-entries                       9.6591+-0.1798     !     10.8315+-0.4439        ! definitely 1.1214x slower
   for-of-iterate-array-keys                          3.6333+-0.0697     ?      3.6580+-0.1487        ?
   for-of-iterate-array-values                        3.3472+-0.0782     ^      3.2220+-0.0285        ^ definitely 1.0388x faster
   fround                                            24.2314+-0.4272           24.2168+-0.3557        
   function-dot-apply                                 1.7493+-0.0111     !      1.8031+-0.0108        ! definitely 1.0308x slower
   function-test                                      5.0334+-0.0559            5.0252+-0.0223        
   function-with-eval                                43.1102+-1.1207     ?     43.9114+-1.2529        ? might be 1.0186x slower
   get-by-id-chain-from-try-block                     8.2206+-0.2461     ?      8.3318+-0.1847        ? might be 1.0135x slower
   get-by-id-proto-or-self                           24.9804+-1.3890     ?     25.9299+-2.9596        ? might be 1.0380x slower
   get-by-id-self-or-proto                           25.0569+-0.9110     ?     26.2771+-2.0209        ? might be 1.0487x slower
   get-by-val-out-of-bounds                           6.8553+-0.2060     !      7.4429+-0.0868        ! definitely 1.0857x slower
   get_callee_monomorphic                             5.4957+-0.1542            5.4268+-0.0801          might be 1.0127x faster
   get_callee_polymorphic                             4.9063+-0.0957     ?      5.0475+-0.0487        ? might be 1.0288x slower
   getter                                             7.5241+-0.0206            7.5040+-0.0941        
   global-var-const-infer-fire-from-opt               1.2181+-0.0312     ?      1.2492+-0.0132        ? might be 1.0256x slower
   global-var-const-infer                             1.0479+-0.0262     ?      1.0604+-0.0325        ? might be 1.0119x slower
   HashMap-put-get-iterate-keys                      40.0907+-1.0253           39.9911+-1.1276        
   HashMap-put-get-iterate                           39.5532+-0.3664           39.5203+-0.6712        
   HashMap-string-put-get-iterate                    45.1247+-0.6477     ?     45.7402+-0.6858        ? might be 1.0136x slower
   imul-double-only                                  10.5492+-0.2696     ?     10.5591+-0.1627        ?
   imul-int-only                                     13.7525+-0.5166     ?     13.8094+-0.2636        ?
   imul-mixed                                         9.8007+-0.4922            9.7625+-0.4779        
   in-four-cases                                     22.6285+-0.2273     ?     22.6324+-0.0881        ?
   in-one-case-false                                 12.7960+-0.1070           12.7957+-0.0733        
   in-one-case-true                                  12.6993+-0.1577     ?     12.7461+-0.1417        ?
   in-two-cases                                      13.1036+-0.0935     ?     13.1713+-0.1736        ?
   indexed-properties-in-objects                      4.4451+-0.0578     ?      4.4475+-0.0709        ?
   infer-closure-const-then-mov-no-inline             5.0586+-0.0275     ?      5.0935+-0.0438        ?
   infer-closure-const-then-mov                      29.2172+-0.1192     ?     29.2395+-0.1043        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.5379+-0.0602     ?     17.5567+-0.1494        ?
   infer-closure-const-then-put-to-scope             33.5118+-0.7321           33.3665+-0.2598        
   infer-closure-const-then-reenter-no-inline   
                                                     77.4146+-0.8241           77.1143+-0.1751        
   infer-closure-const-then-reenter                  33.1597+-0.1118     ?     33.3822+-0.1726        ?
   infer-one-time-closure-ten-vars                   16.3491+-0.2501           16.2799+-0.1566        
   infer-one-time-closure-two-vars                   15.8546+-0.3679     ?     16.0114+-0.4462        ?
   infer-one-time-closure                            15.6579+-0.0732           15.5750+-0.0803        
   infer-one-time-deep-closure                       28.0892+-0.2340     ?     28.3201+-0.1152        ?
   inline-arguments-access                            1.6376+-0.0064     !      1.7130+-0.0396        ! definitely 1.0461x slower
   inline-arguments-aliased-access                    1.8551+-0.1014     ?      1.9308+-0.1272        ? might be 1.0408x slower
   inline-arguments-local-escape                     19.8119+-0.5506           19.7011+-0.4428        
   inline-get-scoped-var                              7.5792+-0.0665     ?      7.6732+-0.1168        ? might be 1.0124x slower
   inlined-put-by-id-transition                      15.8801+-0.2187           15.5673+-0.4229          might be 1.0201x faster
   int-or-other-abs-then-get-by-val                   9.7722+-0.1789     ?      9.8103+-0.1210        ?
   int-or-other-abs-zero-then-get-by-val             33.3165+-0.3797     ?     33.6660+-0.8408        ? might be 1.0105x slower
   int-or-other-add-then-get-by-val                  11.1344+-0.1027     ^     10.8320+-0.1828        ^ definitely 1.0279x faster
   int-or-other-add                                  11.0941+-0.1102     ?     11.1685+-0.1024        ?
   int-or-other-div-then-get-by-val                   6.8220+-0.0746     ?      6.8840+-0.1166        ?
   int-or-other-max-then-get-by-val                   7.8767+-0.1061            7.8080+-0.1283        
   int-or-other-min-then-get-by-val                   7.6070+-0.1074     ?      7.7016+-0.0776        ? might be 1.0124x slower
   int-or-other-mod-then-get-by-val                   6.5827+-0.0364     ^      6.4602+-0.0637        ^ definitely 1.0190x faster
   int-or-other-mul-then-get-by-val                   6.8805+-0.0353            6.7856+-0.0891          might be 1.0140x faster
   int-or-other-neg-then-get-by-val                   8.5424+-0.0688     ?      8.6942+-0.1489        ? might be 1.0178x slower
   int-or-other-neg-zero-then-get-by-val             33.7461+-0.1353     ?     34.1365+-0.7230        ? might be 1.0116x slower
   int-or-other-sub-then-get-by-val                  11.5885+-0.1368     ^     11.1006+-0.0594        ^ definitely 1.0439x faster
   int-or-other-sub                                   9.8581+-0.1036            9.8132+-0.0804        
   int-overflow-local                                 6.6994+-0.1110            6.6983+-0.1184        
   Int16Array-alloc-long-lived                       73.6001+-0.3944     ?     74.5023+-1.0732        ? might be 1.0123x slower
   Int16Array-bubble-sort-with-byteLength            48.1125+-0.1481     ^     42.5845+-0.1550        ^ definitely 1.1298x faster
   Int16Array-bubble-sort                            47.4700+-0.4847     ^     43.0763+-0.8362        ^ definitely 1.1020x faster
   Int16Array-load-int-mul                            2.0966+-0.0271     ?      2.1476+-0.0901        ? might be 1.0243x slower
   Int16Array-to-Int32Array-set                      88.1325+-0.7270     ?     89.7996+-1.9357        ? might be 1.0189x slower
   Int32Array-alloc-large                            44.4193+-0.9656           44.2158+-0.9374        
   Int32Array-alloc-long-lived                       81.6533+-0.7804     ?     82.6288+-1.4272        ? might be 1.0119x slower
   Int32Array-alloc                                   4.8962+-0.0408            4.8408+-0.2080          might be 1.0114x faster
   Int32Array-Int8Array-view-alloc                   15.1326+-0.1121     ?     15.4193+-0.3303        ? might be 1.0189x slower
   int52-spill                                       11.9222+-0.1642     !     12.2795+-0.1285        ! definitely 1.0300x slower
   Int8Array-alloc-long-lived                        67.6232+-0.8457           67.0676+-0.5859        
   Int8Array-load-with-byteLength                     5.5192+-0.0928            5.4659+-0.0125        
   Int8Array-load                                     5.5225+-0.0863     ?      5.5381+-0.0779        ?
   integer-divide                                    16.8510+-0.0711     ?     17.0325+-0.3428        ? might be 1.0108x slower
   integer-modulo                                     3.3217+-0.3143            3.2421+-0.2554          might be 1.0245x faster
   large-int-captured                                10.6928+-0.2710           10.4348+-0.2660          might be 1.0247x faster
   large-int-neg                                     24.7210+-0.5926           24.2422+-0.1270          might be 1.0198x faster
   large-int                                         21.4163+-0.2440           21.3907+-0.3389        
   logical-not                                        6.8198+-0.1954     ?      6.8717+-0.1042        ?
   lots-of-fields                                    14.0646+-0.1394           13.9315+-0.1309        
   make-indexed-storage                               4.4869+-0.2079     ?      4.7217+-0.1195        ? might be 1.0523x slower
   make-rope-cse                                      6.2628+-0.0644     ?      6.4443+-0.2078        ? might be 1.0290x slower
   marsaglia-larger-ints                             59.6656+-0.9943     ?     59.8340+-0.2484        ?
   marsaglia-osr-entry                               31.1192+-0.6032     ?     31.3838+-0.5770        ?
   max-boolean                                       32.5253+-0.1758     ?     32.7653+-0.4797        ?
   method-on-number                                  31.1770+-0.8347           30.7478+-0.3881          might be 1.0140x faster
   min-boolean                                       32.7979+-0.4853     ?     33.0782+-0.4831        ?
   minus-boolean-double                              22.6000+-1.5768           21.7010+-0.0690          might be 1.0414x faster
   minus-boolean                                     23.1637+-0.7216           23.0166+-0.1687        
   misc-strict-eq                                    57.7670+-0.4896     ^     56.0473+-1.0501        ^ definitely 1.0307x faster
   mod-boolean-double                                31.8084+-0.8248           30.8370+-1.8928          might be 1.0315x faster
   mod-boolean                                       54.1657+-0.1177           54.1266+-0.7643        
   mul-boolean-double                                22.9146+-0.5423     ?     23.2488+-1.1369        ? might be 1.0146x slower
   mul-boolean                                       24.6417+-2.6038           23.0713+-0.5526          might be 1.0681x faster
   neg-boolean                                       23.2775+-0.9192     ?     24.2878+-1.3947        ? might be 1.0434x slower
   negative-zero-divide                               0.4502+-0.0042     ?      0.4526+-0.0017        ?
   negative-zero-modulo                               0.4489+-0.0032     ?      0.4545+-0.0025        ? might be 1.0126x slower
   negative-zero-negate                               0.4229+-0.0147     ?      0.4295+-0.0128        ? might be 1.0157x slower
   nested-function-parsing                           49.3872+-0.3304     ?     49.7751+-0.5752        ?
   new-array-buffer-dead                              4.0229+-0.0641     ?      4.0596+-0.0872        ?
   new-array-buffer-push                             10.7667+-0.1644     ?     10.8218+-0.2124        ?
   new-array-dead                                    14.0717+-0.2367     ?     14.2829+-0.3984        ? might be 1.0150x slower
   new-array-push                                     7.6546+-0.0848            7.5574+-0.2280          might be 1.0129x faster
   number-test                                        4.6629+-0.0501     ?      4.6762+-0.0401        ?
   object-closure-call                                8.8006+-0.1997     ?      8.8033+-0.0621        ?
   object-test                                        5.1234+-0.0820     ^      4.9044+-0.0504        ^ definitely 1.0447x faster
   plus-boolean-arith                                22.5326+-1.1877     ?     22.5487+-1.2176        ?
   plus-boolean-double                               24.8311+-0.9513           24.5515+-0.0730          might be 1.0114x faster
   plus-boolean                                      23.9853+-0.1655     ?     24.5325+-0.7293        ? might be 1.0228x slower
   poly-stricteq                                     83.3709+-2.5517           82.5115+-0.2169          might be 1.0104x faster
   polymorphic-array-call                             2.3148+-0.0433     ?      2.3155+-0.0310        ?
   polymorphic-get-by-id                              4.7876+-0.0580            4.7581+-0.0144        
   polymorphic-put-by-id                            116.8333+-39.5689         106.3998+-32.1270         might be 1.0981x faster
   polymorphic-structure                             30.2976+-0.0999     ?     30.6440+-0.3608        ? might be 1.0114x slower
   polyvariant-monomorphic-get-by-id                 13.4202+-0.2724     ?     13.4594+-0.0745        ?
   proto-getter-access                               13.0552+-0.2453     ?     13.2380+-0.1806        ? might be 1.0140x slower
   put-by-id                                         20.8852+-0.3506     ?     21.4873+-0.4308        ? might be 1.0288x slower
   put-by-val-large-index-blank-indexing-type   
                                                     11.0263+-0.2534     ?     11.1219+-0.2026        ?
   put-by-val-machine-int                             4.6244+-0.1550            4.2542+-0.4941          might be 1.0870x faster
   rare-osr-exit-on-local                            21.5168+-0.2209     ?     21.5715+-0.1473        ?
   register-pressure-from-osr                        31.2133+-0.1564     ?     31.5947+-0.3144        ? might be 1.0122x slower
   setter                                            20.4290+-0.4698           20.3192+-0.0882        
   simple-activation-demo                            35.5305+-0.7362           35.2472+-0.1813        
   simple-getter-access                              17.1711+-0.2164     ?     17.3020+-0.4125        ?
   sin-boolean                                       50.3887+-0.1230     ?     50.5719+-0.4036        ?
   slow-array-profile-convergence                     4.4336+-0.3584            4.2699+-0.1812          might be 1.0383x faster
   slow-convergence                                   4.7526+-0.0313     ?      4.7833+-0.0289        ?
   sparse-conditional                                 1.5340+-0.0521     ?      1.5516+-0.0511        ? might be 1.0115x slower
   splice-to-remove                                  79.4832+-1.6742           78.4371+-0.3038          might be 1.0133x faster
   string-char-code-at                               25.7956+-0.5395     ^     23.6325+-0.3430        ^ definitely 1.0915x faster
   string-concat-object                               3.2092+-0.0483     ?      3.2810+-0.0570        ? might be 1.0224x slower
   string-concat-pair-object                          3.1460+-0.0374     ?      3.1590+-0.0526        ?
   string-concat-pair-simple                         18.6878+-0.2116     ?     18.8252+-0.7422        ?
   string-concat-simple                              18.9159+-0.2865           18.7767+-0.3919        
   string-cons-repeat                                11.9738+-0.0699     ?     12.0990+-0.1572        ? might be 1.0104x slower
   string-cons-tower                                 10.9454+-0.0544     ?     11.2152+-0.3405        ? might be 1.0246x slower
   string-equality                                   44.5058+-1.0922           44.4942+-0.8579        
   string-get-by-val-big-char                        14.5364+-0.1024           14.1036+-0.4753          might be 1.0307x faster
   string-get-by-val-out-of-bounds-insane             6.2393+-0.0816     ?      6.2806+-0.1826        ?
   string-get-by-val-out-of-bounds                    7.2270+-0.1152            7.1952+-0.1014        
   string-get-by-val                                  5.5655+-0.0211     ?      5.5816+-0.0966        ?
   string-hash                                        3.1361+-0.0851            2.9972+-0.0771          might be 1.0463x faster
   string-long-ident-equality                        39.6287+-0.8203     ?     39.8847+-0.9093        ?
   string-repeat-arith                               47.5137+-0.5408           46.8809+-0.3672          might be 1.0135x faster
   string-sub                                        96.0842+-3.2423           94.7444+-0.5077          might be 1.0141x faster
   string-test                                        4.5794+-0.0615     ?      4.6610+-0.0680        ? might be 1.0178x slower
   string-var-equality                               73.0897+-2.6311     !     87.5909+-7.6678        ! definitely 1.1984x slower
   structure-hoist-over-transitions                   3.9061+-0.0239     ?      3.9205+-0.0487        ?
   switch-char-constant                               3.6792+-0.0781            3.6774+-0.0477        
   switch-char                                        9.3374+-0.1571            9.2500+-0.0600        
   switch-constant                                   11.7020+-0.0996     ?     11.7618+-0.1509        ?
   switch-string-basic-big-var                       25.5762+-1.3255           25.0600+-1.9296          might be 1.0206x faster
   switch-string-basic-big                           32.0250+-1.7123           30.0862+-2.8852          might be 1.0644x faster
   switch-string-basic-var                           31.3377+-0.5872     ?     31.6042+-0.8363        ?
   switch-string-basic                               32.8816+-2.5105           31.9924+-1.7896          might be 1.0278x faster
   switch-string-big-length-tower-var                30.0205+-0.1882     ?     30.0732+-0.1373        ?
   switch-string-length-tower-var                    24.0404+-0.2307     ?     24.1393+-0.4220        ?
   switch-string-length-tower                        17.5397+-0.2737     ?     17.6081+-0.4190        ?
   switch-string-short                               17.5352+-0.1609           17.4035+-0.1604        
   switch                                            15.9190+-0.1435     ?     16.0111+-0.1261        ?
   tear-off-arguments-simple                          2.5888+-0.0153     ?      2.6151+-0.0687        ? might be 1.0102x slower
   tear-off-arguments                                 3.9543+-0.0296     ?      4.0032+-0.0511        ? might be 1.0124x slower
   temporal-structure                                19.3560+-0.1260           19.2738+-0.1165        
   to-int32-boolean                                  24.1163+-0.1377     ?     24.3736+-0.4854        ? might be 1.0107x slower
   undefined-test                                     4.9325+-0.0744            4.8940+-0.0260        
   unprofiled-licm                                   30.9769+-1.0776     ?     31.3237+-0.6876        ? might be 1.0112x slower
   weird-inlining-const-prop                          2.6660+-0.0626     ?      2.8326+-0.1928        ? might be 1.0625x slower

   &lt;arithmetic&gt;                                      23.7321+-0.1262     ?     23.7345+-0.1369        ? might be 1.0001x slower
   &lt;geometric&gt; *                                     12.5029+-0.0200     ?     12.5335+-0.0242        ? might be 1.0024x slower
   &lt;harmonic&gt;                                         5.7702+-0.0116     !      5.8148+-0.0310        ! definitely 1.0077x slower

                                                        TipOfTree                  BigSets                                      
AsmBench:
   bigfib.cpp                                       816.0463+-4.0488     !    829.7315+-4.4921        ! definitely 1.0168x slower
   cray.c                                           795.0968+-1.6557     !    798.6882+-0.9359        ! definitely 1.0045x slower
   dry.c                                            841.6009+-42.6571         815.9877+-33.3149         might be 1.0314x faster
   FloatMM.c                                       1118.8792+-11.0512        1110.8865+-0.4787        
   gcc-loops.cpp                                   7543.7642+-13.8800    ^   7487.7253+-5.0253        ^ definitely 1.0075x faster
   n-body.c                                        2070.5363+-14.4424        2057.3853+-49.1261       
   Quicksort.c                                      686.1586+-8.0114     ?    689.8110+-3.7107        ?
   stepanov_container.cpp                          5829.8348+-21.3044    ?   5843.2611+-24.8316       ?
   Towers.c                                         500.2574+-0.6316     ^    494.2997+-1.8593        ^ definitely 1.0121x faster

   &lt;arithmetic&gt;                                    2244.6861+-4.8692         2236.4196+-9.0525          might be 1.0037x faster
   &lt;geometric&gt; *                                   1387.6539+-7.8114         1382.2790+-7.6176          might be 1.0039x faster
   &lt;harmonic&gt;                                      1021.4662+-6.8647         1017.1617+-5.8286          might be 1.0042x faster

                                                        TipOfTree                  BigSets                                      
All benchmarks:
   &lt;arithmetic&gt;                                     173.0219+-0.2787     ?    173.3986+-0.3181        ? might be 1.0022x slower
   &lt;geometric&gt;                                       20.6097+-0.0296     !     20.6716+-0.0308        ! definitely 1.0030x slower
   &lt;harmonic&gt;                                         5.0408+-0.0297     ?      5.0531+-0.0187        ? might be 1.0024x slower

                                                        TipOfTree                  BigSets                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                                   81.7522+-0.2056     !     82.1833+-0.1663        ! definitely 1.0053x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013132</commentid>
    <comment_count>16</comment_count>
      <attachid>232437</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-03 13:20:04 -0700</bug_when>
    <thetext>Created attachment 232437
it&apos;s faster

I did some sampling region profiling, which confirmed that the biggest regressions were coming from compile times and that this was all due to the CFA phase.  Initially I feared that the cost would be in clobberStructures() and friends, which are inherently O(n) operations.  Fortunately, though, all of the cost was in merging.  This is what you&apos;d expect in any abstract interpreter.  This was easy to fix.  I just added a bunch of ALWAYS_INLINE common cases: merging usually encounters clear or top structures; copy/assignment usually deals with small structure sets; and equality usually doesn&apos;t have to deal with out-of-line stuff.

There is still some more fixing to do, but this is almost done...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013176</commentid>
    <comment_count>17</comment_count>
      <attachid>232449</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-03 16:29:26 -0700</bug_when>
    <thetext>Created attachment 232449
and now, it&apos;s actually totally sound!

Our abstract interpreter is now sounder than ever!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013205</commentid>
    <comment_count>18</comment_count>
      <attachid>232460</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-03 19:58:27 -0700</bug_when>
    <thetext>Created attachment 232460
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013338</commentid>
    <comment_count>19</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-06-04 11:05:06 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/169588</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024235</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-07-23 08:58:54 -0700</bug_when>
    <thetext>Build fixes were needed:

1. Fix 32-bit: &lt;http://trac.webkit.org/changeset/171381&gt;
2. Windows fix attempt: &lt;http://trac.webkit.org/changeset/171382&gt;
3. Windows fix (sleep -&gt; Sleep): &lt;http://trac.webkit.org/changeset/171386&gt;
4. Windows fix (return value needed): &lt;http://trac.webkit.org/changeset/171387&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1024379</commentid>
    <comment_count>21</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-07-23 16:36:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/17787547&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231915</attachid>
            <date>2014-05-22 14:41:26 -0700</date>
            <delta_ts>2014-05-22 20:23:33 -0700</delta_ts>
            <desc>the wrong way</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>7993</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBTdHJ1Y3R1
cmVTZXQmIFN0cnVjdHVyZVNldDo6b3BlcmF0b3I9KGNvCiB2b2lkIFN0cnVjdHVyZVNldDo6Y2xl
YXIoKQogewogICAgIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAgIHNldCgw
LCB0cnVlKTsKKyAgICBzZXRFbXB0eSgpOwogfQogCiBib29sIFN0cnVjdHVyZVNldDo6YWRkKFN0
cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6
cmVtb3ZlKFN0cnVjdHVyZSogc3RyCiB7CiAgICAgaWYgKGlzVGhpbigpKSB7CiAgICAgICAgIGlm
IChzaW5nbGVTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHNldCgwLCB0
cnVlKTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBAIGJvb2wg
U3RydWN0dXJlU2V0OjpyZW1vdmUoU3RydWN0dXJlKiBzdHIKICAgICAgICAgbGlzdC0+bGlzdCgp
W2ldID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwogICAgICAgICBpZiAoIWxpc3Qt
Pm1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QpOwot
ICAgICAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICAgICAgc2V0RW1wdHkoKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDExICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIERG
RyB7CitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfQorCiBjbGFzcyBTdHJ1Y3R1cmVT
ZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpCiAgICAgewotICAgICAgICBzZXQoMCwg
dHJ1ZSk7CisgICAgICAgIHNldEVtcHR5KCk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZVNl
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTEyNCw2ICsxMjgsOCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisgICAgCiAgICAgc3RhdGljIGNv
bnN0IHVpbnRwdHJfdCB0aGluRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBy
ZXNlcnZlZEZsYWcgPSAyOwogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgZmxhZ3MgPSAzOwpA
QCAtMTU0LDcgKzE2MCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBkZWxldGVTdHJ1Y3R1
cmVMaXN0SWZOZWNlc3NhcnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFpc1RoaW4oKSkKKyAgICAg
ICAgaWYgKCFpc1RoaW4oKSAmJiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKICAgICAgICAg
ICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3koc3RydWN0dXJlTGlzdCgpKTsKICAgICB9CiAgICAg
CkBAIC0xODUsNiArMTkxLDEwIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlcyksIGZhbHNlKTsKICAgICB9CisgICAgdm9pZCBz
ZXRFbXB0eSgpCisgICAgeworICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQogICAgIHZvaWQg
c2V0KHVpbnRwdHJfdCBwb2ludGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKICAgICB7CiAgICAg
ICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAw
KSB8IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywyMjkgQEAgbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHsKIHB1
YmxpYzoKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkgeyB9CisgICAgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgOiBtX3NldChzdHJ1Y3R1
cmUpCisgICAgeworICAgIH0KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCisgICAgICAgIDogbV9zZXQob3RoZXIpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc2V0LmRlbGV0ZVN0cnVjdHVy
ZUxpc3RJZk5lY2Vzc2FyeSgpOworICAgICAgICBtX3NldC5zZXRFbXB0eSgpOworICAgICAgICBz
ZXRDbG9iYmVyZWQoZmFsc2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1ha2VUb3AoKQorICAg
IHsKKyAgICAgICAgbV9zZXQuZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAg
ICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNs
b2JiZXIoKQorICAgIHsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKHRydWUpOworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB0b3AoKQorICAgIHsKKyAgICAgICAg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tYWtlVG9wKCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDbGVhcigp
IGNvbnN0IHsgcmV0dXJuIG1fc2V0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNUb3AoKSBjb25z
dCB7IHJldHVybiBtX3NldC5tX3BvaW50ZXIgPT0gdG9wVmFsdWU7IH0KKyAgICBib29sIGlzQ2xv
YmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zZXQubV9wb2ludGVyICYgY2xvYmJlcmVkRmxhZzsg
fQorICAgIAorICAgIC8vIFRoZSByb3VnaCBsZXZlbCBpbiB0aGUgYWJzdHJhY3QgdmFsdWUgbGF0
dGljZS4KKyAgICBlbnVtIExhdHRpY2VMZXZlbCB7CisgICAgICAgIEJvdHRvbSwKKyAgICAgICAg
QWN0aXZlLAorICAgICAgICBDbG9iYmVyZWQsCisgICAgICAgIFRvcAorICAgIH07CisgICAgTGF0
dGljZUxldmVsIGxhdHRpY2VMZXZlbCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNDbGVh
cigpKQorICAgICAgICAgICAgcmV0dXJuIEJvdHRvbTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgICAgICByZXR1cm4gVG9wOworICAgICAgICBpZiAoaXNDbG9iYmVyZWQoKSkKKyAgICAg
ICAgICAgIHJldHVybiBDbG9iYmVyZWQ7CisgICAgICAgIHJldHVybiBBY3RpdmU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
aWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBpZiAoIW1fc2V0LmFkZChzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQor
ICAgICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgaWYgKCFtX3NldC5tZXJnZShvdGhlcikpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBo
aXNtTGltaXQpCisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsK
KyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgY2hh
bmdlZCB8PSBtX3NldC5tZXJnZShvdGhlci5tX3NldCk7CisgICAgICAgIGNoYW5nZWQgfD0gbWVy
Z2VDbG9iYmVyZWQob3RoZXIuaXNDbG9iYmVyZWQoKSk7CisgICAgICAgIGlmICghY2hhbmdlZCkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3NldC5z
aXplKCkgPiBwb2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkgfHwg
aXNDbG9iYmVyZWQoKSkKKyAgICAgICAgICAgIG1fc2V0ID0gb3RoZXI7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fc2V0LmZpbHRlcihvdGhlcik7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKGxhdHRpY2VMZXZlbCgpICE9IG90aGVyLmxhdHRpY2VMZXZlbCgpKSB7CisgICAgICAg
ICAgICBpZiAobGF0dGljZUxldmVsKCkgPiBvdGhlci5sYXR0aWNlTGV2ZWwoKSkKKyAgICAgICAg
ICAgICAgICAqdGhpcyA9IG90aGVyOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgCisgICAgICAgIG1fc2V0LmZpbHRlcihvdGhlci5tX3NldCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnMoc3RydWN0dXJlKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc2V0Lmlz
U3Vic2V0T2Yob3RoZXIpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3Qg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
b3RoZXIuaXNUb3AoKSB8fCBvdGhlci5pc0Nsb2JiZXJlZCgpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fc2V0
LmlzU3Vic2V0T2Yob3RoZXIubV9zZXQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3VwZXJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlzKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzVG9wKCkgfHwgaXNDbG9iYmVyZWQoKSB8fCBvdGhlci5pc1RvcCgpIHx8IG90
aGVyLmlzQ2xvYmJlcmVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBtX3NldC5vdmVybGFwcyhvdGhlci5tX3NldCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NldC5tX3BvaW50ZXIgPT0gb3RoZXIubV9zZXQu
bV9wb2ludGVyKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBp
ZiAoaXNUb3AoKSB8fCBvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGlzQ2xvYmJlcmVkKCkgIT0gb3RoZXIuaXNDbG9iYmVyZWQo
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
X3NldCA9PSBvdGhlci5tX3NldDsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuIG1fc2V0
LnNpemUoKTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBhdChzaXplX3QgaSkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIHJldHVybiBtX3NldC5h
dChpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHVpbnRwdHJfdCBjbG9iYmVyZWRG
bGFnID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZEZsYWc7CisgICAgc3RhdGljIHVpbnRwdHJfdCB0
b3BWYWx1ZSA9IFN0cnVjdHVyZVNldDo6cmVzZXJ2ZWRWYWx1ZTsKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgcG9seW1vcnBoaXNtTGltaXQgPSAxMDsKKyAgICAKKyAgICB2b2lkIHNldENsb2JiZXJlZChi
b29sIGlzQ2xvYmJlcmVkKQorICAgIHsKKyAgICAgICAgaWYgKGlzQ2xvYmJlcmVkKQorICAgICAg
ICAgICAgbV9zZXQubV9wb2ludGVyIHw9IGNsb2JiZXJlZEZsYWc7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fc2V0Lm1fcG9pbnRlciAmPSB+Y2xvYmJlcmVkRmxhZzsKKyAgICB9CisKKyAg
ICBib29sIG1lcmdlQ2xvYmJlcmVkKGJvb2wgaXNDbG9iYmVyZWQpCisgICAgeworICAgICAgICBp
ZiAoIWlzQ2xvYmJlcmVkKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
aXNDbG9iYmVyZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgc2V0Q2xv
YmJlcmVkKHRydWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgU3Ry
dWN0dXJlU2V0IG1fc2V0OworfTsKKworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB7Citw
dWJsaWM6CiAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpCiAgICAgICAgIDogbV9zdHJ1Y3R1
cmUoMCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231935</attachid>
            <date>2014-05-22 20:23:33 -0700</date>
            <delta_ts>2014-05-23 14:01:30 -0700</delta_ts>
            <desc>starting to look sensible</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36023</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBTdHJ1Y3R1
cmVTZXQmIFN0cnVjdHVyZVNldDo6b3BlcmF0b3I9KGNvCiB2b2lkIFN0cnVjdHVyZVNldDo6Y2xl
YXIoKQogewogICAgIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAgIHNldCgw
LCB0cnVlKTsKKyAgICBzZXRFbXB0eSgpOwogfQogCiBib29sIFN0cnVjdHVyZVNldDo6YWRkKFN0
cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6
cmVtb3ZlKFN0cnVjdHVyZSogc3RyCiB7CiAgICAgaWYgKGlzVGhpbigpKSB7CiAgICAgICAgIGlm
IChzaW5nbGVTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHNldCgwLCB0
cnVlKTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBAIGJvb2wg
U3RydWN0dXJlU2V0OjpyZW1vdmUoU3RydWN0dXJlKiBzdHIKICAgICAgICAgbGlzdC0+bGlzdCgp
W2ldID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwogICAgICAgICBpZiAoIWxpc3Qt
Pm1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QpOwot
ICAgICAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICAgICAgc2V0RW1wdHkoKTsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDExICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIERG
RyB7CitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfQorCiBjbGFzcyBTdHJ1Y3R1cmVT
ZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpCiAgICAgewotICAgICAgICBzZXQoMCwg
dHJ1ZSk7CisgICAgICAgIHNldEVtcHR5KCk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZVNl
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTY3LDcgKzcxLDEwIEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIGlzRW1wdHkoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzVGhpbigp
ICYmICFzaW5nbGVTdHJ1Y3R1cmUoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBpc1RoaW4oKSAm
JiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBB
U1NFUlQobV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICAKICAgICBib29sIGFkZChTdHJ1Y3R1cmUqKTsKQEAgLTEyNCw5ICsxMzEs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAog
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOwor
ICAgIAogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOwotICAgIHN0YXRp
YyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWlu
dHB0cl90IGZsYWdzID0gMzsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gMTsK
ICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkVmFsdWUgPSA0OwogCiAgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRTdGFydGluZ1NpemUgPSA0OwpAQCAtMTU0LDcgKzE2
Miw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNl
c3NhcnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFpc1RoaW4oKSkKKyAgICAgICAgaWYgKCFpc1Ro
aW4oKSAmJiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKICAgICAgICAgICAgIE91dE9mTGlu
ZUxpc3Q6OmRlc3Ryb3koc3RydWN0dXJlTGlzdCgpKTsKICAgICB9CiAgICAgCkBAIC0xODUsOSAr
MTkzLDEzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oc3RydWN0dXJlcyksIGZhbHNlKTsKICAgICB9CisgICAgdm9pZCBzZXRFbXB0eSgpCisg
ICAgeworICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQogICAgIHZvaWQgc2V0KHVpbnRwdHJf
dCBwb2ludGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIG1fcG9pbnRl
ciA9IHBvaW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAwKSB8IChtX3BvaW50
ZXIgJiByZXNlcnZlZEZsYWcpOworICAgICAgICBtX3BvaW50ZXIgPSBwb2ludGVyIHwgKHNpbmds
ZVN0cnVjdHVyZSA/IHRoaW5GbGFnIDogMCk7CiAgICAgfQogCiAgICAgdWludHB0cl90IG1fcG9p
bnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsOCArMzcsOSBAQCB2b2lk
IEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiB7CiAgICAgaWYgKCEhdmFsdWUg
JiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
ID0gc3RydWN0dXJlOwotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwg
c3RydWN0dXJlKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6
aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAgIG1fc3Ry
dWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKQEAgLTUwLDYgKzUxLDcgQEAgdm9pZCBBYnN0cmFj
dFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAgIG1fdmFsdWUgPSB2YWx1ZTsKICAgICAg
ICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7
CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgSlNWYWx1ZSB2YWx1
ZSkKQEAgLTU3LDEyICs1OSwxMiBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3Jh
cGgsIEpTCiAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2V0RnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX3N0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVz
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICBjbG9iYmVyQXJyYXlNb2Rlcygp
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7
Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9z
dHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICB9CiAgICAg
CkBAIC03MCwxNyArNzIsMTggQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBo
LCBKUwogICAgIG1fdmFsdWUgPSB2YWx1ZTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpz
ZXQoR3JhcGgmIGdyYXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZShncmFwaCwgc3RydWN0dXJlKTsKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBt
X2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAg
ICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgbV92
YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNz
ZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9y
UmVwcmVzZW50YXRpb24oTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uKQpAQCAtMTI5LDE4ICsxMzIs
MTUgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIAogICAg
IG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9hcnJh
eU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwotICAgIG1fY3VycmVu
dEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90
aGVyKTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3IgdG8gdGhlIGFib3Zl
IHR3byBzdGF0ZW1lbnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAgIC8vIEZvbyBpcyBh
IFNwZWN1bGF0ZWRUeXBlIHRoYXQgaXMgZGlzam9pbnQgd2l0aCB0aGUgcGFzc2VkIFN0cnVjdHVy
ZVNldC4gSW4gdGhhdAogICAgIC8vIGNhc2UsIHdlIHdpbGwgbm93IGhhdmUgKE5vbmUsIFtzb21l
U3RydWN0dXJlXSkuIEluIGdlbmVyYWwsIHdlIG5lZWQgdG8gbWFrZQogICAgIC8vIHN1cmUgdGhh
dCBuZXcgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlwZSBuZWVkcyB0
byBiZSBmZWQgYmFjawogICAgIC8vIGludG8gdGhlIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0
aGUgU3RydWN0dXJlU2V0LgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihtX3R5
cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogICAgIAotICAgIGlmIChtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgc2V0RnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUoZ3JhcGgsIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
KTsKLSAgICAgICAgCiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZh
bHVlQnlUeXBlKCk7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKQEAgLTE2OSw4ICsx
NjksNyBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihTCiAgICAgLy8g
dGhlIHBhc3NlZCB0eXBlIGlzIEFycmF5LiBBdCB0aGlzIHBvaW50IHdlJ2xsIGhhdmUgKE5vbmUs
IFRPUCkuIFRoZSBiZXN0IHdheQogICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmUg
ZmlsdGVyaW5nIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGlzIHRvIGZpbHRlciBvbgogICAgIC8vIHRo
ZSBuZXcgdHlwZSAoTm9uZSkgcmF0aGVyIHRoYW4gdGhlIG9uZSBwYXNzZWQgKEFycmF5KS4KLSAg
ICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKLSAgICBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcih0
eXBlKTsKICAgICBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5
cGUoKTsKICAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eSgpOwpAQCAtMjM4LDggKzIzNyw3IEBA
IGJvb2wgQWJzdHJhY3RWYWx1ZTo6c2hvdWxkQmVDbGVhcigpIGNvbnMKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgCiAgICAgaWYgKCEobV90eXBlICYgflNwZWNDZWxsKQotICAgICAgICAmJiAo
IW1fYXJyYXlNb2RlcwotICAgICAgICAgICAgfHwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXND
bGVhcigpKSkKKyAgICAgICAgJiYgKCFtX2FycmF5TW9kZXMgfHwgbV9zdHJ1Y3R1cmUuaXNDbGVh
cigpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MjY3LDggKzI2NSw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXoK
IHZvaWQgQWJzdHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgaWYg
KCEobV90eXBlICYgU3BlY0NlbGwpKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc0NsZWFyKCkpOwotICAgICAgICBBU1NFUlQobV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5pc0NsZWFyKCkpOworICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsK
ICAgICAgICAgQVNTRVJUKCFtX2FycmF5TW9kZXMpOwogICAgIH0KICAgICAKQEAgLTI4OSw2ICsy
ODYsMTEgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgYwogICAgIC8v
IHdlIGRvbid0IHdhbnQgdG8gZ2V0IHBlZGFudGljIGFib3V0IHRoaXMgYXMgaXQgd291bGQgb25s
eSBpbmNyZWFzZSB0aGUgY29tcHV0YXRpb25hbAogICAgIC8vIGNvbXBsZXhpdHkgb2YgdGhlIGNv
ZGUuCiB9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFw
aCkgY29uc3QKK3sKKyAgICBtX3N0cnVjdHVyZS5hc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworfQog
I2VuZGlmCiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dApAQCAtMzAyLDggKzMwNCw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQ
cmludFMKICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsKICAgICAgICAgb3V0LnByaW50KAog
ICAgICAgICAgICAgIiwgIiwgQXJyYXlNb2Rlc0R1bXAobV9hcnJheU1vZGVzKSwgIiwgIiwKLSAg
ICAgICAgICAgIGluQ29udGV4dChtX2N1cnJlbnRLbm93blN0cnVjdHVyZSwgY29udGV4dCksICIs
ICIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSwgY29u
dGV4dCkpOworICAgICAgICAgICAgaW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSk7CiAg
ICAgfQogICAgIGlmICghIW1fdmFsdWUpCiAgICAgICAgIG91dC5wcmludCgiLCAiLCBpbkNvbnRl
eHQobV92YWx1ZSwgY29udGV4dCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1
Myw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNw
ZWNOb25lOwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwotICAgICAgICBtX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fdmFsdWUgPSBK
U1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkBAIC03NSwxMCAr
NzQsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgY2xvYmJlclN0cnVjdHVy
ZXMoKQogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZS5jbG9iYmVyKCk7CiAgICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
Q2xlYXIoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAg
ICAgICAgICAgIEFTU0VSVCghbV9hcnJheU1vZGVzKTsKICAgICAgICAgfQogICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CkBAIC05MSw3ICs5MCwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgCiAgICAgYm9vbCBpc0hlYXBUb3AoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJu
IChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90eXBlICYmIG1fY3VycmVudEtub3duU3RydWN0
dXJlLmlzVG9wKCkgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1RvcCgpOworICAgICAg
ICByZXR1cm4gKG1fdHlwZSB8IFNwZWNIZWFwVG9wKSA9PSBtX3R5cGUKKyAgICAgICAgICAgICYm
IG1fc3RydWN0dXJlLmlzVG9wKCkKKyAgICAgICAgICAgICYmIG1fYXJyYXlNb2RlcyA9PSBBTExf
QVJSQVlfTU9ERVMKKyAgICAgICAgICAgICYmICFtX3ZhbHVlOwogICAgIH0KICAgICAKICAgICBi
b29sIHZhbHVlSXNUb3AoKSBjb25zdApAQCAtMTE4LDEyICsxMjAsMTAgQEAgc3RydWN0IEFic3Ry
YWN0VmFsdWUgewogICAgIHZvaWQgc2V0VHlwZShTcGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsK
ICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAg
ICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICAg
ICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgICAgIH0K
ICAgICAgICAgbV90eXBlID0gdHlwZTsKQEAgLTEzOCw4ICsxMzgsNyBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQog
ICAgICAgICAgICAgJiYgbV9hcnJheU1vZGVzID09IG90aGVyLm1fYXJyYXlNb2RlcwotICAgICAg
ICAgICAgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPT0gb3RoZXIubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUKLSAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPT0gb3Ro
ZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZQorICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUg
PT0gb3RoZXIubV9zdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92
YWx1ZTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFic3RyYWN0VmFsdWUmIG90
aGVyKSBjb25zdApAQCAtMTYyLDggKzE2MSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVNwZWN1bGF0aW9uKG1f
dHlwZSwgb3RoZXIubV90eXBlKTsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZUFycmF5TW9k
ZXMobV9hcnJheU1vZGVzLCBvdGhlci5tX2FycmF5TW9kZXMpOwotICAgICAgICAgICAgcmVzdWx0
IHw9IG1fY3VycmVudEtub3duU3RydWN0dXJlLmFkZEFsbChvdGhlci5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXN1bHQgfD0gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5hZGRBbGwob3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk7CisgICAgICAgICAgICBy
ZXN1bHQgfD0gbV9zdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmUpOwogICAgICAgICAg
ICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkgewogICAgICAgICAgICAgICAgIHJlc3Vs
dCB8PSAhIW1fdmFsdWU7CiAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKQEAg
LTE3OSw4ICsxNzcsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1lcmdlU3Bl
Y3VsYXRpb24obV90eXBlLCB0eXBlKTsKICAgICAgICAgCiAgICAgICAgIGlmICh0eXBlICYgU3Bl
Y0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsK
LSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0g
QUxMX0FSUkFZX01PREVTOwogICAgICAgICB9CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7
CkBAIC0yMjUsNzUgKzIyMiwzMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGlm
ICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV90eXBl
ICYgU3BlY0NlbGwpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQotICAgICAgICAgICAgICAgICYmIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJu
IG1fc3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAmJiAobV9h
cnJheU1vZGVzICYgYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAg
IFN0cnVjdHVyZSogYmVzdFByb3ZlblN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmICht
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICAgICAgcmV0
dXJuIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLSAgICAKICAgICBib29sIGhhc0Nsb2JiZXJhYmxlU3RhdGUoKSBjb25zdAog
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzTmVpdGhlckNs
ZWFyTm9yVG9wKCkKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9y
VG9wKCkKICAgICAgICAgICAgIHx8ICFhcnJheU1vZGVzQXJlQ2xlYXJPclRvcChtX2FycmF5TW9k
ZXMpOwogICAgIH0KICAgICAKICNpZiBBU1NFUlRfRElTQUJMRUQKICAgICB2b2lkIGNoZWNrQ29u
c2lzdGVuY3koKSBjb25zdCB7IH0KKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNv
bnN0IHsgfQogI2Vsc2UKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKKyAgICB2
b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0OwogI2VuZGlmCiAgICAgCiAgICAgdm9p
ZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICAvLyBBIGdyZWF0IHdheSB0
byB0aGluayBhYm91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1fY3VycmVudEtub3duU3RydWN0
dXJlIGFuZAotICAgIC8vIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgaXMgdG8gY29uc2lkZXIg
dGhlc2UgZm91ciBleGFtcGxlczoKLSAgICAvLwotICAgIC8vIDEpIHggPSBmb28oKTsKLSAgICAv
LwotICAgIC8vICAgIEluIHRoaXMgY2FzZSB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5k
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbAotICAgIC8vICAgIGJvdGggYmUgVE9QLCBz
aW5jZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IHggZm9yIHN1cmUsIHlldC4KLSAgICAv
LwotICAgIC8vIDIpIHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vCi0gICAg
Ly8gICAgV2hlcmUgeCB3aWxsIGxhdGVyIGhhdmUgYSBuZXcgcHJvcGVydHkgYWRkZWQgdG8gaXQs
ICdnJy4gQmVjYXVzZSBvZiB0aGUKLSAgICAvLyAgICBrbm93biBidXQgbm90LXlldC1leGVjdXRl
ZCBwcm9wZXJ0eSBhZGRpdGlvbiwgeCdzIGN1cnJlbnQgc3RydWN0dXJlIHdpbGwKLSAgICAvLyAg
ICBub3QgYmUgd2F0Y2hwb2ludGFibGU7IGhlbmNlIHdlIGhhdmUgbm8gd2F5IG9mIHN0YXRpY2Fs
bHkgYm91bmRpbmcgdGhlIHNldAotICAgIC8vICAgIG9mIHBvc3NpYmxlIHN0cnVjdHVyZXMgdGhh
dCB4IG1heSBoYXZlIGlmIGEgY2xvYmJlcmluZyBldmVudCBoYXBwZW5zLiBTbywKLSAgICAvLyAg
ICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgd2lsbCBiZSB3aGF0ZXZlciBzdHJ1Y3R1cmUg
d2UgY2hlY2sgdG8gZ2V0Ci0gICAgLy8gICAgcHJvcGVydHkgJ2YnLCBhbmQgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZSB3aWxsIGJlIFRPUC4KLSAgICAvLwotICAgIC8vIDMpIHggPSBmb28oKTsK
LSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUgeCBoYXMgYSB0ZXJt
aW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBzdGlsbCB3YXRjaHBvaW50YWJsZS4gSW4gdGhpcyBjYXNl
LAotICAgIC8vICAgIHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZSB3aWxsIGJvdGggYmUKLSAgICAvLyAgICB3aGF0ZXZlciBzdHJ1Y3R1cmUg
d2UgY2hlY2tlZCBmb3Igd2hlbiBnZXR0aW5nICdmJy4KLSAgICAvLwotICAgIC8vIDQpIHggPSBm
b28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vICAgIGJhcigpOwotICAgIC8vCi0gICAg
Ly8gICAgV2hlcmUgeCBoYXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBzdGlsbCB3YXRj
aHBvaW50YWJsZS4gSW4gdGhpcwotICAgIC8vICAgIGNhc2UsIG1fY3VycmVudEtub3duU3RydWN0
dXJlIHdpbGwgYmUgVE9QIGJlY2F1c2UgYmFyKCkgbWF5IHBvdGVudGlhbGx5Ci0gICAgLy8gICAg
Y2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5IG9mIHByb3Zpbmcgb3RoZXJ3
aXNlLCBidXQKLSAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJl
IHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAotICAgIC8vICAgIHdoZW4gZ2V0dGlu
ZyBwcm9wZXJ0eSAnZicuCi0gICAgCi0gICAgLy8gTkIuIEFsbCBmaWVsZHMgaW4gdGhpcyBzdHJ1
Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCi0KICAgICAvLyBUaGlzIGlzIGEgcHJv
dmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZl
IHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHZhbHVlIG11
c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQogICAgIC8vIGJlIFRPUCwgaW5kaWNh
dGluZyB0aGF0IGl0IGlzIHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMsIGluIHdo
aWNoCkBAIC0zMDEsMjkgKzI1MywxMiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8g
aW4gd2hpY2ggY2FzZSB0aGlzIHZhbHVlIGNhbm5vdCBiZSBhIGNlbGwuIFRoaXMgaXMgYWxsIHN1
YmplY3QgdG8gY2hhbmdlCiAgICAgLy8gYW55dGltZSBhIG5ldyB2YWx1ZSBpcyBhc3NpZ25lZCB0
byB0aGlzIG9uZSwgYW55dGltZSB0aGVyZSBpcyBhIGNvbnRyb2wgZmxvdwogICAgIC8vIG1lcmdl
LCBvciBtb3N0IGNydWNpYWxseSwgYW55dGltZSBhIHNpZGUtZWZmZWN0IG9yIHN0cnVjdHVyZSBj
aGVjayBoYXBwZW5zLgotICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVjdCwgd2UgdHlwaWNh
bGx5IG11c3QgYXNzdW1lIHRoYXQgYW55IHZhbHVlIG1heSBoYXZlCi0gICAgLy8gaGFkIGl0cyBz
dHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2UgY29udHJhdmVuaW5nIG91ciBwcm9vZi4gV2UgbWFrZSB0
aGUgcHJvb2YKLSAgICAvLyB2YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcgdGhpcyB0byBUT1AgKGku
ZS4gY2xhaW1pbmcgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0Ci0gICAgLy8gdGhpcyB2YWx1ZSBt
YXkgaGF2ZSBhbnkgc3RydWN0dXJlKS4gT2Ygbm90ZSBpcyB0aGF0IHRoZSBwcm9vZiByZXByZXNl
bnRlZCBieQotICAgIC8vIHRoaXMgZmllbGQgaXMgbm90IHN1YmplY3QgdG8gc3RydWN0dXJlIHRy
YW5zaXRpb24gd2F0Y2hwb2ludHMgLSBldmVuIGlmIG9uZQotICAgIC8vIGZpcmVzLCB3ZSBjYW4g
YmUgc3VyZSB0aGF0IHRoaXMgcHJvb2YgaXMgc3RpbGwgdmFsaWQuCi0gICAgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZTsKLSAgICAKLSAgICAvLyBUaGlzIGlz
IGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNh
biBoYXZlIG5vdwotICAgIC8vIG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUgc3ViamVjdCB0byB0
aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgb2YKLSAgICAvLyBhbGwgbWVtYmVy
cyBvZiB0aGlzIHNldCBub3QgaGF2aW5nIGZpcmVkLiBUaGlzIHNldCBpcyBpbXBlcnZpb3VzIHRv
IHNpZGUtCi0gICAgLy8gZWZmZWN0czsgZXZlbiBpZiBvbmUgaGFwcGVucyB0aGUgc2lkZS1lZmZl
Y3QgY2FuIG9ubHkgY2F1c2UgdGhlIHZhbHVlIHRvCi0gICAgLy8gY2hhbmdlIHRvIGF0IHdvcnN0
IGFub3RoZXIgc3RydWN0dXJlIHRoYXQgaXMgYWxzbyBhIG1lbWJlciBvZiB0aGlzIHNldC4gQnV0
LAotICAgIC8vIHRoZSB0aGVvcmVtIGJlaW5nIHByb3ZlZCBieSB0aGlzIGZpZWxkIGlzIHByZWRp
Y2F0ZWQgdXBvbiB0aGVyZSBub3QgYmVpbmcKLSAgICAvLyBhbnkgbmV3IHN0cnVjdHVyZSB0cmFu
c2l0aW9ucyBpbnRyb2R1Y2VkIGludG8gYW55IG1lbWJlcnMgb2YgdGhpcyBzZXQuIEluCi0gICAg
Ly8gY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gd2F5IGZvciB1cyB0byBndWFyZCB0aGlzIGhhcHBl
bmluZywgdGhlIHNldCBtdXN0IGJlCi0gICAgLy8gVE9QLiBCdXQgaW4gY2FzZXMgd2hlcmUgd2Ug
Y2FuIGd1YXJkIG5ldyBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKGFsbCBtZW1iZXJzCi0gICAgLy8g
b2YgdGhlIHNldCBoYXZlIHN0aWxsLXZhbGlkIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9p
bnRzKSB0aGVuIHRoaXMgc2V0Ci0gICAgLy8gd2lsbCBiZSBmaW5pdGUuIEFueXRpbWUgdGhhdCB3
ZSBtYWtlIHVzZSBvZiB0aGUgZmluaXRlIG5hdHVyZSBvZiB0aGlzIHNldCwKLSAgICAvLyB3ZSBt
dXN0IGZpcnN0IGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgd2hpY2gg
d2lsbCBlZmZlY3RpdmVseQotICAgIC8vIHJlc3VsdCBpbiBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZSBiZWluZyBmaWx0ZXJlZCBhY2NvcmRpbmcgdG8KLSAgICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZTsKKyAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3QsIHdlIG11c3QgYXNzdW1lIHRo
YXQgYW55IHZhbHVlIHdpdGggYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vIGlzbid0IGJlaW5nIHdh
dGNoZWQgbWF5IGhhdmUgaGFkIGl0cyBzdHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2UgY29udHJhdmVu
aW5nCisgICAgLy8gb3VyIHByb29mLiBJbiBzdWNoIGEgY2FzZSB3ZSBtYWtlIHRoZSBwcm9vZiB2
YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcgdGhpcyB0bworICAgIC8vIFRPUCAoaS5lLiBjbGFpbWlu
ZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhpcyB2YWx1ZSBtYXkgaGF2ZSBhbnkKKyAgICAv
LyBzdHJ1Y3R1cmUpLgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7CiAg
ICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBwb3NzaWJsZSB0
eXBlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUKICAgICAvLyBub3cgb3IgYW55IHRpbWUgaW4g
dGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWduZWQuIFRoaXMgZmllbGQgaXMKQEAgLTMz
MiwxMSArMjY3LDExIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyBiZXR3ZWVuIHRo
aXMgZmllbGQsIGFuZCB0aGUgc3RydWN0dXJlIGZpZWxkcyBhYm92ZSwgaXMgYXMgZm9sbG93cy4g
VGhlCiAgICAgLy8gZmllbGRzIGFib3ZlIGNvbnN0cmFpbnQgdGhlIHN0cnVjdHVyZXMgdGhhdCBh
IGNlbGwgbWF5IGhhdmUsIGJ1dCB0aGV5IHNheQogICAgIC8vIG5vdGhpbmcgYWJvdXQgd2hldGhl
ciBvciBub3QgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGEgY2VsbC4gTW9yZSBmb3JtYWxseSwK
LSAgICAvLyB0aGUgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMgaXRzZWxmIGFuIGFic3RyYWN0
IHZhbHVlIHRoYXQgY29uc2lzdHMgb2YgdGhlCisgICAgLy8gdGhlIG1fc3RydWN0dXJlIGlzIGl0
c2VsZiBhbiBhYnN0cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQogICAgIC8vIHVuaW9u
IG9mIHRoZSBzZXQgb2YgYWxsIG5vbi1jZWxsIHZhbHVlcyBhbmQgdGhlIHNldCBvZiBjZWxsIHZh
bHVlcyB0aGF0IGhhdmUKICAgICAvLyB0aGUgZ2l2ZW4gc3RydWN0dXJlLiBUaGlzIGFic3RyYWN0
IHZhbHVlIGlzIHRoZW4gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUKLSAgICAvLyBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZSBhbmQgdGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUu
IFNvLCBmb3IKLSAgICAvLyBleGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMy
IGFuZCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBpcworICAgIC8vIG1fc3RydWN0dXJlIGFuZCB0
aGUgc2V0IG9mIHZhbHVlcyB3aG9zZSB0eXBlIGlzIG1fdHlwZS4gU28sIGZvcgorICAgIC8vIGV4
YW1wbGUgaWYgbV90eXBlIGlzIFNwZWNGaW5hbHxTcGVjSW50MzIgYW5kIG1fc3RydWN0dXJlIGlz
CiAgICAgLy8gWzB4MTIzNDVdIHRoZW4gdGhpcyBhYnN0cmFjdCB2YWx1ZSBjb3JyZXNwb25kcyB0
byB0aGUgc2V0IG9mIGFsbCBpbnRlZ2VycwogICAgIC8vIHVuaWZpZWQgd2l0aCB0aGUgc2V0IG9m
IGFsbCBvYmplY3RzIHdpdGggc3RydWN0dXJlIDB4MTIzNDUuCiAgICAgU3BlY3VsYXRlZFR5cGUg
bV90eXBlOwpAQCAtMzkxLDE0ICszMjYsMTEgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1f
dHlwZSB8PSB0b3A7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKLSAg
ICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICBtX2Z1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRv
cCgpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUo
R3JhcGgmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7Ci0KICAgICB2b2lkIGZpbHRlclZhbHVlQnlU
eXBlKCk7CiAgICAgdm9pZCBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE2OTIwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFsbG9jYXRlKCk7IC8vIFVz
ZSBwbGFjZW1lbnQgbmV3IHRvIGFsbG9jYXRlLCBhbmQgYXZvaWQgdXNpbmcgdGhpcyBtZXRob2Qu
CiAgICAgdm9pZCBmcmVlKFQqKTsgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBkZWxldGU7IG5ldmVy
IHVzZSAnZGVsZXRlJyBkaXJlY3RseS4KICAgICAKLSAgICB2b2lkIGZyZWVBbGwoKTsgLy8gT25s
eSBjYWxsIHRoaXMgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgdm9pZCBmcmVl
QWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIHlvdSd2ZSBlaXRoZXIgZnJlZWQgZXZlcnl0aGlu
ZyBvciBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KICAgICB2b2lkIHJlc2V0KCk7IC8v
IExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1cm5zIGFsbCBtZW1vcnkgdG8gdGhlIE9TLgog
ICAgIAogICAgIHVuc2lnbmVkIGluZGV4T2YoY29uc3QgVCopOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw5IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIGFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBX
YXRjaHBvaW50U2V0VHlwZSogc2V0KQogICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FCTEVECisgICAg
ICAgIG1fcHJvZmlsZWRTZXRzLmFkZChzZXQpOworI2VuZGlmCiAgICAgICAgIG1fcHJvZmlsZWRX
YXRjaHBvaW50cy5hcHBlbmQoCiAgICAgICAgICAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNo
cG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+KGNvZGVPcmlnaW4sIGV4aXRLaW5kLCBzZXQpKTsK
ICAgICB9CkBAIC0xNzIsMTEgKzE3NSwxNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gaXNTdGlsbFZhbGlkKHNldCkgfHwgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShzZXQpOwogICAg
IH0KKyAgICAKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChXYXRjaHBvaW50U2V0VHlwZSogc2V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2V0cy5jb250YWlucyhzZXQpIHx8IG1f
cHJvZmlsZWRTZXRzLmNvbnRhaW5zKFNldCkpOworICAgIH0KIAogcHJpdmF0ZToKICAgICBWZWN0
b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4g
bV9wcm9maWxlZFdhdGNocG9pbnRzOwogICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBt
X3NldHM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5
cGUqPiBtX3Byb2ZpbGVkU2V0czsKICAgICBTdGF0ZU1hcCBtX2ZpcnN0S25vd25TdGF0ZTsKICNl
bmRpZgogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTIzMyw2ICsyNDIsMTggQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNWYWxpZE9yTWl4ZWQodmll
dyk7CiAgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKFdhdGNocG9pbnRTZXQqIHNldCkK
KyAgICB7CisgICAgICAgIG1fc2V0cy5hc3NlcnRJc1dhdGNoZWQoc2V0KTsKKyAgICB9CisgICAg
dm9pZCBhc3NlcnRJc1dhdGNoZWQoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQorICAgIHsKKyAg
ICAgICAgbV9pbmxpbmVTZXRzLmFzc2VydElzV2F0Y2hlZCgmc2V0KTsKKyAgICB9CisgICAgdm9p
ZCBhc3NlcnRJc1dhdGNoZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCisgICAgeworICAgICAg
ICBtX2J1ZmZlclZpZXdzLmFzc2VydElzV2F0Y2hlZCh2aWV3KTsKKyAgICB9CiAgICAgCiBwcml2
YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNldD4gbV9zZXRz
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2
OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3NywxNiBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFu
LCBMb25nTGl2CiAKIEdyYXBoOjp+R3JhcGgoKQogeworICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXgg
PSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgbV9hbGxvY2F0
b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5v
ZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgIG1fYWxs
b2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIH0KICAgICBtX2FsbG9jYXRv
ci5mcmVlQWxsKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
bWFrZVRvcCgpCit7CisgICAgbV9zZXQuZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7
CisgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IHNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGF0KGkpOwor
ICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdyYXBoLndhdGNocG9p
bnRzKCkuYXNzZXJ0SXNXYXRjaGVkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSk7CisgICAgfQorfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIoKQor
eworICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMgYXBwcm9hY2ggdG8gY2xvYmJlcmluZyBpcyB0
aGF0IGFueXRpbWUgd2UgaW50cm9kdWNlCisgICAgLy8gYSB3YXRjaGFibGUgc3RydWN0dXJlIGlu
dG8gYW4gYWJzdHJhY3QgdmFsdWUsIHdlIHdhdGNocG9pbnQgaXQuIFlvdSBjYW4gYXNzZXJ0Cisg
ICAgLy8gdGhhdCB0aGlzIGhvbGRzIGJ5IGNhbGxpbmcgYXNzZXJ0SXNXYXRjaGVkKCkuCisgICAg
ICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlm
IChtX3NldC5pc1RoaW4oKSkgeworICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9zZXQuc2luZ2xlU3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAg
ICAgICBtYWtlVG9wV2hlblRoaW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAg
CisgICAgU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0ID0gbV9zZXQuc3RydWN0dXJl
TGlzdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3QtPm1fbGVuZ3RoOyBpLS07KSB7Cisg
ICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0tPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZChzdHJ1Y3R1cmUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3Jw
aGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGlmICghbV9zZXQubWVyZ2Uob3RoZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBt
YWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7
CisgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKKyAgICAgICAgbWFrZVRvcCgpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1lcmdlKG90aGVyLm1fc2V0KTsK
K30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZShjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICBtX3NldCA9IG90aGVyOwor
ICAgIGVsc2UKKyAgICAgICAgbV9zZXQuZmlsdGVyKG90aGVyKTsKK30KKwordm9pZCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjptZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhl
cikKK3sKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGZpbHRlcihvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
Y29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5jb250YWlucyhzdHJ1Y3R1
cmUpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YoY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyKTsKK30KKwor
Ym9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdWJzZXRPZihvdGhlci5tX3NldCk7Cit9
CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1cGVyc2V0T2Yob3RoZXIpOworfQorCitib29s
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkgfHwgb3RoZXIuaXNUb3AoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0Lm92ZXJsYXBzKG90aGVyLm1fc2V0
KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3NldC5tX3Bv
aW50ZXIgPT0gb3RoZXIubV9zZXQubV9wb2ludGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAKKyAgICBpZiAoaXNUb3AoKSB8fCBvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgcmV0dXJuIG1fc2V0ID09IG90aGVyLm1fc2V0OworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zNywzMDAgKzM3LDg3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSgpCi0gICAgICAgIDogbV9zdHJ1Y3R1cmUoMCkKLSAgICB7Ci0gICAg
fQotICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKSB7IH0KICAgICBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKKyAgICAgICAgOiBtX3NldChzdHJ1Y3R1cmUpCiAgICAgewogICAgIH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQor
ICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAg
ICAgICAgOiBtX3NldChvdGhlcikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2V0LnNpemUoKSkg
ewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IHNldFswXTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHRvcFZhbHVlKCk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFy
KCkKICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgbV9zZXQuY2xlYXIo
KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBtYWtlVG9wKCkKLSAgICB7Ci0gICAgICAgIG1fc3Ry
dWN0dXJlID0gdG9wVmFsdWUoKTsKLSAgICB9CisgICAgdm9pZCBtYWtlVG9wKCk7CiAgICAgCi0g
ICAgc3RhdGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkKLSAgICB7Ci0gICAgICAgIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgIHZhbHVlLm1ha2VUb3AoKTsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lk
IGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0IHsgfQorI2Vsc2UKKyAgICB2b2lkIGFzc2Vy
dElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0OworI2VuZGlmCiAgICAgCi0gICAgdm9pZCBhZGQoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVj
dHVyZSkgJiYgIWlzVG9wKCkpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICBtYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3Ry
dWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsK
LSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJl
ID0gb3RoZXJbMF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIHZv
aWQgY2xvYmJlcigpOwogICAgIAotICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUmIG90aGVyKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgp
CiAgICAgewotICAgICAgICBpZiAoIW90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVj
dHVyZSkgewotICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJl
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJl
ID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fcG9pbnRlciA9IHRv
cFZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBib29sIGNv
bnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlz
VG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJl
ID09IHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0Lmlz
RW1wdHkoKTsgfQorICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3NldC5tX3BvaW50
ZXIgPT0gdG9wVmFsdWU7IH0KKyAgICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3Qg
eyByZXR1cm4gIWlzQ2xlYXIoKSAmJiAhaXNUb3AoKTsgfQogICAgIAotICAgIGJvb2wgaXNTdWJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9zdHJ1
Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNv
bnRhaW5zKG1fc3RydWN0dXJlKTsKLSAgICB9CisgICAgYm9vbCBhZGQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpOwogICAgIAotICAgIGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJl
OwotICAgIH0KKyAgICBib29sIG1lcmdlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAg
IGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOworICAgIHZv
aWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKTsKICAgICAKLSAgICBib29sIGlzU3Vw
ZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFvdGhl
ci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG90aGVyLnNp
emUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3N0
cnVjdHVyZSA9PSBvdGhlclswXTsKLSAgICB9CisgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG90aGVy
LmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGlzVG9wKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewot
ICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgYm9vbCBp
c1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNT
dWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAg
CisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7
CiAgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3Ro
ZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIp
Ci0gICAgewotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAob3Ro
ZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBd
OwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAgICAgICAgICBtX3N0
cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICB9CisgICAgYm9vbCBvdmVybGFw
cyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGZpbHRl
cihTcGVjdWxhdGVkVHlwZSBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICghKG90aGVyICYgU3Bl
Y0NlbGwpKSB7Ci0gICAgICAgICAgICBjbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDbGVhck9yVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKG1fc3Ry
dWN0dXJlKSAmIG90aGVyKSkKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV9z
dHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBt
X3N0cnVjdHVyZSA9PSB0b3BWYWx1ZSgpOyB9Ci0gICAgCi0gICAgYm9vbCBpc0NsZWFyT3JUb3Ao
KSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA8PSB0b3BWYWx1ZSgpOyB9Ci0gICAgYm9vbCBp
c05laXRoZXJDbGVhck5vclRvcCgpIGNvbnN0IHsgcmV0dXJuICFpc0NsZWFyT3JUb3AoKTsgfQor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikg
Y29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKCFpc1RvcCgpKTsKLSAgICAgICAgcmV0dXJuICEhbV9zdHJ1Y3R1cmU7CisgICAgICAgIHJl
dHVybiBtX3NldC5zaXplKCk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90
IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOwotICAgICAgICBBU1NF
UlQobV9zdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKLSAgICAgICAg
cmV0dXJuIG1fc3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9y
W10oc2l6ZV90IGkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gYXQoaSk7Ci0gICAgfQot
ICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
YXQoMCk7Ci0gICAgfQotICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0
cnVjdHVyZXMoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm4gU3BlY0NlbGw7Ci0gICAgICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gU3BlY05vbmU7Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUo
bV9zdHJ1Y3R1cmUpOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNl
dCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaGFzU2luZ2xldG9uKCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBpc05laXRoZXJDbGVhck5vclRvcCgpOwotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIHNpbmdsZXRvbigpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoaXNOZWl0
aGVyQ2xlYXJOb3JUb3AoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
aXNUb3AoKSkgewotICAgICAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCJbIik7Ci0gICAg
ICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoKm1f
c3RydWN0dXJlLCBjb250ZXh0KSk7Ci0gICAgICAgIG91dC5wcmludCgiXSIpOwotICAgIH0KLQot
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAotICAgIHsKLSAgICAgICAgZHVt
cEluQ29udGV4dChvdXQsIDApOworICAgICAgICByZXR1cm4gbV9zZXQuYXQoaSk7CiAgICAgfQog
CiBwcml2YXRlOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQorICAgIHN0YXRpYyB1aW50cHRyX3QgdG9w
VmFsdWUgPSBTdHJ1Y3R1cmVTZXQ6OnJlc2VydmVkVmFsdWU7CisgICAgc3RhdGljIHVuc2lnbmVk
IHBvbHltb3JwaGlzbUxpbWl0ID0gMTA7CiAgICAgCi0gICAgLy8gTkIuIFRoaXMgbXVzdCBoYXZl
IGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQgbWFrZVRvcFdoZW5UaGluKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX3NldC5pc1RoaW4oKSk7CisgICAgICAgIG1fc2V0Lm1fcG9pbnRl
ciA9IHRvcFZhbHVlOworICAgIH0KICAgICAKLSAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVy
IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Cisg
ICAgU3RydWN0dXJlU2V0IG1fc2V0OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231983</attachid>
            <date>2014-05-23 14:01:30 -0700</date>
            <delta_ts>2014-05-28 19:03:31 -0700</delta_ts>
            <desc>more!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69473</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw4IEBACiAJCTBGQ0VGQURGMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQURF
MTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDJENEZF
MTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJENEZD
MTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNw
cCAqLzsgfTsKKwkJMEZEMkQ0RkYxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDJENEZEMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9
OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVC
MDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi87IH07CkBAIC0yMzEzLDYgKzIzMTUsOCBA
QAogCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTG9jYXRpb24uY3BwOyBwYXRoID0gZnRs
L0ZUTExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREUx
ODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZUTExvY2F0aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVj
dHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJl
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDRGQzE5MkZFRTU4
MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMkQ0RkQxOTJGRUU1ODAw
QTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERG
R0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2
ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1
MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODM4LDYgKzQ4NDIsOCBAQAog
CQkJCTBGMkJEQzQzMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgg
Ki8sCiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFs
bG9jYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERG
R1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLAorCQkJCTBGRDJENEZDMTkyRkVF
NTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLywK
KwkJCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZS5oICovLAogCQkJCTBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkM5N0YzQzE4MjAyMTE5MDAyQzlC
MjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBGREIyQ0U1MTc0
ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCkBAIC01Nzc2LDYgKzU3ODIsNyBA
QAogCQkJCTBGNDg1MzI4MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFi
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJDIC8q
IEZUTENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEMkQ0RkYxOTJGRUU1ODAw
QTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBQzkyMkJDMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FS
RkRlYnVnTGluZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Niw2ICs2OTYzLDcgQEAKIAkJ
CQkwRkYwRjE5OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc2N0I1QjUxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEMkQ0
RkUxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05h
dHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5
NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBC
OUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDE2
OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFN0cnVjdHVyZVNldCYgU3RydWN0dXJl
U2V0OjpvcGVyYXRvcj0oY28KIHZvaWQgU3RydWN0dXJlU2V0OjpjbGVhcigpCiB7CiAgICAgZGVs
ZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7Ci0gICAgc2V0KDAsIHRydWUpOworICAgIHNl
dEVtcHR5KCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlU2V0OjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgU3RydWN0dXJlU2V0OjpyZW1vdmUoU3RydWN0dXJl
KiBzdHIKIHsKICAgICBpZiAoaXNUaGluKCkpIHsKICAgICAgICAgaWYgKHNpbmdsZVN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZSkgewotICAgICAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICAg
ICAgc2V0RW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6OnJl
bW92ZShTdHJ1Y3R1cmUqIHN0cgogICAgICAgICBsaXN0LT5saXN0KClbaV0gPSBsaXN0LT5saXN0
KClbLS1saXN0LT5tX2xlbmd0aF07CiAgICAgICAgIGlmICghbGlzdC0+bV9sZW5ndGgpIHsKICAg
ICAgICAgICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3kobGlzdCk7Ci0gICAgICAgICAgICBzZXQo
MCwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRFbXB0eSgpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTE0NCwyMyArMTQ0LDggQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6
OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUoc2luZ2xl
U3RydWN0dXJlKCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjbGVhcigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1
Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKGxpc3QtPmxpc3Qo
KVtpXSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbGlzdC0+bGlzdCgpW2ktLV0g
PSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07Ci0gICAgfQotICAgIGlmICghbGlzdC0+
bV9sZW5ndGgpCi0gICAgICAgIGNsZWFyKCk7CisgICAgQ29udGFpbnNPdXRPZkxpbmUgY29udGFp
bnNPdXRPZkxpbmUob3RoZXIpOworICAgIGdlbmVyaWNGaWx0ZXIoY29udGFpbnNPdXRPZkxpbmUp
OwogfQogCiB2b2lkIFN0cnVjdHVyZVNldDo6ZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
ZXQuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTUgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTsKK30KKwogY2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVT
ZXQoKQogICAgIHsKLSAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICBzZXRFbXB0eSgpOwog
ICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02
Nyw3ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBpc1RoaW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAg
ICAgIGJvb2wgcmVzdWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSByZXNlcnZlZFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhZGQo
U3RydWN0dXJlKik7CkBAIC03OCw2ICs4NSwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIo
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBnZW5l
cmljRmlsdGVyKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAoaXNUaGluKCkp
IHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKGZ1bmN0b3Ioc2luZ2xlU3RydWN0dXJlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3Qg
PSBzdHJ1Y3R1cmVMaXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0
LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5saXN0KClb
aV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+bGlzdCgp
W2ktLV0gPSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAg
IAogICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmKSBjb25zdDsKICAgICBi
b29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAogICAgIHsK
QEAgLTEyNCwxNSArMTUzLDMyIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRoaW5GbGFn
ID0gMTsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7Ci0gICAg
c3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnRw
dHJfdCBmbGFncyA9IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVl
ID0gNDsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0g
NDsKICAgICAKICAgICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNv
bnRhaW5zT3V0T2ZMaW5lKFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIGNsYXNzIENvbnRh
aW5zT3V0T2ZMaW5lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2V0LmNvbnRhaW5z
T3V0T2ZMaW5lKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIG1fc2V0OworICAgIH07CisKICAgICB2b2lkIGNvcHlGcm9tKGNv
bnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAogICAgIGNsYXNzIE91dE9mTGluZUxpc3QgewpAQCAt
MTU0LDcgKzIwMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBkZWxldGVTdHJ1Y3R1cmVM
aXN0SWZOZWNlc3NhcnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFpc1RoaW4oKSkKKyAgICAgICAg
aWYgKCFpc1RoaW4oKSAmJiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKICAgICAgICAgICAg
IE91dE9mTGluZUxpc3Q6OmRlc3Ryb3koc3RydWN0dXJlTGlzdCgpKTsKICAgICB9CiAgICAgCkBA
IC0xODUsOSArMjMxLDEzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXQoYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlcyksIGZhbHNlKTsKICAgICB9CisgICAgdm9pZCBzZXRF
bXB0eSgpCisgICAgeworICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQogICAgIHZvaWQgc2V0
KHVpbnRwdHJfdCBwb2ludGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAg
IG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAwKSB8
IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOworICAgICAgICBtX3BvaW50ZXIgPSBwb2ludGVy
IHwgKHNpbmdsZVN0cnVjdHVyZSA/IHRoaW5GbGFnIDogMCk7CiAgICAgfQogCiAgICAgdWludHB0
cl90IG1fcG9pbnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTIwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDE2IEBAIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICB9CiAKICAgICAvLyBOZXh0IGNoZWNrIGlmIHdl
IGNhbiBmb2xkIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0IG9y
IHN0cmluZyBhbmQgZG9lcyBub3QgZXF1YWwgdW5kZWZpbmVkLgotICAgIGlmIChpc0NlbGxTcGVj
dWxhdGlvbih2YWx1ZS5tX3R5cGUpCi0gICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmICgh
c3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkgIT0gU3RyaW5nVHlwZSkKKyAgICBpZiAoaXNDZWxsU3BlY3VsYXRp
b24odmFsdWUubV90eXBlKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkgeworICAgICAg
ICBib29sIGFsbFRydWUgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5t
X3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpKQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8o
KS50eXBlKCkgPT0gU3RyaW5nVHlwZSkgeworICAgICAgICAgICAgICAgIGFsbFRydWUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBpZiAoYWxsVHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKICAg
ICB9CiAgICAgCkBAIC0xNDU2LDcgKzE0NjEsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
aWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0g
ICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgdXNlIG9m
IG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIEdldEJ5SWRTdGF0
dXMgdGhlIGFiaWxpdHkKKyAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9u
IGEgU3RydWN0dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncworICAg
ICAgICAgICAgLy8gYWJpbGl0eSB0byBnZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgR2V0QnlJZFN0
YXR1cyBvdXQgb2YgQnl0ZUNvZGVQYXJzZXIgc28gdGhhdAorICAgICAgICAgICAgLy8gQ29uc3Rh
bnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm9ubHlTdHJ1Y3R1cmUoKSkg
ewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBzdHJ1Y3R1cmUs
CiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlm
aWVyTnVtYmVyKCldKTsKQEAgLTE1MDIsOCArMTUxMiwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5T
cGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQg
dGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgp
OwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9m
KHNldCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgaW50ZXJlc3RpbmcgdGhhdCB3ZSBj
b3VsZCBoYXZlIHByb3ZlbiB0aGF0IHRoZSBvYmplY3QgaGFzIGEgbGFyZ2VyIHN0cnVjdHVyZSBz
ZXQKKyAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRo
YXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hlY2sKKyAgICAgICAgLy8gbW9y
ZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KKyAgICAgICAgCisgICAgICAgIGlmICh2
YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMTUxMSwzMiArMTUyNSwxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIG1fc3RhdGUu
c2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAKLSAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUg
Y2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCi0g
ICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3Rh
bnQgZm9sZGluZyBwaGFzZSBzaG91bGQKLSAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRj
aHBvaW50IGluc3RlYWQuCi0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgJiYgdmFsdWUubV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwgdmFsdWUubV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1f
c3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgaWYgKCFm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkp
IHsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0Ns
ZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CiAg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9zdGF0
ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKQEAgLTE2MTcsOCArMTYxMiw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwot
ICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNl
dCkKLSAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KSkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkK
ICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJM
aW1pdCk7CkBAIC0xNjUxLDcgKzE2NDUsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwp
KTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAK
LSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVj
dHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNh
c2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBhbGwKKyAgICAgICAg
Ly8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVuIHdlIHNob3VsZCBzdHJlbmd0aCBy
ZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCisgICAgICAgIC8vIEdldEJ5T2Zmc2V0Lgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5
CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm9ubHlTdHJ1Y3R1cmUo
KSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsg
aS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKQEAgLTE2ODgsNyArMTY4
NiwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBz
aG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAotICAgICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8g
VGhpcyBzaG91bGQganVzdCBmaWx0ZXIgZG93biB0aGUgY2FzZXMgaW4gTXVsdGlQdXRCeU9mZnNl
dC4gSWYgdGhhdCByZXN1bHRzIGluIGVpdGhlcgorICAgICAgICAvLyBvbmUgY2FzZSwgb3Igbm90
aGluZyBidXQgcmVwbGFjZSBjYXNlcyBhbmQgdGhleSBoYXZlIHRoZSBzYW1lIG9mZnNldCwgdGhl
biB3ZSBzaG91bGQKKyAgICAgICAgLy8ganVzdCBzdHJlbmd0aCByZWR1Y2UgaXQgdG8gdGhlIGFw
cHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9mIENoZWNrU3RydWN0dXJlLAorICAgICAgICAvLyBbUmVd
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIFB1dFN0cnVjdHVyZSwgYW5kIFB1dEJ5T2Zmc2V0Lgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5
CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm9ubHlTdHJ1Y3R1cmUo
KSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsg
aS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
bm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKQEAgLTE3MjEsMTIgKzE3
MjQsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAg
ICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHZh
cmlhbnQuc3RydWN0dXJlKCkpKQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVy
ZS5jb250YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKICAgICAgICAgICAgICAgICAgICAgbmV3
U2V0LmFkZCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbik7Ci0gICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisgICAgICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSkpCiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTE3NjcsNyArMTc3MCwxMiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAg
Y2FzZSBQdXRCeUlkRGlyZWN0OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5i
ZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8gVGhpcyB1c2Ugb2Ygb25seVN0cnVj
dHVyZSgpIHNob3VsZCBiZSByZXBsYWNlZCBieSBnaXZpbmcgUHV0QnlJZFN0YXR1cyB0aGUgYWJp
bGl0eQorICAgICAgICAvLyB0byBjb21wdXRlIHRoaW5ncyBiYXNlZCBvbiBhIFN0cnVjdHVyZVNl
dCwgYW5kIHRoZW4gdG8gZmFjdG9yIEJ5dGVDb2RlUGFyc2VyJ3MKKyAgICAgICAgLy8gYWJpbGl0
eSB0byBnZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgUHV0QnlJZFN0YXR1cyBvdXQgb2YgQnl0ZUNv
ZGVQYXJzZXIgc28gdGhhdAorICAgICAgICAvLyBDb25zdGFudEZvbGRpbmdQaGFzZSBjYW4gdXNl
IGl0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBz
dGF0dXMgPSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3Jh
cGgubV92bSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw4ICsz
Nyw5IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0TW9zdFNwZWNpZmljKEdyYXAKIHsKICAgICBp
ZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgbV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0
dXJlKGdyYXBoLCBzdHJ1Y3R1cmUpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgZ3JhcGgud2F0Y2hwb2lu
dHMoKS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IGFz
QXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwpAQCAtNTAsNiArNTEsNyBAQCB2
b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiAgICAgbV92YWx1ZSA9IHZh
bHVlOwogICAgICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRj
aGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBK
U1ZhbHVlIHZhbHVlKQpAQCAtNTcsMTIgKzU5LDEyIEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0
KEdyYXBoJiBncmFwaCwgSlMKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewog
ICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICBz
ZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwgc3RydWN0dXJlKTsKKyAgICAgICAgaWYg
KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBh
c0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIGNsb2JiZXJB
cnJheU1vZGVzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuY2xlYXIoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOwor
ICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwog
ICAgIH0KICAgICAKQEAgLTcwLDE3ICs3MiwxOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChH
cmFwaCYgZ3JhcGgsIEpTCiAgICAgbV92YWx1ZSA9IHZhbHVlOwogICAgIAogICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOwogfQogCiB2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IG1fY3VycmVudEtub3duU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIHNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKGdyYXBoLCBzdHJ1Y3R1cmUpOworICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOwogICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKTsKICAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJl
KTsKICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6
OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24pCkBAIC0x
MjksMTggKzEzMiwxNSBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihH
CiAgICAgCiAgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsK
ICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7Ci0g
ICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKKyAgICBtX3N0cnVjdHVy
ZS5maWx0ZXIob3RoZXIpOwogICAgIAogICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBwcmlvciB0
byB0aGUgYWJvdmUgdHdvIHN0YXRlbWVudHMgd2UgaGFkIChGb28sIFRPUCksIHdoZXJlCiAgICAg
Ly8gRm9vIGlzIGEgU3BlY3VsYXRlZFR5cGUgdGhhdCBpcyBkaXNqb2ludCB3aXRoIHRoZSBwYXNz
ZWQgU3RydWN0dXJlU2V0LiBJbiB0aGF0CiAgICAgLy8gY2FzZSwgd2Ugd2lsbCBub3cgaGF2ZSAo
Tm9uZSwgW3NvbWVTdHJ1Y3R1cmVdKS4gSW4gZ2VuZXJhbCwgd2UgbmVlZCB0byBtYWtlCiAgICAg
Ly8gc3VyZSB0aGF0IG5ldyBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gdGhlIFNwZWN1bGF0ZWRU
eXBlIG5lZWRzIHRvIGJlIGZlZCBiYWNrCiAgICAgLy8gaW50byB0aGUgaW5mb3JtYXRpb24gZ2xl
YW5lZCBmcm9tIHRoZSBTdHJ1Y3R1cmVTZXQuCi0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
ZmlsdGVyKG1fdHlwZSk7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CiAgICAgCi0g
ICAgaWYgKG1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICBz
ZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
c2luZ2xldG9uKCkpOwotICAgICAgICAKICAgICBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAg
ICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eSgpOwpA
QCAtMTY5LDggKzE2OSw3IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
KFMKICAgICAvLyB0aGUgcGFzc2VkIHR5cGUgaXMgQXJyYXkuIEF0IHRoaXMgcG9pbnQgd2UnbGwg
aGF2ZSAoTm9uZSwgVE9QKS4gVGhlIGJlc3Qgd2F5CiAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhl
IHN0cnVjdHVyZSBmaWx0ZXJpbmcgZG9lcyB0aGUgcmlnaHQgdGhpbmcgaXMgdG8gZmlsdGVyIG9u
CiAgICAgLy8gdGhlIG5ldyB0eXBlIChOb25lKSByYXRoZXIgdGhhbiB0aGUgb25lIHBhc3NlZCAo
QXJyYXkpLgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwotICAg
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgbV9zdHJ1Y3R1
cmUuZmlsdGVyKHR5cGUpOwogICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0
ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHJldHVybiBub3JtYWxpemVDbGFyaXR5KCk7CkBAIC0yMzgs
OCArMjM3LDcgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKCkgY29ucwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBpZiAoIShtX3R5cGUgJiB+U3BlY0NlbGwpCi0g
ICAgICAgICYmICghbV9hcnJheU1vZGVzCi0gICAgICAgICAgICB8fCBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc0NsZWFyKCkpKQorICAgICAgICAmJiAoIW1fYXJyYXlNb2RlcyB8fCBtX3N0cnVj
dHVyZS5pc0NsZWFyKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0yNjcsOCArMjY1LDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVl
Ojpub3JtYWxpegogdm9pZCBBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QK
IHsKICAgICBpZiAoIShtX3R5cGUgJiBTcGVjQ2VsbCkpIHsKLSAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7Ci0gICAgICAgIEFTU0VSVChtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzQ2xlYXIoKSk7CisgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS5p
c0NsZWFyKCkpOwogICAgICAgICBBU1NFUlQoIW1fYXJyYXlNb2Rlcyk7CiAgICAgfQogICAgIApA
QCAtMjg5LDYgKzI4NiwxMSBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3ko
KSBjCiAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBnZXQgcGVkYW50aWMgYWJvdXQgdGhpcyBhcyBp
dCB3b3VsZCBvbmx5IGluY3JlYXNlIHRoZSBjb21wdXRhdGlvbmFsCiAgICAgLy8gY29tcGxleGl0
eSBvZiB0aGUgY29kZS4KIH0KKwordm9pZCBBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQo
R3JhcGgmIGdyYXBoKSBjb25zdAoreworICAgIG1fc3RydWN0dXJlLmFzc2VydElzV2F0Y2hlZChn
cmFwaCk7Cit9CiAjZW5kaWYKIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CkBAIC0zMDIsOCArMzA0LDcgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1w
SW5Db250ZXh0KFByaW50UwogICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICBv
dXQucHJpbnQoCiAgICAgICAgICAgICAiLCAiLCBBcnJheU1vZGVzRHVtcChtX2FycmF5TW9kZXMp
LCAiLCAiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY3VycmVudEtub3duU3RydWN0dXJlLCBj
b250ZXh0KSwgIiwgIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLCBjb250ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNv
bnRleHQpKTsKICAgICB9CiAgICAgaWYgKCEhbV92YWx1ZSkKICAgICAgICAgb3V0LnByaW50KCIs
ICIsIGluQ29udGV4dChtX3ZhbHVlLCBjb250ZXh0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUzLDggKzUzLDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAg
bV90eXBlID0gU3BlY05vbmU7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7Ci0gICAgICAgIG1f
Y3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAg
bV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0K
QEAgLTc1LDEwICs3NCwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgdm9pZCBjbG9i
YmVyU3RydWN0dXJlcygpCiAgICAgewogICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsK
LSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlLmNsb2JiZXIoKTsKICAgICAgICAgICAgIGNsb2JiZXJBcnJheU1vZGVz
KCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0Ns
ZWFyKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFtX2FycmF5TW9kZXMpOwogICAgICAgICB9CiAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKQEAgLTkxLDcgKzkwLDEwIEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICAKICAgICBib29sIGlzSGVhcFRvcCgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gKG1fdHlwZSB8IFNwZWNIZWFwVG9wKSA9PSBtX3R5cGUgJiYgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNUb3AoKSAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzVG9w
KCk7CisgICAgICAgIHJldHVybiAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZQorICAg
ICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUuaXNUb3AoKQorICAgICAgICAgICAgJiYgbV9hcnJheU1v
ZGVzID09IEFMTF9BUlJBWV9NT0RFUworICAgICAgICAgICAgJiYgIW1fdmFsdWU7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgdmFsdWVJc1RvcCgpIGNvbnN0CkBAIC0xMTgsMTIgKzEyMCwxMCBAQCBz
dHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgdm9pZCBzZXRUeXBlKFNwZWN1bGF0ZWRUeXBlIHR5
cGUpCiAgICAgewogICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VU
b3AoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAg
ICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsK
ICAgICAgICAgfQogICAgICAgICBtX3R5cGUgPSB0eXBlOwpAQCAtMTM4LDggKzEzOCw3IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtX3R5cGUgPT0gb3Ro
ZXIubV90eXBlCiAgICAgICAgICAgICAmJiBtX2FycmF5TW9kZXMgPT0gb3RoZXIubV9hcnJheU1v
ZGVzCi0gICAgICAgICAgICAmJiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9PSBvdGhlci5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZQotICAgICAgICAgICAgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZSA9PSBvdGhlci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlCisgICAgICAgICAgICAmJiBt
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQogICAgICAgICAgICAgJiYgbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC0xNjIsOCArMTYxLDcgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlU3Bl
Y3VsYXRpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOwogICAgICAgICAgICAgcmVzdWx0IHw9IG1l
cmdlQXJyYXlNb2RlcyhtX2FycmF5TW9kZXMsIG90aGVyLm1fYXJyYXlNb2Rlcyk7Ci0gICAgICAg
ICAgICByZXN1bHQgfD0gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJlc3VsdCB8PSBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmFkZEFsbChvdGhlci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlKTsKKyAg
ICAgICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5tZXJnZShvdGhlci5tX3N0cnVjdHVyZSk7
CiAgICAgICAgICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9ICEhbV92YWx1ZTsKICAgICAgICAgICAgICAgICBtX3ZhbHVlID0gSlNW
YWx1ZSgpOwpAQCAtMTc5LDggKzE3Nyw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIHR5cGUpOwogICAgICAgICAKICAgICAgICAgaWYg
KHR5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
bWFrZVRvcCgpOwotICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBtX2Fy
cmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0KICAgICAgICAgbV92YWx1ZSA9
IEpTVmFsdWUoKTsKQEAgLTIyNSw3NSArMjIyLDMwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIEFT
U0VSVChtX3R5cGUgJiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAg
JiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCisgICAgICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQogICAgICAgICAgICAg
ICAgICYmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgCi0gICAgU3RydWN0dXJlKiBiZXN0UHJvdmVuU3RydWN0dXJlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAg
ICAgICAgaWYgKG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaGFzQ2xvYmJlcmFibGVTdGF0
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aXNOZWl0aGVyQ2xlYXJOb3JUb3AoKQorICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuaXNOZWl0
aGVyQ2xlYXJOb3JUb3AoKQogICAgICAgICAgICAgfHwgIWFycmF5TW9kZXNBcmVDbGVhck9yVG9w
KG1fYXJyYXlNb2Rlcyk7CiAgICAgfQogICAgIAogI2lmIEFTU0VSVF9ESVNBQkxFRAogICAgIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0IHsgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVk
KEdyYXBoJikgY29uc3QgeyB9CiAjZWxzZQogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNv
bnN0OworICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CiAjZW5kaWYKICAg
ICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNv
bnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIC8vIEEg
Z3JlYXQgd2F5IHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUgYW5kCi0gICAgLy8gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBpcyB0
byBjb25zaWRlciB0aGVzZSBmb3VyIGV4YW1wbGVzOgotICAgIC8vCi0gICAgLy8gMSkgeCA9IGZv
bygpOwotICAgIC8vCi0gICAgLy8gICAgSW4gdGhpcyBjYXNlIHgncyBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZSBhbmQgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsCi0gICAgLy8gICAgYm90
aCBiZSBUT1AsIHNpbmNlIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgeCBmb3Igc3VyZSwg
eWV0LgotICAgIC8vCi0gICAgLy8gMikgeCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0g
ICAgLy8KLSAgICAvLyAgICBXaGVyZSB4IHdpbGwgbGF0ZXIgaGF2ZSBhIG5ldyBwcm9wZXJ0eSBh
ZGRlZCB0byBpdCwgJ2cnLiBCZWNhdXNlIG9mIHRoZQotICAgIC8vICAgIGtub3duIGJ1dCBub3Qt
eWV0LWV4ZWN1dGVkIHByb3BlcnR5IGFkZGl0aW9uLCB4J3MgY3VycmVudCBzdHJ1Y3R1cmUgd2ls
bAotICAgIC8vICAgIG5vdCBiZSB3YXRjaHBvaW50YWJsZTsgaGVuY2Ugd2UgaGF2ZSBubyB3YXkg
b2Ygc3RhdGljYWxseSBib3VuZGluZyB0aGUgc2V0Ci0gICAgLy8gICAgb2YgcG9zc2libGUgc3Ry
dWN0dXJlcyB0aGF0IHggbWF5IGhhdmUgaWYgYSBjbG9iYmVyaW5nIGV2ZW50IGhhcHBlbnMuIFNv
LAotICAgIC8vICAgIHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVy
IHN0cnVjdHVyZSB3ZSBjaGVjayB0byBnZXQKLSAgICAvLyAgICBwcm9wZXJ0eSAnZicsIGFuZCBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgVE9QLgotICAgIC8vCi0gICAgLy8gMykg
eCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8KLSAgICAvLyAgICBXaGVyZSB4
IGhhcyBhIHRlcm1pbmFsIHN0cnVjdHVyZSB0aGF0IGlzIHN0aWxsIHdhdGNocG9pbnRhYmxlLiBJ
biB0aGlzIGNhc2UsCi0gICAgLy8gICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZCBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYm90aCBiZQotICAgIC8vICAgIHdoYXRldmVy
IHN0cnVjdHVyZSB3ZSBjaGVja2VkIGZvciB3aGVuIGdldHRpbmcgJ2YnLgotICAgIC8vCi0gICAg
Ly8gNCkgeCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8gICAgYmFyKCk7Ci0g
ICAgLy8KLSAgICAvLyAgICBXaGVyZSB4IGhhcyBhIHRlcm1pbmFsIHN0cnVjdHVyZSB0aGF0IGlz
IHN0aWxsIHdhdGNocG9pbnRhYmxlLiBJbiB0aGlzCi0gICAgLy8gICAgY2FzZSwgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUgd2lsbCBiZSBUT1AgYmVjYXVzZSBiYXIoKSBtYXkgcG90ZW50aWFsbHkK
LSAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJv
dmluZyBvdGhlcndpc2UsIGJ1dAotICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCi0gICAgLy8gICAg
d2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KLSAgICAKLSAgICAvLyBOQi4gQWxsIGZpZWxkcyBp
biB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KLQogICAgIC8vIFRo
aXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFs
dWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJl
bnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5CiAgICAgLy8gYmUg
VE9QLCBpbmRpY2F0aW5nIHRoYXQgaXQgaXMgdGhlIHNldCBvZiBhbGwgcG9zc2libGUgc3RydWN0
dXJlcywgaW4gd2hpY2gKQEAgLTMwMSwyOSArMjUzLDEyIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAvLyBpbiB3aGljaCBjYXNlIHRoaXMgdmFsdWUgY2Fubm90IGJlIGEgY2VsbC4gVGhp
cyBpcyBhbGwgc3ViamVjdCB0byBjaGFuZ2UKICAgICAvLyBhbnl0aW1lIGEgbmV3IHZhbHVlIGlz
IGFzc2lnbmVkIHRvIHRoaXMgb25lLCBhbnl0aW1lIHRoZXJlIGlzIGEgY29udHJvbCBmbG93CiAg
ICAgLy8gbWVyZ2UsIG9yIG1vc3QgY3J1Y2lhbGx5LCBhbnl0aW1lIGEgc2lkZS1lZmZlY3Qgb3Ig
c3RydWN0dXJlIGNoZWNrIGhhcHBlbnMuCi0gICAgLy8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0
LCB3ZSB0eXBpY2FsbHkgbXVzdCBhc3N1bWUgdGhhdCBhbnkgdmFsdWUgbWF5IGhhdmUKLSAgICAv
LyBoYWQgaXRzIHN0cnVjdHVyZSBjaGFuZ2VkLCBoZW5jZSBjb250cmF2ZW5pbmcgb3VyIHByb29m
LiBXZSBtYWtlIHRoZSBwcm9vZgotICAgIC8vIHZhbGlkIGFnYWluIGJ5IHN3aXRjaGluZyB0aGlz
IHRvIFRPUCAoaS5lLiBjbGFpbWluZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQKLSAgICAvLyB0
aGlzIHZhbHVlIG1heSBoYXZlIGFueSBzdHJ1Y3R1cmUpLiBPZiBub3RlIGlzIHRoYXQgdGhlIHBy
b29mIHJlcHJlc2VudGVkIGJ5Ci0gICAgLy8gdGhpcyBmaWVsZCBpcyBub3Qgc3ViamVjdCB0byBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyAtIGV2ZW4gaWYgb25lCi0gICAgLy8gZmly
ZXMsIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhpcyBwcm9vZiBpcyBzdGlsbCB2YWxpZC4KLSAgICBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fY3VycmVudEtub3duU3RydWN0dXJlOwotICAgIAotICAg
IC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRo
aXMgdmFsdWUgY2FuIGhhdmUgbm93Ci0gICAgLy8gb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZSBz
dWJqZWN0IHRvIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvZgotICAgIC8v
IGFsbCBtZW1iZXJzIG9mIHRoaXMgc2V0IG5vdCBoYXZpbmcgZmlyZWQuIFRoaXMgc2V0IGlzIGlt
cGVydmlvdXMgdG8gc2lkZS0KLSAgICAvLyBlZmZlY3RzOyBldmVuIGlmIG9uZSBoYXBwZW5zIHRo
ZSBzaWRlLWVmZmVjdCBjYW4gb25seSBjYXVzZSB0aGUgdmFsdWUgdG8KLSAgICAvLyBjaGFuZ2Ug
dG8gYXQgd29yc3QgYW5vdGhlciBzdHJ1Y3R1cmUgdGhhdCBpcyBhbHNvIGEgbWVtYmVyIG9mIHRo
aXMgc2V0LiBCdXQsCi0gICAgLy8gdGhlIHRoZW9yZW0gYmVpbmcgcHJvdmVkIGJ5IHRoaXMgZmll
bGQgaXMgcHJlZGljYXRlZCB1cG9uIHRoZXJlIG5vdCBiZWluZwotICAgIC8vIGFueSBuZXcgc3Ry
dWN0dXJlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgaW50byBhbnkgbWVtYmVycyBvZiB0aGlzIHNl
dC4gSW4KLSAgICAvLyBjYXNlcyB3aGVyZSB0aGVyZSBpcyBubyB3YXkgZm9yIHVzIHRvIGd1YXJk
IHRoaXMgaGFwcGVuaW5nLCB0aGUgc2V0IG11c3QgYmUKLSAgICAvLyBUT1AuIEJ1dCBpbiBjYXNl
cyB3aGVyZSB3ZSBjYW4gZ3VhcmQgbmV3IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAoYWxsIG1lbWJl
cnMKLSAgICAvLyBvZiB0aGUgc2V0IGhhdmUgc3RpbGwtdmFsaWQgc3RydWN0dXJlIHRyYW5zaXRp
b24gd2F0Y2hwb2ludHMpIHRoZW4gdGhpcyBzZXQKLSAgICAvLyB3aWxsIGJlIGZpbml0ZS4gQW55
dGltZSB0aGF0IHdlIG1ha2UgdXNlIG9mIHRoZSBmaW5pdGUgbmF0dXJlIG9mIHRoaXMgc2V0LAot
ICAgIC8vIHdlIG11c3QgZmlyc3QgaXNzdWUgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBv
aW50LCB3aGljaCB3aWxsIGVmZmVjdGl2ZWx5Ci0gICAgLy8gcmVzdWx0IGluIG1fY3VycmVudEtu
b3duU3RydWN0dXJlIGJlaW5nIGZpbHRlcmVkIGFjY29yZGluZyB0bwotICAgIC8vIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlOworICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVjdCwgd2UgbXVz
dCBhc3N1bWUgdGhhdCBhbnkgdmFsdWUgd2l0aCBhIHN0cnVjdHVyZSB0aGF0CisgICAgLy8gaXNu
J3QgYmVpbmcgd2F0Y2hlZCBtYXkgaGF2ZSBoYWQgaXRzIHN0cnVjdHVyZSBjaGFuZ2VkLCBoZW5j
ZSBjb250cmF2ZW5pbmcKKyAgICAvLyBvdXIgcHJvb2YuIEluIHN1Y2ggYSBjYXNlIHdlIG1ha2Ug
dGhlIHByb29mIHZhbGlkIGFnYWluIGJ5IHN3aXRjaGluZyB0aGlzIHRvCisgICAgLy8gVE9QIChp
LmUuIGNsYWltaW5nIHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGlzIHZhbHVlIG1heSBoYXZl
IGFueQorICAgIC8vIHN0cnVjdHVyZSkuCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX3N0
cnVjdHVyZTsKICAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhl
IHBvc3NpYmxlIHR5cGVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZQogICAgIC8vIG5vdyBvciBh
bnkgdGltZSBpbiB0aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gVGhpcyBmaWVs
ZCBpcwpAQCAtMzMyLDExICsyNjcsMTEgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8v
IGJldHdlZW4gdGhpcyBmaWVsZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIGFib3ZlLCBpcyBh
cyBmb2xsb3dzLiBUaGUKICAgICAvLyBmaWVsZHMgYWJvdmUgY29uc3RyYWludCB0aGUgc3RydWN0
dXJlcyB0aGF0IGEgY2VsbCBtYXkgaGF2ZSwgYnV0IHRoZXkgc2F5CiAgICAgLy8gbm90aGluZyBh
Ym91dCB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgYSBjZWxsLiBNb3Jl
IGZvcm1hbGx5LAotICAgIC8vIHRoZSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBpcyBpdHNlbGYg
YW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKKyAgICAvLyB0aGUgbV9zdHJ1
Y3R1cmUgaXMgaXRzZWxmIGFuIGFic3RyYWN0IHZhbHVlIHRoYXQgY29uc2lzdHMgb2YgdGhlCiAg
ICAgLy8gdW5pb24gb2YgdGhlIHNldCBvZiBhbGwgbm9uLWNlbGwgdmFsdWVzIGFuZCB0aGUgc2V0
IG9mIGNlbGwgdmFsdWVzIHRoYXQgaGF2ZQogICAgIC8vIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuIFRo
aXMgYWJzdHJhY3QgdmFsdWUgaXMgdGhlbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZQotICAgIC8v
IG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZCB0aGUgc2V0IG9mIHZhbHVlcyB3aG9zZSB0eXBl
IGlzIG1fdHlwZS4gU28sIGZvcgotICAgIC8vIGV4YW1wbGUgaWYgbV90eXBlIGlzIFNwZWNGaW5h
bHxTcGVjSW50MzIgYW5kIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzCisgICAgLy8gbV9zdHJ1
Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUgaXMgbV90eXBlLiBTbywgZm9y
CisgICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQzMiBhbmQgbV9z
dHJ1Y3R1cmUgaXMKICAgICAvLyBbMHgxMjM0NV0gdGhlbiB0aGlzIGFic3RyYWN0IHZhbHVlIGNv
cnJlc3BvbmRzIHRvIHRoZSBzZXQgb2YgYWxsIGludGVnZXJzCiAgICAgLy8gdW5pZmllZCB3aXRo
IHRoZSBzZXQgb2YgYWxsIG9iamVjdHMgd2l0aCBzdHJ1Y3R1cmUgMHgxMjM0NS4KICAgICBTcGVj
dWxhdGVkVHlwZSBtX3R5cGU7CkBAIC0zOTEsMTQgKzMyNiwxMSBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgbV90eXBlIHw9IHRvcDsKICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZ
X01PREVTOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAg
ICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBtX3N0cnVj
dHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKLQogICAgIHZvaWQgZmls
dGVyVmFsdWVCeVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNp
b24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYWxsb2Nh
dGUoKTsgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9pZCB1c2luZyB0
aGlzIG1ldGhvZC4KICAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGRl
bGV0ZTsgbmV2ZXIgdXNlICdkZWxldGUnIGRpcmVjdGx5LgogICAgIAotICAgIHZvaWQgZnJlZUFs
bCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAg
ICB2b2lkIGZyZWVBbGwoKTsgLy8gT25seSBjYWxsIHRoaXMgaWYgeW91J3ZlIGVpdGhlciBmcmVl
ZCBldmVyeXRoaW5nIG9yIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgogICAgIHZvaWQg
cmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0
byB0aGUgT1MuCiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXhPZihjb25zdCBUKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDI3ICs5Nywx
MiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUo
KTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUt
PnN0cnVjdHVyZVNldCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUu
bV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW50
ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdl
IG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRv
UGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZVZhbHVlID0gdmFsdWUubV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlVmFsdWUuaXNT
dWJzZXRPZihzZXQpCi0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVZhbHVlLmhhc1Np
bmdsZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW50ZXJw
cmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1h
eSBmaWx0ZXIgb24gY2VsbC4KLSAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGls
ZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwotICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5yZW1v
dmVFZGdlKDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZHJlbi5jaGlsZDEoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+b3JpZ2luLCBjaGlsZHJlbik7Ci0gICAg
ICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdlKCkpOwotICAgICAg
ICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSgpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQo
c3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTE1Niw3ICsxNDEs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5v
ZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApA
QCAtMTgwLDcgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQg
PSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRh
JiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVu
U3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAg
ICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCkBAIC0yMDUsNyArMTkwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yMzIsNyArMjE3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hp
bGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVz
dFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIApAQCAtMzI5LDcgKzMxNCw2IEBAIHByaXZhdGU6CiAgICAgICAg
IEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgIE5vZGUqIGNoaWxkID0g
Y2hpbGRFZGdlLm5vZGUoKTsKIAotICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2ludCA9ICFtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
OwogICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5t
X3R5cGUgJiB+U3BlY0NlbGw7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2hh
aW4oKSk7CkBAIC0zNDAsMTEgKzMyNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGRvIGFueSBl
bGltaW5hdGlvbnMuCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2sp
OwogICAgICAgICAKLSAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewotICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAg
ICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICB9IGVsc2Ug
aWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAgICAgIGlmIChuZWVkc0NlbGxDaGVjaykgewogICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAg
IH0KQEAgLTM4MSw3ICszNjEsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIEFTU0VSVCh2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSk7CiAgICAgICAgIAotICAgICAgICBib29sIG5l
ZWRzV2F0Y2hwb2ludCA9ICFtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpOwogICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7CiAgICAgICAgIAogICAgICAg
ICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJk
IG92ZXIgdGhlIFB1dEJ5SWQKQEAgLTM4OSwxMSArMzY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
Ly8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGlu
ZGV4SW5CbG9jayk7CiAKLSAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewotICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAg
ICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICB9IGVs
c2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAgICAgIGlmIChuZWVkc0NlbGxDaGVjaykgewog
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVk
V2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcs
OSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKICAgICB7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBtX3Byb2ZpbGVkU2V0cy5hZGQoc2V0KTsKKyNl
bmRpZgogICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hwb2ludHMuYXBwZW5kKAogICAgICAgICAgICAg
V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPihjb2Rl
T3JpZ2luLCBleGl0S2luZCwgc2V0KSk7CiAgICAgfQpAQCAtMTcyLDExICsxNzUsMTcgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzZXQpIHx8IHNob3VsZEFz
c3VtZU1peGVkU3RhdGUoc2V0KTsKICAgICB9CisgICAgCisgICAgdm9pZCBhc3NlcnRJc1dhdGNo
ZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X3NldHMuY29udGFpbnMoc2V0KSB8fCBtX3Byb2ZpbGVkU2V0cy5jb250YWlucyhTZXQpKTsKKyAg
ICB9CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2lu
dFNldDxXYXRjaHBvaW50U2V0VHlwZT4+IG1fcHJvZmlsZWRXYXRjaHBvaW50czsKICAgICBIYXNo
U2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9zZXRzOwogI2lmICFBU1NFUlRfRElTQUJMRUQKKyAg
ICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9wcm9maWxlZFNldHM7CiAgICAgU3RhdGVN
YXAgbV9maXJzdEtub3duU3RhdGU7CiAjZW5kaWYKICAgICBib29sIG1fcmVhbGx5QWRkZWQ7CkBA
IC0yMzMsNiArMjQyLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZl
clZpZXdzLmlzVmFsaWRPck1peGVkKHZpZXcpOwogICAgIH0KKyAgICB2b2lkIGFzc2VydElzV2F0
Y2hlZChXYXRjaHBvaW50U2V0KiBzZXQpCisgICAgeworICAgICAgICBtX3NldHMuYXNzZXJ0SXNX
YXRjaGVkKHNldCk7CisgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKElubGluZVdhdGNo
cG9pbnRTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1faW5saW5lU2V0cy5hc3NlcnRJc1dhdGNo
ZWQoJnNldCk7CisgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEpTQXJyYXlCdWZmZXJW
aWV3KiB2aWV3KQorICAgIHsKKyAgICAgICAgbV9idWZmZXJWaWV3cy5hc3NlcnRJc1dhdGNoZWQo
dmlldyk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9p
bnRzPFdhdGNocG9pbnRTZXQ+IG1fc2V0czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTYgQEAgR3JhcGg6
OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogCiBHcmFwaDo6fkdyYXBoKCkKIHsK
KyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG51bUJsb2NrcygpOyBibG9ja0luZGV4
LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRl
eCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0t
OykKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5k
ZXgtLTspCisgICAgICAgICAgICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgp
KTsKKyAgICB9CiAgICAgbV9hbGxvY2F0b3IuZnJlZUFsbCgpOwogfQogCkBAIC04NjMsNiArODcz
LDMxIEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5VmFsdWUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkp
OworICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IHZhcmlhbnQuc3RydWN0
dXJlU2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHNldC5zaXpl
KCk7IGotLTspCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9u
J3QgbmVlZCB0byBtYXJrIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0
aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGlu
dG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byBtYXJrIHRoZQorICAgICAgICAgICAg
ICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdl
dEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMg
ZGlkIHRoYXQuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmNhbGxMaW5rU3Rh
dHVzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ld
OworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQ
b2ludGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZh
cmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNs
dWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNp
bmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJE
RkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAi
T3BlcmFuZHNJbmxpbmVzLmgiCkBAIC0yMzMsNiArMjM0LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25Q
YXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihk
ZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3Jt
Rml4dXAoZGZnKTsKKyAgICBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoZGZnKTsK
ICAgICBwZXJmb3JtSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oZGZnKTsKICAgICBwZXJmb3Jt
VHlwZUNoZWNrSG9pc3RpbmcoZGZnKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6bWFrZVRvcCgpCit7CisgICAgbV9zZXQuZGVsZXRlU3RydWN0dXJlTGlzdElm
TmVjZXNzYXJ5KCk7CisgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7Cit9CisKK2Jvb2wg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29u
c3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGF0KGkpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdy
YXBoLndhdGNocG9pbnRzKCkuYXNzZXJ0SXNXYXRjaGVkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXQoKSk7CisgICAgfQorfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmNsb2JiZXIoKQoreworICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMgYXBwcm9hY2ggdG8gY2xv
YmJlcmluZyBpcyB0aGF0IGFueXRpbWUgd2UgaW50cm9kdWNlCisgICAgLy8gYSB3YXRjaGFibGUg
c3RydWN0dXJlIGludG8gYW4gYWJzdHJhY3QgdmFsdWUsIHdlIHdhdGNocG9pbnQgaXQuIFlvdSBj
YW4gYXNzZXJ0CisgICAgLy8gdGhhdCB0aGlzIGhvbGRzIGJ5IGNhbGxpbmcgYXNzZXJ0SXNXYXRj
aGVkKCkuCisgICAgICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgIGlmIChtX3NldC5pc1RoaW4oKSkgeworICAgICAgICBpZiAoIW1fc2V0LnNpbmds
ZVN0cnVjdHVyZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9zZXQuc2lu
Z2xlU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVk
KCkpCisgICAgICAgICAgICBtYWtlVG9wV2hlblRoaW4oKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAgICAgCisgICAgU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0ID0gbV9z
ZXQuc3RydWN0dXJlTGlzdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3QtPm1fbGVuZ3Ro
OyBpLS07KSB7CisgICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0tPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzVG9w
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZChzdHJ1
Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUo
KSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICghbV9zZXQubWVyZ2Uob3RoZXIpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0
KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKKyAgICAgICAgbWFrZVRvcCgp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1lcmdlKG90
aGVyLm1fc2V0KTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgbV9z
ZXQgPSBvdGhlcjsKKyAgICBlbHNlCisgICAgICAgIG1fc2V0LmZpbHRlcihvdGhlcik7Cit9CisK
K3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUmIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgZmlsdGVyKG90aGVyLm1fc2V0KTsKK30KKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgQ29uZm9ybXNUb1R5cGUgeworcHVibGljOgorICAgIENvbmZvcm1zVG9UeXBlKFNwZWN1
bGF0ZWRUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkgJiBtX3R5
cGUpOworICAgIH0KK3ByaXZhdGU6CisgICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOworfTsKKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgaWYgKCEodHlwZSAmIFNwZWNDZWxs
KSkgeworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgQ29uZm9ybXNUb1R5cGUg
Y29uZm9ybXNUb1R5cGUodHlwZSk7CisgICAgZ2VuZXJpY0ZpbHRlcihjb25mb3Jtc1RvVHlwZSk7
Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHJldHVybiBtX3NldC5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCitib29sIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
K3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJl
dHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQor
eworICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICByZXR1cm4gaXNTdWJzZXRPZihvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7Cisg
ICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBt
X3NldC5pc1N1cGVyc2V0T2Yob3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6Om92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KGlzVG9wKCkgfHwgb3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisg
ICAgcmV0dXJuIG1fc2V0Lm92ZXJsYXBzKG90aGVyLm1fc2V0KTsKK30KKworYm9vbCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
IG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3NldC5tX3BvaW50ZXIgPT0gb3RoZXIubV9zZXQu
bV9wb2ludGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXNUb3AoKSB8
fCBvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IG1fc2V0ID09IG90aGVyLm1fc2V0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2
OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywzMDAgKzM3
LDk4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpCi0g
ICAgICAgIDogbV9zdHJ1Y3R1cmUoMCkKLSAgICB7Ci0gICAgfQotICAgIAorICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUoKSB7IH0KICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAg
OiBtX3NldChzdHJ1Y3R1cmUpCiAgICAgewogICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICAgICAgOiBtX3NldChvdGhlcikK
ICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2V0LnNpemUoKSkgewotICAgICAgICBjYXNlIDA6Ci0g
ICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHNldFswXTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBtX3N0cnVjdHVyZSA9IHRvcFZhbHVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1f
c3RydWN0dXJlID0gMDsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBtYWtlVG9wKCkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUoKTsK
LSAgICB9Ci0gICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkKLSAg
ICB7Ci0gICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgIHZhbHVl
Lm1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KKyAgICB2b2lkIG1ha2VU
b3AoKTsKICAgICAKLSAgICB2b2lkIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVCghY29udGFpbnMoc3RydWN0dXJlKSAmJiAhaXNUb3AoKSk7Ci0gICAgICAg
IGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgfQorI2lmIEFTU0VSVF9E
SVNBQkxFRAorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3QgeyB9CisjZWxz
ZQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CisjZW5kaWYKICAgICAK
LSAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotICAgIHsKLSAgICAg
ICAgaWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAgIG1ha2VUb3Ao
KTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9z
dHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07Ci0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0g
b3RoZXJbMF0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1ha2VUb3AoKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIHZvaWQgY2xvYmJlcigpOwogICAgIAot
ICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAg
IHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCiAgICAgewotICAgICAgICBpZiAo
IW90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVy
LmlzVG9wKCkpIHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAg
aWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7
Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IHN0cnVjdHVyZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGJv
b2wgaXNDbGVhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
aXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3NldC5tX3BvaW50ZXIgPT0gdG9wVmFsdWU7IH0KKyAg
ICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xlYXIoKSAm
JiAhaXNUb3AoKTsgfQogICAgIAotICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKTsK
LSAgICB9CisgICAgYm9vbCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgIAotICAgIGJv
b2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOwotICAgIH0KKyAgICBib29sIG1l
cmdlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAgIGJvb2wgbWVyZ2UoY29uc3QgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKTsKKyAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKICAg
ICAKLSAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgaWYgKCFvdGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKLSAgICB9CisgICAgYm9vbCBj
b250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpc1N1
YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
IChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNv
bnN0OworICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBv
dGhlcikgY29uc3Q7CiAgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gb3RoZXIu
aXNTdWJzZXRPZigqdGhpcyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAg
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBtX3N0
cnVjdHVyZSA9IG90aGVyWzBdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3RoZXIuY29udGFp
bnMobV9zdHJ1Y3R1cmUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAg
bV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKSB7
Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5t
X3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9w
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgb3RoZXIpCi0gICAgewotICAg
ICAgICBpZiAoIShvdGhlciAmIFNwZWNDZWxsKSkgewotICAgICAgICAgICAgY2xlYXIoKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2xl
YXJPclRvcCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghKHNwZWN1bGF0
aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSkgJiBvdGhlcikpCi0gICAgICAgICAgICBtX3N0
cnVjdHVyZSA9IDA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBib29sIGlz
VG9wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gdG9wVmFsdWUoKTsgfQorICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CiAgICAgCi0gICAg
Ym9vbCBpc0NsZWFyT3JUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA8PSB0b3BWYWx1
ZSgpOyB9Ci0gICAgYm9vbCBpc05laXRoZXJDbGVhck5vclRvcCgpIGNvbnN0IHsgcmV0dXJuICFp
c0NsZWFyT3JUb3AoKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAgICAgcmV0dXJuICEhbV9zdHJ1
Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5zaXplKCk7CiAgICAgfQogICAgIAogICAgIFN0
cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzVG9w
KCkpOwotICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlRfVU5VU0VE
KGksICFpKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBT
dHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gYXQoaSk7CisgICAgICAgIHJldHVybiBtX3NldC5hdChpKTsKICAgICB9CiAgICAgCi0gICAg
U3RydWN0dXJlKiBsYXN0KCkgY29uc3QKKyAgICAvLyBGSVhNRTogRWxpbWluYXRlIGFsbCB1c2Vz
IG9mIHRoaXMgbWV0aG9kLiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55CisgICAgLy8gc3BlY2lhbC1j
YXNpbmcgZm9yIHRoZSBvbmUtc3RydWN0dXJlIGNhc2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgIFN0cnVjdHVyZSogb25seVN0cnVj
dHVyZSgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoc2l6ZSgpICE9IDEpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGF0KDApOwogICAgIH0KLSAgICAKLSAg
ICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIFNwZWNDZWxsOwotICAg
ICAgICBpZiAoaXNDbGVhcigpKQotICAgICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwotICAgICAg
ICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBpc1ZhbGlkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAgICB7
Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoaXNDbGVhcigpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIGhhc1NpbmdsZXRvbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNOZWl0aGVy
Q2xlYXJOb3JUb3AoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzaW5nbGV0b24oKSBj
b25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTmVpdGhlckNsZWFyTm9yVG9wKCkpOwotICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICB9Ci0gICAg
Ci0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBj
b250ZXh0KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAg
IG91dC5wcmludCgiVE9QIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIG91dC5wcmludCgiWyIpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0g
ICAgICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwot
ICAgICAgICBvdXQucHJpbnQoIl0iKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLSAg
ICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogdG9wVmFsdWUoKSB7IHJldHVy
biByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOyB9CisgICAgc3RhdGljIHVpbnRwdHJf
dCB0b3BWYWx1ZSA9IFN0cnVjdHVyZVNldDo6cmVzZXJ2ZWRWYWx1ZTsKKyAgICBzdGF0aWMgdW5z
aWduZWQgcG9seW1vcnBoaXNtTGltaXQgPSAxMDsKICAgICAKLSAgICAvLyBOQi4gVGhpcyBtdXN0
IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgdm9pZCBtYWtlVG9wV2hlblRoaW4oKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2V0LmlzVGhpbigpKTsKKyAgICAgICAgbV9zZXQubV9w
b2ludGVyID0gdG9wVmFsdWU7CisgICAgfQogICAgIAotICAgIC8vIFRoaXMgY2FuIG9ubHkgcmVt
ZW1iZXIgb25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCi0gICAgU3RydWN0dXJlKiBtX3N0cnVjdHVy
ZTsKKyAgICBTdHJ1Y3R1cmVTZXQgbV9zZXQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5n
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQ
aGFzZShncmFwaCwgIndhdGNoYWJsZSBzdHJ1Y3R1cmUgd2F0Y2hpbmciKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBudW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlm
ICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
bm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgICAg
ICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgor
ICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmV4
ZWN1dGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAg
ICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKKyAgICAgICAgICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAg
ICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAg
Y2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUt
PnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAg
Y2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5
V2F0Y2gobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBz
dHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5l
ZWQgdG8gd2F0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1
cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eVdhdGNoKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdHJ5V2F0Y2goSlNWYWx1ZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHRyeVdhdGNo
KHZhbHVlLmFzQ2VsbCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChKU0NlbGwq
IGNlbGwpCisgICAgeworICAgICAgICBpZiAoY2VsbCkKKyAgICAgICAgICAgIHRyeVdhdGNoKGNl
bGwtPnN0cnVjdHVyZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5z
aXplKCk7IGktLTspCisgICAgICAgICAgICB0cnlXYXRjaChzZXRbaV0pOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHRyeVdhdGNoKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
aWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAg
ICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1XYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24g
c2FtcGxpbmdSZWdpb24oIkRGRyBXYXRjaGFibGUgU3RydWN0dXJlIFdhdGNoaW5nIik7CisgICAg
cmV0dXJuIHJ1blBoYXNlPFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U+KGdyYXBoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1dhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2VfaAorI2RlZmluZSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIEdyYXBoOworCisvLyBTZXQgd2F0Y2hwb2ludHMgb24gYW55IHN0cnVj
dHVyZXMgdGhhdCB3ZSBrbm93IG9mIHRoYXQgYXJlIGN1cnJlbnRseSB3YXRjaGFibGUuIEl0J3MK
Ky8vIHNvbWV3aGF0IGNvdW50ZXJpbnR1aXRpdmUsIGJ1dCB0aGlzIGVuZHMgdXAgYmVpbmcgdGhl
IGNsZWFuZXN0IGFuZCBtb3N0IGVmZmVjdGl2ZSB3YXkKKy8vIG9mIHJlZHVjaW5nIHN0cnVjdHVy
ZSBjaGVja3Mgb24gdGVybWluYWwgc3RydWN0dXJlczoKKy8vCisvLyAtIFdlIHVzZWQgdG8gb25s
eSBzZXQgd2F0Y2hwb2ludHMgb24gd2F0Y2hhYmxlIHN0cnVjdHVyZXMgaWYgd2Uga25ldyB0aGF0
IHRoaXMgd291bGQKKy8vICAgcmVtb3ZlIGEgc3RydWN0dXJlIGNoZWNrLiBFeHBlcmltZW50cyBz
aG93IHRoYXQgc3dpdGNoaW5nIGZyb20gdGhhdCwgdG8gYmxpbmRseQorLy8gICBzZXR0aW5nIHdh
dGNocG9pbnRzIG9uIGFsbCB3YXRjaGFibGUgc3RydWN0dXJlcywgd2FzIG5vdCBhIHJlZ3Jlc3Np
b24uCisvLworLy8gLSBJdCBtYWtlcyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiBhIHdob2xlIGxv
dCBlYXNpZXIuIFdlIGp1c3QgYXNzdW1lIHRoYXQgd2F0Y2hhYmxlCisvLyAgIHN0cnVjdHVyZXMg
YXJlIHVuY2xvYmJlcmFibGUgd2l0aG91dCBoYXZpbmcgdG8gZG8gYW55IG90aGVyIGxvZ2ljLgor
Citib29sIHBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhHcmFwaCYpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2Vu
ZGlmIC8vIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxl
Y3Rpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExOSwxMyArMTE5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZExhemlseShqc0Nhc3Q8
SlNGdW5jdGlvbio+KG1fbm9kZS0+ZnVuY3Rpb24oKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hw
b2ludFNldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNh
c2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBtX2dyYXBoLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNl
bWFudGljLAotICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pT
Q29uc3RhbnQgPyBCYWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQgOiBCYWRDYWNoZVdhdGNo
cG9pbnQsCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIFZhcmlhYmxlV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGFkZExhemlseShtX25vZGUt
PnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232228</attachid>
            <date>2014-05-28 19:03:31 -0700</date>
            <delta_ts>2014-05-28 20:45:04 -0700</delta_ts>
            <desc>a bit more.</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79863</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk1LDYgKzQ5NSw4IEBACiAJCTBGQ0VGQURGMTgwNzM4
QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQURF
MTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDJENEZF
MTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJENEZD
MTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNw
cCAqLzsgfTsKKwkJMEZEMkQ0RkYxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRDJENEZEMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1
Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9
OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVC
MDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi87IH07CkBAIC0yMzEzLDYgKzIzMTUsOCBA
QAogCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTG9jYXRpb24uY3BwOyBwYXRoID0gZnRs
L0ZUTExvY2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREUx
ODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEZUTExvY2F0aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVj
dHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJl
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDRGQzE5MkZFRTU4
MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMkQ0RkQxOTJGRUU1ODAw
QTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5oOyBwYXRoID0gZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERG
R0RyaXZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2
ZXIuY3BwOyBwYXRoID0gZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1
MyAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxp
bmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODM4LDYgKzQ4NDIsOCBAQAog
CQkJCTBGMkJEQzQzMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmgg
Ki8sCiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFs
bG9jYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERG
R1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLAorCQkJCTBGRDJENEZDMTkyRkVF
NTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLywK
KwkJCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZS5oICovLAogCQkJCTBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkM5N0YzQzE4MjAyMTE5MDAyQzlC
MjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBGREIyQ0U1MTc0
ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCkBAIC01Nzc2LDYgKzU3ODIsNyBA
QAogCQkJCTBGNDg1MzI4MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFi
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJDIC8q
IEZUTENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEMkQ0RkYxOTJGRUU1ODAw
QTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBQzkyMkJDMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FS
RkRlYnVnTGluZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Niw2ICs2OTYzLDcgQEAKIAkJ
CQkwRkYwRjE5OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc2N0I1QjUxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFk
ZXJDcmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYw
MENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEMkQ0
RkUxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05h
dHVyYWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5
NUIgLyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBC
OUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDE2
OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIFN0cnVjdHVyZVNldCYgU3RydWN0dXJl
U2V0OjpvcGVyYXRvcj0oY28KIHZvaWQgU3RydWN0dXJlU2V0OjpjbGVhcigpCiB7CiAgICAgZGVs
ZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7Ci0gICAgc2V0KDAsIHRydWUpOworICAgIHNl
dEVtcHR5KCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlU2V0OjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC03NSw3ICs3NSw3IEBAIGJvb2wgU3RydWN0dXJlU2V0OjpyZW1vdmUoU3RydWN0dXJl
KiBzdHIKIHsKICAgICBpZiAoaXNUaGluKCkpIHsKICAgICAgICAgaWYgKHNpbmdsZVN0cnVjdHVy
ZSgpID09IHN0cnVjdHVyZSkgewotICAgICAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICAg
ICAgc2V0RW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTg4LDcgKzg4LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6OnJl
bW92ZShTdHJ1Y3R1cmUqIHN0cgogICAgICAgICBsaXN0LT5saXN0KClbaV0gPSBsaXN0LT5saXN0
KClbLS1saXN0LT5tX2xlbmd0aF07CiAgICAgICAgIGlmICghbGlzdC0+bV9sZW5ndGgpIHsKICAg
ICAgICAgICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3kobGlzdCk7Ci0gICAgICAgICAgICBzZXQo
MCwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRFbXB0eSgpOwogICAgICAgICB9CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTE0NCwyMyArMTQ0LDggQEAgdm9pZCBTdHJ1Y3R1cmVTZXQ6
OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAg
IGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUoc2luZ2xl
U3RydWN0dXJlKCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjbGVhcigpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1
Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKGxpc3QtPmxpc3Qo
KVtpXSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbGlzdC0+bGlzdCgpW2ktLV0g
PSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07Ci0gICAgfQotICAgIGlmICghbGlzdC0+
bV9sZW5ndGgpCi0gICAgICAgIGNsZWFyKCk7CisgICAgQ29udGFpbnNPdXRPZkxpbmUgY29udGFp
bnNPdXRPZkxpbmUob3RoZXIpOworICAgIGdlbmVyaWNGaWx0ZXIoY29udGFpbnNPdXRPZkxpbmUp
OwogfQogCiB2b2lkIFN0cnVjdHVyZVNldDo6ZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVT
ZXQuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTUgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTsKK30KKwogY2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVT
ZXQoKQogICAgIHsKLSAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICBzZXRFbXB0eSgpOwog
ICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02
Nyw3ICs3MSwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBpc1RoaW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAg
ICAgIGJvb2wgcmVzdWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOworICAgICAg
ICBpZiAocmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSByZXNlcnZlZFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhZGQo
U3RydWN0dXJlKik7CkBAIC03OCw2ICs4NSwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIo
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNl
dCYpOwogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBnZW5l
cmljRmlsdGVyKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAoaXNUaGluKCkp
IHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgaWYgKGZ1bmN0b3Ioc2luZ2xlU3RydWN0dXJlKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3Qg
PSBzdHJ1Y3R1cmVMaXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0
LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5saXN0KClb
aV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+bGlzdCgp
W2ktLV0gPSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAg
IAogICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmKSBjb25zdDsKICAgICBi
b29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAogICAgIHsK
QEAgLTEyNCwxNSArMTUzLDMyIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRoaW5GbGFn
ID0gMTsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7Ci0gICAg
c3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnRw
dHJfdCBmbGFncyA9IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVl
ID0gNDsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0g
NDsKICAgICAKICAgICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNv
bnRhaW5zT3V0T2ZMaW5lKFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIGNsYXNzIENvbnRh
aW5zT3V0T2ZMaW5lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFp
bnNPdXRPZkxpbmUoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgbV9zZXQ7CisgICAgfTsKKwogICAgIHZvaWQgY29weUZyb20o
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7CkBA
IC0xNTQsNyArMjAwLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGRlbGV0ZVN0cnVjdHVy
ZUxpc3RJZk5lY2Vzc2FyeSgpCiAgICAgewotICAgICAgICBpZiAoIWlzVGhpbigpKQorICAgICAg
ICBpZiAoIWlzVGhpbigpICYmIG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQogICAgICAgICAg
ICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShzdHJ1Y3R1cmVMaXN0KCkpOwogICAgIH0KICAgICAK
QEAgLTE4NSw5ICsyMzEsMTMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHNldChiaXR3aXNl
X2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmVzKSwgZmFsc2UpOwogICAgIH0KKyAgICB2b2lkIHNl
dEVtcHR5KCkKKyAgICB7CisgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICB9CiAgICAgdm9pZCBz
ZXQodWludHB0cl90IHBvaW50ZXIsIGJvb2wgc2luZ2xlU3RydWN0dXJlKQogICAgIHsKLSAgICAg
ICAgbV9wb2ludGVyID0gcG9pbnRlciB8IChzaW5nbGVTdHJ1Y3R1cmUgPyB0aGluRmxhZyA6IDAp
IHwgKG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZyk7CisgICAgICAgIG1fcG9pbnRlciA9IHBvaW50
ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAwKTsKICAgICB9CiAKICAgICB1aW50
cHRyX3QgbV9wb2ludGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTcgQEAgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OgogICAgIH0KIAogICAgIC8vIE5leHQgY2hlY2sgaWYg
d2UgY2FuIGZvbGQgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbiBvYmplY3Qg
b3Igc3RyaW5nIGFuZCBkb2VzIG5vdCBlcXVhbCB1bmRlZmluZWQuCi0gICAgaWYgKGlzQ2VsbFNw
ZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkKLSAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpKQotICAgICAgICAgICAgJiYgc3RydWN0dXJl
LT50eXBlSW5mbygpLnR5cGUoKSAhPSBTdHJpbmdUeXBlKQorICAgIGlmIChpc0NlbGxTcGVjdWxh
dGlvbih2YWx1ZS5tX3R5cGUpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKSB7CisgICAg
ICAgIGJvb2wgYWxsVHJ1ZSA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVl
Lm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS50eXBlKCkgPT0gU3RyaW5nVHlwZSkgeworICAgICAgICAgICAgICAgIGFsbFRydWUgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBpZiAoYWxsVHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsK
ICAgICB9CiAgICAgCkBAIC0xNDU2LDcgKzE0NjIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7
Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgdXNl
IG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIEdldEJ5SWRT
dGF0dXMgdGhlIGFiaWxpdHkKKyAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2Vk
IG9uIGEgU3RydWN0dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncwor
ICAgICAgICAgICAgLy8gYWJpbGl0eSB0byBnZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgR2V0QnlJ
ZFN0YXR1cyBvdXQgb2YgQnl0ZUNvZGVQYXJzZXIgc28gdGhhdAorICAgICAgICAgICAgLy8gQ29u
c3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgICAgIGlmIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9u
bHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0g
R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5t
X3ZtLCBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMo
KVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKQEAgLTE1MDIsOCArMTUxMywxMiBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVCghKHZh
bHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBh
bHJlYWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUt
PnN0cnVjdHVyZVNldCgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgaW50ZXJl
c3RpbmcgdGhhdCB3ZSBjb3VsZCBoYXZlIHByb3ZlbiB0aGF0IHRoZSBvYmplY3QgaGFzIGEgbGFy
Z2VyIHN0cnVjdHVyZSBzZXQKKyAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdlJ3Jl
IHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hlY2sK
KyAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KKyAgICAgICAg
CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAg
ICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQpAQCAtMTUxMSwzMiArMTUyNiwxMyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAKLSAgICAgICAgLy8gSWYg
dGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxy
ZWFkeSBoZWxkIGluCi0gICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQg
dGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKLSAgICAgICAgLy8gdHVybiB0
aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgJiYgdmFsdWUu
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGZpbHRlcih2YWx1
ZSwgdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1cmUo
KSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgIG5v
ZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgICAg
IAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToK
LSAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNs
b2JiZXJMaW1pdCk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9n
cmFwaCwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKQEAgLTE2MTcsOCArMTYx
Myw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNl
IEFycmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUt
PnN0cnVjdHVyZSgpOwotICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1
ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1
Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CkBAIC0xNjUxLDcgKzE2NDYsMTEgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1
ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBl
bnN1cmVkIHRoaXMuCiAKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
YmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmls
dGVyIGRvd24gdGhlIGNhc2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBp
biBhbGwKKyAgICAgICAgLy8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVuIHdlIHNo
b3VsZCBzdHJlbmd0aCByZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCisgICAgICAgIC8v
IEdldEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
Lm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0g
ZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0
IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52
YXJpYW50c1tpXTsKQEAgLTE2ODgsNyArMTY4NywxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVj
Q2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhp
cy4KIAotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVu
U3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0ZXIgZG93biB0
aGUgY2FzZXMgaW4gTXVsdGlQdXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGluIGVpdGhlcgor
ICAgICAgICAvLyBvbmUgY2FzZSwgb3Igbm90aGluZyBidXQgcmVwbGFjZSBjYXNlcyBhbmQgdGhl
eSBoYXZlIHRoZSBzYW1lIG9mZnNldCwgdGhlbiB3ZSBzaG91bGQKKyAgICAgICAgLy8ganVzdCBz
dHJlbmd0aCByZWR1Y2UgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9mIENoZWNr
U3RydWN0dXJlLAorICAgICAgICAvLyBbUmVdQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIFB1dFN0
cnVjdHVyZSwgYW5kIFB1dEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAg
Ym9vbCBkb25lID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAg
ICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50c1tpXTsKQEAgLTE3MjEsMTIgKzE3MjUsMTIgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewog
ICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2lu
ZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQuc3RydWN0dXJlKCkp
KQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5jb250YWlucyh2YXJpYW50
LnN0cnVjdHVyZSgpKSkKICAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2YXJpYW50LnN0
cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbik7Ci0gICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29u
dGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICBpZiAodmFsdWUubV9z
dHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCiAgICAgICAgICAgICAg
ICAgbmV3U2V0LmFkZCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTE3NjcsNyArMTc3MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgY2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0
OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJl
KCkpIHsKKyAgICAgICAgLy8gVGhpcyB1c2Ugb2Ygb25seVN0cnVjdHVyZSgpIHNob3VsZCBiZSBy
ZXBsYWNlZCBieSBnaXZpbmcgUHV0QnlJZFN0YXR1cyB0aGUgYWJpbGl0eQorICAgICAgICAvLyB0
byBjb21wdXRlIHRoaW5ncyBiYXNlZCBvbiBhIFN0cnVjdHVyZVNldCwgYW5kIHRoZW4gdG8gZmFj
dG9yIEJ5dGVDb2RlUGFyc2VyJ3MKKyAgICAgICAgLy8gYWJpbGl0eSB0byBnZW5lcmF0ZSBjb2Rl
IGJhc2VkIG9uIGEgUHV0QnlJZFN0YXR1cyBvdXQgb2YgQnl0ZUNvZGVQYXJzZXIgc28gdGhhdAor
ICAgICAgICAvLyBDb25zdGFudEZvbGRpbmdQaGFzZSBjYW4gdXNlIGl0LgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlm
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0
dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMg
PSBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92
bSwKICAgICAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogewogICAgIGlmICgh
IXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUo
Z3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBncmFwaC53YXRjaHBvaW50cygp
LmFkZExhemlseShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAg
ICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJh
eU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAg
ICAgbV9hcnJheU1vZGVzID0gMDsKICAgICB9CiAgICAgICAgIApAQCAtNTAsMTkgKzUwLDIwIEBA
IHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0TW9zdFNwZWNpZmljKEdyYXAKICAgICBtX3ZhbHVlID0g
dmFsdWU7CiAgICAgICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dh
dGNoZWQoZ3JhcGgpOwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgs
IEpTVmFsdWUgdmFsdWUpCiB7CiAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsK
LSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBtX3N0
cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZShncmFwaCwgc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3Ry
dWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSk7CiAgICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVh
cigpOwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAKQEAgLTcwLDE3ICs3
MSwxOCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIEpTCiAgICAgbV92
YWx1ZSA9IHZhbHVlOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJ
c1dhdGNoZWQoZ3JhcGgpOwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3Jh
cGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
ID0gc3RydWN0dXJlOwotICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBzdHJ1
Y3R1cmUpOworICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIG1fYXJyYXlNb2RlcyA9
IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICBtX3R5cGUgPSBz
cGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICBtX3ZhbHVlID0gSlNWYWx1
ZSgpOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQo
Z3JhcGgpOwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlv
bihOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24pCkBAIC0xMjksMjEgKzEzMSwxOCBAQCBGaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgCiAgICAgbV90eXBlICY9IG90
aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKICAgICBtX2FycmF5TW9kZXMgJj0gb3Ro
ZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7Ci0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuZmlsdGVyKG90aGVyKTsKKyAgICBtX3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgIAog
ICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBwcmlvciB0byB0aGUgYWJvdmUgdHdvIHN0YXRlbWVu
dHMgd2UgaGFkIChGb28sIFRPUCksIHdoZXJlCiAgICAgLy8gRm9vIGlzIGEgU3BlY3VsYXRlZFR5
cGUgdGhhdCBpcyBkaXNqb2ludCB3aXRoIHRoZSBwYXNzZWQgU3RydWN0dXJlU2V0LiBJbiB0aGF0
CiAgICAgLy8gY2FzZSwgd2Ugd2lsbCBub3cgaGF2ZSAoTm9uZSwgW3NvbWVTdHJ1Y3R1cmVdKS4g
SW4gZ2VuZXJhbCwgd2UgbmVlZCB0byBtYWtlCiAgICAgLy8gc3VyZSB0aGF0IG5ldyBpbmZvcm1h
dGlvbiBnbGVhbmVkIGZyb20gdGhlIFNwZWN1bGF0ZWRUeXBlIG5lZWRzIHRvIGJlIGZlZCBiYWNr
CiAgICAgLy8gaW50byB0aGUgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTdHJ1Y3R1cmVT
ZXQuCi0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgbV9z
dHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CiAgICAgCi0gICAgaWYgKG1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZShncmFwaCwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOwotICAgICAgICAK
ICAgICBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsK
LSAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eSgpOworICAgIHJldHVybiBub3JtYWxpemVDbGFy
aXR5KGdyYXBoKTsKIH0KIAogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJB
cnJheU1vZGVzKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKQEAgLTE2OSw4ICsxNjgsNyBAQCBGaWx0
cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihTCiAgICAgLy8gdGhlIHBhc3NlZCB0
eXBlIGlzIEFycmF5LiBBdCB0aGlzIHBvaW50IHdlJ2xsIGhhdmUgKE5vbmUsIFRPUCkuIFRoZSBi
ZXN0IHdheQogICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgZmlsdGVyaW5nIGRv
ZXMgdGhlIHJpZ2h0IHRoaW5nIGlzIHRvIGZpbHRlciBvbgogICAgIC8vIHRoZSBuZXcgdHlwZSAo
Tm9uZSkgcmF0aGVyIHRoYW4gdGhlIG9uZSBwYXNzZWQgKEFycmF5KS4KLSAgICBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKLSAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmZpbHRlcihtX3R5cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcih0eXBlKTsKICAgICBm
aWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICBy
ZXR1cm4gbm9ybWFsaXplQ2xhcml0eSgpOwpAQCAtMTg0LDE1ICsxODIsNiBAQCBGaWx0cmF0aW9u
UmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckJ5CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
dm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYgZ3Jh
cGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAg
IGlmIChncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0KCkpKQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgIGVsc2UKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5t
YWtlVG9wKCk7Ci19Ci0KIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQog
ewogICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMKQEAgLTIzOCw4ICsyMjcsNyBAQCBib29s
IEFic3RyYWN0VmFsdWU6OnNob3VsZEJlQ2xlYXIoKSBjb25zCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAogICAgIGlmICghKG1fdHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAgICAgJiYgKCFtX2Fy
cmF5TW9kZXMKLSAgICAgICAgICAgIHx8IG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIo
KSkpCisgICAgICAgICYmICghbV9hcnJheU1vZGVzIHx8IG1fc3RydWN0dXJlLmlzQ2xlYXIoKSkp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTI2Mywx
MiArMjUxLDE4IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXoKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6Om5v
cm1hbGl6ZUNsYXJpdHkoR3JhcGgmIGdyYXBoKQoreworICAgIEZpbHRyYXRpb25SZXN1bHQgcmVz
dWx0ID0gbm9ybWFsaXplQ2xhcml0eSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgaWYgKCEobV90eXBlICYg
U3BlY0NlbGwpKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0Ns
ZWFyKCkpOwotICAgICAgICBBU1NFUlQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc0NsZWFy
KCkpOworICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAgICAgICAgQVNT
RVJUKCFtX2FycmF5TW9kZXMpOwogICAgIH0KICAgICAKQEAgLTI4OSw2ICsyODMsMTEgQEAgdm9p
ZCBBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgYwogICAgIC8vIHdlIGRvbid0IHdh
bnQgdG8gZ2V0IHBlZGFudGljIGFib3V0IHRoaXMgYXMgaXQgd291bGQgb25seSBpbmNyZWFzZSB0
aGUgY29tcHV0YXRpb25hbAogICAgIC8vIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUuCiB9CisKK3Zv
aWQgQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29uc3QKK3sK
KyAgICBtX3N0cnVjdHVyZS5hc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworfQogI2VuZGlmCiAKIHZv
aWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMzAyLDgg
KzMwMSw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICBp
ZiAobV90eXBlICYgU3BlY0NlbGwpIHsKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAg
IiwgIiwgQXJyYXlNb2Rlc0R1bXAobV9hcnJheU1vZGVzKSwgIiwgIiwKLSAgICAgICAgICAgIGlu
Q29udGV4dChtX2N1cnJlbnRLbm93blN0cnVjdHVyZSwgY29udGV4dCksICIsICIsCi0gICAgICAg
ICAgICBpbkNvbnRleHQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSwgY29udGV4dCkpOworICAg
ICAgICAgICAgaW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlm
ICghIW1fdmFsdWUpCiAgICAgICAgIG91dC5wcmludCgiLCAiLCBpbkNvbnRleHQobV92YWx1ZSwg
Y29udGV4dCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw3IEBAIHN0cnVj
dCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNwZWNOb25lOwogICAg
ICAgICBtX2FycmF5TW9kZXMgPSAwOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5j
bGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAg
ICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkBAIC03NSwxMCArNzQsMTAgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKQogICAgIHsK
ICAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5jbG9iYmVy
KCk7CiAgICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7Cisg
ICAgICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAgICAgICAgICAgIEFT
U0VSVCghbV9hcnJheU1vZGVzKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CkBAIC05MSw3ICs5MCwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAg
Ym9vbCBpc0hlYXBUb3AoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIChtX3R5cGUgfCBT
cGVjSGVhcFRvcCkgPT0gbV90eXBlICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzVG9wKCkg
JiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1RvcCgpOworICAgICAgICByZXR1cm4gKG1f
dHlwZSB8IFNwZWNIZWFwVG9wKSA9PSBtX3R5cGUKKyAgICAgICAgICAgICYmIG1fc3RydWN0dXJl
LmlzVG9wKCkKKyAgICAgICAgICAgICYmIG1fYXJyYXlNb2RlcyA9PSBBTExfQVJSQVlfTU9ERVMK
KyAgICAgICAgICAgICYmICFtX3ZhbHVlOwogICAgIH0KICAgICAKICAgICBib29sIHZhbHVlSXNU
b3AoKSBjb25zdApAQCAtMTE4LDEyICsxMjAsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgIHZvaWQgc2V0VHlwZShTcGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgaWYg
KHR5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
bWFrZVRvcCgpOwotICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBtX2Fy
cmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICAgICAgbV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIo
KTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgICAgIH0KICAgICAgICAgbV90
eXBlID0gdHlwZTsKQEAgLTEzOCw4ICsxMzgsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAg
ICAgewogICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQogICAgICAgICAgICAg
JiYgbV9hcnJheU1vZGVzID09IG90aGVyLm1fYXJyYXlNb2RlcwotICAgICAgICAgICAgJiYgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUgPT0gb3RoZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUKLSAg
ICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPT0gb3RoZXIubV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZQorICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9z
dHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKICAgICB9
CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdApA
QCAtMTYyLDggKzE2MSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwgb3RoZXIu
bV90eXBlKTsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZUFycmF5TW9kZXMobV9hcnJheU1v
ZGVzLCBvdGhlci5tX2FycmF5TW9kZXMpOwotICAgICAgICAgICAgcmVzdWx0IHw9IG1fY3VycmVu
dEtub3duU3RydWN0dXJlLmFkZEFsbChvdGhlci5tX2N1cnJlbnRLbm93blN0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICByZXN1bHQgfD0gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5hZGRBbGwob3Ro
ZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk7CisgICAgICAgICAgICByZXN1bHQgfD0gbV9z
dHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKG1fdmFs
dWUgIT0gb3RoZXIubV92YWx1ZSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAhIW1fdmFs
dWU7CiAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKQEAgLTE3OSw4ICsxNzcs
NyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1lcmdlU3BlY3VsYXRpb24obV90
eXBlLCB0eXBlKTsKICAgICAgICAgCiAgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKLSAg
ICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAg
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01P
REVTOwogICAgICAgICB9CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC0yMjUsNzUg
KzIyMiwzMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGlmICghIXZhbHVlICYm
IHZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgU3BlY0NlbGwp
OwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29u
dGFpbnMoc3RydWN0dXJlKQotICAgICAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJl
LmNvbnRhaW5zKHN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAmJiAobV9hcnJheU1vZGVzICYg
YXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSog
YmVzdFByb3ZlblN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmIChtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICAgICAgcmV0dXJuIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICAKICAgICBib29sIGhhc0Nsb2JiZXJhYmxlU3RhdGUoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkK
KyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkKICAgICAg
ICAgICAgIHx8ICFhcnJheU1vZGVzQXJlQ2xlYXJPclRvcChtX2FycmF5TW9kZXMpOwogICAgIH0K
ICAgICAKICNpZiBBU1NFUlRfRElTQUJMRUQKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBj
b25zdCB7IH0KKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0IHsgfQogI2Vs
c2UKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKKyAgICB2b2lkIGFzc2VydElz
V2F0Y2hlZChHcmFwaCYpIGNvbnN0OwogI2VuZGlmCiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250
ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICAvLyBBIGdyZWF0IHdheSB0byB0aGluayBhYm91
dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZAotICAg
IC8vIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgaXMgdG8gY29uc2lkZXIgdGhlc2UgZm91ciBl
eGFtcGxlczoKLSAgICAvLwotICAgIC8vIDEpIHggPSBmb28oKTsKLSAgICAvLwotICAgIC8vICAg
IEluIHRoaXMgY2FzZSB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUgd2lsbAotICAgIC8vICAgIGJvdGggYmUgVE9QLCBzaW5jZSB3ZSBkb24n
dCBrbm93IGFueXRoaW5nIGFib3V0IHggZm9yIHN1cmUsIHlldC4KLSAgICAvLwotICAgIC8vIDIp
IHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUg
eCB3aWxsIGxhdGVyIGhhdmUgYSBuZXcgcHJvcGVydHkgYWRkZWQgdG8gaXQsICdnJy4gQmVjYXVz
ZSBvZiB0aGUKLSAgICAvLyAgICBrbm93biBidXQgbm90LXlldC1leGVjdXRlZCBwcm9wZXJ0eSBh
ZGRpdGlvbiwgeCdzIGN1cnJlbnQgc3RydWN0dXJlIHdpbGwKLSAgICAvLyAgICBub3QgYmUgd2F0
Y2hwb2ludGFibGU7IGhlbmNlIHdlIGhhdmUgbm8gd2F5IG9mIHN0YXRpY2FsbHkgYm91bmRpbmcg
dGhlIHNldAotICAgIC8vICAgIG9mIHBvc3NpYmxlIHN0cnVjdHVyZXMgdGhhdCB4IG1heSBoYXZl
IGlmIGEgY2xvYmJlcmluZyBldmVudCBoYXBwZW5zLiBTbywKLSAgICAvLyAgICB4J3MgbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUgd2lsbCBiZSB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgY2hlY2sgdG8g
Z2V0Ci0gICAgLy8gICAgcHJvcGVydHkgJ2YnLCBhbmQgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZSB3aWxsIGJlIFRPUC4KLSAgICAvLwotICAgIC8vIDMpIHggPSBmb28oKTsKLSAgICAvLyAgICB5
ID0geC5mOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUgeCBoYXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1
cmUgdGhhdCBpcyBzdGlsbCB3YXRjaHBvaW50YWJsZS4gSW4gdGhpcyBjYXNlLAotICAgIC8vICAg
IHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZSB3aWxsIGJvdGggYmUKLSAgICAvLyAgICB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgY2hlY2tlZCBm
b3Igd2hlbiBnZXR0aW5nICdmJy4KLSAgICAvLwotICAgIC8vIDQpIHggPSBmb28oKTsKLSAgICAv
LyAgICB5ID0geC5mOwotICAgIC8vICAgIGJhcigpOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUg
eCBoYXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBzdGlsbCB3YXRjaHBvaW50YWJsZS4g
SW4gdGhpcwotICAgIC8vICAgIGNhc2UsIG1fY3VycmVudEtub3duU3RydWN0dXJlIHdpbGwgYmUg
VE9QIGJlY2F1c2UgYmFyKCkgbWF5IHBvdGVudGlhbGx5Ci0gICAgLy8gICAgY2hhbmdlIHgncyBz
dHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5IG9mIHByb3Zpbmcgb3RoZXJ3aXNlLCBidXQKLSAg
ICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0
cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAotICAgIC8vICAgIHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAn
ZicuCi0gICAgCi0gICAgLy8gTkIuIEFsbCBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZl
IHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCi0KICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFp
bnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAg
Ly8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHZhbHVlIG11c3QgYmVsb25nIHRv
IHRoaXMgc2V0LiBUaGUgc2V0IG1heQogICAgIC8vIGJlIFRPUCwgaW5kaWNhdGluZyB0aGF0IGl0
IGlzIHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMsIGluIHdoaWNoCkBAIC0zMDEs
MjkgKzI1MywxMiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gaW4gd2hpY2ggY2Fz
ZSB0aGlzIHZhbHVlIGNhbm5vdCBiZSBhIGNlbGwuIFRoaXMgaXMgYWxsIHN1YmplY3QgdG8gY2hh
bmdlCiAgICAgLy8gYW55dGltZSBhIG5ldyB2YWx1ZSBpcyBhc3NpZ25lZCB0byB0aGlzIG9uZSwg
YW55dGltZSB0aGVyZSBpcyBhIGNvbnRyb2wgZmxvdwogICAgIC8vIG1lcmdlLCBvciBtb3N0IGNy
dWNpYWxseSwgYW55dGltZSBhIHNpZGUtZWZmZWN0IG9yIHN0cnVjdHVyZSBjaGVjayBoYXBwZW5z
LgotICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVjdCwgd2UgdHlwaWNhbGx5IG11c3QgYXNz
dW1lIHRoYXQgYW55IHZhbHVlIG1heSBoYXZlCi0gICAgLy8gaGFkIGl0cyBzdHJ1Y3R1cmUgY2hh
bmdlZCwgaGVuY2UgY29udHJhdmVuaW5nIG91ciBwcm9vZi4gV2UgbWFrZSB0aGUgcHJvb2YKLSAg
ICAvLyB2YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcgdGhpcyB0byBUT1AgKGkuZS4gY2xhaW1pbmcg
dGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0Ci0gICAgLy8gdGhpcyB2YWx1ZSBtYXkgaGF2ZSBhbnkg
c3RydWN0dXJlKS4gT2Ygbm90ZSBpcyB0aGF0IHRoZSBwcm9vZiByZXByZXNlbnRlZCBieQotICAg
IC8vIHRoaXMgZmllbGQgaXMgbm90IHN1YmplY3QgdG8gc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0
Y2hwb2ludHMgLSBldmVuIGlmIG9uZQotICAgIC8vIGZpcmVzLCB3ZSBjYW4gYmUgc3VyZSB0aGF0
IHRoaXMgcHJvb2YgaXMgc3RpbGwgdmFsaWQuCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNv
bnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlIG5vdwot
ICAgIC8vIG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUgc3ViamVjdCB0byB0aGUgc3RydWN0dXJl
IHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgb2YKLSAgICAvLyBhbGwgbWVtYmVycyBvZiB0aGlzIHNl
dCBub3QgaGF2aW5nIGZpcmVkLiBUaGlzIHNldCBpcyBpbXBlcnZpb3VzIHRvIHNpZGUtCi0gICAg
Ly8gZWZmZWN0czsgZXZlbiBpZiBvbmUgaGFwcGVucyB0aGUgc2lkZS1lZmZlY3QgY2FuIG9ubHkg
Y2F1c2UgdGhlIHZhbHVlIHRvCi0gICAgLy8gY2hhbmdlIHRvIGF0IHdvcnN0IGFub3RoZXIgc3Ry
dWN0dXJlIHRoYXQgaXMgYWxzbyBhIG1lbWJlciBvZiB0aGlzIHNldC4gQnV0LAotICAgIC8vIHRo
ZSB0aGVvcmVtIGJlaW5nIHByb3ZlZCBieSB0aGlzIGZpZWxkIGlzIHByZWRpY2F0ZWQgdXBvbiB0
aGVyZSBub3QgYmVpbmcKLSAgICAvLyBhbnkgbmV3IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyBpbnRy
b2R1Y2VkIGludG8gYW55IG1lbWJlcnMgb2YgdGhpcyBzZXQuIEluCi0gICAgLy8gY2FzZXMgd2hl
cmUgdGhlcmUgaXMgbm8gd2F5IGZvciB1cyB0byBndWFyZCB0aGlzIGhhcHBlbmluZywgdGhlIHNl
dCBtdXN0IGJlCi0gICAgLy8gVE9QLiBCdXQgaW4gY2FzZXMgd2hlcmUgd2UgY2FuIGd1YXJkIG5l
dyBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKGFsbCBtZW1iZXJzCi0gICAgLy8gb2YgdGhlIHNldCBo
YXZlIHN0aWxsLXZhbGlkIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzKSB0aGVuIHRo
aXMgc2V0Ci0gICAgLy8gd2lsbCBiZSBmaW5pdGUuIEFueXRpbWUgdGhhdCB3ZSBtYWtlIHVzZSBv
ZiB0aGUgZmluaXRlIG5hdHVyZSBvZiB0aGlzIHNldCwKLSAgICAvLyB3ZSBtdXN0IGZpcnN0IGlz
c3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgd2hpY2ggd2lsbCBlZmZlY3Rp
dmVseQotICAgIC8vIHJlc3VsdCBpbiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBiZWluZyBmaWx0
ZXJlZCBhY2NvcmRpbmcgdG8KLSAgICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLgotICAg
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKKyAgICAv
LyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3QsIHdlIG11c3QgYXNzdW1lIHRoYXQgYW55IHZhbHVl
IHdpdGggYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vIGlzbid0IGJlaW5nIHdhdGNoZWQgbWF5IGhh
dmUgaGFkIGl0cyBzdHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2UgY29udHJhdmVuaW5nCisgICAgLy8g
b3VyIHByb29mLiBJbiBzdWNoIGEgY2FzZSB3ZSBtYWtlIHRoZSBwcm9vZiB2YWxpZCBhZ2FpbiBi
eSBzd2l0Y2hpbmcgdGhpcyB0bworICAgIC8vIFRPUCAoaS5lLiBjbGFpbWluZyB0aGF0IHdlIGhh
dmUgcHJvdmVkIHRoYXQgdGhpcyB2YWx1ZSBtYXkgaGF2ZSBhbnkKKyAgICAvLyBzdHJ1Y3R1cmUp
LgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7CiAgICAgCiAgICAgLy8g
VGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBwb3NzaWJsZSB0eXBlcyB0aGF0IHRo
aXMgdmFsdWUgY2FuIGhhdmUKICAgICAvLyBub3cgb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZSwg
dW5sZXNzIGl0IGlzIHJlYXNzaWduZWQuIFRoaXMgZmllbGQgaXMKQEAgLTMzMiwxMSArMjY3LDEx
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyBiZXR3ZWVuIHRoaXMgZmllbGQsIGFu
ZCB0aGUgc3RydWN0dXJlIGZpZWxkcyBhYm92ZSwgaXMgYXMgZm9sbG93cy4gVGhlCiAgICAgLy8g
ZmllbGRzIGFib3ZlIGNvbnN0cmFpbnQgdGhlIHN0cnVjdHVyZXMgdGhhdCBhIGNlbGwgbWF5IGhh
dmUsIGJ1dCB0aGV5IHNheQogICAgIC8vIG5vdGhpbmcgYWJvdXQgd2hldGhlciBvciBub3QgdGhl
IHZhbHVlIGlzIGtub3duIHRvIGJlIGEgY2VsbC4gTW9yZSBmb3JtYWxseSwKLSAgICAvLyB0aGUg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMgaXRzZWxmIGFuIGFic3RyYWN0IHZhbHVlIHRoYXQg
Y29uc2lzdHMgb2YgdGhlCisgICAgLy8gdGhlIG1fc3RydWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0
cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQogICAgIC8vIHVuaW9uIG9mIHRoZSBzZXQg
b2YgYWxsIG5vbi1jZWxsIHZhbHVlcyBhbmQgdGhlIHNldCBvZiBjZWxsIHZhbHVlcyB0aGF0IGhh
dmUKICAgICAvLyB0aGUgZ2l2ZW4gc3RydWN0dXJlLiBUaGlzIGFic3RyYWN0IHZhbHVlIGlzIHRo
ZW4gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUKLSAgICAvLyBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZSBhbmQgdGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IKLSAg
ICAvLyBleGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZSBpcworICAgIC8vIG1fc3RydWN0dXJlIGFuZCB0aGUgc2V0IG9mIHZh
bHVlcyB3aG9zZSB0eXBlIGlzIG1fdHlwZS4gU28sIGZvcgorICAgIC8vIGV4YW1wbGUgaWYgbV90
eXBlIGlzIFNwZWNGaW5hbHxTcGVjSW50MzIgYW5kIG1fc3RydWN0dXJlIGlzCiAgICAgLy8gWzB4
MTIzNDVdIHRoZW4gdGhpcyBhYnN0cmFjdCB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgc2V0IG9m
IGFsbCBpbnRlZ2VycwogICAgIC8vIHVuaWZpZWQgd2l0aCB0aGUgc2V0IG9mIGFsbCBvYmplY3Rz
IHdpdGggc3RydWN0dXJlIDB4MTIzNDUuCiAgICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOwpAQCAt
MzkxLDE5ICszMjYsMTcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1fdHlwZSB8PSB0b3A7
CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKLSAgICAgICAgbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAg
ICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoR3JhcGgmLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSk7Ci0KICAgICB2b2lkIGZpbHRlclZhbHVlQnlUeXBlKCk7CiAgICAg
dm9pZCBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRCZUNs
ZWFyKCkgY29uc3Q7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBub3JtYWxpemVDbGFyaXR5KCk7Cisg
ICAgRmlsdHJhdGlvblJlc3VsdCBub3JtYWxpemVDbGFyaXR5KEdyYXBoJik7CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWxsb2NhdG9yLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQqIGFsbG9jYXRlKCk7IC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGFsbG9jYXRl
LCBhbmQgYXZvaWQgdXNpbmcgdGhpcyBtZXRob2QuCiAgICAgdm9pZCBmcmVlKFQqKTsgLy8gQ2Fs
bCB0aGlzIG1ldGhvZCB0byBkZWxldGU7IG5ldmVyIHVzZSAnZGVsZXRlJyBkaXJlY3RseS4KICAg
ICAKLSAgICB2b2lkIGZyZWVBbGwoKTsgLy8gT25seSBjYWxsIHRoaXMgaWYgVCBoYXMgYSB0cml2
aWFsIGRlc3RydWN0b3IuCisgICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlm
IHlvdSd2ZSBlaXRoZXIgZnJlZWQgZXZlcnl0aGluZyBvciBpZiBUIGhhcyBhIHRyaXZpYWwgZGVz
dHJ1Y3Rvci4KICAgICB2b2lkIHJlc2V0KCk7IC8vIExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyBy
ZXR1cm5zIGFsbCBtZW1vcnkgdG8gdGhlIE9TLgogICAgIAogICAgIHVuc2lnbmVkIGluZGV4T2Yo
Y29uc3QgVCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2Rl
LmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
cnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksMjUgKzI4OSw0OCBAQCBTdHJ1Y3R1
cmUqIEFycmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiBib29sIEFycmF5TW9kZTo6YWxyZWFk
eUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwg
SW5kZXhpbmdUeXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7
Ci0gICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SW5kZXhpbmdTaGFwZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkK
LSAgICAgICAgICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCkpOworICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6IHsKKyAgICAg
ICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVj
dHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElu
ZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNPcmlnaW5hbEFycmF5U3Ry
dWN0dXJlKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJh
eTo6QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QXJyYXk6IHsKICAgICAgICAgaWYgKGFycmF5TW9k
ZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhzaGFwZSB8
IElzQXJyYXkpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYm
ICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBl
KCkgJiBJbmRleGluZ1NoYXBlTWFzaykgPT0gc2hhcGUKLSAgICAgICAgICAgICYmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0Fy
cmF5KTsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0
dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2
YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ICYgSXNBcnJheSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAgZGVmYXVsdDoKKyAgICBk
ZWZhdWx0OiB7CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9h
cnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1vZGVzKHNoYXBlIHwgSXNB
cnJheSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAm
IEluZGV4aW5nU2hhcGVNYXNrKSA9PSBzaGFwZTsKLSAgICB9CisgICAgICAgIGlmICh2YWx1ZS5t
X3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAg
ICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFz
aykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQogfQogCiBib29sIEFycmF5TW9kZTo6YWxyZWFk
eUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSkg
Y29uc3QKQEAgLTMzNiwyMyArMzU5LDM4IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tl
ZChHcmFwaCYgZ3IKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFn
ZToKICAgICAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6
T3JpZ2luYWxBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheTogewogICAg
ICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQog
ICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5OiB7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVl
Lm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55QXJyYXlTdG9y
YWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5
cGUoKSkKLSAgICAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
c2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAgICAgICAgICBpZiAo
dmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1f
c3RydWN0dXJlW2ldOworICAgICAgICAgICAgICAgIGlmICghaGFzQW55QXJyYXlTdG9yYWdlKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElz
QXJyYXkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKGFycmF5TW9kZXNB
bHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55QXJyYXlTdG9yYWdlKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICAg
ICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9IH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6
QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlw
ZSwgU3BlY0FyZ3VtZW50cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk3LDI3ICs5NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwotICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7
CiAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2sp
OyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAg
ICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVj
dHVyZVZhbHVlID0gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKLSAgICAgICAgICAg
ICAgICBpZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICAgICAg
ICAgICYmIHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAv
LyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KLSAgICAgICAgICAg
ICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwotICAgICAg
ICAgICAgICAgICAgICBjaGlsZHJlbi5yZW1vdmVFZGdlKDApOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoISFjaGlsZHJlbi5jaGlsZDEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9k
ZS0+b3JpZ2luLCBjaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVu
LnNldENoaWxkMihFZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5z
ZXRDaGlsZDMoRWRnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKQEAgLTE1Niw3ICsxNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aUdl
dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGls
ZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJl
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTgwLDcgKzE2NSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAg
ICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKTsKIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJl
Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC0yMDUsNyArMTkwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSAhPSBD
ZWxsVXNlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGls
ZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJl
KCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogCkBAIC0yMzIsNyArMjE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0
cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUp
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMzI5LDcg
KzMxNCw2IEBAIHByaXZhdGU6CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9kZS0+Y2hpbGQx
KCk7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKIAotICAgICAgICBi
b29sIG5lZWRzV2F0Y2hwb2ludCA9ICFtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpOwogICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNr
ID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7CiAgICAgICAgIAog
ICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2hhaW4oKSk7CkBAIC0zNDAsMTEgKzMyNCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCiAgICAgICAgIG1faW50ZXJw
cmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwogICAgICAgICAKLSAgICAgICAgaWYgKG5lZWRz
V2F0Y2hwb2ludCkgewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBj
aGlsZEVkZ2UpOwotICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAgICAg
IGlmIChuZWVkc0NlbGxDaGVjaykgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBv
cmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgIH0KQEAgLTM4MSw3ICszNjEsNiBAQCBwcml2YXRl
OgogCiAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSk7
CiAgICAgICAgIAotICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2ludCA9ICFtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpOwogICAgICAg
ICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+
U3BlY0NlbGw7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5n
IGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKQEAgLTM4OSwxMSAr
MzY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAgICAg
ICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CiAKLSAgICAgICAgaWYgKG5l
ZWRzV2F0Y2hwb2ludCkgewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgK
LSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUp
LCBjaGlsZEVkZ2UpOwotICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAg
ICAgIGlmIChuZWVkc0NlbGxDaGVjaykgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9t
LCBvcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBh
ZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hw
b2ludFNldFR5cGUqIHNldCkKICAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBt
X3Byb2ZpbGVkU2V0cy5hZGQoc2V0KTsKKyNlbmRpZgogICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hw
b2ludHMuYXBwZW5kKAogICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0PFdhdGNocG9pbnRTZXRUeXBlPihjb2RlT3JpZ2luLCBleGl0S2luZCwgc2V0KSk7CiAgICAg
fQpAQCAtMTcyLDExICsxNzUsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlz
U3RpbGxWYWxpZChzZXQpIHx8IHNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0KTsKICAgICB9Cisg
ICAgCisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NldHMuY29udGFpbnMoc2V0KSB8fCBtX3Byb2Zp
bGVkU2V0cy5jb250YWlucyhzZXQpKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4+IG1fcHJv
ZmlsZWRXYXRjaHBvaW50czsKICAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9zZXRz
OwogI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4g
bV9wcm9maWxlZFNldHM7CiAgICAgU3RhdGVNYXAgbV9maXJzdEtub3duU3RhdGU7CiAjZW5kaWYK
ICAgICBib29sIG1fcmVhbGx5QWRkZWQ7CkBAIC0yMzMsNiArMjQyLDE4IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzVmFsaWRPck1peGVkKHZpZXcpOwog
ICAgIH0KKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChXYXRjaHBvaW50U2V0KiBzZXQpCisgICAg
eworICAgICAgICBtX3NldHMuYXNzZXJ0SXNXYXRjaGVkKHNldCk7CisgICAgfQorICAgIHZvaWQg
YXNzZXJ0SXNXYXRjaGVkKElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKKyAgICB7CisgICAgICAg
IG1faW5saW5lU2V0cy5hc3NlcnRJc1dhdGNoZWQoJnNldCk7CisgICAgfQorICAgIHZvaWQgYXNz
ZXJ0SXNXYXRjaGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQorICAgIHsKKyAgICAgICAgbV9i
dWZmZXJWaWV3cy5hc3NlcnRJc1dhdGNoZWQodmlldyk7CisgICAgfQogICAgIAogcHJpdmF0ZToK
ICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPFdhdGNocG9pbnRTZXQ+IG1fc2V0czsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNjkyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzcsNiArNzcsMTYgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9u
Z0xpdgogCiBHcmFwaDo6fkdyYXBoKCkKIHsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IG51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4ID0gYmxv
Y2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmZy
ZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5k
ZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICBtX2FsbG9jYXRv
ci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKKyAgICB9CiAgICAgbV9hbGxvY2F0b3IuZnJl
ZUFsbCgpOwogfQogCkBAIC04NjMsNiArODczLDMxIEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5VmFs
dWUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmVTZXQmIHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IHNldC5zaXplKCk7IGotLTspCisgICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7CisK
KyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBtYXJrIGFueXRoaW5nIGluIHRo
ZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVl
ZCB0byBtYXJrIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNh
dXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBj
YXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
OworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1MywxOCArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xv
YmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oQ2hlY2tFeGVjdXRhYmxlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
LyogVHJhbnNpdGlvbiB3YXRjaHBvaW50cyBhcmUgYSBjb250cmFjdCBiZXR3ZWVuIHRoZSBwYXJ0
eSBzZXR0aW5nIHRoZSB3YXRjaHBvaW50ICovXAotICAgIC8qIGFuZCB0aGUgcnVudGltZSBzeXN0
ZW0sIHdoZXJlIHRoZSBwYXJ0eSBwcm9taXNlcyB0aGF0IHRoZSBjaGlsZCBvYmplY3Qgb25jZSBo
YWQgKi9cCi0gICAgLyogdGhlIHN0cnVjdHVyZSBiZWluZyB3YXRjaGVkLCBhbmQgdGhlIHJ1bnRp
bWUgc3lzdGVtIGluIHR1cm4gcHJvbWlzZXMgdGhhdCB0aGUgKi9cCi0gICAgLyogd2F0Y2hwb2lu
dCB3aWxsIGJlIHR1cm5lZCBpbnRvIGFuIE9TUiBleGl0IGlmIGFueSBvYmplY3Qgd2l0aCB0aGF0
IHN0cnVjdHVyZSAqL1wKLSAgICAvKiBldmVyIHRyYW5zaXRpb25zIHRvIGEgZGlmZmVyZW50IHN0
cnVjdHVyZS4gSGVuY2UsIHRoZSBjaGlsZCBvYmplY3QgbXVzdCBoYXZlICovXAotICAgIC8qIHBy
ZXZpb3VzbHkgaGFkIGEgQ2hlY2tTdHJ1Y3R1cmUgZXhlY3V0ZWQgb24gaXQgb3Igd2UncmUgZGVh
bGluZyB3aXRoIGFuIG9iamVjdCAqL1wKLSAgICAvKiBjb25zdGFudCAoV2Vha0pTQ29uc3RhbnQp
IGFuZCB0aGUgb2JqZWN0IHdhcyBrbm93biB0byBoYXZlIHRoYXQgc3RydWN0dXJlIGF0ICovXAot
ICAgIC8qIGNvbXBpbGUtdGltZS4gSW4gdGhlIGxhdHRlciBjYXNlIHRoaXMgbWVhbnMgdGhhdCBu
byBzdHJ1Y3R1cmUgY2hlY2tzIGhhdmUgdG8gYmUgKi9cCi0gICAgLyogcGVyZm9ybWVkIGZvciB0
aGlzIG9iamVjdCBieSBKSVR0ZWQgY29kZS4gSW4gdGhlIGZvcm1lciBjYXNlIHRoaXMgbWVhbnMg
dGhhdCovXAotICAgIC8qIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgZG9lcyBub3QgbmVlZCB0byBi
ZSByZWNoZWNrZWQgZHVlIHRvIHNpZGUtZWZmZWN0aW5nICovXAotICAgIC8qIChjbG9iYmVyaW5n
KSBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFN0cnVjdHVyZSwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdl
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2
OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGlu
Z1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIgogI2lu
Y2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCkBAIC0yMzMs
NiArMjM0LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAg
IHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9u
UHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKKyAgICBwZXJmb3JtV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoZGZnKTsKICAgICBwZXJmb3JtSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb24oZGZnKTsKICAgICBwZXJmb3JtVHlwZUNoZWNrSG9pc3RpbmcoZGZnKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVU
b0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDIyICsyNzUsMjYgQEAgYm9vbCBzYWZl
VG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICByZXR1cm4gbm9kZS0+YXJy
YXlNb2RlKCkubW9kZUZvclB1dCgpLmFscmVhZHlDaGVja2VkKAogICAgICAgICAgICAgZ3JhcGgs
IG5vZGUsIHN0YXRlLmZvck5vZGUoZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpKTsKIAotICAg
IGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiBzdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vi
c2V0T2YoCi0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKTsKLSAg
ICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0
dXJlOgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZigKKyAgICAgICAgcmV0
dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
CiAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5wcmV2aW91c1N0cnVjdHVyZSkpOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0Ogog
ICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBQdXRCeU9mZnNldDoK
LSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzVmFsaWRPZmZzZXQoCi0gICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0ub2Zmc2V0KTsKKyAgICBj
YXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CisgICAgICAgIGlm
ICh2YWx1ZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0ub2Zmc2V0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2
YWx1ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRP
ZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIExhc3ROb2Rl
VHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3Zv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCgpCit7CisgICAgbV9zZXQuZGVsZXRl
U3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFs
dWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdy
YXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IGF0KGkpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCkuYXNzZXJ0SXNXYXRjaGVkKHN0cnVjdHVy
ZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgfQorfQorCit2b2lkIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIoKQoreworICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMg
YXBwcm9hY2ggdG8gY2xvYmJlcmluZyBpcyB0aGF0IGFueXRpbWUgd2UgaW50cm9kdWNlCisgICAg
Ly8gYSB3YXRjaGFibGUgc3RydWN0dXJlIGludG8gYW4gYWJzdHJhY3QgdmFsdWUsIHdlIHdhdGNo
cG9pbnQgaXQuIFlvdSBjYW4gYXNzZXJ0CisgICAgLy8gdGhhdCB0aGlzIGhvbGRzIGJ5IGNhbGxp
bmcgYXNzZXJ0SXNXYXRjaGVkKCkuCisgICAgICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgIGlmIChtX3NldC5pc1RoaW4oKSkgeworICAgICAgICBp
ZiAoIW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAobV9zZXQuc2luZ2xlU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFz
QmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICBtYWtlVG9wV2hlblRoaW4oKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVM
aXN0KiBsaXN0ID0gbV9zZXQuc3RydWN0dXJlTGlzdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9
IGxpc3QtPm1fbGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0tPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpIHsKKyAgICAgICAgICAg
IG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwor
Ym9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
IW1fc2V0LmFkZChzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghbV9zZXQubWVyZ2Uob3RoZXIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBv
bHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKKyAg
ICAgICAgbWFrZVRvcCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIG1lcmdlKG90aGVyLm1fc2V0KTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3Ao
KSkKKyAgICAgICAgbV9zZXQgPSBvdGhlcjsKKyAgICBlbHNlCisgICAgICAgIG1fc2V0LmZpbHRl
cihvdGhlcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc1RvcCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZmlsdGVyKG90aGVyLm1fc2V0KTsKK30KKwor
bmFtZXNwYWNlIHsKKworY2xhc3MgQ29uZm9ybXNUb1R5cGUgeworcHVibGljOgorICAgIENvbmZv
cm1zVG9UeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0
cnVjdHVyZSkgJiBtX3R5cGUpOworICAgIH0KK3ByaXZhdGU6CisgICAgU3BlY3VsYXRlZFR5cGUg
bV90eXBlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgaWYgKCEo
dHlwZSAmIFNwZWNDZWxsKSkgeworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Q29uZm9ybXNUb1R5cGUgY29uZm9ybXNUb1R5cGUodHlwZSk7CisgICAgZ2VuZXJpY0ZpbHRlcihj
b25mb3Jtc1RvVHlwZSk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y29udGFp
bnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5jb250YWlucyhzdHJ1Y3R1cmUpOwor
fQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyKTsKK30KKworYm9vbCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdWJzZXRPZihvdGhlci5tX3NldCk7Cit9CisKK2Jv
b2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHJldHVybiBtX3NldC5pc1N1cGVyc2V0T2Yob3RoZXIpOworfQorCitib29sIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWU6Om92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKGlzVG9wKCkgfHwgb3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0Lm92ZXJsYXBzKG90aGVyLm1fc2V0KTsKK30K
KworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3NldC5tX3BvaW50ZXIg
PT0gb3RoZXIubV9zZXQubV9wb2ludGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICBpZiAoaXNUb3AoKSB8fCBvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgcmV0dXJuIG1fc2V0ID09IG90aGVyLm1fc2V0OworfQorCit2b2lkIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRl
eHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIG91dC5wcmlu
dCgiVE9QIik7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBj
b250ZXh0KSk7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMzcsMzAwICszNywxMDQgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewogCiBjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHsKIHB1YmxpYzoKLSAgICBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkKLSAgICAgICAgOiBtX3N0cnVjdHVyZSgwKQotICAgIHsK
LSAgICB9Ci0gICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpIHsgfQogICAgIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgICAgIDogbV9zdHJ1
Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICA6IG1fc2V0KHN0cnVjdHVyZSkKICAgICB7CiAgICAg
fQotICAgIAotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0JiBz
ZXQpCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KQorICAgICAgICA6IG1fc2V0KG90aGVyKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChzZXQuc2l6
ZSgpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgMToKLSAgICAgICAg
ICAgIG1fc3RydWN0dXJlID0gc2V0WzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y2xlYXIoKQogICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICBtX3NldC5j
bGVhcigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG1ha2VUb3AoKQotICAgIHsKLSAgICAgICAg
bV9zdHJ1Y3R1cmUgPSB0b3BWYWx1ZSgpOwotICAgIH0KKyAgICB2b2lkIG1ha2VUb3AoKTsKICAg
ICAKLSAgICBzdGF0aWMgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB0b3AoKQotICAgIHsKLSAgICAg
ICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAgdmFsdWUubWFrZVRvcCgp
OwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQorI2lmIEFTU0VSVF9ESVNBQkxFRAorICAg
IHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3QgeyB9CisjZWxzZQorICAgIHZvaWQg
YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CisjZW5kaWYKICAgICAKLSAgICB2b2lkIGFk
ZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghY29udGFpbnMo
c3RydWN0dXJlKSAmJiAhaXNUb3AoKSk7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAg
ICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7Ci0gICAgfQorICAgIHZvaWQgY2xvYmJlcigpOwogICAgIAotICAgIGJvb2wg
YWRkQWxsKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoaXNU
b3AoKSB8fCAhb3RoZXIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAob3RoZXIuc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkg
ewotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlclswXTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlclswXSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgc3RhdGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUg
dG9wKCkKICAgICB7Ci0gICAgICAgIGlmICghb3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkgewotICAgICAgICAgICAgbWFrZVRv
cCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1f
c3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1
Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbWFrZVRv
cCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHJ1
Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9zZXQubV9w
b2ludGVyID0gdG9wVmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc0NsZWFyKCkgY29uc3QgeyByZXR1
cm4gbV9zZXQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2V0Lm1fcG9pbnRlciA9PSB0b3BWYWx1ZTsgfQorICAgIGJvb2wgaXNOZWl0aGVyQ2xlYXJOb3JU
b3AoKSBjb25zdCB7IHJldHVybiAhaXNDbGVhcigpICYmICFpc1RvcCgpOyB9CisgICAgYm9vbCBp
c0Zpbml0ZSgpIGNvbnN0IHsgcmV0dXJuICFpc1RvcCgpOyB9CiAgICAgCi0gICAgYm9vbCBpc1N1
YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3N0
cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gb3RoZXIu
Y29udGFpbnMobV9zdHJ1Y3R1cmUpOwotICAgIH0KKyAgICBib29sIGFkZChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSk7CiAgICAgCi0gICAgYm9vbCBkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbihTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1
cmU7Ci0gICAgfQorICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7Cisg
ICAgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcik7CisgICAg
dm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7CisgICAgdm9pZCBmaWx0ZXIo
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKFNw
ZWN1bGF0ZWRUeXBlIHR5cGUpOwogICAgIAotICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIW90aGVyLnNpemUoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAob3RoZXIuc2l6ZSgpID4gMSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVy
WzBdOwotICAgIH0KKyAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25z
dDsKICAgICAKLSAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBpZiAo
b3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09
IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAKKyAgICBib29sIGlzU3Vw
ZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKICAgICBib29sIGlzU3Vw
ZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlzKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAg
ICBpZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgc3dpdGNoIChvdGhlci5zaXplKCkpIHsKLSAg
ICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgfQotICAgIAotICAg
IHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQotICAgIHsK
LSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIu
bV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVk
VHlwZSBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICghKG90aGVyICYgU3BlY0NlbGwpKSB7Ci0g
ICAgICAgICAgICBjbGVhcigpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICBpZiAoaXNDbGVhck9yVG9wKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgaWYgKCEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlKSAmIG90
aGVyKSkKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICB9Ci0gICAgCi0gICAgYm9v
bCBpc0NsZWFyKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmU7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA9
PSB0b3BWYWx1ZSgpOyB9CisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKSBjb25zdDsKICAgICAKLSAgICBib29sIGlzQ2xlYXJPclRvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlIDw9IHRvcFZhbHVlKCk7IH0KLSAgICBib29sIGlzTmVpdGhlckNsZWFyTm9y
VG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xlYXJPclRvcCgpOyB9CisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAKICAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOwot
ICAgICAgICByZXR1cm4gISFtX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LnNpemUo
KTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBhdChzaXplX3QgaSkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7Ci0gICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZSk7
Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmU7CisgICAgICAgIHJldHVybiBtX3NldC5hdChpKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0
dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0
KGkpOwotICAgIH0KKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsg
cmV0dXJuIGF0KGkpOyB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QKKyAgICAv
LyBGSVhNRTogRWxpbWluYXRlIGFsbCB1c2VzIG9mIHRoaXMgbWV0aG9kLiBUaGVyZSBzaG91bGRu
J3QgYmUgYW55CisgICAgLy8gc3BlY2lhbC1jYXNpbmcgZm9yIHRoZSBvbmUtc3RydWN0dXJlIGNh
c2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIy
OQorICAgIFN0cnVjdHVyZSogb25seVN0cnVjdHVyZSgpIGNvbnN0CiAgICAgeworICAgICAgICBp
ZiAoc2l6ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0
dXJuIGF0KDApOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAg
ICAgICAgcmV0dXJuIFNwZWNDZWxsOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAgICAg
ICAgcmV0dXJuIFNwZWNOb25lOwotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3RydWN0
dXJlKG1fc3RydWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ZhbGlkT2Zmc2V0KFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChv
ZmZzZXQpOwotICAgIH0KLSAgICAKLSAgICBib29sIGhhc1NpbmdsZXRvbigpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKTsKLSAgICB9Ci0gICAgCi0g
ICAgU3RydWN0dXJlKiBzaW5nbGV0b24oKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
TmVpdGhlckNsZWFyTm9yVG9wKCkpOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmU7Ci0gICAg
fQorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOwotICAg
IH0KK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0b3BWYWx1ZSA9IFN0cnVj
dHVyZVNldDo6cmVzZXJ2ZWRWYWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcG9seW1v
cnBoaXNtTGltaXQgPSAxMDsKICAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
aXNUb3AoKSkgewotICAgICAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCJbIik7Ci0gICAg
ICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoKm1f
c3RydWN0dXJlLCBjb250ZXh0KSk7Ci0gICAgICAgIG91dC5wcmludCgiXSIpOwotICAgIH0KLQot
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHZvaWQgbWFrZVRvcFdo
ZW5UaGluKCkKICAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICAgICAg
QVNTRVJUKG1fc2V0LmlzVGhpbigpKTsKKyAgICAgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFs
dWU7CiAgICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkg
eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQotICAgIAotICAgIC8v
IE5CLiBUaGlzIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KICAgICAKLSAgICAvLyBU
aGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgotICAgIFN0cnVj
dHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlU2V0IG1fc2V0OwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CitwdWJsaWM6CisgICAgV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ3YXRjaGFibGUgc3RydWN0dXJlIHdhdGNoaW5n
IikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsK
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7
CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBu
b2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6
CisgICAgICAgICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgICAgICAg
ICAgdHJ5V2F0Y2gobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2Ug
Q2hlY2tGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+ZnVuY3Rp
b24oKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAgICAgICAgICAgICAgICAgICB0
cnlXYXRjaChub2RlLT5leGVjdXRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgor
ICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgor
ICAgICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICAgICAgICAgICAg
ICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgor
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3
U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3BlY2lmaWNWYWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3YXRjaCBh
bnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVj
dHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNl
dCBpZiBhbnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQg
dGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmNhbGxMaW5rU3Rh
dHVzKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlP
ZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHRyeVdhdGNo
KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAg
ICAgICAgICB0cnlXYXRjaCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dHJ5V2F0Y2goSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKGNlbGwpCisgICAgICAg
ICAgICB0cnlXYXRjaChjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dHJ5V2F0Y2goY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgdHJ5V2F0Y2goc2V0W2ld
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgfQorfTsKKworYm9v
bCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgV2F0Y2hhYmxlIFN0cnVjdHVyZSBX
YXRjaGluZyIpOworICAgIHJldHVybiBydW5QaGFzZTxXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGlu
Z1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2V0IHdhdGNocG9p
bnRzIG9uIGFueSBzdHJ1Y3R1cmVzIHRoYXQgd2Uga25vdyBvZiB0aGF0IGFyZSBjdXJyZW50bHkg
d2F0Y2hhYmxlLiBJdCdzCisvLyBzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlLCBidXQgdGhpcyBl
bmRzIHVwIGJlaW5nIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZlY3RpdmUgd2F5CisvLyBvZiBy
ZWR1Y2luZyBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRlcm1pbmFsIHN0cnVjdHVyZXM6CisvLworLy8g
LSBXZSB1c2VkIHRvIG9ubHkgc2V0IHdhdGNocG9pbnRzIG9uIHdhdGNoYWJsZSBzdHJ1Y3R1cmVz
IGlmIHdlIGtuZXcgdGhhdCB0aGlzIHdvdWxkCisvLyAgIHJlbW92ZSBhIHN0cnVjdHVyZSBjaGVj
ay4gRXhwZXJpbWVudHMgc2hvdyB0aGF0IHN3aXRjaGluZyBmcm9tIHRoYXQsIHRvIGJsaW5kbHkK
Ky8vICAgc2V0dGluZyB3YXRjaHBvaW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMsIHdh
cyBub3QgYSByZWdyZXNzaW9uLgorLy8KKy8vIC0gSXQgbWFrZXMgYWJzdHJhY3QgaW50ZXJwcmV0
YXRpb24gYSB3aG9sZSBsb3QgZWFzaWVyLiBXZSBqdXN0IGFzc3VtZSB0aGF0IHdhdGNoYWJsZQor
Ly8gICBzdHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGFu
eSBvdGhlciBsb2dpYy4KKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVj
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksMTMgKzExOSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBh
ZGRMYXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0
aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAg
ICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgp
LT5vcCgpID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50
IDogQmFkQ2FjaGVXYXRjaHBvaW50LAotICAgICAgICAgICAgICAgIG1fbm9kZS0+c3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBh
ZGRMYXppbHkobV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBi
cmVhazsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232232</attachid>
            <date>2014-05-28 20:45:04 -0700</date>
            <delta_ts>2014-05-29 15:09:22 -0700</delta_ts>
            <desc>crashes on launch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>99508</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUzLDYgKzM1Myw3IEBACiAJCTBGODMzNUI4MTYzOUMx
RUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGODM2NEI3MTY0QjBDMTEwMDUzMzI5QSAvKiBERkdCcmFuY2hE
aXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODM2NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjg4NUUxMTE4NDlB
M0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODg1RTEwMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODkz
QkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLzsg
fTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTMxNzJFMDQ5RTAwN0RC
REE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyog
RlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVk
SWRlbnRpZmllcnMuY3BwICovOyB9OwpAQCAtNDk1LDYgKzQ5Niw4IEBACiAJCTBGQ0VGQURGMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9j
YXRpb24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VG
QURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAv
KiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDJE
NEZFMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJE
NEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
LmNwcCAqLzsgfTsKKwkJMEZEMkQ0RkYxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDJENEZEMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1
Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICov
OyB9OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZC
NEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi87IH07CkBAIC0yMTYwLDYgKzIxNjMs
NyBAQAogCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODM2NEI1MTY0QjBDMEUwMDUz
MzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQnJhbmNoRGlyZWN0aW9uLmg7IHBhdGggPSBkZmcvREZHQnJhbmNoRGlyZWN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTEwMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
eXRlY29kZVVzZURlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjg5M0JEQTE5
MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNw
cDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAv
KiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5r
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRB
NSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMxMyw2ICsyMzE3LDggQEAKIAkJMEZD
RUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExvY2F0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExMb2Nh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQURFMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExMb2NhdGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMkQ0RkMxOTJGRUU1ODAwQTE3OEJG
IC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZEMTkyRkVFNTgwMEExNzhCRiAv
KiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZH
QmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDgwNiw2ICs0ODEyLDcgQEAKIAkJCQkyQUND
RjNERDE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8s
CiAJCQkJMEZDMjBDQjMxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhh
c2UuY3BwICovLAogCQkJCTBGQzIwQ0I0MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmggKi8sCisJCQkJMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3
QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8sCiAJCQkJMEYyRkNDRjcxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwICovLAogCQkJCTBGMkZDQ0Y4MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmggKi8sCkBAIC00ODM4LDYgKzQ4NDUsOCBAQAogCQkJ
CTBGMkJEQzQzMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggKi8s
CiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLAorCQkJCTBGRDJENEZDMTkyRkVFNTgw
MEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLywKKwkJ
CQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5oICovLAogCQkJCTBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkM5N0YzQzE4MjAyMTE5MDAyQzlCMjYg
LyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBGREIyQ0U1MTc0ODMw
QTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCkBAIC01Nzc2LDYgKzU3ODUsNyBAQAog
CQkJCTBGNDg1MzI4MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJDIC8qIEZU
TENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEMkQ0RkYxOTJGRUU1ODAwQTE3
OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTJBQzkyMkJDMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRl
YnVnTGluZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Niw2ICs2OTY2LDcgQEAKIAkJCQkw
RkYwRjE5OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTc2N0I1QjUxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJD
cmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENE
ODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEMkQ0RkUx
OTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVy
YWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIg
LyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEy
RDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzE3NCw2ICs3MTg1LDcg
QEAKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxlclByaXZhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJEMzAwN0NCNjNBIC8qIEpTUHJvbWlz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3QkVFMjQwMDA3Q0I2M0EgLyogSlNQ
cm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4OTNCREIxOTM2RTIz
QzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDMDA4Q0QyMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21pc2VG
dW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUUxN0JFRTIyRTAwN0NCNjNB
IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBTdHJ1Y3R1cmVTZXQmIFN0cnVjdHVy
ZVNldDo6b3BlcmF0b3I9KGNvCiB2b2lkIFN0cnVjdHVyZVNldDo6Y2xlYXIoKQogewogICAgIGRl
bGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAgIHNldCgwLCB0cnVlKTsKKyAgICBz
ZXRFbXB0eSgpOwogfQogCiBib29sIFN0cnVjdHVyZVNldDo6YWRkKFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6cmVtb3ZlKFN0cnVjdHVy
ZSogc3RyCiB7CiAgICAgaWYgKGlzVGhpbigpKSB7CiAgICAgICAgIGlmIChzaW5nbGVTdHJ1Y3R1
cmUoKSA9PSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICAgICAg
ICAgIHNldEVtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgU3RydWN0dXJlU2V0Ojpy
ZW1vdmUoU3RydWN0dXJlKiBzdHIKICAgICAgICAgbGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+bGlz
dCgpWy0tbGlzdC0+bV9sZW5ndGhdOwogICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKSB7CiAg
ICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QpOwotICAgICAgICAgICAgc2V0
KDAsIHRydWUpOworICAgICAgICAgICAgc2V0RW1wdHkoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNDQsMjMgKzE0NCw4IEBAIHZvaWQgU3RydWN0dXJlU2V0
OjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKHNpbmds
ZVN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2xlYXIoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3Ry
dWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGlmIChvdGhlci5jb250YWluc091dE9mTGluZShsaXN0LT5saXN0
KClbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVtpLS1d
ID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwotICAgIH0KLSAgICBpZiAoIWxpc3Qt
Pm1fbGVuZ3RoKQotICAgICAgICBjbGVhcigpOworICAgIENvbnRhaW5zT3V0T2ZMaW5lIGNvbnRh
aW5zT3V0T2ZMaW5lKG90aGVyKTsKKyAgICBnZW5lcmljRmlsdGVyKGNvbnRhaW5zT3V0T2ZMaW5l
KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmV4Y2x1ZGUoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9TdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDE1IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCituYW1lc3BhY2UgREZHIHsKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU7Cit9CisKIGNsYXNzIFN0cnVjdHVyZVNldCB7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJl
U2V0KCkKICAgICB7Ci0gICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICAgICAgc2V0RW1wdHkoKTsK
ICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlU2V0KFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAt
NjcsNyArNzEsMTAgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOworICAg
ICAgICBib29sIHJlc3VsdCA9IGlzVGhpbigpICYmICFzaW5nbGVTdHJ1Y3R1cmUoKTsKKyAgICAg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIEFTU0VSVChtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRW
YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAogICAgIGJvb2wgYWRk
KFN0cnVjdHVyZSopOwpAQCAtNzgsNiArODUsMjggQEAgcHVibGljOgogICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVT
ZXQmKTsKICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZ2Vu
ZXJpY0ZpbHRlcihGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaWYgKGlzVGhpbigp
KSB7CisgICAgICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKHNpbmdsZVN0cnVjdHVyZSgpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBPdXRPZkxpbmVMaXN0KiBsaXN0
ID0gc3RydWN0dXJlTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlz
dC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0b3IobGlzdC0+bGlzdCgp
W2ldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxpc3QtPmxpc3Qo
KVtpLS1dID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOworICAgICAgICB9CisgICAg
ICAgIGlmICghbGlzdC0+bV9sZW5ndGgpCisgICAgICAgICAgICBjbGVhcigpOworICAgIH0KKyAg
ICAKICAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JikgY29uc3Q7CiAgICAg
Ym9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKICAgICB7
CkBAIC0xMjQsMTUgKzE1MywzMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBERkc6OlN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0aGluRmxh
ZyA9IDE7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZEZsYWcgPSAyOwotICAg
IHN0YXRpYyBjb25zdCB1aW50cHRyX3QgZmxhZ3MgPSAzOworICAgIHN0YXRpYyBjb25zdCB1aW50
cHRyX3QgZmxhZ3MgPSAxOwogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRWYWx1
ZSA9IDQ7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFN0YXJ0aW5nU2l6ZSA9
IDQ7CiAgICAgCiAgICAgYm9vbCBhZGRPdXRPZkxpbmUoU3RydWN0dXJlKik7CiAgICAgYm9vbCBj
b250YWluc091dE9mTGluZShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICBjbGFzcyBDb250
YWluc091dE9mTGluZSB7CisgICAgcHVibGljOgorICAgICAgICBDb250YWluc091dE9mTGluZShj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9zZXQoc2V0KQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRh
aW5zT3V0T2ZMaW5lKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG1fc2V0OworICAgIH07CisKICAgICB2b2lkIGNvcHlGcm9t
KGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAogICAgIGNsYXNzIE91dE9mTGluZUxpc3QgewpA
QCAtMTU0LDcgKzIwMCw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBkZWxldGVTdHJ1Y3R1
cmVMaXN0SWZOZWNlc3NhcnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFpc1RoaW4oKSkKKyAgICAg
ICAgaWYgKCFpc1RoaW4oKSAmJiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKICAgICAgICAg
ICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3koc3RydWN0dXJlTGlzdCgpKTsKICAgICB9CiAgICAg
CkBAIC0xODUsOSArMjMxLDEzIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlcyksIGZhbHNlKTsKICAgICB9CisgICAgdm9pZCBz
ZXRFbXB0eSgpCisgICAgeworICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQogICAgIHZvaWQg
c2V0KHVpbnRwdHJfdCBwb2ludGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKICAgICB7Ci0gICAg
ICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAw
KSB8IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOworICAgICAgICBtX3BvaW50ZXIgPSBwb2lu
dGVyIHwgKHNpbmdsZVN0cnVjdHVyZSA/IHRoaW5GbGFnIDogMCk7CiAgICAgfQogCiAgICAgdWlu
dHB0cl90IG1fcG9pbnRlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTIw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDE3IEBAIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICB9CiAKICAgICAvLyBOZXh0IGNoZWNrIGlm
IHdlIGNhbiBmb2xkIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0
IG9yIHN0cmluZyBhbmQgZG9lcyBub3QgZXF1YWwgdW5kZWZpbmVkLgotICAgIGlmIChpc0NlbGxT
cGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpCi0gICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlm
ICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAgICAgICAgICAgICYmIHN0cnVjdHVy
ZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gU3RyaW5nVHlwZSkKKyAgICBpZiAoaXNDZWxsU3BlY3Vs
YXRpb24odmFsdWUubV90eXBlKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkgeworICAg
ICAgICBib29sIGFsbFRydWUgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1
ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICBpZiAoc3RydWN0dXJl
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpIHsKKyAgICAgICAgICAgICAgICBhbGxUcnVlID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGFsbFRydWUpCiAgICAgICAgICAgICByZXR1cm4gRGVmaW5pdGVseVRydWU7
CiAgICAgfQogICAgIApAQCAtMTQ1Niw3ICsxNDYyLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkg
ewotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHVz
ZSBvZiBvbmx5U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBHZXRCeUlk
U3RhdHVzIHRoZSBhYmlsaXR5CisgICAgICAgICAgICAvLyB0byBjb21wdXRlIHRoaW5ncyBiYXNl
ZCBvbiBhIFN0cnVjdHVyZVNldCwgYW5kIHRoZW4gdG8gZmFjdG9yIEJ5dGVDb2RlUGFyc2VyJ3MK
KyAgICAgICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIEdldEJ5
SWRTdGF0dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAgICAgICAgIC8vIENv
bnN0YW50Rm9sZGluZ1BoYXNlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5v
bmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV92bSwgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJz
KClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CkBAIC0xNTAyLDggKzE1MTMsMTIgQEAgYm9v
bCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBU1NFUlQoISh2
YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUg
YWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2Rl
LT5zdHJ1Y3R1cmVTZXQoKTsKLQotICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgIAorICAgICAgICAvLyBJdCdzIGludGVy
ZXN0aW5nIHRoYXQgd2UgY291bGQgaGF2ZSBwcm92ZW4gdGhhdCB0aGUgb2JqZWN0IGhhcyBhIGxh
cmdlciBzdHJ1Y3R1cmUgc2V0CisgICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdy
ZSB0ZXN0aW5nLiBJbiB0aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUgc3RydWN0dXJlIGNoZWNr
CisgICAgICAgIC8vIG1vcmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkgZG9uJ3QuCisgICAgICAg
IAorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KQEAgLTE1MTEsMzIgKzE1MjYsMTMgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogCi0gICAgICAgIC8vIElm
IHRoaXMgc3RydWN0dXJlIGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFs
cmVhZHkgaGVsZCBpbgotICAgICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0
IHRoZW4gdGhlIGNvbnN0YW50IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCi0gICAgICAgIC8vIHR1cm4g
dGhpcyBpbnRvIGEgd2F0Y2hwb2ludCBpbnN0ZWFkLgotICAgICAgICBpZiAodmFsdWUubV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgICYmIHZhbHVl
Lm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAg
IG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICBmaWx0ZXIodmFs
dWUsIHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQogICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOwotCi0gICAgICAgIGZpbHRlcih2YWx1ZSwgbm9kZS0+c3RydWN0dXJl
KCkpOwotICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwotICAgICAgICBu
b2RlLT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
Ci0gICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNDbGVhcigpKSB7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhj
bG9iYmVyTGltaXQpOwogICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1f
Z3JhcGgsIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CkBAIC0xNjE3LDggKzE2
MTMsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2Fz
ZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2Rl
LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5p
c1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRy
dWUpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhjbG9iYmVyTGltaXQpOwpAQCAtMTY1MSw3ICsxNjQ2LDExIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFs
dWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQVNTRVJUKCEodmFsdWUubV90
eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkg
ZW5zdXJlZCB0aGlzLgogCi0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
LmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBqdXN0IGZp
bHRlciBkb3duIHRoZSBjYXNlcyBpbiBNdWx0aUdldEJ5T2Zmc2V0LiBJZiB0aGF0IHJlc3VsdHMg
aW4gYWxsCisgICAgICAgIC8vIGNhc2VzIGhhdmluZyB0aGUgc2FtZSBvZmZzZXQgdGhlbiB3ZSBz
aG91bGQgc3RyZW5ndGggcmVkdWNlIGl0IHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKworICAgICAgICAv
LyBHZXRCeU9mZnNldC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1
ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9
IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBjb25z
dCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07CkBAIC0xNjg4LDcgKzE2ODcsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRo
aXMuCiAKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3Zl
blN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24g
dGhlIGNhc2VzIGluIE11bHRpUHV0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIK
KyAgICAgICAgLy8gb25lIGNhc2UsIG9yIG5vdGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRo
ZXkgaGF2ZSB0aGUgc2FtZSBvZmZzZXQsIHRoZW4gd2Ugc2hvdWxkCisgICAgICAgIC8vIGp1c3Qg
c3RyZW5ndGggcmVkdWNlIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVj
a1N0cnVjdHVyZSwKKyAgICAgICAgLy8gW1JlXUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRT
dHJ1Y3R1cmUsIGFuZCBQdXRCeU9mZnNldC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAg
IGJvb2wgZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+
bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAg
ICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBAIC0xNzIxLDEyICsxNzI1LDEyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsK
ICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewotICAgICAgICAgICAgICAgIGlmICh2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJpYW50LnN0cnVjdHVyZSgp
KSkKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuY29udGFpbnModmFyaWFu
dC5zdHJ1Y3R1cmUoKSkpCiAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5z
dHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5z
aXRpb24pOwotICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmNv
bnRhaW5zKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKQorICAgICAgICAgICAgaWYgKHZhbHVlLm1f
c3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKQogICAgICAgICAgICAg
ICAgIG5ld1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC0xNzY3LDcgKzE3NzEsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVj
dDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVy
ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUg
cmVwbGFjZWQgYnkgZ2l2aW5nIFB1dEJ5SWRTdGF0dXMgdGhlIGFiaWxpdHkKKyAgICAgICAgLy8g
dG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQgb24gYSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZh
Y3RvciBCeXRlQ29kZVBhcnNlcidzCisgICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29k
ZSBiYXNlZCBvbiBhIFB1dEJ5SWRTdGF0dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQK
KyAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBp
ZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVj
dHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVz
ID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
dm0sCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDEy
IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0TW9zdFNwZWNpZmljKEdyYXAKIHsKICAgICBpZiAo
ISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJl
KGdyYXBoLCBzdHJ1Y3R1cmUpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgZ3JhcGgud2F0Y2hwb2ludHMo
KS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJy
YXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAgICAgICAKQEAgLTUwLDE5ICs1MCwyMCBA
QCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiAgICAgbV92YWx1ZSA9
IHZhbHVlOwogICAgICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNX
YXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBo
LCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7
Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgbV9z
dHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIG1f
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xl
YXIoKTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICB9CiAgICAgCkBAIC03MCwxNyAr
NzEsMTggQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKUwogICAgIG1f
dmFsdWUgPSB2YWx1ZTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0
SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdy
YXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZSA9IHN0cnVjdHVyZTsKLSAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwgc3Ry
dWN0dXJlKTsKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBtX2FycmF5TW9kZXMg
PSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgbV90eXBlID0g
c3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgbV92YWx1ZSA9IEpTVmFs
dWUoKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVk
KGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRp
b24oTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uKQpAQCAtMTI5LDIxICsxMzEsMTggQEAgRmlsdHJh
dGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIAogICAgIG1fdHlwZSAmPSBv
dGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9hcnJheU1vZGVzICY9IG90
aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwotICAgIG1fY3VycmVudEtub3duU3RydWN0
dXJlLmZpbHRlcihvdGhlcik7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKICAgICAK
ICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3IgdG8gdGhlIGFib3ZlIHR3byBzdGF0ZW1l
bnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAgIC8vIEZvbyBpcyBhIFNwZWN1bGF0ZWRU
eXBlIHRoYXQgaXMgZGlzam9pbnQgd2l0aCB0aGUgcGFzc2VkIFN0cnVjdHVyZVNldC4gSW4gdGhh
dAogICAgIC8vIGNhc2UsIHdlIHdpbGwgbm93IGhhdmUgKE5vbmUsIFtzb21lU3RydWN0dXJlXSku
IEluIGdlbmVyYWwsIHdlIG5lZWQgdG8gbWFrZQogICAgIC8vIHN1cmUgdGhhdCBuZXcgaW5mb3Jt
YXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlwZSBuZWVkcyB0byBiZSBmZWQgYmFj
awogICAgIC8vIGludG8gdGhlIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0aGUgU3RydWN0dXJl
U2V0LgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOworICAgIG1f
c3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogICAgIAotICAgIGlmIChtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUoZ3JhcGgsIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKLSAgICAgICAg
CiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7
Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICByZXR1cm4gbm9ybWFsaXplQ2xh
cml0eShncmFwaCk7CiB9CiAKIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
QXJyYXlNb2RlcyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCkBAIC0xNjksOCArMTY4LDcgQEAgRmls
dHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoUwogICAgIC8vIHRoZSBwYXNzZWQg
dHlwZSBpcyBBcnJheS4gQXQgdGhpcyBwb2ludCB3ZSdsbCBoYXZlIChOb25lLCBUT1ApLiBUaGUg
YmVzdCB3YXkKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgc3RydWN0dXJlIGZpbHRlcmluZyBk
b2VzIHRoZSByaWdodCB0aGluZyBpcyB0byBmaWx0ZXIgb24KICAgICAvLyB0aGUgbmV3IHR5cGUg
KE5vbmUpIHJhdGhlciB0aGFuIHRoZSBvbmUgcGFzc2VkIChBcnJheSkuCi0gICAgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7Ci0gICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5maWx0ZXIobV90eXBlKTsKKyAgICBtX3N0cnVjdHVyZS5maWx0ZXIodHlwZSk7CiAgICAg
ZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7CiAgICAg
cmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKQEAgLTE4NCwxNSArMTgyLDYgQEAgRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoR3JhcGgmIGdy
YXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAg
ICBpZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpKSkKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKLSAgICBlbHNlCi0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUu
bWFrZVRvcCgpOwotfQotCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkK
IHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkBAIC0yMzgsOCArMjI3LDcgQEAgYm9v
bCBBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKCkgY29ucwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAKICAgICBpZiAoIShtX3R5cGUgJiB+U3BlY0NlbGwpCi0gICAgICAgICYmICghbV9h
cnJheU1vZGVzCi0gICAgICAgICAgICB8fCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFy
KCkpKQorICAgICAgICAmJiAoIW1fYXJyYXlNb2RlcyB8fCBtX3N0cnVjdHVyZS5pc0NsZWFyKCkp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjMs
MTIgKzI1MSwxOCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6Om5vcm1hbGl6CiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpu
b3JtYWxpemVDbGFyaXR5KEdyYXBoJiBncmFwaCkKK3sKKyAgICBGaWx0cmF0aW9uUmVzdWx0IHJl
c3VsdCA9IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIEFic3Ry
YWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIGlmICghKG1fdHlwZSAm
IFNwZWNDZWxsKSkgewotICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXND
bGVhcigpKTsKLSAgICAgICAgQVNTRVJUKG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNDbGVh
cigpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgIEFT
U0VSVCghbV9hcnJheU1vZGVzKTsKICAgICB9CiAgICAgCkBAIC0yODksNiArMjgzLDExIEBAIHZv
aWQgQWJzdHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGMKICAgICAvLyB3ZSBkb24ndCB3
YW50IHRvIGdldCBwZWRhbnRpYyBhYm91dCB0aGlzIGFzIGl0IHdvdWxkIG9ubHkgaW5jcmVhc2Ug
dGhlIGNvbXB1dGF0aW9uYWwKICAgICAvLyBjb21wbGV4aXR5IG9mIHRoZSBjb2RlLgogfQorCit2
b2lkIEFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZChHcmFwaCYgZ3JhcGgpIGNvbnN0Cit7
CisgICAgbV9zdHJ1Y3R1cmUuYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKK30KICNlbmRpZgogCiB2
b2lkIEFic3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTMwMiw4
ICszMDEsNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTCiAgICAg
aWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAg
ICIsICIsIEFycmF5TW9kZXNEdW1wKG1fYXJyYXlNb2RlcyksICIsICIsCi0gICAgICAgICAgICBp
bkNvbnRleHQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUsIGNvbnRleHQpLCAiLCAiLAotICAgICAg
ICAgICAgaW5Db250ZXh0KG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUsIGNvbnRleHQpKTsKKyAg
ICAgICAgICAgIGluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCkpOwogICAgIH0KICAgICBp
ZiAoISFtX3ZhbHVlKQogICAgICAgICBvdXQucHJpbnQoIiwgIiwgaW5Db250ZXh0KG1fdmFsdWUs
IGNvbnRleHQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsNyBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBtX3R5cGUgPSBTcGVjTm9uZTsKICAg
ICAgICAgbV9hcnJheU1vZGVzID0gMDsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
Y2xlYXIoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAg
ICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwog
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtNzUsMTAgKzc0LDEwIEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKICAgICB7
CiAgICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xvYmJl
cigpOwogICAgICAgICAgICAgY2xvYmJlckFycmF5TW9kZXMoKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgICAgICBB
U1NFUlQoIW1fYXJyYXlNb2Rlcyk7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOwpAQCAtOTEsNyArOTAsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAg
IGJvb2wgaXNIZWFwVG9wKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAobV90eXBlIHwg
U3BlY0hlYXBUb3ApID09IG1fdHlwZSAmJiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1RvcCgp
ICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNUb3AoKTsKKyAgICAgICAgcmV0dXJuICht
X3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90eXBlCisgICAgICAgICAgICAmJiBtX3N0cnVjdHVy
ZS5pc1RvcCgpCisgICAgICAgICAgICAmJiBtX2FycmF5TW9kZXMgPT0gQUxMX0FSUkFZX01PREVT
CisgICAgICAgICAgICAmJiAhbV92YWx1ZTsKICAgICB9CiAgICAgCiAgICAgYm9vbCB2YWx1ZUlz
VG9wKCkgY29uc3QKQEAgLTExOCwxMiArMTIwLDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICB2b2lkIHNldFR5cGUoU3BlY3VsYXRlZFR5cGUgdHlwZSkKICAgICB7CiAgICAgICAgIGlm
ICh0eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
Lm1ha2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRv
cCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAgbV9h
cnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgICAgIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFy
KCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgICAgICB9CiAgICAgICAgIG1f
dHlwZSA9IHR5cGU7CkBAIC0xMzgsOCArMTM4LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBvdGhlci5tX3R5cGUKICAgICAgICAgICAg
ICYmIG1fYXJyYXlNb2RlcyA9PSBvdGhlci5tX2FycmF5TW9kZXMKLSAgICAgICAgICAgICYmIG1f
Y3VycmVudEtub3duU3RydWN0dXJlID09IG90aGVyLm1fY3VycmVudEtub3duU3RydWN0dXJlCi0g
ICAgICAgICAgICAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID09IG90aGVyLm1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlCiAgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CiAgICAg
fQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QK
QEAgLTE2Miw4ICsxNjEsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIG90aGVy
Lm1fdHlwZSk7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VBcnJheU1vZGVzKG1fYXJyYXlN
b2Rlcywgb3RoZXIubV9hcnJheU1vZGVzKTsKLSAgICAgICAgICAgIHJlc3VsdCB8PSBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUpOwot
ICAgICAgICAgICAgcmVzdWx0IHw9IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuYWRkQWxsKG90
aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAgcmVzdWx0IHw9IG1f
c3RydWN0dXJlLm1lcmdlKG90aGVyLm1fc3RydWN0dXJlKTsKICAgICAgICAgICAgIGlmIChtX3Zh
bHVlICE9IG90aGVyLm1fdmFsdWUpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgfD0gISFtX3Zh
bHVlOwogICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC0xNzksOCArMTc3
LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKG1f
dHlwZSwgdHlwZSk7CiAgICAgICAgIAogICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKSB7Ci0g
ICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgICAg
ICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9N
T0RFUzsKICAgICAgICAgfQogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtMjI1LDc1
ICsyMjIsMzAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBpZiAoISF2YWx1ZSAm
JiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAmIFNwZWNDZWxs
KTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpOwotICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNv
bnRhaW5zKHN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICAmJiBtX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVy
ZS5jb250YWlucyhzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgJiYgKG1fYXJyYXlNb2RlcyAm
IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUq
IGJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAobV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgICAgIHJldHVybiBtX2Z1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgCiAgICAgYm9vbCBoYXNDbG9iYmVyYWJsZVN0YXRlKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc05laXRoZXJDbGVhck5vclRvcCgp
CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5pc05laXRoZXJDbGVhck5vclRvcCgpCiAgICAg
ICAgICAgICB8fCAhYXJyYXlNb2Rlc0FyZUNsZWFyT3JUb3AobV9hcnJheU1vZGVzKTsKICAgICB9
CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkg
Y29uc3QgeyB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdCB7IH0KICNl
bHNlCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CisgICAgdm9pZCBhc3NlcnRJ
c1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKICNlbmRpZgogICAgIAogICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgLy8gQSBncmVhdCB3YXkgdG8gdGhpbmsgYWJv
dXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQKLSAg
ICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGlzIHRvIGNvbnNpZGVyIHRoZXNlIGZvdXIg
ZXhhbXBsZXM6Ci0gICAgLy8KLSAgICAvLyAxKSB4ID0gZm9vKCk7Ci0gICAgLy8KLSAgICAvLyAg
ICBJbiB0aGlzIGNhc2UgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZCBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlIHdpbGwKLSAgICAvLyAgICBib3RoIGJlIFRPUCwgc2luY2Ugd2UgZG9u
J3Qga25vdyBhbnl0aGluZyBhYm91dCB4IGZvciBzdXJlLCB5ZXQuCi0gICAgLy8KLSAgICAvLyAy
KSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLwotICAgIC8vICAgIFdoZXJl
IHggd2lsbCBsYXRlciBoYXZlIGEgbmV3IHByb3BlcnR5IGFkZGVkIHRvIGl0LCAnZycuIEJlY2F1
c2Ugb2YgdGhlCi0gICAgLy8gICAga25vd24gYnV0IG5vdC15ZXQtZXhlY3V0ZWQgcHJvcGVydHkg
YWRkaXRpb24sIHgncyBjdXJyZW50IHN0cnVjdHVyZSB3aWxsCi0gICAgLy8gICAgbm90IGJlIHdh
dGNocG9pbnRhYmxlOyBoZW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBzdGF0aWNhbGx5IGJvdW5kaW5n
IHRoZSBzZXQKLSAgICAvLyAgICBvZiBwb3NzaWJsZSBzdHJ1Y3R1cmVzIHRoYXQgeCBtYXkgaGF2
ZSBpZiBhIGNsb2JiZXJpbmcgZXZlbnQgaGFwcGVucy4gU28sCi0gICAgLy8gICAgeCdzIG1fY3Vy
cmVudEtub3duU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGNoZWNrIHRv
IGdldAotICAgIC8vICAgIHByb3BlcnR5ICdmJywgYW5kIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUgd2lsbCBiZSBUT1AuCi0gICAgLy8KLSAgICAvLyAzKSB4ID0gZm9vKCk7Ci0gICAgLy8gICAg
eSA9IHguZjsKLSAgICAvLwotICAgIC8vICAgIFdoZXJlIHggaGFzIGEgdGVybWluYWwgc3RydWN0
dXJlIHRoYXQgaXMgc3RpbGwgd2F0Y2hwb2ludGFibGUuIEluIHRoaXMgY2FzZSwKLSAgICAvLyAg
ICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUgd2lsbCBib3RoIGJlCi0gICAgLy8gICAgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGNoZWNrZWQg
Zm9yIHdoZW4gZ2V0dGluZyAnZicuCi0gICAgLy8KLSAgICAvLyA0KSB4ID0gZm9vKCk7Ci0gICAg
Ly8gICAgeSA9IHguZjsKLSAgICAvLyAgICBiYXIoKTsKLSAgICAvLwotICAgIC8vICAgIFdoZXJl
IHggaGFzIGEgdGVybWluYWwgc3RydWN0dXJlIHRoYXQgaXMgc3RpbGwgd2F0Y2hwb2ludGFibGUu
IEluIHRoaXMKLSAgICAvLyAgICBjYXNlLCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSB3aWxsIGJl
IFRPUCBiZWNhdXNlIGJhcigpIG1heSBwb3RlbnRpYWxseQotICAgIC8vICAgIGNoYW5nZSB4J3Mg
c3RydWN0dXJlIGFuZCB3ZSBoYXZlIG5vIHdheSBvZiBwcm92aW5nIG90aGVyd2lzZSwgYnV0Ci0g
ICAgLy8gICAgeCdzIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBiZSB3aGF0ZXZlciBz
dHJ1Y3R1cmUgd2UgaGFkIGNoZWNrZWQKLSAgICAvLyAgICB3aGVuIGdldHRpbmcgcHJvcGVydHkg
J2YnLgotICAgIAotICAgIC8vIE5CLiBBbGwgZmllbGRzIGluIHRoaXMgc3RydWN0IG11c3QgaGF2
ZSB0cml2aWFsIGRlc3RydWN0b3JzLgotCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJh
aW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZSByaWdodAogICAg
IC8vIG5vdy4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBtdXN0IGJlbG9uZyB0
byB0aGlzIHNldC4gVGhlIHNldCBtYXkKICAgICAvLyBiZSBUT1AsIGluZGljYXRpbmcgdGhhdCBp
dCBpcyB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBzdHJ1Y3R1cmVzLCBpbiB3aGljaApAQCAtMzAx
LDI5ICsyNTMsMTIgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8vIGluIHdoaWNoIGNh
c2UgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgYSBjZWxsLiBUaGlzIGlzIGFsbCBzdWJqZWN0IHRvIGNo
YW5nZQogICAgIC8vIGFueXRpbWUgYSBuZXcgdmFsdWUgaXMgYXNzaWduZWQgdG8gdGhpcyBvbmUs
IGFueXRpbWUgdGhlcmUgaXMgYSBjb250cm9sIGZsb3cKICAgICAvLyBtZXJnZSwgb3IgbW9zdCBj
cnVjaWFsbHksIGFueXRpbWUgYSBzaWRlLWVmZmVjdCBvciBzdHJ1Y3R1cmUgY2hlY2sgaGFwcGVu
cy4KLSAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3QsIHdlIHR5cGljYWxseSBtdXN0IGFz
c3VtZSB0aGF0IGFueSB2YWx1ZSBtYXkgaGF2ZQotICAgIC8vIGhhZCBpdHMgc3RydWN0dXJlIGNo
YW5nZWQsIGhlbmNlIGNvbnRyYXZlbmluZyBvdXIgcHJvb2YuIFdlIG1ha2UgdGhlIHByb29mCi0g
ICAgLy8gdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMgdG8gVE9QIChpLmUuIGNsYWltaW5n
IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdAotICAgIC8vIHRoaXMgdmFsdWUgbWF5IGhhdmUgYW55
IHN0cnVjdHVyZSkuIE9mIG5vdGUgaXMgdGhhdCB0aGUgcHJvb2YgcmVwcmVzZW50ZWQgYnkKLSAg
ICAvLyB0aGlzIGZpZWxkIGlzIG5vdCBzdWJqZWN0IHRvIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdh
dGNocG9pbnRzIC0gZXZlbiBpZiBvbmUKLSAgICAvLyBmaXJlcywgd2UgY2FuIGJlIHN1cmUgdGhh
dCB0aGlzIHByb29mIGlzIHN0aWxsIHZhbGlkLgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmU7Ci0gICAgCi0gICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBj
b25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZSBub3cK
LSAgICAvLyBvciBhbnkgdGltZSBpbiB0aGUgZnV0dXJlIHN1YmplY3QgdG8gdGhlIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIG9mCi0gICAgLy8gYWxsIG1lbWJlcnMgb2YgdGhpcyBz
ZXQgbm90IGhhdmluZyBmaXJlZC4gVGhpcyBzZXQgaXMgaW1wZXJ2aW91cyB0byBzaWRlLQotICAg
IC8vIGVmZmVjdHM7IGV2ZW4gaWYgb25lIGhhcHBlbnMgdGhlIHNpZGUtZWZmZWN0IGNhbiBvbmx5
IGNhdXNlIHRoZSB2YWx1ZSB0bwotICAgIC8vIGNoYW5nZSB0byBhdCB3b3JzdCBhbm90aGVyIHN0
cnVjdHVyZSB0aGF0IGlzIGFsc28gYSBtZW1iZXIgb2YgdGhpcyBzZXQuIEJ1dCwKLSAgICAvLyB0
aGUgdGhlb3JlbSBiZWluZyBwcm92ZWQgYnkgdGhpcyBmaWVsZCBpcyBwcmVkaWNhdGVkIHVwb24g
dGhlcmUgbm90IGJlaW5nCi0gICAgLy8gYW55IG5ldyBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgaW50
cm9kdWNlZCBpbnRvIGFueSBtZW1iZXJzIG9mIHRoaXMgc2V0LiBJbgotICAgIC8vIGNhc2VzIHdo
ZXJlIHRoZXJlIGlzIG5vIHdheSBmb3IgdXMgdG8gZ3VhcmQgdGhpcyBoYXBwZW5pbmcsIHRoZSBz
ZXQgbXVzdCBiZQotICAgIC8vIFRPUC4gQnV0IGluIGNhc2VzIHdoZXJlIHdlIGNhbiBndWFyZCBu
ZXcgc3RydWN0dXJlIHRyYW5zaXRpb25zIChhbGwgbWVtYmVycwotICAgIC8vIG9mIHRoZSBzZXQg
aGF2ZSBzdGlsbC12YWxpZCBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cykgdGhlbiB0
aGlzIHNldAotICAgIC8vIHdpbGwgYmUgZmluaXRlLiBBbnl0aW1lIHRoYXQgd2UgbWFrZSB1c2Ug
b2YgdGhlIGZpbml0ZSBuYXR1cmUgb2YgdGhpcyBzZXQsCi0gICAgLy8gd2UgbXVzdCBmaXJzdCBp
c3N1ZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQsIHdoaWNoIHdpbGwgZWZmZWN0
aXZlbHkKLSAgICAvLyByZXN1bHQgaW4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYmVpbmcgZmls
dGVyZWQgYWNjb3JkaW5nIHRvCi0gICAgLy8gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS4KLSAg
ICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmU7CisgICAg
Ly8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0LCB3ZSBtdXN0IGFzc3VtZSB0aGF0IGFueSB2YWx1
ZSB3aXRoIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyBpc24ndCBiZWluZyB3YXRjaGVkIG1heSBo
YXZlIGhhZCBpdHMgc3RydWN0dXJlIGNoYW5nZWQsIGhlbmNlIGNvbnRyYXZlbmluZworICAgIC8v
IG91ciBwcm9vZi4gSW4gc3VjaCBhIGNhc2Ugd2UgbWFrZSB0aGUgcHJvb2YgdmFsaWQgYWdhaW4g
Ynkgc3dpdGNoaW5nIHRoaXMgdG8KKyAgICAvLyBUT1AgKGkuZS4gY2xhaW1pbmcgdGhhdCB3ZSBo
YXZlIHByb3ZlZCB0aGF0IHRoaXMgdmFsdWUgbWF5IGhhdmUgYW55CisgICAgLy8gc3RydWN0dXJl
KS4KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3RydWN0dXJlOwogICAgIAogICAgIC8v
IFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgcG9zc2libGUgdHlwZXMgdGhhdCB0
aGlzIHZhbHVlIGNhbiBoYXZlCiAgICAgLy8gbm93IG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUs
IHVubGVzcyBpdCBpcyByZWFzc2lnbmVkLiBUaGlzIGZpZWxkIGlzCkBAIC0zMzIsMTEgKzI2Nywx
MSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gYmV0d2VlbiB0aGlzIGZpZWxkLCBh
bmQgdGhlIHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFzIGZvbGxvd3MuIFRoZQogICAgIC8v
IGZpZWxkcyBhYm92ZSBjb25zdHJhaW50IHRoZSBzdHJ1Y3R1cmVzIHRoYXQgYSBjZWxsIG1heSBo
YXZlLCBidXQgdGhleSBzYXkKICAgICAvLyBub3RoaW5nIGFib3V0IHdoZXRoZXIgb3Igbm90IHRo
ZSB2YWx1ZSBpcyBrbm93biB0byBiZSBhIGNlbGwuIE1vcmUgZm9ybWFsbHksCi0gICAgLy8gdGhl
IG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0cmFjdCB2YWx1ZSB0aGF0
IGNvbnNpc3RzIG9mIHRoZQorICAgIC8vIHRoZSBtX3N0cnVjdHVyZSBpcyBpdHNlbGYgYW4gYWJz
dHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKICAgICAvLyB1bmlvbiBvZiB0aGUgc2V0
IG9mIGFsbCBub24tY2VsbCB2YWx1ZXMgYW5kIHRoZSBzZXQgb2YgY2VsbCB2YWx1ZXMgdGhhdCBo
YXZlCiAgICAgLy8gdGhlIGdpdmVuIHN0cnVjdHVyZS4gVGhpcyBhYnN0cmFjdCB2YWx1ZSBpcyB0
aGVuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCi0gICAgLy8gbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUgaXMgbV90eXBlLiBTbywgZm9yCi0g
ICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQzMiBhbmQgbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUgaXMKKyAgICAvLyBtX3N0cnVjdHVyZSBhbmQgdGhlIHNldCBvZiB2
YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IKKyAgICAvLyBleGFtcGxlIGlmIG1f
dHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX3N0cnVjdHVyZSBpcwogICAgIC8vIFsw
eDEyMzQ1XSB0aGVuIHRoaXMgYWJzdHJhY3QgdmFsdWUgY29ycmVzcG9uZHMgdG8gdGhlIHNldCBv
ZiBhbGwgaW50ZWdlcnMKICAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBvZiBhbGwgb2JqZWN0
cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgogICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKQEAg
LTM5MSwxOSArMzI2LDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX3R5cGUgfD0gdG9w
OwogICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7Ci0gICAgICAgIG1fY3Vy
cmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAg
ICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpOwotCiAgICAgdm9pZCBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAg
IHZvaWQgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIAogICAgIGJvb2wgc2hvdWxkQmVD
bGVhcigpIGNvbnN0OwogICAgIEZpbHRyYXRpb25SZXN1bHQgbm9ybWFsaXplQ2xhcml0eSgpOwor
ICAgIEZpbHRyYXRpb25SZXN1bHQgbm9ybWFsaXplQ2xhcml0eShHcmFwaCYpOwogfTsKIAogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0
ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgogICAgIHZvaWQgZnJlZShUKik7IC8vIENh
bGwgdGhpcyBtZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCiAg
ICAgCi0gICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJp
dmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBp
ZiB5b3UndmUgZWl0aGVyIGZyZWVkIGV2ZXJ5dGhpbmcgb3IgaWYgVCBoYXMgYSB0cml2aWFsIGRl
c3RydWN0b3IuCiAgICAgdm9pZCByZXNldCgpOyAvLyBMaWtlIGZyZWVBbGwoKSwgYnV0IGFsc28g
cmV0dXJucyBhbGwgbWVtb3J5IHRvIHRoZSBPUy4KICAgICAKICAgICB1bnNpZ25lZCBpbmRleE9m
KGNvbnN0IFQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDcgKzMyNSw2IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJy
YXk6CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlc2UgYmVj
YXVzZSBpZiB3ZSBnZXQgdXNlcyBvZiB0aGUgcmVsZXZhbnQKICAgICAgICAgICAgICAgICAgICAg
Ly8gdmFyaWFibGUgdGhlbiB3ZSBjYW4gc2FmZWx5IGdldCByaWQgb2YgdGhlc2UsIHRvby4gVGhp
cyBvZiBjb3Vyc2UKQEAgLTQ0MSw3ICs0NDAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgotICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEg
cGhhbnRvbSBhcmd1bWVudC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6
ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksMjUgKzI4
OSw0OCBAQCBTdHJ1Y3R1cmUqIEFycmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiBib29sIEFy
cmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSwgSW5kZXhpbmdUeXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAo
YXJyYXlDbGFzcygpKSB7Ci0gICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKLSAgICAgICAg
cmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAg
ICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmlu
ZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAm
JiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpICYgSXNBcnJheSkKLSAgICAgICAgICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOworICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFs
QXJyYXk6IHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3Ry
dWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpICYgSXNBcnJheSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKCFncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNP
cmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAg
Ci0gICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QXJyYXk6IHsKICAgICAg
ICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJy
YXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkK
LSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgPT0gc2hhcGUKLSAgICAgICAg
ICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhp
bmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9w
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUt
PmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAg
ZGVmYXVsdDoKKyAgICBkZWZhdWx0OiB7CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNo
ZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1v
ZGVzKHNoYXBlIHwgSXNBcnJheSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAg
ICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBzaGFwZTsKLSAgICB9CisgICAg
ICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1
Y3R1cmVbaV07CisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQogfQogCiBib29sIEFy
cmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSkgY29uc3QKQEAgLTMzNiwyMyArMzU5LDM4IEBAIGJvb2wgQXJyYXlNb2Rl
OjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6U2xv
d1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKLSAgICAg
ICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2lu
YWxBcnJheTogewogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAg
ICAgIGNhc2UgQXJyYXk6OkFycmF5OiB7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVh
ZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5
U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYg
aGFzQW55QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRv
bigpLT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7Cisg
ICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0
cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgICAgIGlmICghaGFzQW55
QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAg
aWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFy
cmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFn
ZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55
QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5p
bmRleGluZ1R5cGUoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVj
dHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07
CisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRl
eGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IH0KICAgICAgICAgCiAg
ICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVj
a2VkKHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3VtZW50cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCwx
MiArNDYwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNl
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2Rl
LT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0
LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQx
KCkgPT0gY2hpbGQxCiAgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlu
cyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCkBAIC01NDcs
MTEgKzU0MSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnN0cnVj
dHVyZSgpID09IHN0cnVjdHVyZSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJheWlmeToKICAgICAgICAgICAgIGNhc2Ug
QXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBp
ZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0IG91ciBzdHJ1Y3R1cmVzLgpAQCAtMTM4
NywxMyArMTM3Niw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGlt
aW5hdGlvbikKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZSgpLCBub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3JtYWxDU0UpCiAgICAgICAgICAgICAgICAgYnJl
YWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2
aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw3ICs0MTgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2Fz
ZSBJbnN0YW5jZU9mOgogICAgICAgICByZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAg
IHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsMjcgKzk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNldCA9
IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNo
IHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlVmFsdWUg
PSB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlOwotICAgICAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmVWYWx1ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgICAgICAgICAgJiYgc3Ry
dWN0dXJlVmFsdWUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNoIHRo
ZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgotICAgICAgICAgICAgICAgICAgICBB
ZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47Ci0gICAgICAgICAgICAgICAg
ICAgIGNoaWxkcmVuLnJlbW92ZUVkZ2UoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIWNo
aWxkcmVuLmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmlnaW4s
IGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQy
KEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhF
ZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtMTU2LDcgKzE0MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogY2hp
bGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRE
YXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJv
dmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCkBAIC0xODAsNyArMTY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgTXVs
dGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOwog
Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUo
Y2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVj
dHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTIwNSw3ICsxOTAsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGlmIChjaGlsZEVkZ2UudXNlS2luZCgpICE9IENlbGxVc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJv
dmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
QEAgLTIzMiw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9u
bHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC0zMjksNyArMzE0LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAg
ICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogCi0gICAgICAgIGJvb2wgbmVlZHNX
YXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRl
LmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKICAgICAgICAgCiAgICAgICAgIEFT
U0VSVCghdmFyaWFudC5jaGFpbigpKTsKQEAgLTM0MCwxMSArMzI0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAgICAgICAgbV9pbnRlcnByZXRlci5leGVj
dXRlKGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50
KSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAg
ICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7
Ci0gICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKKyAgICAgICAgaWYgKG5lZWRz
Q2VsbENoZWNrKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAg
ICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hp
bGRFZGdlKTsKICAgICAgICAgfQpAQCAtMzgxLDcgKzM2MSw2IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKICAgICAgICAg
Ci0gICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAgIGJvb2wgbmVl
ZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsK
ICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSwgcHVz
aCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJZApAQCAtMzg5LDExICszNjgsNyBAQCBw
cml2YXRlOgogICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgogICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKIAotICAgICAgICBpZiAobmVlZHNXYXRjaHBv
aW50KSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRn
ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKKyAgICAgICAgaWYgKG5l
ZWRzQ2VsbENoZWNrKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwg
Y2hpbGRFZGdlKTsKICAgICAgICAgfQpAQCAtNDc1LDE2ICs0NTAsMTQgQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7Ci0gICAgICAgIE5vZGUq
IHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICBp
bmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwg
b3JpZ2luLCBPcEluZm8oY2VsbCkpOwotICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0KCkpKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAot
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKGNlbGwtPnN0cnVj
dHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKKyAgICAgICAgaWYgKGNlbGwt
PnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KGNlbGwtPnN0cnVjdHVy
ZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCisgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZhbHVl
KGNlbGwpLCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8oY2VsbCkpOworICAgICAgICAK
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCiAgICAgICAgICAgICBPcElu
Zm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJlKCkpKSwgRWRnZSh3ZWFr
Q29uc3RhbnQsIENlbGxVc2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNiArOTcsOSBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBhZGRMYXppbHkoQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hwb2ludFNldFR5cGUq
IHNldCkKICAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBtX3Byb2ZpbGVkU2V0
cy5hZGQoc2V0KTsKKyNlbmRpZgogICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hwb2ludHMuYXBwZW5k
KAogICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9p
bnRTZXRUeXBlPihjb2RlT3JpZ2luLCBleGl0S2luZCwgc2V0KSk7CiAgICAgfQpAQCAtMTcyLDEx
ICsxNzUsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChz
ZXQpIHx8IHNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0KTsKICAgICB9CisgICAgCisgICAgdm9p
ZCBhc3NlcnRJc1dhdGNoZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX3NldHMuY29udGFpbnMoc2V0KSB8fCBtX3Byb2ZpbGVkU2V0cy5jb250
YWlucyhzZXQpKTsKKyAgICB9CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFdhdGNocG9pbnRGb3JH
ZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4+IG1fcHJvZmlsZWRXYXRjaHBv
aW50czsKICAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9zZXRzOwogI2lmICFBU1NF
UlRfRElTQUJMRUQKKyAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9wcm9maWxlZFNl
dHM7CiAgICAgU3RhdGVNYXAgbV9maXJzdEtub3duU3RhdGU7CiAjZW5kaWYKICAgICBib29sIG1f
cmVhbGx5QWRkZWQ7CkBAIC0yMzMsNiArMjQyLDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2J1ZmZlclZpZXdzLmlzVmFsaWRPck1peGVkKHZpZXcpOwogICAgIH0KKyAgICB2
b2lkIGFzc2VydElzV2F0Y2hlZChXYXRjaHBvaW50U2V0KiBzZXQpCisgICAgeworICAgICAgICBt
X3NldHMuYXNzZXJ0SXNXYXRjaGVkKHNldCk7CisgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRj
aGVkKElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1faW5saW5lU2V0
cy5hc3NlcnRJc1dhdGNoZWQoJnNldCk7CisgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVk
KEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQorICAgIHsKKyAgICAgICAgbV9idWZmZXJWaWV3cy5h
c3NlcnRJc1dhdGNoZWQodmlldyk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICBHZW5lcmlj
RGVzaXJlZFdhdGNocG9pbnRzPFdhdGNocG9pbnRTZXQ+IG1fc2V0czsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgy
LDcgKzE4Miw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBj
YXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgIGNhc2Ug
R2V0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzMCw3ICs5MzAsNiBAQCBwcml2
YXRlOgogCiAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgogICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Ogog
ICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5j
ZToKICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxNiBAQCBHcmFw
aDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2CiAKIEdyYXBoOjp+R3JhcGgoKQog
eworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbnVtQmxvY2tzKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4
LS07KQorICAgICAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0p
OworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJ
bmRleC0tOykKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRl
eCkpOworICAgIH0KICAgICBtX2FsbG9jYXRvci5mcmVlQWxsKCk7CiB9CiAKQEAgLTg0Niw3ICs4
NTYsNiBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIobm9k
ZS0+c3RydWN0dXJlU2V0KClbaV0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoK
ICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRv
U3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CkBAIC04NjMsNiAr
ODcyLDMxIEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5VmFsdWUodmFyaWFudC5zcGVjaWZpY1ZhbHVl
KCkpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCA9IHZhcmlh
bnQuc3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IHNldC5zaXplKCk7IGotLTspCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRG9uJ3QgbmVlZCB0byBtYXJrIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4g
YmVjYXVzZSB0aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNv
bXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byBtYXJrIHRoZQorICAg
ICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVz
ZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8g
dmFyaWFudHMgZGlkIHRoYXQuCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmNh
bGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZz
ZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
UHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
UmVhZE9ubHlQb2ludGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisg
ICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQ
b2ludGVyKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4NSwyMSArNDg1LDYgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwogICAgIH0KICAgICAKLSAg
ICB2b2lkIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KFN0cnVjdHVyZSog
c3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fb3AgPT0gQ2hlY2tTdHJ1Y3R1cmUg
fHwgbV9vcCA9PSBBcnJheWlmeVRvU3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKCFjaGlsZDIo
KSk7Ci0gICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KTsKLSAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUp
OwotICAgICAgICBtX29wID0gU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKQot
ICAgIHsKLSAgICAgICAgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3Ry
dWN0dXJlU2V0KCkub25seVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBjb252
ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0
b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0g
R2V0QnlJZEZsdXNoIHx8IG1fb3AgPT0gTXVsdGlHZXRCeU9mZnNldCk7CkBAIC0xMTI5LDcgKzEx
MTQsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmUoKQogICAgIHsKICAg
ICAgICAgc3dpdGNoIChvcCgpKSB7Ci0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTMsMTggKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNy
byhQdXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwK
ICAgICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KENoZWNrRXhlY3V0YWJsZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIC8qIFRyYW5zaXRpb24g
d2F0Y2hwb2ludHMgYXJlIGEgY29udHJhY3QgYmV0d2VlbiB0aGUgcGFydHkgc2V0dGluZyB0aGUg
d2F0Y2hwb2ludCAqL1wKLSAgICAvKiBhbmQgdGhlIHJ1bnRpbWUgc3lzdGVtLCB3aGVyZSB0aGUg
cGFydHkgcHJvbWlzZXMgdGhhdCB0aGUgY2hpbGQgb2JqZWN0IG9uY2UgaGFkICovXAotICAgIC8q
IHRoZSBzdHJ1Y3R1cmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoZSBydW50aW1lIHN5c3RlbSBpbiB0
dXJuIHByb21pc2VzIHRoYXQgdGhlICovXAotICAgIC8qIHdhdGNocG9pbnQgd2lsbCBiZSB0dXJu
ZWQgaW50byBhbiBPU1IgZXhpdCBpZiBhbnkgb2JqZWN0IHdpdGggdGhhdCBzdHJ1Y3R1cmUgKi9c
Ci0gICAgLyogZXZlciB0cmFuc2l0aW9ucyB0byBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUuIEhlbmNl
LCB0aGUgY2hpbGQgb2JqZWN0IG11c3QgaGF2ZSAqL1wKLSAgICAvKiBwcmV2aW91c2x5IGhhZCBh
IENoZWNrU3RydWN0dXJlIGV4ZWN1dGVkIG9uIGl0IG9yIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBv
YmplY3QgKi9cCi0gICAgLyogY29uc3RhbnQgKFdlYWtKU0NvbnN0YW50KSBhbmQgdGhlIG9iamVj
dCB3YXMga25vd24gdG8gaGF2ZSB0aGF0IHN0cnVjdHVyZSBhdCAqL1wKLSAgICAvKiBjb21waWxl
LXRpbWUuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGlzIG1lYW5zIHRoYXQgbm8gc3RydWN0dXJlIGNo
ZWNrcyBoYXZlIHRvIGJlICovXAotICAgIC8qIHBlcmZvcm1lZCBmb3IgdGhpcyBvYmplY3QgYnkg
SklUdGVkIGNvZGUuIEluIHRoZSBmb3JtZXIgY2FzZSB0aGlzIG1lYW5zIHRoYXQqL1wKLSAgICAv
KiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGRvZXMgbm90IG5lZWQgdG8gYmUgcmVjaGVja2VkIGR1
ZSB0byBzaWRlLWVmZmVjdGluZyAqL1wKLSAgICAvKiAoY2xvYmJlcmluZykgb3BlcmF0aW9ucy4g
Ki9cCi0gICAgbWFjcm8oU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhQdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNO
b3RFeGl0KSBcCiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2Vu
ZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2
ICs2Myw3IEBACiAjaW5jbHVkZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRG
R1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmgiCisjaW5jbHVkZSAiREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJEZWJ1Z2dl
ci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgpAQCAtMjMzLDYgKzIzNCw3IEBAIFBs
YW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBwZXJmb3JtQmFja3dh
cmRzUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRm
Zyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CisgICAgcGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nKGRmZyk7CiAgICAgcGVyZm9ybUludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uKGRm
Zyk7CiAgICAgcGVyZm9ybVR5cGVDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU3Niw3ICs1NzYsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50Ogog
ICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJs
ZToKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAg
Y2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAg
Y2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDIy
ICsyNzUsMjYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAg
ICAgICByZXR1cm4gbm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLmFscmVhZHlDaGVja2Vk
KAogICAgICAgICAgICAgZ3JhcGgsIG5vZGUsIHN0YXRlLmZvck5vZGUoZ3JhcGgudmFyQXJnQ2hp
bGQobm9kZSwgMCkpKTsKIAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
Ci0gICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoCi0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9k
ZS0+c3RydWN0dXJlKCkpKTsKLSAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICByZXR1cm4g
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZigKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
c3RydWN0dXJlLmlzU3Vic2V0T2YoCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSkpOwogICAgICAgICAKICAg
ICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0g
ICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzVmFsaWRPZmZzZXQoCi0gICAgICAg
ICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5k
ZXgoKV0ub2Zmc2V0KTsKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9z
dHJ1Y3R1cmU7CisgICAgICAgIGlmICh2YWx1ZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0ub2Zmc2V0OworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlm
ICghdmFsdWVbaV0tPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgICAg
ICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzY5NywyOSArMzY5Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgZmFzY2luYXRp
bmcgcXVlc3Rpb24gaGVyZSBvZiB3aGF0IHRvIGRvIGFib3V0IGFycmF5IHByb2ZpbGluZy4KLSAg
ICAgICAgLy8gV2UgKmNvdWxkKiB0cnkgdG8gdGVsbCB0aGUgT1NSIGV4aXQgYWJvdXQgd2hlcmUg
dGhlIGJhc2Ugb2YgdGhlIGFjY2VzcyBpcy4KLSAgICAgICAgLy8gVGhlIERGRyB3aWxsIGhhdmUg
a2VwdCBpdCBhbGl2ZSwgdGhvdWdoIGl0IG1heSBub3QgYmUgaW4gYSByZWdpc3RlciwgYW5kCi0g
ICAgICAgIC8vIHdlIHNob3VsZG4ndCByZWFsbHkgbG9hZCBpdCBzaW5jZSB0aGF0IGNvdWxkIGJl
IGEgd2FzdGUuIEZvciBub3cgdGhvdWdoLAotICAgICAgICAvLyB3ZSdsbCBqdXN0IHJlbHkgb24g
dGhlIGZhY3QgdGhhdCB3aGVuIGEgd2F0Y2hwb2ludCBmaXJlcyB0aGVuIHRoYXQncwotICAgICAg
ICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFkeS4KLSAgICAgICAgCi0gICAgICAgIG1faml0LmFkZFdl
YWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICAKLSNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT0sgPSBtX2ppdC5icmFuY2hQdHIo
SklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpTQ2Vs
bDo6c3RydWN0dXJlSURPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlKCkp
KTsKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBpc09LLmxpbmsoJm1faml0
KTsKLSNlbHNlCi0gICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQxKCkpOwotI2VuZGlm
Ci0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAg
ICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CiAgICAgICAgIEFTU0VSVChpc0tu
b3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgbV9qaXQuaml0Q29kZSgp
LT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2ppdC5ncmFwaCgp
Lm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjky
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNzY3LDMyICszNzY3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgLy8gVGhl
cmUgaXMgYSBmYXNjaW5hdGluZyBxdWVzdGlvbiBoZXJlIG9mIHdoYXQgdG8gZG8gYWJvdXQgYXJy
YXkgcHJvZmlsaW5nLgotICAgICAgICAvLyBXZSAqY291bGQqIHRyeSB0byB0ZWxsIHRoZSBPU1Ig
ZXhpdCBhYm91dCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgYWNjZXNzIGlzLgotICAgICAgICAvLyBU
aGUgREZHIHdpbGwgaGF2ZSBrZXB0IGl0IGFsaXZlLCB0aG91Z2ggaXQgbWF5IG5vdCBiZSBpbiBh
IHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHJlYWxseSBsb2FkIGl0IHNp
bmNlIHRoYXQgY291bGQgYmUgYSB3YXN0ZS4gRm9yIG5vdyB0aG91Z2gsCi0gICAgICAgIC8vIHdl
J2xsIGp1c3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdoZW4gYSB3YXRjaHBvaW50IGZpcmVzIHRo
ZW4gdGhhdCdzCi0gICAgICAgIC8vIHF1aXRlIGEgaGludCBhbHJlYWR5LgotCi0gICAgICAgIG1f
aml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0dXJlKCkpOwotCi0jaWYgIUFTU0VSVF9E
SVNBQkxFRAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoU3Ry
dWN0dXJlUHRyKAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCAKLSAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNl
dCgpKSwgCi0gICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1faml0LmJy
ZWFrcG9pbnQoKTsKLSAgICAgICAgaXNPSy5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgICAgICBz
cGVjdWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAg
bm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2Fz
ZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CiAgICAgICAgIEFTU0VSVChpc0tub3duQ2VsbChub2Rl
LT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90
aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9q
aXQuY29kZUJsb2NrKCksIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE1
LDcgKzMxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplCiAg
ICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICBtX2ppdC5nbG9i
YWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0
U3RydWN0dXJlKCk7CiAgICAgCi0gICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKSkpIHsKKyAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3N0cnVjdHVyZS5p
c1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkgewogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBKU1ZhbHVl
UmVncygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
bWFrZVRvcCgpCit7CisgICAgbV9zZXQuZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7
CisgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBp
ZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IHNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGF0KGkpOwor
ICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGdyYXBoLndhdGNocG9p
bnRzKCkuYXNzZXJ0SXNXYXRjaGVkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSk7CisgICAgfQorfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIoKQor
eworICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMgYXBwcm9hY2ggdG8gY2xvYmJlcmluZyBpcyB0
aGF0IGFueXRpbWUgd2UgaW50cm9kdWNlCisgICAgLy8gYSB3YXRjaGFibGUgc3RydWN0dXJlIGlu
dG8gYW4gYWJzdHJhY3QgdmFsdWUsIHdlIHdhdGNocG9pbnQgaXQuIFlvdSBjYW4gYXNzZXJ0Cisg
ICAgLy8gdGhhdCB0aGlzIGhvbGRzIGJ5IGNhbGxpbmcgYXNzZXJ0SXNXYXRjaGVkKCkuCisgICAg
ICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGlm
IChtX3NldC5pc1RoaW4oKSkgeworICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobV9zZXQuc2luZ2xlU3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAg
ICAgICBtYWtlVG9wV2hlblRoaW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAg
CisgICAgU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0ID0gbV9zZXQuc3RydWN0dXJl
TGlzdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGxpc3QtPm1fbGVuZ3RoOyBpLS07KSB7Cisg
ICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0tPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZChzdHJ1Y3R1cmUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3Jw
aGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBtZXJnZU5vdFRvcChvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7
CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAo
b3RoZXIuaXNUb3AoKSkgeworICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbWVyZ2VOb3RUb3Aob3RoZXIubV9zZXQpOworfQor
Citib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlTm90VG9wKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpCit7CisgICAgaWYgKCFtX3NldC5tZXJnZShvdGhlcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGlt
aXQpCisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgbV9zZXQgPSBvdGhlcjsKKyAgICBlbHNl
CisgICAgICAgIG1fc2V0LmZpbHRlcihvdGhlcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorewor
ICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZmlsdGVy
KG90aGVyLm1fc2V0KTsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ29uZm9ybXNUb1R5cGUg
eworcHVibGljOgorICAgIENvbmZvcm1zVG9UeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAg
ICAgIDogbV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9y
KCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gISEoc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkgJiBtX3R5cGUpOworICAgIH0KK3ByaXZhdGU6
CisgICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFNwZWN1bGF0ZWRUeXBl
IHR5cGUpCit7CisgICAgaWYgKCEodHlwZSAmIFNwZWNDZWxsKSkgeworICAgICAgICBjbGVhcigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgQ29uZm9ybXNUb1R5cGUgY29uZm9ybXNUb1R5cGUodHlwZSk7
CisgICAgbV9zZXQuZ2VuZXJpY0ZpbHRlcihjb25mb3Jtc1RvVHlwZSk7Cit9CisKK2Jvb2wgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0
Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJl
dHVybiBtX3NldC5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCitib29sIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVy
biBtX3NldC5pc1N1YnNldE9mKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25z
dAoreworICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICByZXR1cm4gaXNTdWJzZXRPZihvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IHJldHVybiBtX3NldC5pc1N1cGVyc2V0T2Yob3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6Om92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Cit7
CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVy
biBtX3NldC5vdmVybGFwcyhvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6b3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IHJldHVybiBvdmVybGFwcyhvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6b3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikg
Y29uc3QKK3sKKyAgICBpZiAobV9zZXQubV9wb2ludGVyID09IG90aGVyLm1fc2V0Lm1fcG9pbnRl
cikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzVG9wKCkgfHwgb3RoZXIu
aXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX3NldCA9
PSBvdGhlci5tX3NldDsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorewor
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAg
ICAgICAgb3V0LnByaW50KGluQ29udGV4dChtX3NldCwgY29udGV4dCkpOworfQorCit2b2lkIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24g
MTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDMwMCAr
MzcsMTA3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgp
Ci0gICAgICAgIDogbV9zdHJ1Y3R1cmUoMCkKLSAgICB7Ci0gICAgfQotICAgIAorICAgIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUoKSB7IH0KICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVj
dHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBtX3NldChzdHJ1Y3R1cmUpCiAgICAgewogICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICAgICAgOiBtX3NldChvdGhl
cikKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2V0LnNpemUoKSkgewotICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHNldFsw
XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHRvcFZhbHVlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAg
IG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBtYWtlVG9wKCkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUo
KTsKLSAgICB9CisgICAgdm9pZCBtYWtlVG9wKCk7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUgdG9wKCkKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUgdmFsdWU7Ci0gICAgICAgIHZhbHVlLm1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVl
OwotICAgIH0KKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChH
cmFwaCYpIGNvbnN0IHsgfQorI2Vsc2UKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYp
IGNvbnN0OworI2VuZGlmCiAgICAgCi0gICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Ci0gICAgewotICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkp
OwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIH0KKyAg
ICB2b2lkIGNsb2JiZXIoKTsKICAgICAKLSAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEp
IHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1fc3RydWN0
dXJlID0gb3RoZXJbMF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IAotICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCiAgICAgewotICAgICAgICBp
ZiAoIW90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90
aGVyLmlzVG9wKCkpIHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAg
ICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1
cmU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOworICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBib29sIGNvbnRhaW5zKFN0cnVj
dHVyZSogc3RydWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IHN0cnVjdHVy
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmlzRW1wdHkoKTsgfQor
ICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3NldC5tX3BvaW50ZXIgPT0gdG9wVmFs
dWU7IH0KKyAgICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlz
Q2xlYXIoKSAmJiAhaXNUb3AoKTsgfQorICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVy
biAhaXNUb3AoKTsgfQogICAgIAotICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKTsK
LSAgICB9CisgICAgYm9vbCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgIAotICAgIGJv
b2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOwotICAgIH0KKyAgICBib29sIG1l
cmdlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAgIGJvb2wgbWVyZ2UoY29uc3QgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKTsKKyAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKICAg
ICAKLSAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgaWYgKCFvdGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKLSAgICB9CisgICAgYm9vbCBj
b250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpc1N1
YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
IChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQotICAg
ICAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNv
bnN0OworICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBv
dGhlcikgY29uc3Q7CiAgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gb3RoZXIu
aXNTdWJzZXRPZigqdGhpcyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAg
ICAgICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAg
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBtX3N0
cnVjdHVyZSA9IG90aGVyWzBdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3RoZXIuY29udGFp
bnMobV9zdHJ1Y3R1cmUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAg
bV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0OwogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkp
IHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVy
Lm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuaXNU
b3AoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSBvdGhlcikKLSAgICB7Ci0g
ICAgICAgIGlmICghKG90aGVyICYgU3BlY0NlbGwpKSB7Ci0gICAgICAgICAgICBjbGVhcigpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXND
bGVhck9yVG9wKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCEoc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlKSAmIG90aGVyKSkKLSAgICAgICAgICAgIG1f
c3RydWN0dXJlID0gMDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGJvb2wg
aXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA9PSB0b3BWYWx1ZSgpOyB9Ci0gICAg
Ci0gICAgYm9vbCBpc0NsZWFyT3JUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA8PSB0
b3BWYWx1ZSgpOyB9Ci0gICAgYm9vbCBpc05laXRoZXJDbGVhck5vclRvcCgpIGNvbnN0IHsgcmV0
dXJuICFpc0NsZWFyT3JUb3AoKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBj
b25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAgICAgcmV0dXJuICEh
bV9zdHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5zaXplKCk7CiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQo
IWlzVG9wKCkpOwotICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlRf
VU5VU0VEKGksICFpKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAgICAgICByZXR1
cm4gbV9zZXQuYXQoaSk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShz
aXplX3QgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChpKTsKLSAgICB9CisgICAg
U3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQog
ICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgLy8gRklYTUU6IEVsaW1pbmF0
ZSBhbGwgdXNlcyBvZiB0aGlzIG1ldGhvZC4gVGhlcmUgc2hvdWxkbid0IGJlIGFueQorICAgIC8v
IHNwZWNpYWwtY2FzaW5nIGZvciB0aGUgb25lLXN0cnVjdHVyZSBjYXNlLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICBTdHJ1Y3R1cmUq
IG9ubHlTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKHNpemUoKSAhPSAxKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBhdCgwKTsKICAgICB9
CiAgICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBTcGVj
Q2VsbDsKLSAgICAgICAgaWYgKGlzQ2xlYXIoKSkKLSAgICAgICAgICAgIHJldHVybiBTcGVjTm9u
ZTsKLSAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSk7
Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNWYWxpZE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCi0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKGlzQ2xlYXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KTsKLSAgICB9Cisg
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICBib29sIGhhc1Np
bmdsZXRvbigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNOZWl0aGVyQ2xlYXJOb3JU
b3AoKTsKLSAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlKiBzaW5nbGV0b24oKSBjb25zdAotICAg
IHsKLSAgICAgICAgQVNTRVJUKGlzTmVpdGhlckNsZWFyTm9yVG9wKCkpOwotICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICB9Citwcml2YXRlOgorICAg
IHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdG9wVmFsdWUgPSBTdHJ1Y3R1cmVTZXQ6OnJlc2VydmVk
VmFsdWU7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHBvbHltb3JwaGlzbUxpbWl0ID0gMTA7
CiAgICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250
ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHZvaWQgbWFrZVRvcFdoZW5UaGluKCkKICAgICB7Ci0g
ICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIlRPUCIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBvdXQucHJpbnQo
IlsiKTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAgICAgICAgb3V0LnByaW50KGlu
Q29udGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKLSAgICAgICAgb3V0LnByaW50KCJdIik7
CisgICAgICAgIEFTU0VSVChtX3NldC5pc1RoaW4oKSk7CisgICAgICAgIG1fc2V0Lm1fcG9pbnRl
ciA9IHRvcFZhbHVlOwogICAgIH0KLQotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAotICAgIHsKLSAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBzdGF0aWMgU3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7IH0KICAgICAKLSAgICAvLyBOQi4gVGhpcyBtdXN0IGhh
dmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgYm9vbCBtZXJnZU5vdFRvcChjb25zdCBTdHJ1
Y3R1cmVTZXQmIG90aGVyKTsKICAgICAKLSAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9u
ZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAg
U3RydWN0dXJlU2V0IG1fc2V0OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MTUsOCArMjE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJ
bkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2sp
IHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OiB7CisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTog
ewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yODUsMTMgKzI4NCw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFi
bGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJp
YWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KQEAgLTMzMSw3ICszMjMsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAg
ICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6
CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkBAIC0zODYsMTMgKzM3Nyw2IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hl
Y2tBY2NvdW50aW5nRm9yQXJyYXlNb2RlKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmVTZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUt
PmNoaWxkMSgpICE9IHNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2tBY2NvdW50aW5nRm9yQXJyYXlNb2RlKHZhcmlhYmxl
LCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9k
ZS0+Y2hpbGQxKCkgIT0gc291cmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCIKKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNs
dWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFdhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAg
IFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6
IFBoYXNlKGdyYXBoLCAid2F0Y2hhYmxlIHN0cnVjdHVyZSB3YXRjaGluZyIpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAg
ICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3
aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAg
ICAgICAgICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICAgICAgICAgICAgICB0
cnlXYXRjaChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVj
a0Z1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5mdW5jdGlvbigp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgICAgICAgICAgICAgIHRyeVdh
dGNoKG5vZGUtPmV4ZWN1dGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAg
ICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgor
ICAgICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAgICAgICAgICAgICAg
ICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgor
ICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAg
ICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3
U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRW
YXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3BlY2lmaWNWYWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3YXRjaCBh
bnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVj
dHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNl
dCBpZiBhbnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQg
dGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmNhbGxMaW5rU3Rh
dHVzKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlP
ZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
UHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHRyeVdhdGNo
KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAg
ICAgICAgICB0cnlXYXRjaCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dHJ5V2F0Y2goSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKGNlbGwpCisgICAgICAg
ICAgICB0cnlXYXRjaChjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dHJ5V2F0Y2goY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgdHJ5V2F0Y2goc2V0W2ld
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgfQorfTsKKworYm9v
bCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgmIGdyYXBoKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgV2F0Y2hhYmxlIFN0cnVjdHVyZSBX
YXRjaGluZyIpOworICAgIHJldHVybiBydW5QaGFzZTxXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGlu
Z1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2V0IHdhdGNocG9p
bnRzIG9uIGFueSBzdHJ1Y3R1cmVzIHRoYXQgd2Uga25vdyBvZiB0aGF0IGFyZSBjdXJyZW50bHkg
d2F0Y2hhYmxlLiBJdCdzCisvLyBzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlLCBidXQgdGhpcyBl
bmRzIHVwIGJlaW5nIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZlY3RpdmUgd2F5CisvLyBvZiBy
ZWR1Y2luZyBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRlcm1pbmFsIHN0cnVjdHVyZXM6CisvLworLy8g
LSBXZSB1c2VkIHRvIG9ubHkgc2V0IHdhdGNocG9pbnRzIG9uIHdhdGNoYWJsZSBzdHJ1Y3R1cmVz
IGlmIHdlIGtuZXcgdGhhdCB0aGlzIHdvdWxkCisvLyAgIHJlbW92ZSBhIHN0cnVjdHVyZSBjaGVj
ay4gRXhwZXJpbWVudHMgc2hvdyB0aGF0IHN3aXRjaGluZyBmcm9tIHRoYXQsIHRvIGJsaW5kbHkK
Ky8vICAgc2V0dGluZyB3YXRjaHBvaW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMsIHdh
cyBub3QgYSByZWdyZXNzaW9uLgorLy8KKy8vIC0gSXQgbWFrZXMgYWJzdHJhY3QgaW50ZXJwcmV0
YXRpb24gYSB3aG9sZSBsb3QgZWFzaWVyLiBXZSBqdXN0IGFzc3VtZSB0aGF0IHdhdGNoYWJsZQor
Ly8gICBzdHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGFu
eSBvdGhlciBsb2dpYy4KKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmco
R3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVj
dGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTksMTMgKzExOSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBh
ZGRMYXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0
aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAg
ICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgp
LT5vcCgpID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50
IDogQmFkQ2FjaGVXYXRjaHBvaW50LAotICAgICAgICAgICAgICAgIG1fbm9kZS0+c3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBh
ZGRMYXppbHkobV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBi
cmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAg
ICAgY2FzZSBCaXRVUlNoaWZ0OgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1
cmU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksOSArMzk5LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNvbXBpbGVD
aGVja1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBjb21waWxlU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENo
ZWNrRnVuY3Rpb246CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tGdW5jdGlvbigpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC0xNjA5LDEyICsxNjA2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgY29tcGlsZVN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkKLSAgICB7Ci0gICAgICAg
IGFkZFdlYWtSZWZlcmVuY2UobV9ub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIHNwZWN1bGF0
ZUNlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgY29tcGlsZUNo
ZWNrRnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1fbm9k
ZS0+Y2hpbGQxKCkpOwpAQCAtNTQ2Myw3ICs1NDU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1
cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKSkpCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1Y3R1cmUu
aXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232264</attachid>
            <date>2014-05-29 15:09:22 -0700</date>
            <delta_ts>2014-05-29 16:39:52 -0700</delta_ts>
            <desc>starting to work</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>114258</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUzLDYgKzM1Myw3IEBACiAJCTBGODMzNUI4MTYzOUMx
RUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGODM2NEI3MTY0QjBDMTEwMDUzMzI5QSAvKiBERkdCcmFuY2hE
aXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODM2NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjg4NUUxMTE4NDlB
M0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODg1RTEwMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29k
ZVVzZURlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODkz
QkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLzsg
fTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTMxNzJFMDQ5RTAwN0RC
REE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyog
RlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVk
SWRlbnRpZmllcnMuY3BwICovOyB9OwpAQCAtNDk1LDYgKzQ5Niw4IEBACiAJCTBGQ0VGQURGMTgw
NzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9j
YXRpb24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VG
QURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAv
KiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGRDJE
NEZFMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJE
NEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
LmNwcCAqLzsgfTsKKwkJMEZEMkQ0RkYxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDJENEZEMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1
Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0
MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0
RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICov
OyB9OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZC
NEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgKi87IH07CkBAIC0yMTYwLDYgKzIxNjMs
NyBAQAogCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODM2NEI1MTY0QjBDMEUwMDUz
MzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gREZHQnJhbmNoRGlyZWN0aW9uLmg7IHBhdGggPSBkZmcvREZHQnJhbmNoRGlyZWN0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTEwMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
eXRlY29kZVVzZURlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjg5M0JEQTE5
MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNw
cDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBmdGwvRlRMTGluay5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAv
KiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0aCA9IGZ0bC9GVExMaW5r
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3MTcyRjA0RkQwMDdEQkRB
NSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVz
aXJlZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkSWRlbnRpZmllcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMxMyw2ICsyMzE3LDggQEAKIAkJMEZD
RUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExvY2F0aW9uLmNwcDsgcGF0aCA9IGZ0bC9GVExMb2Nh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQURFMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExMb2NhdGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cnVjdHVyZUlubGluZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMkQ0RkMxOTJGRUU1ODAwQTE3OEJG
IC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZEMTkyRkVFNTgwMEExNzhCRiAv
KiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDsgcGF0
aCA9IGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRHJpdmVyLmNwcDsg
cGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RGR0RyaXZlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2QUI3ODBBMDAxOTc2NTMgLyogREZH
QmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
QmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDgwNiw2ICs0ODEyLDcgQEAKIAkJCQkyQUND
RjNERDE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8s
CiAJCQkJMEZDMjBDQjMxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhh
c2UuY3BwICovLAogCQkJCTBGQzIwQ0I0MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJl
ZHVjdGlvblBoYXNlLmggKi8sCisJCQkJMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICovLAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3
QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggKi8sCiAJCQkJMEYyRkNDRjcxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwICovLAogCQkJCTBGMkZDQ0Y4MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmggKi8sCkBAIC00ODM4LDYgKzQ4NDUsOCBAQAogCQkJ
CTBGMkJEQzQzMTUyMjgwMTcwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggKi8s
CiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9j
YXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1Zp
cnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oICovLAorCQkJCTBGRDJENEZDMTkyRkVFNTgw
MEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLywKKwkJ
CQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5oICovLAogCQkJCTBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkM5N0YzQzE4MjAyMTE5MDAyQzlCMjYg
LyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oICovLAogCQkJCTBGREIyQ0U1MTc0ODMw
QTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgKi8sCkBAIC01Nzc2LDYgKzU3ODUsNyBAQAog
CQkJCTBGNDg1MzI4MTg3REZERUMwMDgzQjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJDIC8qIEZU
TENvbW1vblZhbHVlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZEMkQ0RkYxOTJGRUU1ODAwQTE3
OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRUEwQTBDMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkU5NUY3QTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTJBQzkyMkJDMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRl
YnVnTGluZUluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Niw2ICs2OTY2LDcgQEAKIAkJCQkw
RkYwRjE5OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTc2N0I1QjUxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJD
cmVhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENE
ODkxMCAvKiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEMkQ0RkUx
OTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVy
YWxMb29wcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIg
LyogREZHTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEy
RDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzE3NCw2ICs3MTg1LDcg
QEAKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxlclByaXZhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJEMzAwN0NCNjNBIC8qIEpTUHJvbWlz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3QkVFMjQwMDA3Q0I2M0EgLyogSlNQ
cm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4OTNCREIxOTM2RTIz
QzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpTUHJvbWlzZURlZmVycmVkLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDMDA4Q0QyMTg2RjhBOTMwMDk1NUMyNCAvKiBKU1Byb21pc2VG
dW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUUxN0JFRTIyRTAwN0NCNjNB
IC8qIEpTUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBTdHJ1Y3R1cmVTZXQmIFN0cnVjdHVy
ZVNldDo6b3BlcmF0b3I9KGNvCiB2b2lkIFN0cnVjdHVyZVNldDo6Y2xlYXIoKQogewogICAgIGRl
bGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAgIHNldCgwLCB0cnVlKTsKKyAgICBz
ZXRFbXB0eSgpOwogfQogCiBib29sIFN0cnVjdHVyZVNldDo6YWRkKFN0cnVjdHVyZSogc3RydWN0
dXJlKQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6cmVtb3ZlKFN0cnVjdHVy
ZSogc3RyCiB7CiAgICAgaWYgKGlzVGhpbigpKSB7CiAgICAgICAgIGlmIChzaW5nbGVTdHJ1Y3R1
cmUoKSA9PSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICAgICAg
ICAgIHNldEVtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICByZXR1cm4gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBAIGJvb2wgU3RydWN0dXJlU2V0Ojpy
ZW1vdmUoU3RydWN0dXJlKiBzdHIKICAgICAgICAgbGlzdC0+bGlzdCgpW2ldID0gbGlzdC0+bGlz
dCgpWy0tbGlzdC0+bV9sZW5ndGhdOwogICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKSB7CiAg
ICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QpOwotICAgICAgICAgICAgc2V0
KDAsIHRydWUpOworICAgICAgICAgICAgc2V0RW1wdHkoKTsKICAgICAgICAgfQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNDQsMjMgKzE0NCw4IEBAIHZvaWQgU3RydWN0dXJlU2V0
OjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAg
ICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKHNpbmds
ZVN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgY2xlYXIoKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0KiBsaXN0ID0gc3Ry
dWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0
aDsgKytpKSB7Ci0gICAgICAgIGlmIChvdGhlci5jb250YWluc091dE9mTGluZShsaXN0LT5saXN0
KClbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGxpc3QtPmxpc3QoKVtpLS1d
ID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwotICAgIH0KLSAgICBpZiAoIWxpc3Qt
Pm1fbGVuZ3RoKQotICAgICAgICBjbGVhcigpOworICAgIENvbnRhaW5zT3V0T2ZMaW5lIGNvbnRh
aW5zT3V0T2ZMaW5lKG90aGVyKTsKKyAgICBnZW5lcmljRmlsdGVyKGNvbnRhaW5zT3V0T2ZMaW5l
KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmV4Y2x1ZGUoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKQEAgLTMyMyw3ICszMDgsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6Y29udGFpbnNPdXRP
ZkxpbmUoU3RyCiAKIHZvaWQgU3RydWN0dXJlU2V0Ojpjb3B5RnJvbShjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQogewotICAgIGlmIChvdGhlci5pc1RoaW4oKSkgeworICAgIGlmIChvdGhlci5p
c1RoaW4oKSB8fCBvdGhlci5tX3BvaW50ZXIgPT0gcmVzZXJ2ZWRWYWx1ZSkgewogICAgICAgICBt
X3BvaW50ZXIgPSBvdGhlci5tX3BvaW50ZXI7CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZp
c2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAorbmFtZXNwYWNlIERGRyB7CitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfQor
CiBjbGFzcyBTdHJ1Y3R1cmVTZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpCiAgICAg
ewotICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgICAgIHNldEVtcHR5KCk7CiAgICAgfQogICAg
IAogICAgIFN0cnVjdHVyZVNldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTY3LDcgKzcxLDEw
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGlzVGhpbigpICYmICFzaW5nbGVTdHJ1Y3R1cmUoKTsKKyAgICAgICAgYm9vbCBy
ZXN1bHQgPSBpc1RoaW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGlmIChyZXN1
bHQpCisgICAgICAgICAgICBBU1NFUlQobV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKICAgICBib29sIGFkZChTdHJ1Y3R1cmUq
KTsKQEAgLTc4LDYgKzg1LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1
Y3R1cmVTZXQmKTsKICAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNGaWx0ZXIo
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAg
ICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICBpZiAoZnVuY3RvcihzaW5nbGVTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVy
ZUxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3Ro
OyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxp
c3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxp
c3QtPm1fbGVuZ3RoKQorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICB9CisgICAgCiAgICAgYm9v
bCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBl
cnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewpAQCAtMTI0LDE1
ICsxNTMsMzIgQEAgcHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOworICAgIAogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOwotICAg
IHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29u
c3QgdWludHB0cl90IGZsYWdzID0gMzsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdz
ID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkVmFsdWUgPSA0OwogCiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRTdGFydGluZ1NpemUgPSA0OwogICAgIAog
ICAgIGJvb2wgYWRkT3V0T2ZMaW5lKFN0cnVjdHVyZSopOwogICAgIGJvb2wgY29udGFpbnNPdXRP
ZkxpbmUoU3RydWN0dXJlKikgY29uc3Q7CisgICAgCisgICAgY2xhc3MgQ29udGFpbnNPdXRPZkxp
bmUgeworICAgIHB1YmxpYzoKKyAgICAgICAgQ29udGFpbnNPdXRPZkxpbmUoY29uc3QgU3RydWN0
dXJlU2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3NldC5jb250YWluc091dE9mTGlu
ZShzdHJ1Y3R1cmUpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBtX3NldDsKKyAgICB9OworCiAgICAgdm9pZCBjb3B5RnJvbShjb25zdCBTdHJ1
Y3R1cmVTZXQmKTsKICAgICAKICAgICBjbGFzcyBPdXRPZkxpbmVMaXN0IHsKQEAgLTE1NCw3ICsy
MDAsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgZGVsZXRlU3RydWN0dXJlTGlzdElmTmVj
ZXNzYXJ5KCkKICAgICB7Ci0gICAgICAgIGlmICghaXNUaGluKCkpCisgICAgICAgIGlmICghaXNU
aGluKCkgJiYgbV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpCiAgICAgICAgICAgICBPdXRPZkxp
bmVMaXN0OjpkZXN0cm95KHN0cnVjdHVyZUxpc3QoKSk7CiAgICAgfQogICAgIApAQCAtMTg1LDkg
KzIzMSwxMyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc2V0KGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHN0cnVjdHVyZXMpLCBmYWxzZSk7CiAgICAgfQorICAgIHZvaWQgc2V0RW1wdHkoKQor
ICAgIHsKKyAgICAgICAgc2V0KDAsIHRydWUpOworICAgIH0KICAgICB2b2lkIHNldCh1aW50cHRy
X3QgcG9pbnRlciwgYm9vbCBzaW5nbGVTdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBtX3BvaW50
ZXIgPSBwb2ludGVyIHwgKHNpbmdsZVN0cnVjdHVyZSA/IHRoaW5GbGFnIDogMCkgfCAobV9wb2lu
dGVyICYgcmVzZXJ2ZWRGbGFnKTsKKyAgICAgICAgbV9wb2ludGVyID0gcG9pbnRlciB8IChzaW5n
bGVTdHJ1Y3R1cmUgPyB0aGluRmxhZyA6IDApOwogICAgIH0KIAogICAgIHVpbnRwdHJfdCBtX3Bv
aW50ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2
ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRl
eEluQmxvY2spOwogICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWl0
LCBOb2RlKik7CiAgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpAQCAtMTQ4LDcgKzE0OSwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQg
Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwog
ICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFZhbHVlcyh1bnNp
Z25lZCBpbmRleEluQmxvY2ssIEZ1bmN0b3ImKTsKKyAgICAKICAgICB2b2lkIGNsb2JiZXJTdHJ1
Y3R1cmVzKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlv
bih1bnNpZ25lZCBpbmRleEluQmxvY2ssIFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0byk7
CiAgICAgCiAgICAgZW51bSBCb29sZWFuUmVzdWx0IHsKICAgICAgICAgVW5rbm93bkJvb2xlYW5S
ZXN1bHQsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDExICs2MiwxNyBAQCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6CiAgICAgfQogCiAgICAgLy8gTmV4dCBjaGVjayBpZiB3ZSBjYW4gZm9s
ZCBiZWNhdXNlIHdlIGtub3cgdGhhdCB0aGUgc291cmNlIGlzIGFuIG9iamVjdCBvciBzdHJpbmcg
YW5kIGRvZXMgbm90IGVxdWFsIHVuZGVmaW5lZC4KLSAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24o
dmFsdWUubV90eXBlKQotICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5o
YXNTaW5nbGV0b24oKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVy
ZS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpCi0gICAgICAgICAgICAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkudHlwZSgpICE9IFN0cmluZ1R5cGUpCisgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVl
Lm1fdHlwZSkgJiYgIXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpIHsKKyAgICAgICAgYm9vbCBh
bGxUcnVlID0gdHJ1ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1
cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpCisgICAgICAgICAgICAgICAgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUo
KSA9PSBTdHJpbmdUeXBlKSB7CisgICAgICAgICAgICAgICAgYWxsVHJ1ZSA9IGZhbHNlOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm
IChhbGxUcnVlKQogICAgICAgICAgICAgcmV0dXJuIERlZmluaXRlbHlUcnVlOwogICAgIH0KICAg
ICAKQEAgLTE0NTYsNyArMTQ2MiwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAoaXND
ZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsKLSAgICAgICAg
ICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJl
c3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgLy8gVGhpcyB1c2Ugb2Ygb25seVN0
cnVjdHVyZSgpIHNob3VsZCBiZSByZXBsYWNlZCBieSBnaXZpbmcgR2V0QnlJZFN0YXR1cyB0aGUg
YWJpbGl0eQorICAgICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQgb24gYSBTdHJ1
Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29kZVBhcnNlcidzCisgICAgICAgICAg
ICAvLyBhYmlsaXR5IHRvIGdlbmVyYXRlIGNvZGUgYmFzZWQgb24gYSBHZXRCeUlkU3RhdHVzIG91
dCBvZiBCeXRlQ29kZVBhcnNlciBzbyB0aGF0CisgICAgICAgICAgICAvLyBDb25zdGFudEZvbGRp
bmdQaGFzZSBjYW4gdXNlIGl0LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVy
ZSgpKSB7CiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sIHN0cnVj
dHVyZSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPmlk
ZW50aWZpZXJOdW1iZXIoKV0pOwpAQCAtMTUwMiw4ICsxNTEzLDEyIEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBl
ICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5z
dXJlZCB0aGlzLgogCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJl
U2V0KCk7Ci0KLSAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vi
c2V0T2Yoc2V0KSkgeworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBpbnRlcmVzdGluZyB0aGF0
IHdlIGNvdWxkIGhhdmUgcHJvdmVuIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBsYXJnZXIgc3RydWN0
dXJlIHNldAorICAgICAgICAvLyB0aGF0IGluY2x1ZGVzIHRoZSBzZXQgd2UncmUgdGVzdGluZy4g
SW4gdGhhdCBjYXNlIHdlIGNvdWxkIG1ha2UgdGhlIHN0cnVjdHVyZSBjaGVjaworICAgICAgICAv
LyBtb3JlIGVmZmljaWVudC4gV2UgY3VycmVudGx5IGRvbid0LgorICAgICAgICAKKyAgICAgICAg
aWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC0xNTExLDMzICsxNTI2LDE3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgbV9z
dGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKIAotICAgICAgICAvLyBJZiB0aGlzIHN0cnVj
dHVyZSBjaGVjayBpcyBhdHRlbXB0aW5nIHRvIHByb3ZlIGtub3dsZWRnZSBhbHJlYWR5IGhlbGQg
aW4KLSAgICAgICAgLy8gdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHNldCB0aGVuIHRoZSBj
b25zdGFudCBmb2xkaW5nIHBoYXNlIHNob3VsZAotICAgICAgICAvLyB0dXJuIHRoaXMgaW50byBh
IHdhdGNocG9pbnQgaW5zdGVhZC4KLSAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICAmJiB2YWx1ZS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgZmlsdGVyKHZhbHVlLCB2YWx1ZS5t
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0KICAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKTsKLQotICAgICAgICBmaWx0ZXIodmFsdWUsIG5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAg
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAgICAgCiAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgotICAgICAgICBp
ZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xl
YXIoKSkgewotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKKyAg
ICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkp
IHsKKyAgICAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIGNsb2Ji
ZXJMaW1pdCwKKyAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
LnByZXZpb3VzU3RydWN0dXJlLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0
cnVjdHVyZSk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwog
ICAgICAgICB9CkBAIC0xNjE3LDggKzE2MTYsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7CiAgICAgICAg
IEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IFN0cnVjdHVyZVNldCBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKHZhbHVl
Lm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICB8
fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCisgICAgICAg
IGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCiAgICAgICAgICAgICBtX3N0
YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRy
dWUpOwogICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwpAQCAtMTY1MSw3
ICsxNjQ5LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAg
ICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVy
aW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCi0gICAgICAgIGlmIChTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAg
ICAvLyBUaGlzIHNob3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBjYXNlcyBpbiBNdWx0aUdldEJ5
T2Zmc2V0LiBJZiB0aGF0IHJlc3VsdHMgaW4gYWxsCisgICAgICAgIC8vIGNhc2VzIGhhdmluZyB0
aGUgc2FtZSBvZmZzZXQgdGhlbiB3ZSBzaG91bGQgc3RyZW5ndGggcmVkdWNlIGl0IHRvIGEgQ2hl
Y2tTdHJ1Y3R1cmUgKworICAgICAgICAvLyBHZXRCeU9mZnNldC4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsK
ICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTsp
IHsKICAgICAgICAgICAgICAgICBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBAIC0xNjg4LDcgKzE2OTAsMTIg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NF
UlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxk
IGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMg
c2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGluIE11bHRpUHV0QnlPZmZzZXQuIElm
IHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKKyAgICAgICAgLy8gb25lIGNhc2UsIG9yIG5vdGhpbmcg
YnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2ZSB0aGUgc2FtZSBvZmZzZXQsIHRoZW4gd2Ug
c2hvdWxkCisgICAgICAgIC8vIGp1c3Qgc3RyZW5ndGggcmVkdWNlIGl0IHRvIHRoZSBhcHByb3By
aWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgLy8gW1JlXUFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1cmUsIGFuZCBQdXRCeU9mZnNldC4KKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3Ry
dWN0dXJlKCkpIHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBAIC0xNzIx
LDEyICsxNzI4LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
ewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250
YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9z
dHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5zdHJ1Y3R1cmUoKSkpCiAgICAgICAgICAgICAgICAg
ICAgIG5ld1NldC5hZGQodmFyaWFudC5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkg
PT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOwotICAgICAgICAgICAgaWYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKQor
ICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQub2xkU3Ry
dWN0dXJlKCkpKQogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNzY3LDcgKzE3NzQsMTIgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZsdXNo
OgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9u
bHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIFB1dEJ5SWRTdGF0dXMg
dGhlIGFiaWxpdHkKKyAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQgb24gYSBTdHJ1
Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29kZVBhcnNlcidzCisgICAgICAgIC8v
IGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIFB1dEJ5SWRTdGF0dXMgb3V0IG9m
IEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2Ug
Y2FuIHVzZSBpdC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAg
ICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKQEAgLTE5NTcsMzIgKzE5NjksNTkg
QEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGNsb2JiZXJMaW1p
dCkKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMoCisgICAgdW5zaWduZWQgY2xvYmJlckxp
bWl0LCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJl
cygpKQotICAgICAgICByZXR1cm47CiAgICAgaWYgKGNsb2JiZXJMaW1pdCA+PSBtX3N0YXRlLmJs
b2NrKCktPnNpemUoKSkKICAgICAgICAgY2xvYmJlckxpbWl0ID0gbV9zdGF0ZS5ibG9jaygpLT5z
aXplKCk7CiAgICAgZWxzZQogICAgICAgICBjbG9iYmVyTGltaXQrKzsKICAgICBBU1NFUlQoY2xv
YmJlckxpbWl0IDw9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBp
ID0gY2xvYmJlckxpbWl0OyBpLS07KQotICAgICAgICBmb3JOb2RlKG1fc3RhdGUuYmxvY2soKS0+
YXQoaSkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShtX3N0
YXRlLmJsb2NrKCktPmF0KGkpKSk7CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewog
ICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc3RhdGUuYmxvY2soKS0+
c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRv
ciBlbmQgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsKICAgICAgICAg
Zm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICBmb3JOb2RlKCppdGVyKS5j
bG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICAgICAgZnVuY3Rvcihmb3JOb2RlKCppdGVyKSk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9m
QXJndW1lbnRzKCk7IGktLTspCi0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQo
aSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxl
cygpLmFyZ3VtZW50KGkpKTsKICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMo
KS5udW1iZXJPZkxvY2FscygpOyBpLS07KQotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmxv
Y2FsKGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJp
YWJsZXMoKS5sb2NhbChpKSk7CiAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsK
ICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xvYmJlckxpbWl0KQoreworICAg
IGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQorICAgICAgICByZXR1cm47CisgICAgZm9y
QWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNG
b3IpOworICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXMoZmFsc2UpOworICAgIG1fc3RhdGUu
c2V0RGlkQ2xvYmJlcih0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0
ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNl
cnZlVHJhbnNpdGlvbigKKyAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIFN0cnVjdHVyZSogZnJv
bSwgU3RydWN0dXJlKiB0bykKK3sKKyAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIEFic3RyYWN0VmFsdWU6OlRyYW5zaXRpb25PYnNlcnZlciB0
cmFuc2l0aW9uT2JzZXJ2ZXIoZnJvbSwgdG8pOworICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGlt
aXQsIHRyYW5zaXRpb25PYnNlcnZlcik7CisgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBjb25zdF9jYXN0PEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+Kj4odGhpcyktPmR1bXAob3V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJh
Y3RTdGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5j
cHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNywxMiBAQCB2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiB7CiAgICAgaWYgKCEhdmFsdWUgJiYg
dmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlID0g
c3RydWN0dXJlOwotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAgIG1fc3RydWN0
dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX2FycmF5
TW9kZXMgPSAwOwogICAgIH0KICAgICAgICAgCkBAIC01MCwxOSArNTAsMjAgQEAgdm9pZCBBYnN0
cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAgIG1fdmFsdWUgPSB2YWx1ZTsKICAg
ICAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFw
aCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgSlNWYWx1ZSB2
YWx1ZSkKIHsKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgIG1fc3RydWN0dXJlLm1h
a2VUb3AoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCk7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBz
dHJ1Y3R1cmUpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAg
ICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKTsKICAgICAgICAgY2xvYmJlckFycmF5TW9kZXMoKTsKICAgICB9IGVsc2UgewotICAgICAg
ICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAgIApAQCAtNzAsMTcgKzcxLDE4IEBAIHZv
aWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgSlMKICAgICBtX3ZhbHVlID0gdmFs
dWU7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0Y2hlZChn
cmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1
cmU7Ci0gICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgsIHN0cnVjdHVyZSk7Cisg
ICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1v
ZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9u
RnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwogICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAg
CiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9
CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9uKE5vZGVGbGFn
cyByZXByZXNlbnRhdGlvbikKQEAgLTEyOSwyMSArMTMxLDE4IEBAIEZpbHRyYXRpb25SZXN1bHQg
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAKICAgICBtX3R5cGUgJj0gb3RoZXIuc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhlci5hcnJheU1v
ZGVzRnJvbVN0cnVjdHVyZXMoKTsKLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIo
b3RoZXIpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCiAgICAgLy8gSXQn
cyBwb3NzaWJsZSB0aGF0IHByaW9yIHRvIHRoZSBhYm92ZSB0d28gc3RhdGVtZW50cyB3ZSBoYWQg
KEZvbywgVE9QKSwgd2hlcmUKICAgICAvLyBGb28gaXMgYSBTcGVjdWxhdGVkVHlwZSB0aGF0IGlz
IGRpc2pvaW50IHdpdGggdGhlIHBhc3NlZCBTdHJ1Y3R1cmVTZXQuIEluIHRoYXQKICAgICAvLyBj
YXNlLCB3ZSB3aWxsIG5vdyBoYXZlIChOb25lLCBbc29tZVN0cnVjdHVyZV0pLiBJbiBnZW5lcmFs
LCB3ZSBuZWVkIHRvIG1ha2UKICAgICAvLyBzdXJlIHRoYXQgbmV3IGluZm9ybWF0aW9uIGdsZWFu
ZWQgZnJvbSB0aGUgU3BlY3VsYXRlZFR5cGUgbmVlZHMgdG8gYmUgZmVkIGJhY2sKICAgICAvLyBp
bnRvIHRoZSBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gdGhlIFN0cnVjdHVyZVNldC4KLSAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKKyAgICBtX3N0cnVjdHVyZS5m
aWx0ZXIobV90eXBlKTsKICAgICAKLSAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkpCi0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgIAogICAgIGZpbHRl
ckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwotICAgIHJldHVy
biBub3JtYWxpemVDbGFyaXR5KCk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoZ3JhcGgp
OwogfQogCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckFycmF5TW9kZXMo
QXJyYXlNb2RlcyBhcnJheU1vZGVzKQpAQCAtMTY5LDggKzE2OCw3IEBAIEZpbHRyYXRpb25SZXN1
bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFMKICAgICAvLyB0aGUgcGFzc2VkIHR5cGUgaXMgQXJy
YXkuIEF0IHRoaXMgcG9pbnQgd2UnbGwgaGF2ZSAoTm9uZSwgVE9QKS4gVGhlIGJlc3Qgd2F5CiAg
ICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBmaWx0ZXJpbmcgZG9lcyB0aGUgcmln
aHQgdGhpbmcgaXMgdG8gZmlsdGVyIG9uCiAgICAgLy8gdGhlIG5ldyB0eXBlIChOb25lKSByYXRo
ZXIgdGhhbiB0aGUgb25lIHBhc3NlZCAoQXJyYXkpLgotICAgIG1fY3VycmVudEtub3duU3RydWN0
dXJlLmZpbHRlcihtX3R5cGUpOwotICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuZmlsdGVy
KG1fdHlwZSk7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKHR5cGUpOwogICAgIGZpbHRlckFycmF5
TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHJldHVybiBub3Jt
YWxpemVDbGFyaXR5KCk7CkBAIC0xODQsMTUgKzE4Miw2IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJz
dHJhY3RWYWx1ZTo6ZmlsdGVyQnkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEFic3Ry
YWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiBncmFwaCwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKGdyYXBo
LndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXQoKSkpCi0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
Ci0gICAgZWxzZQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsK
LX0KLQogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8g
V2UgY291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpAQCAtMjM4LDggKzIyNyw3IEBAIGJvb2wgQWJzdHJhY3RW
YWx1ZTo6c2hvdWxkQmVDbGVhcigpIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAg
ICAgaWYgKCEobV90eXBlICYgflNwZWNDZWxsKQotICAgICAgICAmJiAoIW1fYXJyYXlNb2Rlcwot
ICAgICAgICAgICAgfHwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSkKKyAgICAg
ICAgJiYgKCFtX2FycmF5TW9kZXMgfHwgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDEyICsyNTEsMTgg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpub3JtYWxpegogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXplQ2xh
cml0eShHcmFwaCYgZ3JhcGgpCit7CisgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPSBub3Jt
YWxpemVDbGFyaXR5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBBYnN0cmFjdFZhbHVlOjpj
aGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBpZiAoIShtX3R5cGUgJiBTcGVjQ2VsbCkp
IHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7Ci0g
ICAgICAgIEFTU0VSVChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzQ2xlYXIoKSk7CisgICAg
ICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICBBU1NFUlQoIW1fYXJy
YXlNb2Rlcyk7CiAgICAgfQogICAgIApAQCAtMjg5LDYgKzI4MywxMSBAQCB2b2lkIEFic3RyYWN0
VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3koKSBjCiAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBnZXQg
cGVkYW50aWMgYWJvdXQgdGhpcyBhcyBpdCB3b3VsZCBvbmx5IGluY3JlYXNlIHRoZSBjb21wdXRh
dGlvbmFsCiAgICAgLy8gY29tcGxleGl0eSBvZiB0aGUgY29kZS4KIH0KKwordm9pZCBBYnN0cmFj
dFZhbHVlOjphc3NlcnRJc1dhdGNoZWQoR3JhcGgmIGdyYXBoKSBjb25zdAoreworICAgIG1fc3Ry
dWN0dXJlLmFzc2VydElzV2F0Y2hlZChncmFwaCk7Cit9CiAjZW5kaWYKIAogdm9pZCBBYnN0cmFj
dFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0zMDIsOCArMzAxLDcgQEAg
dm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50UwogICAgIGlmIChtX3R5cGUg
JiBTcGVjQ2VsbCkgewogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiLCAiLCBBcnJh
eU1vZGVzRHVtcChtX2FycmF5TW9kZXMpLCAiLCAiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1f
Y3VycmVudEtub3duU3RydWN0dXJlLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgICAgIGluQ29u
dGV4dChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLCBjb250ZXh0KSk7CisgICAgICAgICAgICBp
bkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYgKCEhbV92YWx1
ZSkKICAgICAgICAgb3V0LnByaW50KCIsICIsIGluQ29udGV4dChtX3ZhbHVlLCBjb250ZXh0KSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAko
cmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY05vbmU7CiAgICAgICAgIG1fYXJy
YXlNb2RlcyA9IDA7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0g
ICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTc1LDE1ICs3NCw0NiBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpCiAgICAgewogICAgICAgICBp
ZiAobV90eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0
dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsb2JiZXIoKTsKICAgICAg
ICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgICAg
IEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFtX2Fy
cmF5TW9kZXMpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgY2xvYmJlclN0cnVjdHVyZXNGb3IoQWJzdHJhY3RWYWx1
ZSYgdmFsdWUpCisgICAgeworICAgICAgICB2YWx1ZS5jbG9iYmVyU3RydWN0dXJlcygpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3Ry
dWN0dXJlKiB0bykKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgeworICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb24oZnJvbSwgdG8pOworICAgICAg
ICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRpb24oZnJvbS0+aW5kZXhpbmdUeXBlKCks
IHRvLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBUcmFuc2l0aW9uT2JzZXJ2ZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgVHJhbnNpdGlvbk9ic2VydmVyKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0
dXJlKiB0bykKKyAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAgICAgICAgICAsIG1fdG8o
dG8pCisgICAgICAgIHsKKyAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBvcGVyYXRv
cigpKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZS5v
YnNlcnZlVHJhbnNpdGlvbihtX2Zyb20sIG1fdG8pOworICAgICAgICB9CisgICAgcHJpdmF0ZToK
KyAgICAgICAgU3RydWN0dXJlKiBtX2Zyb207CisgICAgICAgIFN0cnVjdHVyZSogbV90bzsKKyAg
ICB9OworICAgIAogICAgIHZvaWQgY2xvYmJlclZhbHVlKCkKICAgICB7CiAgICAgICAgIG1fdmFs
dWUgPSBKU1ZhbHVlKCk7CkBAIC05MSw3ICsxMjEsMTAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgIAogICAgIGJvb2wgaXNIZWFwVG9wKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVy
biAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZSAmJiBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5pc1RvcCgpICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNUb3AoKTsKKyAgICAg
ICAgcmV0dXJuIChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90eXBlCisgICAgICAgICAgICAm
JiBtX3N0cnVjdHVyZS5pc1RvcCgpCisgICAgICAgICAgICAmJiBtX2FycmF5TW9kZXMgPT0gQUxM
X0FSUkFZX01PREVTCisgICAgICAgICAgICAmJiAhbV92YWx1ZTsKICAgICB9CiAgICAgCiAgICAg
Ym9vbCB2YWx1ZUlzVG9wKCkgY29uc3QKQEAgLTExOCwxMiArMTUxLDEwIEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICB2b2lkIHNldFR5cGUoU3BlY3VsYXRlZFR5cGUgdHlwZSkKICAgICB7
CiAgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAg
ICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAg
ICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlLmNsZWFyKCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgICAgICB9
CiAgICAgICAgIG1fdHlwZSA9IHR5cGU7CkBAIC0xMzgsOCArMTY5LDcgQEAgc3RydWN0IEFic3Ry
YWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBvdGhlci5tX3R5cGUK
ICAgICAgICAgICAgICYmIG1fYXJyYXlNb2RlcyA9PSBvdGhlci5tX2FycmF5TW9kZXMKLSAgICAg
ICAgICAgICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlID09IG90aGVyLm1fY3VycmVudEtub3du
U3RydWN0dXJlCi0gICAgICAgICAgICAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID09IG90
aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fc3RydWN0dXJl
ID09IG90aGVyLm1fc3RydWN0dXJlCiAgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90aGVyLm1f
dmFsdWU7CiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYnN0cmFjdFZhbHVlJiBv
dGhlcikgY29uc3QKQEAgLTE2Miw4ICsxOTIsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VTcGVjdWxhdGlvbiht
X3R5cGUsIG90aGVyLm1fdHlwZSk7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VBcnJheU1v
ZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJheU1vZGVzKTsKLSAgICAgICAgICAgIHJlc3Vs
dCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmVzdWx0IHw9IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOworICAgICAgICAgICAg
cmVzdWx0IHw9IG1fc3RydWN0dXJlLm1lcmdlKG90aGVyLm1fc3RydWN0dXJlKTsKICAgICAgICAg
ICAgIGlmIChtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWUpIHsKICAgICAgICAgICAgICAgICByZXN1
bHQgfD0gISFtX3ZhbHVlOwogICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBA
IC0xNzksOCArMjA4LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtZXJnZVNw
ZWN1bGF0aW9uKG1fdHlwZSwgdHlwZSk7CiAgICAgICAgIAogICAgICAgICBpZiAodHlwZSAmIFNw
ZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7
Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9
IEFMTF9BUlJBWV9NT0RFUzsKICAgICAgICAgfQogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgp
OwpAQCAtMjI1LDc1ICsyNTMsMzAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBp
ZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1fdHlw
ZSAmIFNwZWNDZWxsKTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
YXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEtub3du
U3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICAmJiBtX2Z1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgJiYgKG1f
YXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAg
ICBTdHJ1Y3R1cmUqIGJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKG1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICAgICAg
cmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAo
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICByZXR1
cm4gMDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBoYXNDbG9iYmVyYWJsZVN0YXRlKCkgY29uc3QK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc05laXRoZXJD
bGVhck5vclRvcCgpCisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5pc05laXRoZXJDbGVhck5v
clRvcCgpCiAgICAgICAgICAgICB8fCAhYXJyYXlNb2Rlc0FyZUNsZWFyT3JUb3AobV9hcnJheU1v
ZGVzKTsKICAgICB9CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgdm9pZCBjaGVja0Nv
bnNpc3RlbmN5KCkgY29uc3QgeyB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBj
b25zdCB7IH0KICNlbHNlCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7CisgICAg
dm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKICNlbmRpZgogICAgIAogICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgLy8gQSBncmVhdCB3YXkg
dG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZSBhbmQKLSAgICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGlzIHRvIGNvbnNpZGVy
IHRoZXNlIGZvdXIgZXhhbXBsZXM6Ci0gICAgLy8KLSAgICAvLyAxKSB4ID0gZm9vKCk7Ci0gICAg
Ly8KLSAgICAvLyAgICBJbiB0aGlzIGNhc2UgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFu
ZCBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwKLSAgICAvLyAgICBib3RoIGJlIFRPUCwg
c2luY2Ugd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB4IGZvciBzdXJlLCB5ZXQuCi0gICAg
Ly8KLSAgICAvLyAyKSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLwotICAg
IC8vICAgIFdoZXJlIHggd2lsbCBsYXRlciBoYXZlIGEgbmV3IHByb3BlcnR5IGFkZGVkIHRvIGl0
LCAnZycuIEJlY2F1c2Ugb2YgdGhlCi0gICAgLy8gICAga25vd24gYnV0IG5vdC15ZXQtZXhlY3V0
ZWQgcHJvcGVydHkgYWRkaXRpb24sIHgncyBjdXJyZW50IHN0cnVjdHVyZSB3aWxsCi0gICAgLy8g
ICAgbm90IGJlIHdhdGNocG9pbnRhYmxlOyBoZW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBzdGF0aWNh
bGx5IGJvdW5kaW5nIHRoZSBzZXQKLSAgICAvLyAgICBvZiBwb3NzaWJsZSBzdHJ1Y3R1cmVzIHRo
YXQgeCBtYXkgaGF2ZSBpZiBhIGNsb2JiZXJpbmcgZXZlbnQgaGFwcGVucy4gU28sCi0gICAgLy8g
ICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJl
IHdlIGNoZWNrIHRvIGdldAotICAgIC8vICAgIHByb3BlcnR5ICdmJywgYW5kIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUgd2lsbCBiZSBUT1AuCi0gICAgLy8KLSAgICAvLyAzKSB4ID0gZm9vKCk7
Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLwotICAgIC8vICAgIFdoZXJlIHggaGFzIGEgdGVy
bWluYWwgc3RydWN0dXJlIHRoYXQgaXMgc3RpbGwgd2F0Y2hwb2ludGFibGUuIEluIHRoaXMgY2Fz
ZSwKLSAgICAvLyAgICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUgd2lsbCBib3RoIGJlCi0gICAgLy8gICAgd2hhdGV2ZXIgc3RydWN0dXJl
IHdlIGNoZWNrZWQgZm9yIHdoZW4gZ2V0dGluZyAnZicuCi0gICAgLy8KLSAgICAvLyA0KSB4ID0g
Zm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLyAgICBiYXIoKTsKLSAgICAvLwotICAg
IC8vICAgIFdoZXJlIHggaGFzIGEgdGVybWluYWwgc3RydWN0dXJlIHRoYXQgaXMgc3RpbGwgd2F0
Y2hwb2ludGFibGUuIEluIHRoaXMKLSAgICAvLyAgICBjYXNlLCBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZSB3aWxsIGJlIFRPUCBiZWNhdXNlIGJhcigpIG1heSBwb3RlbnRpYWxseQotICAgIC8vICAg
IGNoYW5nZSB4J3Mgc3RydWN0dXJlIGFuZCB3ZSBoYXZlIG5vIHdheSBvZiBwcm92aW5nIG90aGVy
d2lzZSwgYnV0Ci0gICAgLy8gICAgeCdzIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBi
ZSB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgaGFkIGNoZWNrZWQKLSAgICAvLyAgICB3aGVuIGdldHRp
bmcgcHJvcGVydHkgJ2YnLgotICAgIAotICAgIC8vIE5CLiBBbGwgZmllbGRzIGluIHRoaXMgc3Ry
dWN0IG11c3QgaGF2ZSB0cml2aWFsIGRlc3RydWN0b3JzLgotCiAgICAgLy8gVGhpcyBpcyBhIHBy
b3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2
ZSByaWdodAogICAgIC8vIG5vdy4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBt
dXN0IGJlbG9uZyB0byB0aGlzIHNldC4gVGhlIHNldCBtYXkKICAgICAvLyBiZSBUT1AsIGluZGlj
YXRpbmcgdGhhdCBpdCBpcyB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBzdHJ1Y3R1cmVzLCBpbiB3
aGljaApAQCAtMzAxLDI5ICsyODQsMTIgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8v
IGluIHdoaWNoIGNhc2UgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgYSBjZWxsLiBUaGlzIGlzIGFsbCBz
dWJqZWN0IHRvIGNoYW5nZQogICAgIC8vIGFueXRpbWUgYSBuZXcgdmFsdWUgaXMgYXNzaWduZWQg
dG8gdGhpcyBvbmUsIGFueXRpbWUgdGhlcmUgaXMgYSBjb250cm9sIGZsb3cKICAgICAvLyBtZXJn
ZSwgb3IgbW9zdCBjcnVjaWFsbHksIGFueXRpbWUgYSBzaWRlLWVmZmVjdCBvciBzdHJ1Y3R1cmUg
Y2hlY2sgaGFwcGVucy4KLSAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3QsIHdlIHR5cGlj
YWxseSBtdXN0IGFzc3VtZSB0aGF0IGFueSB2YWx1ZSBtYXkgaGF2ZQotICAgIC8vIGhhZCBpdHMg
c3RydWN0dXJlIGNoYW5nZWQsIGhlbmNlIGNvbnRyYXZlbmluZyBvdXIgcHJvb2YuIFdlIG1ha2Ug
dGhlIHByb29mCi0gICAgLy8gdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMgdG8gVE9QIChp
LmUuIGNsYWltaW5nIHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdAotICAgIC8vIHRoaXMgdmFsdWUg
bWF5IGhhdmUgYW55IHN0cnVjdHVyZSkuIE9mIG5vdGUgaXMgdGhhdCB0aGUgcHJvb2YgcmVwcmVz
ZW50ZWQgYnkKLSAgICAvLyB0aGlzIGZpZWxkIGlzIG5vdCBzdWJqZWN0IHRvIHN0cnVjdHVyZSB0
cmFuc2l0aW9uIHdhdGNocG9pbnRzIC0gZXZlbiBpZiBvbmUKLSAgICAvLyBmaXJlcywgd2UgY2Fu
IGJlIHN1cmUgdGhhdCB0aGlzIHByb29mIGlzIHN0aWxsIHZhbGlkLgotICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmU7Ci0gICAgCi0gICAgLy8gVGhpcyBp
cyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1ZSBj
YW4gaGF2ZSBub3cKLSAgICAvLyBvciBhbnkgdGltZSBpbiB0aGUgZnV0dXJlIHN1YmplY3QgdG8g
dGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIG9mCi0gICAgLy8gYWxsIG1lbWJl
cnMgb2YgdGhpcyBzZXQgbm90IGhhdmluZyBmaXJlZC4gVGhpcyBzZXQgaXMgaW1wZXJ2aW91cyB0
byBzaWRlLQotICAgIC8vIGVmZmVjdHM7IGV2ZW4gaWYgb25lIGhhcHBlbnMgdGhlIHNpZGUtZWZm
ZWN0IGNhbiBvbmx5IGNhdXNlIHRoZSB2YWx1ZSB0bwotICAgIC8vIGNoYW5nZSB0byBhdCB3b3Jz
dCBhbm90aGVyIHN0cnVjdHVyZSB0aGF0IGlzIGFsc28gYSBtZW1iZXIgb2YgdGhpcyBzZXQuIEJ1
dCwKLSAgICAvLyB0aGUgdGhlb3JlbSBiZWluZyBwcm92ZWQgYnkgdGhpcyBmaWVsZCBpcyBwcmVk
aWNhdGVkIHVwb24gdGhlcmUgbm90IGJlaW5nCi0gICAgLy8gYW55IG5ldyBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbnMgaW50cm9kdWNlZCBpbnRvIGFueSBtZW1iZXJzIG9mIHRoaXMgc2V0LiBJbgotICAg
IC8vIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vIHdheSBmb3IgdXMgdG8gZ3VhcmQgdGhpcyBoYXBw
ZW5pbmcsIHRoZSBzZXQgbXVzdCBiZQotICAgIC8vIFRPUC4gQnV0IGluIGNhc2VzIHdoZXJlIHdl
IGNhbiBndWFyZCBuZXcgc3RydWN0dXJlIHRyYW5zaXRpb25zIChhbGwgbWVtYmVycwotICAgIC8v
IG9mIHRoZSBzZXQgaGF2ZSBzdGlsbC12YWxpZCBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBv
aW50cykgdGhlbiB0aGlzIHNldAotICAgIC8vIHdpbGwgYmUgZmluaXRlLiBBbnl0aW1lIHRoYXQg
d2UgbWFrZSB1c2Ugb2YgdGhlIGZpbml0ZSBuYXR1cmUgb2YgdGhpcyBzZXQsCi0gICAgLy8gd2Ug
bXVzdCBmaXJzdCBpc3N1ZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQsIHdoaWNo
IHdpbGwgZWZmZWN0aXZlbHkKLSAgICAvLyByZXN1bHQgaW4gbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUgYmVpbmcgZmlsdGVyZWQgYWNjb3JkaW5nIHRvCi0gICAgLy8gbV9mdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZS4KLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmU7CisgICAgLy8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0LCB3ZSBtdXN0IGFzc3VtZSB0
aGF0IGFueSB2YWx1ZSB3aXRoIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyBpc24ndCBiZWluZyB3
YXRjaGVkIG1heSBoYXZlIGhhZCBpdHMgc3RydWN0dXJlIGNoYW5nZWQsIGhlbmNlIGNvbnRyYXZl
bmluZworICAgIC8vIG91ciBwcm9vZi4gSW4gc3VjaCBhIGNhc2Ugd2UgbWFrZSB0aGUgcHJvb2Yg
dmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMgdG8KKyAgICAvLyBUT1AgKGkuZS4gY2xhaW1p
bmcgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoaXMgdmFsdWUgbWF5IGhhdmUgYW55CisgICAg
Ly8gc3RydWN0dXJlKS4KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3RydWN0dXJlOwog
ICAgIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgcG9zc2libGUg
dHlwZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlCiAgICAgLy8gbm93IG9yIGFueSB0aW1lIGlu
IHRoZSBmdXR1cmUsIHVubGVzcyBpdCBpcyByZWFzc2lnbmVkLiBUaGlzIGZpZWxkIGlzCkBAIC0z
MzIsMTEgKzI5OCwxMSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gYmV0d2VlbiB0
aGlzIGZpZWxkLCBhbmQgdGhlIHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFzIGZvbGxvd3Mu
IFRoZQogICAgIC8vIGZpZWxkcyBhYm92ZSBjb25zdHJhaW50IHRoZSBzdHJ1Y3R1cmVzIHRoYXQg
YSBjZWxsIG1heSBoYXZlLCBidXQgdGhleSBzYXkKICAgICAvLyBub3RoaW5nIGFib3V0IHdoZXRo
ZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBhIGNlbGwuIE1vcmUgZm9ybWFsbHks
Ci0gICAgLy8gdGhlIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0cmFj
dCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQorICAgIC8vIHRoZSBtX3N0cnVjdHVyZSBpcyBp
dHNlbGYgYW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKICAgICAvLyB1bmlv
biBvZiB0aGUgc2V0IG9mIGFsbCBub24tY2VsbCB2YWx1ZXMgYW5kIHRoZSBzZXQgb2YgY2VsbCB2
YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gdGhlIGdpdmVuIHN0cnVjdHVyZS4gVGhpcyBhYnN0cmFj
dCB2YWx1ZSBpcyB0aGVuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCi0gICAgLy8gbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUgaXMgbV90eXBl
LiBTbywgZm9yCi0gICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQz
MiBhbmQgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMKKyAgICAvLyBtX3N0cnVjdHVyZSBhbmQg
dGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IKKyAgICAvLyBl
eGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX3N0cnVjdHVyZSBp
cwogICAgIC8vIFsweDEyMzQ1XSB0aGVuIHRoaXMgYWJzdHJhY3QgdmFsdWUgY29ycmVzcG9uZHMg
dG8gdGhlIHNldCBvZiBhbGwgaW50ZWdlcnMKICAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNldCBv
ZiBhbGwgb2JqZWN0cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgogICAgIFNwZWN1bGF0ZWRUeXBl
IG1fdHlwZTsKQEAgLTM2NCw2ICszMzAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9hcnJheU1v
ZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgIH0KICAgICAKKyAgICB2b2lkIG9ic2VydmVJbmRl
eGluZ1R5cGVUcmFuc2l0aW9uKEluZGV4aW5nVHlwZSBmcm9tLCBJbmRleGluZ1R5cGUgdG8pCisg
ICAgeworICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKGZyb20pKQorICAg
ICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2Rlcyh0byk7CisgICAgfQorICAgIAog
ICAgIGJvb2wgdmFsaWRhdGVUeXBlKEpTVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoaXNIZWFwVG9wKCkpCkBAIC0zOTEsMTkgKzM2MywxNyBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgbV90eXBlIHw9IHRvcDsKICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZ
X01PREVTOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAg
ICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBtX3N0cnVj
dHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKLQogICAgIHZvaWQgZmls
dGVyVmFsdWVCeVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAg
ICAKICAgICBib29sIHNob3VsZEJlQ2xlYXIoKSBjb25zdDsKICAgICBGaWx0cmF0aW9uUmVzdWx0
IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IG5vcm1hbGl6ZUNsYXJp
dHkoR3JhcGgmKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMTY5MjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYWxsb2NhdGUoKTsgLy8gVXNlIHBs
YWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9pZCB1c2luZyB0aGlzIG1ldGhvZC4KICAg
ICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGRlbGV0ZTsgbmV2ZXIgdXNl
ICdkZWxldGUnIGRpcmVjdGx5LgogICAgIAotICAgIHZvaWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNh
bGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICB2b2lkIGZyZWVBbGwo
KTsgLy8gT25seSBjYWxsIHRoaXMgaWYgeW91J3ZlIGVpdGhlciBmcmVlZCBldmVyeXRoaW5nIG9y
IGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgogICAgIHZvaWQgcmVzZXQoKTsgLy8gTGlr
ZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCiAgICAg
CiAgICAgdW5zaWduZWQgaW5kZXhPZihjb25zdCBUKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25Q
aGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
NSw3ICszMjUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAg
ICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAg
ICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24n
dCBjYXJlIGFib3V0IHRoZXNlIGJlY2F1c2UgaWYgd2UgZ2V0IHVzZXMgb2YgdGhlIHJlbGV2YW50
CiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIHRoZW4gd2UgY2FuIHNhZmVseSBnZXQg
cmlkIG9mIHRoZXNlLCB0b28uIFRoaXMgb2YgY291cnNlCkBAIC00NDEsNyArNDQwLDYgQEAgcHVi
bGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTog
ewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMgbm9k
ZSwgaWYgaXQgcmVmZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCiAgICAgICAgICAgICAgICAg
ICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE2OTIw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg5LDI1ICsyODksNDggQEAgU3RydWN0dXJlKiBBcnJheU1vZGU6Om9yaWdp
bmFsQXJyYXlTdHJ1YwogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlwZSBzaGFwZSkg
Y29uc3QKIHsKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewotICAgIGNhc2UgQXJyYXk6Ok9y
aWdpbmFsQXJyYXk6Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9
PSBzaGFwZQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAgICAgICAgICAmJiBncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNPcmlnaW5hbEFycmF5
U3RydWN0dXJlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKKyAg
ICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OiB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVj
dHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAg
ICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgIT0g
c2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCEo
c3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyktPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFycmF5OgorICAgIGNhc2Ug
QXJyYXk6OkFycmF5OiB7CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFs
dWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0FycmF5KSkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1h
c2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAgICAgIGlmICh2
YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07
CisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1No
YXBlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiAgICAgICAgIAotICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDogewogICAgICAgICBp
ZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1v
ZGVzKHNoYXBlKSB8IGFzQXJyYXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykg
PT0gc2hhcGU7Ci0gICAgfQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFs
dWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgaWYgKChzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spICE9IHNoYXBlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9IH0KIH0KIAogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpIGNvbnN0CkBAIC0zMzYsMjMgKzM1
OSwzOCBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAgICAg
IAogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHN3aXRjaCAo
YXJyYXlDbGFzcygpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6CisgICAg
ICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6IHsKICAgICAgICAgICAgIENSQVNIKCk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGNh
c2UgQXJyYXk6OkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheTogewogICAgICAgICAg
ICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJy
YXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KQotICAgICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAgICAg
ICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGlu
Z1R5cGUoKSAmIElzQXJyYXkpOworICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlz
VG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6CisgICAgICAgIGRl
ZmF1bHQ6IHsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUu
bV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAg
IHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAg
ICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICB9CisgICAgICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVy
ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgICAgIGlmICghaGFzQW55QXJyYXlT
dG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfSB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAgICAg
cmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNBcmd1bWVudHMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHJldmlzaW9u
IDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpCiAgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIihVTlNBRkUpICIpOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAgICAgICAg
ICAgICAgIGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXMoKSwgIiAiLCBtX2ludGVycHJldGVyKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5oYXZlU3RydWN0
dXJlcygpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgKEhhdmUgU3RydWN0dXJlcyki
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShyZXZp
c2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDEyICs0NjAsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAg
ICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlKCkpKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKICAgICAgICAgICAgICAgICAg
ICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkubmV3U3RydWN0dXJlKSkKQEAgLTU0NywxMSArNTQxLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYmIG5vZGUtPmNo
aWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFy
cmF5aWZ5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICAg
ICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBjb3VsZCBhZmZl
Y3Qgb3VyIHN0cnVjdHVyZXMuCkBAIC0xMzg3LDEzICsxMzc2LDYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAg
ICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRp
b24obm9kZS0+c3RydWN0dXJlKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0gICAgICAgICAg
ICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAgIGlmIChjc2VNb2RlID09IE5vcm1h
bENTRSkKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDcgKzQx
OCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICB9CiAg
ICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAgIHJlYWQoSlND
ZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlz
aW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywyNyArOTcsMTIgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQo
KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9u
IGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAg
ICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQot
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewot
ICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZVZhbHVl
LnNpbmdsZXRvbigpOwotICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUo
aW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNl
bGwuCi0gICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5j
aGlsZHJlbjsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVtb3ZlRWRnZSgwKTsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgY2hpbGRyZW4pOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xNTYsNyArMTQxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAgICAg
ICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zm
c2V0RGF0YSgpOwogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTE4MCw3ICsxNjUs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5v
ZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApA
QCAtMjA1LDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRWRn
ZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMjMyLDcgKzIxNyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5k
KCkgPT0gQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAg
IGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKQEAgLTMyOSw3ICszMTQsNiBAQCBwcml2YXRlOgogICAgICAgICBFZGdlIGNoaWxkRWRn
ZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2Rl
KCk7CiAKLSAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAgICAgYm9v
bCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWND
ZWxsOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNoYWluKCkpOwpAQCAtMzQw
LDExICszMjQsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgog
ICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcElu
Zm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgfSBlbHNlIGlmIChuZWVkc0NlbGxD
aGVjaykgeworICAgICAgICBpZiAobmVlZHNDZWxsQ2hlY2spIHsKICAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICB9CkBAIC0zODEsNyAr
MzYxLDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KSA9PSBzdHJ1Y3R1cmUpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQg
PSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5n
bGV0b24oKTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAgLy8gTm93IGJlZm9y
ZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRC
eUlkCkBAIC0zODksMTEgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGRvIGFueSBlbGlt
aW5hdGlvbnMuCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwog
Ci0gICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBP
cEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgfSBlbHNlIGlmIChuZWVkc0Nl
bGxDaGVjaykgeworICAgICAgICBpZiAobmVlZHNDZWxsQ2hlY2spIHsKICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICB9CkBAIC00NzUs
MTYgKzQ1MCwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
Q2hlY2soTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywgSlNDZWxsKiBj
ZWxsKQogICAgIHsKLSAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFs
dWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBvcmlnaW4sIE9wSW5mbyhjZWxsKSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAobV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChjZWxsLT5z
dHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpIHsKLSAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAg
ICAgICAgICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2Vs
bFVzZSkpOworICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMo
KS5hZGRMYXppbHkoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgTm9kZSogd2Vha0Nv
bnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBvcmlnaW4s
IE9wSW5mbyhjZWxsKSk7CisgICAgICAgIAogICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUs
IG9yaWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxs
LT5zdHJ1Y3R1cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShy
ZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw5IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4
aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQogICAgIHsKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECisgICAgICAgIG1fcHJvZmlsZWRTZXRzLmFkZChzZXQpOworI2VuZGlmCiAgICAgICAgIG1f
cHJvZmlsZWRXYXRjaHBvaW50cy5hcHBlbmQoCiAgICAgICAgICAgICBXYXRjaHBvaW50Rm9yR2Vu
ZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+KGNvZGVPcmlnaW4sIGV4aXRLaW5k
LCBzZXQpKTsKICAgICB9CkBAIC0xNzIsMTEgKzE3NSwxNyBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHNldCkgfHwgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShz
ZXQpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChXYXRjaHBvaW50U2V0
VHlwZSogc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2V0cy5jb250YWlucyhz
ZXQpIHx8IG1fcHJvZmlsZWRTZXRzLmNvbnRhaW5zKHNldCkpOworICAgIH0KIAogcHJpdmF0ZToK
ICAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRT
ZXRUeXBlPj4gbV9wcm9maWxlZFdhdGNocG9pbnRzOwogICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNl
dFR5cGUqPiBtX3NldHM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEhhc2hTZXQ8V2F0Y2hw
b2ludFNldFR5cGUqPiBtX3Byb2ZpbGVkU2V0czsKICAgICBTdGF0ZU1hcCBtX2ZpcnN0S25vd25T
dGF0ZTsKICNlbmRpZgogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTIzMyw2ICsyNDIsMTgg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNWYWxpZE9y
TWl4ZWQodmlldyk7CiAgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKFdhdGNocG9pbnRT
ZXQqIHNldCkKKyAgICB7CisgICAgICAgIG1fc2V0cy5hc3NlcnRJc1dhdGNoZWQoc2V0KTsKKyAg
ICB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQor
ICAgIHsKKyAgICAgICAgbV9pbmxpbmVTZXRzLmFzc2VydElzV2F0Y2hlZCgmc2V0KTsKKyAgICB9
CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCisgICAg
eworICAgICAgICBtX2J1ZmZlclZpZXdzLmFzc2VydElzV2F0Y2hlZCh2aWV3KTsKKyAgICB9CiAg
ICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0Y2hwb2ludFNl
dD4gbV9zZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQ
dXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50
b21QdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMwLDcgKzkzMCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1
dGFibGU6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAg
ICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIENyZWF0ZVRoaXM6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDYgKzc3LDE2IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExv
bmdMaXYKIAogR3JhcGg6On5HcmFwaCgpCiB7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBudW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IHRoaXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJs
b2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBtX2FsbG9jYXRvci5m
cmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgbV9hbGxvY2F0
b3IuZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgfQogICAgIG1fYWxsb2NhdG9yLmZy
ZWVBbGwoKTsKIH0KIApAQCAtODQ2LDcgKzg1Niw2IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJh
cnJpZXJlZFJlYWRPbmx5UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAg
ICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIE5l
d1N0cmluZ09iamVjdDoKQEAgLTg2Myw2ICs4NzIsMzEgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZh
cmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ld
OworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlW
YWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0
W2pdKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIG1hcmsgYW55dGhp
bmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKKyAgICAgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBE
b24ndCBuZWVkIHRvIG1hcmsgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3Rh
dHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRo
ZQorICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDg1LDIxICs0ODUsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNoaWxkcmVu
LnJlc2V0KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9vcCA9PSBDaGVja1N0cnVjdHVyZSB8fCBtX29wID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUp
OwotICAgICAgICBBU1NFUlQoIWNoaWxkMigpKTsKLSAgICAgICAgQVNTRVJUKCFjaGlsZDMoKSk7
Ci0gICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2Vf
Y2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZSk7Ci0gICAgICAgIG1fb3AgPSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9TdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpCi0gICAgewotICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5vbmx5U3RydWN0dXJlKCkpOwot
ICAgIH0KLSAgICAKICAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCht
X29wID09IEdldEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2ggfHwgbV9vcCA9PSBNdWx0aUdl
dEJ5T2Zmc2V0KTsKQEAgLTExMjksNyArMTExNCw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICBib29s
IGhhc1N0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKLSAgICAgICAg
Y2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVU
eXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MywxOCArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tFeGVjdXRhYmxlLCBOb2RlTXVzdEdlbmVy
YXRlKSBcCi0gICAgLyogVHJhbnNpdGlvbiB3YXRjaHBvaW50cyBhcmUgYSBjb250cmFjdCBiZXR3
ZWVuIHRoZSBwYXJ0eSBzZXR0aW5nIHRoZSB3YXRjaHBvaW50ICovXAotICAgIC8qIGFuZCB0aGUg
cnVudGltZSBzeXN0ZW0sIHdoZXJlIHRoZSBwYXJ0eSBwcm9taXNlcyB0aGF0IHRoZSBjaGlsZCBv
YmplY3Qgb25jZSBoYWQgKi9cCi0gICAgLyogdGhlIHN0cnVjdHVyZSBiZWluZyB3YXRjaGVkLCBh
bmQgdGhlIHJ1bnRpbWUgc3lzdGVtIGluIHR1cm4gcHJvbWlzZXMgdGhhdCB0aGUgKi9cCi0gICAg
Lyogd2F0Y2hwb2ludCB3aWxsIGJlIHR1cm5lZCBpbnRvIGFuIE9TUiBleGl0IGlmIGFueSBvYmpl
Y3Qgd2l0aCB0aGF0IHN0cnVjdHVyZSAqL1wKLSAgICAvKiBldmVyIHRyYW5zaXRpb25zIHRvIGEg
ZGlmZmVyZW50IHN0cnVjdHVyZS4gSGVuY2UsIHRoZSBjaGlsZCBvYmplY3QgbXVzdCBoYXZlICov
XAotICAgIC8qIHByZXZpb3VzbHkgaGFkIGEgQ2hlY2tTdHJ1Y3R1cmUgZXhlY3V0ZWQgb24gaXQg
b3Igd2UncmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCAqL1wKLSAgICAvKiBjb25zdGFudCAoV2Vh
a0pTQ29uc3RhbnQpIGFuZCB0aGUgb2JqZWN0IHdhcyBrbm93biB0byBoYXZlIHRoYXQgc3RydWN0
dXJlIGF0ICovXAotICAgIC8qIGNvbXBpbGUtdGltZS4gSW4gdGhlIGxhdHRlciBjYXNlIHRoaXMg
bWVhbnMgdGhhdCBubyBzdHJ1Y3R1cmUgY2hlY2tzIGhhdmUgdG8gYmUgKi9cCi0gICAgLyogcGVy
Zm9ybWVkIGZvciB0aGlzIG9iamVjdCBieSBKSVR0ZWQgY29kZS4gSW4gdGhlIGZvcm1lciBjYXNl
IHRoaXMgbWVhbnMgdGhhdCovXAotICAgIC8qIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgZG9lcyBu
b3QgbmVlZCB0byBiZSByZWNoZWNrZWQgZHVlIHRvIHNpZGUtZWZmZWN0aW5nICovXAotICAgIC8q
IChjbG9iYmVyaW5nKSBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFN0cnVjdHVy
ZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVS
ZXN1bHRTdG9yYWdlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJ
KHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJERkdVbmlmaWNh
dGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdXYXRjaGFibGVTdHJ1
Y3R1cmVXYXRjaGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHV2F0Y2hwb2ludENvbGxlY3Rpb25Q
aGFzZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVz
LmgiCkBAIC0yMzMsNiArMjM0LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBp
bGVJblRocgogICAgIHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZv
cm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKKyAg
ICBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoZGZnKTsKICAgICBwZXJmb3JtSW52
YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oZGZnKTsKICAgICBwZXJmb3JtVHlwZUNoZWNrSG9pc3Rp
bmcoZGZnKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjky
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc2LDcgKzU3Niw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAg
ICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9u
IDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsMjIgKzI3NSwyNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUo
QWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIHJldHVybiBub2RlLT5hcnJheU1vZGUoKS5t
b2RlRm9yUHV0KCkuYWxyZWFkeUNoZWNrZWQoCiAgICAgICAgICAgICBncmFwaCwgbm9kZSwgc3Rh
dGUuZm9yTm9kZShncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkpOwogCi0gICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZigKLSAg
ICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICAKICAg
ICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0
eVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKAorICAgICAgICByZXR1cm4gc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZigKICAgICAgICAg
ICAgIFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3Vz
U3RydWN0dXJlKSk7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICBy
ZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaXNWYWxpZE9mZnNldCgKLSAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFb
bm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5vZmZzZXQpOworICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6IHsKKyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKKyAgICAgICAgaWYgKHZhbHVlLmlz
VG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0Rh
dGFJbmRleCgpXS5vZmZzZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgaWYgKCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZz
ZXQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjk3LDI5ICszNjk3LDYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgICAgIAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAg
ICAgLy8gVGhlcmUgaXMgYSBmYXNjaW5hdGluZyBxdWVzdGlvbiBoZXJlIG9mIHdoYXQgdG8gZG8g
YWJvdXQgYXJyYXkgcHJvZmlsaW5nLgotICAgICAgICAvLyBXZSAqY291bGQqIHRyeSB0byB0ZWxs
IHRoZSBPU1IgZXhpdCBhYm91dCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgYWNjZXNzIGlzLgotICAg
ICAgICAvLyBUaGUgREZHIHdpbGwgaGF2ZSBrZXB0IGl0IGFsaXZlLCB0aG91Z2ggaXQgbWF5IG5v
dCBiZSBpbiBhIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHJlYWxseSBs
b2FkIGl0IHNpbmNlIHRoYXQgY291bGQgYmUgYSB3YXN0ZS4gRm9yIG5vdyB0aG91Z2gsCi0gICAg
ICAgIC8vIHdlJ2xsIGp1c3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdoZW4gYSB3YXRjaHBvaW50
IGZpcmVzIHRoZW4gdGhhdCdzCi0gICAgICAgIC8vIHF1aXRlIGEgaGludCBhbHJlYWR5LgotICAg
ICAgICAKLSAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXAgaXNPSyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVy
OjpBZGRyZXNzKG9wMS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgVHJ1c3Rl
ZEltbVB0cihub2RlLT5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7
Ci0gICAgICAgIGlzT0subGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAgICAgc3BlY3VsYXRlQ2Vs
bChub2RlLT5jaGlsZDEoKSk7Ci0jZW5kaWYKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1
cmU6IHsKICAgICAgICAgQVNTRVJUKGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
OwogICAgICAgICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1
cmVUcmFuc2l0aW9uKG1faml0LmdyYXBoKCkubV9wbGFuLCBtX2ppdC5jb2RlQmxvY2soKSwgbm9k
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NjcsMzIgKzM3
NjcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDogewotICAgICAgICAvLyBUaGVyZSBpcyBhIGZhc2NpbmF0aW5nIHF1ZXN0aW9uIGhl
cmUgb2Ygd2hhdCB0byBkbyBhYm91dCBhcnJheSBwcm9maWxpbmcuCi0gICAgICAgIC8vIFdlICpj
b3VsZCogdHJ5IHRvIHRlbGwgdGhlIE9TUiBleGl0IGFib3V0IHdoZXJlIHRoZSBiYXNlIG9mIHRo
ZSBhY2Nlc3MgaXMuCi0gICAgICAgIC8vIFRoZSBERkcgd2lsbCBoYXZlIGtlcHQgaXQgYWxpdmUs
IHRob3VnaCBpdCBtYXkgbm90IGJlIGluIGEgcmVnaXN0ZXIsIGFuZAotICAgICAgICAvLyB3ZSBz
aG91bGRuJ3QgcmVhbGx5IGxvYWQgaXQgc2luY2UgdGhhdCBjb3VsZCBiZSBhIHdhc3RlLiBGb3Ig
bm93IHRob3VnaCwKLSAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQg
d2hlbiBhIHdhdGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKLSAgICAgICAgLy8gcXVpdGUgYSBo
aW50IGFscmVhZHkuCi0KLSAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1
Y3R1cmUoKSk7Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGlzT0sgPSBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCi0gICAgICAgICAgICBKSVRDb21w
aWxlcjo6RXF1YWwsIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigp
LCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIG5vZGUtPnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBpc09LLmxpbmso
Jm1faml0KTsKLSNlbHNlCi0gICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQxKCkpOwot
I2VuZGlmCi0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgICAgICAKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKICAgICAg
ICAgQVNTRVJUKGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICBt
X2ppdC5qaXRDb2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9u
KG1faml0LmdyYXBoKCkubV9wbGFuLCBtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lv
biAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMTUsNyArMzExNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OnNwZWN1bGF0ZVN0cmluZ09iamUKICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVj
dHVyZSA9CiAgICAgICAgIG1faml0Lmdsb2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmln
aW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICAKLSAgICBpZiAoIW1f
c3RhdGUuZm9yTm9kZShlZGdlKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKFN0
cnVjdHVyZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkgeworICAgIGlmICghbV9zdGF0ZS5m
b3JOb2RlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09i
amVjdFN0cnVjdHVyZSkpKSB7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAg
ICBOb3RTdHJpbmdPYmplY3QsIEpTVmFsdWVSZWdzKCksIDAsCiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hTdHJ1Y3R1cmVQdHIoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptYWtlVG9wKCkKK3sKKyAgICBtX3NldC5kZWxldGVT
dHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKKyAgICBtX3NldC5tX3BvaW50ZXIgPSB0b3BWYWx1
ZTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQoR3Jh
cGgmIGdyYXBoKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gYXQoaSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgZ3JhcGgud2F0Y2hwb2ludHMoKS5hc3NlcnRJc1dhdGNoZWQoc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigpCit7CisgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBh
cHByb2FjaCB0byBjbG9iYmVyaW5nIGlzIHRoYXQgYW55dGltZSB3ZSBpbnRyb2R1Y2UKKyAgICAv
LyBhIHdhdGNoYWJsZSBzdHJ1Y3R1cmUgaW50byBhbiBhYnN0cmFjdCB2YWx1ZSwgd2Ugd2F0Y2hw
b2ludCBpdC4gWW91IGNhbiBhc3NlcnQKKyAgICAvLyB0aGF0IHRoaXMgaG9sZHMgYnkgY2FsbGlu
ZyBhc3NlcnRJc1dhdGNoZWQoKS4KKyAgICAgICAgCisgICAgaWYgKGlzVG9wKCkpCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgaWYgKG1fc2V0LmlzVGhpbigpKSB7CisgICAgICAgIGlm
ICghbV9zZXQuc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChtX3NldC5zaW5nbGVTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgICAgIG1ha2VUb3BXaGVuVGhpbigpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBTdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxp
c3QqIGxpc3QgPSBtX3NldC5zdHJ1Y3R1cmVMaXN0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bGlzdC0+bV9sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGxpc3QtPmxpc3QoKVtpXS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgeworICAgICAgICAgICAg
bWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSog
ZnJvbSwgU3RydWN0dXJlKiB0bykKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGlmICghbV9zZXQuY29udGFpbnMoZnJvbSkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZCh0bykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGltaXQpCisgICAgICAgIG1ha2VUb3Ao
KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIW1fc2V0LmFkZChzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBt
YWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAo
aXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtZXJnZU5v
dFRvcChvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAg
ICAgICBtYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gbWVyZ2VOb3RUb3Aob3RoZXIubV9zZXQpOworfQorCitib29sIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWU6Om1lcmdlTm90VG9wKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAg
aWYgKCFtX3NldC5tZXJnZShvdGhlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGltaXQpCisgICAgICAgIG1ha2VUb3Ao
KTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3Ao
KSkKKyAgICAgICAgbV9zZXQgPSBvdGhlcjsKKyAgICBlbHNlCisgICAgICAgIG1fc2V0LmZpbHRl
cihvdGhlcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc1RvcCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZmlsdGVyKG90aGVyLm1fc2V0KTsKK30KKwor
bmFtZXNwYWNlIHsKKworY2xhc3MgQ29uZm9ybXNUb1R5cGUgeworcHVibGljOgorICAgIENvbmZv
cm1zVG9UeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCisgICAgeworICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0
cnVjdHVyZSkgJiBtX3R5cGUpOworICAgIH0KK3ByaXZhdGU6CisgICAgU3BlY3VsYXRlZFR5cGUg
bV90eXBlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgaWYgKCEo
dHlwZSAmIFNwZWNDZWxsKSkgeworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Q29uZm9ybXNUb1R5cGUgY29uZm9ybXNUb1R5cGUodHlwZSk7CisgICAgbV9zZXQuZ2VuZXJpY0Zp
bHRlcihjb25mb3Jtc1RvVHlwZSk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
Y29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5jb250YWlucyhz
dHJ1Y3R1cmUpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2Yo
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90
aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIGlmIChvdGhlci5p
c1RvcCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gaXNTdWJzZXRP
ZihvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBl
cnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9w
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1cGVy
c2V0T2Yob3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om92ZXJsYXBz
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5vdmVybGFwcyhvdGhl
cik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3ZlcmxhcHMoY29uc3QgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG90aGVyLmlzVG9w
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBvdmVybGFwcyhvdGhl
ci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PShj
b25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9z
ZXQubV9wb2ludGVyID09IG90aGVyLm1fc2V0Lm1fcG9pbnRlcikKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgaWYgKGlzVG9wKCkgfHwgb3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtX3NldCA9PSBvdGhlci5tX3NldDsKK30KKwor
dm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAg
ICAgICBvdXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KGluQ29u
dGV4dChtX3NldCwgY29udGV4dCkpOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwg
MCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDMwMCArMzcsMTA4IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB7CiBw
dWJsaWM6Ci0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpCi0gICAgICAgIDogbV9zdHJ1Y3R1
cmUoMCkKLSAgICB7Ci0gICAgfQotICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKSB7
IH0KICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAg
ICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICAgICAgOiBtX3NldChzdHJ1Y3R1cmUp
CiAgICAgewogICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0KQorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikKKyAgICAgICAgOiBtX3NldChvdGhlcikKICAgICB7Ci0gICAgICAgIHN3
aXRjaCAoc2V0LnNpemUoKSkgewotICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IDE6Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHNldFswXTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBtX3N0cnVjdHVy
ZSA9IHRvcFZhbHVlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KICAg
ICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAg
ICAgICAgbV9zZXQuY2xlYXIoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBtYWtlVG9wKCkKLSAg
ICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUoKTsKLSAgICB9CisgICAgdm9pZCBt
YWtlVG9wKCk7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkK
LSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgIHZh
bHVlLm1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KKyNpZiBBU1NFUlRf
RElTQUJMRUQKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0IHsgfQorI2Vs
c2UKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0OworI2VuZGlmCiAgICAg
Ci0gICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBBU1NF
UlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkpOwotICAgICAgICBpZiAobV9zdHJ1
Y3R1cmUpCi0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIH0KKyAgICB2b2lkIGNsb2JiZXIoKTsKKyAg
ICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0byk7
CiAgICAgCi0gICAgYm9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLSAgICB7
Ci0gICAgICAgIGlmIChpc1RvcCgpIHx8ICFvdGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmIChvdGhlci5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICBt
YWtlVG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIW1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0
dXJlID09IG90aGVyWzBdKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtYWtl
VG9wKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBib29sIGFkZEFs
bChjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICBzdGF0aWMgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSB0b3AoKQogICAgIHsKLSAgICAgICAgaWYgKCFvdGhlci5tX3N0cnVj
dHVyZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChvdGhlci5pc1RvcCgpKSB7Ci0g
ICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIGlmIChtX3N0cnVjdHVy
ZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX3NldC5tX3BvaW50ZXIgPSB0b3BWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KKyAgICBib29sIGlzQ2xl
YXIoKSBjb25zdCB7IHJldHVybiBtX3NldC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9zZXQubV9wb2ludGVyID09IHRvcFZhbHVlOyB9CisgICAgYm9vbCBp
c05laXRoZXJDbGVhck5vclRvcCgpIGNvbnN0IHsgcmV0dXJuICFpc0NsZWFyKCkgJiYgIWlzVG9w
KCk7IH0KKyAgICBib29sIGlzRmluaXRlKCkgY29uc3QgeyByZXR1cm4gIWlzVG9wKCk7IH0KICAg
ICAKLSAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QK
LSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIHJldHVybiBvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSk7Ci0gICAgfQorICAgIGJvb2wg
YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKICAgICAKLSAgICBib29sIGRvZXNOb3RDb250YWlu
QW55T3RoZXJUaGFuKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9z
dHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlID09IHN0cnVjdHVyZTsKLSAgICB9CisgICAgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1
cmVTZXQmIG90aGVyKTsKKyAgICBib29sIG1lcmdlKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIG90aGVyKTsKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsK
KyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcik7Cisg
ICAgdm9pZCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgdHlwZSk7CiAgICAgCi0gICAgYm9vbCBpc1N1
cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghb3Ro
ZXIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChvdGhlci5z
aXplKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmUgPT0gb3RoZXJbMF07Ci0gICAgfQorICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIGNvbnN0OwogICAgIAotICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChvdGhl
ci5pc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChpc1RvcCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsK
LSAgICAgICAgICAgIGlmIChvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIGJvb2wg
aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKKyAgICBib29sIGlz
U3Vic2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0OwogICAg
IAorICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0
OwogICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90
aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vic2V0T2YoKnRoaXMp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KQotICAgIHsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG90
aGVyLnNpemUoKSkgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlclsw
XTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1fc3RydWN0dXJlID0gMDsK
LSAgICB9CisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25z
dDsKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVy
KSBjb25zdDsKICAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIShvdGhl
ciAmIFNwZWNDZWxsKSkgewotICAgICAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlzQ2xlYXJPclRvcCgpKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVy
ZShtX3N0cnVjdHVyZSkgJiBvdGhlcikpCi0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gIW1fc3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBib29sIGlzVG9wKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gdG9wVmFsdWUoKTsgfQotICAgIAotICAgIGJvb2wgaXNDbGVh
ck9yVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPD0gdG9wVmFsdWUoKTsgfQotICAg
IGJvb2wgaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKSBjb25zdCB7IHJldHVybiAhaXNDbGVhck9yVG9w
KCk7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpIGNvbnN0OwogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVCghaXNUb3AoKSk7Ci0gICAgICAgIHJldHVybiAhIW1fc3RydWN0dXJlOworICAg
ICAgICByZXR1cm4gbV9zZXQuc2l6ZSgpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIGF0
KHNpemVfdCBpKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAg
ICAgQVNTRVJUKG1fc3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7Ci0g
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmF0KGkpOwog
ICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gYXQoaSk7Ci0gICAgfQorICAgIFN0cnVjdHVyZSogb3BlcmF0
b3JbXShzaXplX3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICAKLSAgICBTdHJ1Y3R1
cmUqIGxhc3QoKSBjb25zdAorICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgYWxsIHVzZXMgb2YgdGhp
cyBtZXRob2QuIFRoZXJlIHNob3VsZG4ndCBiZSBhbnkKKyAgICAvLyBzcGVjaWFsLWNhc2luZyBm
b3IgdGhlIG9uZS1zdHJ1Y3R1cmUgY2FzZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgU3RydWN0dXJlKiBvbmx5U3RydWN0dXJlKCkg
Y29uc3QKICAgICB7CisgICAgICAgIGlmIChzaXplKCkgIT0gMSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgICAgICByZXR1cm4gYXQoMCk7CiAgICAgfQogICAgIAotICAgIFNwZWN1
bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY0NlbGw7Ci0gICAgICAgIGlm
IChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY05vbmU7Ci0gICAgICAgIHJldHVy
biBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAgIHsKLSAgICAg
ICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChp
c0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCk7Ci0gICAgfQorICAgIHZvaWQgZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBoYXNTaW5nbGV0b24oKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTmVpdGhlckNsZWFyTm9yVG9wKCk7Ci0gICAgfQotICAg
IAotICAgIFN0cnVjdHVyZSogc2luZ2xldG9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChpc05laXRoZXJDbGVhck5vclRvcCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOwot
ICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0g
b3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdWlu
dHB0cl90IHRvcFZhbHVlID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZFZhbHVlOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBwb2x5bW9ycGhpc21MaW1pdCA9IDEwOwogICAgIAotICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29u
c3QKKyAgICB2b2lkIG1ha2VUb3BXaGVuVGhpbigpCiAgICAgewotICAgICAgICBpZiAoaXNUb3Ao
KSkgewotICAgICAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCJbIik7Ci0gICAgICAgIGlm
IChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoKm1fc3RydWN0
dXJlLCBjb250ZXh0KSk7Ci0gICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAgICBBU1NFUlQo
bV9zZXQuaXNUaGluKCkpOworICAgICAgICBtX3NldC5tX3BvaW50ZXIgPSB0b3BWYWx1ZTsKICAg
ICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGlj
IFN0cnVjdHVyZSogdG9wVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVy
ZSo+KDEpOyB9CiAgICAgCi0gICAgLy8gTkIuIFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0
cnVjdG9yLgorICAgIGJvb2wgbWVyZ2VOb3RUb3AoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7
CiAgICAgCi0gICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0IGEg
dGltZS4KLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFN0cnVjdHVyZVNldCBtX3Nl
dDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDggKzIxNSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDog
eworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjg1LDEzICsyODQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1
Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0
cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CkBAIC0zMzEsNyArMzIzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgpAQCAtMzg2LDEzICszNzcsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrQWNjb3VudGluZ0ZvckFy
cmF5TW9kZSh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3Vy
Y2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVj
dHVyZUNoZWNrQWNjb3VudGluZ0ZvckFycmF5TW9kZSh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0
dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNv
dXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIndh
dGNoYWJsZSBzdHJ1Y3R1cmUgd2F0Y2hpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytu
b2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJ
bmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkp
IHsKKyAgICAgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgY2Fz
ZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC52
YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAg
ICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tFeGVjdXRhYmxlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5leGVjdXRh
YmxlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAgICB0
cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAg
ICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBj
YXNlIE5ld1N0cmluZ09iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+
c3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBj
YXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2U6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB0cnlX
YXRjaChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAg
ICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0
cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVl
ZCB0byB3YXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVz
IGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJ
ZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRz
W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5
V2F0Y2godmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB0cnlXYXRjaChKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgdHJ5V2F0Y2go
dmFsdWUuYXNDZWxsKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRyeVdhdGNoKEpTQ2VsbCog
Y2VsbCkKKyAgICB7CisgICAgICAgIGlmIChjZWxsKQorICAgICAgICAgICAgdHJ5V2F0Y2goY2Vs
bC0+c3RydWN0dXJlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRyeVdhdGNoKGNvbnN0IFN0
cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNp
emUoKTsgaS0tOykKKyAgICAgICAgICAgIHRyeVdhdGNoKHNldFtpXSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgdHJ5V2F0Y2goU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBp
ZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAg
ICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybVdhdGNoYWJs
ZVN0cnVjdHVyZVdhdGNoaW5nKEdyYXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBz
YW1wbGluZ1JlZ2lvbigiREZHIFdhdGNoYWJsZSBTdHJ1Y3R1cmUgV2F0Y2hpbmciKTsKKyAgICBy
ZXR1cm4gcnVuUGhhc2U8V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZT4oZ3JhcGgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZV9oCisjZGVmaW5lIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhh
c2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNldCB3YXRjaHBvaW50cyBvbiBhbnkgc3RydWN0
dXJlcyB0aGF0IHdlIGtub3cgb2YgdGhhdCBhcmUgY3VycmVudGx5IHdhdGNoYWJsZS4gSXQncwor
Ly8gc29tZXdoYXQgY291bnRlcmludHVpdGl2ZSwgYnV0IHRoaXMgZW5kcyB1cCBiZWluZyB0aGUg
Y2xlYW5lc3QgYW5kIG1vc3QgZWZmZWN0aXZlIHdheQorLy8gb2YgcmVkdWNpbmcgc3RydWN0dXJl
IGNoZWNrcyBvbiB0ZXJtaW5hbCBzdHJ1Y3R1cmVzOgorLy8KKy8vIC0gV2UgdXNlZCB0byBvbmx5
IHNldCB3YXRjaHBvaW50cyBvbiB3YXRjaGFibGUgc3RydWN0dXJlcyBpZiB3ZSBrbmV3IHRoYXQg
dGhpcyB3b3VsZAorLy8gICByZW1vdmUgYSBzdHJ1Y3R1cmUgY2hlY2suIEV4cGVyaW1lbnRzIHNo
b3cgdGhhdCBzd2l0Y2hpbmcgZnJvbSB0aGF0LCB0byBibGluZGx5CisvLyAgIHNldHRpbmcgd2F0
Y2hwb2ludHMgb24gYWxsIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzLCB3YXMgbm90IGEgcmVncmVzc2lv
bi4KKy8vCisvLyAtIEl0IG1ha2VzIGFic3RyYWN0IGludGVycHJldGF0aW9uIGEgd2hvbGUgbG90
IGVhc2llci4gV2UganVzdCBhc3N1bWUgdGhhdCB3YXRjaGFibGUKKy8vICAgc3RydWN0dXJlcyBh
cmUgdW5jbG9iYmVyYWJsZSB3aXRob3V0IGhhdmluZyB0byBkbyBhbnkgb3RoZXIgbG9naWMuCisK
K2Jvb2wgcGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nKEdyYXBoJik7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVj
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE5LDEzICsxMTksNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgYWRkTGF6aWx5KGpzQ2FzdDxK
U0Z1bmN0aW9uKj4obV9ub2RlLT5mdW5jdGlvbigpKS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBv
aW50U2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2Vt
YW50aWMsCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBXZWFrSlND
b25zdGFudCA/IEJhZFdlYWtDb25zdGFudENhY2hlV2F0Y2hwb2ludCA6IEJhZENhY2hlV2F0Y2hw
b2ludCwKLSAgICAgICAgICAgICAgICBtX25vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAgICAgICAgICAgYWRkTGF6aWx5KG1fbm9kZS0+
dmFyaWFibGVXYXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBj
YW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlm
dDoKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CiAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDkgKzM5OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKTsK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50OgotICAgICAgICAgICAgY29tcGlsZVN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgogICAg
ICAgICAgICAgY29tcGlsZUNoZWNrRnVuY3Rpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTYwOSwxMiArMTYwNiw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpCi0gICAgewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNl
KG1fbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBzcGVjdWxhdGVDZWxsKG1fbm9kZS0+Y2hp
bGQxKCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0Z1bmN0aW9uKCkKICAg
ICB7CiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKQEAg
LTU0NjMsNyArNTQ1NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVyZSogc3RyaW5nT2Jq
ZWN0U3RydWN0dXJlID0KICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9k
ZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7CiAgICAgICAgIAot
ICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fY3VycmVudEtub3duU3RydWN0dXJl
LmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKQorICAgICAg
ICBpZiAobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0
dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKICAgICAgICAgc3BlY3VsYXRlKApJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0
aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBu
byBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmlt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbi1zaW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmlt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Z2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1l
bGltaW5hdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlk
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVn
cmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBs
ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQt
YnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlk
LXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1l
bGltaW5hdGlvbi1zaW1wbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2lt
cGxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi1zaW1wbGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hl
Y2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxfTsKKyAgICB2YXIgcCA9IHth
OjIsIGw6MTN9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCBePSBvLmE7CisgICAgICAgIHZhciB0bXAg
PSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJl
c3VsdCAhPSAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5
LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0
cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACiso
ZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6Niwg
Zzo3LCBoOjgsIGk6OSwgajoxMCwgazoxMX07CisgICAgdmFyIHAgPSB7YToyLCBiOjMsIGM6NCwg
ZDo1LCBlOjYsIGY6NywgZzo4LCBoOjksIGk6MTAsIGo6MTEsIGs6MTIsIGw6MTN9OworICAgIHZh
ciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7Cisg
ICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIgXiBvLmMgXiBvLmQgXiBvLmUgXiBvLmYgXiBvLmcg
XiBvLmggXiBvLmkgXiBvLmogXiBvLms7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBv
ID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSA2NTAwMDAw
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9u
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
Z2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgbyA9IHthOjEsIGI6MiwgYzoz
LCBkOjQsIGU6NSwgZjo2LCBnOjcsIGg6OCwgaTo5LCBqOjEwLCBrOjExfTsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKKyAgICAgICAg
cmVzdWx0ICs9IG8uYSBeIG8uYiB8IG8uYyBeIG8uZCAmIG8uZSBeIG8uZiB8IG8uZyBeIG8uaCAm
IG8uaSBeIG8uaiB8IG8uazsKKyAgICBpZiAocmVzdWx0ICE9IDE1MDAwMDAwKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0
cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3
IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxfTsKKyAgICB2YXIgcCA9IHthOjIs
IGw6MTN9OworICAgIHZhciBxID0ge2E6MywgYjozfTsKKyAgICB2YXIgciA9IHthOjQsIGM6NX07
CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyAr
K2kpIHsKKyAgICAgICAgcmVzdWx0IF49IG8uYTsKKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAg
ICAgIG8gPSBwOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IHI7CisgICAgICAgIHIgPSB0
bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232270</attachid>
            <date>2014-05-29 16:39:52 -0700</date>
            <delta_ts>2014-05-29 23:06:19 -0700</delta_ts>
            <desc>now it only fails thousands of tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>127077</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MyBA
QAorMjAxNC0wNS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGludGVycHJldGVy
KSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVyZToKKyAgICAg
ICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRyYWNrIGFuIGFy
Yml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAgICAgICBzaXpl
IGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhhdmUgYW55IG9m
IHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdoaWNoIC0gYnV0
IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3QgaW4gdGhlIHNl
dC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBzdGlsbCBiZSBU
T1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisgICAgICAgICAg
YXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBleHBsb3Npb24g
b24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91Z2ggdGhhdCBp
dCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBzaW5jZSB3ZSBo
YXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAg
c3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0byBrbm93IGFi
b3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBvaW50cyBvbiBh
bGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQKKyAgICAgICAg
ICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoYXQgdGhlIHdh
dGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGVyZWZvcmUsIHdh
dGNoYWJsZSBzdHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlOiBhIHN0cnVjdHVyZSBzZXQgd2l0
aCBvbmx5IHdhdGNoYWJsZQorICAgICAgICAgIHN0cnVjdHVyZXMgd2lsbCB0aHVzIGJlIGltcGVy
dmlvdXMgdG8gY2xvYmJlclN0cnVjdHVyZXMoKS4gVGhpcyBtZWFucyB3ZSBjYW4gZ2V0IHJpZAor
ICAgICAgICAgIG9mIHRoZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCBub2RlIGFuZCB0
aGUgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBmaWVsZC4gVGhpcworICAgICAgICAgIHdhcyBi
YXNpY2FsbHkgbmVjZXNzYXJ5IHNpbmNlIHRoZSBwcmV2aW91cyB0cmFja2luZyBvZiB3YXRjaGFi
aWxpdHkgZGlkbid0IGdlbmVyYWxpemUKKyAgICAgICAgICBncmFjZWZ1bGx5IHRvIHN0cnVjdHVy
ZSBzZXRzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gb25lIHN0cnVjdHVyZS4KKyAgICAgICAgCisgICAg
ICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpjbGVhcik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpm
aWx0ZXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9tKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpT
dHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmlzRW1wdHkpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmdlbmVyaWNGaWx0ZXIpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpDb250YWluc091dE9mTGluZSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2Fy
eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2V0RW1wdHkpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6OnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
Ym9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpub3JtYWxpemVDbGFyaXR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVy
U3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0
cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpUcmFuc2l0aW9u
T2JzZXJ2ZXI6OlRyYW5zaXRpb25PYnNlcnZlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlOjppc0hlYXBUb3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aGFzQ2xvYmJlcmFibGVTdGF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RWYWx1ZTo6YmVzdFByb3ZlblN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0FsbG9jYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQpOgorICAgICAgICAqIGRmZy9ERkdD
RkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NG
QSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OnN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAg
ICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAgICAgIChKU0M6
OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjphc3NlcnRJc1dhdGNoZWQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXNzZXJ0SXNXYXRjaGVkKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6On5HcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0
VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc05l
aXRoZXJDbGVhck5vclRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6aXNGaW5pdGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmF0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvbmx5U3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptYWtlVG9w
V2hlblRoaW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1h
a2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vw
ZXJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjppc0NsZWFyT3JUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVmFsaWRP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6Omhhc1NpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjp0b3BWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5k
YW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1XYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6CisgICAgICAgICogZGZnL0RGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2U6OmhhbmRsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdP
YmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisKIDIwMTQt
MDUtMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0
XSBERkc6OmNsb2JiZXJpemUgc2hvdWxkIGJlIGJsaW5kIHRvIHRoZSBlZmZlY3RzIG9mIEdDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY5MjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsNyBAQAogCQkwRjgzMzVCODE2MzlDMUVB
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4ODVFMTExODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVV
c2VEZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg5M0JE
QTE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi87IH07
CiAJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkzMTcyRTA0OUUwMDdEQkRB
NSAvKiBGVExMaW5rLmNwcCAqLzsgfTsKIAkJMEY4RjJCOTYxNzJFMDRBMzAwN0RCREE1IC8qIEZU
TExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElk
ZW50aWZpZXJzLmNwcCAqLzsgfTsKQEAgLTQ5NSw2ICs0OTYsOCBAQAogCQkwRkNFRkFERjE4MDcz
OEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0
aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFE
RTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0YgLyog
U3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQyRDRG
RTE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyRDRG
QzE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5j
cHAgKi87IH07CisJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1
Y3R1cmVXYXRjaGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDEx
NUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYw
MEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsg
fTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQ0YxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovOyB9OwpAQCAtMjE2MCw2ICsyMTYzLDcg
QEAKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMy
OUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0JyYW5jaERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEg
LyogQnl0ZWNvZGVVc2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0
ZWNvZGVVc2VEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4OTNCREExOTM2
RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyog
RlRMTGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2ly
ZWRJZGVudGlmaWVycy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMTMsNiArMjMxNyw4IEBACiAJCTBGQ0VG
QUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb2NhdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0
NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMTG9jYXRpb24uaDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAv
KiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyog
REZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmg7IHBhdGgg
PSBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBh
dGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
M0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jh
c2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jh
c2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4MDYsNiArNDgxMiw3IEBACiAJCQkJMkFDQ0Yz
REQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovLAog
CQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5oICovLAorCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0Mg
LyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGMkZDQ0Y3MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCAqLywKIAkJCQkwRjJGQ0NGODE4QTYwMDcwMDAx
QTI3RjggLyogREZHVGhyZWFkRGF0YS5oICovLApAQCAtNDgzOCw2ICs0ODQ1LDggQEAKIAkJCQkw
RjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oICovLAog
CQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkQyRDRGQzE5MkZFRTU4MDBB
MTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8sCisJCQkJ
MEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5n
UGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2lu
dENvbGxlY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8q
IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEy
MDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovLApAQCAtNTc3Niw2ICs1Nzg1LDcgQEAKIAkJ
CQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTIzMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExD
b21tb25WYWx1ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhC
RiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQUM5MjJCQzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1
Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTYsNiArNjk2Niw3IEBACiAJCQkJMEZG
MEYxOTkxNkI3MjlGNjAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3NjdCNUI1MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5
MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDJENEZFMTky
RkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3Mzc4MTBEMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFs
TG9vcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8q
IERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5
IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxNzQsNiArNzE4NSw3IEBA
CiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFBMTdCRURCRDMwMDdDQjYzQSAvKiBKU1Byb21pc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMjIxN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJv
bWlzZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODkzQkRCMTkzNkUyM0Mw
MDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVu
Y3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYzQSAv
KiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgU3RydWN0dXJlU2V0JiBTdHJ1Y3R1cmVT
ZXQ6Om9wZXJhdG9yPShjbwogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKIHsKICAgICBkZWxl
dGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBzZXQoMCwgdHJ1ZSk7CisgICAgc2V0
RW1wdHkoKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6OnJlbW92ZShTdHJ1Y3R1cmUq
IHN0cgogewogICAgIGlmIChpc1RoaW4oKSkgewogICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJl
KCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgICAgICAg
ICBzZXRFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODgsNyArODgsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6cmVt
b3ZlKFN0cnVjdHVyZSogc3RyCiAgICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3Qo
KVstLWxpc3QtPm1fbGVuZ3RoXTsKICAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewogICAg
ICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldCgw
LCB0cnVlKTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTQ0LDIzICsxNDQsOCBAQCB2b2lkIFN0cnVjdHVyZVNldDo6
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5jb250YWluc091dE9mTGluZShzaW5nbGVT
dHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVj
dHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7
ICsraSkgewotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgp
W2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9
IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5t
X2xlbmd0aCkKLSAgICAgICAgY2xlYXIoKTsKKyAgICBDb250YWluc091dE9mTGluZSBjb250YWlu
c091dE9mTGluZShvdGhlcik7CisgICAgZ2VuZXJpY0ZpbHRlcihjb250YWluc091dE9mTGluZSk7
CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpCkBAIC0zMjMsNyArMzA4LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6OmNvbnRhaW5zT3V0T2ZM
aW5lKFN0cgogCiB2b2lkIFN0cnVjdHVyZVNldDo6Y29weUZyb20oY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKIHsKLSAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKKyAgICBpZiAob3RoZXIuaXNU
aGluKCkgfHwgb3RoZXIubV9wb2ludGVyID09IHJlc2VydmVkVmFsdWUpIHsKICAgICAgICAgbV9w
b2ludGVyID0gb3RoZXIubV9wb2ludGVyOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNp
b24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK25hbWVzcGFjZSBERkcgeworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKK30KKwog
Y2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTZXQoKQogICAgIHsK
LSAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICBzZXRFbXB0eSgpOwogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02Nyw3ICs3MSwxMCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBpc1RoaW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGJvb2wgcmVz
dWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOworICAgICAgICBpZiAocmVzdWx0
KQorICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhZGQoU3RydWN0dXJlKik7
CkBAIC03OCw2ICs4NSwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0
dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBnZW5lcmljRmlsdGVyKEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAg
ICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKGZ1bmN0b3Ioc2luZ2xlU3RydWN0dXJlKCkpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVM
aXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5saXN0KClbaV0pKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+bGlzdCgpW2ktLV0gPSBsaXN0
LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaXN0
LT5tX2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAogICAgIGJvb2wg
aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmKSBjb25zdDsKICAgICBib29sIGlzU3VwZXJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAogICAgIHsKQEAgLTEyNCwxNSAr
MTUzLDMyIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRoaW5GbGFnID0gMTsKLSAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7Ci0gICAgc3RhdGljIGNvbnN0
IHVpbnRwdHJfdCBmbGFncyA9IDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9
IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVlID0gNDsKIAogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0gNDsKICAgICAKICAg
ICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNvbnRhaW5zT3V0T2ZM
aW5lKFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIGNsYXNzIENvbnRhaW5zT3V0T2ZMaW5l
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnNPdXRPZkxpbmUo
c3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgbV9zZXQ7CisgICAgfTsKKwogICAgIHZvaWQgY29weUZyb20oY29uc3QgU3RydWN0
dXJlU2V0Jik7CiAgICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7CkBAIC0xNTQsNyArMjAw
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vz
c2FyeSgpCiAgICAgewotICAgICAgICBpZiAoIWlzVGhpbigpKQorICAgICAgICBpZiAoIWlzVGhp
bigpICYmIG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQogICAgICAgICAgICAgT3V0T2ZMaW5l
TGlzdDo6ZGVzdHJveShzdHJ1Y3R1cmVMaXN0KCkpOwogICAgIH0KICAgICAKQEAgLTE4NSw5ICsy
MzEsMTMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihzdHJ1Y3R1cmVzKSwgZmFsc2UpOwogICAgIH0KKyAgICB2b2lkIHNldEVtcHR5KCkKKyAg
ICB7CisgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICB9CiAgICAgdm9pZCBzZXQodWludHB0cl90
IHBvaW50ZXIsIGJvb2wgc2luZ2xlU3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgbV9wb2ludGVy
ID0gcG9pbnRlciB8IChzaW5nbGVTdHJ1Y3R1cmUgPyB0aGluRmxhZyA6IDApIHwgKG1fcG9pbnRl
ciAmIHJlc2VydmVkRmxhZyk7CisgICAgICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xl
U3RydWN0dXJlID8gdGhpbkZsYWcgOiAwKTsKICAgICB9CiAKICAgICB1aW50cHRyX3QgbV9wb2lu
dGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiAr
MTE0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJ
bkJsb2NrKTsKICAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwg
Tm9kZSopOwogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KQEAgLTE0OCw3ICsxNDksMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGNs
b2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAg
ICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxWYWx1ZXModW5zaWdu
ZWQgaW5kZXhJbkJsb2NrLCBGdW5jdG9yJik7CisgICAgCiAgICAgdm9pZCBjbG9iYmVyU3RydWN0
dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24o
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8pOwog
ICAgIAogICAgIGVudW0gQm9vbGVhblJlc3VsdCB7CiAgICAgICAgIFVua25vd25Cb29sZWFuUmVz
dWx0LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTcgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OgogICAgIH0KIAogICAgIC8vIE5leHQgY2hlY2sgaWYgd2UgY2FuIGZvbGQg
YmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbiBvYmplY3Qgb3Igc3RyaW5nIGFu
ZCBkb2VzIG5vdCBlcXVhbCB1bmRlZmluZWQuCi0gICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkKLSAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKQotICAgICAgICAgICAgJiYgc3RydWN0dXJlLT50eXBlSW5mbygp
LnR5cGUoKSAhPSBTdHJpbmdUeXBlKQorICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKSB7CisgICAgICAgIGJvb2wgYWxs
VHJ1ZSA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJl
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1
ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkg
PT0gU3RyaW5nVHlwZSkgeworICAgICAgICAgICAgICAgIGFsbFRydWUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
YWxsVHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKICAgICB9CiAgICAg
CkBAIC0xNDU2LDcgKzE0NjIsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAg
ICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0
UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1
Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIEdldEJ5SWRTdGF0dXMgdGhlIGFi
aWxpdHkKKyAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9uIGEgU3RydWN0
dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncworICAgICAgICAgICAg
Ly8gYWJpbGl0eSB0byBnZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgR2V0QnlJZFN0YXR1cyBvdXQg
b2YgQnl0ZUNvZGVQYXJzZXIgc28gdGhhdAorICAgICAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5n
UGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUo
KSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBzdHJ1Y3R1
cmUsCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVu
dGlmaWVyTnVtYmVyKCldKTsKQEAgLTE1MDIsOCArMTUxMywxMiBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAm
IH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3Vy
ZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNl
dCgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgaW50ZXJlc3RpbmcgdGhhdCB3
ZSBjb3VsZCBoYXZlIHByb3ZlbiB0aGF0IHRoZSBvYmplY3QgaGFzIGEgbGFyZ2VyIHN0cnVjdHVy
ZSBzZXQKKyAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIElu
IHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hlY2sKKyAgICAgICAgLy8g
bW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KKyAgICAgICAgCisgICAgICAgIGlm
ICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMTUxMSwzMyArMTUyNiwxNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIG1fc3Rh
dGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAKLSAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1
cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGlu
Ci0gICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29u
c3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKLSAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3
YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgJiYgdmFsdWUubV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwgdmFsdWUubV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
IG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgICAgIAogICAgIGNhc2Ug
UHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgaWYg
KCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFy
KCkpIHsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7CisgICAg
ICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSB7
CisgICAgICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbigKKyAgICAgICAgICAgICAgICBjbG9iYmVy
TGltaXQsCisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1
Y3R1cmUpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAg
ICAgICAgfQpAQCAtMTYxNyw4ICsxNjE2LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewogICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBT
dHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5t
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgfHwg
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICBp
ZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQogICAgICAgICAgICAgbV9zdGF0
ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVl
KTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKQEAgLTE2NTEsNyAr
MTY0OSwxMSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAg
ICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmlu
ZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAotICAgICAgICBpZiAoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAg
Ly8gVGhpcyBzaG91bGQganVzdCBmaWx0ZXIgZG93biB0aGUgY2FzZXMgaW4gTXVsdGlHZXRCeU9m
ZnNldC4gSWYgdGhhdCByZXN1bHRzIGluIGFsbAorICAgICAgICAvLyBjYXNlcyBoYXZpbmcgdGhl
IHNhbWUgb2Zmc2V0IHRoZW4gd2Ugc2hvdWxkIHN0cmVuZ3RoIHJlZHVjZSBpdCB0byBhIENoZWNr
U3RydWN0dXJlICsKKyAgICAgICAgLy8gR2V0QnlPZmZzZXQuCisgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpKSB7CiAg
ICAgICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
CiAgICAgICAgICAgICAgICAgY29uc3QgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5t
dWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwpAQCAtMTY4OCw3ICsxNjkwLDEyIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQVNTRVJU
KCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBo
YXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCi0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IHZhbHVlLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlzIHNo
b3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBjYXNlcyBpbiBNdWx0aVB1dEJ5T2Zmc2V0LiBJZiB0
aGF0IHJlc3VsdHMgaW4gZWl0aGVyCisgICAgICAgIC8vIG9uZSBjYXNlLCBvciBub3RoaW5nIGJ1
dCByZXBsYWNlIGNhc2VzIGFuZCB0aGV5IGhhdmUgdGhlIHNhbWUgb2Zmc2V0LCB0aGVuIHdlIHNo
b3VsZAorICAgICAgICAvLyBqdXN0IHN0cmVuZ3RoIHJlZHVjZSBpdCB0byB0aGUgYXBwcm9wcmlh
dGUgY29tYmluYXRpb24gb2YgQ2hlY2tTdHJ1Y3R1cmUsCisgICAgICAgIC8vIFtSZV1BbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSwgUHV0U3RydWN0dXJlLCBhbmQgUHV0QnlPZmZzZXQuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAg
ICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmUub25seVN0cnVj
dHVyZSgpKSB7CiAgICAgICAgICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6
ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwpAQCAtMTcyMSwx
MiArMTcyOCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFy
aWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CiAgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsK
LSAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFp
bnModmFyaWFudC5zdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3Ry
dWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQuc3RydWN0dXJlKCkpKQogICAgICAgICAgICAgICAgICAg
ICBuZXdTZXQuYWRkKHZhcmlhbnQuc3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQVNTRVJUKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKTsKLSAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKSkKKyAg
ICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5jb250YWlucyh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKSkKICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKHZhcmlhbnQubmV3U3RydWN0dXJl
KCkpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTc2Nyw3ICsxNzc0LDEyIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoK
ICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
Ci0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlzIHVzZSBvZiBvbmx5
U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBQdXRCeUlkU3RhdHVzIHRo
ZSBhYmlsaXR5CisgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9uIGEgU3RydWN0
dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncworICAgICAgICAvLyBh
YmlsaXR5IHRvIGdlbmVyYXRlIGNvZGUgYmFzZWQgb24gYSBQdXRCeUlkU3RhdHVzIG91dCBvZiBC
eXRlQ29kZVBhcnNlciBzbyB0aGF0CisgICAgICAgIC8vIENvbnN0YW50Rm9sZGluZ1BoYXNlIGNh
biB1c2UgaXQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzMyMjkKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAg
ICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCkBAIC0xOTU3LDMyICsxOTY5LDU5IEBA
IHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9iYmVyTGltaXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKAorICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1p
dCwgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMo
KSkKLSAgICAgICAgcmV0dXJuOwogICAgIGlmIChjbG9iYmVyTGltaXQgPj0gbV9zdGF0ZS5ibG9j
aygpLT5zaXplKCkpCiAgICAgICAgIGNsb2JiZXJMaW1pdCA9IG1fc3RhdGUuYmxvY2soKS0+c2l6
ZSgpOwogICAgIGVsc2UKICAgICAgICAgY2xvYmJlckxpbWl0Kys7CiAgICAgQVNTRVJUKGNsb2Ji
ZXJMaW1pdCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IGNsb2JiZXJMaW1pdDsgaS0tOykKLSAgICAgICAgZm9yTm9kZShtX3N0YXRlLmJsb2NrKCktPmF0
KGkpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICBmdW5jdG9yKGZvck5vZGUobV9zdGF0
ZS5ibG9jaygpLT5hdChpKSkpOwogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKICAg
ICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCktPnNz
YS0+bGl2ZUF0SGVhZC5iZWdpbigpOwogICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3Ig
ZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CiAgICAgICAgIGZv
ciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgZm9yTm9kZSgqaXRlcikuY2xv
YmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZSgqaXRlcikpOwog
ICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFy
Z3VtZW50cygpOyBpLS07KQotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkp
LmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMo
KS5hcmd1bWVudChpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCku
bnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5sb2Nh
bChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICBmdW5jdG9yKG1fc3RhdGUudmFyaWFi
bGVzKCkubG9jYWwoaSkpOwogICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBB
YnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKK3sKKyAgICBp
ZiAoIW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvckFs
bFZhbHVlcyhjbG9iYmVyTGltaXQsIEFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVzRm9y
KTsKKyAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKGZhbHNlKTsKKyAgICBtX3N0YXRlLnNl
dERpZENsb2JiZXIodHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVU
eXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2
ZVRyYW5zaXRpb24oCisgICAgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBTdHJ1Y3R1cmUqIGZyb20s
IFN0cnVjdHVyZSogdG8pCit7CisgICAgaWYgKCFtX3N0YXRlLmhhdmVTdHJ1Y3R1cmVzKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBBYnN0cmFjdFZhbHVlOjpUcmFuc2l0aW9uT2JzZXJ2ZXIgdHJh
bnNpdGlvbk9ic2VydmVyKGZyb20sIHRvKTsKKyAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0
LCB0cmFuc2l0aW9uT2JzZXJ2ZXIpOworICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgY29uc3RfY2FzdDxBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPio+KHRoaXMpLT5kdW1wKG91dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KQogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMiArMzcsMTIgQEAgdm9pZCBBYnN0
cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogewogICAgIGlmICghIXZhbHVlICYmIHZh
bHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgsIHN0cnVj
dHVyZSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNT
dGlsbFZhbGlkKCkpCisgICAgICAgICAgICBncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgICAgICBtX3N0cnVjdHVy
ZSA9IHN0cnVjdHVyZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVj
dHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUu
Y2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9hcnJheU1v
ZGVzID0gMDsKICAgICB9CiAgICAgICAgIApAQCAtNTAsMTkgKzUwLDIwIEBAIHZvaWQgQWJzdHJh
Y3RWYWx1ZTo6c2V0TW9zdFNwZWNpZmljKEdyYXAKICAgICBtX3ZhbHVlID0gdmFsdWU7CiAgICAg
ICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgp
OwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIEpTVmFsdWUgdmFs
dWUpCiB7CiAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBtX3N0cnVjdHVyZS5tYWtl
VG9wKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0
cnVjdHVyZSgpOwotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAg
ICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSk7CiAgICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAg
ICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAKQEAgLTcwLDE3ICs3MSwxOCBAQCB2b2lk
IEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIEpTCiAgICAgbV92YWx1ZSA9IHZhbHVl
OwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3Jh
cGgpOwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlID0gc3RydWN0dXJl
OwotICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBzdHJ1Y3R1cmUpOworICAg
IG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2Rl
cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICBtX3R5cGUgPSBzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgIAog
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOwogfQog
CiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihOb2RlRmxhZ3Mg
cmVwcmVzZW50YXRpb24pCkBAIC0xMjksMjEgKzEzMSwxOCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgCiAgICAgbV90eXBlICY9IG90aGVyLnNwZWN1bGF0
aW9uRnJvbVN0cnVjdHVyZXMoKTsKICAgICBtX2FycmF5TW9kZXMgJj0gb3RoZXIuYXJyYXlNb2Rl
c0Zyb21TdHJ1Y3R1cmVzKCk7Ci0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG90
aGVyKTsKKyAgICBtX3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgIAogICAgIC8vIEl0J3Mg
cG9zc2libGUgdGhhdCBwcmlvciB0byB0aGUgYWJvdmUgdHdvIHN0YXRlbWVudHMgd2UgaGFkIChG
b28sIFRPUCksIHdoZXJlCiAgICAgLy8gRm9vIGlzIGEgU3BlY3VsYXRlZFR5cGUgdGhhdCBpcyBk
aXNqb2ludCB3aXRoIHRoZSBwYXNzZWQgU3RydWN0dXJlU2V0LiBJbiB0aGF0CiAgICAgLy8gY2Fz
ZSwgd2Ugd2lsbCBub3cgaGF2ZSAoTm9uZSwgW3NvbWVTdHJ1Y3R1cmVdKS4gSW4gZ2VuZXJhbCwg
d2UgbmVlZCB0byBtYWtlCiAgICAgLy8gc3VyZSB0aGF0IG5ldyBpbmZvcm1hdGlvbiBnbGVhbmVk
IGZyb20gdGhlIFNwZWN1bGF0ZWRUeXBlIG5lZWRzIHRvIGJlIGZlZCBiYWNrCiAgICAgLy8gaW50
byB0aGUgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTdHJ1Y3R1cmVTZXQuCi0gICAgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgbV9zdHJ1Y3R1cmUuZmls
dGVyKG1fdHlwZSk7CiAgICAgCi0gICAgaWYgKG1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Np
bmdsZXRvbigpKQotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOwotICAgICAgICAKICAgICBmaWx0ZXJB
cnJheU1vZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsKLSAgICByZXR1cm4g
bm9ybWFsaXplQ2xhcml0eSgpOworICAgIHJldHVybiBub3JtYWxpemVDbGFyaXR5KGdyYXBoKTsK
IH0KIAogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJBcnJheU1vZGVzKEFy
cmF5TW9kZXMgYXJyYXlNb2RlcykKQEAgLTE2OSw4ICsxNjgsNyBAQCBGaWx0cmF0aW9uUmVzdWx0
IEFic3RyYWN0VmFsdWU6OmZpbHRlcihTCiAgICAgLy8gdGhlIHBhc3NlZCB0eXBlIGlzIEFycmF5
LiBBdCB0aGlzIHBvaW50IHdlJ2xsIGhhdmUgKE5vbmUsIFRPUCkuIFRoZSBiZXN0IHdheQogICAg
IC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgZmlsdGVyaW5nIGRvZXMgdGhlIHJpZ2h0
IHRoaW5nIGlzIHRvIGZpbHRlciBvbgogICAgIC8vIHRoZSBuZXcgdHlwZSAoTm9uZSkgcmF0aGVy
IHRoYW4gdGhlIG9uZSBwYXNzZWQgKEFycmF5KS4KLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5maWx0ZXIobV90eXBlKTsKLSAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmZpbHRlciht
X3R5cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcih0eXBlKTsKICAgICBmaWx0ZXJBcnJheU1v
ZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICByZXR1cm4gbm9ybWFs
aXplQ2xhcml0eSgpOwpAQCAtMTg0LDE1ICsxODIsNiBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3Ry
YWN0VmFsdWU6OmZpbHRlckJ5CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBBYnN0cmFj
dFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIGlmIChncmFwaC53
YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0KCkpKQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID0gc3RydWN0dXJlOwot
ICAgIGVsc2UKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7Ci19
Ci0KIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQogewogICAgIC8vIFdl
IGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUgY29udHJhdmVuZXMKQEAgLTIzOCw4ICsyMjcsNyBAQCBib29sIEFic3RyYWN0VmFs
dWU6OnNob3VsZEJlQ2xlYXIoKSBjb25zCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAg
IGlmICghKG1fdHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAgICAgJiYgKCFtX2FycmF5TW9kZXMKLSAg
ICAgICAgICAgIHx8IG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSkpCisgICAgICAg
ICYmICghbV9hcnJheU1vZGVzIHx8IG1fc3RydWN0dXJlLmlzQ2xlYXIoKSkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTI2MywxMiArMjUxLDE4IEBA
IEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXoKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6Om5vcm1hbGl6ZUNsYXJp
dHkoR3JhcGgmIGdyYXBoKQoreworICAgIEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0ID0gbm9ybWFs
aXplQ2xhcml0eSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgaWYgKCEobV90eXBlICYgU3BlY0NlbGwpKSB7
Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpOwotICAg
ICAgICBBU1NFUlQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAg
ICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAgICAgICAgQVNTRVJUKCFtX2FycmF5
TW9kZXMpOwogICAgIH0KICAgICAKQEAgLTI4OSw2ICsyODMsMTEgQEAgdm9pZCBBYnN0cmFjdFZh
bHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgYwogICAgIC8vIHdlIGRvbid0IHdhbnQgdG8gZ2V0IHBl
ZGFudGljIGFib3V0IHRoaXMgYXMgaXQgd291bGQgb25seSBpbmNyZWFzZSB0aGUgY29tcHV0YXRp
b25hbAogICAgIC8vIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUuCiB9CisKK3ZvaWQgQWJzdHJhY3RW
YWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBtX3N0cnVj
dHVyZS5hc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworfQogI2VuZGlmCiAKIHZvaWQgQWJzdHJhY3RW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMzAyLDggKzMwMSw3IEBAIHZv
aWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICBpZiAobV90eXBlICYg
U3BlY0NlbGwpIHsKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIiwgIiwgQXJyYXlN
b2Rlc0R1bXAobV9hcnJheU1vZGVzKSwgIiwgIiwKLSAgICAgICAgICAgIGluQ29udGV4dChtX2N1
cnJlbnRLbm93blN0cnVjdHVyZSwgY29udGV4dCksICIsICIsCi0gICAgICAgICAgICBpbkNvbnRl
eHQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSwgY29udGV4dCkpOworICAgICAgICAgICAgaW5D
b250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlmICghIW1fdmFsdWUp
CiAgICAgICAgIG91dC5wcmludCgiLCAiLCBpbkNvbnRleHQobV92YWx1ZSwgY29udGV4dCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJl
dmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw3IEBAIHN0cnVjdCBBYnN0cmFjdFZh
bHVlIHsKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNwZWNOb25lOwogICAgICAgICBtX2FycmF5
TW9kZXMgPSAwOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwotICAg
ICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fc3RydWN0
dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKICAgICB9CkBAIC03NSwxNSArNzQsNDYgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKQogICAgIHsKICAgICAgICAgaWYg
KG1fdHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5jbG9iYmVyKCk7CiAgICAgICAg
ICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7CisgICAgICAgICAgICBB
U1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAgICAgICAgICAgIEFTU0VSVCghbV9hcnJh
eU1vZGVzKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzRm9yKEFic3RyYWN0VmFsdWUm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgdmFsdWUuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVj
dHVyZSogdG8pCisgICAgeworICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVUcmFuc2l0aW9uKGZyb20sIHRvKTsKKyAgICAgICAg
ICAgIG9ic2VydmVJbmRleGluZ1R5cGVUcmFuc2l0aW9uKGZyb20tPmluZGV4aW5nVHlwZSgpLCB0
by0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICB9CisgICAgCisgICAgY2xhc3MgVHJhbnNpdGlvbk9ic2VydmVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFRyYW5zaXRpb25PYnNlcnZlcihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVy
ZSogdG8pCisgICAgICAgICAgICA6IG1fZnJvbShmcm9tKQorICAgICAgICAgICAgLCBtX3RvKHRv
KQorICAgICAgICB7CisgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3Io
KShBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUub2Jz
ZXJ2ZVRyYW5zaXRpb24obV9mcm9tLCBtX3RvKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6Cisg
ICAgICAgIFN0cnVjdHVyZSogbV9mcm9tOworICAgICAgICBTdHJ1Y3R1cmUqIG1fdG87CisgICAg
fTsKKyAgICAKICAgICB2b2lkIGNsb2JiZXJWYWx1ZSgpCiAgICAgewogICAgICAgICBtX3ZhbHVl
ID0gSlNWYWx1ZSgpOwpAQCAtOTEsNyArMTIxLDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAKICAgICBib29sIGlzSGVhcFRvcCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4g
KG1fdHlwZSB8IFNwZWNIZWFwVG9wKSA9PSBtX3R5cGUgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaXNUb3AoKSAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzVG9wKCk7CisgICAgICAg
IHJldHVybiAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZQorICAgICAgICAgICAgJiYg
bV9zdHJ1Y3R1cmUuaXNUb3AoKQorICAgICAgICAgICAgJiYgbV9hcnJheU1vZGVzID09IEFMTF9B
UlJBWV9NT0RFUworICAgICAgICAgICAgJiYgIW1fdmFsdWU7CiAgICAgfQogICAgIAogICAgIGJv
b2wgdmFsdWVJc1RvcCgpIGNvbnN0CkBAIC0xMTgsMTIgKzE1MSwxMCBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgdm9pZCBzZXRUeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCiAgICAgewog
ICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAg
ICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgICAg
ICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICAgICAgfQog
ICAgICAgICBtX3R5cGUgPSB0eXBlOwpAQCAtMTM4LDggKzE2OSw3IEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtX3R5cGUgPT0gb3RoZXIubV90eXBlCiAg
ICAgICAgICAgICAmJiBtX2FycmF5TW9kZXMgPT0gb3RoZXIubV9hcnJheU1vZGVzCi0gICAgICAg
ICAgICAmJiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9PSBvdGhlci5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZQotICAgICAgICAgICAgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSA9PSBvdGhl
ci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlCisgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZQogICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3Zh
bHVlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3Ro
ZXIpIGNvbnN0CkBAIC0xNjIsOCArMTkyLDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlU3BlY3VsYXRpb24obV90
eXBlLCBvdGhlci5tX3R5cGUpOwogICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlQXJyYXlNb2Rl
cyhtX2FycmF5TW9kZXMsIG90aGVyLm1fYXJyYXlNb2Rlcyk7Ci0gICAgICAgICAgICByZXN1bHQg
fD0gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlKTsKLSAgICAgICAgICAgIHJlc3VsdCB8PSBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
LmFkZEFsbChvdGhlci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlKTsKKyAgICAgICAgICAgIHJl
c3VsdCB8PSBtX3N0cnVjdHVyZS5tZXJnZShvdGhlci5tX3N0cnVjdHVyZSk7CiAgICAgICAgICAg
ICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0
IHw9ICEhbV92YWx1ZTsKICAgICAgICAgICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAt
MTc5LDggKzIwOCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgbWVyZ2VTcGVj
dWxhdGlvbihtX3R5cGUsIHR5cGUpOwogICAgICAgICAKICAgICAgICAgaWYgKHR5cGUgJiBTcGVj
Q2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwot
ICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAg
ICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBB
TExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0KICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsK
QEAgLTIyNSw3NSArMjUzLDMwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgaWYg
KCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChtX3R5cGUg
JiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgJiYgbV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICYmIChtX2Fy
cmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpOwogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAg
U3RydWN0dXJlKiBiZXN0UHJvdmVuU3RydWN0dXJlKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAgICAgICAgaWYgKG1f
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaGFzQ2xvYmJlcmFibGVTdGF0ZSgpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNOZWl0aGVyQ2xl
YXJOb3JUb3AoKQorICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuaXNOZWl0aGVyQ2xlYXJOb3JU
b3AoKQogICAgICAgICAgICAgfHwgIWFycmF5TW9kZXNBcmVDbGVhck9yVG9wKG1fYXJyYXlNb2Rl
cyk7CiAgICAgfQogICAgIAogI2lmIEFTU0VSVF9ESVNBQkxFRAogICAgIHZvaWQgY2hlY2tDb25z
aXN0ZW5jeSgpIGNvbnN0IHsgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29u
c3QgeyB9CiAjZWxzZQogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0OworICAgIHZv
aWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CiAjZW5kaWYKICAgICAKICAgICB2b2lk
IGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIC8vIEEgZ3JlYXQgd2F5IHRv
IHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUgYW5kCi0gICAgLy8gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBpcyB0byBjb25zaWRlciB0
aGVzZSBmb3VyIGV4YW1wbGVzOgotICAgIC8vCi0gICAgLy8gMSkgeCA9IGZvbygpOwotICAgIC8v
Ci0gICAgLy8gICAgSW4gdGhpcyBjYXNlIHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsCi0gICAgLy8gICAgYm90aCBiZSBUT1AsIHNp
bmNlIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgeCBmb3Igc3VyZSwgeWV0LgotICAgIC8v
Ci0gICAgLy8gMikgeCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8KLSAgICAv
LyAgICBXaGVyZSB4IHdpbGwgbGF0ZXIgaGF2ZSBhIG5ldyBwcm9wZXJ0eSBhZGRlZCB0byBpdCwg
J2cnLiBCZWNhdXNlIG9mIHRoZQotICAgIC8vICAgIGtub3duIGJ1dCBub3QteWV0LWV4ZWN1dGVk
IHByb3BlcnR5IGFkZGl0aW9uLCB4J3MgY3VycmVudCBzdHJ1Y3R1cmUgd2lsbAotICAgIC8vICAg
IG5vdCBiZSB3YXRjaHBvaW50YWJsZTsgaGVuY2Ugd2UgaGF2ZSBubyB3YXkgb2Ygc3RhdGljYWxs
eSBib3VuZGluZyB0aGUgc2V0Ci0gICAgLy8gICAgb2YgcG9zc2libGUgc3RydWN0dXJlcyB0aGF0
IHggbWF5IGhhdmUgaWYgYSBjbG9iYmVyaW5nIGV2ZW50IGhhcHBlbnMuIFNvLAotICAgIC8vICAg
IHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3
ZSBjaGVjayB0byBnZXQKLSAgICAvLyAgICBwcm9wZXJ0eSAnZicsIGFuZCBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYmUgVE9QLgotICAgIC8vCi0gICAgLy8gMykgeCA9IGZvbygpOwot
ICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8KLSAgICAvLyAgICBXaGVyZSB4IGhhcyBhIHRlcm1p
bmFsIHN0cnVjdHVyZSB0aGF0IGlzIHN0aWxsIHdhdGNocG9pbnRhYmxlLiBJbiB0aGlzIGNhc2Us
Ci0gICAgLy8gICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZCBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYm90aCBiZQotICAgIC8vICAgIHdoYXRldmVyIHN0cnVjdHVyZSB3
ZSBjaGVja2VkIGZvciB3aGVuIGdldHRpbmcgJ2YnLgotICAgIC8vCi0gICAgLy8gNCkgeCA9IGZv
bygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8gICAgYmFyKCk7Ci0gICAgLy8KLSAgICAv
LyAgICBXaGVyZSB4IGhhcyBhIHRlcm1pbmFsIHN0cnVjdHVyZSB0aGF0IGlzIHN0aWxsIHdhdGNo
cG9pbnRhYmxlLiBJbiB0aGlzCi0gICAgLy8gICAgY2FzZSwgbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUgd2lsbCBiZSBUT1AgYmVjYXVzZSBiYXIoKSBtYXkgcG90ZW50aWFsbHkKLSAgICAvLyAgICBj
aGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJvdmluZyBvdGhlcndp
c2UsIGJ1dAotICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUg
d2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCi0gICAgLy8gICAgd2hlbiBnZXR0aW5n
IHByb3BlcnR5ICdmJy4KLSAgICAKLSAgICAvLyBOQi4gQWxsIGZpZWxkcyBpbiB0aGlzIHN0cnVj
dCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KLQogICAgIC8vIFRoaXMgaXMgYSBwcm92
ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUg
cmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJlbnQgdmFsdWUgbXVz
dCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5CiAgICAgLy8gYmUgVE9QLCBpbmRpY2F0
aW5nIHRoYXQgaXQgaXMgdGhlIHNldCBvZiBhbGwgcG9zc2libGUgc3RydWN0dXJlcywgaW4gd2hp
Y2gKQEAgLTMwMSwyOSArMjg0LDEyIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyBp
biB3aGljaCBjYXNlIHRoaXMgdmFsdWUgY2Fubm90IGJlIGEgY2VsbC4gVGhpcyBpcyBhbGwgc3Vi
amVjdCB0byBjaGFuZ2UKICAgICAvLyBhbnl0aW1lIGEgbmV3IHZhbHVlIGlzIGFzc2lnbmVkIHRv
IHRoaXMgb25lLCBhbnl0aW1lIHRoZXJlIGlzIGEgY29udHJvbCBmbG93CiAgICAgLy8gbWVyZ2Us
IG9yIG1vc3QgY3J1Y2lhbGx5LCBhbnl0aW1lIGEgc2lkZS1lZmZlY3Qgb3Igc3RydWN0dXJlIGNo
ZWNrIGhhcHBlbnMuCi0gICAgLy8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0LCB3ZSB0eXBpY2Fs
bHkgbXVzdCBhc3N1bWUgdGhhdCBhbnkgdmFsdWUgbWF5IGhhdmUKLSAgICAvLyBoYWQgaXRzIHN0
cnVjdHVyZSBjaGFuZ2VkLCBoZW5jZSBjb250cmF2ZW5pbmcgb3VyIHByb29mLiBXZSBtYWtlIHRo
ZSBwcm9vZgotICAgIC8vIHZhbGlkIGFnYWluIGJ5IHN3aXRjaGluZyB0aGlzIHRvIFRPUCAoaS5l
LiBjbGFpbWluZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQKLSAgICAvLyB0aGlzIHZhbHVlIG1h
eSBoYXZlIGFueSBzdHJ1Y3R1cmUpLiBPZiBub3RlIGlzIHRoYXQgdGhlIHByb29mIHJlcHJlc2Vu
dGVkIGJ5Ci0gICAgLy8gdGhpcyBmaWVsZCBpcyBub3Qgc3ViamVjdCB0byBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbiB3YXRjaHBvaW50cyAtIGV2ZW4gaWYgb25lCi0gICAgLy8gZmlyZXMsIHdlIGNhbiBi
ZSBzdXJlIHRoYXQgdGhpcyBwcm9vZiBpcyBzdGlsbCB2YWxpZC4KLSAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIG1fY3VycmVudEtub3duU3RydWN0dXJlOwotICAgIAotICAgIC8vIFRoaXMgaXMg
YSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFsdWUgY2Fu
IGhhdmUgbm93Ci0gICAgLy8gb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZSBzdWJqZWN0IHRvIHRo
ZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvZgotICAgIC8vIGFsbCBtZW1iZXJz
IG9mIHRoaXMgc2V0IG5vdCBoYXZpbmcgZmlyZWQuIFRoaXMgc2V0IGlzIGltcGVydmlvdXMgdG8g
c2lkZS0KLSAgICAvLyBlZmZlY3RzOyBldmVuIGlmIG9uZSBoYXBwZW5zIHRoZSBzaWRlLWVmZmVj
dCBjYW4gb25seSBjYXVzZSB0aGUgdmFsdWUgdG8KLSAgICAvLyBjaGFuZ2UgdG8gYXQgd29yc3Qg
YW5vdGhlciBzdHJ1Y3R1cmUgdGhhdCBpcyBhbHNvIGEgbWVtYmVyIG9mIHRoaXMgc2V0LiBCdXQs
Ci0gICAgLy8gdGhlIHRoZW9yZW0gYmVpbmcgcHJvdmVkIGJ5IHRoaXMgZmllbGQgaXMgcHJlZGlj
YXRlZCB1cG9uIHRoZXJlIG5vdCBiZWluZwotICAgIC8vIGFueSBuZXcgc3RydWN0dXJlIHRyYW5z
aXRpb25zIGludHJvZHVjZWQgaW50byBhbnkgbWVtYmVycyBvZiB0aGlzIHNldC4gSW4KLSAgICAv
LyBjYXNlcyB3aGVyZSB0aGVyZSBpcyBubyB3YXkgZm9yIHVzIHRvIGd1YXJkIHRoaXMgaGFwcGVu
aW5nLCB0aGUgc2V0IG11c3QgYmUKLSAgICAvLyBUT1AuIEJ1dCBpbiBjYXNlcyB3aGVyZSB3ZSBj
YW4gZ3VhcmQgbmV3IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAoYWxsIG1lbWJlcnMKLSAgICAvLyBv
ZiB0aGUgc2V0IGhhdmUgc3RpbGwtdmFsaWQgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2lu
dHMpIHRoZW4gdGhpcyBzZXQKLSAgICAvLyB3aWxsIGJlIGZpbml0ZS4gQW55dGltZSB0aGF0IHdl
IG1ha2UgdXNlIG9mIHRoZSBmaW5pdGUgbmF0dXJlIG9mIHRoaXMgc2V0LAotICAgIC8vIHdlIG11
c3QgZmlyc3QgaXNzdWUgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50LCB3aGljaCB3
aWxsIGVmZmVjdGl2ZWx5Ci0gICAgLy8gcmVzdWx0IGluIG1fY3VycmVudEtub3duU3RydWN0dXJl
IGJlaW5nIGZpbHRlcmVkIGFjY29yZGluZyB0bwotICAgIC8vIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlOworICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVjdCwgd2UgbXVzdCBhc3N1bWUgdGhh
dCBhbnkgdmFsdWUgd2l0aCBhIHN0cnVjdHVyZSB0aGF0CisgICAgLy8gaXNuJ3QgYmVpbmcgd2F0
Y2hlZCBtYXkgaGF2ZSBoYWQgaXRzIHN0cnVjdHVyZSBjaGFuZ2VkLCBoZW5jZSBjb250cmF2ZW5p
bmcKKyAgICAvLyBvdXIgcHJvb2YuIEluIHN1Y2ggYSBjYXNlIHdlIG1ha2UgdGhlIHByb29mIHZh
bGlkIGFnYWluIGJ5IHN3aXRjaGluZyB0aGlzIHRvCisgICAgLy8gVE9QIChpLmUuIGNsYWltaW5n
IHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGlzIHZhbHVlIG1heSBoYXZlIGFueQorICAgIC8v
IHN0cnVjdHVyZSkuCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX3N0cnVjdHVyZTsKICAg
ICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHBvc3NpYmxlIHR5
cGVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZQogICAgIC8vIG5vdyBvciBhbnkgdGltZSBpbiB0
aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gVGhpcyBmaWVsZCBpcwpAQCAtMzMy
LDExICsyOTgsMTEgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8vIGJldHdlZW4gdGhp
cyBmaWVsZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIGFib3ZlLCBpcyBhcyBmb2xsb3dzLiBU
aGUKICAgICAvLyBmaWVsZHMgYWJvdmUgY29uc3RyYWludCB0aGUgc3RydWN0dXJlcyB0aGF0IGEg
Y2VsbCBtYXkgaGF2ZSwgYnV0IHRoZXkgc2F5CiAgICAgLy8gbm90aGluZyBhYm91dCB3aGV0aGVy
IG9yIG5vdCB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgYSBjZWxsLiBNb3JlIGZvcm1hbGx5LAot
ICAgIC8vIHRoZSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBpcyBpdHNlbGYgYW4gYWJzdHJhY3Qg
dmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKKyAgICAvLyB0aGUgbV9zdHJ1Y3R1cmUgaXMgaXRz
ZWxmIGFuIGFic3RyYWN0IHZhbHVlIHRoYXQgY29uc2lzdHMgb2YgdGhlCiAgICAgLy8gdW5pb24g
b2YgdGhlIHNldCBvZiBhbGwgbm9uLWNlbGwgdmFsdWVzIGFuZCB0aGUgc2V0IG9mIGNlbGwgdmFs
dWVzIHRoYXQgaGF2ZQogICAgIC8vIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuIFRoaXMgYWJzdHJhY3Qg
dmFsdWUgaXMgdGhlbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZQotICAgIC8vIG1fY3VycmVudEtu
b3duU3RydWN0dXJlIGFuZCB0aGUgc2V0IG9mIHZhbHVlcyB3aG9zZSB0eXBlIGlzIG1fdHlwZS4g
U28sIGZvcgotICAgIC8vIGV4YW1wbGUgaWYgbV90eXBlIGlzIFNwZWNGaW5hbHxTcGVjSW50MzIg
YW5kIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzCisgICAgLy8gbV9zdHJ1Y3R1cmUgYW5kIHRo
ZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUgaXMgbV90eXBlLiBTbywgZm9yCisgICAgLy8gZXhh
bXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQzMiBhbmQgbV9zdHJ1Y3R1cmUgaXMK
ICAgICAvLyBbMHgxMjM0NV0gdGhlbiB0aGlzIGFic3RyYWN0IHZhbHVlIGNvcnJlc3BvbmRzIHRv
IHRoZSBzZXQgb2YgYWxsIGludGVnZXJzCiAgICAgLy8gdW5pZmllZCB3aXRoIHRoZSBzZXQgb2Yg
YWxsIG9iamVjdHMgd2l0aCBzdHJ1Y3R1cmUgMHgxMjM0NS4KICAgICBTcGVjdWxhdGVkVHlwZSBt
X3R5cGU7CkBAIC0zNjQsNiArMzMwLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIG1fYXJyYXlNb2Rl
cyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICB9CiAgICAgCisgICAgdm9pZCBvYnNlcnZlSW5kZXhp
bmdUeXBlVHJhbnNpdGlvbihJbmRleGluZ1R5cGUgZnJvbSwgSW5kZXhpbmdUeXBlIHRvKQorICAg
IHsKKyAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2Rlcyhmcm9tKSkKKyAgICAg
ICAgICAgIG1fYXJyYXlNb2RlcyB8PSBhc0FycmF5TW9kZXModG8pOworICAgIH0KKyAgICAKICAg
ICBib29sIHZhbGlkYXRlVHlwZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAg
aWYgKGlzSGVhcFRvcCgpKQpAQCAtMzkxLDE5ICszNjMsMTcgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIG1fdHlwZSB8PSB0b3A7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9N
T0RFUzsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAg
ICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgbV9zdHJ1Y3R1
cmUubWFrZVRvcCgpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUoR3JhcGgmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7Ci0KICAgICB2b2lkIGZpbHRl
clZhbHVlQnlUeXBlKCk7CiAgICAgdm9pZCBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAg
CiAgICAgYm9vbCBzaG91bGRCZUNsZWFyKCkgY29uc3Q7CiAgICAgRmlsdHJhdGlvblJlc3VsdCBu
b3JtYWxpemVDbGFyaXR5KCk7CisgICAgRmlsdHJhdGlvblJlc3VsdCBub3JtYWxpemVDbGFyaXR5
KEdyYXBoJik7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFsbG9jYXRlKCk7IC8vIFVzZSBwbGFj
ZW1lbnQgbmV3IHRvIGFsbG9jYXRlLCBhbmQgYXZvaWQgdXNpbmcgdGhpcyBtZXRob2QuCiAgICAg
dm9pZCBmcmVlKFQqKTsgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBkZWxldGU7IG5ldmVyIHVzZSAn
ZGVsZXRlJyBkaXJlY3RseS4KICAgICAKLSAgICB2b2lkIGZyZWVBbGwoKTsgLy8gT25seSBjYWxs
IHRoaXMgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgdm9pZCBmcmVlQWxsKCk7
IC8vIE9ubHkgY2FsbCB0aGlzIGlmIHlvdSd2ZSBlaXRoZXIgZnJlZWQgZXZlcnl0aGluZyBvciBp
ZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KICAgICB2b2lkIHJlc2V0KCk7IC8vIExpa2Ug
ZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1cm5zIGFsbCBtZW1vcnkgdG8gdGhlIE9TLgogICAgIAog
ICAgIHVuc2lnbmVkIGluZGV4T2YoY29uc3QgVCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUs
NyArMzI1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAg
ICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
Y2FyZSBhYm91dCB0aGVzZSBiZWNhdXNlIGlmIHdlIGdldCB1c2VzIG9mIHRoZSByZWxldmFudAog
ICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0aGVuIHdlIGNhbiBzYWZlbHkgZ2V0IHJp
ZCBvZiB0aGVzZSwgdG9vLiBUaGlzIG9mIGNvdXJzZQpAQCAtNDQxLDcgKzQ0MCw2IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsK
ICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGp1c3QgZ2V0IHJpZCBvZiB0aGlzIG5vZGUs
IGlmIGl0IHJlZmVyZW5jZXMgYSBwaGFudG9tIGFyZ3VtZW50LgogICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxNjkyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4OSwyNSArMjg5LDQ4IEBAIFN0cnVjdHVyZSogQXJyYXlNb2RlOjpvcmlnaW5h
bEFycmF5U3RydWMKIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBJbmRleGluZ1R5cGUgc2hhcGUpIGNv
bnN0CiB7CiAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKLSAgICBjYXNlIEFycmF5OjpPcmln
aW5hbEFycmF5OgotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgPT0g
c2hhcGUKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5n
bGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQotICAgICAgICAgICAgJiYgZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmlzT3JpZ2luYWxBcnJheVN0
cnVjdHVyZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKSk7CisgICAg
Y2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheTogeworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1
cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAg
aWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spICE9IHNo
YXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghKHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3RydWN0dXJlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpBcnJheToKKyAgICBjYXNlIEFy
cmF5OjpBcnJheTogewogICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVl
Lm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKHNoYXBlIHwgSXNBcnJheSkpKQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNr
KSA9PSBzaGFwZQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworICAgICAgICBpZiAodmFs
dWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOwor
ICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFw
ZU1hc2spICE9IHNoYXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQogICAgICAgICAKLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsKICAgICAgICAgaWYg
KGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2Rl
cyhzaGFwZSkgfCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0FycmF5KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09
IHNoYXBlOwotICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVl
Lm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfSB9CiB9CiAKIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKSBjb25zdApAQCAtMzM2LDIzICszNTks
MzggQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBncgogICAgICAgICAK
ICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBzd2l0Y2ggKGFy
cmF5Q2xhc3MoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OgorICAgICAg
ICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OiB7CiAgICAgICAgICAgICBDUkFTSCgpOwogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjYXNl
IEFycmF5OjpBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6IHsKICAgICAgICAgICAg
IGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5
TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93
UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
ICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkK
LSAgICAgICAgICAgICAgICAmJiBoYXNBbnlBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQotICAgICAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1Rv
cCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAg
ICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICBp
ZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgorICAgICAgICBkZWZh
dWx0OiB7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1f
YXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBy
ZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAg
ICAgICAgICAgICAmJiBoYXNBbnlBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2
YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3Rv
cmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0gfQogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6CiAgICAgICAgIHJl
dHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjQXJndW1lbnRzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
aWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIoVU5TQUZFKSAiKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKG1fc3RhdGUudmFyaWFibGVzKCksICIgIiwgbV9pbnRlcnByZXRlcik7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuaGF2ZVN0cnVjdHVy
ZXMoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiIChIYXZlIFN0cnVjdHVyZXMpIik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNp
b24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2MCwxMiArNDYwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Ogot
ICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAg
ICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVyZSgpKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAg
ICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCiAgICAgICAgICAgICAgICAgICAg
ICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
Lm5ld1N0cnVjdHVyZSkpCkBAIC01NDcsMTEgKzU0MSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBub2RlLT5jaGls
ZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJh
eWlmeToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAg
ICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZmZWN0
IG91ciBzdHJ1Y3R1cmVzLgpAQCAtMTM4NywxMyArMTM3Niw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAg
aWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9u
KG5vZGUtPnN0cnVjdHVyZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAgICAg
ICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3JtYWxD
U0UpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw3ICs0MTgs
NiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgICAgICByZWFkKEpTQ2Vs
bF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGlu
Z1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMjcgKzk3LDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vi
c2V0T2Yoc2V0KSkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1
YnNldE9mKHNldCkpIHsKICAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRl
KGluZGV4SW5CbG9jayk7IC8vIENhdGNoIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBj
ZWxsLgogICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSYgc3RydWN0dXJlVmFsdWUgPSB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
OwotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVWYWx1ZS5pc1N1YnNldE9mKHNldCkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlVmFsdWUuaGFzU2luZ2xldG9uKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVWYWx1ZS5z
aW5nbGV0b24oKTsKLSAgICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGlu
ZGV4SW5CbG9jayk7IC8vIENhdGNoIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxs
LgotICAgICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hp
bGRyZW47Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnJlbW92ZUVkZ2UoMCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmICghIWNoaWxkcmVuLmNoaWxkMSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBQaGFudG9tLCBub2RlLT5vcmlnaW4sIGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPmNoaWxkcmVuLnNldENoaWxkMyhFZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmUpOwotICAg
ICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMTU2LDcgKzE0MSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAg
ICAgICAgIE11bHRpR2V0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKTsKIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJl
Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC0xODAsNyArMTY1LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2Rl
KCk7CiAgICAgICAgICAgICAgICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGls
ZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3Ry
dWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAg
LTIwNSw3ICsxOTAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChjaGlsZEVkZ2Uu
dXNlS2luZCgpICE9IENlbGxVc2UpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJl
Lm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTIzMiw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgp
ID09IENlbGxVc2UpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJl
KCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5v
ZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgCkBAIC0zMjksNyArMzE0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVkZ2Ug
PSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgp
OwogCi0gICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGls
ZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAgIGJvb2wg
bmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2Vs
bDsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghdmFyaWFudC5jaGFpbigpKTsKQEAgLTM0MCwx
MSArMzI0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAg
ICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAg
ICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZv
KHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hl
Y2spIHsKKyAgICAgICAgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CiAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05v
bmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAgICAgfQpAQCAtMzgxLDcgKzM2
MSw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCkg
PT0gc3RydWN0dXJlKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0g
IW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCk7CiAgICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hp
bGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBiZWZvcmUg
d2UgZG8gYW55dGhpbmcgZWxzZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJ
ZApAQCAtMzg5LDExICszNjgsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBkbyBhbnkgZWxpbWlu
YXRpb25zLgogICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKIAot
ICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJ
bmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxs
Q2hlY2spIHsKKyAgICAgICAgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CiAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAgICAgfQpAQCAtNDc1LDE2
ICs0NTAsMTQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNo
ZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2Vs
bCkKICAgICB7Ci0gICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCi0gICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZhbHVl
KGNlbGwpLCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8oY2VsbCkpOwotICAgICAgICAK
LSAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoY2VsbC0+c3Ry
dWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7Ci0gICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3Bl
Y05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAg
ICAgICAgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxV
c2UpKTsKKyAgICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIE5vZGUqIHdlYWtDb25z
dGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBpbmRleEluQmxv
Y2ssIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBP
cEluZm8oY2VsbCkpOworICAgICAgICAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBv
cmlnaW4sCiAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+
c3RydWN0dXJlKCkpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAkocmV2
aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsOSBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBhZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0
S2luZCwgV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKICAgICB7CisjaWYgIUFTU0VSVF9ESVNBQkxF
RAorICAgICAgICBtX3Byb2ZpbGVkU2V0cy5hZGQoc2V0KTsKKyNlbmRpZgogICAgICAgICBtX3By
b2ZpbGVkV2F0Y2hwb2ludHMuYXBwZW5kKAogICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdlbmVy
aWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPihjb2RlT3JpZ2luLCBleGl0S2luZCwg
c2V0KSk7CiAgICAgfQpAQCAtMTcyLDExICsxNzUsMTcgQEAgcHVibGljOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzZXQpIHx8IHNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0
KTsKICAgICB9CisgICAgCisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoV2F0Y2hwb2ludFNldFR5
cGUqIHNldCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX3NldHMuY29udGFpbnMoc2V0
KSB8fCBtX3Byb2ZpbGVkU2V0cy5jb250YWlucyhzZXQpKTsKKyAgICB9CiAKIHByaXZhdGU6CiAg
ICAgVmVjdG9yPFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0
VHlwZT4+IG1fcHJvZmlsZWRXYXRjaHBvaW50czsKICAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRU
eXBlKj4gbV9zZXRzOwogI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBIYXNoU2V0PFdhdGNocG9p
bnRTZXRUeXBlKj4gbV9wcm9maWxlZFNldHM7CiAgICAgU3RhdGVNYXAgbV9maXJzdEtub3duU3Rh
dGU7CiAjZW5kaWYKICAgICBib29sIG1fcmVhbGx5QWRkZWQ7CkBAIC0yMzMsNiArMjQyLDE4IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzVmFsaWRPck1p
eGVkKHZpZXcpOwogICAgIH0KKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChXYXRjaHBvaW50U2V0
KiBzZXQpCisgICAgeworICAgICAgICBtX3NldHMuYXNzZXJ0SXNXYXRjaGVkKHNldCk7CisgICAg
fQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKKyAg
ICB7CisgICAgICAgIG1faW5saW5lU2V0cy5hc3NlcnRJc1dhdGNoZWQoJnNldCk7CisgICAgfQor
ICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQorICAgIHsK
KyAgICAgICAgbV9idWZmZXJWaWV3cy5hc3NlcnRJc1dhdGNoZWQodmlldyk7CisgICAgfQogICAg
IAogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPFdhdGNocG9pbnRTZXQ+
IG1fc2V0czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHJl
dmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0OgogICAgIGNhc2UgUHV0
QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9t
UHV0U3RydWN0dXJlOgogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkzMCw3ICs5MzAsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRh
YmxlOgogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAg
ICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBDcmVhdGVUaGlzOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2OTIwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw2ICs3NywxNiBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25n
TGl2CiAKIEdyYXBoOjp+R3JhcGgoKQogeworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4
ID0gbnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxv
Y2sgPSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9j
ay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgbV9hbGxvY2F0b3IuZnJl
ZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgIG1fYWxsb2NhdG9y
LmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIH0KICAgICBtX2FsbG9jYXRvci5mcmVl
QWxsKCk7CiB9CiAKQEAgLTg0Niw3ICs4NTYsNiBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVu
KFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRSZWFkT25seVBvaW50ZXIobm9kZS0+c3RydWN0dXJlU2V0KClbaV0pOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAg
ICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICAgICAgY2FzZSBOZXdT
dHJpbmdPYmplY3Q6CkBAIC04NjMsNiArODcyLDMxIEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
dmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5VmFs
dWUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IHNldC5zaXplKCk7IGotLTspCisgICAgICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtq
XSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBtYXJrIGFueXRoaW5n
IGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCisgICAgICAgICAgICAg
ICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9u
J3QgbmVlZCB0byBtYXJrIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1
cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4NSwyMSArNDg1LDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjaGlsZHJlbi5y
ZXNldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fb3AgPT0gQ2hlY2tTdHJ1Y3R1cmUgfHwgbV9vcCA9PSBBcnJheWlmeVRvU3RydWN0dXJlKTsK
LSAgICAgICAgQVNTRVJUKCFjaGlsZDIoKSk7Ci0gICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwot
ICAgICAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpOwotICAgICAgICBtX29wID0gU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQoKQotICAgIHsKLSAgICAgICAgY29udmVydFRvU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlU2V0KCkub25seVN0cnVjdHVyZSgpKTsKLSAg
ICB9Ci0gICAgCiAgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdl
QWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9v
cCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoIHx8IG1fb3AgPT0gTXVsdGlHZXRC
eU9mZnNldCk7CkBAIC0xMTI5LDcgKzExMTQsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgYm9vbCBo
YXNTdHJ1Y3R1cmUoKQogICAgIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7Ci0gICAgICAgIGNh
c2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3Ry
aW5nT2JqZWN0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
cmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlw
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsMTggKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQdXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRl
IHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZU11
c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENoZWNrRXhlY3V0YWJsZSwgTm9kZU11c3RHZW5lcmF0
ZSkgXAotICAgIC8qIFRyYW5zaXRpb24gd2F0Y2hwb2ludHMgYXJlIGEgY29udHJhY3QgYmV0d2Vl
biB0aGUgcGFydHkgc2V0dGluZyB0aGUgd2F0Y2hwb2ludCAqL1wKLSAgICAvKiBhbmQgdGhlIHJ1
bnRpbWUgc3lzdGVtLCB3aGVyZSB0aGUgcGFydHkgcHJvbWlzZXMgdGhhdCB0aGUgY2hpbGQgb2Jq
ZWN0IG9uY2UgaGFkICovXAotICAgIC8qIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgd2F0Y2hlZCwgYW5k
IHRoZSBydW50aW1lIHN5c3RlbSBpbiB0dXJuIHByb21pc2VzIHRoYXQgdGhlICovXAotICAgIC8q
IHdhdGNocG9pbnQgd2lsbCBiZSB0dXJuZWQgaW50byBhbiBPU1IgZXhpdCBpZiBhbnkgb2JqZWN0
IHdpdGggdGhhdCBzdHJ1Y3R1cmUgKi9cCi0gICAgLyogZXZlciB0cmFuc2l0aW9ucyB0byBhIGRp
ZmZlcmVudCBzdHJ1Y3R1cmUuIEhlbmNlLCB0aGUgY2hpbGQgb2JqZWN0IG11c3QgaGF2ZSAqL1wK
LSAgICAvKiBwcmV2aW91c2x5IGhhZCBhIENoZWNrU3RydWN0dXJlIGV4ZWN1dGVkIG9uIGl0IG9y
IHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBvYmplY3QgKi9cCi0gICAgLyogY29uc3RhbnQgKFdlYWtK
U0NvbnN0YW50KSBhbmQgdGhlIG9iamVjdCB3YXMga25vd24gdG8gaGF2ZSB0aGF0IHN0cnVjdHVy
ZSBhdCAqL1wKLSAgICAvKiBjb21waWxlLXRpbWUuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGlzIG1l
YW5zIHRoYXQgbm8gc3RydWN0dXJlIGNoZWNrcyBoYXZlIHRvIGJlICovXAotICAgIC8qIHBlcmZv
cm1lZCBmb3IgdGhpcyBvYmplY3QgYnkgSklUdGVkIGNvZGUuIEluIHRoZSBmb3JtZXIgY2FzZSB0
aGlzIG1lYW5zIHRoYXQqL1wKLSAgICAvKiB0aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGRvZXMgbm90
IG5lZWQgdG8gYmUgcmVjaGVja2VkIGR1ZSB0byBzaWRlLWVmZmVjdGluZyAqL1wKLSAgICAvKiAo
Y2xvYmJlcmluZykgb3BlcmF0aW9ucy4gKi9cCi0gICAgbWFjcm8oU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRTdHJ1Y3R1cmUs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8oQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVz
dWx0U3RvcmFnZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShy
ZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw3IEBACiAjaW5jbHVkZSAiREZHVW5pZmljYXRp
b25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVh
bFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiCisjaW5jbHVkZSAiREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5oIgogI2luY2x1ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhh
c2UuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5o
IgpAQCAtMjMzLDYgKzIzNCw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxl
SW5UaHIKICAgICBwZXJmb3JtQmFja3dhcmRzUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3Jt
UHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CisgICAg
cGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nKGRmZyk7CiAgICAgcGVyZm9ybUludmFs
aWRhdGlvblBvaW50SW5qZWN0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVR5cGVDaGVja0hvaXN0aW5n
KGRmZyk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3Niw3ICs1NzYsNiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAg
ICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBjYXNl
IFB1dFN0cnVjdHVyZToKICAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjc1LDIyICsyNzUsMjYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFi
c3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAgICByZXR1cm4gbm9kZS0+YXJyYXlNb2RlKCkubW9k
ZUZvclB1dCgpLmFscmVhZHlDaGVja2VkKAogICAgICAgICAgICAgZ3JhcGgsIG5vZGUsIHN0YXRl
LmZvck5vZGUoZ3JhcGgudmFyQXJnQ2hpbGQobm9kZSwgMCkpKTsKIAotICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoCi0gICAg
ICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKTsKLSAgICAgICAgCiAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgIGNh
c2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlOgotICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZigKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZv
ck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoCiAgICAgICAgICAg
ICBTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0
cnVjdHVyZSkpOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgcmV0
dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJl
LmlzVmFsaWRPZmZzZXQoCi0gICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0ub2Zmc2V0KTsKKyAgICBjYXNlIFB1dEJ5T2Zm
c2V0OiB7CisgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZhbHVlID0gc3RhdGUuZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CisgICAgICAgIGlmICh2YWx1ZS5pc1Rv
cCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV0ub2Zmc2V0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
MTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5NywyOSArMzY5Nyw2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAg
ICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAg
IC8vIFRoZXJlIGlzIGEgZmFzY2luYXRpbmcgcXVlc3Rpb24gaGVyZSBvZiB3aGF0IHRvIGRvIGFi
b3V0IGFycmF5IHByb2ZpbGluZy4KLSAgICAgICAgLy8gV2UgKmNvdWxkKiB0cnkgdG8gdGVsbCB0
aGUgT1NSIGV4aXQgYWJvdXQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIGFjY2VzcyBpcy4KLSAgICAg
ICAgLy8gVGhlIERGRyB3aWxsIGhhdmUga2VwdCBpdCBhbGl2ZSwgdGhvdWdoIGl0IG1heSBub3Qg
YmUgaW4gYSByZWdpc3RlciwgYW5kCi0gICAgICAgIC8vIHdlIHNob3VsZG4ndCByZWFsbHkgbG9h
ZCBpdCBzaW5jZSB0aGF0IGNvdWxkIGJlIGEgd2FzdGUuIEZvciBub3cgdGhvdWdoLAotICAgICAg
ICAvLyB3ZSdsbCBqdXN0IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3aGVuIGEgd2F0Y2hwb2ludCBm
aXJlcyB0aGVuIHRoYXQncwotICAgICAgICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFkeS4KLSAgICAg
ICAgCi0gICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0dXJlKCkpOwot
ICAgICAgICAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzT0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhvcDEuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIFRydXN0ZWRJ
bW1QdHIobm9kZS0+c3RydWN0dXJlKCkpKTsKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwot
ICAgICAgICBpc09LLmxpbmsoJm1faml0KTsKLSNlbHNlCi0gICAgICAgIHNwZWN1bGF0ZUNlbGwo
bm9kZS0+Y2hpbGQxKCkpOwotI2VuZGlmCi0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OiB7CiAgICAgICAgIEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsK
ICAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJl
VHJhbnNpdGlvbihtX2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzY3LDMyICszNzY3
LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6IHsKLSAgICAgICAgLy8gVGhlcmUgaXMgYSBmYXNjaW5hdGluZyBxdWVzdGlvbiBoZXJl
IG9mIHdoYXQgdG8gZG8gYWJvdXQgYXJyYXkgcHJvZmlsaW5nLgotICAgICAgICAvLyBXZSAqY291
bGQqIHRyeSB0byB0ZWxsIHRoZSBPU1IgZXhpdCBhYm91dCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUg
YWNjZXNzIGlzLgotICAgICAgICAvLyBUaGUgREZHIHdpbGwgaGF2ZSBrZXB0IGl0IGFsaXZlLCB0
aG91Z2ggaXQgbWF5IG5vdCBiZSBpbiBhIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgLy8gd2Ugc2hv
dWxkbid0IHJlYWxseSBsb2FkIGl0IHNpbmNlIHRoYXQgY291bGQgYmUgYSB3YXN0ZS4gRm9yIG5v
dyB0aG91Z2gsCi0gICAgICAgIC8vIHdlJ2xsIGp1c3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdo
ZW4gYSB3YXRjaHBvaW50IGZpcmVzIHRoZW4gdGhhdCdzCi0gICAgICAgIC8vIHF1aXRlIGEgaGlu
dCBhbHJlYWR5LgotCi0gICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0
dXJlKCkpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc09LID0gbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKAotICAgICAgICAgICAgSklUQ29tcGls
ZXI6OkVxdWFsLCAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMS5ncHIoKSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCi0gICAgICAgICAgICBub2RlLT5zdHJ1Y3R1
cmUoKSk7Ci0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgaXNPSy5saW5rKCZt
X2ppdCk7Ci0jZWxzZQotICAgICAgICBzcGVjdWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsKLSNl
bmRpZgotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CiAgICAgICAg
IEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgbV9q
aXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbiht
X2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24g
MTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTE1LDcgKzMxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGVTdHJpbmdPYmplCiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1
cmUgPQogICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2lu
LnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7CiAgICAgCi0gICAgaWYgKCFtX3N0
YXRlLmZvck5vZGUoZWRnZSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1
Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpIHsKKyAgICBpZiAoIW1fc3RhdGUuZm9y
Tm9kZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmpl
Y3RTdHJ1Y3R1cmUpKSkgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAg
Tm90U3RyaW5nT2JqZWN0LCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoU3RydWN0dXJlUHRyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRl
ICJERkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCgpCit7CisgICAgbV9zZXQuZGVsZXRlU3Ry
dWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7
Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBo
JiBncmFwaCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykgeworICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGF0KGkpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCkuYXNzZXJ0SXNXYXRjaGVkKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgfQorfQorCit2b2lkIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmNsb2JiZXIoKQoreworICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRoaXMgYXBw
cm9hY2ggdG8gY2xvYmJlcmluZyBpcyB0aGF0IGFueXRpbWUgd2UgaW50cm9kdWNlCisgICAgLy8g
YSB3YXRjaGFibGUgc3RydWN0dXJlIGludG8gYW4gYWJzdHJhY3QgdmFsdWUsIHdlIHdhdGNocG9p
bnQgaXQuIFlvdSBjYW4gYXNzZXJ0CisgICAgLy8gdGhhdCB0aGlzIGhvbGRzIGJ5IGNhbGxpbmcg
YXNzZXJ0SXNXYXRjaGVkKCkuCisgICAgICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGlmIChtX3NldC5pc1RoaW4oKSkgeworICAgICAgICBpZiAo
IW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAobV9zZXQuc2luZ2xlU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVl
bkludmFsaWRhdGVkKCkpCisgICAgICAgICAgICBtYWtlVG9wV2hlblRoaW4oKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgU3RydWN0dXJlU2V0OjpPdXRPZkxpbmVMaXN0
KiBsaXN0ID0gbV9zZXQuc3RydWN0dXJlTGlzdCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGxp
c3QtPm1fbGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmIChsaXN0LT5saXN0KClbaV0tPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpIHsKKyAgICAgICAgICAgIG1h
a2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZy
b20sIFN0cnVjdHVyZSogdG8pCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoIW1fc2V0LmNvbnRhaW5zKGZyb20pKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKCFtX3NldC5hZGQodG8pKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7
Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKCFtX3NldC5hZGQoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGlmIChtX3NldC5zaXplKCkgPiBwb2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAgbWFr
ZVRvcCgpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWU6Om1lcmdlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgaWYgKGlz
VG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbWVyZ2VOb3RU
b3Aob3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIGlmIChpc1RvcCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKKyAgICAg
ICAgbWFrZVRvcCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIG1lcmdlTm90VG9wKG90aGVyLm1fc2V0KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptZXJnZU5vdFRvcChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQoreworICAgIGlm
ICghbV9zZXQubWVyZ2Uob3RoZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgIG1fc2V0ID0gb3RoZXI7CisgICAgZWxzZQorICAgICAgICBtX3NldC5maWx0ZXIo
b3RoZXIpOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZpbHRlcihvdGhlci5tX3NldCk7Cit9CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIENvbmZvcm1zVG9UeXBlIHsKK3B1YmxpYzoKKyAgICBDb25mb3Jt
c1RvVHlwZShTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpICYgbV90eXBlKTsKKyAgICB9Citwcml2YXRlOgorICAgIFNwZWN1bGF0ZWRUeXBlIG1f
dHlwZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIGlmICghKHR5
cGUgJiBTcGVjQ2VsbCkpIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENv
bmZvcm1zVG9UeXBlIGNvbmZvcm1zVG9UeXBlKHR5cGUpOworICAgIG1fc2V0LmdlbmVyaWNGaWx0
ZXIoY29uZm9ybXNUb1R5cGUpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNv
bnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQuY29udGFpbnMoc3Ry
dWN0dXJlKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKGNv
bnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhl
cik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZihjb25zdCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAob3RoZXIuaXNU
b3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGlzU3Vic2V0T2Yo
b3RoZXIubV9zZXQpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc1RvcCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQuaXNTdXBlcnNl
dE9mKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyhj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQub3ZlcmxhcHMob3RoZXIp
OworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om92ZXJsYXBzKGNvbnN0IFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIGlmIChvdGhlci5pc1RvcCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gb3ZlcmxhcHMob3RoZXIu
bV9zZXQpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yPT0oY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fc2V0
Lm1fcG9pbnRlciA9PSBvdGhlci5tX3NldC5tX3BvaW50ZXIpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIGlmIChpc1RvcCgpIHx8IG90aGVyLmlzVG9wKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQgPT0gb3RoZXIubV9zZXQ7Cit9CisKK3Zv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0
LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAg
ICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChpbkNvbnRl
eHQobV9zZXQsIGNvbnRleHQpKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDAp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywzMDAgKzM3LDEwOCBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgewogcHVi
bGljOgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQotICAgICAgICA6IG1fc3RydWN0dXJl
KDApCi0gICAgewotICAgIH0KLSAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkgeyB9
CiAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAg
ICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgIDogbV9zZXQoc3RydWN0dXJlKQog
ICAgIHsKICAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpCisgICAgICAgIDogbV9zZXQob3RoZXIpCiAgICAgewotICAgICAgICBzd2l0
Y2ggKHNldC5zaXplKCkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUg
PSB0b3BWYWx1ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAg
ICAgIG1fc2V0LmNsZWFyKCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgbWFrZVRvcCgpCi0gICAg
ewotICAgICAgICBtX3N0cnVjdHVyZSA9IHRvcFZhbHVlKCk7Ci0gICAgfQorICAgIHZvaWQgbWFr
ZVRvcCgpOwogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCi0g
ICAgewotICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICB2YWx1
ZS5tYWtlVG9wKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9CisjaWYgQVNTRVJUX0RJ
U0FCTEVECisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdCB7IH0KKyNlbHNl
CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKKyNlbmRpZgogICAgIAot
ICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KCFjb250YWlucyhzdHJ1Y3R1cmUpICYmICFpc1RvcCgpKTsKLSAgICAgICAgaWYgKG1fc3RydWN0
dXJlKQotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICB9CisgICAgdm9pZCBjbG9iYmVyKCk7CisgICAg
dm9pZCBvYnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8pOwog
ICAgIAotICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgewot
ICAgICAgICBpZiAoaXNUb3AoKSB8fCAhb3RoZXIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAob3RoZXIuc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgbWFr
ZVRvcCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlclswXTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVy
ZSA9PSBvdGhlclswXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbWFrZVRv
cCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBhZGRBbGwo
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgc3RhdGljIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUgdG9wKCkKICAgICB7Ci0gICAgICAgIGlmICghb3RoZXIubV9zdHJ1Y3R1
cmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkgewotICAg
ICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUg
PT0gb3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogICAgIAotICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAgYm9vbCBpc0NsZWFy
KCkgY29uc3QgeyByZXR1cm4gbV9zZXQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc1RvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2V0Lm1fcG9pbnRlciA9PSB0b3BWYWx1ZTsgfQorICAgIGJvb2wgaXNO
ZWl0aGVyQ2xlYXJOb3JUb3AoKSBjb25zdCB7IHJldHVybiAhaXNDbGVhcigpICYmICFpc1RvcCgp
OyB9CisgICAgYm9vbCBpc0Zpbml0ZSgpIGNvbnN0IHsgcmV0dXJuICFpc1RvcCgpOyB9CiAgICAg
Ci0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICByZXR1cm4gb3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUpOwotICAgIH0KKyAgICBib29sIGFk
ZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgYm9vbCBkb2VzTm90Q29udGFpbkFu
eU90aGVyVGhhbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fc3Ry
dWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBtX3N0cnVj
dHVyZSA9PSBzdHJ1Y3R1cmU7Ci0gICAgfQorICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcik7CisgICAgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcik7CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7Cisg
ICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOworICAg
IHZvaWQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpOwogICAgIAotICAgIGJvb2wgaXNTdXBl
cnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIW90aGVy
LnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAob3RoZXIuc2l6
ZSgpID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlID09IG90aGVyWzBdOwotICAgIH0KKyAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSog
c3RydWN0dXJlKSBjb25zdDsKICAgICAKLSAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAob3RoZXIu
aXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoaXNUb3AoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0g
ICAgICAgICAgICBpZiAob3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBib29sIGlz
U3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBpc1N1
YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAK
KyAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsK
ICAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhl
cikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlzKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
LSAgICB7Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIAotICAgICAgICBpZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgc3dpdGNoIChvdGhl
ci5zaXplKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0g
ICAgfQorICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7
CisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikg
Y29uc3Q7CiAgICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgbV9z
dHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKCEob3RoZXIg
JiBTcGVjQ2VsbCkpIHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChpc0NsZWFyT3JUb3AoKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUo
bV9zdHJ1Y3R1cmUpICYgb3RoZXIpKQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAg
IH0KLSAgICAKLSAgICBib29sIGlzQ2xlYXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
ICFtX3N0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RydWN0dXJlID09IHRvcFZhbHVlKCk7IH0KLSAgICAKLSAgICBib29sIGlzQ2xlYXJP
clRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlIDw9IHRvcFZhbHVlKCk7IH0KLSAgICBi
b29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xlYXJPclRvcCgp
OyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90
aGVyKSBjb25zdDsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoIWlzVG9wKCkpOwotICAgICAgICByZXR1cm4gISFtX3N0cnVjdHVyZTsKKyAgICAg
ICAgcmV0dXJuIG1fc2V0LnNpemUoKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBhdChz
aXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7Ci0gICAgICAg
IEFTU0VSVChtX3N0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwotICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5hdChpKTsKICAg
ICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIGF0KGkpOwotICAgIH0KKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9y
W10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgCi0gICAgU3RydWN0dXJl
KiBsYXN0KCkgY29uc3QKKyAgICAvLyBGSVhNRTogRWxpbWluYXRlIGFsbCB1c2VzIG9mIHRoaXMg
bWV0aG9kLiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55CisgICAgLy8gc3BlY2lhbC1jYXNpbmcgZm9y
IHRoZSBvbmUtc3RydWN0dXJlIGNhc2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgIFN0cnVjdHVyZSogb25seVN0cnVjdHVyZSgpIGNv
bnN0CiAgICAgeworICAgICAgICBpZiAoaXNUb3AoKSB8fCBzaXplKCkgIT0gMSkKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gYXQoMCk7CiAgICAgfQogICAgIAot
ICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAotICAg
IHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY0NlbGw7Ci0g
ICAgICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY05vbmU7Ci0gICAg
ICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpOwotICAgIH0K
LSAgICAKLSAgICBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQotICAg
IHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIG1fc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCk7Ci0gICAgfQorICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBoYXNTaW5nbGV0b24o
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTmVpdGhlckNsZWFyTm9yVG9wKCk7Ci0g
ICAgfQotICAgIAotICAgIFN0cnVjdHVyZSogc2luZ2xldG9uKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChpc05laXRoZXJDbGVhck5vclRvcCgpKTsKLSAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgfQorcHJpdmF0ZToKKyAgICBzdGF0aWMg
Y29uc3QgdWludHB0cl90IHRvcFZhbHVlID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZFZhbHVlOwor
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwb2x5bW9ycGhpc21MaW1pdCA9IDEwOwogICAgIAot
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29u
dGV4dCkgY29uc3QKKyAgICB2b2lkIG1ha2VUb3BXaGVuVGhpbigpCiAgICAgewotICAgICAgICBp
ZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCJbIik7Ci0g
ICAgICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG91dC5wcmludChpbkNvbnRleHQo
Km1fc3RydWN0dXJlLCBjb250ZXh0KSk7Ci0gICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAg
ICBBU1NFUlQobV9zZXQuaXNUaGluKCkpOworICAgICAgICBtX3NldC5tX3BvaW50ZXIgPSB0b3BW
YWx1ZTsKICAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgc3RhdGljIFN0cnVjdHVyZSogdG9wVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0
PFN0cnVjdHVyZSo+KDEpOyB9CiAgICAgCi0gICAgLy8gTkIuIFRoaXMgbXVzdCBoYXZlIGEgdHJp
dmlhbCBkZXN0cnVjdG9yLgorICAgIGJvb2wgbWVyZ2VOb3RUb3AoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcik7CiAgICAgCi0gICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0
dXJlIGF0IGEgdGltZS4KLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworICAgIFN0cnVjdHVy
ZVNldCBtX3NldDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDggKzIx
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9
IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAg
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDogeworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAg
ICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjg1LDEzICsyODQsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJO
b2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNl
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1
Yk5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9CkBAIC0zMzEsNyArMzIzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAg
IGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAg
ICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgpAQCAtMzg2LDEzICszNzcsNiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrQWNjb3Vu
dGluZ0ZvckFycmF5TW9kZSh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDogewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEo
KSAhPSBzb3VyY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
dGljZVN0cnVjdHVyZUNoZWNrQWNjb3VudGluZ0ZvckFycmF5TW9kZSh2YXJpYWJsZSwgc3ViTm9k
ZS0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGVj
a0FycmF5OiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxk
MSgpICE9IHNvdXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZH
R3JhcGguaCIKKyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBXYXRjaGFibGVTdHJ1
Y3R1cmVXYXRjaGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShn
cmFwaCwgIndhdGNoYWJsZSBzdHJ1Y3R1cmUgd2F0Y2hpbmciKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAg
ICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2st
PmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5v
ZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2go
bV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlv
bjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+ZnVuY3Rpb24oKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2Rl
LT5leGVjdXRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2Jq
ZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICAgICAg
ICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0
Y2gobm9kZS0+c3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAg
ICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgY2FzZSBB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAg
ICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAg
ICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcg
aW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4g
RG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxM
aW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55
IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCisg
ICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0Ogor
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zm
c2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5V2F0Y2godmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgICAgICAgICAgY2FzZSBOZXdB
cnJheUJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGlu
Z1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1
cmUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIHRyeVdhdGNoKEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUu
aXNDZWxsKCkpCisgICAgICAgICAgICB0cnlXYXRjaCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdHJ5V2F0Y2goSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYg
KGNlbGwpCisgICAgICAgICAgICB0cnlXYXRjaChjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdHJ5V2F0Y2goY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAg
dHJ5V2F0Y2goc2V0W2ldKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9p
bnRzKCkuYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Cisg
ICAgfQorfTsKKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgm
IGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgV2F0Y2hh
YmxlIFN0cnVjdHVyZSBXYXRjaGluZyIpOworICAgIHJldHVybiBydW5QaGFzZTxXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKyNkZWZpbmUg
REZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKwor
Ly8gU2V0IHdhdGNocG9pbnRzIG9uIGFueSBzdHJ1Y3R1cmVzIHRoYXQgd2Uga25vdyBvZiB0aGF0
IGFyZSBjdXJyZW50bHkgd2F0Y2hhYmxlLiBJdCdzCisvLyBzb21ld2hhdCBjb3VudGVyaW50dWl0
aXZlLCBidXQgdGhpcyBlbmRzIHVwIGJlaW5nIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZlY3Rp
dmUgd2F5CisvLyBvZiByZWR1Y2luZyBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRlcm1pbmFsIHN0cnVj
dHVyZXM6CisvLworLy8gLSBXZSB1c2VkIHRvIG9ubHkgc2V0IHdhdGNocG9pbnRzIG9uIHdhdGNo
YWJsZSBzdHJ1Y3R1cmVzIGlmIHdlIGtuZXcgdGhhdCB0aGlzIHdvdWxkCisvLyAgIHJlbW92ZSBh
IHN0cnVjdHVyZSBjaGVjay4gRXhwZXJpbWVudHMgc2hvdyB0aGF0IHN3aXRjaGluZyBmcm9tIHRo
YXQsIHRvIGJsaW5kbHkKKy8vICAgc2V0dGluZyB3YXRjaHBvaW50cyBvbiBhbGwgd2F0Y2hhYmxl
IHN0cnVjdHVyZXMsIHdhcyBub3QgYSByZWdyZXNzaW9uLgorLy8KKy8vIC0gSXQgbWFrZXMgYWJz
dHJhY3QgaW50ZXJwcmV0YXRpb24gYSB3aG9sZSBsb3QgZWFzaWVyLiBXZSBqdXN0IGFzc3VtZSB0
aGF0IHdhdGNoYWJsZQorLy8gICBzdHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlIHdpdGhvdXQg
aGF2aW5nIHRvIGRvIGFueSBvdGhlciBsb2dpYy4KKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
YXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMTMgKzExOSw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBhZGRMYXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0
aW9uKCkpLT5hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50OgotICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAg
ICAgICAgICAgICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICBt
X25vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50
Q2FjaGVXYXRjaHBvaW50IDogQmFkQ2FjaGVXYXRjaHBvaW50LAotICAgICAgICAgICAgICAgIG1f
bm9kZS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6
CiAgICAgICAgICAgICBhZGRMYXppbHkobV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSk7
CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2Fz
ZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNoaWZ0OgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6Ci0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEFy
cmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFu
dG9tUHV0U3RydWN0dXJlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTks
OSArMzk5LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAg
ICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBjb21w
aWxlU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tGdW5j
dGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjA5LDEyICsxNjA2LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgY29tcGlsZVN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkK
LSAgICB7Ci0gICAgICAgIGFkZFdlYWtSZWZlcmVuY2UobV9ub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgIHNwZWN1bGF0ZUNlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgfQotICAgIAogICAg
IHZvaWQgY29tcGlsZUNoZWNrRnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgTFZhbHVlIGNlbGwg
PSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwpAQCAtNTQ2Myw3ICs1NDU0LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICAg
ICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJp
bmdPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3N0YXRlLmZvck5v
ZGUoZWRnZSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQo
c3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRn
ZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0
dXJlKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUo
CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNjk0NjcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNC0wNS0yOSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVj
dHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyODA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0
cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2lt
cGxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQt
Ymltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1p
ZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hl
Y2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1l
bGltaW5hdGlvbi1zaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
c2ltcGxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQt
YnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qczogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1w
bGUuanM6IEFkZGVkLgorCiAyMDE0LTA1LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CiAKICAgICAgICAgW2Z0bG9wdF0gREZHOjpjbG9iYmVyaXplIHNob3VsZCBiZSBibGluZCB0
byB0aGUgZWZmZWN0cyBvZiBHQwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnkt
aWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBA
CitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRp
b24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRo
cm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0
aW9uLXNpbXBsZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRN
TCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5
LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RU
RCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9n
ZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Z2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQt
YnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQt
cXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFk
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbi1zaW1wbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFk
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi1zaW1wbGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBA
CisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxfTsKKyAgICB2YXIgcCA9IHthOjIsIGw6
MTN9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
MDsgKytpKSB7CisgICAgICAgIHJlc3VsdCBePSBvLmE7CisgICAgICAgIHZhciB0bXAgPSBvOwor
ICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAh
PSAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgp
OwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJp
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIG8gPSB7YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3LCBo
OjgsIGk6OSwgajoxMCwgazoxMX07CisgICAgdmFyIHAgPSB7YToyLCBiOjMsIGM6NCwgZDo1LCBl
OjYsIGY6NywgZzo4LCBoOjksIGk6MTAsIGo6MTEsIGs6MTIsIGw6MTN9OworICAgIHZhciByZXN1
bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAg
IHJlc3VsdCArPSBvLmEgXiBvLmIgXiBvLmMgXiBvLmQgXiBvLmUgXiBvLmYgXiBvLmcgXiBvLmgg
XiBvLmkgXiBvLmogXiBvLms7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsK
KyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSA2NTAwMDAwKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVj
dHVyZS1lbGltaW5hdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5
LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgbyA9IHthOjEsIGI6MiwgYzozLCBkOjQs
IGU6NSwgZjo2LCBnOjcsIGg6OCwgaTo5LCBqOjEwLCBrOjExfTsKKyAgICB2YXIgcmVzdWx0ID0g
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkKKyAgICAgICAgcmVzdWx0
ICs9IG8uYSBeIG8uYiB8IG8uYyBeIG8uZCAmIG8uZSBeIG8uZiB8IG8uZyBeIG8uaCAmIG8uaSBe
IG8uaiB8IG8uazsKKyAgICBpZiAocmVzdWx0ICE9IDE1MDAwMDAwKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVj
dHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACiso
ZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxfTsKKyAgICB2YXIgcCA9IHthOjIsIGw6MTN9
OworICAgIHZhciBxID0ge2E6MywgYjozfTsKKyAgICB2YXIgciA9IHthOjQsIGM6NX07CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsK
KyAgICAgICAgcmVzdWx0IF49IG8uYTsKKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8g
PSBwOworICAgICAgICBwID0gcTsKKyAgICAgICAgcSA9IHI7CisgICAgICAgIHIgPSB0bXA7Cisg
ICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232281</attachid>
            <date>2014-05-29 23:06:19 -0700</date>
            <delta_ts>2014-05-30 14:35:35 -0700</delta_ts>
            <desc>less then a hundred failures</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>132817</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5MyBA
QAorMjAxNC0wNS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGludGVycHJldGVy
KSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVyZToKKyAgICAg
ICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRyYWNrIGFuIGFy
Yml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAgICAgICBzaXpl
IGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhhdmUgYW55IG9m
IHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdoaWNoIC0gYnV0
IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3QgaW4gdGhlIHNl
dC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBzdGlsbCBiZSBU
T1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisgICAgICAgICAg
YXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBleHBsb3Npb24g
b24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91Z2ggdGhhdCBp
dCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBzaW5jZSB3ZSBo
YXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAg
c3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0byBrbm93IGFi
b3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBvaW50cyBvbiBh
bGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQKKyAgICAgICAg
ICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoYXQgdGhlIHdh
dGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGVyZWZvcmUsIHdh
dGNoYWJsZSBzdHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlOiBhIHN0cnVjdHVyZSBzZXQgd2l0
aCBvbmx5IHdhdGNoYWJsZQorICAgICAgICAgIHN0cnVjdHVyZXMgd2lsbCB0aHVzIGJlIGltcGVy
dmlvdXMgdG8gY2xvYmJlclN0cnVjdHVyZXMoKS4gVGhpcyBtZWFucyB3ZSBjYW4gZ2V0IHJpZAor
ICAgICAgICAgIG9mIHRoZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCBub2RlIGFuZCB0
aGUgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBmaWVsZC4gVGhpcworICAgICAgICAgIHdhcyBi
YXNpY2FsbHkgbmVjZXNzYXJ5IHNpbmNlIHRoZSBwcmV2aW91cyB0cmFja2luZyBvZiB3YXRjaGFi
aWxpdHkgZGlkbid0IGdlbmVyYWxpemUKKyAgICAgICAgICBncmFjZWZ1bGx5IHRvIHN0cnVjdHVy
ZSBzZXRzIHRoYXQgaGF2ZSBtb3JlIHRoYW4gb25lIHN0cnVjdHVyZS4KKyAgICAgICAgCisgICAg
ICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJl
U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpjbGVhcik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVNldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpm
aWx0ZXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9tKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpT
dHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmlzRW1wdHkpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmdlbmVyaWNGaWx0ZXIpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpDb250YWluc091dE9mTGluZSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2Fy
eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2V0RW1wdHkpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmVTZXQ6OnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
Ym9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXApOgorICAg
ICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpub3JtYWxpemVDbGFyaXR5KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVy
U3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0
cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpUcmFuc2l0aW9u
T2JzZXJ2ZXI6OlRyYW5zaXRpb25PYnNlcnZlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlOjppc0hlYXBUb3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aGFzQ2xvYmJlcmFibGVTdGF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RWYWx1ZTo6YmVzdFByb3ZlblN0cnVjdHVyZSk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0FsbG9jYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQpOgorICAgICAgICAqIGRmZy9ERkdD
RkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZvcm1CbG9ja0NG
QSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OnN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAgICAgICogZGZn
L0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAg
ICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpT
Qzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNr
KToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAgICAgIChKU0M6
OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjphc3NlcnRJc1dhdGNoZWQpOgorICAg
ICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXNzZXJ0SXNXYXRjaGVkKToKKyAg
ICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpkb2VzR0MpOgor
ICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1
cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6On5HcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZp
c2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0
VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZGZn
L0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlND
OjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4
ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBk
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZn
L0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc05l
aXRoZXJDbGVhck5vclRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6aXNGaW5pdGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmF0
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcltd
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvbmx5U3RydWN0
dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptYWtlVG9w
V2hlblRoaW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1h
a2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vw
ZXJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjppc0NsZWFyT3JUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVmFsaWRP
ZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6Omhhc1NpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjp0b3BWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5k
YW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1XYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6CisgICAgICAgICogZGZnL0RGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2U6OmhhbmRsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdP
YmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisKIDIwMTQt
MDUtMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0
XSBERkc6OmNsb2JiZXJpemUgc2hvdWxkIGJlIGJsaW5kIHRvIHRoZSBlZmZlY3RzIG9mIEdDCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY5MjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsNyBAQAogCQkwRjgzMzVCODE2MzlDMUVB
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFy
cmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGly
ZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4ODVFMTExODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVV
c2VEZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg5M0JE
QTE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi87IH07
CiAJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkzMTcyRTA0OUUwMDdEQkRB
NSAvKiBGVExMaW5rLmNwcCAqLzsgfTsKIAkJMEY4RjJCOTYxNzJFMDRBMzAwN0RCREE1IC8qIEZU
TExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8q
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElk
ZW50aWZpZXJzLmNwcCAqLzsgfTsKQEAgLTQ5NSw2ICs0OTYsOCBAQAogCQkwRkNFRkFERjE4MDcz
OEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0
aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFE
RTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0YgLyog
U3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQyRDRG
RTE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyRDRG
QzE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5j
cHAgKi87IH07CisJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1
Y3R1cmVXYXRjaGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDEx
NUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYw
MEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsg
fTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQ0YxNTRGQjRF
QjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovOyB9OwpAQCAtMjE2MCw2ICsyMTYzLDcg
QEAKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMy
OUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0JyYW5jaERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEg
LyogQnl0ZWNvZGVVc2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0
ZWNvZGVVc2VEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4OTNCREExOTM2
RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7
IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyog
RlRMTGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUg
LyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2ly
ZWRJZGVudGlmaWVycy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMTMsNiArMjMxNyw4IEBACiAJCTBGQ0VG
QUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb2NhdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0
NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
RlRMTG9jYXRpb24uaDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5l
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAv
KiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwOyBwYXRoID0gZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyog
REZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmg7IHBhdGgg
PSBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBh
dGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZE
M0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jh
c2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jh
c2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4MDYsNiArNDgxMiw3IEBACiAJCQkJMkFDQ0Yz
REQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovLAog
CQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNl
LmNwcCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1
Y3Rpb25QaGFzZS5oICovLAorCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0Mg
LyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGMkZDQ0Y3MThBNjAwNzAw
MDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCAqLywKIAkJCQkwRjJGQ0NGODE4QTYwMDcwMDAx
QTI3RjggLyogREZHVGhyZWFkRGF0YS5oICovLApAQCAtNDgzOCw2ICs0ODQ1LDggQEAKIAkJCQkw
RjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oICovLAog
CQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkQyRDRGQzE5MkZFRTU4MDBB
MTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8sCisJCQkJ
MEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5n
UGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2lu
dENvbGxlY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8q
IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEy
MDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovLApAQCAtNTc3Niw2ICs1Nzg1LDcgQEAKIAkJ
CQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTIzMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExD
b21tb25WYWx1ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhC
RiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQUM5MjJCQzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1
Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTYsNiArNjk2Niw3IEBACiAJCQkJMEZG
MEYxOTkxNkI3MjlGNjAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3NjdCNUI1MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3Jl
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5
MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRDJENEZFMTky
RkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3Mzc4MTBEMTc5OUVBMkUwMDgxNzUzMyAvKiBERkdOYXR1cmFs
TG9vcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8q
IERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUyQzAwQjlBMkQ5
IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxNzQsNiArNzE4NSw3IEBA
CiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFBMTdCRURCRDMwMDdDQjYzQSAvKiBKU1Byb21pc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMjIxN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJv
bWlzZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODkzQkRCMTkzNkUyM0Mw
MDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVu
Y3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYzQSAv
KiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgU3RydWN0dXJlU2V0JiBTdHJ1Y3R1cmVT
ZXQ6Om9wZXJhdG9yPShjbwogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKIHsKICAgICBkZWxl
dGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBzZXQoMCwgdHJ1ZSk7CisgICAgc2V0
RW1wdHkoKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6OnJlbW92ZShTdHJ1Y3R1cmUq
IHN0cgogewogICAgIGlmIChpc1RoaW4oKSkgewogICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJl
KCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgICAgICAg
ICBzZXRFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtODgsNyArODgsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6cmVt
b3ZlKFN0cnVjdHVyZSogc3RyCiAgICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3Qo
KVstLWxpc3QtPm1fbGVuZ3RoXTsKICAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewogICAg
ICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldCgw
LCB0cnVlKTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQpAQCAtMTQ0LDIzICsxNDQsOCBAQCB2b2lkIFN0cnVjdHVyZVNldDo6
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAg
aWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5jb250YWluc091dE9mTGluZShzaW5nbGVT
dHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVj
dHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7
ICsraSkgewotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgp
W2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9
IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5t
X2xlbmd0aCkKLSAgICAgICAgY2xlYXIoKTsKKyAgICBDb250YWluc091dE9mTGluZSBjb250YWlu
c091dE9mTGluZShvdGhlcik7CisgICAgZ2VuZXJpY0ZpbHRlcihjb250YWluc091dE9mTGluZSk7
CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpCkBAIC0zMjMsNyArMzA4LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6OmNvbnRhaW5zT3V0T2ZM
aW5lKFN0cgogCiB2b2lkIFN0cnVjdHVyZVNldDo6Y29weUZyb20oY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKIHsKLSAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKKyAgICBpZiAob3RoZXIuaXNU
aGluKCkgfHwgb3RoZXIubV9wb2ludGVyID09IHJlc2VydmVkVmFsdWUpIHsKICAgICAgICAgbV9w
b2ludGVyID0gb3RoZXIubV9wb2ludGVyOwogICAgICAgICByZXR1cm47CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNp
b24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK25hbWVzcGFjZSBERkcgeworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKK30KKwog
Y2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTZXQoKQogICAgIHsK
LSAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICBzZXRFbXB0eSgpOwogICAgIH0KICAgICAK
ICAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02Nyw3ICs3MSwxMCBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7Ci0gICAgICAg
IHJldHVybiBpc1RoaW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGJvb2wgcmVz
dWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOworICAgICAgICBpZiAocmVzdWx0
KQorICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhZGQoU3RydWN0dXJlKik7
CkBAIC03OCw2ICs4NSwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0
dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBnZW5lcmljRmlsdGVyKEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAg
ICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgaWYgKGZ1bmN0b3Ioc2luZ2xlU3RydWN0dXJlKCkpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVM
aXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5saXN0KClbaV0pKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+bGlzdCgpW2ktLV0gPSBsaXN0
LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaXN0
LT5tX2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAogICAgIGJvb2wg
aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmKSBjb25zdDsKICAgICBib29sIGlzU3VwZXJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAogICAgIHsKQEAgLTEyNCwxNSAr
MTUzLDMyIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRoaW5GbGFnID0gMTsKLSAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7Ci0gICAgc3RhdGljIGNvbnN0
IHVpbnRwdHJfdCBmbGFncyA9IDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9
IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVlID0gNDsKIAogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0gNDsKICAgICAKICAg
ICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNvbnRhaW5zT3V0T2ZM
aW5lKFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIGNsYXNzIENvbnRhaW5zT3V0T2ZMaW5l
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVy
ZVNldCYgc2V0KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnNPdXRPZkxpbmUo
c3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgbV9zZXQ7CisgICAgfTsKKwogICAgIHZvaWQgY29weUZyb20oY29uc3QgU3RydWN0
dXJlU2V0Jik7CiAgICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7CkBAIC0xNTQsNyArMjAw
LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vz
c2FyeSgpCiAgICAgewotICAgICAgICBpZiAoIWlzVGhpbigpKQorICAgICAgICBpZiAoIWlzVGhp
bigpICYmIG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQogICAgICAgICAgICAgT3V0T2ZMaW5l
TGlzdDo6ZGVzdHJveShzdHJ1Y3R1cmVMaXN0KCkpOwogICAgIH0KICAgICAKQEAgLTE4NSw5ICsy
MzEsMTMgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHNldChiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihzdHJ1Y3R1cmVzKSwgZmFsc2UpOwogICAgIH0KKyAgICB2b2lkIHNldEVtcHR5KCkKKyAg
ICB7CisgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICB9CiAgICAgdm9pZCBzZXQodWludHB0cl90
IHBvaW50ZXIsIGJvb2wgc2luZ2xlU3RydWN0dXJlKQogICAgIHsKLSAgICAgICAgbV9wb2ludGVy
ID0gcG9pbnRlciB8IChzaW5nbGVTdHJ1Y3R1cmUgPyB0aGluRmxhZyA6IDApIHwgKG1fcG9pbnRl
ciAmIHJlc2VydmVkRmxhZyk7CisgICAgICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xl
U3RydWN0dXJlID8gdGhpbkZsYWcgOiAwKTsKICAgICB9CiAKICAgICB1aW50cHRyX3QgbV9wb2lu
dGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVyLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiAr
MTE0LDcgQEAgcHVibGljOgogICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJ
bkJsb2NrKTsKICAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwg
Tm9kZSopOwogICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KQEAgLTE0OCw3ICsxNDksMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGNs
b2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2luJiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAg
ICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3QgQ29kZU9yaWdpbiYpOworICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JBbGxWYWx1ZXModW5zaWdu
ZWQgaW5kZXhJbkJsb2NrLCBGdW5jdG9yJik7CisgICAgCiAgICAgdm9pZCBjbG9iYmVyU3RydWN0
dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2spOworICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24o
dW5zaWduZWQgaW5kZXhJbkJsb2NrLCBTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8pOwog
ICAgIAogICAgIGVudW0gQm9vbGVhblJlc3VsdCB7CiAgICAgICAgIFVua25vd25Cb29sZWFuUmVz
dWx0LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MiwxMSArNjIsMTcgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OgogICAgIH0KIAogICAgIC8vIE5leHQgY2hlY2sgaWYgd2UgY2FuIGZvbGQg
YmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbiBvYmplY3Qgb3Igc3RyaW5nIGFu
ZCBkb2VzIG5vdCBlcXVhbCB1bmRlZmluZWQuCi0gICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZh
bHVlLm1fdHlwZSkKLSAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpKQotICAgICAgICAgICAgJiYgc3RydWN0dXJlLT50eXBlSW5mbygp
LnR5cGUoKSAhPSBTdHJpbmdUeXBlKQorICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5t
X3R5cGUpICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKSB7CisgICAgICAgIGJvb2wgYWxs
VHJ1ZSA9IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJl
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1
ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpKQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkg
PT0gU3RyaW5nVHlwZSkgeworICAgICAgICAgICAgICAgIGFsbFRydWUgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAo
YWxsVHJ1ZSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKICAgICB9CiAgICAg
CkBAIC0xMDUsOSArMTExLDE4IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojp2ZXJpZnlFZGdlKE5vZGUqLCBF
ZGdlIGVkZ2UpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojp2
ZXJpZnlFZGdlKE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCgh
KGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7
CisgICAgaWYgKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVz
ZUtpbmQoKSkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgc3RhcnRDcmFzaGluZygpOwor
ICAgIGRhdGFMb2coIkVkZ2UgdmVyaWZpY2F0aW9uIGVycm9yOiAiLCBub2RlLCAiLT4iLCBlZGdl
LCAiIHdhcyBleHBlY3RlZCB0byBoYXZlIHR5cGUgIiwgU3BlY3VsYXRpb25EdW1wKHR5cGVGaWx0
ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSwgIiBidXQgaGFzIHR5cGUgIiwgU3BlY3VsYXRpb25EdW1w
KGZvck5vZGUoZWRnZSkubV90eXBlKSwgIlxuIik7CisgICAgZGF0YUxvZygiICAgIEZ1bGwgdmFs
dWU6ICIsIGZvck5vZGUoZWRnZSksICJcbiIpOworICAgIGRhdGFMb2coIlxuIik7CisgICAgZGF0
YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgbV9ncmFwaC5kdW1wKCk7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5h
bWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0xNDU2LDcgKzE0NzEsMTIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0
aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5n
IEdldEJ5SWRTdGF0dXMgdGhlIGFiaWxpdHkKKyAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhp
bmdzIGJhc2VkIG9uIGEgU3RydWN0dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQ
YXJzZXIncworICAgICAgICAgICAgLy8gYWJpbGl0eSB0byBnZW5lcmF0ZSBjb2RlIGJhc2VkIG9u
IGEgR2V0QnlJZFN0YXR1cyBvdXQgb2YgQnl0ZUNvZGVQYXJzZXIgc28gdGhhdAorICAgICAgICAg
ICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgICAg
IGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3Ry
dWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMg
c3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX3ZtLCBzdHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRl
bnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCldKTsKQEAgLTE0NjYsOSArMTQ4Niwx
NCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpOwog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIXN0YXR1c1swXS5jaGFpbigpKTsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNW
YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVl
KCkuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkp
OwotICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAg
ICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0YXR1c1swXS5zdHJ1Y3R1
cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTUwMiw4ICsxNTI3LDEyIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQVNTRVJUKCEo
dmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZl
IGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCiAgICAgICAgIFN0cnVjdHVyZVNldCYgc2V0ID0gbm9k
ZS0+c3RydWN0dXJlU2V0KCk7Ci0KLSAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICAKKyAgICAgICAgLy8gSXQncyBpbnRl
cmVzdGluZyB0aGF0IHdlIGNvdWxkIGhhdmUgcHJvdmVuIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBs
YXJnZXIgc3RydWN0dXJlIHNldAorICAgICAgICAvLyB0aGF0IGluY2x1ZGVzIHRoZSBzZXQgd2Un
cmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNvdWxkIG1ha2UgdGhlIHN0cnVjdHVyZSBjaGVj
aworICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4gV2UgY3VycmVudGx5IGRvbid0LgorICAgICAg
ICAKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewogICAg
ICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0xNTExLDMzICsxNTQwLDE3IEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsK
ICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKIAotICAgICAgICAvLyBJ
ZiB0aGlzIHN0cnVjdHVyZSBjaGVjayBpcyBhdHRlbXB0aW5nIHRvIHByb3ZlIGtub3dsZWRnZSBh
bHJlYWR5IGhlbGQgaW4KLSAgICAgICAgLy8gdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHNl
dCB0aGVuIHRoZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlIHNob3VsZAotICAgICAgICAvLyB0dXJu
IHRoaXMgaW50byBhIHdhdGNocG9pbnQgaW5zdGVhZC4KLSAgICAgICAgaWYgKHZhbHVlLm1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICAmJiB2YWx1
ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAg
ICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgZmlsdGVyKHZh
bHVlLCB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KICAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBmaWx0ZXIodmFsdWUsIG5vZGUtPnN0cnVjdHVy
ZSgpKTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKLSAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgICAgICAg
ICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJl
OgotICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmlzQ2xlYXIoKSkgewotICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJl
ckxpbWl0KTsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVy
ZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9uKAorICAgICAgICAg
ICAgICAgIGNsb2JiZXJMaW1pdCwKKyAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLAorICAgICAgICAgICAgICAgIG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKICAgICAgICAgICAgIGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1
cmVzKHRydWUpOwogICAgICAgICB9CkBAIC0xNjE2LDEzICsxNjI5LDE3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAgY2FzZSBBcnJheWlmeVRv
U3RydWN0dXJlOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUo
KTsKLSAgICAgICAgaWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihzZXQpCi0gICAgICAgICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1
YnNldE9mKHNldCkpCisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0
cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmUoKSkpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRG
b3VuZENvbnN0YW50cyh0cnVlKTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHJlYWxseSBiZSBlbmdpbmVlcmVkIHRvIGFsbG93
IHVzIHRvIG9ic2VydmUgd2hlbiB0aGUgdmFsdWUgYmVjb21lcworICAgICAgICAvLyBpbnZhbGlk
IGJlY2F1c2UgdGhlIHRyYW5zaXRpb24gaXMgaW1wb3NzaWJsZSBnaXZlbiB0aGUgY3VycmVudCB3
YXRjaHBvaW50aW5nLiBXZQorICAgICAgICAvLyBjYW5ub3QgZG8gdGhpcyBiZWNhdXNlIHdlIGlu
dmFsaWRhdGlvbiBwb2ludCB3aWxsIGJlIGZhciBhd2F5IGZyb20gaGVyZSAtIHNvIGV2ZW4gaWYK
KyAgICAgICAgLy8gdGhlIHdhdGNocG9pbnQgZmlyZXMsIHdlIHdvbid0IGtub3cgdGhpcyB5ZXQu
IEhlcmUgd2Ugd291bGQgbG92ZSB0byBiZSBhYmxlIHRvIGhhdmUKKyAgICAgICAgLy8gdGhlIGlu
dmFsaWRhdGlvbiBwb2ludCBpbnNpZGUgdGhlIG5vZGUsIGJlZm9yZSB0aGUgbm9kZSByZXR1cm5z
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMz
Mzk4CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZp
bHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgdmFsdWUuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVj
dHVyZSgpKTsKICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtMTY1MSw3ICsxNjY4LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYg
flNwZWNDZWxsKSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJl
ZCB0aGlzLgogCi0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmJlc3RQ
cm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBqdXN0IGZpbHRlciBk
b3duIHRoZSBjYXNlcyBpbiBNdWx0aUdldEJ5T2Zmc2V0LiBJZiB0aGF0IHJlc3VsdHMgaW4gYWxs
CisgICAgICAgIC8vIGNhc2VzIGhhdmluZyB0aGUgc2FtZSBvZmZzZXQgdGhlbiB3ZSBzaG91bGQg
c3RyZW5ndGggcmVkdWNlIGl0IHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKworICAgICAgICAvLyBHZXRC
eU9mZnNldC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0
cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNl
OwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERh
dGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBjb25zdCBHZXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07CkBAIC0xNjg4LDcgKzE3MDksMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwp
KTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAK
LSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVj
dHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNh
c2VzIGluIE11bHRpUHV0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKKyAgICAg
ICAgLy8gb25lIGNhc2UsIG9yIG5vdGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2
ZSB0aGUgc2FtZSBvZmZzZXQsIHRoZW4gd2Ugc2hvdWxkCisgICAgICAgIC8vIGp1c3Qgc3RyZW5n
dGggcmVkdWNlIGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVj
dHVyZSwKKyAgICAgICAgLy8gW1JlXUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1
cmUsIGFuZCBQdXRCeU9mZnNldC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIGJvb2wg
ZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAg
ICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07CkBAIC0xNzIxLDEyICsxNzQ3LDEyIEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAg
ICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9m
ZnNldERhdGEoKS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9
PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKKyAg
ICAgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5zdHJ1
Y3R1cmUoKSkpCiAgICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5zdHJ1Y3R1
cmUoKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
OwotICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5z
KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKQorICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0
dXJlLmNvbnRhaW5zKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKQogICAgICAgICAgICAgICAgIG5l
d1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xNzY3LDcgKzE3OTMsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAg
ICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7
CisgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFj
ZWQgYnkgZ2l2aW5nIFB1dEJ5SWRTdGF0dXMgdGhlIGFiaWxpdHkKKyAgICAgICAgLy8gdG8gY29t
cHV0ZSB0aGluZ3MgYmFzZWQgb24gYSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBC
eXRlQ29kZVBhcnNlcidzCisgICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNl
ZCBvbiBhIFB1dEJ5SWRTdGF0dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAg
ICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5v
bmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sCiAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFu
dGljKSwKQEAgLTE3ODEsNyArMTgxMiwxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVy
ZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6
VHJhbnNpdGlvbikgeworICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVy
ZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC53YXRjaHBvaW50cygpLmFkZExhemlseShzdGF0dXNbMF0ubmV3U3RydWN0dXJlKCktPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhjbG9iYmVyTGltaXQpOwogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5zZXQobV9ncmFwaCwgc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKQEAgLTE5NTcsMzIg
KzE5OTEsNTkgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGNs
b2JiZXJMaW1pdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMoCisgICAgdW5zaWduZWQg
Y2xvYmJlckxpbWl0LCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGlmICghbV9zdGF0ZS5oYXZl
U3RydWN0dXJlcygpKQotICAgICAgICByZXR1cm47CiAgICAgaWYgKGNsb2JiZXJMaW1pdCA+PSBt
X3N0YXRlLmJsb2NrKCktPnNpemUoKSkKICAgICAgICAgY2xvYmJlckxpbWl0ID0gbV9zdGF0ZS5i
bG9jaygpLT5zaXplKCk7CiAgICAgZWxzZQogICAgICAgICBjbG9iYmVyTGltaXQrKzsKICAgICBB
U1NFUlQoY2xvYmJlckxpbWl0IDw9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBpLS07KQotICAgICAgICBmb3JOb2RlKG1fc3RhdGUu
YmxvY2soKS0+YXQoaSkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0b3IoZm9y
Tm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKSk7CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFNTQSkgewogICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc3RhdGUu
YmxvY2soKS0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
OjppdGVyYXRvciBlbmQgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsK
ICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAgICAgICAgICBmb3JOb2Rl
KCppdGVyKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICAgICAgZnVuY3Rvcihmb3JOb2Rl
KCppdGVyKSk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygp
Lm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCi0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCku
YXJndW1lbnQoaSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgZnVuY3RvcihtX3N0YXRl
LnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpKTsKICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52
YXJpYWJsZXMoKS5udW1iZXJPZkxvY2FscygpOyBpLS07KQotICAgICAgICBtX3N0YXRlLnZhcmlh
YmxlcygpLmxvY2FsKGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0b3IobV9z
dGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKSk7CiAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJl
cyh0cnVlKTsKICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7CiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xvYmJlckxpbWl0
KQoreworICAgIGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQorICAgICAgICByZXR1cm47
CisgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0
cnVjdHVyZXNGb3IpOworICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXMoZmFsc2UpOworICAg
IG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJz
dHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpvYnNlcnZlVHJhbnNpdGlvbigKKyAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIFN0cnVj
dHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykKK3sKKyAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVj
dHVyZXMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFic3RyYWN0VmFsdWU6OlRyYW5zaXRpb25P
YnNlcnZlciB0cmFuc2l0aW9uT2JzZXJ2ZXIoZnJvbSwgdG8pOworICAgIGZvckFsbFZhbHVlcyhj
bG9iYmVyTGltaXQsIHRyYW5zaXRpb25PYnNlcnZlcik7CisgICAgbV9zdGF0ZS5zZXREaWRDbG9i
YmVyKHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3Zv
aWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBjb25zdF9jYXN0PEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+Kj4odGhpcyktPmR1bXAob3V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgQWJzdHJhY3RTdGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5cGU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgQ29tbWFQcmludGVyIGNv
bW1hKCIgIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEyICszNywxMiBA
QCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiB7CiAgICAgaWYgKCEh
dmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3Ry
dWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShn
cmFwaCwgc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAg
IG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5
TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAg
ICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAgICAgCkBAIC01MCwxOSArNTAsMjAgQEAg
dm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAgIG1fdmFsdWUgPSB2
YWx1ZTsKICAgICAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0
Y2hlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwg
SlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewot
ICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgIG1fc3Ry
dWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJl
KGdyYXBoLCBzdHJ1Y3R1cmUpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKTsKICAgICAgICAgY2xvYmJlckFycmF5TW9kZXMoKTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1
dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFy
KCk7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAgIApAQCAtNzAsMTcgKzcx
LDE4IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgSlMKICAgICBtX3Zh
bHVlID0gdmFsdWU7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElz
V2F0Y2hlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFw
aCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7Ci0gICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgsIHN0cnVj
dHVyZSk7CisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgbV9hcnJheU1vZGVzID0g
YXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgIG1fdHlwZSA9IHNw
ZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwogICAgIG1fdmFsdWUgPSBKU1ZhbHVl
KCk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0Y2hlZChn
cmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9u
KE5vZGVGbGFncyByZXByZXNlbnRhdGlvbikKQEAgLTEyOSwyMSArMTMxLDE4IEBAIEZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAKICAgICBtX3R5cGUgJj0gb3Ro
ZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhl
ci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5maWx0ZXIob3RoZXIpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCiAg
ICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHByaW9yIHRvIHRoZSBhYm92ZSB0d28gc3RhdGVtZW50
cyB3ZSBoYWQgKEZvbywgVE9QKSwgd2hlcmUKICAgICAvLyBGb28gaXMgYSBTcGVjdWxhdGVkVHlw
ZSB0aGF0IGlzIGRpc2pvaW50IHdpdGggdGhlIHBhc3NlZCBTdHJ1Y3R1cmVTZXQuIEluIHRoYXQK
ICAgICAvLyBjYXNlLCB3ZSB3aWxsIG5vdyBoYXZlIChOb25lLCBbc29tZVN0cnVjdHVyZV0pLiBJ
biBnZW5lcmFsLCB3ZSBuZWVkIHRvIG1ha2UKICAgICAvLyBzdXJlIHRoYXQgbmV3IGluZm9ybWF0
aW9uIGdsZWFuZWQgZnJvbSB0aGUgU3BlY3VsYXRlZFR5cGUgbmVlZHMgdG8gYmUgZmVkIGJhY2sK
ICAgICAvLyBpbnRvIHRoZSBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gdGhlIFN0cnVjdHVyZVNl
dC4KLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKKyAgICBtX3N0
cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKICAgICAKLSAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJl
KGdyYXBoLCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgIAog
ICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwot
ICAgIHJldHVybiBub3JtYWxpemVDbGFyaXR5KCk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJp
dHkoZ3JhcGgpOwogfQogCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckFy
cmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQpAQCAtMTY5LDggKzE2OCw3IEBAIEZpbHRy
YXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFMKICAgICAvLyB0aGUgcGFzc2VkIHR5
cGUgaXMgQXJyYXkuIEF0IHRoaXMgcG9pbnQgd2UnbGwgaGF2ZSAoTm9uZSwgVE9QKS4gVGhlIGJl
c3Qgd2F5CiAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBmaWx0ZXJpbmcgZG9l
cyB0aGUgcmlnaHQgdGhpbmcgaXMgdG8gZmlsdGVyIG9uCiAgICAgLy8gdGhlIG5ldyB0eXBlIChO
b25lKSByYXRoZXIgdGhhbiB0aGUgb25lIHBhc3NlZCAoQXJyYXkpLgotICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwotICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKHR5cGUpOwogICAgIGZp
bHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHJl
dHVybiBub3JtYWxpemVDbGFyaXR5KCk7CkBAIC0xODQsMTUgKzE4Miw2IEBAIEZpbHRyYXRpb25S
ZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQnkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiBncmFw
aCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
aWYgKGdyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXQoKSkpCi0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7Ci0gICAgZWxzZQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1h
a2VUb3AoKTsKLX0KLQogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7
CiAgICAgLy8gV2UgY291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpAQCAtMjM4LDggKzIyNyw3IEBAIGJvb2wg
QWJzdHJhY3RWYWx1ZTo6c2hvdWxkQmVDbGVhcigpIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCiAgICAgaWYgKCEobV90eXBlICYgflNwZWNDZWxsKQotICAgICAgICAmJiAoIW1fYXJy
YXlNb2RlcwotICAgICAgICAgICAgfHwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigp
KSkKKyAgICAgICAgJiYgKCFtX2FycmF5TW9kZXMgfHwgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDEy
ICsyNTEsMTggQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpub3JtYWxpegogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9y
bWFsaXplQ2xhcml0eShHcmFwaCYgZ3JhcGgpCit7CisgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1
bHQgPSBub3JtYWxpemVDbGFyaXR5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBBYnN0cmFj
dFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBpZiAoIShtX3R5cGUgJiBT
cGVjQ2VsbCkpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xl
YXIoKSk7Ci0gICAgICAgIEFTU0VSVChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzQ2xlYXIo
KSk7CisgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICBBU1NF
UlQoIW1fYXJyYXlNb2Rlcyk7CiAgICAgfQogICAgIApAQCAtMjg5LDYgKzI4MywxMSBAQCB2b2lk
IEFic3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3koKSBjCiAgICAgLy8gd2UgZG9uJ3Qgd2Fu
dCB0byBnZXQgcGVkYW50aWMgYWJvdXQgdGhpcyBhcyBpdCB3b3VsZCBvbmx5IGluY3JlYXNlIHRo
ZSBjb21wdXRhdGlvbmFsCiAgICAgLy8gY29tcGxleGl0eSBvZiB0aGUgY29kZS4KIH0KKwordm9p
ZCBBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQoR3JhcGgmIGdyYXBoKSBjb25zdAorewor
ICAgIG1fc3RydWN0dXJlLmFzc2VydElzV2F0Y2hlZChncmFwaCk7Cit9CiAjZW5kaWYKIAogdm9p
ZCBBYnN0cmFjdFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0zMDIsOCAr
MzAxLDcgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50UwogICAgIGlm
IChtX3R5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAi
LCAiLCBBcnJheU1vZGVzRHVtcChtX2FycmF5TW9kZXMpLCAiLCAiLAotICAgICAgICAgICAgaW5D
b250ZXh0KG1fY3VycmVudEtub3duU3RydWN0dXJlLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
ICAgIGluQ29udGV4dChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLCBjb250ZXh0KSk7CisgICAg
ICAgICAgICBpbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYg
KCEhbV92YWx1ZSkKICAgICAgICAgb3V0LnByaW50KCIsICIsIGluQ29udGV4dChtX3ZhbHVlLCBj
b250ZXh0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY05vbmU7CiAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IDA7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNs
ZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTc1LDE1ICs3NCw0NiBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpCiAgICAgewog
ICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsb2JiZXIo
KTsKICAgICAgICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICAgICAgQVNT
RVJUKCFtX2FycmF5TW9kZXMpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2xvYmJlclN0cnVjdHVyZXNGb3IoQWJz
dHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICB2YWx1ZS5jbG9iYmVyU3RydWN0dXJl
cygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSog
ZnJvbSwgU3RydWN0dXJlKiB0bykKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2Vs
bCkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb24oZnJvbSwgdG8p
OworICAgICAgICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRpb24oZnJvbS0+aW5kZXhp
bmdUeXBlKCksIHRvLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBUcmFuc2l0aW9uT2JzZXJ2ZXIg
eworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNpdGlvbk9ic2VydmVyKFN0cnVjdHVyZSogZnJv
bSwgU3RydWN0dXJlKiB0bykKKyAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAgICAgICAg
ICAsIG1fdG8odG8pCisgICAgICAgIHsKKyAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9p
ZCBvcGVyYXRvcigpKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICB2YWx1ZS5vYnNlcnZlVHJhbnNpdGlvbihtX2Zyb20sIG1fdG8pOworICAgICAgICB9CisgICAg
cHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX2Zyb207CisgICAgICAgIFN0cnVjdHVyZSog
bV90bzsKKyAgICB9OworICAgIAogICAgIHZvaWQgY2xvYmJlclZhbHVlKCkKICAgICB7CiAgICAg
ICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC05MSw3ICsxMjEsMTAgQEAgc3RydWN0IEFic3Ry
YWN0VmFsdWUgewogICAgIAogICAgIGJvb2wgaXNIZWFwVG9wKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZSAmJiBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5pc1RvcCgpICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNUb3Ao
KTsKKyAgICAgICAgcmV0dXJuIChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90eXBlCisgICAg
ICAgICAgICAmJiBtX3N0cnVjdHVyZS5pc1RvcCgpCisgICAgICAgICAgICAmJiBtX2FycmF5TW9k
ZXMgPT0gQUxMX0FSUkFZX01PREVTCisgICAgICAgICAgICAmJiAhbV92YWx1ZTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCB2YWx1ZUlzVG9wKCkgY29uc3QKQEAgLTExOCwxMiArMTUxLDEwIEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIHNldFR5cGUoU3BlY3VsYXRlZFR5cGUgdHlw
ZSkKICAgICB7CiAgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1f
Y3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRv
cCgpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsK
LSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwog
ICAgICAgICB9CiAgICAgICAgIG1fdHlwZSA9IHR5cGU7CkBAIC0xMzgsOCArMTY5LDcgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBvdGhl
ci5tX3R5cGUKICAgICAgICAgICAgICYmIG1fYXJyYXlNb2RlcyA9PSBvdGhlci5tX2FycmF5TW9k
ZXMKLSAgICAgICAgICAgICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlID09IG90aGVyLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlCi0gICAgICAgICAgICAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlID09IG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1f
c3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlCiAgICAgICAgICAgICAmJiBtX3ZhbHVlID09
IG90aGVyLm1fdmFsdWU7CiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYnN0cmFj
dFZhbHVlJiBvdGhlcikgY29uc3QKQEAgLTE2Miw4ICsxOTIsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RW
YWx1ZSB7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VTcGVj
dWxhdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVy
Z2VBcnJheU1vZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJheU1vZGVzKTsKLSAgICAgICAg
ICAgIHJlc3VsdCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmVzdWx0IHw9IG1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLm1lcmdlKG90aGVyLm1fc3RydWN0dXJlKTsK
ICAgICAgICAgICAgIGlmIChtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWUpIHsKICAgICAgICAgICAg
ICAgICByZXN1bHQgfD0gISFtX3ZhbHVlOwogICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBKU1Zh
bHVlKCk7CkBAIC0xNzksOCArMjA4LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAg
ICBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwgdHlwZSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
dHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5t
YWtlVG9wKCk7Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3Ao
KTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgICAgIG1fYXJy
YXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICAgICAgfQogICAgICAgICBtX3ZhbHVlID0g
SlNWYWx1ZSgpOwpAQCAtMjI1LDc1ICsyNTMsMzAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgQVNT
RVJUKG1fdHlwZSAmIFNwZWNDZWxsKTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgcmV0dXJuIG1fY3Vy
cmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICAm
JiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKKyAgICAgICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAg
ICAgJiYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKLSAgICBTdHJ1Y3R1cmUqIGJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKG1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAg
ICAgICBpZiAobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBoYXNDbG9iYmVyYWJsZVN0YXRl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5p
c05laXRoZXJDbGVhck5vclRvcCgpCisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5pc05laXRo
ZXJDbGVhck5vclRvcCgpCiAgICAgICAgICAgICB8fCAhYXJyYXlNb2Rlc0FyZUNsZWFyT3JUb3Ao
bV9hcnJheU1vZGVzKTsKICAgICB9CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQo
R3JhcGgmKSBjb25zdCB7IH0KICNlbHNlCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29u
c3Q7CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKICNlbmRpZgogICAg
IAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgLy8gQSBn
cmVhdCB3YXkgdG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZSBhbmQKLSAgICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGlzIHRv
IGNvbnNpZGVyIHRoZXNlIGZvdXIgZXhhbXBsZXM6Ci0gICAgLy8KLSAgICAvLyAxKSB4ID0gZm9v
KCk7Ci0gICAgLy8KLSAgICAvLyAgICBJbiB0aGlzIGNhc2UgeCdzIG1fY3VycmVudEtub3duU3Ry
dWN0dXJlIGFuZCBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwKLSAgICAvLyAgICBib3Ro
IGJlIFRPUCwgc2luY2Ugd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB4IGZvciBzdXJlLCB5
ZXQuCi0gICAgLy8KLSAgICAvLyAyKSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAg
ICAvLwotICAgIC8vICAgIFdoZXJlIHggd2lsbCBsYXRlciBoYXZlIGEgbmV3IHByb3BlcnR5IGFk
ZGVkIHRvIGl0LCAnZycuIEJlY2F1c2Ugb2YgdGhlCi0gICAgLy8gICAga25vd24gYnV0IG5vdC15
ZXQtZXhlY3V0ZWQgcHJvcGVydHkgYWRkaXRpb24sIHgncyBjdXJyZW50IHN0cnVjdHVyZSB3aWxs
Ci0gICAgLy8gICAgbm90IGJlIHdhdGNocG9pbnRhYmxlOyBoZW5jZSB3ZSBoYXZlIG5vIHdheSBv
ZiBzdGF0aWNhbGx5IGJvdW5kaW5nIHRoZSBzZXQKLSAgICAvLyAgICBvZiBwb3NzaWJsZSBzdHJ1
Y3R1cmVzIHRoYXQgeCBtYXkgaGF2ZSBpZiBhIGNsb2JiZXJpbmcgZXZlbnQgaGFwcGVucy4gU28s
Ci0gICAgLy8gICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIg
c3RydWN0dXJlIHdlIGNoZWNrIHRvIGdldAotICAgIC8vICAgIHByb3BlcnR5ICdmJywgYW5kIG1f
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBiZSBUT1AuCi0gICAgLy8KLSAgICAvLyAzKSB4
ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLwotICAgIC8vICAgIFdoZXJlIHgg
aGFzIGEgdGVybWluYWwgc3RydWN0dXJlIHRoYXQgaXMgc3RpbGwgd2F0Y2hwb2ludGFibGUuIElu
IHRoaXMgY2FzZSwKLSAgICAvLyAgICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIG1f
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBib3RoIGJlCi0gICAgLy8gICAgd2hhdGV2ZXIg
c3RydWN0dXJlIHdlIGNoZWNrZWQgZm9yIHdoZW4gZ2V0dGluZyAnZicuCi0gICAgLy8KLSAgICAv
LyA0KSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLyAgICBiYXIoKTsKLSAg
ICAvLwotICAgIC8vICAgIFdoZXJlIHggaGFzIGEgdGVybWluYWwgc3RydWN0dXJlIHRoYXQgaXMg
c3RpbGwgd2F0Y2hwb2ludGFibGUuIEluIHRoaXMKLSAgICAvLyAgICBjYXNlLCBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZSB3aWxsIGJlIFRPUCBiZWNhdXNlIGJhcigpIG1heSBwb3RlbnRpYWxseQot
ICAgIC8vICAgIGNoYW5nZSB4J3Mgc3RydWN0dXJlIGFuZCB3ZSBoYXZlIG5vIHdheSBvZiBwcm92
aW5nIG90aGVyd2lzZSwgYnV0Ci0gICAgLy8gICAgeCdzIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUgd2lsbCBiZSB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgaGFkIGNoZWNrZWQKLSAgICAvLyAgICB3
aGVuIGdldHRpbmcgcHJvcGVydHkgJ2YnLgotICAgIAotICAgIC8vIE5CLiBBbGwgZmllbGRzIGlu
IHRoaXMgc3RydWN0IG11c3QgaGF2ZSB0cml2aWFsIGRlc3RydWN0b3JzLgotCiAgICAgLy8gVGhp
cyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1
ZSBjYW4gaGF2ZSByaWdodAogICAgIC8vIG5vdy4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVu
dCB2YWx1ZSBtdXN0IGJlbG9uZyB0byB0aGlzIHNldC4gVGhlIHNldCBtYXkKICAgICAvLyBiZSBU
T1AsIGluZGljYXRpbmcgdGhhdCBpdCBpcyB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBzdHJ1Y3R1
cmVzLCBpbiB3aGljaApAQCAtMzAxLDI5ICsyODQsMTIgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgIC8vIGluIHdoaWNoIGNhc2UgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgYSBjZWxsLiBUaGlz
IGlzIGFsbCBzdWJqZWN0IHRvIGNoYW5nZQogICAgIC8vIGFueXRpbWUgYSBuZXcgdmFsdWUgaXMg
YXNzaWduZWQgdG8gdGhpcyBvbmUsIGFueXRpbWUgdGhlcmUgaXMgYSBjb250cm9sIGZsb3cKICAg
ICAvLyBtZXJnZSwgb3IgbW9zdCBjcnVjaWFsbHksIGFueXRpbWUgYSBzaWRlLWVmZmVjdCBvciBz
dHJ1Y3R1cmUgY2hlY2sgaGFwcGVucy4KLSAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3Qs
IHdlIHR5cGljYWxseSBtdXN0IGFzc3VtZSB0aGF0IGFueSB2YWx1ZSBtYXkgaGF2ZQotICAgIC8v
IGhhZCBpdHMgc3RydWN0dXJlIGNoYW5nZWQsIGhlbmNlIGNvbnRyYXZlbmluZyBvdXIgcHJvb2Yu
IFdlIG1ha2UgdGhlIHByb29mCi0gICAgLy8gdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMg
dG8gVE9QIChpLmUuIGNsYWltaW5nIHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdAotICAgIC8vIHRo
aXMgdmFsdWUgbWF5IGhhdmUgYW55IHN0cnVjdHVyZSkuIE9mIG5vdGUgaXMgdGhhdCB0aGUgcHJv
b2YgcmVwcmVzZW50ZWQgYnkKLSAgICAvLyB0aGlzIGZpZWxkIGlzIG5vdCBzdWJqZWN0IHRvIHN0
cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIC0gZXZlbiBpZiBvbmUKLSAgICAvLyBmaXJl
cywgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGlzIHByb29mIGlzIHN0aWxsIHZhbGlkLgotICAgIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmU7Ci0gICAgCi0gICAg
Ly8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhp
cyB2YWx1ZSBjYW4gaGF2ZSBub3cKLSAgICAvLyBvciBhbnkgdGltZSBpbiB0aGUgZnV0dXJlIHN1
YmplY3QgdG8gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIG9mCi0gICAgLy8g
YWxsIG1lbWJlcnMgb2YgdGhpcyBzZXQgbm90IGhhdmluZyBmaXJlZC4gVGhpcyBzZXQgaXMgaW1w
ZXJ2aW91cyB0byBzaWRlLQotICAgIC8vIGVmZmVjdHM7IGV2ZW4gaWYgb25lIGhhcHBlbnMgdGhl
IHNpZGUtZWZmZWN0IGNhbiBvbmx5IGNhdXNlIHRoZSB2YWx1ZSB0bwotICAgIC8vIGNoYW5nZSB0
byBhdCB3b3JzdCBhbm90aGVyIHN0cnVjdHVyZSB0aGF0IGlzIGFsc28gYSBtZW1iZXIgb2YgdGhp
cyBzZXQuIEJ1dCwKLSAgICAvLyB0aGUgdGhlb3JlbSBiZWluZyBwcm92ZWQgYnkgdGhpcyBmaWVs
ZCBpcyBwcmVkaWNhdGVkIHVwb24gdGhlcmUgbm90IGJlaW5nCi0gICAgLy8gYW55IG5ldyBzdHJ1
Y3R1cmUgdHJhbnNpdGlvbnMgaW50cm9kdWNlZCBpbnRvIGFueSBtZW1iZXJzIG9mIHRoaXMgc2V0
LiBJbgotICAgIC8vIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vIHdheSBmb3IgdXMgdG8gZ3VhcmQg
dGhpcyBoYXBwZW5pbmcsIHRoZSBzZXQgbXVzdCBiZQotICAgIC8vIFRPUC4gQnV0IGluIGNhc2Vz
IHdoZXJlIHdlIGNhbiBndWFyZCBuZXcgc3RydWN0dXJlIHRyYW5zaXRpb25zIChhbGwgbWVtYmVy
cwotICAgIC8vIG9mIHRoZSBzZXQgaGF2ZSBzdGlsbC12YWxpZCBzdHJ1Y3R1cmUgdHJhbnNpdGlv
biB3YXRjaHBvaW50cykgdGhlbiB0aGlzIHNldAotICAgIC8vIHdpbGwgYmUgZmluaXRlLiBBbnl0
aW1lIHRoYXQgd2UgbWFrZSB1c2Ugb2YgdGhlIGZpbml0ZSBuYXR1cmUgb2YgdGhpcyBzZXQsCi0g
ICAgLy8gd2UgbXVzdCBmaXJzdCBpc3N1ZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9p
bnQsIHdoaWNoIHdpbGwgZWZmZWN0aXZlbHkKLSAgICAvLyByZXN1bHQgaW4gbV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUgYmVpbmcgZmlsdGVyZWQgYWNjb3JkaW5nIHRvCi0gICAgLy8gbV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZS4KLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmU7CisgICAgLy8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0LCB3ZSBtdXN0
IGFzc3VtZSB0aGF0IGFueSB2YWx1ZSB3aXRoIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyBpc24n
dCBiZWluZyB3YXRjaGVkIG1heSBoYXZlIGhhZCBpdHMgc3RydWN0dXJlIGNoYW5nZWQsIGhlbmNl
IGNvbnRyYXZlbmluZworICAgIC8vIG91ciBwcm9vZi4gSW4gc3VjaCBhIGNhc2Ugd2UgbWFrZSB0
aGUgcHJvb2YgdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMgdG8KKyAgICAvLyBUT1AgKGku
ZS4gY2xhaW1pbmcgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoaXMgdmFsdWUgbWF5IGhhdmUg
YW55CisgICAgLy8gc3RydWN0dXJlKS4KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3Ry
dWN0dXJlOwogICAgIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUg
cG9zc2libGUgdHlwZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlCiAgICAgLy8gbm93IG9yIGFu
eSB0aW1lIGluIHRoZSBmdXR1cmUsIHVubGVzcyBpdCBpcyByZWFzc2lnbmVkLiBUaGlzIGZpZWxk
IGlzCkBAIC0zMzIsMTEgKzI5OCwxMSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8g
YmV0d2VlbiB0aGlzIGZpZWxkLCBhbmQgdGhlIHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFz
IGZvbGxvd3MuIFRoZQogICAgIC8vIGZpZWxkcyBhYm92ZSBjb25zdHJhaW50IHRoZSBzdHJ1Y3R1
cmVzIHRoYXQgYSBjZWxsIG1heSBoYXZlLCBidXQgdGhleSBzYXkKICAgICAvLyBub3RoaW5nIGFi
b3V0IHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBhIGNlbGwuIE1vcmUg
Zm9ybWFsbHksCi0gICAgLy8gdGhlIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzIGl0c2VsZiBh
biBhYnN0cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQorICAgIC8vIHRoZSBtX3N0cnVj
dHVyZSBpcyBpdHNlbGYgYW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKICAg
ICAvLyB1bmlvbiBvZiB0aGUgc2V0IG9mIGFsbCBub24tY2VsbCB2YWx1ZXMgYW5kIHRoZSBzZXQg
b2YgY2VsbCB2YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gdGhlIGdpdmVuIHN0cnVjdHVyZS4gVGhp
cyBhYnN0cmFjdCB2YWx1ZSBpcyB0aGVuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCi0gICAgLy8g
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUg
aXMgbV90eXBlLiBTbywgZm9yCi0gICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFs
fFNwZWNJbnQzMiBhbmQgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMKKyAgICAvLyBtX3N0cnVj
dHVyZSBhbmQgdGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IK
KyAgICAvLyBleGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX3N0
cnVjdHVyZSBpcwogICAgIC8vIFsweDEyMzQ1XSB0aGVuIHRoaXMgYWJzdHJhY3QgdmFsdWUgY29y
cmVzcG9uZHMgdG8gdGhlIHNldCBvZiBhbGwgaW50ZWdlcnMKICAgICAvLyB1bmlmaWVkIHdpdGgg
dGhlIHNldCBvZiBhbGwgb2JqZWN0cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgogICAgIFNwZWN1
bGF0ZWRUeXBlIG1fdHlwZTsKQEAgLTM2NCw2ICszMzAsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgIH0KICAgICAKKyAgICB2b2lkIG9i
c2VydmVJbmRleGluZ1R5cGVUcmFuc2l0aW9uKEluZGV4aW5nVHlwZSBmcm9tLCBJbmRleGluZ1R5
cGUgdG8pCisgICAgeworICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKGZy
b20pKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2Rlcyh0byk7CisgICAg
fQorICAgIAogICAgIGJvb2wgdmFsaWRhdGVUeXBlKEpTVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAg
ewogICAgICAgICBpZiAoaXNIZWFwVG9wKCkpCkBAIC0zOTEsMTkgKzM2MywxNyBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgbV90eXBlIHw9IHRvcDsKICAgICAgICAgbV9hcnJheU1vZGVzID0g
QUxMX0FSUkFZX01PREVTOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9w
KCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAg
ICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKLQogICAg
IHZvaWQgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5
cGUoKTsKICAgICAKICAgICBib29sIHNob3VsZEJlQ2xlYXIoKSBjb25zdDsKICAgICBGaWx0cmF0
aW9uUmVzdWx0IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IG5vcm1h
bGl6ZUNsYXJpdHkoR3JhcGgmKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYWxsb2NhdGUoKTsg
Ly8gVXNlIHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9pZCB1c2luZyB0aGlzIG1l
dGhvZC4KICAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGRlbGV0ZTsg
bmV2ZXIgdXNlICdkZWxldGUnIGRpcmVjdGx5LgogICAgIAotICAgIHZvaWQgZnJlZUFsbCgpOyAv
LyBPbmx5IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICB2b2lk
IGZyZWVBbGwoKTsgLy8gT25seSBjYWxsIHRoaXMgaWYgeW91J3ZlIGVpdGhlciBmcmVlZCBldmVy
eXRoaW5nIG9yIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgogICAgIHZvaWQgcmVzZXQo
KTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUg
T1MuCiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXhPZihjb25zdCBUKik7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxp
ZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyNSw3ICszMjUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgotICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAgICAgICAv
LyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIGJlY2F1c2UgaWYgd2UgZ2V0IHVzZXMgb2YgdGhl
IHJlbGV2YW50CiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIHRoZW4gd2UgY2FuIHNh
ZmVseSBnZXQgcmlkIG9mIHRoZXNlLCB0b28uIFRoaXMgb2YgY291cnNlCkBAIC00NDEsNyArNDQw
LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBjYXNl
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tBcnJheTogewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9m
IHRoaXMgbm9kZSwgaWYgaXQgcmVmZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCiAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlz
aW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDI1ICsyODksNDggQEAgU3RydWN0dXJlKiBBcnJheU1v
ZGU6Om9yaWdpbmFsQXJyYXlTdHJ1YwogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlw
ZSBzaGFwZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewotICAgIGNhc2Ug
QXJyYXk6Ok9yaWdpbmFsQXJyYXk6Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hh
cGVNYXNrKSA9PSBzaGFwZQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAgICAgICAg
ICAmJiBncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNPcmln
aW5hbEFycmF5U3RydWN0dXJlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRv
bigpKTsKKyAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OiB7CisgICAgICAgIGlmICh2YWx1
ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Cisg
ICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBl
TWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZ3JhcGguZ2xvYmFsT2JqZWN0
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1
Y3R1cmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFycmF5Ogor
ICAgIGNhc2UgQXJyYXk6OkFycmF5OiB7CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNo
ZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0FycmF5KSkp
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhp
bmdTaGFwZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAg
ICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1
Y3R1cmVbaV07CisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CiAgICAgICAgIAotICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDogewog
ICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2Rlcywg
YXNBcnJheU1vZGVzKHNoYXBlKSB8IGFzQXJyYXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1No
YXBlTWFzaykgPT0gc2hhcGU7Ci0gICAgfQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgaWYg
KChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spICE9IHNoYXBl
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9IH0KIH0KIAogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdy
YXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpIGNvbnN0CkBAIC0z
MzYsMjMgKzM1OSwzOCBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdy
CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAg
IHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJy
YXk6CisgICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6IHsKICAgICAgICAgICAgIENS
QVNIKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgCi0g
ICAgICAgIGNhc2UgQXJyYXk6OkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheTogewog
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9k
ZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNT
aW5nbGV0b24oKQotICAgICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAg
ICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3Ry
dWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtp
XTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9y
YWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0
b24oKQotICAgICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICB9
CisgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5t
X3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgICAgIGlmICghaGFz
QW55QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfSB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoK
ICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNBcmd1
bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJ
KHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIihVTlNBRkUpICIpOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXMoKSwgIiAiLCBtX2ludGVy
cHJldGVyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5o
YXZlU3RydWN0dXJlcygpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgKEhhdmUgU3Ry
dWN0dXJlcykiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDEyICs0NjAsNiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQot
ICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0
dXJlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKICAgICAgICAg
ICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSkKQEAgLTU0NywxMSArNTQxLDYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJlICYm
IG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICBjYXNlIEFycmF5aWZ5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgog
ICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlvbiBj
b3VsZCBhZmZlY3Qgb3VyIHN0cnVjdHVyZXMuCkBAIC0xMzg3LDEzICsxMzc2LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0g
ICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
RWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpCi0g
ICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAgIGlmIChjc2VNb2Rl
ID09IE5vcm1hbENTRSkKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
NDE4LDcgKzQxOCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAgICAg
IHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29u
c3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywyNyArOTcsMTIgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlKCk7CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1
Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3Ry
dWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJl
dGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkg
ZmlsdGVyIG9uIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50
b20oKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0
T2Yoc2V0KQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0
b24oKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVj
dHVyZVZhbHVlLnNpbmdsZXRvbigpOwotICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVy
LmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmls
dGVyIG9uIGNlbGwuCi0gICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4g
PSBub2RlLT5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVtb3ZlRWRn
ZSgwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgY2hpbGRyZW4pOwotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2UoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVj
dHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xNTYsNyArMTQxLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7
CiAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0
aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0
dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTE4
MCw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hp
bGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0
YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIApAQCAtMjA1LDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYg
KGNoaWxkRWRnZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0
dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMjMyLDcgKzIxNyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRn
ZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92
ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
c3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAg
ICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKQEAgLTMyOSw3ICszMTQsNiBAQCBwcml2YXRlOgogICAgICAgICBFZGdl
IGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxk
RWRnZS5ub2RlKCk7CiAKLSAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAg
ICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBl
ICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNoYWluKCkp
OwpAQCAtMzQwLDExICszMjQsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBkbyBhbnkgZWxpbWlu
YXRpb25zLgogICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKLSAgICAgICAgICAgIG1faW5z
ZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAg
ICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgfSBlbHNlIGlmIChu
ZWVkc0NlbGxDaGVjaykgeworICAgICAgICBpZiAobmVlZHNDZWxsQ2hlY2spIHsKICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICB9CkBA
IC0zODEsNyArMzYxLDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkc1dh
dGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUu
Zm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAgLy8g
Tm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVy
IHRoZSBQdXRCeUlkCkBAIC0zODksMTEgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGRv
IGFueSBlbGltaW5hdGlvbnMuCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleElu
QmxvY2spOwogCi0gICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKLSAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBT
cGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAg
ICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgfSBlbHNlIGlm
IChuZWVkc0NlbGxDaGVjaykgeworICAgICAgICBpZiAobmVlZHNDZWxsQ2hlY2spIHsKICAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICB9
CkBAIC00NzUsMTYgKzQ1MCwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRTdHJ1Y3R1cmVU
cmFuc2l0aW9uQ2hlY2soTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5CbG9jaywg
SlNDZWxsKiBjZWxsKQogICAgIHsKLSAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRp
b25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBvcmlnaW4sIE9wSW5mbyhjZWxsKSk7
Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxp
ZChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpIHsKLSAgICAg
ICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwK
LSAgICAgICAgICAgICAgICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdlYWtDb25z
dGFudCwgQ2VsbFVzZSkpOworICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRp
b25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fZ3JhcGgud2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgTm9k
ZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50
LCBvcmlnaW4sIE9wSW5mbyhjZWxsKSk7CisgICAgICAgIAogICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tT
dHJ1Y3R1cmUsIG9yaWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVy
ZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVzZSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw5IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4
aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQogICAgIHsKKyNpZiAhQVNT
RVJUX0RJU0FCTEVECisgICAgICAgIG1fcHJvZmlsZWRTZXRzLmFkZChzZXQpOworI2VuZGlmCiAg
ICAgICAgIG1fcHJvZmlsZWRXYXRjaHBvaW50cy5hcHBlbmQoCiAgICAgICAgICAgICBXYXRjaHBv
aW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+KGNvZGVPcmlnaW4s
IGV4aXRLaW5kLCBzZXQpKTsKICAgICB9CkBAIC0xNzIsMTEgKzE3NSwxNyBAQCBwdWJsaWM6CiAg
ICAgewogICAgICAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHNldCkgfHwgc2hvdWxkQXNzdW1lTWl4
ZWRTdGF0ZShzZXQpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChXYXRj
aHBvaW50U2V0VHlwZSogc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fc2V0cy5j
b250YWlucyhzZXQpIHx8IG1fcHJvZmlsZWRTZXRzLmNvbnRhaW5zKHNldCkpOworICAgIH0KIAog
cHJpdmF0ZToKICAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdh
dGNocG9pbnRTZXRUeXBlPj4gbV9wcm9maWxlZFdhdGNocG9pbnRzOwogICAgIEhhc2hTZXQ8V2F0
Y2hwb2ludFNldFR5cGUqPiBtX3NldHM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEhhc2hT
ZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3Byb2ZpbGVkU2V0czsKICAgICBTdGF0ZU1hcCBtX2Zp
cnN0S25vd25TdGF0ZTsKICNlbmRpZgogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAgLTIzMyw2
ICsyNDIsMTggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3Mu
aXNWYWxpZE9yTWl4ZWQodmlldyk7CiAgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKFdh
dGNocG9pbnRTZXQqIHNldCkKKyAgICB7CisgICAgICAgIG1fc2V0cy5hc3NlcnRJc1dhdGNoZWQo
c2V0KTsKKyAgICB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoSW5saW5lV2F0Y2hwb2ludFNl
dCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9pbmxpbmVTZXRzLmFzc2VydElzV2F0Y2hlZCgmc2V0
KTsKKyAgICB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZp
ZXcpCisgICAgeworICAgICAgICBtX2J1ZmZlclZpZXdzLmFzc2VydElzV2F0Y2hlZCh2aWV3KTsK
KyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8V2F0
Y2hwb2ludFNldD4gbV9zZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9l
c0dDLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAgYm9vbCBkb2Vz
R0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAg
ICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBj
YXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMwLDcgKzkzMCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBD
aGVja0V4ZWN1dGFibGU6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgIGNh
c2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5j
dGlvbjoKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIENyZWF0
ZVRoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDE2IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4m
IHBsYW4sIExvbmdMaXYKIAogR3JhcGg6On5HcmFwaCgpCiB7CisgICAgZm9yIChCbG9ja0luZGV4
IGJsb2NrSW5kZXggPSBudW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNp
Y0Jsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJs
b2NrKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJ
bmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBtX2Fs
bG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAg
bV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgfQogICAgIG1fYWxs
b2NhdG9yLmZyZWVBbGwoKTsKIH0KIApAQCAtODQ2LDcgKzg1Niw2IEBAIHZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgY2FzZSBOZXdP
YmplY3Q6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAg
ICBjYXNlIE5ld1N0cmluZ09iamVjdDoKQEAgLTg2Myw2ICs4NzIsMzEgQEAgdm9pZCBHcmFwaDo6
dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgICAgICBub2RlLT5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZz
ZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZh
cmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVk
UmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBv
aW50ZXIoc2V0W2pdKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIG1h
cmsgYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKKyAg
ICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVj
dHVyZSdzLiBEb24ndCBuZWVkIHRvIG1hcmsgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIGNh
bGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYg
YW55IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlh
bnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5raW5k
KCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsK
KyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHdh
dGNocG9pbnRzKCkuYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc09iamVjdCgp
KQogICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvV2Vha0NvbnN0YW50KHZhbHVlLmFzQ2VsbCgp
KTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC00ODUsMjEgKzQ4NSw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
Y2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9TdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX29wID09IENoZWNrU3RydWN0dXJlIHx8IG1fb3AgPT0gQXJyYXlpZnlUb1N0
cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVCghY2hpbGQyKCkpOwotICAgICAgICBBU1NFUlQoIWNo
aWxkMygpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgICAgIG1fb3BJbmZvID0g
Yml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlKTsKLSAgICAgICAgbV9vcCA9IFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNvbnZlcnRU
b1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkKLSAgICB7Ci0gICAgICAgIGNvbnZlcnRU
b1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLm9ubHlTdHJ1Y3R1
cmUoKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQodW5zaWdu
ZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCB8fCBtX29wID09
IE11bHRpR2V0QnlPZmZzZXQpOwpAQCAtMTEyOSw3ICsxMTE0LDYgQEAgc3RydWN0IE5vZGUgewog
ICAgIGJvb2wgaGFzU3RydWN0dXJlKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewot
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNl
IEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBj
YXNlIE5ld1N0cmluZ09iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDE4ICsxNTMsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwgTm9kZU11
c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1
cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVja0V4ZWN1dGFibGUsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKLSAgICAvKiBUcmFuc2l0aW9uIHdhdGNocG9pbnRzIGFyZSBhIGNvbnRy
YWN0IGJldHdlZW4gdGhlIHBhcnR5IHNldHRpbmcgdGhlIHdhdGNocG9pbnQgKi9cCi0gICAgLyog
YW5kIHRoZSBydW50aW1lIHN5c3RlbSwgd2hlcmUgdGhlIHBhcnR5IHByb21pc2VzIHRoYXQgdGhl
IGNoaWxkIG9iamVjdCBvbmNlIGhhZCAqL1wKLSAgICAvKiB0aGUgc3RydWN0dXJlIGJlaW5nIHdh
dGNoZWQsIGFuZCB0aGUgcnVudGltZSBzeXN0ZW0gaW4gdHVybiBwcm9taXNlcyB0aGF0IHRoZSAq
L1wKLSAgICAvKiB3YXRjaHBvaW50IHdpbGwgYmUgdHVybmVkIGludG8gYW4gT1NSIGV4aXQgaWYg
YW55IG9iamVjdCB3aXRoIHRoYXQgc3RydWN0dXJlICovXAotICAgIC8qIGV2ZXIgdHJhbnNpdGlv
bnMgdG8gYSBkaWZmZXJlbnQgc3RydWN0dXJlLiBIZW5jZSwgdGhlIGNoaWxkIG9iamVjdCBtdXN0
IGhhdmUgKi9cCi0gICAgLyogcHJldmlvdXNseSBoYWQgYSBDaGVja1N0cnVjdHVyZSBleGVjdXRl
ZCBvbiBpdCBvciB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0ICovXAotICAgIC8qIGNvbnN0
YW50IChXZWFrSlNDb25zdGFudCkgYW5kIHRoZSBvYmplY3Qgd2FzIGtub3duIHRvIGhhdmUgdGhh
dCBzdHJ1Y3R1cmUgYXQgKi9cCi0gICAgLyogY29tcGlsZS10aW1lLiBJbiB0aGUgbGF0dGVyIGNh
c2UgdGhpcyBtZWFucyB0aGF0IG5vIHN0cnVjdHVyZSBjaGVja3MgaGF2ZSB0byBiZSAqL1wKLSAg
ICAvKiBwZXJmb3JtZWQgZm9yIHRoaXMgb2JqZWN0IGJ5IEpJVHRlZCBjb2RlLiBJbiB0aGUgZm9y
bWVyIGNhc2UgdGhpcyBtZWFucyB0aGF0Ki9cCi0gICAgLyogdGhlIG9iamVjdCdzIHN0cnVjdHVy
ZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlY2hlY2tlZCBkdWUgdG8gc2lkZS1lZmZlY3RpbmcgKi9c
Ci0gICAgLyogKGNsb2JiZXJpbmcpIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0
U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVj
dHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0
IHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIkRG
R1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUg
IkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1dhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdXYXRjaHBvaW50Q29s
bGVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJPcGVyYW5k
c0lubGluZXMuaCIKQEAgLTIzMyw2ICsyMzQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxh
bjo6Y29tcGlsZUluVGhyCiAgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAg
ICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChk
ZmcpOworICAgIHBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhkZmcpOwogICAgIHBl
cmZvcm1JbnZhbGlkYXRpb25Qb2ludEluamVjdGlvbihkZmcpOwogICAgIHBlcmZvcm1UeXBlQ2hl
Y2tIb2lzdGluZyhkZmcpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblBy
b3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAko
cmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NSwyMiArMjc1LDI2IEBAIGJvb2wgc2FmZVRv
RXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgcmV0dXJuIG5vZGUtPmFycmF5
TW9kZSgpLm1vZGVGb3JQdXQoKS5hbHJlYWR5Q2hlY2tlZCgKICAgICAgICAgICAgIGdyYXBoLCBu
b2RlLCBzdGF0ZS5mb3JOb2RlKGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKSk7CiAKLSAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICByZXR1cm4gc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNl
dE9mKAotICAgICAgICAgICAgU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAg
ICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVy
ZToKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2YoCisgICAgICAgIHJldHVy
biBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKAog
ICAgICAgICAgICAgU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCku
cHJldmlvdXNTdHJ1Y3R1cmUpKTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAg
ICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0g
ICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1ZhbGlkT2Zmc2V0KAotICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLm9mZnNldCk7CisgICAgY2Fz
ZSBQdXRCeU9mZnNldDogeworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOworICAgICAgICBpZiAo
dmFsdWUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdl
QWNjZXNzRGF0YUluZGV4KCldLm9mZnNldDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFs
dWUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIXZhbHVlW2ldLT5pc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5
cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OTcsMjkgKzM2OTcsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDog
ewotICAgICAgICAvLyBUaGVyZSBpcyBhIGZhc2NpbmF0aW5nIHF1ZXN0aW9uIGhlcmUgb2Ygd2hh
dCB0byBkbyBhYm91dCBhcnJheSBwcm9maWxpbmcuCi0gICAgICAgIC8vIFdlICpjb3VsZCogdHJ5
IHRvIHRlbGwgdGhlIE9TUiBleGl0IGFib3V0IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBhY2Nlc3Mg
aXMuCi0gICAgICAgIC8vIFRoZSBERkcgd2lsbCBoYXZlIGtlcHQgaXQgYWxpdmUsIHRob3VnaCBp
dCBtYXkgbm90IGJlIGluIGEgcmVnaXN0ZXIsIGFuZAotICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qg
cmVhbGx5IGxvYWQgaXQgc2luY2UgdGhhdCBjb3VsZCBiZSBhIHdhc3RlLiBGb3Igbm93IHRob3Vn
aCwKLSAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hlbiBhIHdh
dGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKLSAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFscmVh
ZHkuCi0gICAgICAgIAotICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkp
LCBUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgICAgIG1faml0LmJyZWFr
cG9pbnQoKTsKLSAgICAgICAgaXNPSy5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgICAgICBzcGVj
dWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsKLSNlbmRpZgotCi0gICAgICAgIG5vUmVzdWx0KG5v
ZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZTogewogICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCku
bm9kZSgpKSk7CiAgICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGlu
Z1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9j
aygpLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2
NywzMiArMzc2Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgZmFzY2luYXRpbmcgcXVl
c3Rpb24gaGVyZSBvZiB3aGF0IHRvIGRvIGFib3V0IGFycmF5IHByb2ZpbGluZy4KLSAgICAgICAg
Ly8gV2UgKmNvdWxkKiB0cnkgdG8gdGVsbCB0aGUgT1NSIGV4aXQgYWJvdXQgd2hlcmUgdGhlIGJh
c2Ugb2YgdGhlIGFjY2VzcyBpcy4KLSAgICAgICAgLy8gVGhlIERGRyB3aWxsIGhhdmUga2VwdCBp
dCBhbGl2ZSwgdGhvdWdoIGl0IG1heSBub3QgYmUgaW4gYSByZWdpc3RlciwgYW5kCi0gICAgICAg
IC8vIHdlIHNob3VsZG4ndCByZWFsbHkgbG9hZCBpdCBzaW5jZSB0aGF0IGNvdWxkIGJlIGEgd2Fz
dGUuIEZvciBub3cgdGhvdWdoLAotICAgICAgICAvLyB3ZSdsbCBqdXN0IHJlbHkgb24gdGhlIGZh
Y3QgdGhhdCB3aGVuIGEgd2F0Y2hwb2ludCBmaXJlcyB0aGVuIHRoYXQncwotICAgICAgICAvLyBx
dWl0ZSBhIGhpbnQgYWxyZWFkeS4KLQotICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5v
ZGUtPnN0cnVjdHVyZSgpKTsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSklUQ29t
cGlsZXI6Okp1bXAgaXNPSyA9IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKLSAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpFcXVhbCwgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhv
cDEuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAgICAgbm9k
ZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0gICAgICAgIGlz
T0subGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAgICAgc3BlY3VsYXRlQ2VsbChub2RlLT5jaGls
ZDEoKSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTog
ewogICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAg
ICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRy
YW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJ
KHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzExNSw3ICszMTE1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZQogICAgIFN0cnVjdHVyZSogc3RyaW5nT2Jq
ZWN0U3RydWN0dXJlID0KICAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAgIAotICAg
IGlmICghbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vi
c2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKSB7CisgICAgaWYgKCFt
X3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQo
c3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAg
ICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAg
IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3AoKQoreworICAgIG1fc2V0
LmRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOworICAgIG1fc2V0Lm1fcG9pbnRlciA9
IHRvcFZhbHVlOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0
Y2hlZChHcmFwaCYgZ3JhcGgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhdChpKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBncmFwaC53YXRjaHBvaW50cygpLmFzc2VydElzV2F0Y2hlZChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgIH0KK30KKwordm9pZCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbG9iYmVyKCkKK3sKKyAgICAvLyBUaGUgcHJlbWlzZSBv
ZiB0aGlzIGFwcHJvYWNoIHRvIGNsb2JiZXJpbmcgaXMgdGhhdCBhbnl0aW1lIHdlIGludHJvZHVj
ZQorICAgIC8vIGEgd2F0Y2hhYmxlIHN0cnVjdHVyZSBpbnRvIGFuIGFic3RyYWN0IHZhbHVlLCB3
ZSB3YXRjaHBvaW50IGl0LiBZb3UgY2FuIGFzc2VydAorICAgIC8vIHRoYXQgdGhpcyBob2xkcyBi
eSBjYWxsaW5nIGFzc2VydElzV2F0Y2hlZCgpLgorICAgICAgICAKKyAgICBpZiAoaXNUb3AoKSkK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBpZiAobV9zZXQuaXNUaGluKCkpIHsKKyAg
ICAgICAgaWYgKCFtX3NldC5zaW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKG1fc2V0LnNpbmdsZVN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICAgICAgbWFrZVRvcFdoZW5UaGluKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIFN0cnVjdHVyZVNldDo6T3V0
T2ZMaW5lTGlzdCogbGlzdCA9IG1fc2V0LnN0cnVjdHVyZUxpc3QoKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAobGlzdC0+bGlzdCgp
W2ldLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKSB7CisgICAg
ICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb24oU3Ry
dWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKQoreworICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKCFtX3NldC5jb250YWlucyhmcm9tKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmICghbV9zZXQuYWRkKHRvKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChtX3NldC5zaXplKCkgPiBwb2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAg
bWFrZVRvcCgpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFkZChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmICghbV9zZXQuYWRkKHN0cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGltaXQpCisg
ICAgICAgIG1ha2VUb3AoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorewor
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IG1lcmdlTm90VG9wKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpt
ZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKK3sKKyAgICBpZiAoaXNU
b3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChvdGhlci5pc1RvcCgp
KSB7CisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHJldHVybiBtZXJnZU5vdFRvcChvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2VOb3RUb3AoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
K3sKKyAgICBpZiAoIW1fc2V0Lm1lcmdlKG90aGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChtX3NldC5zaXplKCkgPiBwb2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAg
bWFrZVRvcCgpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQoreworICAgIGlm
IChpc1RvcCgpKQorICAgICAgICBtX3NldCA9IG90aGVyOworICAgIGVsc2UKKyAgICAgICAgbV9z
ZXQuZmlsdGVyKG90aGVyKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgaWYgKG90aGVy
LmlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmaWx0ZXIob3RoZXIubV9zZXQp
OworfQorCituYW1lc3BhY2UgeworCitjbGFzcyBDb25mb3Jtc1RvVHlwZSB7CitwdWJsaWM6Cisg
ICAgQ29uZm9ybXNUb1R5cGUoU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5cGUo
dHlwZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZyb21TdHJ1
Y3R1cmUoc3RydWN0dXJlKSAmIG1fdHlwZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBTcGVjdWxh
dGVkVHlwZSBtX3R5cGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgdHlwZSkKK3sKKyAg
ICBpZiAoISh0eXBlICYgU3BlY0NlbGwpKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBDb25mb3Jtc1RvVHlwZSBjb25mb3Jtc1RvVHlwZSh0eXBlKTsKKyAgICBtX3NldC5n
ZW5lcmljRmlsdGVyKGNvbmZvcm1zVG9UeXBlKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjpjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBpZiAo
aXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0LmNv
bnRhaW5zKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc1Rv
cCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fc2V0LmlzU3Vi
c2V0T2Yob3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0
T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KG90aGVyLmlzVG9wKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBp
c1N1YnNldE9mKG90aGVyLm1fc2V0KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojppc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBp
ZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0
LmlzU3VwZXJzZXRPZihvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
b3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoaXNU
b3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0Lm92ZXJs
YXBzKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyhj
b25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAob3Ro
ZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG92ZXJs
YXBzKG90aGVyLm1fc2V0KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVy
YXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAg
IGlmIChtX3NldC5tX3BvaW50ZXIgPT0gb3RoZXIubV9zZXQubV9wb2ludGVyKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXNUb3AoKSB8fCBvdGhlci5pc1RvcCgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fc2V0ID09IG90aGVyLm1fc2V0
OworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9w
KCkpCisgICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgZWxzZQorICAgICAgICBvdXQucHJp
bnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCAwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMzAwICszNywxMDggQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlIHsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkKLSAgICAgICAgOiBt
X3N0cnVjdHVyZSgwKQotICAgIHsKLSAgICB9Ci0gICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSgpIHsgfQogICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCi0gICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQorICAgICAgICA6IG1fc2V0KHN0
cnVjdHVyZSkKICAgICB7CiAgICAgfQotICAgIAotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUo
Y29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgICAgICA6IG1fc2V0KG90aGVyKQogICAgIHsKLSAg
ICAgICAgc3dpdGNoIChzZXQuc2l6ZSgpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc2V0WzBdOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1f
c3RydWN0dXJlID0gdG9wVmFsdWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAg
ICAgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmUg
PSAwOworICAgICAgICBtX3NldC5jbGVhcigpOwogICAgIH0KICAgICAKLSAgICB2b2lkIG1ha2VU
b3AoKQotICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSB0b3BWYWx1ZSgpOwotICAgIH0KKyAg
ICB2b2lkIG1ha2VUb3AoKTsKICAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSB0b3AoKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAg
ICAgICAgdmFsdWUubWFrZVRvcCgpOwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQorI2lm
IEFTU0VSVF9ESVNBQkxFRAorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Qg
eyB9CisjZWxzZQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CisjZW5k
aWYKICAgICAKLSAgICB2b2lkIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVCghY29udGFpbnMoc3RydWN0dXJlKSAmJiAhaXNUb3AoKSk7Ci0gICAgICAgIGlm
IChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgfQorICAgIHZvaWQgY2xvYmJl
cigpOworICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24oU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1
cmUqIHRvKTsKICAgICAKLSAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKLSAgICAg
ICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3Ro
ZXJbMF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIG1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAgIGJv
b2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHN0YXRp
YyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCiAgICAgewotICAgICAgICBpZiAoIW90aGVy
Lm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNU
b3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9w
KCkpIHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKG1f
c3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IHN0cnVjdHVyZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGJv
b2wgaXNDbGVhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
aXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3NldC5tX3BvaW50ZXIgPT0gdG9wVmFsdWU7IH0KKyAg
ICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xlYXIoKSAm
JiAhaXNUb3AoKTsgfQorICAgIGJvb2wgaXNGaW5pdGUoKSBjb25zdCB7IHJldHVybiAhaXNUb3Ao
KTsgfQogICAgIAotICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKTsKLSAgICB9Cisg
ICAgYm9vbCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwogICAgIAotICAgIGJvb2wgZG9lc05v
dENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOwotICAgIH0KKyAgICBib29sIG1lcmdlKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYg
b3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90
aGVyKTsKKyAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKICAgICAKLSAgICBi
b29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFvdGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KG90aGVyLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKLSAgICB9CisgICAgYm9vbCBjb250YWlucyhT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNv
bnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX3N0cnVj
dHVyZSkgewotICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Cisg
ICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0OworICAg
IGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29u
c3Q7CiAgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cikgY29uc3Q7CiAgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRP
ZigqdGhpcyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIHN3
aXRjaCAob3RoZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9
IG90aGVyWzBdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3RoZXIuY29udGFpbnMobV9zdHJ1
Y3R1cmUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgbV9zdHJ1Y3R1
cmUgPSAwOwotICAgIH0KKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3RoZXIpIGNvbnN0OwogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAg
ICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0
dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KLSAgICAK
LSAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlm
ICghKG90aGVyICYgU3BlY0NlbGwpKSB7Ci0gICAgICAgICAgICBjbGVhcigpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDbGVhck9yVG9w
KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCEoc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlKG1fc3RydWN0dXJlKSAmIG90aGVyKSkKLSAgICAgICAgICAgIG1fc3RydWN0dXJl
ID0gMDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhbV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNUb3AoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA9PSB0b3BWYWx1ZSgpOyB9Ci0gICAgCi0gICAgYm9v
bCBpc0NsZWFyT3JUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA8PSB0b3BWYWx1ZSgp
OyB9Ci0gICAgYm9vbCBpc05laXRoZXJDbGVhck5vclRvcCgpIGNvbnN0IHsgcmV0dXJuICFpc0Ns
ZWFyT3JUb3AoKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAg
IHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAgICAgcmV0dXJuICEhbV9zdHJ1Y3R1
cmU7CisgICAgICAgIHJldHVybiBtX3NldC5zaXplKCk7CiAgICAgfQogICAgIAogICAgIFN0cnVj
dHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlzVG9wKCkp
OwotICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKGks
ICFpKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4gbV9zZXQu
YXQoaSk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXplX3QgaSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChpKTsKLSAgICB9CisgICAgU3RydWN0dXJl
KiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIAotICAg
IFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBhbGwgdXNl
cyBvZiB0aGlzIG1ldGhvZC4gVGhlcmUgc2hvdWxkbid0IGJlIGFueQorICAgIC8vIHNwZWNpYWwt
Y2FzaW5nIGZvciB0aGUgb25lLXN0cnVjdHVyZSBjYXNlLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICBTdHJ1Y3R1cmUqIG9ubHlTdHJ1
Y3R1cmUoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkgfHwgc2l6ZSgpICE9IDEp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGF0KDApOwogICAg
IH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIFNw
ZWNDZWxsOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAgICAgICAgcmV0dXJuIFNwZWNO
b25lOwotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJl
KTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ZhbGlkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpOwotICAgIH0K
KyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0
OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIGJvb2wgaGFz
U2luZ2xldG9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc05laXRoZXJDbGVhck5v
clRvcCgpOwotICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmUqIHNpbmdsZXRvbigpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQoaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKSk7Ci0gICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOwotICAgIH0KK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0b3BWYWx1ZSA9IFN0cnVjdHVyZVNldDo6cmVzZXJ2
ZWRWYWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcG9seW1vcnBoaXNtTGltaXQgPSAx
MDsKICAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENv
bnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgdm9pZCBtYWtlVG9wV2hlblRoaW4oKQogICAgIHsK
LSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludCgiVE9QIik7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG91dC5wcmlu
dCgiWyIpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBvdXQucHJpbnQo
aW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwotICAgICAgICBvdXQucHJpbnQoIl0i
KTsKKyAgICAgICAgQVNTRVJUKG1fc2V0LmlzVGhpbigpKTsKKyAgICAgICAgbV9zZXQubV9wb2lu
dGVyID0gdG9wVmFsdWU7CiAgICAgfQotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Ci0gICAgewotICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQogICAgIAotICAgIC8vIE5CLiBUaGlzIG11c3Qg
aGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICBib29sIG1lcmdlTm90VG9wKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpOwogICAgIAotICAgIC8vIFRoaXMgY2FuIG9ubHkgcmVtZW1iZXIg
b25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCi0gICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAg
ICBTdHJ1Y3R1cmVTZXQgbV9zZXQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNr
SG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIxNSw4ICsyMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9j
aykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAgICAgICAgICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+Y2hpbGQxKCkubm9k
ZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0gR2V0TG9jYWwpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4NSwxMyArMjg0LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJp
YWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZh
cmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICAgICAgfQpAQCAtMzMxLDcgKzMyMyw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAg
ICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNl
dDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKQEAgLTM4NiwxMyArMzc3LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVD
aGVja0FjY291bnRpbmdGb3JBcnJheU1vZGUodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9k
ZS0+Y2hpbGQxKCkgIT0gc291cmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVja0FjY291bnRpbmdGb3JBcnJheU1vZGUodmFyaWFi
bGUsIHN1Yk5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJO
b2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1
Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CitwdWJsaWM6Cisg
ICAgV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZShHcmFwaCYgZ3JhcGgpCisgICAgICAg
IDogUGhhc2UoZ3JhcGgsICJ3YXRjaGFibGUgc3RydWN0dXJlIHdhdGNoaW5nIikKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8vIFRoZXNlIGFyZSBw
cmV0dHkgZHVtYiwgYnV0IG5lZWRlZCB0byBwbGFjYXRlIHN1YnNlcXVlbnQgYXNzZXJ0aW9ucy4g
V2UgY29uJ3QgYWN0dWFsbHkKKyAgICAgICAgLy8gaGF2ZSB0byB3YXRjaCB0aGVzZSBiZWNhdXNl
IHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc2l0aW9uIGF3YXkgZnJvbSBpdCwgYnV0IHRoZXkgYXJl
CisgICAgICAgIC8vIHdhdGNoYWJsZSBhbmQgc28gd2Ugd2lsbCBhc3NlcnQgaWYgdGhleSBhcmVu
J3Qgd2F0Y2hlZC4KKyAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5tX3ZtLnN0cmluZ1N0cnVjdHVy
ZS5nZXQoKSk7IAorICAgICAgICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVyU3Ry
dWN0dXJlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0lu
ZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAg
ICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSogbm9kZSA9IGJsb2Nr
LT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICAg
ICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNo
KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrRnVuY3Rp
b246CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmZ1bmN0aW9uKCkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9k
ZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgICAg
ICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld09i
amVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CisgICAgICAg
ICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHRyeVdh
dGNoKG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAg
ICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2Ug
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgY2FzZSBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKTsKKyAgICAgICAgICAgICAg
ICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRoaW5n
IGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3Mu
IERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxs
TGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFu
eSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0Lgor
ICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAgICAgICAgICAgICBjYXNlIE5l
d0FycmF5QnVmZmVyOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2Jh
bE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4
aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNhc2UgTmV3VHlwZWRBcnJheToKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+dHlwZWRBcnJheVN0cnVj
dHVyZShub2RlLT50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFRvU3RyaW5nOgor
ICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3Jh
cGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgICAgICAgICAgICAg
dHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+
cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9p
ZCB0cnlXYXRjaChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICAgICAgdHJ5V2F0Y2godmFsdWUuYXNDZWxsKCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHRyeVdhdGNoKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIGlmIChjZWxs
KQorICAgICAgICAgICAgdHJ5V2F0Y2goY2VsbC0+c3RydWN0dXJlKCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHRyeVdhdGNoKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIHRyeVdh
dGNoKHNldFtpXSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5V2F0Y2goU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCisgICAgeworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygp
LmFkZExhemlseShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgIH0K
K307CisKK2Jvb2wgcGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nKEdyYXBoJiBncmFw
aCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFdhdGNoYWJsZSBT
dHJ1Y3R1cmUgV2F0Y2hpbmciKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8V2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGlu
Z1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZV9oCisjZGVmaW5lIERGR1dh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7CisKKy8vIFNl
dCB3YXRjaHBvaW50cyBvbiBhbnkgc3RydWN0dXJlcyB0aGF0IHdlIGtub3cgb2YgdGhhdCBhcmUg
Y3VycmVudGx5IHdhdGNoYWJsZS4gSXQncworLy8gc29tZXdoYXQgY291bnRlcmludHVpdGl2ZSwg
YnV0IHRoaXMgZW5kcyB1cCBiZWluZyB0aGUgY2xlYW5lc3QgYW5kIG1vc3QgZWZmZWN0aXZlIHdh
eQorLy8gb2YgcmVkdWNpbmcgc3RydWN0dXJlIGNoZWNrcyBvbiB0ZXJtaW5hbCBzdHJ1Y3R1cmVz
OgorLy8KKy8vIC0gV2UgdXNlZCB0byBvbmx5IHNldCB3YXRjaHBvaW50cyBvbiB3YXRjaGFibGUg
c3RydWN0dXJlcyBpZiB3ZSBrbmV3IHRoYXQgdGhpcyB3b3VsZAorLy8gICByZW1vdmUgYSBzdHJ1
Y3R1cmUgY2hlY2suIEV4cGVyaW1lbnRzIHNob3cgdGhhdCBzd2l0Y2hpbmcgZnJvbSB0aGF0LCB0
byBibGluZGx5CisvLyAgIHNldHRpbmcgd2F0Y2hwb2ludHMgb24gYWxsIHdhdGNoYWJsZSBzdHJ1
Y3R1cmVzLCB3YXMgbm90IGEgcmVncmVzc2lvbi4KKy8vCisvLyAtIEl0IG1ha2VzIGFic3RyYWN0
IGludGVycHJldGF0aW9uIGEgd2hvbGUgbG90IGVhc2llci4gV2UganVzdCBhc3N1bWUgdGhhdCB3
YXRjaGFibGUKKy8vICAgc3RydWN0dXJlcyBhcmUgdW5jbG9iYmVyYWJsZSB3aXRob3V0IGhhdmlu
ZyB0byBkbyBhbnkgb3RoZXIgbG9naWMuCisKK2Jvb2wgcGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlm
IC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hw
b2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDEzICsxMTksNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYWRkTGF6aWx5KGpzQ2FzdDxKU0Z1bmN0aW9uKj4obV9ub2RlLT5mdW5jdGlvbigp
KS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoCi0gICAgICAg
ICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAgICAgbV9ub2Rl
LT5jaGlsZDEoKS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCA/IEJhZFdlYWtDb25zdGFudENhY2hl
V2F0Y2hwb2ludCA6IEJhZENhY2hlV2F0Y2hwb2ludCwKLSAgICAgICAgICAgICAgICBtX25vZGUt
PnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFyaWFibGVXYXRjaHBvaW50OgogICAg
ICAgICAgICAgYWRkTGF6aWx5KG1fbm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCkpOwogICAg
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgQml0
TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgot
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDkgKzM5
OSw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAg
ICBjb21waWxlQ2hlY2tTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgY29tcGlsZVN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrRnVuY3Rpb24o
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTYwOSwxMiArMTYwNiw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpCi0gICAg
ewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKG1fbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAg
ICBzcGVjdWxhdGVDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgIH0KLSAgICAKICAgICB2b2lk
IGNvbXBpbGVDaGVja0Z1bmN0aW9uKCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93
Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKQEAgLTMyMDcsNyArMzE5OCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAg
IG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTMyNzksNyArMzI3MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVh
dGlvbik7Ci0gICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgIHNwZWN1bGF0ZShC
YWRDYWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAg
IG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTQ3MTgsNyArNDcwOSw4IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgdm9pZCB0ZXJtaW5hdGUoRXhpdEtpbmQga2luZCkKICAgICB7Ci0gICAgICAgIHNw
ZWN1bGF0ZShraW5kLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAg
c3BlY3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOwor
ICAgICAgICBtX3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgIH0KICAgICAKICAgICB2b2lk
IHR5cGVDaGVjaygKQEAgLTU0NjMsNyArNTQ1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0cnVj
dHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0KICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJl
KCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVj
dHVyZSkpKQorICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fc3RydWN0dXJlLmlz
U3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKApJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gMTY5NDY3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjMgQEAKKzIwMTQtMDUtMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBBSSBzaG91bGQgYmUgYWJsZSB0cmFjayBzdHJ1Y3R1cmUgc2V0cyBsYXJnZXIg
dGhhbiAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MjgwNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRp
b24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1i
aW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRt
bDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9n
ZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxl
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qczogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanM6
IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFk
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzOiBBZGRlZC4KKwog
MjAxNC0wNS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtm
dGxvcHRdIERGRzo6Y2xvYmJlcml6ZSBzaG91bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMgb2Yg
R0MKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1i
eS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0
aW9uLXNpbXBsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1w
bGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nZXQt
YnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24tc2ltcGxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1w
bGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlk
LWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24tc2ltcGxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hl
Y2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0
LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnkt
aWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0
cnVjdHVyZS1lbGltaW5hdGlvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQt
Y2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnkt
aWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1i
eS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBo
aWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dl
dC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLXNpbXBsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgewor
ICAgIHZhciBvID0ge2E6MX07CisgICAgdmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAg
ICByZXN1bHQgXj0gby5hOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7Cisg
ICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBv
ID0ge2E6MSwgYjoyLCBjOjMsIGQ6NCwgZTo1LCBmOjYsIGc6NywgaDo4LCBpOjksIGo6MTAsIGs6
MTF9OworICAgIHZhciBwID0ge2E6MiwgYjozLCBjOjQsIGQ6NSwgZTo2LCBmOjcsIGc6OCwgaDo5
LCBpOjEwLCBqOjExLCBrOjEyLCBsOjEzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICByZXN1bHQgKz0gby5hIF4g
by5iIF4gby5jIF4gby5kIF4gby5lIF4gby5mIF4gby5nIF4gby5oIF4gby5pIF4gby5qIF4gby5r
OworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7
CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gNjUwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0
LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIG8gPSB7YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3LCBo
OjgsIGk6OSwgajoxMCwgazoxMX07CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIgfCBv
LmMgXiBvLmQgJiBvLmUgXiBvLmYgfCBvLmcgXiBvLmggJiBvLmkgXiBvLmogfCBvLms7CisgICAg
aWYgKHJlc3VsdCAhPSAxNTAwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
c2ltcGxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2lt
cGxlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1w
bGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNyBAQAorKGZ1bmN0aW9uKCkgeworICAg
IHZhciBvID0ge2E6MX07CisgICAgdmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcSA9IHth
OjMsIGI6M307CisgICAgdmFyIHIgPSB7YTo0LCBjOjV9OworICAgIHZhciByZXN1bHQgPSAwOwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCBe
PSBvLmE7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9
IHE7CisgICAgICAgIHEgPSByOworICAgICAgICByID0gdG1wOworICAgIH0KKyAgICBpZiAocmVz
dWx0ICE9IDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
K30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232304</attachid>
            <date>2014-05-30 14:35:35 -0700</date>
            <delta_ts>2014-06-01 10:50:25 -0700</delta_ts>
            <desc>using a slightly more complicated approach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>142480</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMSBA
QAorMjAxNC0wNS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGludGVycHJldGVy
KSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVyZToKKyAgICAg
ICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRyYWNrIGFuIGFy
Yml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAgICAgICBzaXpl
IGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhhdmUgYW55IG9m
IHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdoaWNoIC0gYnV0
IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3QgaW4gdGhlIHNl
dC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBzdGlsbCBiZSBU
T1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisgICAgICAgICAg
YXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBleHBsb3Npb24g
b24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91Z2ggdGhhdCBp
dCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBzaW5jZSB3ZSBo
YXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAg
c3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0byBrbm93IGFi
b3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBvaW50cyBvbiBh
bGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQKKyAgICAgICAg
ICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoYXQgdGhlIHdh
dGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGlzIGFsbG93cyB0
cmFja2luZyBvZiB3YXRjaGFibGUgc3RydWN0dXJlcyB0byBiZSBmYXIgc2ltcGxlciB0aGFuIGJl
Zm9yZS4gUHJldmlvdXNseSwKKyAgICAgICAgICBhIHN0cnVjdHVyZSBiZWluZyB0cmFja2VkIGFz
ICJmdXR1cmUgcG9zc2libGUiIHdhcyBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIHdhdGNoYWJsZSBi
dXQKKyAgICAgICAgICB3ZSBtaWdodCBub3QgYWN0dWFsbHkgd2F0Y2ggaXQuIFRoaXMgbWFrZXMg
YWxnZWJyYSBvdmVyIHNldHMgb2YgZnV0dXJlIHBvc3NpYmxlCisgICAgICAgICAgc3RydWN0dXJl
cyBxdWl0ZSB3ZWlyZC4gQnV0IHdhdGNoaW5nIGFsbCB3YXRjaGFibGUgc3RydWN0dXJlcyBtZWFu
cyB0aGF0IHdlIHNpbXBsZSBzYXkKKyAgICAgICAgICB0aGF0IGEgc3RydWN0dXJlIHNldCBjYW4g
YmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6IHVuY2xvYmJlcmVkLCB3aGljaCBtZWFucyBpdCdz
IGp1c3QKKyAgICAgICAgICBhIHNldCBvZiBzdHJ1Y3R1cmVzIGFuZCBpdCBkb2Vzbid0IG1hdHRl
ciB3aGF0IGlzIHdhdGNoYWJsZSBvciB3aGF0IGlzbid0IGJlY2F1c2Ugd2UndmUKKyAgICAgICAg
ICBwcm92ZW4gdGhhdCB0aGUgdmFsdWUgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVz
IHJpZ2h0IG5vdzsgYW5kIGNsb2JiZXJlZCwgd2hpY2gKKyAgICAgICAgICBtZWFucyB0aGF0IHdl
IGhhdmUgYSBzZXQgb2Ygc3RydWN0dXJlcywgcGx1cyBhbGwgcG9zc2libGUgc3RydWN0dXJlcyB0
ZW1wb3JhcmlseSwgd2l0aAorICAgICAgICAgIGludmFsaWRhdGlvbiByZW1vdmluZyB0aGUgInBs
dXMgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMiLiBDbG9iYmVyaW5nIGEgc2V0IG1lYW5zIHRoYXQK
KyAgICAgICAgICBpZiBhbnkgb2YgaXRzIHN0cnVjdHVyZXMgYXJlIHVud2F0Y2hhYmxlLCB0aGUg
c2V0IGp1c3QgYmVjb21lcyBUT1A7IGJ1dCBpZiBhbGwKKyAgICAgICAgICBzdHJ1Y3R1cmVzIGlu
IHRoZSBzZXQgYXJlIHdhdGNoYWJsZSB0aGVuIHdlIGp1c3Qgc2V0IHRoZSBjbG9iYmVyZWQgYml0
IHRvIGFkZCB0aGUgInBsdXMKKyAgICAgICAgICBhbGwgcG9zc2libGUgc3RydWN0dXJlcyB0ZW1w
b3JhcmlseSIgdGhpbmcuIFRoaXMgcHJlY2lzZWx5IHRyYWNrcyB0aGUgZXhhY3QgbWVhbmluZyBv
ZgorICAgICAgICAgIHdhdGNoYWJpbGl0eSBhbmQgaW52YWxpZGF0aW9uIHBvaW50cy4KKyAgICAg
ICAgCisgICAgICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpjbGVhcik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9tKToK
KyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpTdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmlzRW1w
dHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmdlbmVyaWNGaWx0ZXIpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpDb250YWluc091dE9mTGlu
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmRlbGV0ZVN0cnVjdHVyZUxpc3RJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2V0RW1wdHkpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6Ym9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFs
dWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNlcnZlVHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6
ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFy
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpub3JtYWxpemVDbGFyaXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6
Y2xvYmJlclN0cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6
Om9ic2VydmVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpU
cmFuc2l0aW9uT2JzZXJ2ZXI6OlRyYW5zaXRpb25PYnNlcnZlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc0hlYXBUb3ApOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1l
cmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aGFzQ2xvYmJlcmFibGVTdGF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YmVzdFByb3ZlblN0cnVjdHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR0FsbG9jYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQpOgorICAgICAgICAq
IGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZv
cm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OnN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjphc3NlcnRJc1dhdGNo
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXNzZXJ0SXNXYXRj
aGVkKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6On5HcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojpjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAg
ICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3Ry
YWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjppc05laXRoZXJDbGVhck5vclRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNGaW5pdGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
bmx5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjptYWtlVG9wV2hlblRoaW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6Om1ha2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhl
clRoYW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmlzU3VwZXJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjppc0NsZWFyT3JUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVy
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzVmFsaWRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6Omhhc1NpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1w
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjp0
b3BWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50
aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tzKToKKyAgICAgICAg
KiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJs
ZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OnBl
cmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6CisgICAgICAgICogZGZnL0RGR1dhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9p
bnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxh
dGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQu
CisKIDIwMTQtMDUtMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbZnRsb3B0XSBERkc6OmNsb2JiZXJpemUgc2hvdWxkIGJlIGJsaW5kIHRvIHRoZSBlZmZlY3Rz
IG9mIEdDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMsNyBAQAogCQkwRjgzMzVC
ODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0
M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZH
QnJhbmNoRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4ODVF
MTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyog
Qnl0ZWNvZGVVc2VEZWYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjg5M0JEQTE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5j
cHAgKi87IH07CiAJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkzMTcyRTA0
OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLzsgfTsKIAkJMEY4RjJCOTYxNzJFMDRBMzAwN0RC
REE1IC8qIEZUTExpbmsuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOEYyQjk0MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTkxNzJGMDRGRjAw
N0RCREE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZH
RGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLzsgfTsKQEAgLTQ5NSw2ICs0OTYsOCBAQAogCQkwRkNF
RkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8q
IEZUTExvY2F0aW9uLmNwcCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0IC8qIEZU
TExvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2RDAxRUU5MDBD
NzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlu
bGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkwRkQyRDRGRTE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkQyRDRGQzE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5jcHAgKi87IH07CisJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZE
M0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4
MTQxMTVENEYwMEZEODFDQiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2
ZXIuaCAqLzsgfTsKIAkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFB
Q0YxNTRGQjRFQjAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovOyB9OwpAQCAtMjE2MCw2
ICsyMTYzLDcgQEAKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIw
QzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR0JyYW5jaERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERp
cmVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg4NUUxMDE4NDlBM0JF
MDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQnl0ZWNvZGVVc2VEZWYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4
OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5jcHA7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExM
aW5rLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExp
bmsuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3
REJEQTUgLyogRlRMTGluay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwv
RlRMTGluay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NzE3MkYwNEZE
MDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZp
ZXJzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMTMsNiArMjMxNyw4IEBA
CiAJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExMb2NhdGlvbi5jcHA7IHBhdGggPSBmdGwv
RlRMTG9jYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFERTE4
MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gRlRMTG9jYXRpb24uaDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0
dXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZDMTkyRkVFNTgw
MEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhh
c2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDRGRDE5MkZFRTU4MDBB
MTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
Lmg7IHBhdGggPSBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZH
RHJpdmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZl
ci5jcHA7IHBhdGggPSBkZmcvREZHRHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZEM0M4MjIxNDExNUQwRTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUz
IC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4MDYsNiArNDgxMiw3IEBACiAJ
CQkJMkFDQ0YzREQxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFz
ZS5oICovLAogCQkJCTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3Ry
ZW5ndGhSZWR1Y3Rpb25QaGFzZS5oICovLAorCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAv
KiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3
MDA2QTU5N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAogCQkJCTBGMkZDQ0Y3
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCAqLywKIAkJCQkwRjJGQ0NGODE4
QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5oICovLApAQCAtNDgzOCw2ICs0ODQ1LDgg
QEAKIAkJCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVh
bS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0
ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkQyRDRGQzE5
MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAg
Ki8sCisJCQkJMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZH
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDOTdGM0MxODIwMjExOTAw
MkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkRCMkNF
NTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovLApAQCAtNTc3Niw2ICs1Nzg1
LDcgQEAKIAkJCQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3Zl
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExD
YXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTIzMTcwOTYwNjkwMEJCNzIy
QyAvKiBGVExDb21tb25WYWx1ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDJENEZGMTkyRkVF
NTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUM5MjJCQzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRM
RFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTYsNiArNjk2Niw3IEBA
CiAJCQkJMEZGMEYxOTkxNkI3MjlGNjAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3NjdCNUI1MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJl
SGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCREM0RDE1MjI4
MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RDJENEZFMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzc4MTBEMTc5OUVBMkUwMDgxNzUzMyAvKiBE
RkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAw
NURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUy
QzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTcxNzQsNiAr
NzE4NSw3IEBACiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2
YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFBMTdCRURCRDMwMDdDQjYzQSAvKiBK
U1Byb21pc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMjIxN0JFRTI0MDAwN0NCNjNB
IC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODkzQkRC
MTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJl
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4NkY4QTkzMDA5NTVDMjQgLyogSlNQ
cm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFFMTdCRUUyMkUw
MDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkocmV2
aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgU3RydWN0dXJlU2V0JiBT
dHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPShjbwogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKIHsK
ICAgICBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBzZXQoMCwgdHJ1ZSk7
CisgICAgc2V0RW1wdHkoKTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmVTZXQ6OmFkZChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6OnJlbW92ZShT
dHJ1Y3R1cmUqIHN0cgogewogICAgIGlmIChpc1RoaW4oKSkgewogICAgICAgICBpZiAoc2luZ2xl
U3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBzZXQoMCwgdHJ1ZSk7Cisg
ICAgICAgICAgICBzZXRFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODgsNyArODgsNyBAQCBib29sIFN0cnVjdHVy
ZVNldDo6cmVtb3ZlKFN0cnVjdHVyZSogc3RyCiAgICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxp
c3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKICAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0
aCkgewogICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAg
ICAgIHNldCgwLCB0cnVlKTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgIH0KICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTQ0LDIzICsxNDQsOCBAQCB2b2lkIFN0cnVj
dHVyZVNldDo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgaWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5jb250YWluc091dE9mTGlu
ZShzaW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGNsZWFy
KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlz
dCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+
bV9sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlz
dC0+bGlzdCgpW2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0
KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYg
KCFsaXN0LT5tX2xlbmd0aCkKLSAgICAgICAgY2xlYXIoKTsKKyAgICBDb250YWluc091dE9mTGlu
ZSBjb250YWluc091dE9mTGluZShvdGhlcik7CisgICAgZ2VuZXJpY0ZpbHRlcihjb250YWluc091
dE9mTGluZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0OjpleGNsdWRlKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpCkBAIC0zMjMsOCArMzA4LDEwIEBAIGJvb2wgU3RydWN0dXJlU2V0Ojpjb250
YWluc091dE9mTGluZShTdHIKIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9tKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpCiB7Ci0gICAgaWYgKG90aGVyLmlzVGhpbigpKSB7CisgICAgaWYg
KG90aGVyLmlzVGhpbigpIHx8IG90aGVyLm1fcG9pbnRlciA9PSByZXNlcnZlZFZhbHVlKSB7Cisg
ICAgICAgIGJvb2wgdmFsdWUgPSBnZXRSZXNlcnZlZEZsYWcoKTsKICAgICAgICAgbV9wb2ludGVy
ID0gb3RoZXIubV9wb2ludGVyOworICAgICAgICBzZXRSZXNlcnZlZCh2YWx1ZSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDEx
ICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNwYWNlIERGRyB7CitjbGFzcyBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfQorCiBjbGFzcyBTdHJ1Y3R1cmVTZXQgewogcHVibGlj
OgogICAgIFN0cnVjdHVyZVNldCgpCiAgICAgewotICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAg
ICAgIHNldEVtcHR5KCk7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZVNldChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKQEAgLTY3LDcgKzcxLDEwIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlz
RW1wdHkoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlzVGhpbigpICYmICFzaW5nbGVT
dHJ1Y3R1cmUoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBpc1RoaW4oKSAmJiAhc2luZ2xlU3Ry
dWN0dXJlKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAgICAgICBBU1NFUlQobV9wb2lu
dGVyICE9IHJlc2VydmVkVmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAg
ICAKICAgICBib29sIGFkZChTdHJ1Y3R1cmUqKTsKQEAgLTc4LDYgKzg1LDI4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKICAgICB2b2lkIGV4Y2x1ZGUo
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1cmUoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBpZiAoZnVuY3RvcihzaW5nbGVT
dHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY2xlYXIo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgT3V0
T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChmdW5j
dG9yKGxpc3QtPmxpc3QoKVtpXSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKQorICAgICAgICAgICAgY2xl
YXIoKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNl
dCYpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpIGNvbnN0CiAgICAgewpAQCAtMTI0LDE1ICsxNTMsMzMgQEAgcHVibGljOgogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworICAgIAogICAgIHN0YXRpYyBjb25zdCB1
aW50cHRyX3QgdGhpbkZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2
ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gMzsKKyAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZsYWcgfCByZXNlcnZlZEZsYWc7CiAg
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVlID0gNDsKIAogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0gNDsKICAgICAKICAgICBib29s
IGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNvbnRhaW5zT3V0T2ZMaW5lKFN0
cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIGNsYXNzIENvbnRhaW5zT3V0T2ZMaW5lIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFpbnNPdXRPZkxpbmUoc3RydWN0
dXJlKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgbV9zZXQ7CisgICAgfTsKKwogICAgIHZvaWQgY29weUZyb20oY29uc3QgU3RydWN0dXJlU2V0
Jik7CiAgICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7CkBAIC0xNTQsNyArMjAxLDcgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgp
CiAgICAgewotICAgICAgICBpZiAoIWlzVGhpbigpKQorICAgICAgICBpZiAoIWlzVGhpbigpICYm
IG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQogICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6
ZGVzdHJveShzdHJ1Y3R1cmVMaXN0KCkpOwogICAgIH0KICAgICAKQEAgLTE4NSwxMCArMjMyLDIy
IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
c3RydWN0dXJlcyksIGZhbHNlKTsKICAgICB9CisgICAgdm9pZCBzZXRFbXB0eSgpCisgICAgewor
ICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQogICAgIHZvaWQgc2V0KHVpbnRwdHJfdCBwb2lu
dGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIG1fcG9pbnRlciA9IHBv
aW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAwKSB8IChtX3BvaW50ZXIgJiBy
ZXNlcnZlZEZsYWcpOwogICAgIH0KKyAgICBib29sIGdldFJlc2VydmVkRmxhZygpIGNvbnN0IHsg
cmV0dXJuIG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZzsgfQorICAgIHZvaWQgc2V0UmVzZXJ2ZWRG
bGFnKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBt
X3BvaW50ZXIgfD0gcmVzZXJ2ZWRGbGFnOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3Bv
aW50ZXIgJj0gfnJlc2VydmVkRmxhZzsKKyAgICB9CiAKICAgICB1aW50cHRyX3QgbV9wb2ludGVy
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYg
KzExNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4
SW5CbG9jayk7CiAgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaXQs
IE5vZGUqKTsKICAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CkBAIC0xNDgsNyArMTQ5LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBj
bG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CiAg
ICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2ln
bmVkIGluZGV4SW5CbG9jaywgRnVuY3RvciYpOworICAgIAogICAgIHZvaWQgY2xvYmJlclN0cnVj
dHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9u
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKTsK
ICAgICAKICAgICBlbnVtIEJvb2xlYW5SZXN1bHQgewogICAgICAgICBVbmtub3duQm9vbGVhblJl
c3VsdCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDE3IEBAIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjoKICAgICB9CiAKICAgICAvLyBOZXh0IGNoZWNrIGlmIHdlIGNhbiBmb2xk
IGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0IG9yIHN0cmluZyBh
bmQgZG9lcyBub3QgZXF1YWwgdW5kZWZpbmVkLgotICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2
YWx1ZS5tX3R5cGUpCi0gICAgICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhh
c1NpbmdsZXRvbigpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmICghc3RydWN0dXJl
LT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS0+b3JpZ2luLnNlbWFudGljKSkKLSAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHlwZUluZm8o
KS50eXBlKCkgIT0gU3RyaW5nVHlwZSkKKyAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUu
bV90eXBlKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkgeworICAgICAgICBib29sIGFs
bFRydWUgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVy
ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFs
dWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5tYXNxdWVyYWRl
c0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKSkKKyAgICAgICAgICAgICAgICB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgp
ID09IFN0cmluZ1R5cGUpIHsKKyAgICAgICAgICAgICAgICBhbGxUcnVlID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGFsbFRydWUpCiAgICAgICAgICAgICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQogICAg
IApAQCAtMTA1LDkgKzExMSwxOCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRnZShOb2RlKiwg
RWRnZSBlZGdlKQordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
dmVyaWZ5RWRnZShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
IShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSkp
OworICAgIGlmICghKGZvck5vZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51
c2VLaW5kKCkpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0YXJ0Q3Jhc2hpbmcoKTsK
KyAgICBkYXRhTG9nKCJFZGdlIHZlcmlmaWNhdGlvbiBlcnJvcjogIiwgbm9kZSwgIi0+IiwgZWRn
ZSwgIiB3YXMgZXhwZWN0ZWQgdG8gaGF2ZSB0eXBlICIsIFNwZWN1bGF0aW9uRHVtcCh0eXBlRmls
dGVyRm9yKGVkZ2UudXNlS2luZCgpKSksICIgYnV0IGhhcyB0eXBlICIsIFNwZWN1bGF0aW9uRHVt
cChmb3JOb2RlKGVkZ2UpLm1fdHlwZSksICJcbiIpOworICAgIGRhdGFMb2coIiAgICBGdWxsIHZh
bHVlOiAiLCBmb3JOb2RlKGVkZ2UpLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRh
dGFMb2coIkdyYXBoIGF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgIG1fZ3JhcGguZHVtcCgp
OworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVu
YW1lIEFic3RyYWN0U3RhdGVUeXBlPgpAQCAtMTQ1Niw3ICsxNDcxLDEyIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGlj
dGlvbigpKSkgewotICAgICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAv
LyBUaGlzIHVzZSBvZiBvbmx5U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmlu
ZyBHZXRCeUlkU3RhdHVzIHRoZSBhYmlsaXR5CisgICAgICAgICAgICAvLyB0byBjb21wdXRlIHRo
aW5ncyBiYXNlZCBvbiBhIFN0cnVjdHVyZVNldCwgYW5kIHRoZW4gdG8gZmFjdG9yIEJ5dGVDb2Rl
UGFyc2VyJ3MKKyAgICAgICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBv
biBhIEdldEJ5SWRTdGF0dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAgICAg
ICAgIC8vIENvbnN0YW50Rm9sZGluZ1BoYXNlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgICAg
ICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0
cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVz
IHN0YXR1cyA9IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV92bSwgc3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlk
ZW50aWZpZXJzKClbbm9kZS0+aWRlbnRpZmllck51bWJlcigpXSk7CkBAIC0xNDY2LDkgKzE0ODYs
MTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKTsK
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXNbMF0uY2hhaW4oKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLnNwZWNpZmlj
VmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVl
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNWYWx1
ZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAg
ICAgICAgICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdGF0dXNbMF0uc3RydWN0
dXJlU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTE1MDIsOCArMTUyNywxMiBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVCgh
KHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2
ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5v
ZGUtPnN0cnVjdHVyZVNldCgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgaW50
ZXJlc3RpbmcgdGhhdCB3ZSBjb3VsZCBoYXZlIHByb3ZlbiB0aGF0IHRoZSBvYmplY3QgaGFzIGEg
bGFyZ2VyIHN0cnVjdHVyZSBzZXQKKyAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdl
J3JlIHRlc3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hl
Y2sKKyAgICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KKyAgICAg
ICAgCisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAg
ICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpAQCAtMTUxMSwzMyArMTU0MCwxNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7
CiAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAKLSAgICAgICAgLy8g
SWYgdGhpcyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2Ug
YWxyZWFkeSBoZWxkIGluCi0gICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBz
ZXQgdGhlbiB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKLSAgICAgICAgLy8gdHVy
biB0aGlzIGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIGlmICh2YWx1ZS5tX2Z1
dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgJiYgdmFs
dWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAg
ICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGZpbHRlcih2
YWx1ZSwgdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1
cmUoKSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAg
ICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVy
ZToKLSAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5pc0NsZWFyKCkpIHsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2Ji
ZXJMaW1pdCk7CisgICAgICAgIGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1
cmUuaXNDbGVhcigpKSB7CisgICAgICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbigKKyAgICAgICAg
ICAgICAgICBjbG9iYmVyTGltaXQsCisgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwKKyAgICAgICAgICAgICAgICBub2RlLT5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0
dXJlcyh0cnVlKTsKICAgICAgICAgfQpAQCAtMTYxNiwxMyArMTYyOSwzOSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KQotICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihT
dHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZpbHRlcih2
YWx1ZSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGhhdmUgYSBidW5jaCBvZiBvcHRp
b25zIG9mIGhvdyB0byBleHByZXNzIHRoZSBhYnN0cmFjdCBzZXQgYXQgdGhpcyBwb2ludC4gTGV0
IHNldCBTCisgICAgICAgIC8vIGJlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0aGF0IHRoZSB2YWx1
ZSBoYWQgYmVmb3JlIGNsb2JiZXJpbmcgYW5kIGFzc3VtZSB0aGF0IGFsbCBvZgorICAgICAgICAv
LyB0aGVtIGFyZSB3YXRjaGFibGUuIFRoZSBuZXcgdmFsdWUgc2hvdWxkIGJlIHRoZSBsZWFzdCBl
eHByZXNzaWJsZSB1cHBlciBib3VuZCBvZiB0aGUKKyAgICAgICAgLy8gaW50ZXJzZWN0aW9uIG9m
ICJ2YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUo
KSIgYW5kICJ2YWx1ZXMKKyAgICAgICAgLy8gdGhhdCBoYXZlIHN0cnVjdHVyZSBpbiBTIHBsdXMg
YW55IHN0cnVjdHVyZSB0cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9tIFMiLiBBc3N1bWUgdGhhdAor
ICAgICAgICAvLyBub2RlLT5zdHJ1Y3R1cmUoKSBpcyBub3QgaW4gUyBidXQgaXQgaXMgdHJhbnNp
dGlvbi1yZWFjaGFibGUgZnJvbSBTLiBUaGVuIHdlIHdvdWxkCisgICAgICAgIC8vIGxpa2UgdG8g
c2F5IHRoYXQgdGhlIHJlc3VsdCBpcyAidmFsdWVzIHRoYXQgaGF2ZSBzdHJ1Y3R1cmUgPSBub2Rl
LT5zdHJ1Y3R1cmUoKSB1bnRpbAorICAgICAgICAvLyB3ZSBpbnZhbGlkYXRlIiwgYnV0IHRoZXJl
IGlzIG5vIHdheSB0byBleHByZXNzIHRoaXMgdXNpbmcgdGhlIEFic3RyYWN0VmFsdWUgc3ludGF4
LiBTbworICAgICAgICAvLyB3ZSBtdXN0IGNob29zZSBiZXR3ZWVuOgorICAgICAgICAvLworICAg
ICAgICAvLyAxKSAidmFsdWVzIHRoYXQgY3VycmVudGx5IGhhdmUgc3RydWN0dXJlID0gbm9kZS0+
c3RydWN0dXJlKCkiLiBUaGlzIGlzIGEgdmFsaWQKKyAgICAgICAgLy8gICAgc3VwZXJzZXQgb2Yg
dGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdhbnQsIGFuZCBpdCdzIHNwZWNpZmljIGVub3VnaCB0
byBzYXRpc2Z5IHRoZQorICAgICAgICAvLyAgICBwcmVjb25kaXRpb25zIG9mIHRoZSBhcnJheSBh
Y2Nlc3MgdGhhdCB0aGlzIGlzIGd1YXJkaW5nLiBJdCdzIGFsc28gc3BlY2lmaWMgZW5vdWdoCisg
ICAgICAgIC8vICAgIHRvIGFsbG93IHJlbGV2YW50IG9wdGltaXphdGlvbnMgaW4gdGhlIGNhc2Ug
dGhhdCB3ZSBkaWRuJ3QgaGF2ZSBhIGNvbnRyYWRpY3Rpb24KKyAgICAgICAgLy8gICAgbGlrZSBp
biB0aGlzIGV4YW1wbGUuIE5vdGljZSB0aGF0IGluIHRoZSBhYnNjZW5jZSBvZiBhbnkgY29udHJh
ZGljdGlvbiwgdGhpcyByZXN1bHQKKyAgICAgICAgLy8gICAgaXMgcHJlY2lzZSByYXRoZXIgdGhh
biBiZWluZyBhIGNvbnNlcnZhdGl2ZSBMVUIuCisgICAgICAgIC8vCisgICAgICAgIC8vIDIpICJ2
YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2YSBzdHJ1Y3R1cmUgaW4gUyBwbHVzIGFueSBzdHJ1Y3R1
cmUgdHJhbnNpdGlvbi1yZWFjaGFibGUKKyAgICAgICAgLy8gICAgZnJvbSBTIi4gVGhpcyBpcyBh
bHNvIGEgdmFsaWQgc3VwZXJzZXQgb2YgdGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdhbnQsIGJ1
dCBpdCdzCisgICAgICAgIC8vICAgIG5vdCBzcGVjaWZpYyBlbm91Z2ggdG8gc2F0aXNmeSB0aGUg
cHJlY29uZGl0aW9ucyBvZiB0aGUgYXJyYXkgYWNjZXNzIHRoYXQgdGhpcyBpcworICAgICAgICAv
LyAgICBndWFyZGluZyAtIHNvIHBsYXlpbmcgc3VjaCBzaGVuYW5pZ2FucyB3b3VsZCBwcmVjbHVk
ZSB1cyBmcm9tIGhhdmluZyBhc3NlcnRpb25zIG9uCisgICAgICAgIC8vICAgIHRoZSB0eXBpbmcg
cHJlY29uZGl0aW9ucyBvZiBhbnkgYXJyYXkgYWNjZXNzZXMuIFRoaXMgd291bGQgYWxzbyBub3Qg
YmUgYSBkZXNpcmFibGUKKyAgICAgICAgLy8gICAgYW5zd2VyIGluIHRoZSBhYnNlbmNlIG9mIGEg
Y29udHJhZGljdGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgdGVt
cHRpbmcgdG8gc2ltcGx5IHNheSB0aGF0IHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgQk9UVE9NIGJl
Y2F1c2Ugb2YKKyAgICAgICAgLy8gdGhlIGNvbnRyYWRpY3Rpb24uIFRoYXQgd291bGQgYmUgd3Jv
bmcsIHNpbmNlIHdlIGhhdmVuJ3QgaGl0IGFuIGludmFsaWRhdGlvbiBwb2ludCwKKyAgICAgICAg
Ly8geWV0LgorICAgICAgICB2YWx1ZS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwog
ICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0xNjUxLDcgKzE2OTAsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwp
KTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAK
LSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVj
dHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNh
c2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBhbGwKKyAgICAgICAg
Ly8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVuIHdlIHNob3VsZCBzdHJlbmd0aCBy
ZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCisgICAgICAgIC8vIEdldEJ5T2Zmc2V0Lgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5
CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlLm9u
bHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKQEAg
LTE2ODgsNyArMTczMSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdl
IGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAotICAgICAgICBp
ZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsK
KyAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0ZXIgZG93biB0aGUgY2FzZXMgaW4gTXVs
dGlQdXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGluIGVpdGhlcgorICAgICAgICAvLyBvbmUg
Y2FzZSwgb3Igbm90aGluZyBidXQgcmVwbGFjZSBjYXNlcyBhbmQgdGhleSBoYXZlIHRoZSBzYW1l
IG9mZnNldCwgdGhlbiB3ZSBzaG91bGQKKyAgICAgICAgLy8ganVzdCBzdHJlbmd0aCByZWR1Y2Ug
aXQgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9mIENoZWNrU3RydWN0dXJlLAorICAg
ICAgICAvLyBbUmVdQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIFB1dFN0cnVjdHVyZSwgYW5kIFB1
dEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1f
c3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFs
c2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50c1tpXTsKQEAgLTE3MjEsMTIgKzE3NjksMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgY29u
c3QgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpSZXBsYWNlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQuc3RydWN0dXJlKCkpKQorICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5jb250YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkK
ICAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFTU0VS
VCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbik7Ci0gICAgICAg
ICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuY29udGFp
bnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCiAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2
YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE3NjcsNyAr
MTgxNSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
Y2FzZSBQdXRCeUlkRmx1c2g6CiAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgogICAgICAgICBub2Rl
LT5zZXRDYW5FeGl0KHRydWUpOwotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAg
Ly8gVGhpcyB1c2Ugb2Ygb25seVN0cnVjdHVyZSgpIHNob3VsZCBiZSByZXBsYWNlZCBieSBnaXZp
bmcgUHV0QnlJZFN0YXR1cyB0aGUgYWJpbGl0eQorICAgICAgICAvLyB0byBjb21wdXRlIHRoaW5n
cyBiYXNlZCBvbiBhIFN0cnVjdHVyZVNldCwgYW5kIHRoZW4gdG8gZmFjdG9yIEJ5dGVDb2RlUGFy
c2VyJ3MKKyAgICAgICAgLy8gYWJpbGl0eSB0byBnZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgUHV0
QnlJZFN0YXR1cyBvdXQgb2YgQnl0ZUNvZGVQYXJzZXIgc28gdGhhdAorICAgICAgICAvLyBDb25z
dGFudEZvbGRpbmdQaGFzZSBjYW4gdXNlIGl0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1
cmUoKSkgewogICAgICAgICAgICAgUHV0QnlJZFN0YXR1cyBzdGF0dXMgPSBQdXRCeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92bSwKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLApAQCAt
MTc4MSw3ICsxODM0LDEwIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9u
KSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5raW5kKCkgPT0gUHV0QnlJZFZhcmlh
bnQ6OlRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChzdGF0dXNbMF0ubmV3U3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9p
bnRzKCkuYWRkTGF6aWx5KHN0YXR1c1swXS5uZXdTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2Ji
ZXJMaW1pdCk7CiAgICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNl
dChtX2dyYXBoLCBzdGF0dXNbMF0ubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAg
ICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwpAQCAtMTg1NSw2ICsxOTExLDcgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBj
YXNlIEludmFsaWRhdGlvblBvaW50OgogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwor
ICAgICAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0LCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZl
SW52YWxpZGF0aW9uUG9pbnRGb3IpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2hlY2tX
YXRjaGRvZ1RpbWVyOgpAQCAtMTk1NywzMiArMjAxNCw1OSBAQCB2b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xv
YmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xvYmJlckxpbWl0KQordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZv
ckFsbFZhbHVlcygKKyAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIEZ1bmN0b3ImIGZ1bmN0b3Ip
CiB7Ci0gICAgaWYgKCFtX3N0YXRlLmhhdmVTdHJ1Y3R1cmVzKCkpCi0gICAgICAgIHJldHVybjsK
ICAgICBpZiAoY2xvYmJlckxpbWl0ID49IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpKQogICAgICAg
ICBjbG9iYmVyTGltaXQgPSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKTsKICAgICBlbHNlCiAgICAg
ICAgIGNsb2JiZXJMaW1pdCsrOwogICAgIEFTU0VSVChjbG9iYmVyTGltaXQgPD0gbV9zdGF0ZS5i
bG9jaygpLT5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSBjbG9iYmVyTGltaXQ7IGktLTsp
Ci0gICAgICAgIGZvck5vZGUobV9zdGF0ZS5ibG9jaygpLT5hdChpKSkuY2xvYmJlclN0cnVjdHVy
ZXMoKTsKKyAgICAgICAgZnVuY3Rvcihmb3JOb2RlKG1fc3RhdGUuYmxvY2soKS0+YXQoaSkpKTsK
ICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+
OjppdGVyYXRvciBpdGVyID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4o
KTsKICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1fc3RhdGUuYmxvY2so
KS0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKLSAgICAgICAgICAgIGZvck5vZGUoKml0ZXIpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Cisg
ICAgICAgICAgICBmdW5jdG9yKGZvck5vZGUoKml0ZXIpKTsKICAgICB9CiAgICAgZm9yIChzaXpl
X3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKLSAg
ICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygp
OworICAgICAgICBmdW5jdG9yKG1fc3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoaSkpOwogICAg
IGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mTG9jYWxzKCk7IGkt
LTspCi0gICAgICAgIG1fc3RhdGUudmFyaWFibGVzKCkubG9jYWwoaSkuY2xvYmJlclN0cnVjdHVy
ZXMoKTsKKyAgICAgICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmxvY2FsKGkpKTsKICAg
ICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgIG1fc3RhdGUuc2V0RGlkQ2xv
YmJlcih0cnVlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Cit2
b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0
dXJlcyh1bnNpZ25lZCBjbG9iYmVyTGltaXQpCit7CisgICAgaWYgKCFtX3N0YXRlLmhhdmVTdHJ1
Y3R1cmVzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0
LCBBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlc0Zvcik7CisgICAgbV9zdGF0ZS5zZXRI
YXZlU3RydWN0dXJlcyhmYWxzZSk7CisgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46Om9ic2VydmVUcmFuc2l0aW9uKAorICAgIHVu
c2lnbmVkIGNsb2JiZXJMaW1pdCwgU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKQorewor
ICAgIGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQorICAgICAgICByZXR1cm47CisgICAg
QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyIHRyYW5zaXRpb25PYnNlcnZlcihmcm9t
LCB0byk7CisgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgdHJhbnNpdGlvbk9ic2VydmVy
KTsKKyAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGNvbnN0X2Nh
c3Q8QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT4qPih0aGlzKS0+ZHVtcChv
dXQpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTY5MjAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTIgKzM3LDEyIEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0TW9zdFNw
ZWNpZmljKEdyYXAKIHsKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsK
LSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHNl
dEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBzdHJ1Y3R1cmUpOworICAgICAgICBpZiAo
c3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAg
ICAgICAgZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9u
V2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigp
OwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
c3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAg
ICAgICAKQEAgLTUwLDE5ICs1MCwyMCBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVj
aWZpYyhHcmFwCiAgICAgbV92YWx1ZSA9IHZhbHVlOwogICAgICAgICAKICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFj
dFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghIXZh
bHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
Lm1ha2VUb3AoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAg
c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0g
YXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICBjbG9iYmVy
QXJyYXlNb2RlcygpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0
dXJlLmNsZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsK
KyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsK
ICAgICB9CiAgICAgCkBAIC03MCwxNyArNzEsMTggQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQo
R3JhcGgmIGdyYXBoLCBKUwogICAgIG1fdmFsdWUgPSB2YWx1ZTsKICAgICAKICAgICBjaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0
cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAg
ICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBzZXRGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZShncmFwaCwgc3RydWN0dXJlKTsKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSk7CiAgICAgbV90eXBlID0gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVy
ZSk7CiAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVl
OjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uKQpAQCAt
MTI5LDIxICsxMzEsMTggQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIo
RwogICAgIAogICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7
CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwot
ICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CisgICAgbV9zdHJ1Y3R1
cmUuZmlsdGVyKG90aGVyKTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3Ig
dG8gdGhlIGFib3ZlIHR3byBzdGF0ZW1lbnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAg
IC8vIEZvbyBpcyBhIFNwZWN1bGF0ZWRUeXBlIHRoYXQgaXMgZGlzam9pbnQgd2l0aCB0aGUgcGFz
c2VkIFN0cnVjdHVyZVNldC4gSW4gdGhhdAogICAgIC8vIGNhc2UsIHdlIHdpbGwgbm93IGhhdmUg
KE5vbmUsIFtzb21lU3RydWN0dXJlXSkuIEluIGdlbmVyYWwsIHdlIG5lZWQgdG8gbWFrZQogICAg
IC8vIHN1cmUgdGhhdCBuZXcgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVk
VHlwZSBuZWVkcyB0byBiZSBmZWQgYmFjawogICAgIC8vIGludG8gdGhlIGluZm9ybWF0aW9uIGds
ZWFuZWQgZnJvbSB0aGUgU3RydWN0dXJlU2V0LgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
LmZpbHRlcihtX3R5cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogICAgIAot
ICAgIGlmIChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAg
c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgsIG1fY3VycmVudEtub3duU3RydWN0dXJl
LnNpbmdsZXRvbigpKTsKLSAgICAgICAgCiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwog
ICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsK
KyAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eShncmFwaCk7CiB9CiAKIEZpbHRyYXRpb25SZXN1
bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFycmF5TW9kZXMp
CkBAIC0xNjksOCArMTY4LDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0
ZXIoUwogICAgIC8vIHRoZSBwYXNzZWQgdHlwZSBpcyBBcnJheS4gQXQgdGhpcyBwb2ludCB3ZSds
bCBoYXZlIChOb25lLCBUT1ApLiBUaGUgYmVzdCB3YXkKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0
aGUgc3RydWN0dXJlIGZpbHRlcmluZyBkb2VzIHRoZSByaWdodCB0aGluZyBpcyB0byBmaWx0ZXIg
b24KICAgICAvLyB0aGUgbmV3IHR5cGUgKE5vbmUpIHJhdGhlciB0aGFuIHRoZSBvbmUgcGFzc2Vk
IChBcnJheSkuCi0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7Ci0g
ICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKKyAgICBtX3N0cnVj
dHVyZS5maWx0ZXIodHlwZSk7CiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZp
bHRlclZhbHVlQnlUeXBlKCk7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKQEAgLTE4
NCwxNSArMTgyLDYgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeQog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAg
ICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBpZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxs
VmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKLSAgICAgICAgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBlbHNlCi0gICAgICAgIG1f
ZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwotfQotCiB2b2lkIEFic3RyYWN0VmFs
dWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBh
bmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVz
CkBAIC0yMzgsOCArMjI3LDcgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKCkg
Y29ucwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBpZiAoIShtX3R5cGUgJiB+U3Bl
Y0NlbGwpCi0gICAgICAgICYmICghbV9hcnJheU1vZGVzCi0gICAgICAgICAgICB8fCBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpKQorICAgICAgICAmJiAoIW1fYXJyYXlNb2RlcyB8
fCBtX3N0cnVjdHVyZS5pc0NsZWFyKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0yNjMsMTIgKzI1MSwxOCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFi
c3RyYWN0VmFsdWU6Om5vcm1hbGl6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpub3JtYWxpemVDbGFyaXR5KEdyYXBoJiBncmFwaCkKK3sK
KyAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBh
c3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKICNpZiAhQVNT
RVJUX0RJU0FCTEVECiB2b2lkIEFic3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25z
dAogewogICAgIGlmICghKG1fdHlwZSAmIFNwZWNDZWxsKSkgewotICAgICAgICBBU1NFUlQobV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKLSAgICAgICAgQVNTRVJUKG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJl
LmlzQ2xlYXIoKSk7CiAgICAgICAgIEFTU0VSVCghbV9hcnJheU1vZGVzKTsKICAgICB9CiAgICAg
CkBAIC0yODksNiArMjgzLDExIEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5j
eSgpIGMKICAgICAvLyB3ZSBkb24ndCB3YW50IHRvIGdldCBwZWRhbnRpYyBhYm91dCB0aGlzIGFz
IGl0IHdvdWxkIG9ubHkgaW5jcmVhc2UgdGhlIGNvbXB1dGF0aW9uYWwKICAgICAvLyBjb21wbGV4
aXR5IG9mIHRoZSBjb2RlLgogfQorCit2b2lkIEFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hl
ZChHcmFwaCYgZ3JhcGgpIGNvbnN0Cit7CisgICAgbV9zdHJ1Y3R1cmUuYXNzZXJ0SXNXYXRjaGVk
KGdyYXBoKTsKK30KICNlbmRpZgogCiB2b2lkIEFic3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKQEAgLTMwMiw4ICszMDEsNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmR1
bXBJbkNvbnRleHQoUHJpbnRTCiAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAgICAgICAg
IG91dC5wcmludCgKICAgICAgICAgICAgICIsICIsIEFycmF5TW9kZXNEdW1wKG1fYXJyYXlNb2Rl
cyksICIsICIsCi0gICAgICAgICAgICBpbkNvbnRleHQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUs
IGNvbnRleHQpLCAiLCAiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUsIGNvbnRleHQpKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX3N0cnVjdHVyZSwg
Y29udGV4dCkpOwogICAgIH0KICAgICBpZiAoISFtX3ZhbHVlKQogICAgICAgICBvdXQucHJpbnQo
IiwgIiwgaW5Db250ZXh0KG1fdmFsdWUsIGNvbnRleHQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsOCArNTMsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAg
ICBtX3R5cGUgPSBTcGVjTm9uZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKLSAgICAgICAg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAg
ICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAg
fQpAQCAtNzUsMTUgKzc0LDU3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIGNs
b2JiZXJTdHJ1Y3R1cmVzKCkKICAgICB7CiAgICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkg
ewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUuY2xvYmJlcigpOwogICAgICAgICAgICAgY2xvYmJlckFycmF5TW9k
ZXMoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlz
Q2xlYXIoKSk7CiAgICAgICAgICAgICBBU1NFUlQoIW1fYXJyYXlNb2Rlcyk7CiAgICAgICAgIH0K
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCBjbG9iYmVyU3RydWN0dXJlc0ZvcihBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHZhbHVlLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgb2Jz
ZXJ2ZUludmFsaWRhdGlvblBvaW50KCkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlLm9ic2Vy
dmVJbnZhbGlkYXRpb25Qb2ludCgpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcihBYnN0
cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZhbHVlLm9ic2VydmVJbnZhbGlkYXRp
b25Qb2ludCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFN0cnVj
dHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBT
cGVjQ2VsbCkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb24oZnJv
bSwgdG8pOworICAgICAgICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRpb24oZnJvbS0+
aW5kZXhpbmdUeXBlKCksIHRvLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICAKKyAgICBjbGFzcyBUcmFuc2l0aW9uT2Jz
ZXJ2ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNpdGlvbk9ic2VydmVyKFN0cnVjdHVy
ZSogZnJvbSwgU3RydWN0dXJlKiB0bykKKyAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAg
ICAgICAgICAsIG1fdG8odG8pCisgICAgICAgIHsKKyAgICAgICAgfQogICAgICAgICAKKyAgICAg
ICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgICAgICB7CisgICAg
ICAgICAgICB2YWx1ZS5vYnNlcnZlVHJhbnNpdGlvbihtX2Zyb20sIG1fdG8pOworICAgICAgICB9
CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3RydWN0dXJlKiBtX2Zyb207CisgICAgICAgIFN0cnVj
dHVyZSogbV90bzsKKyAgICB9OworICAgIAogICAgIHZvaWQgY2xvYmJlclZhbHVlKCkKICAgICB7
CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC05MSw3ICsxMzIsMTAgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIGJvb2wgaXNIZWFwVG9wKCkgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZSAmJiBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5pc1RvcCgpICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUu
aXNUb3AoKTsKKyAgICAgICAgcmV0dXJuIChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90eXBl
CisgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZS5pc1RvcCgpCisgICAgICAgICAgICAmJiBtX2Fy
cmF5TW9kZXMgPT0gQUxMX0FSUkFZX01PREVTCisgICAgICAgICAgICAmJiAhbV92YWx1ZTsKICAg
ICB9CiAgICAgCiAgICAgYm9vbCB2YWx1ZUlzVG9wKCkgY29uc3QKQEAgLTExOCwxMiArMTYyLDEw
IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIHNldFR5cGUoU3BlY3VsYXRlZFR5
cGUgdHlwZSkKICAgICB7CiAgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAg
ICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
bWFrZVRvcCgpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xl
YXIoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMg
PSAwOwogICAgICAgICB9CiAgICAgICAgIG1fdHlwZSA9IHR5cGU7CkBAIC0xMzgsOCArMTgwLDcg
QEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHlwZSA9
PSBvdGhlci5tX3R5cGUKICAgICAgICAgICAgICYmIG1fYXJyYXlNb2RlcyA9PSBvdGhlci5tX2Fy
cmF5TW9kZXMKLSAgICAgICAgICAgICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlID09IG90aGVy
Lm1fY3VycmVudEtub3duU3RydWN0dXJlCi0gICAgICAgICAgICAmJiBtX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlID09IG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUKKyAgICAgICAgICAg
ICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlCiAgICAgICAgICAgICAmJiBtX3Zh
bHVlID09IG90aGVyLm1fdmFsdWU7CiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBB
YnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKQEAgLTE2Miw4ICsyMDMsNyBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVy
Z2VTcGVjdWxhdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CiAgICAgICAgICAgICByZXN1bHQg
fD0gbWVyZ2VBcnJheU1vZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJheU1vZGVzKTsKLSAg
ICAgICAgICAgIHJlc3VsdCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5hZGRBbGwob3RoZXIu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmVzdWx0IHw9IG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUp
OworICAgICAgICAgICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLm1lcmdlKG90aGVyLm1fc3RydWN0
dXJlKTsKICAgICAgICAgICAgIGlmIChtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWUpIHsKICAgICAg
ICAgICAgICAgICByZXN1bHQgfD0gISFtX3ZhbHVlOwogICAgICAgICAgICAgICAgIG1fdmFsdWUg
PSBKU1ZhbHVlKCk7CkBAIC0xNzksOCArMjE5LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewog
ICAgICAgICBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwgdHlwZSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAodHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1h
a2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgICAg
IG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICAgICAgfQogICAgICAgICBtX3Zh
bHVlID0gSlNWYWx1ZSgpOwpAQCAtMjI1LDc1ICsyNjQsMzAgQEAgc3RydWN0IEFic3RyYWN0VmFs
dWUgewogICAgICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAg
ICAgQVNTRVJUKG1fdHlwZSAmIFNwZWNDZWxsKTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgcmV0dXJu
IG1fY3VycmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKLSAgICAgICAgICAg
ICAgICAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKKyAg
ICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCiAgICAgICAg
ICAgICAgICAgJiYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIGJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKG1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
KQotICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
OwotICAgICAgICBpZiAobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkK
LSAgICAgICAgICAgIHJldHVybiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBoYXNDbG9iYmVyYWJs
ZVN0YXRlKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5pc05laXRoZXJDbGVhck5vclRvcCgpCisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5p
c05laXRoZXJDbGVhck5vclRvcCgpCiAgICAgICAgICAgICB8fCAhYXJyYXlNb2Rlc0FyZUNsZWFy
T3JUb3AobV9hcnJheU1vZGVzKTsKICAgICB9CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECiAg
ICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyB9CisgICAgdm9pZCBhc3NlcnRJc1dh
dGNoZWQoR3JhcGgmKSBjb25zdCB7IH0KICNlbHNlCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5
KCkgY29uc3Q7CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKICNlbmRp
ZgogICAgIAogICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0
KikgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAg
Ly8gQSBncmVhdCB3YXkgdG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZSBhbmQKLSAgICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
IGlzIHRvIGNvbnNpZGVyIHRoZXNlIGZvdXIgZXhhbXBsZXM6Ci0gICAgLy8KLSAgICAvLyAxKSB4
ID0gZm9vKCk7Ci0gICAgLy8KLSAgICAvLyAgICBJbiB0aGlzIGNhc2UgeCdzIG1fY3VycmVudEtu
b3duU3RydWN0dXJlIGFuZCBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwKLSAgICAvLyAg
ICBib3RoIGJlIFRPUCwgc2luY2Ugd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB4IGZvciBz
dXJlLCB5ZXQuCi0gICAgLy8KLSAgICAvLyAyKSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHgu
ZjsKLSAgICAvLwotICAgIC8vICAgIFdoZXJlIHggd2lsbCBsYXRlciBoYXZlIGEgbmV3IHByb3Bl
cnR5IGFkZGVkIHRvIGl0LCAnZycuIEJlY2F1c2Ugb2YgdGhlCi0gICAgLy8gICAga25vd24gYnV0
IG5vdC15ZXQtZXhlY3V0ZWQgcHJvcGVydHkgYWRkaXRpb24sIHgncyBjdXJyZW50IHN0cnVjdHVy
ZSB3aWxsCi0gICAgLy8gICAgbm90IGJlIHdhdGNocG9pbnRhYmxlOyBoZW5jZSB3ZSBoYXZlIG5v
IHdheSBvZiBzdGF0aWNhbGx5IGJvdW5kaW5nIHRoZSBzZXQKLSAgICAvLyAgICBvZiBwb3NzaWJs
ZSBzdHJ1Y3R1cmVzIHRoYXQgeCBtYXkgaGF2ZSBpZiBhIGNsb2JiZXJpbmcgZXZlbnQgaGFwcGVu
cy4gU28sCi0gICAgLy8gICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIHdpbGwgYmUgd2hh
dGV2ZXIgc3RydWN0dXJlIHdlIGNoZWNrIHRvIGdldAotICAgIC8vICAgIHByb3BlcnR5ICdmJywg
YW5kIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBiZSBUT1AuCi0gICAgLy8KLSAgICAv
LyAzKSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLwotICAgIC8vICAgIFdo
ZXJlIHggaGFzIGEgdGVybWluYWwgc3RydWN0dXJlIHRoYXQgaXMgc3RpbGwgd2F0Y2hwb2ludGFi
bGUuIEluIHRoaXMgY2FzZSwKLSAgICAvLyAgICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUg
YW5kIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBib3RoIGJlCi0gICAgLy8gICAgd2hh
dGV2ZXIgc3RydWN0dXJlIHdlIGNoZWNrZWQgZm9yIHdoZW4gZ2V0dGluZyAnZicuCi0gICAgLy8K
LSAgICAvLyA0KSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLyAgICBiYXIo
KTsKLSAgICAvLwotICAgIC8vICAgIFdoZXJlIHggaGFzIGEgdGVybWluYWwgc3RydWN0dXJlIHRo
YXQgaXMgc3RpbGwgd2F0Y2hwb2ludGFibGUuIEluIHRoaXMKLSAgICAvLyAgICBjYXNlLCBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZSB3aWxsIGJlIFRPUCBiZWNhdXNlIGJhcigpIG1heSBwb3RlbnRp
YWxseQotICAgIC8vICAgIGNoYW5nZSB4J3Mgc3RydWN0dXJlIGFuZCB3ZSBoYXZlIG5vIHdheSBv
ZiBwcm92aW5nIG90aGVyd2lzZSwgYnV0Ci0gICAgLy8gICAgeCdzIG1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUgd2lsbCBiZSB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgaGFkIGNoZWNrZWQKLSAgICAv
LyAgICB3aGVuIGdldHRpbmcgcHJvcGVydHkgJ2YnLgotICAgIAotICAgIC8vIE5CLiBBbGwgZmll
bGRzIGluIHRoaXMgc3RydWN0IG11c3QgaGF2ZSB0cml2aWFsIGRlc3RydWN0b3JzLgotCiAgICAg
Ly8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhp
cyB2YWx1ZSBjYW4gaGF2ZSByaWdodAogICAgIC8vIG5vdy4gVGhlIHN0cnVjdHVyZSBvZiB0aGUg
Y3VycmVudCB2YWx1ZSBtdXN0IGJlbG9uZyB0byB0aGlzIHNldC4gVGhlIHNldCBtYXkKICAgICAv
LyBiZSBUT1AsIGluZGljYXRpbmcgdGhhdCBpdCBpcyB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBz
dHJ1Y3R1cmVzLCBpbiB3aGljaApAQCAtMzAxLDI5ICsyOTUsMTIgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgIC8vIGluIHdoaWNoIGNhc2UgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgYSBjZWxs
LiBUaGlzIGlzIGFsbCBzdWJqZWN0IHRvIGNoYW5nZQogICAgIC8vIGFueXRpbWUgYSBuZXcgdmFs
dWUgaXMgYXNzaWduZWQgdG8gdGhpcyBvbmUsIGFueXRpbWUgdGhlcmUgaXMgYSBjb250cm9sIGZs
b3cKICAgICAvLyBtZXJnZSwgb3IgbW9zdCBjcnVjaWFsbHksIGFueXRpbWUgYSBzaWRlLWVmZmVj
dCBvciBzdHJ1Y3R1cmUgY2hlY2sgaGFwcGVucy4KLSAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1l
ZmZlY3QsIHdlIHR5cGljYWxseSBtdXN0IGFzc3VtZSB0aGF0IGFueSB2YWx1ZSBtYXkgaGF2ZQot
ICAgIC8vIGhhZCBpdHMgc3RydWN0dXJlIGNoYW5nZWQsIGhlbmNlIGNvbnRyYXZlbmluZyBvdXIg
cHJvb2YuIFdlIG1ha2UgdGhlIHByb29mCi0gICAgLy8gdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5n
IHRoaXMgdG8gVE9QIChpLmUuIGNsYWltaW5nIHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdAotICAg
IC8vIHRoaXMgdmFsdWUgbWF5IGhhdmUgYW55IHN0cnVjdHVyZSkuIE9mIG5vdGUgaXMgdGhhdCB0
aGUgcHJvb2YgcmVwcmVzZW50ZWQgYnkKLSAgICAvLyB0aGlzIGZpZWxkIGlzIG5vdCBzdWJqZWN0
IHRvIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIC0gZXZlbiBpZiBvbmUKLSAgICAv
LyBmaXJlcywgd2UgY2FuIGJlIHN1cmUgdGhhdCB0aGlzIHByb29mIGlzIHN0aWxsIHZhbGlkLgot
ICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmU7Ci0gICAg
Ci0gICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRo
YXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZSBub3cKLSAgICAvLyBvciBhbnkgdGltZSBpbiB0aGUgZnV0
dXJlIHN1YmplY3QgdG8gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIG9mCi0g
ICAgLy8gYWxsIG1lbWJlcnMgb2YgdGhpcyBzZXQgbm90IGhhdmluZyBmaXJlZC4gVGhpcyBzZXQg
aXMgaW1wZXJ2aW91cyB0byBzaWRlLQotICAgIC8vIGVmZmVjdHM7IGV2ZW4gaWYgb25lIGhhcHBl
bnMgdGhlIHNpZGUtZWZmZWN0IGNhbiBvbmx5IGNhdXNlIHRoZSB2YWx1ZSB0bwotICAgIC8vIGNo
YW5nZSB0byBhdCB3b3JzdCBhbm90aGVyIHN0cnVjdHVyZSB0aGF0IGlzIGFsc28gYSBtZW1iZXIg
b2YgdGhpcyBzZXQuIEJ1dCwKLSAgICAvLyB0aGUgdGhlb3JlbSBiZWluZyBwcm92ZWQgYnkgdGhp
cyBmaWVsZCBpcyBwcmVkaWNhdGVkIHVwb24gdGhlcmUgbm90IGJlaW5nCi0gICAgLy8gYW55IG5l
dyBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgaW50cm9kdWNlZCBpbnRvIGFueSBtZW1iZXJzIG9mIHRo
aXMgc2V0LiBJbgotICAgIC8vIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vIHdheSBmb3IgdXMgdG8g
Z3VhcmQgdGhpcyBoYXBwZW5pbmcsIHRoZSBzZXQgbXVzdCBiZQotICAgIC8vIFRPUC4gQnV0IGlu
IGNhc2VzIHdoZXJlIHdlIGNhbiBndWFyZCBuZXcgc3RydWN0dXJlIHRyYW5zaXRpb25zIChhbGwg
bWVtYmVycwotICAgIC8vIG9mIHRoZSBzZXQgaGF2ZSBzdGlsbC12YWxpZCBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbiB3YXRjaHBvaW50cykgdGhlbiB0aGlzIHNldAotICAgIC8vIHdpbGwgYmUgZmluaXRl
LiBBbnl0aW1lIHRoYXQgd2UgbWFrZSB1c2Ugb2YgdGhlIGZpbml0ZSBuYXR1cmUgb2YgdGhpcyBz
ZXQsCi0gICAgLy8gd2UgbXVzdCBmaXJzdCBpc3N1ZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdh
dGNocG9pbnQsIHdoaWNoIHdpbGwgZWZmZWN0aXZlbHkKLSAgICAvLyByZXN1bHQgaW4gbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUgYmVpbmcgZmlsdGVyZWQgYWNjb3JkaW5nIHRvCi0gICAgLy8gbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS4KLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmU7CisgICAgLy8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0LCB3
ZSBtdXN0IGFzc3VtZSB0aGF0IGFueSB2YWx1ZSB3aXRoIGEgc3RydWN0dXJlIHRoYXQKKyAgICAv
LyBpc24ndCBiZWluZyB3YXRjaGVkIG1heSBoYXZlIGhhZCBpdHMgc3RydWN0dXJlIGNoYW5nZWQs
IGhlbmNlIGNvbnRyYXZlbmluZworICAgIC8vIG91ciBwcm9vZi4gSW4gc3VjaCBhIGNhc2Ugd2Ug
bWFrZSB0aGUgcHJvb2YgdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMgdG8KKyAgICAvLyBU
T1AgKGkuZS4gY2xhaW1pbmcgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoaXMgdmFsdWUgbWF5
IGhhdmUgYW55CisgICAgLy8gc3RydWN0dXJlKS4KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
IG1fc3RydWN0dXJlOwogICAgIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBv
biB0aGUgcG9zc2libGUgdHlwZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlCiAgICAgLy8gbm93
IG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUsIHVubGVzcyBpdCBpcyByZWFzc2lnbmVkLiBUaGlz
IGZpZWxkIGlzCkBAIC0zMzIsMTEgKzMwOSwxMSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAg
ICAgLy8gYmV0d2VlbiB0aGlzIGZpZWxkLCBhbmQgdGhlIHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUs
IGlzIGFzIGZvbGxvd3MuIFRoZQogICAgIC8vIGZpZWxkcyBhYm92ZSBjb25zdHJhaW50IHRoZSBz
dHJ1Y3R1cmVzIHRoYXQgYSBjZWxsIG1heSBoYXZlLCBidXQgdGhleSBzYXkKICAgICAvLyBub3Ro
aW5nIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBhIGNlbGwu
IE1vcmUgZm9ybWFsbHksCi0gICAgLy8gdGhlIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzIGl0
c2VsZiBhbiBhYnN0cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQorICAgIC8vIHRoZSBt
X3N0cnVjdHVyZSBpcyBpdHNlbGYgYW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0
aGUKICAgICAvLyB1bmlvbiBvZiB0aGUgc2V0IG9mIGFsbCBub24tY2VsbCB2YWx1ZXMgYW5kIHRo
ZSBzZXQgb2YgY2VsbCB2YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gdGhlIGdpdmVuIHN0cnVjdHVy
ZS4gVGhpcyBhYnN0cmFjdCB2YWx1ZSBpcyB0aGVuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCi0g
ICAgLy8gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3Nl
IHR5cGUgaXMgbV90eXBlLiBTbywgZm9yCi0gICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3Bl
Y0ZpbmFsfFNwZWNJbnQzMiBhbmQgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMKKyAgICAvLyBt
X3N0cnVjdHVyZSBhbmQgdGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNv
LCBmb3IKKyAgICAvLyBleGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFu
ZCBtX3N0cnVjdHVyZSBpcwogICAgIC8vIFsweDEyMzQ1XSB0aGVuIHRoaXMgYWJzdHJhY3QgdmFs
dWUgY29ycmVzcG9uZHMgdG8gdGhlIHNldCBvZiBhbGwgaW50ZWdlcnMKICAgICAvLyB1bmlmaWVk
IHdpdGggdGhlIHNldCBvZiBhbGwgb2JqZWN0cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgogICAg
IFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKQEAgLTM2NCw2ICszNDEsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgIH0KICAgICAKKyAgICB2
b2lkIG9ic2VydmVJbmRleGluZ1R5cGVUcmFuc2l0aW9uKEluZGV4aW5nVHlwZSBmcm9tLCBJbmRl
eGluZ1R5cGUgdG8pCisgICAgeworICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1v
ZGVzKGZyb20pKQorICAgICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2Rlcyh0byk7
CisgICAgfQorICAgIAogICAgIGJvb2wgdmFsaWRhdGVUeXBlKEpTVmFsdWUgdmFsdWUpIGNvbnN0
CiAgICAgewogICAgICAgICBpZiAoaXNIZWFwVG9wKCkpCkBAIC0zOTEsMTkgKzM3NCwxNyBAQCBw
cml2YXRlOgogICAgIHsKICAgICAgICAgbV90eXBlIHw9IHRvcDsKICAgICAgICAgbV9hcnJheU1v
ZGVzID0gQUxMX0FSUkFZX01PREVTOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5t
YWtlVG9wKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOwor
ICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVl
KCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBz
ZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsK
LQogICAgIHZvaWQgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9k
ZXNCeVR5cGUoKTsKICAgICAKICAgICBib29sIHNob3VsZEJlQ2xlYXIoKSBjb25zdDsKICAgICBG
aWx0cmF0aW9uUmVzdWx0IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0
IG5vcm1hbGl6ZUNsYXJpdHkoR3JhcGgmKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNp
b24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYWxsb2Nh
dGUoKTsgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9pZCB1c2luZyB0
aGlzIG1ldGhvZC4KICAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGRl
bGV0ZTsgbmV2ZXIgdXNlICdkZWxldGUnIGRpcmVjdGx5LgogICAgIAotICAgIHZvaWQgZnJlZUFs
bCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAg
ICB2b2lkIGZyZWVBbGwoKTsgLy8gT25seSBjYWxsIHRoaXMgaWYgeW91J3ZlIGVpdGhlciBmcmVl
ZCBldmVyeXRoaW5nIG9yIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgogICAgIHZvaWQg
cmVzZXQoKTsgLy8gTGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0
byB0aGUgT1MuCiAgICAgCiAgICAgdW5zaWduZWQgaW5kZXhPZihjb25zdCBUKik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyNSw3ICszMjUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IHRoZXNlIGJlY2F1c2UgaWYgd2UgZ2V0IHVzZXMg
b2YgdGhlIHJlbGV2YW50CiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIHRoZW4gd2Ug
Y2FuIHNhZmVseSBnZXQgcmlkIG9mIHRoZXNlLCB0b28uIFRoaXMgb2YgY291cnNlCkBAIC00NDEs
NyArNDQwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNh
c2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQg
cmlkIG9mIHRoaXMgbm9kZSwgaWYgaXQgcmVmZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCiAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9k
ZSgpKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJ
KHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlN
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDI1ICsyODksNDggQEAgU3RydWN0dXJlKiBB
cnJheU1vZGU6Om9yaWdpbmFsQXJyYXlTdHJ1YwogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVj
a2VkKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4
aW5nVHlwZSBzaGFwZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewotICAg
IGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4
aW5nU2hhcGVNYXNrKSA9PSBzaGFwZQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAg
ICAgICAgICAmJiBncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+
aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpKTsKKyAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OiB7CisgICAgICAgIGlm
ICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVb
aV07CisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGlu
Z1NoYXBlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVy
ZShzdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFy
cmF5OgorICAgIGNhc2UgQXJyYXk6OkFycmF5OiB7CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxy
ZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0Fy
cmF5KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SW5kZXhpbmdTaGFwZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7
CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUu
bV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkgJiBJbmRleGluZ1NoYXBlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElz
QXJyYXkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgICAgIAotICAgIGRlZmF1bHQ6CisgICAgZGVmYXVs
dDogewogICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlN
b2RlcywgYXNBcnJheU1vZGVzKHNoYXBlKSB8IGFzQXJyYXlNb2RlcyhzaGFwZSB8IElzQXJyYXkp
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRl
eGluZ1NoYXBlTWFzaykgPT0gc2hhcGU7Ci0gICAgfQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1
Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAg
ICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spICE9
IHNoYXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IH0KIH0KIAogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVj
a2VkKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpIGNvbnN0
CkBAIC0zMzYsMjMgKzM1OSwzOCBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3Jh
cGgmIGdyCiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAg
ICAgICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdp
bmFsQXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6IHsKICAgICAgICAg
ICAgIENSQVNIKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGNhc2UgQXJyYXk6OkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpBcnJh
eTogewogICAgICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2Fy
cmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2
YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkp
Ci0gICAgICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmds
ZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworICAgICAgICAgICAgaWYgKHZhbHVl
Lm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVj
dHVyZVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlZmF1
bHQ6CisgICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFk
eUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJy
YXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJh
eU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNT
aW5nbGV0b24oKQotICAgICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwotICAg
ICAgICB9CisgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2
YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgICAgIGlm
ICghaGFzQW55QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3Vt
ZW50czoKICAgICAgICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNw
ZWNBcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFz
ZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q0ZBUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9k
ZSkpCiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIihVTlNBRkUpICIpOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZHVtcChXVEY6OmRhdGFGaWxl
KCkpOworICAgICAgICAgICAgICAgIGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXMoKSwgIiAiLCBt
X2ludGVycHJldGVyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9z
dGF0ZS5oYXZlU3RydWN0dXJlcygpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgKEhh
dmUgU3RydWN0dXJlcykiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NF
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NTRVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDEyICs0NjAsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNo
aWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+
c3RydWN0dXJlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKICAg
ICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSkKQEAgLTU0NywxMSArNTQxLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0gc3RydWN0
dXJlICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjYXNlIEFycmF5aWZ5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0
dXJlOgogICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNh
dGlvbiBjb3VsZCBhZmZlY3Qgb3VyIHN0cnVjdHVyZXMuCkBAIC0xMzg3LDEzICsxMzc2LDYgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6Ci0gICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50RWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSkpCi0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAgIGlmIChj
c2VNb2RlID09IE5vcm1hbENTRSkKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjkyMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDE4LDcgKzQxOCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAg
ICAgICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NywyNyArOTcs
MTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2Rl
LT5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVl
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgICAgICAgICBtX2lu
dGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3
ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRU
b1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlz
U3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNT
aW5nbGV0b24oKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpOwotICAgICAgICAgICAgICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBt
YXkgZmlsdGVyIG9uIGNlbGwuCi0gICAgICAgICAgICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hp
bGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVt
b3ZlRWRnZSgwKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4
SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5vZGUtPm9yaWdpbiwgY2hpbGRyZW4pOwotICAg
ICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDIoRWRnZSgpKTsKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQzKEVkZ2UoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xNTYsNyArMTQx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5u
b2RlKCk7CiAgICAgICAgICAgICAgICAgTXVsdGlHZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICgh
c3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAK
QEAgLTE4MCw3ICsxNjUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxk
ID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0
YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3Zl
blN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIApAQCAtMjA1LDcgKzE5MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgIT0gQ2VsbFVzZSkKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShj
aGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICgh
c3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMjMyLDcgKzIxNyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQVNTRVJUKGNo
aWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJl
c3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwog
ICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAKQEAgLTMyOSw3ICszMTQsNiBAQCBwcml2YXRlOgogICAgICAg
ICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICBOb2RlKiBjaGlsZCA9
IGNoaWxkRWRnZS5ub2RlKCk7CiAKLSAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCku
bV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNo
YWluKCkpOwpAQCAtMzQwLDExICszMjQsNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBkbyBhbnkg
ZWxpbWluYXRpb25zLgogICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKLSAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAg
ICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgfSBlbHNl
IGlmIChuZWVkc0NlbGxDaGVjaykgeworICAgICAgICBpZiAobmVlZHNDZWxsQ2hlY2spIHsKICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAg
ICB9CkBAIC0zODEsNyArMzYxLDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBBU1NFUlQodmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBu
ZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1f
c3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAg
ICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2Fy
ZCBvdmVyIHRoZSBQdXRCeUlkCkBAIC0zODksMTEgKzM2OCw3IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCiAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShp
bmRleEluQmxvY2spOwogCi0gICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKLSAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAg
ICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgfSBl
bHNlIGlmIChuZWVkc0NlbGxDaGVjaykgeworICAgICAgICBpZiAobmVlZHNDZWxsQ2hlY2spIHsK
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwogICAg
ICAgICB9CkBAIC00NzUsMTYgKzQ1MCwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRTdHJ1
Y3R1cmVUcmFuc2l0aW9uQ2hlY2soTm9kZU9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGluZGV4SW5C
bG9jaywgSlNDZWxsKiBjZWxsKQogICAgIHsKLSAgICAgICAgTm9kZSogd2Vha0NvbnN0YW50ID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgIGluZGV4SW5CbG9jaywgc3Bl
Y3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0NvbnN0YW50LCBvcmlnaW4sIE9wSW5mbyhj
ZWxsKSk7Ci0gICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3Rp
bGxWYWxpZChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpIHsK
LSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAg
aW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9y
aWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8oY2VsbC0+c3RydWN0dXJlKCkpLCBFZGdlKHdl
YWtDb25zdGFudCwgQ2VsbFVzZSkpOworICAgICAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIG1fZ3Jh
cGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoY2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAg
ICAgTm9kZSogd2Vha0NvbnN0YW50ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKKyAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgc3BlY3VsYXRpb25Gcm9tVmFsdWUoY2VsbCksIFdlYWtKU0Nv
bnN0YW50LCBvcmlnaW4sIE9wSW5mbyhjZWxsKSk7CisgICAgICAgIAogICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
Q2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0
cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2VsbFVz
ZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw2ICs5Nyw5
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQogICAgIHsKKyNp
ZiAhQVNTRVJUX0RJU0FCTEVECisgICAgICAgIG1fcHJvZmlsZWRTZXRzLmFkZChzZXQpOworI2Vu
ZGlmCiAgICAgICAgIG1fcHJvZmlsZWRXYXRjaHBvaW50cy5hcHBlbmQoCiAgICAgICAgICAgICBX
YXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQ8V2F0Y2hwb2ludFNldFR5cGU+KGNvZGVP
cmlnaW4sIGV4aXRLaW5kLCBzZXQpKTsKICAgICB9CkBAIC0xNzIsMTEgKzE3NSwxNyBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gaXNTdGlsbFZhbGlkKHNldCkgfHwgc2hvdWxkQXNz
dW1lTWl4ZWRTdGF0ZShzZXQpOwogICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hl
ZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
c2V0cy5jb250YWlucyhzZXQpIHx8IG1fcHJvZmlsZWRTZXRzLmNvbnRhaW5zKHNldCkpOworICAg
IH0KIAogcHJpdmF0ZToKICAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4gbV9wcm9maWxlZFdhdGNocG9pbnRzOwogICAgIEhhc2hT
ZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3NldHM7CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3Byb2ZpbGVkU2V0czsKICAgICBTdGF0ZU1h
cCBtX2ZpcnN0S25vd25TdGF0ZTsKICNlbmRpZgogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKQEAg
LTIzMyw2ICsyNDIsMTggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
Vmlld3MuaXNWYWxpZE9yTWl4ZWQodmlldyk7CiAgICAgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRj
aGVkKFdhdGNocG9pbnRTZXQqIHNldCkKKyAgICB7CisgICAgICAgIG1fc2V0cy5hc3NlcnRJc1dh
dGNoZWQoc2V0KTsKKyAgICB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoSW5saW5lV2F0Y2hw
b2ludFNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9pbmxpbmVTZXRzLmFzc2VydElzV2F0Y2hl
ZCgmc2V0KTsKKyAgICB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoSlNBcnJheUJ1ZmZlclZp
ZXcqIHZpZXcpCisgICAgeworICAgICAgICBtX2J1ZmZlclZpZXdzLmFzc2VydElzV2F0Y2hlZCh2
aWV3KTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2lu
dHM8V2F0Y2hwb2ludFNldD4gbV9zZXRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAgYm9v
bCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0QnlWYWxEaXJl
Y3Q6CiAgICAgY2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
ICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNp
b24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDcgKzkzMCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAg
Y2FzZSBDaGVja0V4ZWN1dGFibGU6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAg
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hl
Y2tGdW5jdGlvbjoKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNl
IENyZWF0ZVRoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDE2IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0s
IFBsYW4mIHBsYW4sIExvbmdMaXYKIAogR3JhcGg6On5HcmFwaCgpCiB7CisgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSBudW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IHRoaXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBp
ZiAoIWJsb2NrKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBwaGlJbmRleCA9IGJsb2NrLT5waGlzLnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAg
ICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAg
ICAgICAgbV9hbGxvY2F0b3IuZnJlZShibG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgfQogICAg
IG1fYWxsb2NhdG9yLmZyZWVBbGwoKTsKIH0KIApAQCAtODQ2LDcgKzg1Niw2IEBAIHZvaWQgR3Jh
cGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgICAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihub2RlLT5zdHJ1Y3R1cmVTZXQo
KVtpXSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgY2Fz
ZSBOZXdPYmplY3Q6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAg
ICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKQEAgLTg2Myw2ICs4NzIsMzEgQEAgdm9pZCBH
cmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAgICAgICAgICBu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpR2V0
QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0t
OykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFk
T25seVBvaW50ZXIoc2V0W2pdKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVk
IHRvIG1hcmsgYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291
bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVj
a1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIG1hcmsgdGhlCisgICAgICAgICAgICAgICAgICAg
IC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZz
ZXQgaWYgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQgdGhh
dC4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQm
IHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAg
ICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVy
KHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MSw2ICsxNzEsOCBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQog
ICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpICYmIHZhbHVlLmFzQ2VsbCgpLT5zdHJ1
Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAg
ICAgIHdhdGNocG9pbnRzKCkuYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc09i
amVjdCgpKQogICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvV2Vha0NvbnN0YW50KHZhbHVlLmFz
Q2VsbCgpKTsKICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODUsMjEgKzQ4NSw2IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb252ZXJ0VG9T
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtX29wID09IENoZWNrU3RydWN0dXJlIHx8IG1fb3AgPT0gQXJyYXlp
ZnlUb1N0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVCghY2hpbGQyKCkpOwotICAgICAgICBBU1NF
UlQoIWNoaWxkMygpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgICAgIG1fb3BJ
bmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlKTsKLSAgICAgICAgbV9vcCA9
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OwotICAgIH0KLSAgICAKLSAgICB2b2lkIGNv
bnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkKLSAgICB7Ci0gICAgICAgIGNv
bnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZVNldCgpLm9ubHlT
dHJ1Y3R1cmUoKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgY29udmVydFRvR2V0QnlPZmZzZXQo
dW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9yYWdlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdldEJ5SWRGbHVzaCB8fCBt
X29wID09IE11bHRpR2V0QnlPZmZzZXQpOwpAQCAtMTEyOSw3ICsxMTE0LDYgQEAgc3RydWN0IE5v
ZGUgewogICAgIGJvb2wgaGFzU3RydWN0dXJlKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3Ao
KSkgewotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAg
ICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAg
ICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDE4ICsxNTMsNiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tT
dHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDaGVja0V4ZWN1dGFibGUs
IE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAgICAvKiBUcmFuc2l0aW9uIHdhdGNocG9pbnRzIGFyZSBh
IGNvbnRyYWN0IGJldHdlZW4gdGhlIHBhcnR5IHNldHRpbmcgdGhlIHdhdGNocG9pbnQgKi9cCi0g
ICAgLyogYW5kIHRoZSBydW50aW1lIHN5c3RlbSwgd2hlcmUgdGhlIHBhcnR5IHByb21pc2VzIHRo
YXQgdGhlIGNoaWxkIG9iamVjdCBvbmNlIGhhZCAqL1wKLSAgICAvKiB0aGUgc3RydWN0dXJlIGJl
aW5nIHdhdGNoZWQsIGFuZCB0aGUgcnVudGltZSBzeXN0ZW0gaW4gdHVybiBwcm9taXNlcyB0aGF0
IHRoZSAqL1wKLSAgICAvKiB3YXRjaHBvaW50IHdpbGwgYmUgdHVybmVkIGludG8gYW4gT1NSIGV4
aXQgaWYgYW55IG9iamVjdCB3aXRoIHRoYXQgc3RydWN0dXJlICovXAotICAgIC8qIGV2ZXIgdHJh
bnNpdGlvbnMgdG8gYSBkaWZmZXJlbnQgc3RydWN0dXJlLiBIZW5jZSwgdGhlIGNoaWxkIG9iamVj
dCBtdXN0IGhhdmUgKi9cCi0gICAgLyogcHJldmlvdXNseSBoYWQgYSBDaGVja1N0cnVjdHVyZSBl
eGVjdXRlZCBvbiBpdCBvciB3ZSdyZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0ICovXAotICAgIC8q
IGNvbnN0YW50IChXZWFrSlNDb25zdGFudCkgYW5kIHRoZSBvYmplY3Qgd2FzIGtub3duIHRvIGhh
dmUgdGhhdCBzdHJ1Y3R1cmUgYXQgKi9cCi0gICAgLyogY29tcGlsZS10aW1lLiBJbiB0aGUgbGF0
dGVyIGNhc2UgdGhpcyBtZWFucyB0aGF0IG5vIHN0cnVjdHVyZSBjaGVja3MgaGF2ZSB0byBiZSAq
L1wKLSAgICAvKiBwZXJmb3JtZWQgZm9yIHRoaXMgb2JqZWN0IGJ5IEpJVHRlZCBjb2RlLiBJbiB0
aGUgZm9ybWVyIGNhc2UgdGhpcyBtZWFucyB0aGF0Ki9cCi0gICAgLyogdGhlIG9iamVjdCdzIHN0
cnVjdHVyZSBkb2VzIG5vdCBuZWVkIHRvIGJlIHJlY2hlY2tlZCBkdWUgdG8gc2lkZS1lZmZlY3Rp
bmcgKi9cCi0gICAgLyogKGNsb2JiZXJpbmcpIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFj
cm8oUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRvbVB1
dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1h
Y3JvKEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNO
b3RFeGl0IHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHUGxhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQbGFuLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1
ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2lu
Y2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJP
cGVyYW5kc0lubGluZXMuaCIKQEAgLTIzMyw2ICsyMzQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBh
dGggUGxhbjo6Y29tcGlsZUluVGhyCiAgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRm
Zyk7CiAgICAgcGVyZm9ybVByZWRpY3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1G
aXh1cChkZmcpOworICAgIHBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhkZmcpOwog
ICAgIHBlcmZvcm1JbnZhbGlkYXRpb25Qb2ludEluamVjdGlvbihkZmcpOwogICAgIHBlcmZvcm1U
eXBlQ2hlY2tIb2lzdGluZyhkZmcpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJ
KHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGlj
dGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBDaGVj
a1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlv
bjoKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2
YXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
YWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3NSwyMiArMjc1LDI2IEBAIGJvb2wg
c2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICAgICAgcmV0dXJuIG5vZGUt
PmFycmF5TW9kZSgpLm1vZGVGb3JQdXQoKS5hbHJlYWR5Q2hlY2tlZCgKICAgICAgICAgICAgIGdy
YXBoLCBub2RlLCBzdGF0ZS5mb3JOb2RlKGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKSk7CiAK
LSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICByZXR1cm4g
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5p
c1N1YnNldE9mKAotICAgICAgICAgICAgU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSk7
Ci0gICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0
cnVjdHVyZToKICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVh
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2YoCisgICAgICAg
IHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNl
dE9mKAogICAgICAgICAgICAgU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpKTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNl
dDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAgIGNhc2UgUHV0QnlPZmZz
ZXQ6Ci0gICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5pc1ZhbGlkT2Zmc2V0KAotICAgICAgICAgICAgZ3JhcGgubV9zdG9y
YWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLm9mZnNldCk7Cisg
ICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiB2
YWx1ZSA9IHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOworICAgICAg
ICBpZiAodmFsdWUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5z
dG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLm9mZnNldDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gdmFsdWUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAoIXZhbHVlW2ldLT5pc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBMYXN0
Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OTcsMjkgKzM2OTcs
NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDogewotICAgICAgICAvLyBUaGVyZSBpcyBhIGZhc2NpbmF0aW5nIHF1ZXN0aW9uIGhlcmUg
b2Ygd2hhdCB0byBkbyBhYm91dCBhcnJheSBwcm9maWxpbmcuCi0gICAgICAgIC8vIFdlICpjb3Vs
ZCogdHJ5IHRvIHRlbGwgdGhlIE9TUiBleGl0IGFib3V0IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBh
Y2Nlc3MgaXMuCi0gICAgICAgIC8vIFRoZSBERkcgd2lsbCBoYXZlIGtlcHQgaXQgYWxpdmUsIHRo
b3VnaCBpdCBtYXkgbm90IGJlIGluIGEgcmVnaXN0ZXIsIGFuZAotICAgICAgICAvLyB3ZSBzaG91
bGRuJ3QgcmVhbGx5IGxvYWQgaXQgc2luY2UgdGhhdCBjb3VsZCBiZSBhIHdhc3RlLiBGb3Igbm93
IHRob3VnaCwKLSAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hl
biBhIHdhdGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKLSAgICAgICAgLy8gcXVpdGUgYSBoaW50
IGFscmVhZHkuCi0gICAgICAgIAotICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUt
PnN0cnVjdHVyZSgpKTsKLSAgICAgICAgCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zm
c2V0KCkpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgICAgIG1faml0
LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgaXNPSy5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgICAg
ICBzcGVjdWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsKLSNlbmRpZgotCi0gICAgICAgIG5vUmVz
dWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgUGhh
bnRvbVB1dFN0cnVjdHVyZTogewogICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hp
bGQxKCkubm9kZSgpKSk7CiAgICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNv
bXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNv
ZGVCbG9jaygpLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc2NywzMiArMzc2Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgZmFzY2luYXRp
bmcgcXVlc3Rpb24gaGVyZSBvZiB3aGF0IHRvIGRvIGFib3V0IGFycmF5IHByb2ZpbGluZy4KLSAg
ICAgICAgLy8gV2UgKmNvdWxkKiB0cnkgdG8gdGVsbCB0aGUgT1NSIGV4aXQgYWJvdXQgd2hlcmUg
dGhlIGJhc2Ugb2YgdGhlIGFjY2VzcyBpcy4KLSAgICAgICAgLy8gVGhlIERGRyB3aWxsIGhhdmUg
a2VwdCBpdCBhbGl2ZSwgdGhvdWdoIGl0IG1heSBub3QgYmUgaW4gYSByZWdpc3RlciwgYW5kCi0g
ICAgICAgIC8vIHdlIHNob3VsZG4ndCByZWFsbHkgbG9hZCBpdCBzaW5jZSB0aGF0IGNvdWxkIGJl
IGEgd2FzdGUuIEZvciBub3cgdGhvdWdoLAotICAgICAgICAvLyB3ZSdsbCBqdXN0IHJlbHkgb24g
dGhlIGZhY3QgdGhhdCB3aGVuIGEgd2F0Y2hwb2ludCBmaXJlcyB0aGVuIHRoYXQncwotICAgICAg
ICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFkeS4KLQotICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJl
bmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKLQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAg
SklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKLSAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWRk
cmVzcyhvcDEuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAg
ICAgbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0gICAg
ICAgIGlzT0subGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAgICAgc3BlY3VsYXRlQ2VsbChub2Rl
LT5jaGlsZDEoKSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVj
dHVyZTogewogICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgp
KSk7CiAgICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVj
dHVyZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBu
b2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzExNSw3ICszMTE1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZQogICAgIFN0cnVjdHVyZSogc3Ry
aW5nT2JqZWN0U3RydWN0dXJlID0KICAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG1fY3Vy
cmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAg
IAotICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fY3VycmVudEtub3duU3RydWN0dXJl
LmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKSB7CisgICAg
aWYgKCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1
cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVj
aygKICAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAg
ICAgICAgIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIDogbV9zZXQob3RoZXIu
bV9zZXQpCit7CisgICAgc2V0Q2xvYmJlcmVkKG90aGVyLmlzQ2xvYmJlcmVkKCkpOworfQorCit2
b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3AoKQoreworICAgIG1fc2V0LmRlbGV0
ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOworICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZh
bHVlOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZChH
cmFwaCYgZ3JhcGgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspIHsKKyAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBhdChpKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBncmFwaC53YXRjaHBvaW50cygpLmFzc2VydElzV2F0Y2hlZChzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgIH0KK30KKwordm9pZCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpjbG9iYmVyKCkKK3sKKyAgICAvLyBUaGUgcHJlbWlzZSBvZiB0aGlz
IGFwcHJvYWNoIHRvIGNsb2JiZXJpbmcgaXMgdGhhdCBhbnl0aW1lIHdlIGludHJvZHVjZQorICAg
IC8vIGEgd2F0Y2hhYmxlIHN0cnVjdHVyZSBpbnRvIGFuIGFic3RyYWN0IHZhbHVlLCB3ZSB3YXRj
aHBvaW50IGl0LiBZb3UgY2FuIGFzc2VydAorICAgIC8vIHRoYXQgdGhpcyBob2xkcyBieSBjYWxs
aW5nIGFzc2VydElzV2F0Y2hlZCgpLgorICAgICAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0Q2xvYmJlcmVkKHRydWUpOworICAgICAgICAKKyAgICBpZiAo
bV9zZXQuaXNUaGluKCkpIHsKKyAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVTdHJ1Y3R1cmUoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1fc2V0LnNpbmdsZVN0cnVjdHVyZSgp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKQorICAgICAgICAg
ICAgbWFrZVRvcFdoZW5UaGluKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAor
ICAgIFN0cnVjdHVyZVNldDo6T3V0T2ZMaW5lTGlzdCogbGlzdCA9IG1fc2V0LnN0cnVjdHVyZUxp
c3QoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykgeworICAg
ICAgICBpZiAobGlzdC0+bGlzdCgpW2ldLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5J
bnZhbGlkYXRlZCgpKSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
b2JzZXJ2ZVRyYW5zaXRpb24oU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKQoreworICAg
IGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFtX3NldC5jb250
YWlucyhmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmcm9tLT50cmFuc2l0
aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIHNldENsb2JiZXJlZCh0
cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZCh0
bykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1v
cnBoaXNtTGltaXQpCisgICAgICAgIG1ha2VUb3AoKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZChzdHJ1Y3R1
cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+
IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3Ry
dWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBtZXJnZU5vdFRvcChvdGhlcik7Cit9CisKK2Jvb2wgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBJdCBpc24ndCBpbW1lZGlhdGVseSBvYnZp
b3VzIHRoYXQgdGhlIGNvZGUgYmVsb3cgaXMgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nLCBzbyBsZXQn
cyBnbworICAgIC8vIHRocm91Z2ggaXQuCisgICAgLy8KKyAgICAvLyBUaGlzIG5vdCBjbG9iYmVy
ZWQsIG90aGVyIG5vdCBjbG9iYmVyZWQ6IENsZWFybHksIHdlIGRvbid0IHdhbnQgdG8gbWFrZSBh
bnl0aGluZyBjbG9iYmVyZWQKKyAgICAvLyBzaW5jZSB3ZSBqdXN0IGhhdmUgdHdvIHNldHMgYW5k
IHdlIGFyZSBtZXJnaW5nIHRoZW0uIG1lcmdlTm90VG9wKCkgY2FuIGhhbmRsZSB0aGlzIGp1c3QK
KyAgICAvLyBmaW5lLgorICAgIC8vCisgICAgLy8gVGhpcyBjbG9iYmVyZWQsIG90aGVyIGNsb2Ji
ZXJlZDogQ2xvYmJlcmVkIG1lYW5zIHRoYXQgd2UgaGF2ZSBhIHNldCBvZiB0aGluZ3MsIHBsdXMg
d2UKKyAgICAvLyB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzZXQgb2YgYWxsIHRoaW5ncyBidXQgdGhl
IGxhdHRlciB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoaXQgdGhlIG5leHQKKyAgICAvLyBpbnZhbGlk
YXRpb24gcG9pbnQuIFRoaXMgYWxsb3dzIHVzIHRvIG1lcmdlIHR3byBjbG9iYmVyZWQgc2V0cyB0
aGUgbmF0dXJhbCB3YXkuIEZvciBub3cKKyAgICAvLyB0aGUgc2V0IHdpbGwgc3RpbGwgYmUgVE9Q
IChhbmQgc28gd2Uga2VlcCB0aGUgY2xvYmJlcmVkIGJpdCBzZXQpLCBidXQgd2Uga25vdyB0aGF0
IGFmdGVyCisgICAgLy8gaW52YWxpZGF0aW9uLCB3ZSB3aWxsIGhhdmUgdGhlIHVuaW9uIG9mIHRo
ZSB0aGlzIGFuZCBvdGhlci4KKyAgICAvLworICAgIC8vIFRoaXMgY2xvYmJlcmVkLCBvdGhlciBu
b3QgY2xvYmJlcmVkOiBJdCdzIHNhZmUgdG8gbWVyZ2UgaW4gb3RoZXIgZm9yIGJvdGggYmVmb3Jl
IGFuZCBhZnRlcgorICAgIC8vIGludmFsaWRhdGlvbiwgc28gbG9uZyBhcyB3ZSBsZWF2ZSB0aGUg
Y2xvYmJlcmVkIGJpdCBzZXQuIEJlZm9yZSBpbnZhbGlkYXRpb24gdGhpcyBoYXMgbm8KKyAgICAv
LyBlZmZlY3Qgc2luY2UgdGhlIHNldCB3aWxsIHN0aWxsIGFwcGVhciB0byBoYXZlIGFsbCB0aGlu
Z3MgaW4gaXQuIFRoZSB3YXkgdG8gdGhpbmsgYWJvdXQKKyAgICAvLyB3aGF0IGludmFsaWRhdGlv
biB3b3VsZCBkbyBpcyBpbWFnaW5lIGlmIHdlIGhhZCBhIHNldCBBIHRoYXQgd2FzIGNsb2JiZXJl
ZCBhbmQgYSBzZXQgQgorICAgIC8vIHRoYXQgd2Fzbid0IGFuZCB3ZSBjb25zaWRlcmVkIHRoZSBm
b2xsb3dpbmcgdHdvIGNhc2VzLiBOb3RlIHRoYXQgd2UgZXhwZWN0IEEgdG8gYmUgdGhlCisgICAg
Ly8gc2FtZSBhdCB0aGUgZW5kIGluIGJvdGggY2FzZXM6CisgICAgLy8KKyAgICAvLyAgICAgICAg
ICAgIEEubWVyZ2UoQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFsaWRhdGlvblBv
aW50CisgICAgLy8gICAgICAgICAgICBJbnZhbGlkYXRpb25Qb2ludCAgICAgICAgICAgICAgICAg
ICAgICBBLm1lcmdlKEIpCisgICAgLy8KKyAgICAvLyBUaGUgZmFjdCB0aGF0IHdlIGV4cGVjdCBB
IHRvIGJlIHRoZSBzYW1lIGluIGJvdGggY2FzZXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRvIG1lcmdl
IG90aGVyCisgICAgLy8gaW50byB0aGlzIGJ1dCBrZWVwIHRoZSBjbG9iYmVyZWQgYml0LgorICAg
IC8vCisgICAgLy8gVGhpcyBub3QgY2xvYmJlcmVkLCBvdGhlciBjbG9iYmVyZWQ6IFRoaXMgaXMg
anVzdCB0aGUgY29udmVyc2Ugb2YgdGhlIHByZXZpb3VzIGNhc2UuIFdlCisgICAgLy8gd2FudCB0
byBtZXJnZSBvdGhlciBpbnRvIHRoaXMgYW5kIHNldCB0aGUgY2xvYmJlcmVkIGJpdC4KKyAgICAK
KyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIWlzQ2xvYmJlcmVkKCkg
JiYgb3RoZXIuaXNDbG9iYmVyZWQoKSkgeworICAgICAgICBzZXRDbG9iYmVyZWQodHJ1ZSk7Cisg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBjaGFuZ2VkIHw9IG1lcmdl
Tm90VG9wKG90aGVyLm1fc2V0KTsKKyAgICAKKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworYm9v
bCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZU5vdFRvcChjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKQoreworICAgIGlmICghbV9zZXQubWVyZ2Uob3RoZXIpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQor
ICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7
CisgICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAgbV9zZXQgPSBvdGhlcjsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNDbG9iYmVyZWQoKSkgeworICAgICAgICAvLyBX
ZSBoYXZlIHR3byBjaG9pY2VzIGhlcmU6CisgICAgICAgIC8vCisgICAgICAgIC8vIERvIG5vdGhp
bmc6IEl0J3MgbGVnYWwgdG8ga2VlcCBvdXIgc2V0IGludGFjdCwgd2hpY2ggd291bGQgZXNzZW50
aWFsbHkgbWVhbiB0aGF0IGZvcgorICAgICAgICAvLyBub3csIG91ciBzZXQgd291bGQgYmVoYXZl
IGxpa2UgVE9QIGJ1dCBhZnRlciB0aGUgbmV4dCBpbnZhbGlkYXRpb24gcG9pbnQgaXQgd29sZCBi
ZQorICAgICAgICAvLyBhIGZpbml0ZSBzZXQgYWdhaW4uIFRoaXMgbWF5IGJlIGEgZ29vZCBjaG9p
Y2UgaWYgJ290aGVyJyBpcyBtdWNoIGJpZ2dlciB0aGFuIG91cgorICAgICAgICAvLyBtX3NldC4K
KyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVwbGFjZSBtX3NldCB3aXRoIG90aGVyIGFuZCBjbGVh
ciB0aGUgY2xvYmJlciBiaXQ6IFRoaXMgaXMgYWxzbyBsZWdhbCwgYW5kIG1lYW5zIHRoYXQKKyAg
ICAgICAgLy8gd2UncmUgbm8gbG9uZ2VyIGNsb2JiZXJlZC4gVGhpcyBpcyB1c3VhbGx5IGJldHRl
ciBiZWNhdXNlIGl0IGltbWVkaWF0ZWx5IGdpdmVzIHVzIGEKKyAgICAgICAgLy8gc21hbGxlciBz
ZXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRoaXMgc2NlbmFyaW8gc2hvdWxkIGNvbWUgdXAg
cmFyZWx5LiBXZSB1c3VhbGx5IGRvbid0IGRvIGFueXRoaW5nIHRvIGFuIGFic3RyYWN0IHZhbHVl
CisgICAgICAgIC8vIGFmdGVyIGl0IGlzIGNsb2JiZXJlZC4gQnV0IHdlIGFwcGx5IHNvbWUgaGV1
cmlzdGljcy4KKyAgICAgICAgCisgICAgICAgIGlmIChvdGhlci5zaXplKCkgPiBtX3NldC5zaXpl
KCkgKyBjbG9iYmVyZWRTdXByZW1hY3lUaHJlc2hvbGQpCisgICAgICAgICAgICByZXR1cm47IC8v
IEtlZXAgdGhlIGNsb2JiZXJlZCBzZXQuCisgICAgICAgIAorICAgICAgICBtX3NldCA9IG90aGVy
OworICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIG1fc2V0LmZpbHRlcihvdGhlcik7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorewor
ICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG90
aGVyLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoIWlzQ2xvYmJlcmVkKCkpIHsKKyAgICAgICAg
ICAgIC8vIFNlZSBqdXN0aWZpY2F0aW9uIGluIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKSwg
YWJvdmUuIEFuIHVuY2xvYmJlcmVkIHNldCBpcworICAgICAgICAgICAgLy8gYWxtb3N0IGFsd2F5
cyBiZXR0ZXIuCisgICAgICAgICAgICBpZiAobV9zZXQuc2l6ZSgpID4gb3RoZXIubV9zZXQuc2l6
ZSgpICsgY2xvYmJlcmVkU3VwcmVtYWN5VGhyZXNob2xkKQorICAgICAgICAgICAgICAgICp0aGlz
ID0gb3RoZXI7IC8vIEtlZXAgdGhlIGNsb2JiZXJlZCBzZXQuCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBtX3NldC5maWx0ZXIob3RoZXIubV9zZXQpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZpbHRlcihvdGhlci5tX3NldCk7Cit9CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIENvbmZvcm1zVG9UeXBlIHsKK3B1YmxpYzoKKyAgICBDb25mb3Jt
c1RvVHlwZShTcGVjdWxhdGVkVHlwZSB0eXBlKQorICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpICYgbV90eXBlKTsKKyAgICB9Citwcml2YXRlOgorICAgIFNwZWN1bGF0ZWRUeXBlIG1f
dHlwZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIGlmICghKHR5
cGUgJiBTcGVjQ2VsbCkpIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIENv
bmZvcm1zVG9UeXBlIGNvbmZvcm1zVG9UeXBlKHR5cGUpOworICAgIG1fc2V0LmdlbmVyaWNGaWx0
ZXIoY29uZm9ybXNUb1R5cGUpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNv
bnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpIHx8
IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBt
X3NldC5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBp
ZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgcmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIpOworfQorCitib29sIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgaWYgKGlzQ2xvYmJlcmVkKCkgPT0gb3RoZXIuaXNDbG9iYmVyZWQoKSkKKyAgICAgICAg
cmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIubV9zZXQpOworICAgIAorICAgIC8vIEhlcmUg
aXQgZ2V0cyB0cmlja3kuIElmIGluIGRvdWJ0LCByZXR1cm4gZmFsc2UhCisgICAgCisgICAgaWYg
KGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQSBjbG9iYmVyZWQgc2V0
IGlzIG5ldmVyIGEgc3Vic2V0IG9mIGFuIHVuY2xvYmJlcmVkIHNldC4KKyAgICAKKyAgICAvLyBB
biB1bmNsb2JiZXJlZCBzZXQgaXMgY3VycmVudGx5IGEgc3Vic2V0IG9mIGEgY2xvYmJlcmVkIHNl
dCwgYnV0IGl0IG1heSBub3QgYmUgc28gYWZ0ZXIKKyAgICAvLyBpbnZhbGlkYXRpb24uCisgICAg
cmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIubV9zZXQpOworfQorCitib29sIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBj
b25zdAoreworICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1cGVyc2V0T2Yob3RoZXIpOworfQor
Citib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkgfHwgaXNDbG9iYmVyZWQoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0Lm92ZXJsYXBzKG90aGVy
KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyhjb25zdCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAob3RoZXIuaXNUb3Ao
KSB8fCBvdGhlci5pc0Nsb2JiZXJlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICByZXR1cm4gb3ZlcmxhcHMob3RoZXIubV9zZXQpOworfQorCitib29sIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKG1fc2V0Lm1fcG9pbnRlciA9PSBvdGhlci5tX3NldC5tX3BvaW50
ZXIpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpc1RvcCgpIHx8IG90aGVy
LmlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gVGhleSBjYW4ndCBiZSBib3RoIHRv
cCBiZWNhdXNlIHRoZW4gdGhlaXIgcG9pbnRlciB2YWx1ZXMgd291bGQgaGF2ZSBiZWVuIGlkZW50
aWNhbCwgYWJvdmUuCisgICAgCisgICAgcmV0dXJuIG1fc2V0ID09IG90aGVyLm1fc2V0CisgICAg
ICAgICYmIGlzQ2xvYmJlcmVkKCkgPT0gb3RoZXIuaXNDbG9iYmVyZWQoKTsKK30KKwordm9pZCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmIChpc0Nsb2JiZXJlZCgpKQorICAg
ICAgICBvdXQucHJpbnQoIkNsb2JiZXJlZDoiKTsKKyAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChpbkNv
bnRleHQobV9zZXQsIGNvbnRleHQpKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IDApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEs
IDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNywzMDAgKzM3LDEzMSBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgewog
cHVibGljOgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQotICAgICAgICA6IG1fc3RydWN0
dXJlKDApCi0gICAgewotICAgIH0KLSAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkg
eyB9CiAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAg
ICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgICAgIDogbV9zZXQoc3RydWN0dXJl
KQogICAgIHsKICAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBT
dHJ1Y3R1cmVTZXQmIHNldCkKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCisgICAgICAgIDogbV9zZXQob3RoZXIpCiAgICAgewotICAgICAgICBz
d2l0Y2ggKHNldC5zaXplKCkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUgPSAwOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2Fz
ZSAxOgotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUgPSB0b3BWYWx1ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICB9Cisg
ICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBv
dGhlcik7CisgICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKTsKICAgICAKICAgICB2b2lkIGNsZWFyKCkK
ICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsK
KyAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBtYWtl
VG9wKCkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUoKTsKLSAgICB9Cisg
ICAgdm9pZCBtYWtlVG9wKCk7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUgdG9wKCkKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdmFsdWU7Ci0g
ICAgICAgIHZhbHVlLm1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAgIH0KKyNp
ZiBBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0
IHsgfQorI2Vsc2UKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0OworI2Vu
ZGlmCiAgICAgCi0gICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAg
ICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkpOwotICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgIH0KKyAgICB2b2lkIGNsb2Ji
ZXIoKTsKKyAgICB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpIHsgc2V0Q2xvYmJlcmVk
KGZhbHNlKTsgfQogICAgIAotICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSB8fCAhb3RoZXIuc2l6ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAob3RoZXIuc2l6ZSgpID4gMSkgewotICAg
ICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBv
dGhlclswXTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlm
IChtX3N0cnVjdHVyZSA9PSBvdGhlclswXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgbWFrZVRvcCgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgdm9pZCBv
YnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8pOwogICAgIAot
ICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQotICAg
IHsKLSAgICAgICAgaWYgKCFvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChvdGhlci5pc1RvcCgpKSB7Ci0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUp
IHsKLSAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBtX3N0cnVjdHVyZSA9IG90
aGVyLm1fc3RydWN0dXJlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSB0b3AoKQogICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IHN0cnVj
dHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQorICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2xlYXIoKSBjb25zdCB7IHJldHVybiBtX3NldC5pc0Vt
cHR5KCk7IH0KKyAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zZXQubV9wb2ludGVy
ID09IHRvcFZhbHVlOyB9CisgICAgCisgICAgLy8gQSBjbG9iYmVyZWQgYWJzdHJhY3QgdmFsdWUg
bWVhbnMgdGhhdCB0aGUgc2V0IGN1cnJlbnRseSBjb250YWlucyB0aGUgbV9zZXQgc2V0IG9mCisg
ICAgLy8gc3RydWN0dXJlcyBwbHVzIFRPUCwgZXhjZXB0IHRoYXQgVE9QIHdpbGwgZ28gYXdheSBh
dCB0aGUgbmV4dCBpbnZhbGlkYXRpb24gcG9pbnQuIE5vdGUKKyAgICAvLyB0aGF0IGludHVpdGl2
ZWx5IHlvdSBjYW4gc29tZXRpbWVzIHRoaW5rIG9mIHRoaXMgYXMgInRoZSBzZXQgb2Ygc3RydWN0
dXJlcyBpbiBtX3NldCBwbHVzCisgICAgLy8gdGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRyYW5zaXRp
b24tcmVhY2hhYmxlIGZyb20gbV9zZXQiIC0gYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGNvcnJlY3Qs
CisgICAgLy8gc2luY2UgaWYgd2UgYWRkIGFuIHVud2F0Y2hhYmxlIHN0cnVjdHVyZSBhZnRlciBj
bG9iYmVyaW5nLCB0aGUgdHdvIGRlZmluaXRpb25zIGFyZSBub3QKKyAgICAvLyBlcXVpdmFsZW50
LiBJZiB3ZSBkbyB0aGlzLCB0aGUgbmV3IHVud2F0Y2hhYmxlIHN0cnVjdHVyZSB3aWxsIGJlIGFk
ZGVkIHRvIG1fc2V0LgorICAgIC8vIEludmFsaWRhdGlvbiBwb2ludHMgZG8gbm90IHRyeSB0byAi
Y2xpcCIgdGhlIHNldCBvZiB0cmFuc2l0aW9uLXJlYWNoYWJsZSBzdHJ1Y3R1cmVzIGZyb20KKyAg
ICAvLyBtX3NldCBieSBsb29raW5nIGF0IHJlYWNoYWJpbGl0eSBhcyB0aGlzIHdvdWxkIG1lYW4g
dGhhdCB0aGUgbmV3IHNldCBpcyBUT1AuIEluc3RlYWQgdGhleQorICAgIC8vIGxpdGVyYWxseSBh
c3N1bWUgdGhhdCB0aGUgc2V0IGlzIGp1c3QgbV9zZXQgcmF0aGVyIHRoYW4gVE9QLgorICAgIGJv
b2wgaXNDbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX3NldC5yZXNlcnZlZEZsYWcoKTsgfQor
ICAgIAorICAgIGJvb2wgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKKyAgICBib29s
IG1lcmdlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAgIGJvb2wgbWVyZ2UoY29uc3Qg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUmIG90aGVyKTsKKyAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsK
ICAgICAKLSAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIHJldHVybiBvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSk7Ci0gICAgfQorICAgIGJv
b2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0OwogICAgIAotICAgIGJvb2wg
ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci0g
ICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOwotICAgIH0KLSAgICAKLSAgICBib29s
IGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KCFvdGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG90
aGVyLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1N1YnNl
dE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAg
ICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICht
X3N0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQotICAgICAg
ICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0
OworICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhl
cikgY29uc3Q7CiAgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikgY29uc3Q7CiAgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gb3RoZXIuaXNT
dWJzZXRPZigqdGhpcyk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAg
ICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IG90aGVyWzBdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3RoZXIuY29udGFpbnMo
bV9zdHJ1Y3R1cmUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgbV9z
dHJ1Y3R1cmUgPSAwOwotICAgIH0KKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpIGNvbnN0OwogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsK
LSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuaXNUb3Ao
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0K
LSAgICAKLSAgICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSBvdGhlcikKLSAgICB7Ci0gICAg
ICAgIGlmICghKG90aGVyICYgU3BlY0NlbGwpKSB7Ci0gICAgICAgICAgICBjbGVhcigpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDbGVh
ck9yVG9wKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCEoc3BlY3VsYXRp
b25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlKSAmIG90aGVyKSkKLSAgICAgICAgICAgIG1fc3Ry
dWN0dXJlID0gMDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNU
b3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA9PSB0b3BWYWx1ZSgpOyB9Ci0gICAgCi0g
ICAgYm9vbCBpc0NsZWFyT3JUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA8PSB0b3BW
YWx1ZSgpOyB9Ci0gICAgYm9vbCBpc05laXRoZXJDbGVhck5vclRvcCgpIGNvbnN0IHsgcmV0dXJu
ICFpc0NsZWFyT3JUb3AoKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgc2l6ZV90IHNpemUoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAgICAgcmV0dXJuICEhbV9z
dHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5zaXplKCk7CiAgICAgfQogICAgIAogICAg
IFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoIWlz
VG9wKCkpOwotICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOwotICAgICAgICBBU1NFUlRfVU5V
U0VEKGksICFpKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4g
bV9zZXQuYXQoaSk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXpl
X3QgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChpKTsKLSAgICB9CisgICAgU3Ry
dWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAg
IAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgLy8gRklYTUU6IEVsaW1pbmF0ZSBh
bGwgdXNlcyBvZiB0aGlzIG1ldGhvZC4gVGhlcmUgc2hvdWxkbid0IGJlIGFueQorICAgIC8vIHNw
ZWNpYWwtY2FzaW5nIGZvciB0aGUgb25lLXN0cnVjdHVyZSBjYXNlLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICBTdHJ1Y3R1cmUqIG9u
bHlTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkgfHwgc2l6ZSgp
ICE9IDEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIGF0KDAp
OwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1
cmVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0
dXJuIFNwZWNDZWxsOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAgICAgICAgcmV0dXJu
IFNwZWNOb25lOwotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKG1fc3Ry
dWN0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1ZhbGlkT2Zmc2V0KFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpOwot
ICAgIH0KKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIGJv
b2wgaGFzU2luZ2xldG9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc05laXRoZXJD
bGVhck5vclRvcCgpOwotICAgIH0KK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJf
dCBjbG9iYmVyZWRGbGFnID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZEZsYWc7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnRwdHJfdCB0b3BWYWx1ZSA9IFN0cnVjdHVyZVNldDo6cmVzZXJ2ZWRWYWx1ZTsK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcG9seW1vcnBoaXNtTGltaXQgPSAxMDsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2xvYmJlcmVkU3VwcmVtYWN5VGhyZXNob2xkID0gMjsKICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIHNpbmdsZXRvbigpIGNvbnN0CisgICAgdm9pZCBtYWtlVG9wV2hl
blRoaW4oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGlzTmVpdGhlckNsZWFyTm9yVG9wKCkpOwot
ICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmU7CisgICAgICAgIEFTU0VSVChtX3NldC5pc1RoaW4o
KSk7CisgICAgICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOwogICAgIH0KICAgICAKLSAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNv
bnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1
cmU7Ci0gICAgfQorICAgIGJvb2wgbWVyZ2VOb3RUb3AoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cik7CiAgICAgCi0gICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBD
b250ZXh0KiBjb250ZXh0KSBjb25zdAorICAgIHZvaWQgc2V0Q2xvYmJlcmVkKGJvb2wgY2xvYmJl
cmVkKQogICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmlu
dCgiVE9QIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIG91dC5wcmludCgiWyIpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICBvdXQucHJpbnQoaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwotICAgICAgICBv
dXQucHJpbnQoIl0iKTsKLSAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICAgICAgQVNT
RVJUKCFpc1RvcCgpKTsKKyAgICAgICAgbV9zZXQuc2V0UmVzZXJ2ZWRGbGFnKGNsb2JiZXJlZCk7
CiAgICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQotICAgIAotICAgIC8vIE5C
LiBUaGlzIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KICAgICAKLSAgICAvLyBUaGlz
IGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgotICAgIFN0cnVjdHVy
ZSogbV9zdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJlU2V0IG1fc2V0OwogfTsKIAogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2NrIDwgYmxvY2stPnNp
emUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgp
KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7CisgICAgICAgICAgICAgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICAgICAgICAgICAgICBOb2RlKiBjaGlsZCA9
IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5v
cCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yODUs
MTMgKzI4NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNl
U3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkg
IT0gc291cmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Rp
Y2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMzMSw3ICszMjMsNiBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgICAgICAgICAg
ICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6
CkBAIC0zODYsMTMgKzM3Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm90aWNlU3RydWN0dXJlQ2hlY2tBY2NvdW50aW5nRm9yQXJyYXlNb2RlKHZhcmlhYmxlLCBz
dWJOb2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2tBY2NvdW50aW5n
Rm9yQXJyYXlNb2RlKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR1BoYXNl
LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK2NsYXNzIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgeworcHVibGljOgorICAgIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UoR3Jh
cGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAid2F0Y2hhYmxlIHN0cnVjdHVyZSB3
YXRjaGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAg
ICAgICAvLyBUaGVzZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8gcGxhY2F0ZSBzdWJz
ZXF1ZW50IGFzc2VydGlvbnMuIFdlIGNvbid0IGFjdHVhbGx5CisgICAgICAgIC8vIGhhdmUgdG8g
d2F0Y2ggdGhlc2UgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNpdGlvbiBhd2F5IGZy
b20gaXQsIGJ1dCB0aGV5IGFyZQorICAgICAgICAvLyB3YXRjaGFibGUgYW5kIHNvIHdlIHdpbGwg
YXNzZXJ0IGlmIHRoZXkgYXJlbid0IHdhdGNoZWQuCisgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgu
bV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOyAKKyAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5t
X3ZtLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgt
LTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBu
b2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSlND
b25zdGFudDoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICAg
ICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2Rl
LT5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CisgICAgICAgICAgICAg
ICAgICAgIHRyeVdhdGNoKG5vZGUtPmV4ZWN1dGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRv
U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgorICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgUHV0
U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKKyAg
ICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAg
ICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgICAgICAgICAgICAg
dHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9m
ZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQu
c3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlh
bnQuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVl
ZCB0byB3YXRjaCBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3
b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50
byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQorICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVs
dGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB2
YXJpYW50cyBkaWQgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFu
dC5jYWxsTGlua1N0YXR1cygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2Fz
ZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5t
dWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ5V2F0Y2godmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5uZXdTdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAg
ICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5
V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YXJy
YXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4aW5n
VHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICAgICAg
ICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBUb1N0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5n
bG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3RydWN0
dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAgICAg
ICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50
aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdSZWdleHA6Cisg
ICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
Citwcml2YXRlOgorICAgIHZvaWQgdHJ5V2F0Y2goSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVlLmFzQ2Vs
bCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChKU0NlbGwqIGNlbGwpCisgICAg
eworICAgICAgICBpZiAoY2VsbCkKKyAgICAgICAgICAgIHRyeVdhdGNoKGNlbGwtPnN0cnVjdHVy
ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChjb25zdCBTdHJ1Y3R1cmVTZXQm
IHNldCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGktLTsp
CisgICAgICAgICAgICB0cnlXYXRjaChzZXRbaV0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRy
eVdhdGNoKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIG1f
Z3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldCgpKTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZyhHcmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdp
b24oIkRGRyBXYXRjaGFibGUgU3RydWN0dXJlIFdhdGNoaW5nIik7CisgICAgcmV0dXJuIHJ1blBo
YXNlPFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhh
c2VfaAorI2RlZmluZSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKworI2lm
IEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2Ns
YXNzIEdyYXBoOworCisvLyBTZXQgd2F0Y2hwb2ludHMgb24gYW55IHN0cnVjdHVyZXMgdGhhdCB3
ZSBrbm93IG9mIHRoYXQgYXJlIGN1cnJlbnRseSB3YXRjaGFibGUuIEl0J3MKKy8vIHNvbWV3aGF0
IGNvdW50ZXJpbnR1aXRpdmUsIGJ1dCB0aGlzIGVuZHMgdXAgYmVpbmcgdGhlIGNsZWFuZXN0IGFu
ZCBtb3N0IGVmZmVjdGl2ZSB3YXkKKy8vIG9mIHJlZHVjaW5nIHN0cnVjdHVyZSBjaGVja3Mgb24g
dGVybWluYWwgc3RydWN0dXJlczoKKy8vCisvLyAtIFdlIHVzZWQgdG8gb25seSBzZXQgd2F0Y2hw
b2ludHMgb24gd2F0Y2hhYmxlIHN0cnVjdHVyZXMgaWYgd2Uga25ldyB0aGF0IHRoaXMgd291bGQK
Ky8vICAgcmVtb3ZlIGEgc3RydWN0dXJlIGNoZWNrLiBFeHBlcmltZW50cyBzaG93IHRoYXQgc3dp
dGNoaW5nIGZyb20gdGhhdCwgdG8gYmxpbmRseQorLy8gICBzZXR0aW5nIHdhdGNocG9pbnRzIG9u
IGFsbCB3YXRjaGFibGUgc3RydWN0dXJlcywgd2FzIG5vdCBhIHJlZ3Jlc3Npb24uCisvLworLy8g
LSBJdCBtYWtlcyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiBhIHdob2xlIGxvdCBlYXNpZXIuIFdl
IGp1c3QgYXNzdW1lIHRoYXQgd2F0Y2hhYmxlCisvLyAgIHN0cnVjdHVyZXMgYXJlIHVuY2xvYmJl
cmFibGUgd2l0aG91dCBoYXZpbmcgdG8gZG8gYW55IG90aGVyIGxvZ2ljLgorCitib29sIHBlcmZv
cm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1dh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5j
cHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSwxMyArMTE5
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGFkZExhemlseShqc0Nhc3Q8SlNGdW5jdGlvbio+
KG1fbm9kZS0+ZnVuY3Rpb24oKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAg
ICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBC
YWRXZWFrQ29uc3RhbnRDYWNoZVdhdGNocG9pbnQgOiBCYWRDYWNoZVdhdGNocG9pbnQsCi0gICAg
ICAgICAgICAgICAgbV9ub2RlLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhcmlh
YmxlV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGFkZExhemlseShtX25vZGUtPnZhcmlhYmxlV2F0
Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw2IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShO
b2RlKiAKICAgICBjYXNlIEJpdExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6CiAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZToKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgogICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToK
ICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM5OSw5ICszOTksNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrU3Ry
dWN0dXJlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKCk7CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAg
ICAgICAgICAgIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpOwotICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAgICAgICAgIGNv
bXBpbGVDaGVja0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2MDksMTIgKzE2
MDYsNiBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21waWxlU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQoKQotICAgIHsKLSAgICAgICAgYWRkV2Vha1JlZmVyZW5jZShtX25vZGUtPnN0
cnVjdHVyZSgpKTsKLSAgICAgICAgc3BlY3VsYXRlQ2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAg
ICB9Ci0gICAgCiAgICAgdm9pZCBjb21waWxlQ2hlY2tGdW5jdGlvbigpCiAgICAgewogICAgICAg
ICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkBAIC0zMjA3LDcgKzMx
OTgsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhleGl0LCBjb250aW51YXRpb24pOwotICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOwor
ICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9v
bGVhblRydWUpOwogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0zMjc5LDcgKzMy
NzAsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhleGl0LCBjb250aW51YXRpb24pOwotICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOwor
ICAgICAgICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9v
bGVhblRydWUpOwogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC00NzE4LDcgKzQ3
MDksOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgdGVybWluYXRlKEV4aXRLaW5kIGtpbmQp
CiAgICAgewotICAgICAgICBzcGVjdWxhdGUoa2luZCwgbm9WYWx1ZSgpLCAwLCBtX291dC5ib29s
ZWFuVHJ1ZSk7CisgICAgICAgIHNwZWN1bGF0ZShraW5kLCBub1ZhbHVlKCksIG51bGxwdHIsIG1f
b3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB0eXBlQ2hlY2soCkBAIC01NDYzLDcgKzU0NTUsNyBAQCBwcml2
YXRlOgogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9CiAgICAgICAg
ICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0
cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShlZGdlKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNl
dChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShl
ZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RTdHJ1
Y3R1cmUpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0
ZSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8t
c3RydWN0dXJlLWNvbnRyYWRpY3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheWlmeS10by1zdHJ1Y3R1cmUtY29udHJhZGljdGlvbi5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJy
YXlpZnktdG8tc3RydWN0dXJlLWNvbnRyYWRpY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKGFycmF5LCB2LCBwKSB7CisgICAgYXJyYXlbMF0gPSAx
MDsKKyAgICBpZiAocCkKKyAgICAgICAgdiA9ICJoZWxsbyI7CisgICAgYXJyYXlbMF0gPSB2Owor
fQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7
CisgICAgdmFyIGFycmF5ID0gWzQyXTsKKyAgICBmb28oYXJyYXksIDQzLCBmYWxzZSk7CisgICAg
aWYgKGFycmF5WzBdICE9IDQzKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyBhcnJheTsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NDY3KQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMDUtMjkgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBBSSBzaG91bGQgYmUgYWJs
ZSB0cmFjayBzdHJ1Y3R1cmUgc2V0cyBsYXJnZXIgdGhhbiAxCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgwNzMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxl
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1
YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLXNpbXBsZS5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24tc2ltcGxlLmpzOiBBZGRlZC4KKwogMjAxNC0wNS0yMSAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIERGRzo6Y2xvYmJlcml6ZSBzaG91
bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMgb2YgR0MKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlk
LWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5v
IGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1v
cnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0
cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVj
dHVyZS1lbGltaW5hdGlvbi1zaW1wbGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5
LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlk
LWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5
LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0
aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBA
CitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9u
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hl
Y2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0
aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1w
bGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
ZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dl
dC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0
aW9uLXNpbXBsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9n
ZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1i
aW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MX07CisgICAgdmFy
IHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICByZXN1bHQgXj0gby5hOworICAgICAgICB2
YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAg
IGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1i
aW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MSwgYjoyLCBjOjMsIGQ6NCwgZTo1
LCBmOjYsIGc6NywgaDo4LCBpOjksIGo6MTAsIGs6MTF9OworICAgIHZhciBwID0ge2E6MiwgYjoz
LCBjOjQsIGQ6NSwgZTo2LCBmOjcsIGc6OCwgaDo5LCBpOjEwLCBqOjExLCBrOjEyLCBsOjEzfTsK
KyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsr
aSkgeworICAgICAgICByZXN1bHQgKz0gby5hIF4gby5iIF4gby5jIF4gby5kIF4gby5lIF4gby5m
IF4gby5nIF4gby5oIF4gby5pIF4gby5qIF4gby5rOworICAgICAgICB2YXIgdG1wID0gbzsKKyAg
ICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0g
NjUwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0Owor
fSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1p
ZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxLCBi
OjIsIGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3LCBoOjgsIGk6OSwgajoxMCwgazoxMX07CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCisg
ICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIgfCBvLmMgXiBvLmQgJiBvLmUgXiBvLmYgfCBvLmcg
XiBvLmggJiBvLmkgXiBvLmogfCBvLms7CisgICAgaWYgKHJlc3VsdCAhPSAxNTAwMDAwMCkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MX07CisgICAgdmFyIHAg
PSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcSA9IHthOjMsIGI6M307CisgICAgdmFyIHIgPSB7YTo0
LCBjOjV9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCBePSBvLmE7CisgICAgICAgIHZhciB0bXAgPSBv
OworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSByOworICAgICAg
ICByID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232349</attachid>
            <date>2014-06-01 10:50:25 -0700</date>
            <delta_ts>2014-06-01 11:36:46 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>176409</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NDY3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwMSBA
QAorMjAxNC0wNS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhp
cyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGludGVycHJldGVy
KSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVyZToKKyAgICAg
ICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRyYWNrIGFuIGFy
Yml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAgICAgICBzaXpl
IGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhhdmUgYW55IG9m
IHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdoaWNoIC0gYnV0
IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3QgaW4gdGhlIHNl
dC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBzdGlsbCBiZSBU
T1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisgICAgICAgICAg
YXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBleHBsb3Npb24g
b24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91Z2ggdGhhdCBp
dCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBzaW5jZSB3ZSBo
YXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisgICAgICAgICAg
c3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0byBrbm93IGFi
b3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBvaW50cyBvbiBh
bGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQKKyAgICAgICAg
ICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoYXQgdGhlIHdh
dGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGlzIGFsbG93cyB0
cmFja2luZyBvZiB3YXRjaGFibGUgc3RydWN0dXJlcyB0byBiZSBmYXIgc2ltcGxlciB0aGFuIGJl
Zm9yZS4gUHJldmlvdXNseSwKKyAgICAgICAgICBhIHN0cnVjdHVyZSBiZWluZyB0cmFja2VkIGFz
ICJmdXR1cmUgcG9zc2libGUiIHdhcyBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIHdhdGNoYWJsZSBi
dXQKKyAgICAgICAgICB3ZSBtaWdodCBub3QgYWN0dWFsbHkgd2F0Y2ggaXQuIFRoaXMgbWFrZXMg
YWxnZWJyYSBvdmVyIHNldHMgb2YgZnV0dXJlIHBvc3NpYmxlCisgICAgICAgICAgc3RydWN0dXJl
cyBxdWl0ZSB3ZWlyZC4gQnV0IHdhdGNoaW5nIGFsbCB3YXRjaGFibGUgc3RydWN0dXJlcyBtZWFu
cyB0aGF0IHdlIHNpbXBsZSBzYXkKKyAgICAgICAgICB0aGF0IGEgc3RydWN0dXJlIHNldCBjYW4g
YmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6IHVuY2xvYmJlcmVkLCB3aGljaCBtZWFucyBpdCdz
IGp1c3QKKyAgICAgICAgICBhIHNldCBvZiBzdHJ1Y3R1cmVzIGFuZCBpdCBkb2Vzbid0IG1hdHRl
ciB3aGF0IGlzIHdhdGNoYWJsZSBvciB3aGF0IGlzbid0IGJlY2F1c2Ugd2UndmUKKyAgICAgICAg
ICBwcm92ZW4gdGhhdCB0aGUgdmFsdWUgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVz
IHJpZ2h0IG5vdzsgYW5kIGNsb2JiZXJlZCwgd2hpY2gKKyAgICAgICAgICBtZWFucyB0aGF0IHdl
IGhhdmUgYSBzZXQgb2Ygc3RydWN0dXJlcywgcGx1cyBhbGwgcG9zc2libGUgc3RydWN0dXJlcyB0
ZW1wb3JhcmlseSwgd2l0aAorICAgICAgICAgIGludmFsaWRhdGlvbiByZW1vdmluZyB0aGUgInBs
dXMgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMiLiBDbG9iYmVyaW5nIGEgc2V0IG1lYW5zIHRoYXQK
KyAgICAgICAgICBpZiBhbnkgb2YgaXRzIHN0cnVjdHVyZXMgYXJlIHVud2F0Y2hhYmxlLCB0aGUg
c2V0IGp1c3QgYmVjb21lcyBUT1A7IGJ1dCBpZiBhbGwKKyAgICAgICAgICBzdHJ1Y3R1cmVzIGlu
IHRoZSBzZXQgYXJlIHdhdGNoYWJsZSB0aGVuIHdlIGp1c3Qgc2V0IHRoZSBjbG9iYmVyZWQgYml0
IHRvIGFkZCB0aGUgInBsdXMKKyAgICAgICAgICBhbGwgcG9zc2libGUgc3RydWN0dXJlcyB0ZW1w
b3JhcmlseSIgdGhpbmcuIFRoaXMgcHJlY2lzZWx5IHRyYWNrcyB0aGUgZXhhY3QgbWVhbmluZyBv
ZgorICAgICAgICAgIHdhdGNoYWJpbGl0eSBhbmQgaW52YWxpZGF0aW9uIHBvaW50cy4KKyAgICAg
ICAgCisgICAgICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpjbGVhcik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9tKToK
KyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlU2V0OjpTdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmlzRW1w
dHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmdlbmVyaWNGaWx0ZXIpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpDb250YWluc091dE9mTGlu
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6Om9wZXJh
dG9yKCkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmRlbGV0ZVN0cnVjdHVyZUxpc3RJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2V0RW1wdHkpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXIuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6Ym9vbGVhblJlc3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFs
dWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNlcnZlVHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6
ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFy
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpub3JtYWxpemVDbGFyaXR5KToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6
Y2xvYmJlclN0cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6
Om9ic2VydmVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpU
cmFuc2l0aW9uT2JzZXJ2ZXI6OlRyYW5zaXRpb25PYnNlcnZlcik6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpvcGVyYXRvcigpKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc0hlYXBUb3ApOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0VmFsdWU6OnNldFR5cGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1l
cmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjp2YWxpZGF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aGFzQ2xvYmJlcmFibGVTdGF0ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6YmVzdFByb3ZlblN0cnVjdHVyZSk6IERlbGV0ZWQuCisg
ICAgICAgICogZGZnL0RGR0FsbG9jYXRvci5oOgorICAgICAgICAqIGRmZy9ERkdBcmd1bWVudHNT
aW1wbGlmaWNhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQpOgorICAgICAgICAq
IGRmZy9ERkdDRkFQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q0ZBUGhhc2U6OnBlcmZv
cm1CbG9ja0NGQSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpDU0VQaGFzZTo6Y2hlY2tTdHJ1Y3R1cmVFbGltaW5hdGlvbik6CisgICAgICAgIChK
U0M6OkRGRzo6Q1NFUGhhc2U6OnN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RWxpbWluYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwZXJmb3JtTm9kZUNTRSk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNp
dGlvbkNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjphc3NlcnRJc1dhdGNo
ZWQpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6YXNzZXJ0SXNXYXRj
aGVkKToKKyAgICAgICAgKiBkZmcvREZHRG9lc0dDLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpk
b2VzR0MpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6On5HcmFwaCk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojpjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAg
ICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlBsYW46OmNvbXBpbGVJblRocmVhZEltcGwpOgorICAgICAgICAqIGRm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RG
R1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3Ry
YWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjppc05laXRoZXJDbGVhck5vclRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNGaW5pdGUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OnNpemUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
bmx5U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjptYWtlVG9wV2hlblRoaW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6Om1ha2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhl
clRoYW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmlzU3VwZXJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlOjppc0NsZWFyT3JUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVy
ZXMpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzVmFsaWRPZmZzZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6Omhhc1NpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1w
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjp0
b3BWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50
aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFudEFycmF5Q2hlY2tzKToKKyAgICAgICAg
KiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJs
ZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gpOgorICAgICAgICAoSlNDOjpERkc6OnBl
cmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6CisgICAgICAgICogZGZnL0RGR1dhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDogQWRkZWQuCisgICAgICAgICogZGZnL0RGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldhdGNocG9p
bnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGll
cy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxh
dGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQu
CisKIDIwMTQtMDUtMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbZnRsb3B0XSBERkc6OmNsb2JiZXJpemUgc2hvdWxkIGJlIGJsaW5kIHRvIHRoZSBlZmZlY3Rz
IG9mIEdDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDE1
IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSB7CiAKK05PX1JFVFVSTl9XSVRI
X1ZBTFVFIHN0YXRpYyB2b2lkIGpzY0V4aXQoaW50IHN0YXR1cykKK3sKKyAgICBpZiAoREZHOjpp
c0NyYXNoaW5nKCkpIHsKKyAgICAgICAgZm9yICg7OykKKyAgICAgICAgICAgIHBhdXNlKCk7Cisg
ICAgfQorICAgIGV4aXQoc3RhdHVzKTsKK30KKwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEVsZW1l
bnRIYW5kbGVPd25lcjsKIGNsYXNzIE1hc3VxZXJhZGVyOwpAQCAtODg1LDcgKzg5NCw3IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25UcmEKIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvblF1aXQoRXhlY1N0YXRlKikKIHsKLSAgICBleGl0KEVYSVRf
U1VDQ0VTUyk7CisgICAganNjRXhpdChFWElUX1NVQ0NFU1MpOwogCiAjaWYgQ09NUElMRVIoTVNW
QykgJiYgT1MoV0lOQ0UpCiAgICAgLy8gV2l0aG91dCB0aGlzLCBWaXN1YWwgU3R1ZGlvIHdpbGwg
Y29tcGxhaW4gdGhhdCB0aGlzIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4KQEAgLTEw
MTIsNyArMTAyMSw3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICBlY29y
ZV9zaHV0ZG93bigpOwogI2VuZGlmCiAKLSAgICByZXR1cm4gcmVzOworICAgIGpzY0V4aXQocmVz
KTsKIH0KIAogc3RhdGljIGJvb2wgcnVuV2l0aFNjcmlwdHMoR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QsIGNvbnN0IFZlY3RvcjxTY3JpcHQ+JiBzY3JpcHRzLCBib29sIGR1bXApCkBAIC0xMTU2
LDcgKzExNjUsNyBAQCBzdGF0aWMgTk9fUkVUVVJOIHZvaWQgcHJpbnRVc2FnZVN0YXRlbWVuCiAg
ICAgZnByaW50ZihzdGRlcnIsICIgIC0tPGpzYyBWTSBvcHRpb24+PTx2YWx1ZT4gIFNldHMgdGhl
IHNwZWNpZmllZCBKU0MgVk0gb3B0aW9uXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7
CiAKLSAgICBleGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkUpOworICAgIGpz
Y0V4aXQoaGVscCA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRSk7CiB9CiAKIHZvaWQgQ29t
bWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmdjLCBjaGFyKiogYXJndikKQEAgLTEyNDUs
NyArMTI1NCw3IEBAIHZvaWQgQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKGludCBhcmcKICAg
ICBpZiAobmVlZFRvRHVtcE9wdGlvbnMpCiAgICAgICAgIEpTQzo6T3B0aW9uczo6ZHVtcEFsbE9w
dGlvbnMoc3RkZXJyKTsKICAgICBpZiAobmVlZFRvRXhpdCkKLSAgICAgICAgZXhpdChFWElUX1NV
Q0NFU1MpOworICAgICAgICBqc2NFeGl0KEVYSVRfU1VDQ0VTUyk7CiB9CiAKIGludCBqc2NtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUzLDYgKzM1
Myw3IEBACiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgz
MzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODM2NEI3MTY0QjBD
MTEwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODM2NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBERkdC
cmFuY2hEaXJlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODg1RTEwMTg0
OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFGNCAvKiBE
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmNwcCAqLzsgfTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8q
IEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkwRjhG
MkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExp
bmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcyRjA0
RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovOyB9OwpAQCAtNDk1LDYg
KzQ5Niw4IEBACiAJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERDE4
MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4MDcz
OEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlv
bi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
RDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBDNzgw
M0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGRDJENEZFMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZEMkQ0RkYxOTJGRUU1ODAw
QTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJENEZEMTkyRkVFNTgwMEEx
NzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0MDAw
RkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAq
LzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQwRTAw
RkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIg
LyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAg
Ki87IH07CkBAIC01MjgsNiArNTMxLDggQEAKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVGIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJpYWJs
ZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQzNkFCMjMw
MDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUExNDM2
QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9OworCQkwRkU3MjExRDE5M0I5QzU5MDAz
MUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlv
bi5jcHAgKi87IH07CisJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjEx
QzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThGNSAv
KiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAgKi87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkU5NUY3OTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFOTVGNzcxOEI1Njk0NzAwQjUz
MUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTIxNjAsNiArMjE2NSw3IEBACiAJ
CTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8q
IERGR0JyYW5jaERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdCcmFuY2hEaXJlY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdCcmFuY2hEaXJlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5
dGVjb2RlVXNlRGVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2Rl
VXNlRGVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODkzQkRBMTkzNkUyM0Mw
MDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjhGMkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGVExMaW5rLmNwcDsgcGF0aCA9IGZ0bC9GVExMaW5rLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExp
bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTGluay5oOyBwYXRoID0gZnRsL0ZUTExpbmsuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERG
R0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkSWRl
bnRpZmllcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzEzLDYgKzIzMTksOCBAQAogCQkwRkNFRkFERDE4
MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMTG9jYXRpb24uY3BwOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0
IC8qIEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExv
Y2F0aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDRGQzE5MkZFRTU4MDBBMTc4QkYgLyogREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0g
ZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Js
b2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Js
b2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzQ4LDYgKzIzNTYsOCBAQAogCQkwRkREQkZCMzE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBk
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmNwcDsg
cGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVHJhbnNpdGlvbi5oOyBwYXRoID0gZGZnL0RGR1Ry
YW5zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHBh
dGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTk1Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExEYXRhU2VjdGlvbi5jcHA7IHBh
dGggPSBmdGwvRlRMRGF0YVNlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDgwNiw2ICs0ODE2LDcgQEAKIAkJCQkyQUNDRjNERDE4NUZFMjZCMDA4M0UyQUQgLyogREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjMxODUyRTJDNjAwQzlF
OTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQzIwQ0I0MTg1
MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggKi8sCisJCQkJMEY4
OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICov
LAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmggKi8sCiAJCQkJMEYyRkNDRjcxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEu
Y3BwICovLAogCQkJCTBGMkZDQ0Y4MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmgg
Ki8sCkBAIC00ODE3LDYgKzQ4MjgsOCBAQAogCQkJCTBGRDhBMzIyMTdENTFGNTcwMENBMkM0MCAv
KiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAogCQkJCTBGRDhBMzIz
MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcCAqLywKIAkJCQkwRkQ4QTMyNDE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oICovLAorCQkJCTBGRTcy
MTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAqLywKKwkJCQkwRkU3MjEx
QzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovLAogCQkJCTBGNjM5NDNDMTVD
NzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcCAqLywKIAkJCQkw
RjYzOTQzRDE1Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oICov
LAogCQkJCTBGQkUwRjZGMTZDMURCMDEwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmNw
cCAqLywKQEAgLTQ4MzgsNiArNDg1MSw4IEBACiAJCQkJMEYyQkRDNDMxNTIyODAxNzAwQ0Q4OTEw
IC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCAqLywKIAkJCQkwRkZGQzk1MzE0RUY5MDk1MDBD
NzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcCAqLywKIAkJCQkw
RkZGQzk1NDE0RUY5MDk1MDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmggKi8sCisJCQkJMEZEMkQ0RkMxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwICovLAorCQkJCTBGRDJENEZEMTkyRkVFNTgwMEExNzhC
RiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi8sCiAJCQkJMEZDOTdG
M0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICov
LAogCQkJCTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlv
blBoYXNlLmggKi8sCiAJCQkJMEZEQjJDRTUxNzQ4MzBBMjAwN0IzQzFCIC8qIERGR1dvcmtsaXN0
LmNwcCAqLywKQEAgLTU3NzYsNiArNTc5MSw3IEBACiAJCQkJMEY0ODUzMjgxODdERkRFQzAwODNC
Njg3IC8qIEZUTEF2YWlsYWJsZVJlY292ZXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEw
QTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ2FwYWJpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVBMEEyMzE3MDk2MDY5MDBCQjcyMkMgLyogRlRMQ29tbW9uVmFsdWVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkQyRDRGRjE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBBMEMxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTENvbXBpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTk1RjdBMThCNTY5
NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFDOTIy
QkMxOEExNjE4MjAwM0NFMEZCIC8qIEZUTERXQVJGRGVidWdMaW5lSW5mby5oIGluIEhlYWRlcnMg
Ki8sCkBAIC01ODE3LDYgKzU4MzMsNyBAQAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAv
KiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFNDE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTcz
REE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUzRkE5MDA1Rjk3OUEgLyogRlRMV2VpZ2h0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRU
YXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Niw2ICs2OTczLDcgQEAKIAkJCQkwRkYwRjE5
OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTc2N0I1QjUxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAv
KiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEMkQ0RkUxOTJGRUU1
ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZH
Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyog
REZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNjk4NCw2ICs3MDAyLDcgQEAKIAkJ
CQkwRkMyMENCOTE4NTU2QTM1MDBDOUU5NTQgLyogREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkFDQ0YzREUxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFy
cmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMyMENCNTE4NTJFMkM2
MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTcxNzQsNiArNzE5Myw3IEBACiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFF
ODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFB
MTdCRURCRDMwMDdDQjYzQSAvKiBKU1Byb21pc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mx
ODRFMjIxN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMy
NCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4
NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgU3RydWN0dXJlU2V0JiBTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPShjbwogdm9pZCBTdHJ1
Y3R1cmVTZXQ6OmNsZWFyKCkKIHsKICAgICBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3Nhcnko
KTsKLSAgICBzZXQoMCwgdHJ1ZSk7CisgICAgc2V0RW1wdHkoKTsKIH0KIAogYm9vbCBTdHJ1Y3R1
cmVTZXQ6OmFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTc1LDcgKzc1LDcgQEAgYm9vbCBT
dHJ1Y3R1cmVTZXQ6OnJlbW92ZShTdHJ1Y3R1cmUqIHN0cgogewogICAgIGlmIChpc1RoaW4oKSkg
ewogICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSB7Ci0gICAgICAg
ICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRFbXB0eSgpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtODgsNyAr
ODgsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6cmVtb3ZlKFN0cnVjdHVyZSogc3RyCiAgICAgICAg
IGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsKICAgICAg
ICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewogICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVz
dHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICAgICAgICAgIHNldEVt
cHR5KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTQ0LDIz
ICsxNDQsOCBAQCB2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKGlzVGhpbigpKSB7Ci0gICAgICAgIGlm
ICghc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChv
dGhlci5jb250YWluc091dE9mTGluZShzaW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAob3RoZXIu
Y29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVu
Z3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKLSAgICAgICAgY2xlYXIoKTsK
KyAgICBDb250YWluc091dE9mTGluZSBjb250YWluc091dE9mTGluZShvdGhlcik7CisgICAgZ2Vu
ZXJpY0ZpbHRlcihjb250YWluc091dE9mTGluZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlU2V0Ojpl
eGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCkBAIC0zMjMsOCArMzA4LDEwIEBAIGJv
b2wgU3RydWN0dXJlU2V0Ojpjb250YWluc091dE9mTGluZShTdHIKIAogdm9pZCBTdHJ1Y3R1cmVT
ZXQ6OmNvcHlGcm9tKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCiB7Ci0gICAgaWYgKG90aGVy
LmlzVGhpbigpKSB7CisgICAgaWYgKG90aGVyLmlzVGhpbigpIHx8IG90aGVyLm1fcG9pbnRlciA9
PSByZXNlcnZlZFZhbHVlKSB7CisgICAgICAgIGJvb2wgdmFsdWUgPSBnZXRSZXNlcnZlZEZsYWco
KTsKICAgICAgICAgbV9wb2ludGVyID0gb3RoZXIubV9wb2ludGVyOworICAgICAgICBzZXRSZXNl
cnZlZEZsYWcodmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24g
MTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTUgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K25hbWVzcGFjZSBERkcgeworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKK30KKwogY2xh
c3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTZXQoKQogICAgIHsKLSAg
ICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICBzZXRFbXB0eSgpOwogICAgIH0KICAgICAKICAg
ICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02Nyw3ICs3MSwxMCBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiBpc1RoaW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGJvb2wgcmVzdWx0
ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOworICAgICAgICBpZiAocmVzdWx0KQor
ICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgYm9vbCBhZGQoU3RydWN0dXJlKik7CkBA
IC03OCw2ICs4NSwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJl
U2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBnZW5lcmljRmlsdGVyKEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAoaXNUaGluKCkpIHsKKyAgICAgICAgICAg
IGlmICghc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgaWYgKGZ1bmN0b3Ioc2luZ2xlU3RydWN0dXJlKCkpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3QqIGxpc3QgPSBzdHJ1Y3R1cmVMaXN0
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytp
KSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5saXN0KClbaV0pKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+bGlzdCgpW2ktLV0gPSBsaXN0LT5s
aXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFsaXN0LT5t
X2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgfQorICAgIAogICAgIGJvb2wgaXNT
dWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmKSBjb25zdDsKICAgICBib29sIGlzU3VwZXJzZXRP
Zihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAogICAgIHsKQEAgLTEyNCwxNSArMTUz
LDMzIEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAK
IHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsK
KyAgICAKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRoaW5GbGFnID0gMTsKICAgICBzdGF0
aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7Ci0gICAgc3RhdGljIGNvbnN0IHVp
bnRwdHJfdCBmbGFncyA9IDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IHRo
aW5GbGFnIHwgcmVzZXJ2ZWRGbGFnOwogICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgcmVzZXJ2
ZWRWYWx1ZSA9IDQ7CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFN0YXJ0aW5n
U2l6ZSA9IDQ7CiAgICAgCiAgICAgYm9vbCBhZGRPdXRPZkxpbmUoU3RydWN0dXJlKik7CiAgICAg
Ym9vbCBjb250YWluc091dE9mTGluZShTdHJ1Y3R1cmUqKSBjb25zdDsKKyAgICAKKyAgICBjbGFz
cyBDb250YWluc091dE9mTGluZSB7CisgICAgcHVibGljOgorICAgICAgICBDb250YWluc091dE9m
TGluZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9zZXQoc2V0KQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3IoKShT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc2V0
LmNvbnRhaW5zT3V0T2ZMaW5lKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgor
ICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG1fc2V0OworICAgIH07CisKICAgICB2b2lkIGNv
cHlGcm9tKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAogICAgIGNsYXNzIE91dE9mTGluZUxp
c3QgewpAQCAtMTU0LDcgKzIwMSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBkZWxldGVT
dHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKQogICAgIHsKLSAgICAgICAgaWYgKCFpc1RoaW4oKSkK
KyAgICAgICAgaWYgKCFpc1RoaW4oKSAmJiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKICAg
ICAgICAgICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3koc3RydWN0dXJlTGlzdCgpKTsKICAgICB9
CiAgICAgCkBAIC0xODUsMTAgKzIzMiwyMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc2V0
KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0cnVjdHVyZXMpLCBmYWxzZSk7CiAgICAgfQorICAg
IHZvaWQgc2V0RW1wdHkoKQorICAgIHsKKyAgICAgICAgc2V0KDAsIHRydWUpOworICAgIH0KICAg
ICB2b2lkIHNldCh1aW50cHRyX3QgcG9pbnRlciwgYm9vbCBzaW5nbGVTdHJ1Y3R1cmUpCiAgICAg
ewogICAgICAgICBtX3BvaW50ZXIgPSBwb2ludGVyIHwgKHNpbmdsZVN0cnVjdHVyZSA/IHRoaW5G
bGFnIDogMCkgfCAobV9wb2ludGVyICYgcmVzZXJ2ZWRGbGFnKTsKICAgICB9CisgICAgYm9vbCBn
ZXRSZXNlcnZlZEZsYWcoKSBjb25zdCB7IHJldHVybiBtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWc7
IH0KKyAgICB2b2lkIHNldFJlc2VydmVkRmxhZyhib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlKQorICAgICAgICAgICAgbV9wb2ludGVyIHw9IHJlc2VydmVkRmxhZzsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9wb2ludGVyICY9IH5yZXNlcnZlZEZsYWc7CisgICAgfQog
CiAgICAgdWludHB0cl90IG1fcG9pbnRlcjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNCw2ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBleGVj
dXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIGJvb2wgZXhlY3V0ZUVmZmVj
dHModW5zaWduZWQgY2xvYmJlckxpbWl0LCBOb2RlKik7CiAgICAgCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsK
ICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTQ4LDcgKzE0OSwxMyBAQCBwdWJs
aWM6CiBwcml2YXRlOgogICAgIHZvaWQgY2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1
bnNpZ25lZCBpbmRleEluQmxvY2spOwogICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25z
dCBDb2RlT3JpZ2luJik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckFsbFZhbHVlcyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIEZ1bmN0b3ImKTsKKyAg
ICAKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7Cisg
ICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbih1bnNpZ25lZCBpbmRleEluQmxvY2ssIFN0cnVjdHVy
ZSogZnJvbSwgU3RydWN0dXJlKiB0byk7CisgICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbnModW5z
aWduZWQgaW5kZXhJbkJsb2NrLCBjb25zdCBUcmFuc2l0aW9uVmVjdG9yJik7CiAgICAgCiAgICAg
ZW51bSBCb29sZWFuUmVzdWx0IHsKICAgICAgICAgVW5rbm93bkJvb2xlYW5SZXN1bHQsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDExICs2MiwxNyBAQCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6CiAgICAgfQogCiAgICAgLy8gTmV4dCBjaGVjayBpZiB3ZSBjYW4gZm9sZCBiZWNhdXNlIHdl
IGtub3cgdGhhdCB0aGUgc291cmNlIGlzIGFuIG9iamVjdCBvciBzdHJpbmcgYW5kIGRvZXMgbm90
IGVxdWFsIHVuZGVmaW5lZC4KLSAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBl
KQotICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24o
KSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYykpCi0gICAgICAgICAgICAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9
IFN0cmluZ1R5cGUpCisgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkgJiYg
IXZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpIHsKKyAgICAgICAgYm9vbCBhbGxUcnVlID0gdHJ1
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0
dXJlW2ldOworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5l
ZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpCisg
ICAgICAgICAgICAgICAgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBTdHJpbmdU
eXBlKSB7CisgICAgICAgICAgICAgICAgYWxsVHJ1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhbGxUcnVlKQog
ICAgICAgICAgICAgcmV0dXJuIERlZmluaXRlbHlUcnVlOwogICAgIH0KICAgICAKQEAgLTEwNSw5
ICsxMTEsMTggQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkK
K3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnZlcmlmeUVkZ2Uo
Tm9kZSogbm9kZSwgRWRnZSBlZGdlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCEoZm9yTm9kZShl
ZGdlKS5tX3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKTsKKyAgICBpZiAo
IShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzdGFydENyYXNoaW5nKCk7CisgICAgZGF0YUxv
ZygiRWRnZSB2ZXJpZmljYXRpb24gZXJyb3I6ICIsIG5vZGUsICItPiIsIGVkZ2UsICIgd2FzIGV4
cGVjdGVkIHRvIGhhdmUgdHlwZSAiLCBTcGVjdWxhdGlvbkR1bXAodHlwZUZpbHRlckZvcihlZGdl
LnVzZUtpbmQoKSkpLCAiIGJ1dCBoYXMgdHlwZSAiLCBTcGVjdWxhdGlvbkR1bXAoZm9yTm9kZShl
ZGdlKS5tX3R5cGUpLCAiXG4iKTsKKyAgICBkYXRhTG9nKCIgICAgRnVsbCB2YWx1ZTogIiwgZm9y
Tm9kZShlZGdlKSwgIlxuIik7CisgICAgZGF0YUxvZygiXG4iKTsKKyAgICBkYXRhTG9nKCJHcmFw
aCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICBtX2dyYXBoLmR1bXAoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFj
dFN0YXRlVHlwZT4KQEAgLTE0NTYsNyArMTQ3MSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSkpIHsK
LSAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgLy8gVGhpcyB1c2Ug
b2Ygb25seVN0cnVjdHVyZSgpIHNob3VsZCBiZSByZXBsYWNlZCBieSBnaXZpbmcgR2V0QnlJZFN0
YXR1cyB0aGUgYWJpbGl0eQorICAgICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQg
b24gYSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29kZVBhcnNlcidzCisg
ICAgICAgICAgICAvLyBhYmlsaXR5IHRvIGdlbmVyYXRlIGNvZGUgYmFzZWQgb24gYSBHZXRCeUlk
U3RhdHVzIG91dCBvZiBCeXRlQ29kZVBhcnNlciBzbyB0aGF0CisgICAgICAgICAgICAvLyBDb25z
dGFudEZvbGRpbmdQaGFzZSBjYW4gdXNlIGl0LgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICAgICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25s
eVN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0dXMgPSBH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1f
dm0sIHN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygp
W25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOwpAQCAtMTQ2Niw5ICsxNDg2LDE0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVCghc3RhdHVzWzBdLmNoYWluKCkpOwogICAgICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5pc0NlbGwo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
c3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC53YXRjaHBvaW50cygpLmFkZExhemlseShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0Q29uc3RhbnQobm9kZSwgc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgCkBAIC0xNTAyLDggKzE1MjcsMTIgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5
cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBl
bnN1cmVkIHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1
cmVTZXQoKTsKLQotICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKSB7CisgICAgICAgIAorICAgICAgICAvLyBJdCdzIGludGVyZXN0aW5nIHRo
YXQgd2UgY291bGQgaGF2ZSBwcm92ZW4gdGhhdCB0aGUgb2JqZWN0IGhhcyBhIGxhcmdlciBzdHJ1
Y3R1cmUgc2V0CisgICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0aW5n
LiBJbiB0aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCisgICAgICAg
IC8vIG1vcmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkgZG9uJ3QuCisgICAgICAgIAorICAgICAg
ICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICBt
X3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KQEAgLTE1MTEsMzQgKzE1NDAsMTYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogCi0gICAgICAgIC8vIElmIHRoaXMgc3Ry
dWN0dXJlIGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVs
ZCBpbgotICAgICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhl
IGNvbnN0YW50IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCi0gICAgICAgIC8vIHR1cm4gdGhpcyBpbnRv
IGEgd2F0Y2hwb2ludCBpbnN0ZWFkLgotICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICBmaWx0ZXIodmFsdWUsIHZhbHVl
Lm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQogICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDogewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hp
bGQxKCkpOwotCi0gICAgICAgIGZpbHRlcih2YWx1ZSwgbm9kZS0+c3RydWN0dXJlKCkpOwotICAg
ICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwotICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KHRydWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgICAgICAKICAgICBj
YXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAg
IGlmICghZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXND
bGVhcigpKSB7Ci0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwot
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgaWYgKCFmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgICAg
IG9ic2VydmVUcmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cywgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT50cmFuc2l0
aW9uKCkubmV4dCk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTYxNiwxMyArMTYyNywzOSBAQCBib29s
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3Ry
dWN0dXJlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSkKICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZp
bHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGhhdmUgYSBidW5jaCBv
ZiBvcHRpb25zIG9mIGhvdyB0byBleHByZXNzIHRoZSBhYnN0cmFjdCBzZXQgYXQgdGhpcyBwb2lu
dC4gTGV0IHNldCBTCisgICAgICAgIC8vIGJlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0aGF0IHRo
ZSB2YWx1ZSBoYWQgYmVmb3JlIGNsb2JiZXJpbmcgYW5kIGFzc3VtZSB0aGF0IGFsbCBvZgorICAg
ICAgICAvLyB0aGVtIGFyZSB3YXRjaGFibGUuIFRoZSBuZXcgdmFsdWUgc2hvdWxkIGJlIHRoZSBs
ZWFzdCBleHByZXNzaWJsZSB1cHBlciBib3VuZCBvZiB0aGUKKyAgICAgICAgLy8gaW50ZXJzZWN0
aW9uIG9mICJ2YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1
Y3R1cmUoKSIgYW5kICJ2YWx1ZXMKKyAgICAgICAgLy8gdGhhdCBoYXZlIHN0cnVjdHVyZSBpbiBT
IHBsdXMgYW55IHN0cnVjdHVyZSB0cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9tIFMiLiBBc3N1bWUg
dGhhdAorICAgICAgICAvLyBub2RlLT5zdHJ1Y3R1cmUoKSBpcyBub3QgaW4gUyBidXQgaXQgaXMg
dHJhbnNpdGlvbi1yZWFjaGFibGUgZnJvbSBTLiBUaGVuIHdlIHdvdWxkCisgICAgICAgIC8vIGxp
a2UgdG8gc2F5IHRoYXQgdGhlIHJlc3VsdCBpcyAidmFsdWVzIHRoYXQgaGF2ZSBzdHJ1Y3R1cmUg
PSBub2RlLT5zdHJ1Y3R1cmUoKSB1bnRpbAorICAgICAgICAvLyB3ZSBpbnZhbGlkYXRlIiwgYnV0
IHRoZXJlIGlzIG5vIHdheSB0byBleHByZXNzIHRoaXMgdXNpbmcgdGhlIEFic3RyYWN0VmFsdWUg
c3ludGF4LiBTbworICAgICAgICAvLyB3ZSBtdXN0IGNob29zZSBiZXR3ZWVuOgorICAgICAgICAv
LworICAgICAgICAvLyAxKSAidmFsdWVzIHRoYXQgY3VycmVudGx5IGhhdmUgc3RydWN0dXJlID0g
bm9kZS0+c3RydWN0dXJlKCkiLiBUaGlzIGlzIGEgdmFsaWQKKyAgICAgICAgLy8gICAgc3VwZXJz
ZXQgb2YgdGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdhbnQsIGFuZCBpdCdzIHNwZWNpZmljIGVu
b3VnaCB0byBzYXRpc2Z5IHRoZQorICAgICAgICAvLyAgICBwcmVjb25kaXRpb25zIG9mIHRoZSBh
cnJheSBhY2Nlc3MgdGhhdCB0aGlzIGlzIGd1YXJkaW5nLiBJdCdzIGFsc28gc3BlY2lmaWMgZW5v
dWdoCisgICAgICAgIC8vICAgIHRvIGFsbG93IHJlbGV2YW50IG9wdGltaXphdGlvbnMgaW4gdGhl
IGNhc2UgdGhhdCB3ZSBkaWRuJ3QgaGF2ZSBhIGNvbnRyYWRpY3Rpb24KKyAgICAgICAgLy8gICAg
bGlrZSBpbiB0aGlzIGV4YW1wbGUuIE5vdGljZSB0aGF0IGluIHRoZSBhYnNjZW5jZSBvZiBhbnkg
Y29udHJhZGljdGlvbiwgdGhpcyByZXN1bHQKKyAgICAgICAgLy8gICAgaXMgcHJlY2lzZSByYXRo
ZXIgdGhhbiBiZWluZyBhIGNvbnNlcnZhdGl2ZSBMVUIuCisgICAgICAgIC8vCisgICAgICAgIC8v
IDIpICJ2YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2YSBzdHJ1Y3R1cmUgaW4gUyBwbHVzIGFueSBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbi1yZWFjaGFibGUKKyAgICAgICAgLy8gICAgZnJvbSBTIi4gVGhp
cyBpcyBhbHNvIGEgdmFsaWQgc3VwZXJzZXQgb2YgdGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdh
bnQsIGJ1dCBpdCdzCisgICAgICAgIC8vICAgIG5vdCBzcGVjaWZpYyBlbm91Z2ggdG8gc2F0aXNm
eSB0aGUgcHJlY29uZGl0aW9ucyBvZiB0aGUgYXJyYXkgYWNjZXNzIHRoYXQgdGhpcyBpcworICAg
ICAgICAvLyAgICBndWFyZGluZyAtIHNvIHBsYXlpbmcgc3VjaCBzaGVuYW5pZ2FucyB3b3VsZCBw
cmVjbHVkZSB1cyBmcm9tIGhhdmluZyBhc3NlcnRpb25zIG9uCisgICAgICAgIC8vICAgIHRoZSB0
eXBpbmcgcHJlY29uZGl0aW9ucyBvZiBhbnkgYXJyYXkgYWNjZXNzZXMuIFRoaXMgd291bGQgYWxz
byBub3QgYmUgYSBkZXNpcmFibGUKKyAgICAgICAgLy8gICAgYW5zd2VyIGluIHRoZSBhYnNlbmNl
IG9mIGEgY29udHJhZGljdGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IGl0
J3MgdGVtcHRpbmcgdG8gc2ltcGx5IHNheSB0aGF0IHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgQk9U
VE9NIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gdGhlIGNvbnRyYWRpY3Rpb24uIFRoYXQgd291bGQg
YmUgd3JvbmcsIHNpbmNlIHdlIGhhdmVuJ3QgaGl0IGFuIGludmFsaWRhdGlvbiBwb2ludCwKKyAg
ICAgICAgLy8geWV0LgorICAgICAgICB2YWx1ZS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJl
KCkpOwogICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBi
cmVhazsKICAgICB9CkBAIC0xNjUxLDcgKzE2ODgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3Bl
Y0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRo
aXMuCiAKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3Zl
blN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24g
dGhlIGNhc2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBhbGwKKyAg
ICAgICAgLy8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVuIHdlIHNob3VsZCBzdHJl
bmd0aCByZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCisgICAgICAgIC8vIEdldEJ5T2Zm
c2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0
dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CiAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdldEJ5SWRW
YXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tp
XTsKQEAgLTE2ODgsNyArMTcyOSwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAv
LyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAotICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVuU3RydWN0dXJl
KCkpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0ZXIgZG93biB0aGUgY2FzZXMg
aW4gTXVsdGlQdXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGluIGVpdGhlcgorICAgICAgICAv
LyBvbmUgY2FzZSwgb3Igbm90aGluZyBidXQgcmVwbGFjZSBjYXNlcyBhbmQgdGhleSBoYXZlIHRo
ZSBzYW1lIG9mZnNldCwgdGhlbiB3ZSBzaG91bGQKKyAgICAgICAgLy8ganVzdCBzdHJlbmd0aCBy
ZWR1Y2UgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9mIENoZWNrU3RydWN0dXJl
LAorICAgICAgICAvLyBbUmVdQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIFB1dFN0cnVjdHVyZSwg
YW5kIFB1dEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25l
ID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNv
bnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50c1tpXTsKQEAgLTE3MTUsMjUgKzE3NjEsMTcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIAotICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwotICAg
ICAgICAKLSAgICAgICAgU3RydWN0dXJlU2V0IG5ld1NldDsKKyAgICAgICAgU3RydWN0dXJlU2V0
IG9sZFNldDsKKyAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50
ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewotICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJp
YW50LnN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2YXJpYW50
LnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJh
bnNpdGlvbik7Ci0gICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
Y29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICAgICAgbmV3U2V0
LmFkZCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIG9sZFNldC5hZGQodmFy
aWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMu
YXBwZW5kKFRyYW5zaXRpb24odmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICAvLyBVc2UgZmlsdGVyKHZh
bHVlLCBzZXQpIGFzIGEgd2F5IG9mIHNldHRpbmcgdGhlIHN0cnVjdHVyZSBzZXQuIFRoaXMgd29y
a3MgYmVjYXVzZQotICAgICAgICAvLyB3ZSB3b3VsZCBoYXZlIGFscmVhZHkgbWFkZSB0aGUgc2V0
IGJlIFRPUCBiZWZvcmUgdGhpcy4gRmlsdGVyaW5nIHRvcCBpcyBhbm90aGVyIAotICAgICAgICAv
LyB3YXkgb2Ygc2V0dGluZy4KLSAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBuZXdTZXQp
OworICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIG9sZFNldCk7CisgICAgICAgIG9ic2Vy
dmVUcmFuc2l0aW9ucyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25zKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIApAQCAtMTc2Nyw3ICsxODA1LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1
dEJ5SWREaXJlY3Q6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlm
IChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92
ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlzIHVzZSBvZiBvbmx5U3RydWN0dXJlKCkg
c2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBQdXRCeUlkU3RhdHVzIHRoZSBhYmlsaXR5Cisg
ICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9uIGEgU3RydWN0dXJlU2V0LCBhbmQg
dGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncworICAgICAgICAvLyBhYmlsaXR5IHRvIGdl
bmVyYXRlIGNvZGUgYmFzZWQgb24gYSBQdXRCeUlkU3RhdHVzIG91dCBvZiBCeXRlQ29kZVBhcnNl
ciBzbyB0aGF0CisgICAgICAgIC8vIENvbnN0YW50Rm9sZGluZ1BoYXNlIGNhbiB1c2UgaXQuCisg
ICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkK
KyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICBQdXRCeUlkU3Rh
dHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX3ZtLAogICAgICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyksCkBAIC0xNzgxLDcgKzE4MjQsMTAgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
LnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5raW5kKCkgPT0g
UHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVz
WzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbgorICAgICAgICAgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRh
dGVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5uZXdTdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RhdHVzWzBdLm5ld1N0
cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKICAgICAgICAgICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHN0YXR1c1swXS5uZXdTdHJ1Y3R1
cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1
ZSk7CkBAIC0xODU1LDYgKzE5MDEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAg
IG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGlt
aXQsIEFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcik7CiAgICAgICAg
IGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CkBAIC0xOTU3LDMyICsyMDA0
LDY3IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIH0KIAogdGVt
cGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9iYmVy
TGltaXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKAorICAgIHVuc2lnbmVkIGNsb2Ji
ZXJMaW1pdCwgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVj
dHVyZXMoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIGlmIChjbG9iYmVyTGltaXQgPj0gbV9zdGF0
ZS5ibG9jaygpLT5zaXplKCkpCiAgICAgICAgIGNsb2JiZXJMaW1pdCA9IG1fc3RhdGUuYmxvY2so
KS0+c2l6ZSgpOwogICAgIGVsc2UKICAgICAgICAgY2xvYmJlckxpbWl0Kys7CiAgICAgQVNTRVJU
KGNsb2JiZXJMaW1pdCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7CiAgICAgZm9yIChzaXpl
X3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0tOykKLSAgICAgICAgZm9yTm9kZShtX3N0YXRlLmJsb2Nr
KCktPmF0KGkpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICBmdW5jdG9yKGZvck5vZGUo
bV9zdGF0ZS5ibG9jaygpLT5hdChpKSkpOwogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
IHsKICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2Nr
KCktPnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOwogICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRl
cmF0b3IgZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CiAgICAg
ICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgZm9yTm9kZSgqaXRl
cikuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZSgqaXRl
cikpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1i
ZXJPZkFyZ3VtZW50cygpOyBpLS07KQotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3Vt
ZW50KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJp
YWJsZXMoKS5hcmd1bWVudChpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFi
bGVzKCkubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOwotICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVj
dHVyZXModHJ1ZSk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5sb2NhbChp
KSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXModW5z
aWduZWQgY2xvYmJlckxpbWl0KQoreworICAgIGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygp
KQorICAgICAgICByZXR1cm47CisgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJh
Y3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOworICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJl
cih0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Cit2b2lk
IEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNlcnZlVHJhbnNpdGlv
bigKKyAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJl
KiB0bykKK3sKKyAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIEFic3RyYWN0VmFsdWU6OlRyYW5zaXRpb25PYnNlcnZlciB0cmFuc2l0aW9uT2Jz
ZXJ2ZXIoZnJvbSwgdG8pOworICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIHRyYW5zaXRp
b25PYnNlcnZlcik7CiAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOwogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHlwZT46Om9ic2VydmVUcmFuc2l0aW9ucygKKyAgICB1bnNpZ25lZCBj
bG9iYmVyTGltaXQsIGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZlY3RvcikKK3sKKyAgICBpZiAo
IW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFic3RyYWN0
VmFsdWU6OlRyYW5zaXRpb25zT2JzZXJ2ZXIgdHJhbnNpdGlvbnNPYnNlcnZlcih2ZWN0b3IpOwor
ICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25zT2JzZXJ2ZXIpOworICAg
IG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJz
dHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgY29uc3RfY2FzdDxBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPio+KHRoaXMpLT5kdW1wKG91dCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQogewog
ICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxNiArMzMsMzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
Cit2b2lkIEFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9ucyhjb25zdCBUcmFuc2l0aW9u
VmVjdG9yJiB2ZWN0b3IpCit7CisgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CisgICAgICAg
IG1fc3RydWN0dXJlLm9ic2VydmVUcmFuc2l0aW9ucyh2ZWN0b3IpOworICAgICAgICBBcnJheU1v
ZGVzIG5ld01vZGVzID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2Rlcyh2
ZWN0b3JbaV0ucHJldmlvdXMoKS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgIG5l
d01vZGVzIHw9IGFzQXJyYXlNb2Rlcyh2ZWN0b3JbaV0ubmV4dCgpLT5pbmRleGluZ1R5cGUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgbV9hcnJheU1vZGVzIHw9IG5ld01vZGVzOworICAgIH0KKyAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0TW9zdFNw
ZWNpZmljKEdyYXBoJiBncmFwaCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoISF2YWx1ZSAm
JiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBz
dHJ1Y3R1cmUpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNl
dElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXpp
bHkoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgbV9zdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2Rlcyhz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmNsZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fYXJy
YXlNb2RlcyA9IDA7CiAgICAgfQogICAgICAgICAKQEAgLTUwLDE5ICs2NCwyNSBAQCB2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiAgICAgbV92YWx1ZSA9IHZhbHVlOwog
ICAgICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdy
YXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKU1ZhbHVl
IHZhbHVlKQogewogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAg
IG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUu
bWFrZVRvcCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgs
IHN0cnVjdHVyZSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50
U2V0SXNTdGlsbFZhbGlkKCkpIHsKKyAgICAgICAgICAgIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRv
IGFzc3VtZSB0aGF0IHRoZSB3YXRjaHBvaW50IGZvciB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gc2V0
LgorICAgICAgICAgICAgLy8gQnV0IHdlIGNhbid0IGJlY2F1c2Ugb3VyIHZpZXcgb2Ygd2hhdCBz
dHJ1Y3R1cmUgYSB2YWx1ZSBoYXMga2VlcHMgY2hhbmdpbmcuCisgICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNDI2CisgICAgICAgICAgICBn
cmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0KCkpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgICAg
IH0KICAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsK
ICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICB9CiAgICAgCkBAIC03MCwxNyArOTAsMTgg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKUwogICAgIG1fdmFsdWUg
PSB2YWx1ZTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRj
aGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0
cnVjdHVyZTsKLSAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwgc3RydWN0dXJl
KTsKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBtX2FycmF5TW9kZXMgPSBhc0Fy
cmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgbV90eXBlID0gc3BlY3Vs
YXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsK
ICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBo
KTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVwcmVzZW50YXRpb24oTm9k
ZUZsYWdzIHJlcHJlc2VudGF0aW9uKQpAQCAtMTI5LDIxICsxNTAsMTggQEAgRmlsdHJhdGlvblJl
c3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIAogICAgIG1fdHlwZSAmPSBvdGhlci5z
cGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFy
cmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZp
bHRlcihvdGhlcik7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKICAgICAKICAgICAv
LyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3IgdG8gdGhlIGFib3ZlIHR3byBzdGF0ZW1lbnRzIHdl
IGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAgIC8vIEZvbyBpcyBhIFNwZWN1bGF0ZWRUeXBlIHRo
YXQgaXMgZGlzam9pbnQgd2l0aCB0aGUgcGFzc2VkIFN0cnVjdHVyZVNldC4gSW4gdGhhdAogICAg
IC8vIGNhc2UsIHdlIHdpbGwgbm93IGhhdmUgKE5vbmUsIFtzb21lU3RydWN0dXJlXSkuIEluIGdl
bmVyYWwsIHdlIG5lZWQgdG8gbWFrZQogICAgIC8vIHN1cmUgdGhhdCBuZXcgaW5mb3JtYXRpb24g
Z2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlwZSBuZWVkcyB0byBiZSBmZWQgYmFjawogICAg
IC8vIGludG8gdGhlIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0aGUgU3RydWN0dXJlU2V0Lgot
ICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOworICAgIG1fc3RydWN0
dXJlLmZpbHRlcihtX3R5cGUpOwogICAgIAotICAgIGlmIChtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3Jh
cGgsIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsKLSAgICAgICAgCiAgICAg
ZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7Ci0gICAg
cmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eShn
cmFwaCk7CiB9CiAKIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlN
b2RlcyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCkBAIC0xNjksOCArMTg3LDcgQEAgRmlsdHJhdGlv
blJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoUwogICAgIC8vIHRoZSBwYXNzZWQgdHlwZSBp
cyBBcnJheS4gQXQgdGhpcyBwb2ludCB3ZSdsbCBoYXZlIChOb25lLCBUT1ApLiBUaGUgYmVzdCB3
YXkKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgc3RydWN0dXJlIGZpbHRlcmluZyBkb2VzIHRo
ZSByaWdodCB0aGluZyBpcyB0byBmaWx0ZXIgb24KICAgICAvLyB0aGUgbmV3IHR5cGUgKE5vbmUp
IHJhdGhlciB0aGFuIHRoZSBvbmUgcGFzc2VkIChBcnJheSkuCi0gICAgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7Ci0gICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5m
aWx0ZXIobV90eXBlKTsKKyAgICBtX3N0cnVjdHVyZS5maWx0ZXIodHlwZSk7CiAgICAgZmlsdGVy
QXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZhbHVlQnlUeXBlKCk7CiAgICAgcmV0dXJu
IG5vcm1hbGl6ZUNsYXJpdHkoKTsKQEAgLTE4NCwxNSArMjAxLDYgQEAgRmlsdHJhdGlvblJlc3Vs
dCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQg
QWJzdHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoR3JhcGgmIGdyYXBoLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICBpZiAo
Z3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0
Y2hwb2ludFNldCgpKSkKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKLSAgICBlbHNlCi0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRv
cCgpOwotfQotCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVlQnlUeXBlKCkKIHsKICAg
ICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQgaWYgdGhlIGZ1dHVyZVBv
c3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkBAIC0yMzgsOCArMjQ2LDcgQEAgYm9vbCBBYnN0
cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKCkgY29ucwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAKICAgICBpZiAoIShtX3R5cGUgJiB+U3BlY0NlbGwpCi0gICAgICAgICYmICghbV9hcnJheU1v
ZGVzCi0gICAgICAgICAgICB8fCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpKQor
ICAgICAgICAmJiAoIW1fYXJyYXlNb2RlcyB8fCBtX3N0cnVjdHVyZS5pc0NsZWFyKCkpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNjMsMTIgKzI3
MCwxOCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6Om5vcm1hbGl6CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpub3JtYWxp
emVDbGFyaXR5KEdyYXBoJiBncmFwaCkKK3sKKyAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdCA9
IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2b2lkIEFic3RyYWN0VmFs
dWU6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIGlmICghKG1fdHlwZSAmIFNwZWND
ZWxsKSkgewotICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigp
KTsKLSAgICAgICAgQVNTRVJUKG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNDbGVhcigpKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgIEFTU0VSVCgh
bV9hcnJheU1vZGVzKTsKICAgICB9CiAgICAgCkBAIC0yODksNiArMzAyLDExIEBAIHZvaWQgQWJz
dHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGMKICAgICAvLyB3ZSBkb24ndCB3YW50IHRv
IGdldCBwZWRhbnRpYyBhYm91dCB0aGlzIGFzIGl0IHdvdWxkIG9ubHkgaW5jcmVhc2UgdGhlIGNv
bXB1dGF0aW9uYWwKICAgICAvLyBjb21wbGV4aXR5IG9mIHRoZSBjb2RlLgogfQorCit2b2lkIEFi
c3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZChHcmFwaCYgZ3JhcGgpIGNvbnN0Cit7CisgICAg
bV9zdHJ1Y3R1cmUuYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKK30KICNlbmRpZgogCiB2b2lkIEFi
c3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTMwMiw4ICszMjAs
NyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTCiAgICAgaWYgKG1f
dHlwZSAmIFNwZWNDZWxsKSB7CiAgICAgICAgIG91dC5wcmludCgKICAgICAgICAgICAgICIsICIs
IEFycmF5TW9kZXNEdW1wKG1fYXJyYXlNb2RlcyksICIsICIsCi0gICAgICAgICAgICBpbkNvbnRl
eHQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUsIGNvbnRleHQpLCAiLCAiLAotICAgICAgICAgICAg
aW5Db250ZXh0KG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUsIGNvbnRleHQpKTsKKyAgICAgICAg
ICAgIGluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCkpOwogICAgIH0KICAgICBpZiAoISFt
X3ZhbHVlKQogICAgICAgICBvdXQucHJpbnQoIiwgIiwgaW5Db250ZXh0KG1fdmFsdWUsIGNvbnRl
eHQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1
ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMsNyBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBtX3R5cGUgPSBTcGVjTm9uZTsKICAgICAgICAg
bV9hcnJheU1vZGVzID0gMDsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIo
KTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBt
X3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwogICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtNzUsMTUgKzc0LDc0IEBAIHN0cnVjdCBB
YnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKICAgICB7CiAgICAg
ICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xvYmJlcigpOwog
ICAgICAgICAgICAgY2xvYmJlckFycmF5TW9kZXMoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgICAg
ICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAgICAgICAgICBBU1NFUlQo
IW1fYXJyYXlNb2Rlcyk7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjbG9iYmVyU3RydWN0dXJlc0ZvcihBYnN0cmFj
dFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZhbHVlLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkKKyAgICB7
CisgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOworICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIG9ic2Vy
dmVJbnZhbGlkYXRpb25Qb2ludEZvcihBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHZhbHVlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIG9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykKKyAg
ICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgeworICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb24oZnJvbSwgdG8pOworICAgICAgICAgICAgb2JzZXJ2ZUlu
ZGV4aW5nVHlwZVRyYW5zaXRpb24oZnJvbS0+aW5kZXhpbmdUeXBlKCksIHRvLT5pbmRleGluZ1R5
cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9ucyhjb25zdCBUcmFuc2l0aW9uVmVjdG9yJiB2
ZWN0b3IpOworICAgIAorICAgIGNsYXNzIFRyYW5zaXRpb25PYnNlcnZlciB7CisgICAgcHVibGlj
OgorICAgICAgICBUcmFuc2l0aW9uT2JzZXJ2ZXIoU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUq
IHRvKQorICAgICAgICAgICAgOiBtX2Zyb20oZnJvbSkKKyAgICAgICAgICAgICwgbV90byh0bykK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIG9wZXJhdG9yKCko
QWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbHVlLm9ic2Vy
dmVUcmFuc2l0aW9uKG1fZnJvbSwgbV90byk7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAg
ICAgICBTdHJ1Y3R1cmUqIG1fZnJvbTsKKyAgICAgICAgU3RydWN0dXJlKiBtX3RvOworICAgIH07
CisgICAgCisgICAgY2xhc3MgVHJhbnNpdGlvbnNPYnNlcnZlciB7CisgICAgcHVibGljOgorICAg
ICAgICBUcmFuc2l0aW9uc09ic2VydmVyKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZlY3RvcikK
KyAgICAgICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQorICAgICAgICB7CisgICAgICAgIH0KICAg
ICAgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFsdWUub2JzZXJ2ZVRyYW5zaXRpb25zKHZlY3Rvcik7Cisg
ICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBUcmFuc2l0aW9uc1ZlY3RvciYg
dmVjdG9yOworICAgIH07CisgICAgCiAgICAgdm9pZCBjbG9iYmVyVmFsdWUoKQogICAgIHsKICAg
ICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKQEAgLTkxLDcgKzE0OSwxMCBAQCBzdHJ1Y3QgQWJz
dHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgYm9vbCBpc0hlYXBUb3AoKSBjb25zdAogICAgIHsKLSAg
ICAgICAgcmV0dXJuIChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90eXBlICYmIG1fY3VycmVu
dEtub3duU3RydWN0dXJlLmlzVG9wKCkgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1Rv
cCgpOworICAgICAgICByZXR1cm4gKG1fdHlwZSB8IFNwZWNIZWFwVG9wKSA9PSBtX3R5cGUKKyAg
ICAgICAgICAgICYmIG1fc3RydWN0dXJlLmlzVG9wKCkKKyAgICAgICAgICAgICYmIG1fYXJyYXlN
b2RlcyA9PSBBTExfQVJSQVlfTU9ERVMKKyAgICAgICAgICAgICYmICFtX3ZhbHVlOwogICAgIH0K
ICAgICAKICAgICBib29sIHZhbHVlSXNUb3AoKSBjb25zdApAQCAtMTE4LDEyICsxNzksMTAgQEAg
c3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgc2V0VHlwZShTcGVjdWxhdGVkVHlwZSB0
eXBlKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICAgICAgbV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtl
VG9wKCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigp
OwotICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7
CiAgICAgICAgIH0KICAgICAgICAgbV90eXBlID0gdHlwZTsKQEAgLTEzOCw4ICsxOTcsNyBAQCBz
dHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV90eXBlID09IG90
aGVyLm1fdHlwZQogICAgICAgICAgICAgJiYgbV9hcnJheU1vZGVzID09IG90aGVyLm1fYXJyYXlN
b2RlcwotICAgICAgICAgICAgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPT0gb3RoZXIubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUKLSAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUgPT0gb3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZQorICAgICAgICAgICAgJiYg
bV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fdmFsdWUg
PT0gb3RoZXIubV92YWx1ZTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFic3Ry
YWN0VmFsdWUmIG90aGVyKSBjb25zdApAQCAtMTYyLDggKzIyMCw3IEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVNw
ZWN1bGF0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKICAgICAgICAgICAgIHJlc3VsdCB8PSBt
ZXJnZUFycmF5TW9kZXMobV9hcnJheU1vZGVzLCBvdGhlci5tX2FycmF5TW9kZXMpOwotICAgICAg
ICAgICAgcmVzdWx0IHw9IG1fY3VycmVudEtub3duU3RydWN0dXJlLmFkZEFsbChvdGhlci5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXN1bHQgfD0gbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICByZXN1bHQgfD0gbV9zdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmUp
OwogICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkgewogICAgICAgICAg
ICAgICAgIHJlc3VsdCB8PSAhIW1fdmFsdWU7CiAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IEpT
VmFsdWUoKTsKQEAgLTE3OSw4ICsyMzYsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAg
ICAgIG1lcmdlU3BlY3VsYXRpb24obV90eXBlLCB0eXBlKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICh0eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
Lm1ha2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRv
cCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAgbV9h
cnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAgICB9CiAgICAgICAgIG1fdmFsdWUg
PSBKU1ZhbHVlKCk7CkBAIC0yMjUsNzUgKzI4MSwzMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICBB
U1NFUlQobV90eXBlICYgU3BlY0NlbGwpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQotICAgICAgICAgICAgICAg
ICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQorICAgICAg
ICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKICAgICAgICAgICAg
ICAgICAmJiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIAotICAgIFN0cnVjdHVyZSogYmVzdFByb3ZlblN0cnVjdHVyZSgpIGNvbnN0Ci0gICAg
ewotICAgICAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0g
ICAgICAgIGlmIChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKICAgICBib29sIGhhc0Nsb2JiZXJhYmxlU3Rh
dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJl
LmlzTmVpdGhlckNsZWFyTm9yVG9wKCkKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmlzTmVp
dGhlckNsZWFyTm9yVG9wKCkKICAgICAgICAgICAgIHx8ICFhcnJheU1vZGVzQXJlQ2xlYXJPclRv
cChtX2FycmF5TW9kZXMpOwogICAgIH0KICAgICAKICNpZiBBU1NFUlRfRElTQUJMRUQKICAgICB2
b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdCB7IH0KKyAgICB2b2lkIGFzc2VydElzV2F0Y2hl
ZChHcmFwaCYpIGNvbnN0IHsgfQogI2Vsc2UKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBj
b25zdDsKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0OwogI2VuZGlmCiAg
ICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBj
b25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICAvLyBB
IGdyZWF0IHdheSB0byB0aGluayBhYm91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1fY3VycmVu
dEtub3duU3RydWN0dXJlIGFuZAotICAgIC8vIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgaXMg
dG8gY29uc2lkZXIgdGhlc2UgZm91ciBleGFtcGxlczoKLSAgICAvLwotICAgIC8vIDEpIHggPSBm
b28oKTsKLSAgICAvLwotICAgIC8vICAgIEluIHRoaXMgY2FzZSB4J3MgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUgYW5kIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbAotICAgIC8vICAgIGJv
dGggYmUgVE9QLCBzaW5jZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IHggZm9yIHN1cmUs
IHlldC4KLSAgICAvLwotICAgIC8vIDIpIHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwot
ICAgIC8vCi0gICAgLy8gICAgV2hlcmUgeCB3aWxsIGxhdGVyIGhhdmUgYSBuZXcgcHJvcGVydHkg
YWRkZWQgdG8gaXQsICdnJy4gQmVjYXVzZSBvZiB0aGUKLSAgICAvLyAgICBrbm93biBidXQgbm90
LXlldC1leGVjdXRlZCBwcm9wZXJ0eSBhZGRpdGlvbiwgeCdzIGN1cnJlbnQgc3RydWN0dXJlIHdp
bGwKLSAgICAvLyAgICBub3QgYmUgd2F0Y2hwb2ludGFibGU7IGhlbmNlIHdlIGhhdmUgbm8gd2F5
IG9mIHN0YXRpY2FsbHkgYm91bmRpbmcgdGhlIHNldAotICAgIC8vICAgIG9mIHBvc3NpYmxlIHN0
cnVjdHVyZXMgdGhhdCB4IG1heSBoYXZlIGlmIGEgY2xvYmJlcmluZyBldmVudCBoYXBwZW5zLiBT
bywKLSAgICAvLyAgICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgd2lsbCBiZSB3aGF0ZXZl
ciBzdHJ1Y3R1cmUgd2UgY2hlY2sgdG8gZ2V0Ci0gICAgLy8gICAgcHJvcGVydHkgJ2YnLCBhbmQg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJlIFRPUC4KLSAgICAvLwotICAgIC8vIDMp
IHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUg
eCBoYXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBzdGlsbCB3YXRjaHBvaW50YWJsZS4g
SW4gdGhpcyBjYXNlLAotICAgIC8vICAgIHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJvdGggYmUKLSAgICAvLyAgICB3aGF0ZXZl
ciBzdHJ1Y3R1cmUgd2UgY2hlY2tlZCBmb3Igd2hlbiBnZXR0aW5nICdmJy4KLSAgICAvLwotICAg
IC8vIDQpIHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vICAgIGJhcigpOwot
ICAgIC8vCi0gICAgLy8gICAgV2hlcmUgeCBoYXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1cmUgdGhhdCBp
cyBzdGlsbCB3YXRjaHBvaW50YWJsZS4gSW4gdGhpcwotICAgIC8vICAgIGNhc2UsIG1fY3VycmVu
dEtub3duU3RydWN0dXJlIHdpbGwgYmUgVE9QIGJlY2F1c2UgYmFyKCkgbWF5IHBvdGVudGlhbGx5
Ci0gICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5IG9mIHBy
b3Zpbmcgb3RoZXJ3aXNlLCBidXQKLSAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAotICAgIC8vICAg
IHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCi0gICAgCi0gICAgLy8gTkIuIEFsbCBmaWVsZHMg
aW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCi0KICAgICAvLyBU
aGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZh
bHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjdXJy
ZW50IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQogICAgIC8vIGJl
IFRPUCwgaW5kaWNhdGluZyB0aGF0IGl0IGlzIHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHN0cnVj
dHVyZXMsIGluIHdoaWNoCkBAIC0zMDEsMjkgKzMxMiwxMiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1
ZSB7CiAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGlzIHZhbHVlIGNhbm5vdCBiZSBhIGNlbGwuIFRo
aXMgaXMgYWxsIHN1YmplY3QgdG8gY2hhbmdlCiAgICAgLy8gYW55dGltZSBhIG5ldyB2YWx1ZSBp
cyBhc3NpZ25lZCB0byB0aGlzIG9uZSwgYW55dGltZSB0aGVyZSBpcyBhIGNvbnRyb2wgZmxvdwog
ICAgIC8vIG1lcmdlLCBvciBtb3N0IGNydWNpYWxseSwgYW55dGltZSBhIHNpZGUtZWZmZWN0IG9y
IHN0cnVjdHVyZSBjaGVjayBoYXBwZW5zLgotICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVj
dCwgd2UgdHlwaWNhbGx5IG11c3QgYXNzdW1lIHRoYXQgYW55IHZhbHVlIG1heSBoYXZlCi0gICAg
Ly8gaGFkIGl0cyBzdHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2UgY29udHJhdmVuaW5nIG91ciBwcm9v
Zi4gV2UgbWFrZSB0aGUgcHJvb2YKLSAgICAvLyB2YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcgdGhp
cyB0byBUT1AgKGkuZS4gY2xhaW1pbmcgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0Ci0gICAgLy8g
dGhpcyB2YWx1ZSBtYXkgaGF2ZSBhbnkgc3RydWN0dXJlKS4gT2Ygbm90ZSBpcyB0aGF0IHRoZSBw
cm9vZiByZXByZXNlbnRlZCBieQotICAgIC8vIHRoaXMgZmllbGQgaXMgbm90IHN1YmplY3QgdG8g
c3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgLSBldmVuIGlmIG9uZQotICAgIC8vIGZp
cmVzLCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoaXMgcHJvb2YgaXMgc3RpbGwgdmFsaWQuCi0gICAg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZTsKLSAgICAKLSAg
ICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0
aGlzIHZhbHVlIGNhbiBoYXZlIG5vdwotICAgIC8vIG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUg
c3ViamVjdCB0byB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgb2YKLSAgICAv
LyBhbGwgbWVtYmVycyBvZiB0aGlzIHNldCBub3QgaGF2aW5nIGZpcmVkLiBUaGlzIHNldCBpcyBp
bXBlcnZpb3VzIHRvIHNpZGUtCi0gICAgLy8gZWZmZWN0czsgZXZlbiBpZiBvbmUgaGFwcGVucyB0
aGUgc2lkZS1lZmZlY3QgY2FuIG9ubHkgY2F1c2UgdGhlIHZhbHVlIHRvCi0gICAgLy8gY2hhbmdl
IHRvIGF0IHdvcnN0IGFub3RoZXIgc3RydWN0dXJlIHRoYXQgaXMgYWxzbyBhIG1lbWJlciBvZiB0
aGlzIHNldC4gQnV0LAotICAgIC8vIHRoZSB0aGVvcmVtIGJlaW5nIHByb3ZlZCBieSB0aGlzIGZp
ZWxkIGlzIHByZWRpY2F0ZWQgdXBvbiB0aGVyZSBub3QgYmVpbmcKLSAgICAvLyBhbnkgbmV3IHN0
cnVjdHVyZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGludG8gYW55IG1lbWJlcnMgb2YgdGhpcyBz
ZXQuIEluCi0gICAgLy8gY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gd2F5IGZvciB1cyB0byBndWFy
ZCB0aGlzIGhhcHBlbmluZywgdGhlIHNldCBtdXN0IGJlCi0gICAgLy8gVE9QLiBCdXQgaW4gY2Fz
ZXMgd2hlcmUgd2UgY2FuIGd1YXJkIG5ldyBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKGFsbCBtZW1i
ZXJzCi0gICAgLy8gb2YgdGhlIHNldCBoYXZlIHN0aWxsLXZhbGlkIHN0cnVjdHVyZSB0cmFuc2l0
aW9uIHdhdGNocG9pbnRzKSB0aGVuIHRoaXMgc2V0Ci0gICAgLy8gd2lsbCBiZSBmaW5pdGUuIEFu
eXRpbWUgdGhhdCB3ZSBtYWtlIHVzZSBvZiB0aGUgZmluaXRlIG5hdHVyZSBvZiB0aGlzIHNldCwK
LSAgICAvLyB3ZSBtdXN0IGZpcnN0IGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hw
b2ludCwgd2hpY2ggd2lsbCBlZmZlY3RpdmVseQotICAgIC8vIHJlc3VsdCBpbiBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZSBiZWluZyBmaWx0ZXJlZCBhY2NvcmRpbmcgdG8KLSAgICAvLyBtX2Z1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlLgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZTsKKyAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3QsIHdlIG11
c3QgYXNzdW1lIHRoYXQgYW55IHZhbHVlIHdpdGggYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vIGlz
bid0IGJlaW5nIHdhdGNoZWQgbWF5IGhhdmUgaGFkIGl0cyBzdHJ1Y3R1cmUgY2hhbmdlZCwgaGVu
Y2UgY29udHJhdmVuaW5nCisgICAgLy8gb3VyIHByb29mLiBJbiBzdWNoIGEgY2FzZSB3ZSBtYWtl
IHRoZSBwcm9vZiB2YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcgdGhpcyB0bworICAgIC8vIFRPUCAo
aS5lLiBjbGFpbWluZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhpcyB2YWx1ZSBtYXkgaGF2
ZSBhbnkKKyAgICAvLyBzdHJ1Y3R1cmUpLgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9z
dHJ1Y3R1cmU7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRo
ZSBwb3NzaWJsZSB0eXBlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUKICAgICAvLyBub3cgb3Ig
YW55IHRpbWUgaW4gdGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWduZWQuIFRoaXMgZmll
bGQgaXMKQEAgLTMzMiwxMSArMzI2LDExIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAv
LyBiZXR3ZWVuIHRoaXMgZmllbGQsIGFuZCB0aGUgc3RydWN0dXJlIGZpZWxkcyBhYm92ZSwgaXMg
YXMgZm9sbG93cy4gVGhlCiAgICAgLy8gZmllbGRzIGFib3ZlIGNvbnN0cmFpbnQgdGhlIHN0cnVj
dHVyZXMgdGhhdCBhIGNlbGwgbWF5IGhhdmUsIGJ1dCB0aGV5IHNheQogICAgIC8vIG5vdGhpbmcg
YWJvdXQgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGEgY2VsbC4gTW9y
ZSBmb3JtYWxseSwKLSAgICAvLyB0aGUgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMgaXRzZWxm
IGFuIGFic3RyYWN0IHZhbHVlIHRoYXQgY29uc2lzdHMgb2YgdGhlCisgICAgLy8gdGhlIG1fc3Ry
dWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQog
ICAgIC8vIHVuaW9uIG9mIHRoZSBzZXQgb2YgYWxsIG5vbi1jZWxsIHZhbHVlcyBhbmQgdGhlIHNl
dCBvZiBjZWxsIHZhbHVlcyB0aGF0IGhhdmUKICAgICAvLyB0aGUgZ2l2ZW4gc3RydWN0dXJlLiBU
aGlzIGFic3RyYWN0IHZhbHVlIGlzIHRoZW4gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUKLSAgICAv
LyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQgdGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlw
ZSBpcyBtX3R5cGUuIFNvLCBmb3IKLSAgICAvLyBleGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmlu
YWx8U3BlY0ludDMyIGFuZCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBpcworICAgIC8vIG1fc3Ry
dWN0dXJlIGFuZCB0aGUgc2V0IG9mIHZhbHVlcyB3aG9zZSB0eXBlIGlzIG1fdHlwZS4gU28sIGZv
cgorICAgIC8vIGV4YW1wbGUgaWYgbV90eXBlIGlzIFNwZWNGaW5hbHxTcGVjSW50MzIgYW5kIG1f
c3RydWN0dXJlIGlzCiAgICAgLy8gWzB4MTIzNDVdIHRoZW4gdGhpcyBhYnN0cmFjdCB2YWx1ZSBj
b3JyZXNwb25kcyB0byB0aGUgc2V0IG9mIGFsbCBpbnRlZ2VycwogICAgIC8vIHVuaWZpZWQgd2l0
aCB0aGUgc2V0IG9mIGFsbCBvYmplY3RzIHdpdGggc3RydWN0dXJlIDB4MTIzNDUuCiAgICAgU3Bl
Y3VsYXRlZFR5cGUgbV90eXBlOwpAQCAtMzY0LDYgKzM1OCwxMiBAQCBwcml2YXRlOgogICAgICAg
ICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgfQogICAgIAorICAgIHZvaWQg
b2JzZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRpb24oSW5kZXhpbmdUeXBlIGZyb20sIEluZGV4aW5n
VHlwZSB0bykKKyAgICB7CisgICAgICAgIGlmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMo
ZnJvbSkpCisgICAgICAgICAgICBtX2FycmF5TW9kZXMgfD0gYXNBcnJheU1vZGVzKHRvKTsKKyAg
ICB9CisgICAgCiAgICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAg
ICB7CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKQEAgLTM5MSwxOSArMzkxLDE3IEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBtX3R5cGUgfD0gdG9wOwogICAgICAgICBtX2FycmF5TW9kZXMg
PSBBTExfQVJSQVlfTU9ERVM7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VU
b3AoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAg
ICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsK
ICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEZ1
dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwotCiAg
ICAgdm9pZCBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHZvaWQgZmlsdGVyQXJyYXlNb2Rlc0J5
VHlwZSgpOwogICAgIAogICAgIGJvb2wgc2hvdWxkQmVDbGVhcigpIGNvbnN0OwogICAgIEZpbHRy
YXRpb25SZXN1bHQgbm9ybWFsaXplQ2xhcml0eSgpOworICAgIEZpbHRyYXRpb25SZXN1bHQgbm9y
bWFsaXplQ2xhcml0eShHcmFwaCYpOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiBhbGxvY2F0ZSgp
OyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMg
bWV0aG9kLgogICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVsZXRl
OyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCiAgICAgCi0gICAgdm9pZCBmcmVlQWxsKCk7
IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZv
aWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiB5b3UndmUgZWl0aGVyIGZyZWVkIGV2
ZXJ5dGhpbmcgb3IgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCiAgICAgdm9pZCByZXNl
dCgpOyAvLyBMaWtlIGZyZWVBbGwoKSwgYnV0IGFsc28gcmV0dXJucyBhbGwgbWVtb3J5IHRvIHRo
ZSBPUy4KICAgICAKICAgICB1bnNpZ25lZCBpbmRleE9mKGNvbnN0IFQqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1w
bGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzI1LDcgKzMyNSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlc2UgYmVjYXVzZSBpZiB3ZSBnZXQgdXNlcyBvZiB0
aGUgcmVsZXZhbnQKICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgdGhlbiB3ZSBjYW4g
c2FmZWx5IGdldCByaWQgb2YgdGhlc2UsIHRvby4gVGhpcyBvZiBjb3Vyc2UKQEAgLTQ0MSw3ICs0
NDAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNh
c2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBD
aGVja0FycmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQg
b2YgdGhpcyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2
aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksMjUgKzI4OSw0OCBAQCBTdHJ1Y3R1cmUqIEFycmF5
TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhpbmdU
eXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7Ci0gICAgY2Fz
ZSBBcnJheTo6T3JpZ2luYWxBcnJheToKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdT
aGFwZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKLSAgICAgICAg
ICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5pc09y
aWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xl
dG9uKCkpOworICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6IHsKKyAgICAgICAgaWYgKHZh
bHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsK
KyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hh
cGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFncmFwaC5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0
cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJyYXk6
CisgICAgY2FzZSBBcnJheTo6QXJyYXk6IHsKICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5
Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhzaGFwZSB8IElzQXJyYXkp
KSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRl
eGluZ1NoYXBlTWFzaykgPT0gc2hhcGUKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAg
ICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0
cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAm
IEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJh
eSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAgZGVmYXVsdDoKKyAgICBkZWZhdWx0OiB7
CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVz
LCBhc0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1vZGVzKHNoYXBlIHwgSXNBcnJheSkpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5n
U2hhcGVNYXNrKSA9PSBzaGFwZTsKLSAgICB9CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVy
ZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICBp
ZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgIT0gc2hh
cGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0gfQogfQogCiBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSkgY29uc3QKQEAg
LTMzNiwyMyArMzU5LDM4IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYg
Z3IKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAg
ICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxB
cnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheTogewogICAgICAgICAgICAg
Q1JBU0goKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5OiB7
CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlN
b2RlcywgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhh
c1NpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55QXJyYXlTdG9yYWdlKHZhbHVl
Lm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKLSAg
ICAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAgICAgICAgICBpZiAodmFsdWUubV9z
dHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJl
W2ldOworICAgICAgICAgICAgICAgIGlmICghaGFzQW55QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+
aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hl
Y2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlX
aXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Npbmds
ZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAg
IH0KKyAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVl
Lm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICAgICAgaWYgKCFo
YXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9IH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRz
OgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0Fy
Z3VtZW50cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksOCArMjEw
OSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgQVNTRVJUKHZh
cmlhbnQub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFs
aWRhdGVkKCkpOwogICAgIAogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKLSAgICBTdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKAotICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CisgICAgVHJhbnNpdGlvbiog
dHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCisgICAgICAgIHZhcmlhbnQu
b2xkU3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogCiAgICAgaWYgKHZhcmlh
bnQub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKICAgICAgICAgIT0gdmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewpAQCAtMjEyMSwxMCArMjEy
MSwxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogCiAgICAgICAgIGlm
ICghdmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAg
ICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICBBbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisgICAg
ICAgICAgICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uKSwg
YmFzZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBh
ZGRUb0dyYXBoKAotICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9w
SW5mbyh0cmFuc2l0aW9uRGF0YSksCisgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb24pLAogICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRv
R3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAt
MjEzNCw3ICsyMTM0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAg
ICAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNl
KTsKICAgICB9CiAKLSAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwgYmFzZSk7CisgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFu
c2l0aW9uKSwgYmFzZSk7CiAKICAgICBhZGRUb0dyYXBoKAogICAgICAgICBQdXRCeU9mZnNldCwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lv
biAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIoVU5TQUZFKSAiKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBtX2ludGVycHJldGVyLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKG1fc3RhdGUudmFyaWFibGVzKCksICIgIiwgbV9pbnRlcnByZXRlcik7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuaGF2ZVN0cnVj
dHVyZXMoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiIChIYXZlIFN0cnVjdHVyZXMp
Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2
aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCwxMiArNDYwLDYgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAg
ICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVyZSgpKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCiAgICAgICAgICAgICAgICAg
ICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSgpLm5ld1N0cnVjdHVyZSkpCkBAIC01NDcsMTEgKzU0MSw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBub2RlLT5j
aGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBB
cnJheWlmeToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAg
ICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZm
ZWN0IG91ciBzdHJ1Y3R1cmVzLgpAQCAtMTM4NywxMyArMTM3Niw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAg
ICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0
aW9uKG5vZGUtPnN0cnVjdHVyZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3Jt
YWxDU0UpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw3ICs0
MTgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUgKzMz
LDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RhdGljIHVuc2ln
bmVkIGNyYXNoTG9jazsKKwogdm9pZCBzdGFydENyYXNoaW5nKCkKIHsKICNpZiBFTkFCTEUoQ09N
UEFSRV9BTkRfU1dBUCkKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9jazsKLSAgICB3aGlsZSAoIVdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZsb2NrLCAwLCAxKSkKKyAgICB3aGlsZSAoIVdURjo6d2Vh
a0NvbXBhcmVBbmRTd2FwKCZjcmFzaExvY2ssIDAsIDEpKQogICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjp5aWVsZCgpOworI2Vsc2UKKyAgICBjcmFzaExvY2sgPSAxOwogI2VuZGlmCiB9CiAKK2Jv
b2wgaXNDcmFzaGluZygpCit7CisgICAgcmV0dXJuICEhY3Jhc2hMb2NrOworfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDgg
QEAgYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogLy8gd2hlbiB5b3UncmUgZm9y
Y2luZyBhIGNyYXNoIHdpdGggZGlhZ25vc3RpY3MuCiB2b2lkIHN0YXJ0Q3Jhc2hpbmcoKTsKIAor
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0NyYXNoaW5nKCk7CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDI3ICs5NywxMiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwotICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9m
KHNldCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRl
eEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4K
ICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAg
ICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIHN0cnVjdHVyZVZhbHVlID0gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKLSAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAg
ICAgICAgICAgICAgICYmIHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlVmFsdWUuc2luZ2xl
dG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleElu
QmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KLSAg
ICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVu
OwotICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5yZW1vdmVFZGdlKDApOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoISFjaGlsZHJlbi5jaGlsZDEoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhh
bnRvbSwgbm9kZS0+b3JpZ2luLCBjaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUt
PmNoaWxkcmVuLnNldENoaWxkMihFZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZHJlbi5zZXRDaGlsZDMoRWRnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29u
dmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKQEAgLTE1Niw3ICsxNDEsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAg
ICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRh
KCk7CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTgwLDcgKzE2NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwog
ICAgICAgICAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1f
c3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVy
ZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC0yMDUs
NyArMTkwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtp
bmQoKSAhPSBDZWxsVXNlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9y
Tm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogCkBAIC0yMzIsNyArMjE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBD
ZWxsVXNlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOwor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNo
aWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFz
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApA
QCAtMzI5LDcgKzMxNCw2IEBAIHByaXZhdGU6CiAgICAgICAgIEVkZ2UgY2hpbGRFZGdlID0gbm9k
ZS0+Y2hpbGQxKCk7CiAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKIAot
ICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2ludCA9ICFtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpOwogICAgICAgICBib29sIG5lZWRz
Q2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3R5cGUgJiB+U3BlY0NlbGw7CiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2hhaW4oKSk7CkBAIC0zNDAsMTEgKzMy
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIGRvIGFueSBlbGltaW5hdGlvbnMuCiAgICAgICAg
IG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOwogICAgICAgICAKLSAgICAgICAg
aWYgKG5lZWRzV2F0Y2hwb2ludCkgewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1
Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7
CisgICAgICAgIGlmIChuZWVkc0NlbGxDaGVjaykgewogICAgICAgICAgICAgbV9pbnNlcnRpb25T
ZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQ
aGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgIH0KQEAgLTM4MSw3ICszNjEsNiBA
QCBwcml2YXRlOgogCiAgICAgICAgIEFTU0VSVCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpID09IHN0
cnVjdHVyZSk7CiAgICAgICAgIAotICAgICAgICBib29sIG5lZWRzV2F0Y2hwb2ludCA9ICFtX3N0
YXRlLmZvck5vZGUoY2hpbGQpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
OwogICAgICAgICBib29sIG5lZWRzQ2VsbENoZWNrID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5t
X3R5cGUgJiB+U3BlY0NlbGw7CiAgICAgICAgIAogICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRv
IGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92ZXIgdGhlIFB1dEJ5SWQKQEAg
LTM4OSwxMSArMzY4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9u
cy4KICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CiAKLSAgICAg
ICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkgewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhz
dHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwotICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNr
KSB7CisgICAgICAgIGlmIChuZWVkc0NlbGxDaGVjaykgewogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBQaGFudG9tLCBvcmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgIH0KQEAgLTQ3NSwxNiArNDUw
LDE0IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhO
b2RlT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAg
ICAgewotICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAotICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21WYWx1ZShjZWxs
KSwgV2Vha0pTQ29uc3RhbnQsIG9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGNlbGwtPnN0cnVjdHVy
ZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewotICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25l
LCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAgICAgICAgICAg
IE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7
CisgICAgICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExh
emlseShjZWxsLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQg
PSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAorICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBz
cGVjdWxhdGlvbkZyb21WYWx1ZShjZWxsKSwgV2Vha0pTQ29uc3RhbnQsIG9yaWdpbiwgT3BJbmZv
KGNlbGwpKTsKKyAgICAgICAgCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2lu
LAogICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVj
dHVyZSgpKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZp
c2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRj
aHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDE2ICs2Miw2IEBAIHZvaWQgRGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkoSlNBcnIKICAgICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2
aWV3KTsKIH0KIAotdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0g
ICAgbV9zZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2luZCwgc2V0KTsKLX0KLQotdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4
aXRLaW5kIGV4aXRLaW5kLCBJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCi17Ci0gICAgbV9pbmxp
bmVTZXRzLmFkZExhemlseShjb2RlT3JpZ2luLCBleGl0S2luZCwgJnNldCk7Ci19Ci0KIHZvaWQg
RGVzaXJlZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1v
bkRhdGEmIGNvbW1vbkRhdGEpCiB7CiAgICAgbV9zZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNv
bW1vbkRhdGEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0
Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwyNiAr
MzksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXRlbXBsYXRlPHR5
cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlPgotc3RydWN0IFdhdGNocG9pbnRGb3JHZW5lcmljV2F0
Y2hwb2ludFNldCB7Ci0gICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KCkKLSAg
ICAgICAgOiBtX2V4aXRLaW5kKEV4aXRLaW5kVW5zZXQpCi0gICAgICAgICwgbV9zZXQoMCkKLSAg
ICB7Ci0gICAgfQotICAgIAotICAgIFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldCgK
LSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hw
b2ludFNldFR5cGUqIHNldCkKLSAgICAgICAgOiBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAg
ICAgICAgLCBtX2V4aXRLaW5kKGV4aXRLaW5kKQotICAgICAgICAsIG1fc2V0KHNldCkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwotICAgIEV4aXRLaW5k
IG1fZXhpdEtpbmQ7Ci0gICAgV2F0Y2hwb2ludFNldFR5cGUqIG1fc2V0OwotfTsKK2NsYXNzIEdy
YXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsK
QEAgLTk1LDEyICs3Niw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zZXRzLmFkZChzZXQpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRL
aW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQotICAgIHsKLSAgICAgICAgbV9w
cm9maWxlZFdhdGNocG9pbnRzLmFwcGVuZCgKLSAgICAgICAgICAgIFdhdGNocG9pbnRGb3JHZW5l
cmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4oY29kZU9yaWdpbiwgZXhpdEtpbmQs
IHNldCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
IW1fcmVhbGx5QWRkZWQpOwpAQCAtMTEyLDE0ICs4Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgICAg
IEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssICppdGVyLCAmY29tbW9uLndhdGNocG9pbnRzLmxhc3Qo
KSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcHJv
ZmlsZWRXYXRjaHBvaW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFdhdGNocG9pbnRG
b3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4gd2F0Y2hwb2ludCA9Ci0g
ICAgICAgICAgICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzW2ldOwotICAgICAgICAgICAgY29t
bW9uLnByb2ZpbGVkV2F0Y2hwb2ludHMuYXBwZW5kKAotICAgICAgICAgICAgICAgIFByb2ZpbGVk
Q29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KHdhdGNocG9pbnQubV9jb2RlT3JpZ2luLCB3
YXRjaHBvaW50Lm1fZXhpdEtpbmQsIGNvZGVCbG9jaykpOwotICAgICAgICAgICAgQWRhcHRvcjo6
YWRkKGNvZGVCbG9jaywgd2F0Y2hwb2ludC5tX3NldCwgJmNvbW1vbi5wcm9maWxlZFdhdGNocG9p
bnRzLmxhc3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQg
PSB0cnVlOwogICAgIH0KICAgICAKQEAgLTEzMiw1MyArOTksMTYgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbV9wcm9maWxlZFdhdGNocG9pbnRzLnNpemUoKTsgaS0tOykgewotICAg
ICAgICAgICAgaWYgKEFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZChtX3Byb2ZpbGVkV2F0Y2hw
b2ludHNbaV0ubV9zZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotI2lmIEFTU0VS
VF9ESVNBQkxFRAotICAgIGJvb2wgaXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXRUeXBlKiBzZXQp
Ci0gICAgewotICAgICAgICByZXR1cm4gIUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZChzZXQp
OwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoV2F0Y2hwb2lu
dFNldFR5cGUqKQotICAgIHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotI2Vsc2UKLSAg
ICBib29sIGlzU3RpbGxWYWxpZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KQotICAgIHsKLSAgICAg
ICAgYm9vbCByZXN1bHQgPSAhQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKHNldCk7Ci0gICAg
ICAgIG1fZmlyc3RLbm93blN0YXRlLmFkZChzZXQsIHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQogICAgIAotICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRj
aHBvaW50U2V0VHlwZSogc2V0KQorICAgIGJvb2wgaXNXYXRjaGVkKFdhdGNocG9pbnRTZXRUeXBl
KiBzZXQpIGNvbnN0CiAgICAgewotICAgICAgICB0eXBlbmFtZSBTdGF0ZU1hcDo6aXRlcmF0b3Ig
aXRlciA9IG1fZmlyc3RLbm93blN0YXRlLmZpbmQoc2V0KTsKLSAgICAgICAgaWYgKGl0ZXIgPT0g
bV9maXJzdEtub3duU3RhdGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUgIT0gIUFkYXB0b3I6Omhhc0JlZW5JbnZh
bGlkYXRlZChzZXQpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIGJvb2wgaXNWYWxpZE9yTWl4
ZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc1N0aWxs
VmFsaWQoc2V0KSB8fCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKHNldCk7CisgICAgICAgIHJldHVy
biBtX3NldHMuY29udGFpbnMoc2V0KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFdh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4+IG1fcHJv
ZmlsZWRXYXRjaHBvaW50czsKICAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9zZXRz
OwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBTdGF0ZU1hcCBtX2ZpcnN0S25vd25TdGF0ZTsK
LSNlbmRpZgogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKIH07CiAKQEAgLTE5MCw0OCArMTIwLDIy
IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50U2V0Kik7CiAgICAgdm9p
ZCBhZGRMYXppbHkoSW5saW5lV2F0Y2hwb2ludFNldCYpOwogICAgIHZvaWQgYWRkTGF6aWx5KEpT
QXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9pZCBhZGRMYXppbHkoQ29kZU9yaWdpbiwgRXhpdEtp
bmQsIFdhdGNocG9pbnRTZXQqKTsKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0
S2luZCwgSW5saW5lV2F0Y2hwb2ludFNldCYpOwogICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENv
ZGVCbG9jayosIENvbW1vbkRhdGEmKTsKICAgICAKICAgICBib29sIGFyZVN0aWxsVmFsaWQoKSBj
b25zdDsKICAgICAKLSAgICBib29sIGlzU3RpbGxWYWxpZChXYXRjaHBvaW50U2V0KiBzZXQpCi0g
ICAgewotICAgICAgICByZXR1cm4gbV9zZXRzLmlzU3RpbGxWYWxpZChzZXQpOwotICAgIH0KLSAg
ICBib29sIGlzU3RpbGxWYWxpZChJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9pbmxpbmVTZXRzLmlzU3RpbGxWYWxpZCgmc2V0KTsKLSAgICB9Ci0gICAg
Ym9vbCBpc1N0aWxsVmFsaWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1N0aWxsVmFsaWQodmlldyk7Ci0gICAgfQotICAgIGJv
b2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBvaW50U2V0KiBzZXQpCi0gICAgewotICAg
ICAgICByZXR1cm4gbV9zZXRzLnNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0KTsKLSAgICB9Ci0g
ICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKElubGluZVdhdGNocG9pbnRTZXQmIHNldCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZVNldHMuc2hvdWxkQXNzdW1lTWl4ZWRTdGF0
ZSgmc2V0KTsKLSAgICB9Ci0gICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKEpTQXJyYXlC
dWZmZXJWaWV3KiB2aWV3KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3Muc2hv
dWxkQXNzdW1lTWl4ZWRTdGF0ZSh2aWV3KTsKLSAgICB9Ci0gICAgYm9vbCBpc1ZhbGlkT3JNaXhl
ZChXYXRjaHBvaW50U2V0KiBzZXQpCisgICAgYm9vbCBpc1dhdGNoZWQoV2F0Y2hwb2ludFNldCog
c2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2V0cy5pc1ZhbGlkT3JNaXhlZChzZXQpOwor
ICAgICAgICByZXR1cm4gbV9zZXRzLmlzV2F0Y2hlZChzZXQpOwogICAgIH0KLSAgICBib29sIGlz
VmFsaWRPck1peGVkKElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKKyAgICBib29sIGlzV2F0Y2hl
ZChJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCiAgICAgewotICAgICAgICByZXR1cm4gbV9pbmxp
bmVTZXRzLmlzVmFsaWRPck1peGVkKCZzZXQpOworICAgICAgICByZXR1cm4gbV9pbmxpbmVTZXRz
LmlzV2F0Y2hlZCgmc2V0KTsKICAgICB9Ci0gICAgYm9vbCBpc1ZhbGlkT3JNaXhlZChKU0FycmF5
QnVmZmVyVmlldyogdmlldykKKyAgICBib29sIGlzV2F0Y2hlZChKU0FycmF5QnVmZmVyVmlldyog
dmlldykKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzVmFsaWRPck1peGVk
KHZpZXcpOworICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CiAg
ICAgfQogICAgIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RG9lc0dDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRG9lc0dDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTgyLDcgKzE4Miw2IEBAIGJvb2wgZG9l
c0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIFB1dEJ5VmFsRGlyZWN0Ogog
ICAgIGNhc2UgUHV0QnlWYWw6CiAgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgotICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAg
Y2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE2
OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTkzMCw3ICs5MzAsNiBAQCBwcml2YXRlOgogCiAgICAgICAgIGNhc2Ug
Q2hlY2tFeGVjdXRhYmxlOgogICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICBj
YXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENoZWNrRnVu
Y3Rpb246CiAgICAgICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKICAgICAgICAgY2FzZSBDcmVh
dGVUaGlzOgpAQCAtMTM1MSw3ICsxMzUwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGVPYmplY3QgPSBhc09iamVjdChzdHJpbmdPYmplY3RT
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdQ
cm90b3R5cGVTdHJ1Y3R1cmUgPSBzdHJpbmdQcm90b3R5cGVPYmplY3QtPnN0cnVjdHVyZSgpOwot
ICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoc3RyaW5nUHJv
dG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKKyAgICAgICAgaWYg
KHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw2ICs3NywxNiBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2
CiAKIEdyYXBoOjp+R3JhcGgoKQogeworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+
cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShi
bG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmZy
ZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIH0KICAgICBtX2FsbG9jYXRvci5mcmVlQWxs
KCk7CiB9CiAKQEAgLTgwMCw4ICs4MTAsOSBAQCBKU0FycmF5QnVmZmVyVmlldyogR3JhcGg6OnRy
eUdldEZvbGRhYmxlCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0
PEpTQXJyYXlCdWZmZXJWaWV3Kj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwogICAgIGlmICgh
dmlldykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCF3YXRjaHBvaW50cygpLmlzU3RpbGxW
YWxpZCh2aWV3KSkKKyAgICBpZiAoIXZpZXctPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsK
KyAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICByZXR1cm4gdmlldzsKIH0KIApAQCAtODQ2
LDcgKzg1Nyw2IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAg
ICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRl
cihub2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgogICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgICAgICBjYXNlIEFycmF5
aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKQEAgLTg2
Myw2ICs4NzMsMzEgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgog
ICAgICAgICAgICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0
cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2Rl
LT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmlj
VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0g
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gc2V0LnNpemUoKTsgai0tOykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBEb24ndCBuZWVkIHRvIG1hcmsgYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBj
aGFpbiBiZWNhdXNlIHRoYXQgd291bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVu
IGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIG1hcmsgdGhl
CisgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRu
J3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgICAg
ICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJp
YW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0
QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVh
ZE9ubHlQb2ludGVyKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC04NzAsNiAr
OTA1LDIwIEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICB9
CiB9CiAKK3ZvaWQgR3JhcGg6OmFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K3sKKyAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHdhdGNocG9pbnRzKCkuaXNXYXRj
aGVkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBzdGFydENyYXNoaW5nKCk7CisgICAgZGF0YUxvZygiU3RydWN0dXJlICIs
IHBvaW50ZXJEdW1wKHN0cnVjdHVyZSksICIgaXMgd2F0Y2hhYmxlIGJ1dCBpc24ndCBiZWluZyB3
YXRjaGVkLlxuIik7CisgICAgZGF0YUxvZygiR3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7
CisgICAgZHVtcCgpOworICAgIENSQVNIKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksOCArMTY5LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGNvbnN0YW50UmVnaXN0ZXI7CiAgICAgfQogICAgIAorICAgIHZv
aWQgYXNzZXJ0SXNXYXRjaGVkKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKICAgICB2b2lk
IGNvbnZlcnRUb0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgeworICAg
ICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBhc3NlcnRJc1dhdGNoZWQodmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKICAgICAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkp
CiAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9XZWFrQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkp
OwogICAgICAgICBlbHNlCkBAIC0zOTAsMTIgKzM5NCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuICZtX3N0cnVjdHVyZVNldC5sYXN0KCk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShjb25zdCBTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSYgc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpCi0gICAgewotICAgICAgICBt
X3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhLmFwcGVuZChzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSk7
Ci0gICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YS5sYXN0KCk7Ci0gICAg
fQotICAgIAogICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3RGb3IoY29kZU9yaWdpbik7CkBAIC00NDYsOCArNDQ0LDcgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgbWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3BsYW4ud2F0
Y2hwb2ludHMuaXNTdGlsbFZhbGlkKAotICAgICAgICAgICAgZ2xvYmFsT2JqZWN0Rm9yKGNvZGVP
cmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgcmV0
dXJuIGdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKS0+aXNTdGlsbFZhbGlkKCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzR2xv
YmFsRXhpdFNpdGUoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtp
bmQpCkBAIC04MjMsNyArODIwLDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJp
YWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3ZhcmlhYmxlQWNjZXNzRGF0YTsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8QXJndW1lbnRQb3NpdGlvbiwgOD4gbV9hcmd1bWVudFBvc2l0aW9uczsKICAgICBTZWdt
ZW50ZWRWZWN0b3I8U3RydWN0dXJlU2V0LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgU2VnbWVu
dGVkVmVjdG9yPFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhLCA4PiBtX3N0cnVjdHVyZVRyYW5zaXRp
b25EYXRhOworICAgIEJhZzxUcmFuc2l0aW9uPiBtX3RyYW5zaXRpb25zOwogICAgIFNlZ21lbnRl
ZFZlY3RvcjxOZXdBcnJheUJ1ZmZlckRhdGEsIDQ+IG1fbmV3QXJyYXlCdWZmZXJEYXRhOwogICAg
IEJhZzxCcmFuY2hEYXRhPiBtX2JyYW5jaERhdGE7CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dp
dGNoRGF0YTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAx
NjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1
ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUg
IkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAiREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKQEAgLTY3
LDE5ICs2OCw2IEBAIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgYm9vbCByZWFs
bG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKIH07CiAKLXN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSB7Ci0gICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpIHsgfQot
ICAgIAotICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQotICAgICAgICA6IHByZXZpb3VzU3RydWN0
dXJlKHByZXZpb3VzU3RydWN0dXJlKQotICAgICAgICAsIG5ld1N0cnVjdHVyZShuZXdTdHJ1Y3R1
cmUpCi0gICAgewotICAgIH0KLX07Ci0KIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAg
IHVuc2lnbmVkIHN0YXJ0Q29uc3RhbnQ7CiAgICAgdW5zaWduZWQgbnVtQ29uc3RhbnRzOwpAQCAt
NDg1LDIxICs0NzMsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9vcCA9
PSBDaGVja1N0cnVjdHVyZSB8fCBtX29wID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpOwotICAgICAg
ICBBU1NFUlQoIWNoaWxkMigpKTsKLSAgICAgICAgQVNTRVJUKCFjaGlsZDMoKSk7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHN0cnVjdHVyZSk7Ci0gICAgICAgIG1fb3AgPSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCgpCi0gICAgewotICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5vbmx5U3RydWN0dXJlKCkpOwotICAgIH0KLSAg
ICAKICAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NE
YXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IEdl
dEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2ggfHwgbV9vcCA9PSBNdWx0aUdldEJ5T2Zmc2V0
KTsKQEAgLTEwOTEsNyArMTA2NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb3BJbmZvKTsKICAgICB9CiAKLSAgICBib29sIGhhc1N0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkKKyAgICBib29sIGhhc1RyYW5zaXRpb24oKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgpAQCAt
MTEwNCwxMCArMTA3NywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEmIHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkK
KyAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpKTsKLSAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKj4obV9vcEluZm8pOworICAgICAgICBBU1NFUlQo
aGFzVHJhbnNpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VHJhbnNp
dGlvbio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmVTZXQo
KQpAQCAtMTEyOSw3ICsxMTAyLDYgQEAgc3RydWN0IE5vZGUgewogICAgIGJvb2wgaGFzU3RydWN0
dXJlKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1
cmU6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVj
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUzLDE4ICsxNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVD
bG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhDaGVja0V4ZWN1dGFibGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICAvKiBUcmFuc2l0aW9uIHdhdGNocG9pbnRzIGFyZSBhIGNvbnRyYWN0IGJldHdlZW4gdGhlIHBh
cnR5IHNldHRpbmcgdGhlIHdhdGNocG9pbnQgKi9cCi0gICAgLyogYW5kIHRoZSBydW50aW1lIHN5
c3RlbSwgd2hlcmUgdGhlIHBhcnR5IHByb21pc2VzIHRoYXQgdGhlIGNoaWxkIG9iamVjdCBvbmNl
IGhhZCAqL1wKLSAgICAvKiB0aGUgc3RydWN0dXJlIGJlaW5nIHdhdGNoZWQsIGFuZCB0aGUgcnVu
dGltZSBzeXN0ZW0gaW4gdHVybiBwcm9taXNlcyB0aGF0IHRoZSAqL1wKLSAgICAvKiB3YXRjaHBv
aW50IHdpbGwgYmUgdHVybmVkIGludG8gYW4gT1NSIGV4aXQgaWYgYW55IG9iamVjdCB3aXRoIHRo
YXQgc3RydWN0dXJlICovXAotICAgIC8qIGV2ZXIgdHJhbnNpdGlvbnMgdG8gYSBkaWZmZXJlbnQg
c3RydWN0dXJlLiBIZW5jZSwgdGhlIGNoaWxkIG9iamVjdCBtdXN0IGhhdmUgKi9cCi0gICAgLyog
cHJldmlvdXNseSBoYWQgYSBDaGVja1N0cnVjdHVyZSBleGVjdXRlZCBvbiBpdCBvciB3ZSdyZSBk
ZWFsaW5nIHdpdGggYW4gb2JqZWN0ICovXAotICAgIC8qIGNvbnN0YW50IChXZWFrSlNDb25zdGFu
dCkgYW5kIHRoZSBvYmplY3Qgd2FzIGtub3duIHRvIGhhdmUgdGhhdCBzdHJ1Y3R1cmUgYXQgKi9c
Ci0gICAgLyogY29tcGlsZS10aW1lLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhpcyBtZWFucyB0aGF0
IG5vIHN0cnVjdHVyZSBjaGVja3MgaGF2ZSB0byBiZSAqL1wKLSAgICAvKiBwZXJmb3JtZWQgZm9y
IHRoaXMgb2JqZWN0IGJ5IEpJVHRlZCBjb2RlLiBJbiB0aGUgZm9ybWVyIGNhc2UgdGhpcyBtZWFu
cyB0aGF0Ki9cCi0gICAgLyogdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBkb2VzIG5vdCBuZWVkIHRv
IGJlIHJlY2hlY2tlZCBkdWUgdG8gc2lkZS1lZmZlY3RpbmcgKi9cCi0gICAgLyogKGNsb2JiZXJp
bmcpIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0U3RydWN0dXJlLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0b3Jh
Z2UpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24g
MTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKQEAgLTIz
Myw2ICsyMzQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAg
ICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rp
b25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgIHBlcmZvcm1X
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhkZmcpOwogICAgIHBlcmZvcm1JbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvbihkZmcpOwogICAgIHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyhkZmcpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTY5MjAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NSwyMiArMjc1LDI2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICAgICAgcmV0dXJuIG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQo
KS5hbHJlYWR5Q2hlY2tlZCgKICAgICAgICAgICAgIGdyYXBoLCBub2RlLCBzdGF0ZS5mb3JOb2Rl
KGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKSk7CiAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OgotICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKAotICAgICAgICAgICAg
U3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgICAgIAogICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
LSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzU3Vic2V0T2YoCisgICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKAogICAgICAgICAgICAgU3RydWN0
dXJlU2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUp
KTsKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0OgotICAgIGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgIHJldHVybiBzdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1ZhbGlk
T2Zmc2V0KAotICAgICAgICAgICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9y
YWdlQWNjZXNzRGF0YUluZGV4KCldLm9mZnNldCk7CisgICAgY2FzZSBQdXRCeU9mZnNldDogewor
ICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IHN0YXRlLmZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlOworICAgICAgICBpZiAodmFsdWUuaXNUb3AoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
Z3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
Lm9mZnNldDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICBpZiAoIXZhbHVlW2ldLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2OTIwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM2OTcsMjkgKzM2OTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0g
ICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAvLyBUaGVy
ZSBpcyBhIGZhc2NpbmF0aW5nIHF1ZXN0aW9uIGhlcmUgb2Ygd2hhdCB0byBkbyBhYm91dCBhcnJh
eSBwcm9maWxpbmcuCi0gICAgICAgIC8vIFdlICpjb3VsZCogdHJ5IHRvIHRlbGwgdGhlIE9TUiBl
eGl0IGFib3V0IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBhY2Nlc3MgaXMuCi0gICAgICAgIC8vIFRo
ZSBERkcgd2lsbCBoYXZlIGtlcHQgaXQgYWxpdmUsIHRob3VnaCBpdCBtYXkgbm90IGJlIGluIGEg
cmVnaXN0ZXIsIGFuZAotICAgICAgICAvLyB3ZSBzaG91bGRuJ3QgcmVhbGx5IGxvYWQgaXQgc2lu
Y2UgdGhhdCBjb3VsZCBiZSBhIHdhc3RlLiBGb3Igbm93IHRob3VnaCwKLSAgICAgICAgLy8gd2Un
bGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hlbiBhIHdhdGNocG9pbnQgZmlyZXMgdGhl
biB0aGF0J3MKLSAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFscmVhZHkuCi0gICAgICAgIAotICAg
ICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAg
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0g
bV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
b3AxLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG5v
ZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAg
aXNPSy5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgICAgICBzcGVjdWxhdGVDZWxsKG5vZGUtPmNo
aWxkMSgpKTsKLSNlbmRpZgotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogewogICAg
ICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAg
IG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRp
b24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2NywzMiArMzc2Nyw2IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7
Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgZmFzY2luYXRpbmcgcXVlc3Rpb24gaGVyZSBvZiB3aGF0
IHRvIGRvIGFib3V0IGFycmF5IHByb2ZpbGluZy4KLSAgICAgICAgLy8gV2UgKmNvdWxkKiB0cnkg
dG8gdGVsbCB0aGUgT1NSIGV4aXQgYWJvdXQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIGFjY2VzcyBp
cy4KLSAgICAgICAgLy8gVGhlIERGRyB3aWxsIGhhdmUga2VwdCBpdCBhbGl2ZSwgdGhvdWdoIGl0
IG1heSBub3QgYmUgaW4gYSByZWdpc3RlciwgYW5kCi0gICAgICAgIC8vIHdlIHNob3VsZG4ndCBy
ZWFsbHkgbG9hZCBpdCBzaW5jZSB0aGF0IGNvdWxkIGJlIGEgd2FzdGUuIEZvciBub3cgdGhvdWdo
LAotICAgICAgICAvLyB3ZSdsbCBqdXN0IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3aGVuIGEgd2F0
Y2hwb2ludCBmaXJlcyB0aGVuIHRoYXQncwotICAgICAgICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFk
eS4KLQotICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsK
LQotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9
IG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVh
bCwgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpTQ2VsbDo6
c3RydWN0dXJlSURPZmZzZXQoKSksIAotICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlKCkpOwot
ICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0gICAgICAgIGlzT0subGluaygmbV9qaXQpOwot
I2Vsc2UKLSAgICAgICAgc3BlY3VsYXRlQ2VsbChub2RlLT5jaGlsZDEoKSk7Ci0jZW5kaWYKLSAg
ICAgICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgICAgIAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogewogICAgICAgICBBU1NFUlQo
aXNLbm93bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIG1faml0LmppdENv
ZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3Jh
cGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE2OTIwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzExNSw3ICszMTE1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6c3BlY3Vs
YXRlU3RyaW5nT2JqZQogICAgIFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0KICAg
ICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAgIAotICAgIGlmICghbV9zdGF0ZS5mb3JO
b2RlKGVkZ2UpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0
KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKSB7CisgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoZWRn
ZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0
dXJlKSkpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygKICAgICAgICAgICAgIE5vdFN0cmlu
Z09iamVjdCwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAgICAgIG1faml0LmJyYW5jaFN0cnVj
dHVyZVB0cigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFi
c3RyYWN0VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHR3Jh
cGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQorICAgIDogbV9zZXQob3RoZXIubV9zZXQpCit7CisgICAgc2V0Q2xvYmJl
cmVkKG90aGVyLmlzQ2xvYmJlcmVkKCkpOworfQorCitTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpCit7CisgICAgbV9zZXQgPSBvdGhlci5tX3NldDsKKyAgICBzZXRDbG9iYmVy
ZWQob3RoZXIuaXNDbG9iYmVyZWQoKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3AoKQoreworICAgIG1fc2V0LmRlbGV0ZVN0cnVj
dHVyZUxpc3RJZk5lY2Vzc2FyeSgpOworICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOwor
fQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZChHcmFwaCYg
Z3JhcGgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCisgICAgICAgIGdyYXBoLmFzc2Vy
dElzV2F0Y2hlZChhdChpKSk7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xv
YmJlcigpCit7CisgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhpcyBhcHByb2FjaCB0byBjbG9iYmVy
aW5nIGlzIHRoYXQgYW55dGltZSB3ZSBpbnRyb2R1Y2UKKyAgICAvLyBhIHdhdGNoYWJsZSBzdHJ1
Y3R1cmUgaW50byBhbiBhYnN0cmFjdCB2YWx1ZSwgd2Ugd2F0Y2hwb2ludCBpdC4gWW91IGNhbiBh
c3NlcnQKKyAgICAvLyB0aGF0IHRoaXMgaG9sZHMgYnkgY2FsbGluZyBhc3NlcnRJc1dhdGNoZWQo
KS4KKyAgICAgICAgCisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dENsb2JiZXJlZCh0cnVlKTsKKyAgICAgICAgCisgICAgaWYgKG1fc2V0LmlzVGhpbigpKSB7Cisg
ICAgICAgIGlmICghbV9zZXQuc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGlmIChtX3NldC5zaW5nbGVTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9p
bnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAgICAgIG1ha2VUb3BXaGVuVGhpbigp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBTdHJ1Y3R1cmVTZXQ6Ok91
dE9mTGluZUxpc3QqIGxpc3QgPSBtX3NldC5zdHJ1Y3R1cmVMaXN0KCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbGlzdC0+bV9sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKGxpc3QtPmxpc3Qo
KVtpXS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgeworICAg
ICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKFN0
cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zZXQuY29udGFpbnMoZnJvbSkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAoZnJvbS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0
aWxsVmFsaWQoKSkgeworICAgICAgICBzZXRDbG9iYmVyZWQodHJ1ZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX3NldC5hZGQodG8pKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAg
ICBtYWtlVG9wKCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRy
YW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZlY3RvcikKK3sKKyAgICBpZiAoaXNU
b3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cnVjdHVyZVNldCBuZXdTdHJ1Y3R1
cmVzOworICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvci5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgaWYgKCFtX3NldC5jb250YWlucyh2ZWN0b3JbaV0tPnByZXZpb3VzKCkpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAodmVjdG9yW2ldLT5wcmV2aW91cygp
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgc2V0
Q2xvYmJlcmVkKHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdTdHJ1Y3R1cmVz
LmFkZCh2ZWN0b3JbaV0tPm5leHQoKSk7CisgICAgfQorICAgIAorICAgIGlmICghbV9zZXQuYWRk
KG5ld1N0cnVjdHVyZXMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fc2V0LnNp
emUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7Cit9CisKK2Jvb2wg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFtX3Nl
dC5hZGQoc3RydWN0dXJlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICht
X3NldC5zaXplKCkgPiBwb2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAgbWFrZVRvcCgpOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1l
cmdlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbWVyZ2VOb3RUb3Aob3RoZXIpOwor
fQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlKGNvbnN0IFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKKyAgICAgICAgbWFrZVRvcCgp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gSXQgaXNuJ3QgaW1t
ZWRpYXRlbHkgb2J2aW91cyB0aGF0IHRoZSBjb2RlIGJlbG93IGlzIGRvaW5nIHRoZSByaWdodCB0
aGluZywgc28gbGV0J3MgZ28KKyAgICAvLyB0aHJvdWdoIGl0LgorICAgIC8vCisgICAgLy8gVGhp
cyBub3QgY2xvYmJlcmVkLCBvdGhlciBub3QgY2xvYmJlcmVkOiBDbGVhcmx5LCB3ZSBkb24ndCB3
YW50IHRvIG1ha2UgYW55dGhpbmcgY2xvYmJlcmVkCisgICAgLy8gc2luY2Ugd2UganVzdCBoYXZl
IHR3byBzZXRzIGFuZCB3ZSBhcmUgbWVyZ2luZyB0aGVtLiBtZXJnZU5vdFRvcCgpIGNhbiBoYW5k
bGUgdGhpcyBqdXN0CisgICAgLy8gZmluZS4KKyAgICAvLworICAgIC8vIFRoaXMgY2xvYmJlcmVk
LCBvdGhlciBjbG9iYmVyZWQ6IENsb2JiZXJlZCBtZWFucyB0aGF0IHdlIGhhdmUgYSBzZXQgb2Yg
dGhpbmdzLCBwbHVzIHdlCisgICAgLy8gdGVtcG9yYXJpbHkgaGF2ZSB0aGUgc2V0IG9mIGFsbCB0
aGluZ3MgYnV0IHRoZSBsYXR0ZXIgd2lsbCBnbyBhd2F5IG9uY2Ugd2UgaGl0IHRoZSBuZXh0Cisg
ICAgLy8gaW52YWxpZGF0aW9uIHBvaW50LiBUaGlzIGFsbG93cyB1cyB0byBtZXJnZSB0d28gY2xv
YmJlcmVkIHNldHMgdGhlIG5hdHVyYWwgd2F5LiBGb3Igbm93CisgICAgLy8gdGhlIHNldCB3aWxs
IHN0aWxsIGJlIFRPUCAoYW5kIHNvIHdlIGtlZXAgdGhlIGNsb2JiZXJlZCBiaXQgc2V0KSwgYnV0
IHdlIGtub3cgdGhhdCBhZnRlcgorICAgIC8vIGludmFsaWRhdGlvbiwgd2Ugd2lsbCBoYXZlIHRo
ZSB1bmlvbiBvZiB0aGUgdGhpcyBhbmQgb3RoZXIuCisgICAgLy8KKyAgICAvLyBUaGlzIGNsb2Ji
ZXJlZCwgb3RoZXIgbm90IGNsb2JiZXJlZDogSXQncyBzYWZlIHRvIG1lcmdlIGluIG90aGVyIGZv
ciBib3RoIGJlZm9yZSBhbmQgYWZ0ZXIKKyAgICAvLyBpbnZhbGlkYXRpb24sIHNvIGxvbmcgYXMg
d2UgbGVhdmUgdGhlIGNsb2JiZXJlZCBiaXQgc2V0LiBCZWZvcmUgaW52YWxpZGF0aW9uIHRoaXMg
aGFzIG5vCisgICAgLy8gZWZmZWN0IHNpbmNlIHRoZSBzZXQgd2lsbCBzdGlsbCBhcHBlYXIgdG8g
aGF2ZSBhbGwgdGhpbmdzIGluIGl0LiBUaGUgd2F5IHRvIHRoaW5rIGFib3V0CisgICAgLy8gd2hh
dCBpbnZhbGlkYXRpb24gd291bGQgZG8gaXMgaW1hZ2luZSBpZiB3ZSBoYWQgYSBzZXQgQSB0aGF0
IHdhcyBjbG9iYmVyZWQgYW5kIGEgc2V0IEIKKyAgICAvLyB0aGF0IHdhc24ndCBhbmQgd2UgY29u
c2lkZXJlZCB0aGUgZm9sbG93aW5nIHR3byBjYXNlcy4gTm90ZSB0aGF0IHdlIGV4cGVjdCBBIHRv
IGJlIHRoZQorICAgIC8vIHNhbWUgYXQgdGhlIGVuZCBpbiBib3RoIGNhc2VzOgorICAgIC8vCisg
ICAgLy8gICAgICAgICAgICBBLm1lcmdlKEIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ
bnZhbGlkYXRpb25Qb2ludAorICAgIC8vICAgICAgICAgICAgSW52YWxpZGF0aW9uUG9pbnQgICAg
ICAgICAgICAgICAgICAgICAgQS5tZXJnZShCKQorICAgIC8vCisgICAgLy8gVGhlIGZhY3QgdGhh
dCB3ZSBleHBlY3QgQSB0byBiZSB0aGUgc2FtZSBpbiBib3RoIGNhc2VzIG1lYW5zIHRoYXQgd2Ug
d2FudCB0byBtZXJnZSBvdGhlcgorICAgIC8vIGludG8gdGhpcyBidXQga2VlcCB0aGUgY2xvYmJl
cmVkIGJpdC4KKyAgICAvLworICAgIC8vIFRoaXMgbm90IGNsb2JiZXJlZCwgb3RoZXIgY2xvYmJl
cmVkOiBUaGlzIGlzIGp1c3QgdGhlIGNvbnZlcnNlIG9mIHRoZSBwcmV2aW91cyBjYXNlLiBXZQor
ICAgIC8vIHdhbnQgdG8gbWVyZ2Ugb3RoZXIgaW50byB0aGlzIGFuZCBzZXQgdGhlIGNsb2JiZXJl
ZCBiaXQuCisgICAgCisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAgaWYgKCFp
c0Nsb2JiZXJlZCgpICYmIG90aGVyLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICAgICAgc2V0Q2xvYmJl
cmVkKHRydWUpOworICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgY2hh
bmdlZCB8PSBtZXJnZU5vdFRvcChvdGhlci5tX3NldCk7CisgICAgCisgICAgcmV0dXJuIGNoYW5n
ZWQ7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2VOb3RUb3AoY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAoIW1fc2V0Lm1lcmdlKG90aGVyKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChtX3NldC5zaXplKCkgPiBwb2x5bW9y
cGhpc21MaW1pdCkKKyAgICAgICAgbWFrZVRvcCgpOworICAgIAorICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQoreworICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgIG1fc2V0ID0gb3RoZXI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzQ2xvYmJlcmVkKCkpIHsK
KyAgICAgICAgLy8gV2UgaGF2ZSB0d28gY2hvaWNlcyBoZXJlOgorICAgICAgICAvLworICAgICAg
ICAvLyBEbyBub3RoaW5nOiBJdCdzIGxlZ2FsIHRvIGtlZXAgb3VyIHNldCBpbnRhY3QsIHdoaWNo
IHdvdWxkIGVzc2VudGlhbGx5IG1lYW4gdGhhdCBmb3IKKyAgICAgICAgLy8gbm93LCBvdXIgc2V0
IHdvdWxkIGJlaGF2ZSBsaWtlIFRPUCBidXQgYWZ0ZXIgdGhlIG5leHQgaW52YWxpZGF0aW9uIHBv
aW50IGl0IHdvbGQgYmUKKyAgICAgICAgLy8gYSBmaW5pdGUgc2V0IGFnYWluLiBUaGlzIG1heSBi
ZSBhIGdvb2QgY2hvaWNlIGlmICdvdGhlcicgaXMgbXVjaCBiaWdnZXIgdGhhbiBvdXIKKyAgICAg
ICAgLy8gbV9zZXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlcGxhY2UgbV9zZXQgd2l0aCBv
dGhlciBhbmQgY2xlYXIgdGhlIGNsb2JiZXIgYml0OiBUaGlzIGlzIGFsc28gbGVnYWwsIGFuZCBt
ZWFucyB0aGF0CisgICAgICAgIC8vIHdlJ3JlIG5vIGxvbmdlciBjbG9iYmVyZWQuIFRoaXMgaXMg
dXN1YWxseSBiZXR0ZXIgYmVjYXVzZSBpdCBpbW1lZGlhdGVseSBnaXZlcyB1cyBhCisgICAgICAg
IC8vIHNtYWxsZXIgc2V0LgorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIHNjZW5hcmlvIHNo
b3VsZCBjb21lIHVwIHJhcmVseS4gV2UgdXN1YWxseSBkb24ndCBkbyBhbnl0aGluZyB0byBhbiBh
YnN0cmFjdCB2YWx1ZQorICAgICAgICAvLyBhZnRlciBpdCBpcyBjbG9iYmVyZWQuIEJ1dCB3ZSBh
cHBseSBzb21lIGhldXJpc3RpY3MuCisgICAgICAgIAorICAgICAgICBpZiAob3RoZXIuc2l6ZSgp
ID4gbV9zZXQuc2l6ZSgpICsgY2xvYmJlcmVkU3VwcmVtYWN5VGhyZXNob2xkKQorICAgICAgICAg
ICAgcmV0dXJuOyAvLyBLZWVwIHRoZSBjbG9iYmVyZWQgc2V0LgorICAgICAgICAKKyAgICAgICAg
bV9zZXQgPSBvdGhlcjsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBtX3NldC5maWx0ZXIob3RoZXIpOworfQorCit2b2lkIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikKK3sKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChvdGhlci5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIGlmIChpc1RvcCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0Nsb2JiZXJlZCgp
KSB7CisgICAgICAgICAgICAvLyBTZWUganVzdGlmaWNhdGlvbiBpbiBmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0JiksIGFib3ZlLiBBbiB1bmNsb2JiZXJlZCBzZXQgaXMKKyAgICAgICAgICAgIC8v
IGFsbW9zdCBhbHdheXMgYmV0dGVyLgorICAgICAgICAgICAgaWYgKG1fc2V0LnNpemUoKSA+IG90
aGVyLm1fc2V0LnNpemUoKSArIGNsb2JiZXJlZFN1cHJlbWFjeVRocmVzaG9sZCkKKyAgICAgICAg
ICAgICAgICAqdGhpcyA9IG90aGVyOyAvLyBLZWVwIHRoZSBjbG9iYmVyZWQgc2V0LgorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9zZXQuZmlsdGVyKG90aGVyLm1f
c2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBmaWx0ZXIob3RoZXIubV9z
ZXQpOworfQorCituYW1lc3BhY2UgeworCitjbGFzcyBDb25mb3Jtc1RvVHlwZSB7CitwdWJsaWM6
CisgICAgQ29uZm9ybXNUb1R5cGUoU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICAgICAgOiBtX3R5
cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZyb21T
dHJ1Y3R1cmUoc3RydWN0dXJlKSAmIG1fdHlwZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBTcGVj
dWxhdGVkVHlwZSBtX3R5cGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9p
ZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgdHlwZSkKK3sK
KyAgICBpZiAoISh0eXBlICYgU3BlY0NlbGwpKSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBDb25mb3Jtc1RvVHlwZSBjb25mb3Jtc1RvVHlwZSh0eXBlKTsKKyAgICBtX3Nl
dC5nZW5lcmljRmlsdGVyKGNvbmZvcm1zVG9UeXBlKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBp
ZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAK
KyAgICByZXR1cm4gbV9zZXQuY29udGFpbnMoc3RydWN0dXJlKTsKK30KKworYm9vbCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKGlzVG9wKCkgfHwgaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyKTsKK30KKwor
Ym9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIGlmIChpc0Nsb2JiZXJlZCgpID09IG90aGVyLmlzQ2xvYmJlcmVk
KCkpCisgICAgICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyLm1fc2V0KTsKKyAgICAK
KyAgICAvLyBIZXJlIGl0IGdldHMgdHJpY2t5LiBJZiBpbiBkb3VidCwgcmV0dXJuIGZhbHNlIQor
ICAgIAorICAgIGlmIChpc0Nsb2JiZXJlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIEEg
Y2xvYmJlcmVkIHNldCBpcyBuZXZlciBhIHN1YnNldCBvZiBhbiB1bmNsb2JiZXJlZCBzZXQuCisg
ICAgCisgICAgLy8gQW4gdW5jbG9iYmVyZWQgc2V0IGlzIGN1cnJlbnRseSBhIHN1YnNldCBvZiBh
IGNsb2JiZXJlZCBzZXQsIGJ1dCBpdCBtYXkgbm90IGJlIHNvIGFmdGVyCisgICAgLy8gaW52YWxp
ZGF0aW9uLgorICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyLm1fc2V0KTsKK30KKwor
Ym9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQuaXNTdXBlcnNldE9m
KG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyhjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xv
YmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5v
dmVybGFwcyhvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3Zlcmxh
cHMoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KG90aGVyLmlzVG9wKCkgfHwgb3RoZXIuaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgcmV0dXJuIG92ZXJsYXBzKG90aGVyLm1fc2V0KTsKK30KKworYm9vbCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX3NldC5tX3BvaW50ZXIgPT0gb3RoZXIu
bV9zZXQubV9wb2ludGVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBpZiAoaXNU
b3AoKSB8fCBvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoZXkgY2Fu
J3QgYmUgYm90aCB0b3AgYmVjYXVzZSB0aGVuIHRoZWlyIHBvaW50ZXIgdmFsdWVzIHdvdWxkIGhh
dmUgYmVlbiBpZGVudGljYWwsIGFib3ZlLgorICAgIAorICAgIHJldHVybiBtX3NldCA9PSBvdGhl
ci5tX3NldAorICAgICAgICAmJiBpc0Nsb2JiZXJlZCgpID09IG90aGVyLmlzQ2xvYmJlcmVkKCk7
Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAoaXNDbG9i
YmVyZWQoKSkKKyAgICAgICAgb3V0LnByaW50KCJDbG9iYmVyZWQ6Iik7CisgICAgCisgICAgaWYg
KGlzVG9wKCkpCisgICAgICAgIG91dC5wcmludCgiVE9QIik7CisgICAgZWxzZQorICAgICAgICBv
dXQucHJpbnQoaW5Db250ZXh0KG1fc2V0LCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJ
bkNvbnRleHQob3V0LCAwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNjkyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsMzAwICszNywxMzkg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBjbGFzcyBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIHsKIHB1YmxpYzoKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkKLSAgICAg
ICAgOiBtX3N0cnVjdHVyZSgwKQotICAgIHsKLSAgICB9Ci0gICAgCisgICAgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSgpIHsgfQogICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi0gICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQotICAgIHsKLSAgICB9
Ci0gICAgCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNl
dCkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoc2V0LnNpemUoKSkgewotICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHNldFsw
XTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHRvcFZhbHVlKCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICB2b2lkIGNsZWFyKCkKLSAgICB7Ci0gICAgICAg
IG1fc3RydWN0dXJlID0gMDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBtYWtlVG9wKCkKLSAgICB7
Ci0gICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUoKTsKLSAgICB9Ci0gICAgCi0gICAgc3Rh
dGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkKLSAgICB7Ci0gICAgICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUgdmFsdWU7Ci0gICAgICAgIHZhbHVlLm1ha2VUb3AoKTsKLSAgICAgICAg
cmV0dXJuIHZhbHVlOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZChTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgOiBtX3NldChzdHJ1Y3R1cmUpCiAgICAgewotICAgICAgICBBU1NFUlQo
IWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1
cmUpCi0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
c3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIH0KLSAgICAKLSAgICBib29sIGFkZEFsbChjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICAgICAgOiBtX3NldChvdGhlcikKICAgICB7Ci0gICAg
ICAgIGlmIChpc1RvcCgpIHx8ICFvdGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChvdGhlci5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICBtYWtlVG9w
KCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1f
c3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09
IG90aGVyWzBdKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtYWtlVG9wKCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKTsKICAgICAKLSAgICBib29sIGFk
ZEFsbChjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IGlmICghb3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
b3RoZXIuaXNUb3AoKSkgewotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0gICAgICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVj
dHVyZTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcik7CiAg
ICAgCi0gICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKKyAgICB2
b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3NldC5j
bGVhcigpOworICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2UpOwogICAgIH0KICAgICAKLSAgICBi
b29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0g
ICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBp
ZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVy
biBvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSk7Ci0gICAgfQorICAgIHZvaWQgbWFrZVRvcCgp
OwogICAgIAotICAgIGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOwotICAg
IH0KKyNpZiBBU1NFUlRfRElTQUJMRUQKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYp
IGNvbnN0IHsgfQorI2Vsc2UKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0
OworI2VuZGlmCiAgICAgCi0gICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghb3RoZXIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmIChvdGhlci5zaXplKCkgPiAxKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF07Ci0gICAg
fQorICAgIHZvaWQgY2xvYmJlcigpOworICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50
KCkgeyBzZXRDbG9iYmVyZWQoZmFsc2UpOyB9CiAgICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNv
bnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX3N0cnVj
dHVyZSkgewotICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Cisg
ICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8p
OworICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImKTsK
ICAgICAKLSAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0
aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgc3dpdGNo
IChvdGhlci5zaXplKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3Ro
ZXJbMF07Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvdGhlci5jb250YWlucyhtX3N0cnVjdHVy
ZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBtX3N0cnVjdHVyZSA9
IDA7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICghKG90
aGVyICYgU3BlY0NlbGwpKSB7Ci0gICAgICAgICAgICBjbGVhcigpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoaXNDbGVhck9yVG9wKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCEoc3BlY3VsYXRpb25Gcm9tU3RydWN0
dXJlKG1fc3RydWN0dXJlKSAmIG90aGVyKSkKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsK
LSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKKyAgICBzdGF0aWMgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSB0b3AoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3N0cnVjdHVy
ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlID09IHRvcFZhbHVlKCk7IH0KKyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3NldC5tX3BvaW50ZXIgPSB0b3BWYWx1ZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFyKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2V0Lm1fcG9pbnRlciA9PSB0b3BWYWx1ZTsgfQorICAgIGJvb2wgaXNOZWl0aGVyQ2xlYXJO
b3JUb3AoKSBjb25zdCB7IHJldHVybiAhaXNDbGVhcigpICYmICFpc1RvcCgpOyB9CisgICAgCisg
ICAgLy8gQSBjbG9iYmVyZWQgYWJzdHJhY3QgdmFsdWUgbWVhbnMgdGhhdCB0aGUgc2V0IGN1cnJl
bnRseSBjb250YWlucyB0aGUgbV9zZXQgc2V0IG9mCisgICAgLy8gc3RydWN0dXJlcyBwbHVzIFRP
UCwgZXhjZXB0IHRoYXQgVE9QIHdpbGwgZ28gYXdheSBhdCB0aGUgbmV4dCBpbnZhbGlkYXRpb24g
cG9pbnQuIE5vdGUKKyAgICAvLyB0aGF0IGludHVpdGl2ZWx5IHlvdSBjYW4gc29tZXRpbWVzIHRo
aW5rIG9mIHRoaXMgYXMgInRoZSBzZXQgb2Ygc3RydWN0dXJlcyBpbiBtX3NldCBwbHVzCisgICAg
Ly8gdGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRyYW5zaXRpb24tcmVhY2hhYmxlIGZyb20gbV9zZXQi
IC0gYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGNvcnJlY3QsCisgICAgLy8gc2luY2UgaWYgd2UgYWRk
IGFuIHVud2F0Y2hhYmxlIHN0cnVjdHVyZSBhZnRlciBjbG9iYmVyaW5nLCB0aGUgdHdvIGRlZmlu
aXRpb25zIGFyZSBub3QKKyAgICAvLyBlcXVpdmFsZW50LiBJZiB3ZSBkbyB0aGlzLCB0aGUgbmV3
IHVud2F0Y2hhYmxlIHN0cnVjdHVyZSB3aWxsIGJlIGFkZGVkIHRvIG1fc2V0LgorICAgIC8vIElu
dmFsaWRhdGlvbiBwb2ludHMgZG8gbm90IHRyeSB0byAiY2xpcCIgdGhlIHNldCBvZiB0cmFuc2l0
aW9uLXJlYWNoYWJsZSBzdHJ1Y3R1cmVzIGZyb20KKyAgICAvLyBtX3NldCBieSBsb29raW5nIGF0
IHJlYWNoYWJpbGl0eSBhcyB0aGlzIHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV3IHNldCBpcyBUT1Au
IEluc3RlYWQgdGhleQorICAgIC8vIGxpdGVyYWxseSBhc3N1bWUgdGhhdCB0aGUgc2V0IGlzIGp1
c3QgbV9zZXQgcmF0aGVyIHRoYW4gVE9QLgorICAgIGJvb2wgaXNDbG9iYmVyZWQoKSBjb25zdCB7
IHJldHVybiBtX3NldC5nZXRSZXNlcnZlZEZsYWcoKTsgfQorICAgIAorICAgIGJvb2wgYWRkKFN0
cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKKyAgICBib29sIG1lcmdlKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpOworICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3RoZXIpOworICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOwor
ICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKTsKKyAg
ICB2b2lkIGZpbHRlcihTcGVjdWxhdGVkVHlwZSB0eXBlKTsKICAgICAKLSAgICBib29sIGlzQ2xl
YXJPclRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlIDw9IHRvcFZhbHVlKCk7IH0KLSAg
ICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xlYXJPclRv
cCgpOyB9CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
IG90aGVyKSBjb25zdDsKICAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoIWlzVG9wKCkpOwotICAgICAgICByZXR1cm4gISFtX3N0cnVjdHVyZTsKKyAg
ICAgICAgcmV0dXJuIG1fc2V0LnNpemUoKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJlKiBh
dChzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7Ci0gICAg
ICAgIEFTU0VSVChtX3N0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOwot
ICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5hdChpKTsK
ICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KGkpOwotICAgIH0KKyAgICBTdHJ1Y3R1cmUqIG9wZXJh
dG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgCi0gICAgU3RydWN0
dXJlKiBsYXN0KCkgY29uc3QKKyAgICAvLyBGSVhNRTogRWxpbWluYXRlIGFsbCB1c2VzIG9mIHRo
aXMgbWV0aG9kLiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55CisgICAgLy8gc3BlY2lhbC1jYXNpbmcg
Zm9yIHRoZSBvbmUtc3RydWN0dXJlIGNhc2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgIFN0cnVjdHVyZSogb25seVN0cnVjdHVyZSgp
IGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNUb3AoKSB8fCBzaXplKCkgIT0gMSkKKyAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gYXQoMCk7CiAgICAgfQogICAg
IAotICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY0NlbGw7
Ci0gICAgICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY05vbmU7Ci0g
ICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpOwotICAg
IH0KKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNv
bnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIGJvb2wg
aXNWYWxpZE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAgICAgICBpZiAo
aXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGlzQ2xlYXIo
KSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUt
PmlzVmFsaWRPZmZzZXQob2Zmc2V0KTsKLSAgICB9CisgICAgLy8gVGhlIG1ldGhvZHMgYmVsb3cg
YXJlIGFsbCBjb25zZXJ2YXRpdmUgYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBtYWtpbmcgJ3RoaXMn
IGFwcGVhciBiaWdnZXIKKyAgICAvLyB0aGFuIGl0IGlzLiBGb3IgZXhhbXBsZSwgY29udGFpbnMo
KSBtYXkgcmV0dXJuIHRydWUgaWYgdGhlIHNldCBpcyBjbG9iYmVyZWQgb3IgVE9QLgorICAgIC8v
IGlzU3Vic2V0T2YoKSBtYXkgcmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgYW1iaWd1aXRpZXMuIFRo
ZXJlZm9yZSB5b3Ugc2hvdWxkIG9ubHkgcGVyZm9ybQorICAgIC8vIG9wdGltaXphdGlvbnMgYXMg
YSBjb25zZXF1ZW5jZSBvZiB0aGUgInRoaXMgaXMgc21hbGxlciIgcmV0dXJuIHZhbHVlIC0gc28g
ZmFsc2UgZm9yCisgICAgLy8gY29udGFpbnMoKSwgdHJ1ZSBmb3IgaXNTdWJzZXRPZigpLCBmYWxz
ZSBmb3IgaXNTdXBlcnNldE9mKCksIGFuZCBmYWxzZSBmb3Igb3ZlcmxhcHMoKS4KKworICAgIGJv
b2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0OwogICAgIAotICAgIGJvb2wg
aGFzU2luZ2xldG9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc05laXRoZXJDbGVh
ck5vclRvcCgpOwotICAgIH0KKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHNpbmdsZXRvbigp
IGNvbnN0CisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikg
Y29uc3Q7CisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNOZWl0aGVyQ2xlYXJOb3JU
b3AoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG90aGVy
LmlzU3Vic2V0T2YoKnRoaXMpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgfQorICAgIGJvb2wg
b3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBvdmVy
bGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCi0g
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGNsb2JiZXJl
ZEZsYWcgPSBTdHJ1Y3R1cmVTZXQ6OnJlc2VydmVkRmxhZzsKKyAgICBzdGF0aWMgY29uc3QgdWlu
dHB0cl90IHRvcFZhbHVlID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZFZhbHVlOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBwb2x5bW9ycGhpc21MaW1pdCA9IDEwOworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBjbG9iYmVyZWRTdXByZW1hY3lUaHJlc2hvbGQgPSAyOworICAgIAorICAgIHZv
aWQgbWFrZVRvcFdoZW5UaGluKCkKICAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAg
ICAgICAgICBvdXQucHJpbnQoIlRPUCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBvdXQucHJpbnQoIlsiKTsKLSAgICAgICAgaWYgKG1fc3RydWN0
dXJlKQotICAgICAgICAgICAgb3V0LnByaW50KGluQ29udGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRl
eHQpKTsKLSAgICAgICAgb3V0LnByaW50KCJdIik7CisgICAgICAgIEFTU0VSVChtX3NldC5pc1Ro
aW4oKSk7CisgICAgICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOwogICAgIH0KLQotICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIAorICAgIGJvb2wgbWVyZ2VO
b3RUb3AoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7CisgICAgCisgICAgdm9pZCBzZXRDbG9i
YmVyZWQoYm9vbCBjbG9iYmVyZWQpCiAgICAgewotICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwg
MCk7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSB8fCAhY2xvYmJlcmVkKTsKKyAgICAgICAgbV9z
ZXQuc2V0UmVzZXJ2ZWRGbGFnKGNsb2JiZXJlZCk7CiAgICAgfQotCi1wcml2YXRlOgotICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1
Y3R1cmUqPigxKTsgfQotICAgIAotICAgIC8vIE5CLiBUaGlzIG11c3QgaGF2ZSBhIHRyaXZpYWwg
ZGVzdHJ1Y3Rvci4KICAgICAKLSAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1
Y3R1cmUgYXQgYSB0aW1lLgotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgU3RydWN0
dXJlU2V0IG1fc2V0OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdUcmFuc2l0aW9u
LmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCit2b2lkIFRyYW5zaXRpb246OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHBvaW50ZXJEdW1w
SW5Db250ZXh0KHByZXZpb3VzLCBjb250ZXh0KSwgIiAtPiAiLCBwb2ludGVyRHVtcEluQ29udGV4
dChuZXh0LCBjb250ZXh0MCkpOworfQorCit2b2lkIFRyYW5zaXRpb246OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdUcmFuc2l0aW9uX2gKKyNkZWZpbmUgREZHVHJhbnNpdGlv
bl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgU3RydWN0dXJlOworCituYW1lc3BhY2UgREZH
IHsKKworc3RydWN0IFRyYW5zaXRpb24geworICAgIFN0cnVjdHVyZSogcHJldmlvdXM7CisgICAg
U3RydWN0dXJlKiBuZXh0OworICAgIAorICAgIFRyYW5zaXRpb24oKQorICAgICAgICA6IHByZXZp
b3VzKG51bGxwdHIpCisgICAgICAgICwgbmV4dChudWxscHRyKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHByZXZpb3VzLCBTdHJ1Y3R1cmUqIG5leHQpCisg
ICAgICAgIDogcHJldmlvdXMocHJldmlvdXMpCisgICAgICAgICwgbmV4dChuZXh0KQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENv
bnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKK307CisK
K3R5cGVkZWYgVmVjdG9yPFRyYW5zaXRpb24sIDM+IFRyYW5zaXRpb25WZWN0b3I7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5k
aWYgLy8gREZHVHJhbnNpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY5
MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDggKzIxNSw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJs
b2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAg
ICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogeworICAgICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgICAgICAgICAgICAgTm9kZSog
Y2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChj
aGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMjg1LDEzICsyODQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmVTZXQoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNo
aWxkMSgpICE9IHNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZSgpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0zMzEsNyAr
MzIzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBj
YXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICAg
ICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgpAQCAtMzg2LDEzICszNzcsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrQWNjb3VudGluZ0ZvckFycmF5TW9kZSh2YXJp
YWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrQWNj
b3VudGluZ0ZvckFycmF5TW9kZSh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlKCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRlICJE
RkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCitjbGFzcyBXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlIDog
cHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIndhdGNoYWJsZSBzdHJ1
Y3R1cmUgd2F0Y2hpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBydW4oKQorICAg
IHsKKyAgICAgICAgLy8gVGhlc2UgYXJlIHByZXR0eSBkdW1iLCBidXQgbmVlZGVkIHRvIHBsYWNh
dGUgc3Vic2VxdWVudCBhc3NlcnRpb25zLiBXZSBjb24ndCBhY3R1YWxseQorICAgICAgICAvLyBo
YXZlIHRvIHdhdGNoIHRoZXNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRvIHRyYW5zaXRpb24g
YXdheSBmcm9tIGl0LCBidXQgdGhleSBhcmUKKyAgICAgICAgLy8gd2F0Y2hhYmxlIGFuZCBzbyB3
ZSB3aWxsIGFzc2VydCBpZiB0aGV5IGFyZW4ndCB3YXRjaGVkLgorICAgICAgICB0cnlXYXRjaCht
X2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsgCisgICAgICAgIHRyeVdhdGNoKG1f
Z3JhcGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxv
Y2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4
ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAg
ICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2Rl
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0
Y2gobm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgorICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5leGVjdXRhYmxlKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1
cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICAgICAgICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoK
KyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlKCkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAg
ICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAg
ICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNT
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlP
ZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRj
aCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIERv
bid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNl
IHRoYXQgd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBv
c2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3YXRjaCB0aGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3Qg
dXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
IXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0g
bm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5
OgorICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgICAgICAgICAgICAg
ICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5p
bmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgorICAgICAgICAg
ICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT50eXBlZEFycmF5U3RydWN0dXJlKG5vZGUtPnR5cGVkQXJyYXlUeXBlKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgVG9TdHJpbmc6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVj
dFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoKKyAgICAgICAg
ICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3UmVn
ZXhwOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHRyeVdhdGNoKEpTVmFsdWUgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICB0cnlXYXRjaCh2YWx1
ZS5hc0NlbGwoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5V2F0Y2goSlNDZWxsKiBjZWxs
KQorICAgIHsKKyAgICAgICAgaWYgKGNlbGwpCisgICAgICAgICAgICB0cnlXYXRjaChjZWxsLT5z
dHJ1Y3R1cmUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5V2F0Y2goY29uc3QgU3RydWN0
dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzZXQuc2l6ZSgp
OyBpLS07KQorICAgICAgICAgICAgdHJ5V2F0Y2goc2V0W2ldKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpCisgICAgICAg
ICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXQoKSk7CisgICAgfQorfTsKKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBs
aW5nUmVnaW9uKCJERkcgV2F0Y2hhYmxlIFN0cnVjdHVyZSBXYXRjaGluZyIpOworICAgIHJldHVy
biBydW5QaGFzZTxXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlPihncmFwaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZV9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCitjbGFzcyBHcmFwaDsKKworLy8gU2V0IHdhdGNocG9pbnRzIG9uIGFueSBzdHJ1Y3R1cmVz
IHRoYXQgd2Uga25vdyBvZiB0aGF0IGFyZSBjdXJyZW50bHkgd2F0Y2hhYmxlLiBJdCdzCisvLyBz
b21ld2hhdCBjb3VudGVyaW50dWl0aXZlLCBidXQgdGhpcyBlbmRzIHVwIGJlaW5nIHRoZSBjbGVh
bmVzdCBhbmQgbW9zdCBlZmZlY3RpdmUgd2F5CisvLyBvZiByZWR1Y2luZyBzdHJ1Y3R1cmUgY2hl
Y2tzIG9uIHRlcm1pbmFsIHN0cnVjdHVyZXM6CisvLworLy8gLSBXZSB1c2VkIHRvIG9ubHkgc2V0
IHdhdGNocG9pbnRzIG9uIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzIGlmIHdlIGtuZXcgdGhhdCB0aGlz
IHdvdWxkCisvLyAgIHJlbW92ZSBhIHN0cnVjdHVyZSBjaGVjay4gRXhwZXJpbWVudHMgc2hvdyB0
aGF0IHN3aXRjaGluZyBmcm9tIHRoYXQsIHRvIGJsaW5kbHkKKy8vICAgc2V0dGluZyB3YXRjaHBv
aW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMsIHdhcyBub3QgYSByZWdyZXNzaW9uLgor
Ly8KKy8vIC0gSXQgbWFrZXMgYWJzdHJhY3QgaW50ZXJwcmV0YXRpb24gYSB3aG9sZSBsb3QgZWFz
aWVyLiBXZSBqdXN0IGFzc3VtZSB0aGF0IHdhdGNoYWJsZQorLy8gICBzdHJ1Y3R1cmVzIGFyZSB1
bmNsb2JiZXJhYmxlIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGFueSBvdGhlciBsb2dpYy4KKworYm9v
bCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgmKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTks
MTMgKzExOSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRMYXppbHkoanNDYXN0PEpTRnVu
Y3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnRT
ZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAotICAgICAgICBjYXNlIFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBv
aW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRp
YywKLSAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLT5vcCgpID09IFdlYWtKU0NvbnN0
YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IDogQmFkQ2FjaGVXYXRjaHBvaW50
LAotICAgICAgICAgICAgICAgIG1fbm9kZS0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAgICAgICAgY2Fz
ZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBhZGRMYXppbHkobV9ub2RlLT52YXJp
YWJsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE1NCwxMSArMTQ3
LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVzZTogewog
ICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPSBnbG9iYWxPYmpl
Y3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJv
dG90eXBlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgQVNTRVJUKG1fZ3Jh
cGgud2F0Y2hwb2ludHMoKS5pc1ZhbGlkT3JNaXhlZChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYywgTm90U3RyaW5nT2JqZWN0LAotICAgICAgICAgICAgICAgIHN0cmlu
Z1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgICAg
ICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHN0cmluZ1Byb3RvdHlwZVN0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcg
KzYzLDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNh
c2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBB
cnJheWlmeVRvU3RydWN0dXJlOgogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhh
bnRvbVB1dFN0cnVjdHVyZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50
cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5
KQpAQCAtODIsMTIgKzgyLDE1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAg
ICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBp
bnQ2NCkpIFwKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FSkosIGZ1bmN0aW9uVHlwZShpbnRQ
dHIsIGludFB0ciwgaW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0os
IGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0aW9u
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUpK
SiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludDY0LCBpbnQ2NCwgaW50NjQpKSBc
CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRU9aRCwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBp
bnRQdHIsIGludFB0ciwgaW50MzIsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVy
YXRpb25fRU9aSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50MzIs
IGludDY0KSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUodm9p
ZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDYiwg
ZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwg
aW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0QsIGZ1bmN0aW9u
VHlwZShpbnQzMiwgZG91YmxlVHlwZSkpCiAKIGNsYXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBw
dWJsaWMgQ29tbW9uVmFsdWVzIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjU4LDYgKzI1OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjb21waWxlTm9kZSh1bnNpZ25lZCBu
b2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICBtX291dC50cmFwKCk7CiAgICAgICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0zOTksOSArNDAwLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNvbXBp
bGVDaGVja1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBjb21waWxlU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENoZWNrRnVuY3Rpb246CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tGdW5jdGlvbigpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xNjA5LDEyICsxNjA3LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgY29tcGlsZVN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkKLSAgICB7Ci0gICAg
ICAgIGFkZFdlYWtSZWZlcmVuY2UobV9ub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIHNwZWN1
bGF0ZUNlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgY29tcGls
ZUNoZWNrRnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgTFZhbHVlIGNlbGwgPSBsb3dDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOwpAQCAtMzIwNyw3ICszMTk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsK
LSAgICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hl
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICAgICAgbV9vdXQu
dW5yZWFjaGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwpAQCAtMzI3OSw3ICszMjcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsK
LSAgICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hl
LCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICAgICAgbV9vdXQu
dW5yZWFjaGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwpAQCAtNDcxOCw3ICs0NzEwLDggQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3BlY3VsYXRl
KGtpbmQsIG5vVmFsdWUoKSwgMCwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBzcGVjdWxh
dGUoa2luZCwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdHlwZUNo
ZWNrKApAQCAtNTQ2Myw3ICs1NDU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RydWN0dXJlKiBz
dHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkp
CisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCkBAIC01NjY3LDkgKzU2NjAsMTAgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiRXhjZXB0aW9uIGNoZWNrIGNvbnRpbnVhdGlvbiIpKTsKICAg
ICAgICAgCisgICAgICAgIExWYWx1ZSBleGNlcHRpb24gPSBtX291dC5sb2FkNjQobV9vdXQuYWJz
b2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgICAgICAKICAgICAgICAgbV9v
dXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KG1fb3V0LmxvYWQ2NChtX291
dC5hYnNvbHV0ZSh2bSgpLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSkpLAotICAgICAgICAgICAgcmFy
ZWx5KG1faGFuZGxlRXhjZXB0aW9ucyksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAg
ICAgICBtX291dC5ub3RaZXJvNjQoZXhjZXB0aW9uKSwgcmFyZWx5KG1faGFuZGxlRXhjZXB0aW9u
cyksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw3
IEBAIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXIKIHR5cGVkZWYgc2l6
ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FT0pzcykoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1N0cmluZyopOwogdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklU
T3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgU2xvd1BhdGhSZXR1cm5UeXBl
IEpJVF9PUEVSQVRJT04gKCpTcHJ0X0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJf
dCk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uKSgpOwogdHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsK
IHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0
ZSosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FQ2IpKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwpAQCAtMTY3LDYgKzE2OCw4IEBAIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJ
VF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0ZSosIFZNKik7Cit0eXBl
ZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVl
KTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fWikoaW50MzJf
dCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FKShFeGVj
U3RhdGUqKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VD
KShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBf
SklUT3BlcmF0aW9uX0VDbGkpKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5mbyopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheWlmeS10by1zdHJ1Y3R1cmUtY29u
dHJhZGljdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2FycmF5aWZ5LXRvLXN0cnVjdHVyZS1jb250cmFkaWN0aW9uLmpzCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheWlmeS10by1zdHJ1
Y3R1cmUtY29udHJhZGljdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitm
dW5jdGlvbiBmb28oYXJyYXksIHYsIHApIHsKKyAgICBhcnJheVswXSA9IDEwOworICAgIGlmIChw
KQorICAgICAgICB2ID0gImhlbGxvIjsKKyAgICBhcnJheVswXSA9IHY7Cit9CisKK25vSW5saW5l
KGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJy
YXkgPSBbNDJdOworICAgIGZvbyhhcnJheSwgNDMsIGZhbHNlKTsKKyAgICBpZiAoYXJyYXlbMF0g
IT0gNDMpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGFycmF5OworfQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXRteWFyZ3Vt
ZW50c2xlbmd0aC1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9mdGwtZ2V0bXlhcmd1bWVudHNsZW5ndGgtaW5saW5lLmpzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0bXlhcmd1
bWVudHNsZW5ndGgtaW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorZnVu
Y3Rpb24gZm9vKCl7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgciA9IGZvbygxMSwgMTIsIDEzLCAx
OCwgMTksIDIwKTsKKyAgICBpZiAociAhPSA2KSB0aHJvdyAiRXJyb3I6ICIrcjsKK30KKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0
LW11bHRpcGxlLXRyYW5zaXRpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1tdWx0aXBsZS10cmFuc2l0aW9u
cy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
bXVsdGktcHV0LWJ5LW9mZnNldC1tdWx0aXBsZS10cmFuc2l0aW9ucy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMwIEBACitmdW5jdGlvbiBmb28obykgeworICAgIG8ueCA9IDE7CisgICAg
by55ID0gMjsKKyAgICBvLmEgPSAzOworICAgIG8uYiA9IDQ7CisgICAgby5jID0gNTsKKyAgICBv
LmQgPSA2OworICAgIG8uZSA9IDc7CisgICAgby5mID0gODsKKyAgICBvLmcgPSA5OworICAgIG8u
aCA9IDEwOworICAgIG8uaSA9IDExOworfQorCitub0lubGluZShmb28pOworCitmdW5jdGlvbiBG
b28oKSB7CisgICAgZm9vKHRoaXMpOworfQorCit2YXIgcmVzdWx0ID0gMDsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIGZvbyh7Zjo0Mn0pOworICAgIHJlc3VsdCAr
PSAobmV3IEZvbygpKS54OworfQorCitpZiAocmVzdWx0ICE9IDEwMDAwMCkKKyAgICB0aHJvdyAi
QmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwtaW4tbG9vcC5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ct
ZnJvbS1mdGwtaW4tbG9vcC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACit2YXIg
ZGlkVGhyb3cgPSBmYWxzZTsKK3RyeSB7CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeyB9CisgICAgICAgIHRocm93IDQyOworICAg
IH0pKCk7Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKGUgIT0gNDIpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIGU7CisgICAgZGlkVGhyb3cgPSB0cnVlOworfQoraWYgKCFk
aWRUaHJvdykKKyAgICB0aHJvdyAiRXJyb3I6IHNob3VsZCBoYXZlIHRocm93biBidXQgZGlkbid0
LiI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93LWZyb20t
ZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
dGhyb3ctZnJvbS1mdGwuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3Rocm93LWZyb20tZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjUgQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgdmFyIG8gPSB7Zjo0Mn07CisgICAgaWYgKHAp
CisgICAgICAgIHRocm93IG87CisgICAgcmV0dXJuIG87Cit9CisKK25vSW5saW5lKGZvbyk7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IGZvbyhmYWxz
ZSk7CisgICAgaWYgKG8uZiAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgby5mOworfQorCit2YXIgZGlkVGhyb3cgPSBmYWxzZTsKK3RyeSB7CisgICAgZm9vKHRy
dWUpOworfSBjYXRjaCAoZSkgeworICAgIGlmIChlLmYgIT0gNDIpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCBpbiBjYXRjaDogIiArIG8uZjsKKyAgICBkaWRUaHJvdyA9IHRydWU7
Cit9CitpZiAoIWRpZFRocm93KQorICAgIHRocm93ICJFcnJvcjogc2hvdWxkIGhhdmUgdGhyb3du
IGJ1dCBkaWRuJ3QuIjsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvV1RGL3d0
Zi9CYWcuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTIgQEAgcHJpdmF0ZToKICAgICBj
bGFzcyBOb2RlIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGlj
OgorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBOb2RlKEFyZ3Mu
Li4gYXJncykKKyAgICAgICAgICAgIDogbV9pdGVtKGFyZ3MuLi4pCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgVCBtX2l0ZW07CiAgICAgICAgIE5vZGUqIG1fbmV4dDsK
ICAgICB9OwpAQCAtNTMsOSArNTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIFQqIGFkZCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBUKiBh
ZGQoQXJncy4uLiBhcmdzKQogICAgIHsKLSAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ldyBOb2Rl
OworICAgICAgICBOb2RlKiBuZXdOb2RlID0gbmV3IE5vZGUoYXJncy4uLik7CiAgICAgICAgIG5l
d05vZGUtPm1fbmV4dCA9IG1faGVhZDsKICAgICAgICAgbV9oZWFkID0gbmV3Tm9kZTsKICAgICAg
ICAgcmV0dXJuICZuZXdOb2RlLT5tX2l0ZW07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjk0NjcpCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAor
MjAxNC0wNS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEFJ
IHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9n
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi1zaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnkt
aWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBs
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1
YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBq
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qczogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanM6IEFkZGVkLgorCiAyMDE0LTA1LTIxICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0gREZHOjpj
bG9iYmVyaXplIHNob3VsZCBiZSBibGluZCB0byB0aGUgZWZmZWN0cyBvZiBHQwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1l
bGltaW5hdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Z2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1v
cnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBo
aWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZQorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1w
bGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDog
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBA
CitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbi1zaW1wbGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhj
ZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tc2ltcGxlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dl
dC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1i
eS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7
YToxfTsKKyAgICB2YXIgcCA9IHthOjIsIGw6MTN9OworICAgIHZhciByZXN1bHQgPSAwOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCBePSBv
LmE7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRt
cDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnkt
aWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxLCBiOjIs
IGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3LCBoOjgsIGk6OSwgajoxMCwgazoxMX07CisgICAgdmFy
IHAgPSB7YToyLCBiOjMsIGM6NCwgZDo1LCBlOjYsIGY6NywgZzo4LCBoOjksIGk6MTAsIGo6MTEs
IGs6MTIsIGw6MTN9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIgXiBvLmMgXiBv
LmQgXiBvLmUgXiBvLmYgXiBvLmcgXiBvLmggXiBvLmkgXiBvLmogXiBvLms7CisgICAgICAgIHZh
ciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9CisgICAg
aWYgKHJlc3VsdCAhPSA2NTAwMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgbyA9IHthOjEsIGI6MiwgYzozLCBkOjQsIGU6NSwgZjo2LCBnOjcsIGg6OCwgaTo5LCBqOjEw
LCBrOjExfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG8uYSBeIG8uYiB8IG8uYyBeIG8uZCAmIG8u
ZSBeIG8uZiB8IG8uZyBeIG8uaCAmIG8uaSBeIG8uaiB8IG8uazsKKyAgICBpZiAocmVzdWx0ICE9
IDE1MDAwMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5
LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlk
LXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQt
cXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YTox
fTsKKyAgICB2YXIgcCA9IHthOjIsIGw6MTN9OworICAgIHZhciBxID0ge2E6MywgYjozfTsKKyAg
ICB2YXIgciA9IHthOjQsIGM6NX07CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0IF49IG8uYTsKKyAgICAg
ICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gcTsKKyAgICAgICAg
cSA9IHI7CisgICAgICAgIHIgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232350</attachid>
            <date>2014-06-01 11:36:46 -0700</date>
            <delta_ts>2014-06-02 20:19:22 -0700</delta_ts>
            <desc>almoster doner</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>194983</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4MiBA
QAorMjAxNC0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0
aGFuIDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
ODA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGlu
dGVycHJldGVyKSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVy
ZToKKyAgICAgICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRy
YWNrIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAg
ICAgICBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhh
dmUgYW55IG9mIHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdo
aWNoIC0gYnV0IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3Qg
aW4gdGhlIHNldC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBz
dGlsbCBiZSBUT1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisg
ICAgICAgICAgYXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBl
eHBsb3Npb24gb24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91
Z2ggdGhhdCBpdCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBz
aW5jZSB3ZSBoYXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisg
ICAgICAgICAgc3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0
byBrbm93IGFib3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBv
aW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQK
KyAgICAgICAgICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRo
YXQgdGhlIHdhdGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGlz
IGFsbG93cyB0cmFja2luZyBvZiB3YXRjaGFibGUgc3RydWN0dXJlcyB0byBiZSBmYXIgc2ltcGxl
ciB0aGFuIGJlZm9yZS4gUHJldmlvdXNseSwKKyAgICAgICAgICBhIHN0cnVjdHVyZSBiZWluZyB0
cmFja2VkIGFzICJmdXR1cmUgcG9zc2libGUiIHdhcyBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIHdh
dGNoYWJsZSBidXQKKyAgICAgICAgICB3ZSBtaWdodCBub3QgYWN0dWFsbHkgd2F0Y2ggaXQuIFRo
aXMgbWFrZXMgYWxnZWJyYSBvdmVyIHNldHMgb2YgZnV0dXJlIHBvc3NpYmxlCisgICAgICAgICAg
c3RydWN0dXJlcyBxdWl0ZSB3ZWlyZC4gQnV0IHdhdGNoaW5nIGFsbCB3YXRjaGFibGUgc3RydWN0
dXJlcyBtZWFucyB0aGF0IHdlIHNpbXBsZSBzYXkKKyAgICAgICAgICB0aGF0IGEgc3RydWN0dXJl
IHNldCBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6IHVuY2xvYmJlcmVkLCB3aGljaCBt
ZWFucyBpdCdzIGp1c3QKKyAgICAgICAgICBhIHNldCBvZiBzdHJ1Y3R1cmVzIGFuZCBpdCBkb2Vz
bid0IG1hdHRlciB3aGF0IGlzIHdhdGNoYWJsZSBvciB3aGF0IGlzbid0IGJlY2F1c2Ugd2UndmUK
KyAgICAgICAgICBwcm92ZW4gdGhhdCB0aGUgdmFsdWUgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBz
dHJ1Y3R1cmVzIHJpZ2h0IG5vdzsgYW5kIGNsb2JiZXJlZCwgd2hpY2gKKyAgICAgICAgICBtZWFu
cyB0aGF0IHdlIGhhdmUgYSBzZXQgb2Ygc3RydWN0dXJlcywgcGx1cyBhbGwgcG9zc2libGUgc3Ry
dWN0dXJlcyB0ZW1wb3JhcmlseSwgd2l0aAorICAgICAgICAgIGludmFsaWRhdGlvbiByZW1vdmlu
ZyB0aGUgInBsdXMgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMiLiBDbG9iYmVyaW5nIGEgc2V0IG1l
YW5zIHRoYXQKKyAgICAgICAgICBpZiBhbnkgb2YgaXRzIHN0cnVjdHVyZXMgYXJlIHVud2F0Y2hh
YmxlLCB0aGUgc2V0IGp1c3QgYmVjb21lcyBUT1A7IGJ1dCBpZiBhbGwKKyAgICAgICAgICBzdHJ1
Y3R1cmVzIGluIHRoZSBzZXQgYXJlIHdhdGNoYWJsZSB0aGVuIHdlIGp1c3Qgc2V0IHRoZSBjbG9i
YmVyZWQgYml0IHRvIGFkZCB0aGUgInBsdXMKKyAgICAgICAgICBhbGwgcG9zc2libGUgc3RydWN0
dXJlcyB0ZW1wb3JhcmlseSIgdGhpbmcuIFRoaXMgcHJlY2lzZWx5IHRyYWNrcyB0aGUgZXhhY3Qg
bWVhbmluZyBvZgorICAgICAgICAgIHdhdGNoYWJpbGl0eSBhbmQgaW52YWxpZGF0aW9uIHBvaW50
cy4KKyAgICAgICAgCisgICAgICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHA6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpjb3B5RnJvbSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6U3RydWN0dXJlU2V0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU2V0OjpnZW5lcmljRmlsdGVyKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpDb250YWluc091dE9mTGluZTo6Q29udGFpbnNPdXRPZkxpbmUpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2V0OjpkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldEVtcHR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U2V0OjpnZXRSZXNlcnZlZEZsYWcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldFJl
c2VydmVkRmxhZyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Ym9vbGVhblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OnZlcmlmeUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNl
cnZlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRp
b25zKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzaG91bGRCZUNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Ojpub3JtYWxpemVDbGFyaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3Nl
cnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5o
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpUcmFu
c2l0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OlRyYW5z
aXRpb25PYnNlcnZlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6VHJhbnNpdGlvbnNPYnNlcnZlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNIZWFwVG9wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjptZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Omhhc0Nsb2JiZXJhYmxlU3Rh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VUb3ApOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmJlc3RQcm92ZW5TdHJ1Y3R1cmUpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlN
b2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tDRkEpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c3RhcnRDcmFzaGluZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6aXNDcmFzaGluZyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5o
OgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToK
KyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAgIChKU0M6OkRGRzo6V2F0
Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0OjpXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNo
cG9pbnRTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6aXNTdGlsbFZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpzaG91bGRBc3N1bWVNaXhlZFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
Ojppc1ZhbGlkT3JNaXhlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjppc1N0aWxsVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRl
c2lyZWRXYXRjaHBvaW50czo6c2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1ZhbGlkT3JNaXhlZCk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6fkdyYXBoKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldEZvbGRh
YmxlVmlldyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YTo6U3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNz
ZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
YnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpj
b250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
dmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVt
cEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRj
aGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZl
SW52YWxpZGF0aW9uUG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
aXNDbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzTmVpdGhl
ckNsZWFyTm9yVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojppc0Nsb2JiZXJlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ubHlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJz
ZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRv
cFdoZW5UaGluKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpz
ZXRDbG9iYmVyZWQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om1ha2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZp
bHRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6aXNDbGVhck9yVG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpsYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1ZhbGlkT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpoYXNT
aW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6dG9wVmFsdWUpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdUcmFuc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6VHJhbnNpdGlvbjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6VHJh
bnNpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1RyYW5zaXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6VHJhbnNpdGlvbjo6VHJhbnNpdGlvbik6CisgICAgICAgICogZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFu
dEFycmF5Q2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gp
OgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6
CisgICAgICAgICogZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDogQWRk
ZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6aGFuZGxlRWRnZSk6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2Fu
Q29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAg
ICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVQdXRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0ZXJtaW5hdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNhbGxDaGVj
ayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoV1RGOjpqc2NFeGl0KToKKyAgICAg
ICAgKGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHByaW50VXNhZ2VT
dGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0dXJlLWNvbnRyYWRpY3Rpb24uanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZnRsLWdldG15
YXJndW1lbnRzbGVuZ3RoLWlubGluZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRpb25z
LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChGb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwog
MjAxNC0wNS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtm
dGxvcHRdIERGRzo6Y2xvYmJlcml6ZSBzaG91bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMgb2Yg
R0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2OTIw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTkyLDkgKzE5MiwxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmNwcAorICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAogICAgIGRm
Zy9ERkdUaHJlYWREYXRhLmNwcAogICAgIGRmZy9ERkdUaHVua3MuY3BwCiAgICAgZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1RyYW5zaXRpb24uY3BwCiAg
ICAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VzZUtpbmQuY3BwCkBAIC0yMDUsNiArMjA3LDcgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHVmFyaWFibGVFdmVudC5jcHAK
ICAgICBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKICAgICBkZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdXb3JrbGlzdC5jcHAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw2ICs5MywxNSBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgewogCitOT19SRVRVUk5fV0lUSF9WQUxVRSBzdGF0aWMgdm9pZCBqc2NFeGl0KGludCBzdGF0
dXMpCit7CisgICAgaWYgKERGRzo6aXNDcmFzaGluZygpKSB7CisgICAgICAgIGZvciAoOzspCisg
ICAgICAgICAgICBwYXVzZSgpOworICAgIH0KKyAgICBleGl0KHN0YXR1cyk7Cit9CisKIGNsYXNz
IEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXI7CiBjbGFzcyBNYXN1cWVyYWRlcjsK
QEAgLTg4NSw3ICs4OTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
VHJhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0
ZSopCiB7Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNT
KTsKIAogI2lmIENPTVBJTEVSKE1TVkMpICYmIE9TKFdJTkNFKQogICAgIC8vIFdpdGhvdXQgdGhp
cywgVmlzdWFsIFN0dWRpbyB3aWxsIGNvbXBsYWluIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3Qg
cmV0dXJuIGEgdmFsdWUuCkBAIC0xMDEyLDcgKzEwMjEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgZWNvcmVfc2h1dGRvd24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJu
IHJlczsKKyAgICBqc2NFeGl0KHJlcyk7CiB9CiAKIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRz
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyaXB0
cywgYm9vbCBkdW1wKQpAQCAtMTE1Niw3ICsxMTY1LDcgQEAgc3RhdGljIE5PX1JFVFVSTiB2b2lk
IHByaW50VXNhZ2VTdGF0ZW1lbgogICAgIGZwcmludGYoc3RkZXJyLCAiICAtLTxqc2MgVk0gb3B0
aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZNIG9wdGlvblxuIik7CiAgICAg
ZnByaW50ZihzdGRlcnIsICJcbiIpOwogCi0gICAgZXhpdChoZWxwID8gRVhJVF9TVUNDRVNTIDog
RVhJVF9GQUlMVVJFKTsKKyAgICBqc2NFeGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZB
SUxVUkUpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCkBAIC0xMjQ1LDcgKzEyNTQsNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnCiAgICAgaWYgKG5lZWRUb0R1bXBPcHRpb25zKQogICAgICAgICBK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CiAgICAgaWYgKG5lZWRUb0V4aXQp
Ci0gICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAgICAganNjRXhpdChFWElUX1NVQ0NF
U1MpOwogfQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMSArNDQzLDEzIEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVGhyZWFkRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHVHJhbnNpdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVW5pZmljYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAiIC8+CkBAIC00NTksNiArNDYxLDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1dvcmtsaXN0LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+CkBAIC0x
MDI1LDYgKzEwMjgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUcmFuc2l0
aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZp
Y2F0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdVc2VL
aW5kLmgiIC8+CkBAIC0xMDM3LDYgKzEwNDEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdWYXJpYWRpY0Z1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdX
b3JrbGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERp
c2Fzc2VtYmxlci5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNiArMzUzLDcgQEAK
IAkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYz
OUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRCMEMxMTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5jaERp
cmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAxODQ5QTNCRTAw
RjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwICovOyB9OwogCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGlu
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhG
MkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi87IH07CiAJCTBGOEYyQjk2MTcy
RTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOEYyQjk5
MTcyRjA0RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTcxNzJGMDRGRDAwN0RC
REE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi87IH07CkBAIC00OTUsNiArNDk2LDgg
QEAKIAkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUREMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi87IH07CiAJCTBGQ0VGQUUwMTgwNzM4QzAwMDQ3
MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEMkQ0RkUxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEMkQ0RkMxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuY3BwICovOyB9OworCQkwRkQyRDRGRjE5MkZFRTU4MDBBMTc4QkYg
LyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8q
IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9Owog
CQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsK
QEAgLTUyOCw2ICs1MzEsOCBAQAogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAv
KiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAq
LzsgfTsKKwkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTk1Rjc5
MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uY3BwICovOyB9OwpAQCAtMjE2MCw2ICsyMTY1LDcgQEAKIAkJMEY4MzM1
QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJh
bmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JyYW5j
aERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVV
c2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVVc2VEZWYu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0
IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBkZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMTMsNiArMjMxOSw4IEBACiAJCTBGQ0VGQUREMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExMb2NhdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRM
TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG9jYXRpb24u
aDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZH
RHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQw
RTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxp
bmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIzNDgsNiArMjM1Niw4IEBACiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1
NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1RyYW5zaXRpb24uY3BwOyBwYXRoID0g
ZGZnL0RGR1RyYW5zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU3
MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUz
NEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERhdGFTZWN0aW9uLmNwcDsgcGF0aCA9IGZ0
bC9GVExEYXRhU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODA2
LDYgKzQ4MTYsNyBAQAogCQkJCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDMjBDQjQxODUyRTJDNjAw
QzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjg5M0JEQTE5
MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCiAJCQkJ
MEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAq
LywKIAkJCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8s
CiAJCQkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCAqLywKQEAg
LTQ4MTcsNiArNDgyOCw4IEBACiAJCQkJMEZEOEEzMjIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJMEZEOEEzMjMxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwICovLAogCQkJCTBGRDhBMzI0MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCisJCQkJMEZFNzIxMUIxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovLAorCQkJCTBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8sCiAJCQkJMEY2Mzk0M0MxNUM3NUYxNDAw
NkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJ
MEZCRTBGNkYxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLApA
QCAtNDgzOCw2ICs0ODUxLDggQEAKIAkJCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZH
VmFyaWFibGVFdmVudFN0cmVhbS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAq
LywKKwkJCQkwRkQyRDRGQzE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzQjE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJ
MEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2Uu
aCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICov
LApAQCAtNTc3Niw2ICs1NzkxLDcgQEAKIAkJCQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyog
RlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEw
QTIzMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUz
MUZCIC8qIEZUTERhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUM5MjJCQzE4QTE2
MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAg
LTU4MTcsNiArNTgzMyw3IEBACiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVu
d2luZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAw
N0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU3MjEx
RTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5o
IGluIEhlYWRlcnMgKi8sCkBAIC02OTU2LDYgKzY5NzMsNyBAQAogCQkJCTBGRjBGMTk5MTZCNzI5
RjYwMDVERjk1QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzY3QjVCNTE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQyRDRGRTE5MkZFRTU4MDBBMTc4
QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2Rl
RmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTg0LDYgKzcwMDIsNyBAQAogCQkJCTBGQzIw
Q0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUNDRjNERTE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1
NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzE3NCw2ICs3MTkzLDcgQEAKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyog
SlNQcm9maWxlclByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJE
MzAwN0NCNjNBIC8qIEpTUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3
QkVFMjQwMDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpT
UHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMDA4Q0QyMTg2RjhBOTMw
MDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mx
ODRFMUUxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTZXQuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBT
dHJ1Y3R1cmVTZXQmIFN0cnVjdHVyZVNldDo6b3BlcmF0b3I9KGNvCiB2b2lkIFN0cnVjdHVyZVNl
dDo6Y2xlYXIoKQogewogICAgIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAg
IHNldCgwLCB0cnVlKTsKKyAgICBzZXRFbXB0eSgpOwogfQogCiBib29sIFN0cnVjdHVyZVNldDo6
YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFN0cnVjdHVy
ZVNldDo6cmVtb3ZlKFN0cnVjdHVyZSogc3RyCiB7CiAgICAgaWYgKGlzVGhpbigpKSB7CiAgICAg
ICAgIGlmIChzaW5nbGVTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHNl
dCgwLCB0cnVlKTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBA
IGJvb2wgU3RydWN0dXJlU2V0OjpyZW1vdmUoU3RydWN0dXJlKiBzdHIKICAgICAgICAgbGlzdC0+
bGlzdCgpW2ldID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwogICAgICAgICBpZiAo
IWxpc3QtPm1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxp
c3QpOwotICAgICAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICAgICAgc2V0RW1wdHkoKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNDQsMjMgKzE0NCw4
IEBAIHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5n
bGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmNv
bnRhaW5zT3V0T2ZMaW5lKHNpbmdsZVN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBPdXRP
ZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChvdGhlci5jb250YWlu
c091dE9mTGluZShsaXN0LT5saXN0KClbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGxpc3QtPmxpc3QoKVtpLS1dID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwot
ICAgIH0KLSAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKQotICAgICAgICBjbGVhcigpOworICAgIENv
bnRhaW5zT3V0T2ZMaW5lIGNvbnRhaW5zT3V0T2ZMaW5lKG90aGVyKTsKKyAgICBnZW5lcmljRmls
dGVyKGNvbnRhaW5zT3V0T2ZMaW5lKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmV4Y2x1ZGUo
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKQEAgLTMyMyw4ICszMDgsMTAgQEAgYm9vbCBTdHJ1
Y3R1cmVTZXQ6OmNvbnRhaW5zT3V0T2ZMaW5lKFN0cgogCiB2b2lkIFN0cnVjdHVyZVNldDo6Y29w
eUZyb20oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKIHsKLSAgICBpZiAob3RoZXIuaXNUaGlu
KCkpIHsKKyAgICBpZiAob3RoZXIuaXNUaGluKCkgfHwgb3RoZXIubV9wb2ludGVyID09IHJlc2Vy
dmVkVmFsdWUpIHsKKyAgICAgICAgYm9vbCB2YWx1ZSA9IGdldFJlc2VydmVkRmxhZygpOwogICAg
ICAgICBtX3BvaW50ZXIgPSBvdGhlci5tX3BvaW50ZXI7CisgICAgICAgIHNldFJlc2VydmVkRmxh
Zyh2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNjkyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDExICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNw
YWNlIERGRyB7CitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfQorCiBjbGFzcyBTdHJ1
Y3R1cmVTZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpCiAgICAgewotICAgICAgICBz
ZXQoMCwgdHJ1ZSk7CisgICAgICAgIHNldEVtcHR5KCk7CiAgICAgfQogICAgIAogICAgIFN0cnVj
dHVyZVNldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTY3LDcgKzcxLDEwIEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
VGhpbigpICYmICFzaW5nbGVTdHJ1Y3R1cmUoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBpc1Ro
aW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICBBU1NFUlQobV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAKICAgICBib29sIGFkZChTdHJ1Y3R1cmUqKTsKQEAgLTc4LDYg
Kzg1LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFz
aW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBp
ZiAoZnVuY3RvcihzaW5nbGVTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVst
LWxpc3QtPm1fbGVuZ3RoXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3Ro
KQorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBpc1N1YnNldE9m
KGNvbnN0IFN0cnVjdHVyZVNldCYpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewpAQCAtMTI0LDE1ICsxNTMsMzMgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworICAgIAog
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IGZsYWdzID0gMzsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZsYWcg
fCByZXNlcnZlZEZsYWc7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVl
ID0gNDsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0g
NDsKICAgICAKICAgICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNv
bnRhaW5zT3V0T2ZMaW5lKFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIGNsYXNzIENvbnRh
aW5zT3V0T2ZMaW5lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFp
bnNPdXRPZkxpbmUoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgbV9zZXQ7CisgICAgfTsKKwogICAgIHZvaWQgY29weUZyb20o
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7CkBA
IC0xNTQsNyArMjAxLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGRlbGV0ZVN0cnVjdHVy
ZUxpc3RJZk5lY2Vzc2FyeSgpCiAgICAgewotICAgICAgICBpZiAoIWlzVGhpbigpKQorICAgICAg
ICBpZiAoIWlzVGhpbigpICYmIG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQogICAgICAgICAg
ICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShzdHJ1Y3R1cmVMaXN0KCkpOwogICAgIH0KICAgICAK
QEAgLTE4NSwxMCArMjMyLDIyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlcyksIGZhbHNlKTsKICAgICB9CisgICAgdm9pZCBz
ZXRFbXB0eSgpCisgICAgeworICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQogICAgIHZvaWQg
c2V0KHVpbnRwdHJfdCBwb2ludGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKICAgICB7CiAgICAg
ICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAw
KSB8IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOwogICAgIH0KKyAgICBib29sIGdldFJlc2Vy
dmVkRmxhZygpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZzsgfQorICAg
IHZvaWQgc2V0UmVzZXJ2ZWRGbGFnKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICBtX3BvaW50ZXIgfD0gcmVzZXJ2ZWRGbGFnOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3BvaW50ZXIgJj0gfnJlc2VydmVkRmxhZzsKKyAgICB9CiAKICAgICB1
aW50cHRyX3QgbV9wb2ludGVyOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaXQsIE5vZGUqKTsKICAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDgsNyArMTQ5LDEzIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVk
IGluZGV4SW5CbG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVP
cmlnaW4mKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgRnVuY3RvciYpOworICAgIAogICAg
IHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lk
IG9ic2VydmVUcmFuc2l0aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgU3RydWN0dXJlKiBmcm9t
LCBTdHJ1Y3R1cmUqIHRvKTsKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9ucyh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImKTsKICAgICAKICAgICBlbnVtIEJv
b2xlYW5SZXN1bHQgewogICAgICAgICBVbmtub3duQm9vbGVhblJlc3VsdCwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIs
MTEgKzYyLDE3IEBAIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAg
ICB9CiAKICAgICAvLyBOZXh0IGNoZWNrIGlmIHdlIGNhbiBmb2xkIGJlY2F1c2Ugd2Uga25vdyB0
aGF0IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0IG9yIHN0cmluZyBhbmQgZG9lcyBub3QgZXF1YWwg
dW5kZWZpbmVkLgotICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpCi0gICAg
ICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7Ci0g
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSkKLSAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gU3RyaW5n
VHlwZSkKKyAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSAmJiAhdmFsdWUu
bV9zdHJ1Y3R1cmUuaXNUb3AoKSkgeworICAgICAgICBib29sIGFsbFRydWUgPSB0cnVlOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07
CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAg
ICAgICAgICB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpIHsK
KyAgICAgICAgICAgICAgICBhbGxUcnVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbFRydWUpCiAgICAgICAg
ICAgICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQogICAgIApAQCAtMTA1LDkgKzExMSwx
OCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRnZShOb2RlKiwgRWRnZSBlZGdlKQordm9pZCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRnZShOb2RlKiBu
b2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1f
dHlwZSAmIH50eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSkpOworICAgIGlmICghKGZvck5v
ZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKKyAgICBkYXRhTG9nKCJFZGdl
IHZlcmlmaWNhdGlvbiBlcnJvcjogIiwgbm9kZSwgIi0+IiwgZWRnZSwgIiB3YXMgZXhwZWN0ZWQg
dG8gaGF2ZSB0eXBlICIsIFNwZWN1bGF0aW9uRHVtcCh0eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2lu
ZCgpKSksICIgYnV0IGhhcyB0eXBlICIsIFNwZWN1bGF0aW9uRHVtcChmb3JOb2RlKGVkZ2UpLm1f
dHlwZSksICJcbiIpOworICAgIGRhdGFMb2coIiAgICBGdWxsIHZhbHVlOiAiLCBmb3JOb2RlKGVk
Z2UpLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIkdyYXBoIGF0IHRp
bWUgb2YgZmFpbHVyZTpcbiIpOworICAgIG1fZ3JhcGguZHVtcCgpOworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVU
eXBlPgpAQCAtMTQ1Niw3ICsxNDcxLDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChp
c0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewotICAgICAg
ICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
YmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHVzZSBvZiBvbmx5
U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBHZXRCeUlkU3RhdHVzIHRo
ZSBhYmlsaXR5CisgICAgICAgICAgICAvLyB0byBjb21wdXRlIHRoaW5ncyBiYXNlZCBvbiBhIFN0
cnVjdHVyZVNldCwgYW5kIHRoZW4gdG8gZmFjdG9yIEJ5dGVDb2RlUGFyc2VyJ3MKKyAgICAgICAg
ICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIEdldEJ5SWRTdGF0dXMg
b3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAgICAgICAgIC8vIENvbnN0YW50Rm9s
ZGluZ1BoYXNlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgICAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0
dXJlKCkpIHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5SWRT
dGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92bSwgc3Ry
dWN0dXJlLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9kZS0+
aWRlbnRpZmllck51bWJlcigpXSk7CkBAIC0xNDY2LDkgKzE0ODYsMTQgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFzdGF0dXNbMF0uY2hhaW4oKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpLmlzQ2VsbCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdGF0dXNb
MF0uc3BlY2lmaWNWYWx1ZSgpLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3Rp
bGxWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNo
cG9pbnRzKCkuYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBzZXRD
b25zdGFudChub2RlLCBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICAgICAg
ZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkpOwogICAgICAg
ICAgICAgICAgICAgICAKQEAgLTE1MDIsOCArMTUyNywxMiBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5T
cGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQg
dGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgp
OwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9m
KHNldCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgaW50ZXJlc3RpbmcgdGhhdCB3ZSBj
b3VsZCBoYXZlIHByb3ZlbiB0aGF0IHRoZSBvYmplY3QgaGFzIGEgbGFyZ2VyIHN0cnVjdHVyZSBz
ZXQKKyAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIEluIHRo
YXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hlY2sKKyAgICAgICAgLy8gbW9y
ZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KKyAgICAgICAgCisgICAgICAgIGlmICh2
YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAgICAgIG1fc3RhdGUu
c2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpA
QCAtMTUxMSwzNCArMTU0MCwxNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIG1fc3RhdGUu
c2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAKLSAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUg
Y2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCi0g
ICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3Rh
bnQgZm9sZGluZyBwaGFzZSBzaG91bGQKLSAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRj
aHBvaW50IGluc3RlYWQuCi0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgJiYgdmFsdWUubV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwgdmFsdWUubV9mdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7
Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7
Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1f
c3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgICAgIAogICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgaWYgKCFm
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkp
IHsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAg
ICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBpZiAoIWZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgeworICAgICAgICAgICAgb2JzZXJ2
ZVRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgY2xvYmJlckxpbWl0LCBub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnRyYW5zaXRpb24oKS0+
bmV4dCk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTYxNiwxMyArMTYyNywzOSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3RydWN0dXJl
KCk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0
T2Yoc2V0KQotICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNT
dWJzZXRPZihzZXQpKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihT
dHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSkKICAgICAgICAgICAgIG1fc3RhdGUuc2V0
Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAg
ICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZpbHRlcih2
YWx1ZSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGhhdmUgYSBidW5jaCBvZiBvcHRp
b25zIG9mIGhvdyB0byBleHByZXNzIHRoZSBhYnN0cmFjdCBzZXQgYXQgdGhpcyBwb2ludC4gTGV0
IHNldCBTCisgICAgICAgIC8vIGJlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0aGF0IHRoZSB2YWx1
ZSBoYWQgYmVmb3JlIGNsb2JiZXJpbmcgYW5kIGFzc3VtZSB0aGF0IGFsbCBvZgorICAgICAgICAv
LyB0aGVtIGFyZSB3YXRjaGFibGUuIFRoZSBuZXcgdmFsdWUgc2hvdWxkIGJlIHRoZSBsZWFzdCBl
eHByZXNzaWJsZSB1cHBlciBib3VuZCBvZiB0aGUKKyAgICAgICAgLy8gaW50ZXJzZWN0aW9uIG9m
ICJ2YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUo
KSIgYW5kICJ2YWx1ZXMKKyAgICAgICAgLy8gdGhhdCBoYXZlIHN0cnVjdHVyZSBpbiBTIHBsdXMg
YW55IHN0cnVjdHVyZSB0cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9tIFMiLiBBc3N1bWUgdGhhdAor
ICAgICAgICAvLyBub2RlLT5zdHJ1Y3R1cmUoKSBpcyBub3QgaW4gUyBidXQgaXQgaXMgdHJhbnNp
dGlvbi1yZWFjaGFibGUgZnJvbSBTLiBUaGVuIHdlIHdvdWxkCisgICAgICAgIC8vIGxpa2UgdG8g
c2F5IHRoYXQgdGhlIHJlc3VsdCBpcyAidmFsdWVzIHRoYXQgaGF2ZSBzdHJ1Y3R1cmUgPSBub2Rl
LT5zdHJ1Y3R1cmUoKSB1bnRpbAorICAgICAgICAvLyB3ZSBpbnZhbGlkYXRlIiwgYnV0IHRoZXJl
IGlzIG5vIHdheSB0byBleHByZXNzIHRoaXMgdXNpbmcgdGhlIEFic3RyYWN0VmFsdWUgc3ludGF4
LiBTbworICAgICAgICAvLyB3ZSBtdXN0IGNob29zZSBiZXR3ZWVuOgorICAgICAgICAvLworICAg
ICAgICAvLyAxKSAidmFsdWVzIHRoYXQgY3VycmVudGx5IGhhdmUgc3RydWN0dXJlID0gbm9kZS0+
c3RydWN0dXJlKCkiLiBUaGlzIGlzIGEgdmFsaWQKKyAgICAgICAgLy8gICAgc3VwZXJzZXQgb2Yg
dGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdhbnQsIGFuZCBpdCdzIHNwZWNpZmljIGVub3VnaCB0
byBzYXRpc2Z5IHRoZQorICAgICAgICAvLyAgICBwcmVjb25kaXRpb25zIG9mIHRoZSBhcnJheSBh
Y2Nlc3MgdGhhdCB0aGlzIGlzIGd1YXJkaW5nLiBJdCdzIGFsc28gc3BlY2lmaWMgZW5vdWdoCisg
ICAgICAgIC8vICAgIHRvIGFsbG93IHJlbGV2YW50IG9wdGltaXphdGlvbnMgaW4gdGhlIGNhc2Ug
dGhhdCB3ZSBkaWRuJ3QgaGF2ZSBhIGNvbnRyYWRpY3Rpb24KKyAgICAgICAgLy8gICAgbGlrZSBp
biB0aGlzIGV4YW1wbGUuIE5vdGljZSB0aGF0IGluIHRoZSBhYnNjZW5jZSBvZiBhbnkgY29udHJh
ZGljdGlvbiwgdGhpcyByZXN1bHQKKyAgICAgICAgLy8gICAgaXMgcHJlY2lzZSByYXRoZXIgdGhh
biBiZWluZyBhIGNvbnNlcnZhdGl2ZSBMVUIuCisgICAgICAgIC8vCisgICAgICAgIC8vIDIpICJ2
YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2YSBzdHJ1Y3R1cmUgaW4gUyBwbHVzIGFueSBzdHJ1Y3R1
cmUgdHJhbnNpdGlvbi1yZWFjaGFibGUKKyAgICAgICAgLy8gICAgZnJvbSBTIi4gVGhpcyBpcyBh
bHNvIGEgdmFsaWQgc3VwZXJzZXQgb2YgdGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdhbnQsIGJ1
dCBpdCdzCisgICAgICAgIC8vICAgIG5vdCBzcGVjaWZpYyBlbm91Z2ggdG8gc2F0aXNmeSB0aGUg
cHJlY29uZGl0aW9ucyBvZiB0aGUgYXJyYXkgYWNjZXNzIHRoYXQgdGhpcyBpcworICAgICAgICAv
LyAgICBndWFyZGluZyAtIHNvIHBsYXlpbmcgc3VjaCBzaGVuYW5pZ2FucyB3b3VsZCBwcmVjbHVk
ZSB1cyBmcm9tIGhhdmluZyBhc3NlcnRpb25zIG9uCisgICAgICAgIC8vICAgIHRoZSB0eXBpbmcg
cHJlY29uZGl0aW9ucyBvZiBhbnkgYXJyYXkgYWNjZXNzZXMuIFRoaXMgd291bGQgYWxzbyBub3Qg
YmUgYSBkZXNpcmFibGUKKyAgICAgICAgLy8gICAgYW5zd2VyIGluIHRoZSBhYnNlbmNlIG9mIGEg
Y29udHJhZGljdGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgdGVt
cHRpbmcgdG8gc2ltcGx5IHNheSB0aGF0IHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgQk9UVE9NIGJl
Y2F1c2Ugb2YKKyAgICAgICAgLy8gdGhlIGNvbnRyYWRpY3Rpb24uIFRoYXQgd291bGQgYmUgd3Jv
bmcsIHNpbmNlIHdlIGhhdmVuJ3QgaGl0IGFuIGludmFsaWRhdGlvbiBwb2ludCwKKyAgICAgICAg
Ly8geWV0LgorICAgICAgICB2YWx1ZS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwog
ICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0xNjUxLDcgKzE2ODgsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwp
KTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAK
LSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVj
dHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNh
c2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBhbGwKKyAgICAgICAg
Ly8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVuIHdlIHNob3VsZCBzdHJlbmd0aCBy
ZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCisgICAgICAgIC8vIEdldEJ5T2Zmc2V0Lgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5
CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlLm9u
bHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFsc2U7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdldEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKQEAg
LTE2NzcsNiArMTcxOCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgCiAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc2V0KTsKICAgICAg
ICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtX3N0YXRlLnNldEhhdmVT
dHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgICAgICAKQEAg
LTE2ODgsNyArMTczMCwxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdl
IGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4KIAotICAgICAgICBp
ZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsK
KyAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0ZXIgZG93biB0aGUgY2FzZXMgaW4gTXVs
dGlQdXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGluIGVpdGhlcgorICAgICAgICAvLyBvbmUg
Y2FzZSwgb3Igbm90aGluZyBidXQgcmVwbGFjZSBjYXNlcyBhbmQgdGhleSBoYXZlIHRoZSBzYW1l
IG9mZnNldCwgdGhlbiB3ZSBzaG91bGQKKyAgICAgICAgLy8ganVzdCBzdHJlbmd0aCByZWR1Y2Ug
aXQgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9mIENoZWNrU3RydWN0dXJlLAorICAg
ICAgICAvLyBbUmVdQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIFB1dFN0cnVjdHVyZSwgYW5kIFB1
dEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1f
c3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFs
c2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IFB1
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50c1tpXTsKQEAgLTE3MTUsMjUgKzE3NjIsMjUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIAotICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwotICAgICAgICAK
KyAgICAgICAgU3RydWN0dXJlU2V0IG9sZFNldDsKICAgICAgICAgU3RydWN0dXJlU2V0IG5ld1Nl
dDsKKyAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7
IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgIGlmICh2
YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewotICAgICAgICAgICAg
ICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyh2YXJpYW50LnN0
cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2YXJpYW50LnN0cnVj
dHVyZSgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlv
bik7Ci0gICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFp
bnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICBvbGRTZXQuYWRkKHZhcmlh
bnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbnMu
YXBwZW5kKFRyYW5zaXRpb24odmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJp
YW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAgICAgICAgICAgICAg
bmV3U2V0LmFkZCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKLSAgICAgICAgLy8gVXNlIGZpbHRlcih2YWx1ZSwgc2V0KSBhcyBhIHdh
eSBvZiBzZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlzIHdvcmtzIGJlY2F1c2UKLSAgICAg
ICAgLy8gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIHNldCBiZSBUT1AgYmVmb3JlIHRo
aXMuIEZpbHRlcmluZyB0b3AgaXMgYW5vdGhlciAKLSAgICAgICAgLy8gd2F5IG9mIHNldHRpbmcu
Ci0gICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3U2V0KTsKKyAgICAgICAgZmlsdGVy
KG5vZGUtPmNoaWxkMSgpLCBvbGRTZXQpOworICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1
cmVzKHRydWUpOworICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFu
c2l0aW9ucyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBu
ZXdTZXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC0xNzY3LDcgKzE4MTQsMTIg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0
QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAgbm9kZS0+c2V0Q2Fu
RXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMg
dXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIFB1dEJ5
SWRTdGF0dXMgdGhlIGFiaWxpdHkKKyAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQg
b24gYSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29kZVBhcnNlcidzCisg
ICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIFB1dEJ5SWRTdGF0
dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAgICAgLy8gQ29uc3RhbnRGb2xk
aW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsK
ICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sCiAgICAgICAgICAgICAgICAgbV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwKQEAgLTE3ODEsNyAr
MTgzMywxMCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoc3RhdHVzWzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uCisgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxW
YWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFk
ZExhemlseShzdGF0dXNbMF0ubmV3U3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQp
OwogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFw
aCwgc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0
ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKQEAgLTE4NTUsNiArMTkxMCw3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBJbnZh
bGlkYXRpb25Qb2ludDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAgICAg
Zm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRh
dGlvblBvaW50Rm9yKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNrV2F0Y2hkb2dU
aW1lcjoKQEAgLTE5NTcsMzIgKzIwMTMsNjcgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4K
LXZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1
Y3R1cmVzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1
ZXMoCisgICAgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAg
IGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQotICAgICAgICByZXR1cm47CiAgICAgaWYg
KGNsb2JiZXJMaW1pdCA+PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSkKICAgICAgICAgY2xvYmJl
ckxpbWl0ID0gbV9zdGF0ZS5ibG9jaygpLT5zaXplKCk7CiAgICAgZWxzZQogICAgICAgICBjbG9i
YmVyTGltaXQrKzsKICAgICBBU1NFUlQoY2xvYmJlckxpbWl0IDw9IG1fc3RhdGUuYmxvY2soKS0+
c2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBpLS07KQotICAgICAg
ICBmb3JOb2RlKG1fc3RhdGUuYmxvY2soKS0+YXQoaSkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Cisg
ICAgICAgIGZ1bmN0b3IoZm9yTm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKSk7CiAgICAgaWYg
KG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0
b3IgaXRlciA9IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkLmJlZ2luKCk7CiAgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+
bGl2ZUF0SGVhZC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0g
ICAgICAgICAgICBmb3JOb2RlKCppdGVyKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICAg
ICAgZnVuY3Rvcihmb3JOb2RlKCppdGVyKSk7CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSBt
X3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9mQXJndW1lbnRzKCk7IGktLTspCi0gICAgICAgIG1f
c3RhdGUudmFyaWFibGVzKCkuYXJndW1lbnQoaSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAg
ICAgZnVuY3RvcihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpKTsKICAgICBmb3IgKHNp
emVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkxvY2FscygpOyBpLS07KQotICAg
ICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmxvY2FsKGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7Ci0g
ICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgZnVuY3RvcihtX3N0
YXRlLnZhcmlhYmxlcygpLmxvY2FsKGkpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJh
Y3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9iYmVyTGltaXQpCit7CisgICAgaWYgKCFt
X3N0YXRlLmhhdmVTdHJ1Y3R1cmVzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3JBbGxWYWx1
ZXMoY2xvYmJlckxpbWl0LCBBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlc0Zvcik7Cisg
ICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBB
YnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46Om9ic2VydmVUcmFuc2l0aW9uKAorICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgU3Ry
dWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKQoreworICAgIGlmICghbV9zdGF0ZS5oYXZlU3Ry
dWN0dXJlcygpKQorICAgICAgICByZXR1cm47CisgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlv
bk9ic2VydmVyIHRyYW5zaXRpb25PYnNlcnZlcihmcm9tLCB0byk7CisgICAgZm9yQWxsVmFsdWVz
KGNsb2JiZXJMaW1pdCwgdHJhbnNpdGlvbk9ic2VydmVyKTsKKyAgICBtX3N0YXRlLnNldERpZENs
b2JiZXIodHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgor
dm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5z
aXRpb25zKAorICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgY29uc3QgVHJhbnNpdGlvblZlY3Rv
ciYgdmVjdG9yKQoreworICAgIGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQorICAgICAg
ICByZXR1cm47CisgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlciB0cmFuc2l0
aW9uc09ic2VydmVyKHZlY3Rvcik7CisgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgdHJh
bnNpdGlvbnNPYnNlcnZlcik7CiAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBjb25zdF9jYXN0PEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+
Kj4odGhpcyktPmR1bXAob3V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0
ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJKHJl
dmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE2ICszMywzMCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5z
aXRpb25zKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZlY3RvcikKK3sKKyAgICBpZiAobV90eXBl
ICYgU3BlY0NlbGwpIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb25zKHZl
Y3Rvcik7CisgICAgICAgIEFycmF5TW9kZXMgbmV3TW9kZXMgPSAwOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9hcnJh
eU1vZGVzICYgYXNBcnJheU1vZGVzKHZlY3RvcltpXS5wcmV2aW91cy0+aW5kZXhpbmdUeXBlKCkp
KQorICAgICAgICAgICAgICAgIG5ld01vZGVzIHw9IGFzQXJyYXlNb2Rlcyh2ZWN0b3JbaV0ubmV4
dC0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIG1fYXJyYXlNb2RlcyB8PSBu
ZXdNb2RlczsKKyAgICB9CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworfQorCiB2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwaCYgZ3JhcGgsIEpTVmFsdWUgdmFsdWUpCiB7
CiAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIG1fY3Vy
cmVudEtub3duU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBzZXRGdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZShncmFwaCwgc3RydWN0dXJlKTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJh
bnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIGdyYXBoLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSk7CisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9k
ZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVh
cigpOwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAgICAgCkBAIC01MCwx
OSArNjQsMjUgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAg
IG1fdmFsdWUgPSB2YWx1ZTsKICAgICAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAg
IGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdy
YXBoJiBncmFwaCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5p
c0NlbGwoKSkgewotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Cisg
ICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKGdyYXBoLCBzdHJ1Y3R1cmUpOworICAgICAgICBpZiAoc3RydWN0dXJlLT50
cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAvLyBX
ZSBzaG91bGQgYmUgYWJsZSB0byBhc3N1bWUgdGhhdCB0aGUgd2F0Y2hwb2ludCBmb3IgdGhpcyBo
YXMgYWxyZWFkeSBiZWVuIHNldC4KKyAgICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4ndCBiZWNhdXNl
IG91ciB2aWV3IG9mIHdoYXQgc3RydWN0dXJlIGEgdmFsdWUgaGFzIGtlZXBzIGNoYW5naW5nLgor
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
MzQyNgorICAgICAgICAgICAgZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
c3RydWN0dXJlOworICAgICAgICB9CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2Rl
cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgY2xvYmJlckFycmF5TW9kZXMo
KTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigp
OwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
c3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAg
IApAQCAtNzAsMTcgKzkwLDI5IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFw
aCwgSlMKICAgICBtX3ZhbHVlID0gdmFsdWU7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6
c2V0KEdyYXBoJiBncmFwaCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAg
bV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwogICAgIG1f
dmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFz
c2VydElzV2F0Y2hlZChncmFwaCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBo
JiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgbV9zdHJ1Y3R1cmUgPSBz
ZXQ7CisgICAgbV9hcnJheU1vZGVzID0gc2V0LmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwor
ICAgIG1fdHlwZSA9IHNldC5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV92YWx1
ZSA9IEpTVmFsdWUoKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0
SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVw
cmVzZW50YXRpb24oTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uKQpAQCAtMTI5LDIxICsxNjEsMTgg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIAogICAgIG1f
dHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9hcnJheU1v
ZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwotICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVy
KTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3IgdG8gdGhlIGFib3ZlIHR3
byBzdGF0ZW1lbnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAgIC8vIEZvbyBpcyBhIFNw
ZWN1bGF0ZWRUeXBlIHRoYXQgaXMgZGlzam9pbnQgd2l0aCB0aGUgcGFzc2VkIFN0cnVjdHVyZVNl
dC4gSW4gdGhhdAogICAgIC8vIGNhc2UsIHdlIHdpbGwgbm93IGhhdmUgKE5vbmUsIFtzb21lU3Ry
dWN0dXJlXSkuIEluIGdlbmVyYWwsIHdlIG5lZWQgdG8gbWFrZQogICAgIC8vIHN1cmUgdGhhdCBu
ZXcgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlwZSBuZWVkcyB0byBi
ZSBmZWQgYmFjawogICAgIC8vIGludG8gdGhlIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0aGUg
U3RydWN0dXJlU2V0LgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUp
OworICAgIG1fc3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogICAgIAotICAgIGlmIChtX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgc2V0RnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUoZ3JhcGgsIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsK
LSAgICAgICAgCiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZhbHVl
QnlUeXBlKCk7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICByZXR1cm4gbm9y
bWFsaXplQ2xhcml0eShncmFwaCk7CiB9CiAKIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCkBAIC0xNjksOCArMTk4
LDcgQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoUwogICAgIC8vIHRo
ZSBwYXNzZWQgdHlwZSBpcyBBcnJheS4gQXQgdGhpcyBwb2ludCB3ZSdsbCBoYXZlIChOb25lLCBU
T1ApLiBUaGUgYmVzdCB3YXkKICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgc3RydWN0dXJlIGZp
bHRlcmluZyBkb2VzIHRoZSByaWdodCB0aGluZyBpcyB0byBmaWx0ZXIgb24KICAgICAvLyB0aGUg
bmV3IHR5cGUgKE5vbmUpIHJhdGhlciB0aGFuIHRoZSBvbmUgcGFzc2VkIChBcnJheSkuCi0gICAg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7Ci0gICAgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKKyAgICBtX3N0cnVjdHVyZS5maWx0ZXIodHlw
ZSk7CiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZhbHVlQnlUeXBl
KCk7CiAgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKQEAgLTE4NCwxNSArMjEyLDYgQEAg
RmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJCeQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKLXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUo
R3JhcGgmIGdyYXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLXsKLSAgICBBU1NFUlQoc3RydWN0
dXJlKTsKLSAgICBpZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoc3RydWN0dXJl
LT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICBlbHNlCi0gICAgICAgIG1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUubWFrZVRvcCgpOwotfQotCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpbHRlclZhbHVl
QnlUeXBlKCkKIHsKICAgICAvLyBXZSBjb3VsZCBnbyBmdXJ0aGVyLCBhbmQgZW5zdXJlIHRoYXQg
aWYgdGhlIGZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGNvbnRyYXZlbmVzCkBAIC0yMzgsOCArMjU3
LDcgQEAgYm9vbCBBYnN0cmFjdFZhbHVlOjpzaG91bGRCZUNsZWFyKCkgY29ucwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAKICAgICBpZiAoIShtX3R5cGUgJiB+U3BlY0NlbGwpCi0gICAgICAg
ICYmICghbV9hcnJheU1vZGVzCi0gICAgICAgICAgICB8fCBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc0NsZWFyKCkpKQorICAgICAgICAmJiAoIW1fYXJyYXlNb2RlcyB8fCBtX3N0cnVjdHVyZS5p
c0NsZWFyKCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yNjMsMTIgKzI4MSwxOCBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6Om5v
cm1hbGl6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFj
dFZhbHVlOjpub3JtYWxpemVDbGFyaXR5KEdyYXBoJiBncmFwaCkKK3sKKyAgICBGaWx0cmF0aW9u
UmVzdWx0IHJlc3VsdCA9IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQo
Z3JhcGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKICNpZiAhQVNTRVJUX0RJU0FCTEVECiB2
b2lkIEFic3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3koKSBjb25zdAogewogICAgIGlmICgh
KG1fdHlwZSAmIFNwZWNDZWxsKSkgewotICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaXNDbGVhcigpKTsKLSAgICAgICAgQVNTRVJUKG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNDbGVhcigpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAg
ICAgICAgIEFTU0VSVCghbV9hcnJheU1vZGVzKTsKICAgICB9CiAgICAgCkBAIC0yODksNiArMzEz
LDExIEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGMKICAgICAvLyB3
ZSBkb24ndCB3YW50IHRvIGdldCBwZWRhbnRpYyBhYm91dCB0aGlzIGFzIGl0IHdvdWxkIG9ubHkg
aW5jcmVhc2UgdGhlIGNvbXB1dGF0aW9uYWwKICAgICAvLyBjb21wbGV4aXR5IG9mIHRoZSBjb2Rl
LgogfQorCit2b2lkIEFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZChHcmFwaCYgZ3JhcGgp
IGNvbnN0Cit7CisgICAgbV9zdHJ1Y3R1cmUuYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKK30KICNl
bmRpZgogCiB2b2lkIEFic3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
QEAgLTMwMiw4ICszMzEsNyBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJp
bnRTCiAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CiAgICAgICAgIG91dC5wcmludCgKICAg
ICAgICAgICAgICIsICIsIEFycmF5TW9kZXNEdW1wKG1fYXJyYXlNb2RlcyksICIsICIsCi0gICAg
ICAgICAgICBpbkNvbnRleHQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUsIGNvbnRleHQpLCAiLCAi
LAotICAgICAgICAgICAgaW5Db250ZXh0KG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUsIGNvbnRl
eHQpKTsKKyAgICAgICAgICAgIGluQ29udGV4dChtX3N0cnVjdHVyZSwgY29udGV4dCkpOwogICAg
IH0KICAgICBpZiAoISFtX3ZhbHVlKQogICAgICAgICBvdXQucHJpbnQoIiwgIiwgaW5Db250ZXh0
KG1fdmFsdWUsIGNvbnRleHQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsOCArNTMs
NyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICBtX3R5cGUgPSBTcGVj
Tm9uZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKLSAgICAgICAgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVh
cigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICBtX3ZhbHVlID0gSlNW
YWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtNzUsMTUgKzc0
LDc0IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVz
KCkKICAgICB7CiAgICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUuY2xvYmJlcigpOwogICAgICAgICAgICAgY2xvYmJlckFycmF5TW9kZXMoKTsKICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0Ns
ZWFyKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CiAgICAg
ICAgICAgICBBU1NFUlQoIW1fYXJyYXlNb2Rlcyk7CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwogICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjbG9iYmVyU3RydWN0
dXJlc0ZvcihBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHZhbHVlLmNsb2Ji
ZXJTdHJ1Y3R1cmVzKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50KCkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVJbnZhbGlkYXRpb25Q
b2ludCgpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcihBYnN0cmFjdFZhbHVlJiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHZhbHVlLm9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3Ry
dWN0dXJlKiB0bykKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgeworICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb24oZnJvbSwgdG8pOworICAgICAg
ICAgICAgb2JzZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRpb24oZnJvbS0+aW5kZXhpbmdUeXBlKCks
IHRvLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9ucyhjb25zdCBUcmFu
c2l0aW9uVmVjdG9yJiB2ZWN0b3IpOworICAgIAorICAgIGNsYXNzIFRyYW5zaXRpb25PYnNlcnZl
ciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFuc2l0aW9uT2JzZXJ2ZXIoU3RydWN0dXJlKiBm
cm9tLCBTdHJ1Y3R1cmUqIHRvKQorICAgICAgICAgICAgOiBtX2Zyb20oZnJvbSkKKyAgICAgICAg
ICAgICwgbV90byh0bykKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2
b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHZhbHVlLm9ic2VydmVUcmFuc2l0aW9uKG1fZnJvbSwgbV90byk7CisgICAgICAgIH0KKyAg
ICBwcml2YXRlOgorICAgICAgICBTdHJ1Y3R1cmUqIG1fZnJvbTsKKyAgICAgICAgU3RydWN0dXJl
KiBtX3RvOworICAgIH07CisgICAgCisgICAgY2xhc3MgVHJhbnNpdGlvbnNPYnNlcnZlciB7Cisg
ICAgcHVibGljOgorICAgICAgICBUcmFuc2l0aW9uc09ic2VydmVyKGNvbnN0IFRyYW5zaXRpb25W
ZWN0b3ImIHZlY3RvcikKKyAgICAgICAgICAgIDogbV92ZWN0b3IodmVjdG9yKQorICAgICAgICB7
CisgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdFZh
bHVlJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUub2JzZXJ2ZVRyYW5zaXRp
b25zKG1fdmVjdG9yKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFRy
YW5zaXRpb25WZWN0b3ImIG1fdmVjdG9yOworICAgIH07CisgICAgCiAgICAgdm9pZCBjbG9iYmVy
VmFsdWUoKQogICAgIHsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKQEAgLTkxLDcgKzE0
OSwxMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgCiAgICAgYm9vbCBpc0hlYXBUb3Ao
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0g
bV90eXBlICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzVG9wKCkgJiYgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5pc1RvcCgpOworICAgICAgICByZXR1cm4gKG1fdHlwZSB8IFNwZWNIZWFw
VG9wKSA9PSBtX3R5cGUKKyAgICAgICAgICAgICYmIG1fc3RydWN0dXJlLmlzVG9wKCkKKyAgICAg
ICAgICAgICYmIG1fYXJyYXlNb2RlcyA9PSBBTExfQVJSQVlfTU9ERVMKKyAgICAgICAgICAgICYm
ICFtX3ZhbHVlOwogICAgIH0KICAgICAKICAgICBib29sIHZhbHVlSXNUb3AoKSBjb25zdApAQCAt
MTE0LDE2ICsxNzUsMTUgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgc2V0TW9z
dFNwZWNpZmljKEdyYXBoJiwgSlNWYWx1ZSk7CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBKU1ZhbHVl
KTsKICAgICB2b2lkIHNldChHcmFwaCYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgc2V0KEdyYXBo
JiwgY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgdm9pZCBzZXRUeXBlKFNwZWN1bGF0
ZWRUeXBlIHR5cGUpCiAgICAgewogICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0
dXJlLm1ha2VUb3AoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RF
UzsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
LmNsZWFyKCk7Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9hcnJheU1v
ZGVzID0gMDsKICAgICAgICAgfQogICAgICAgICBtX3R5cGUgPSB0eXBlOwpAQCAtMTM4LDggKzE5
OCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtX3R5
cGUgPT0gb3RoZXIubV90eXBlCiAgICAgICAgICAgICAmJiBtX2FycmF5TW9kZXMgPT0gb3RoZXIu
bV9hcnJheU1vZGVzCi0gICAgICAgICAgICAmJiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9PSBv
dGhlci5tX2N1cnJlbnRLbm93blN0cnVjdHVyZQotICAgICAgICAgICAgJiYgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZSA9PSBvdGhlci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlCisgICAgICAg
ICAgICAmJiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQogICAgICAgICAgICAgJiYg
bV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC0xNjIsOCArMjIxLDcgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0IHw9
IG1lcmdlU3BlY3VsYXRpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOwogICAgICAgICAgICAgcmVz
dWx0IHw9IG1lcmdlQXJyYXlNb2RlcyhtX2FycmF5TW9kZXMsIG90aGVyLm1fYXJyYXlNb2Rlcyk7
Ci0gICAgICAgICAgICByZXN1bHQgfD0gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuYWRkQWxsKG90
aGVyLm1fY3VycmVudEtub3duU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJlc3VsdCB8PSBtX2Z1
dHVyZVBvc3NpYmxlU3RydWN0dXJlLmFkZEFsbChvdGhlci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlKTsKKyAgICAgICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5tZXJnZShvdGhlci5tX3N0
cnVjdHVyZSk7CiAgICAgICAgICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CiAg
ICAgICAgICAgICAgICAgcmVzdWx0IHw9ICEhbV92YWx1ZTsKICAgICAgICAgICAgICAgICBtX3Zh
bHVlID0gSlNWYWx1ZSgpOwpAQCAtMTc5LDggKzIzNyw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAgICAgbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIHR5cGUpOwogICAgICAgICAKICAg
ICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAg
ICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0KICAgICAgICAg
bV92YWx1ZSA9IEpTVmFsdWUoKTsKQEAgLTIyNSw3NSArMjgyLDMwIEBAIHN0cnVjdCBBYnN0cmFj
dFZhbHVlIHsKICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAg
ICAgICAgIEFTU0VSVChtX3R5cGUgJiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIHJl
dHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0gICAgICAg
ICAgICAgICAgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUp
CisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQogICAg
ICAgICAgICAgICAgICYmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBiZXN0UHJvdmVuU3RydWN0dXJlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKTsKLSAgICAgICAgaWYgKG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaGFzU2luZ2xldG9u
KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0
b24oKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaGFzQ2xvYmJl
cmFibGVTdGF0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKQorICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUuaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKQogICAgICAgICAgICAgfHwgIWFycmF5TW9kZXNBcmVD
bGVhck9yVG9wKG1fYXJyYXlNb2Rlcyk7CiAgICAgfQogICAgIAogI2lmIEFTU0VSVF9ESVNBQkxF
RAogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0IHsgfQorICAgIHZvaWQgYXNzZXJ0
SXNXYXRjaGVkKEdyYXBoJikgY29uc3QgeyB9CiAjZWxzZQogICAgIHZvaWQgY2hlY2tDb25zaXN0
ZW5jeSgpIGNvbnN0OworICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CiAj
ZW5kaWYKICAgICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29u
dGV4dCopIGNvbnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAot
ICAgIC8vIEEgZ3JlYXQgd2F5IHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kCi0gICAgLy8gbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZSBpcyB0byBjb25zaWRlciB0aGVzZSBmb3VyIGV4YW1wbGVzOgotICAgIC8vCi0gICAgLy8g
MSkgeCA9IGZvbygpOwotICAgIC8vCi0gICAgLy8gICAgSW4gdGhpcyBjYXNlIHgncyBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZSBhbmQgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsCi0gICAg
Ly8gICAgYm90aCBiZSBUT1AsIHNpbmNlIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgeCBm
b3Igc3VyZSwgeWV0LgotICAgIC8vCi0gICAgLy8gMikgeCA9IGZvbygpOwotICAgIC8vICAgIHkg
PSB4LmY7Ci0gICAgLy8KLSAgICAvLyAgICBXaGVyZSB4IHdpbGwgbGF0ZXIgaGF2ZSBhIG5ldyBw
cm9wZXJ0eSBhZGRlZCB0byBpdCwgJ2cnLiBCZWNhdXNlIG9mIHRoZQotICAgIC8vICAgIGtub3du
IGJ1dCBub3QteWV0LWV4ZWN1dGVkIHByb3BlcnR5IGFkZGl0aW9uLCB4J3MgY3VycmVudCBzdHJ1
Y3R1cmUgd2lsbAotICAgIC8vICAgIG5vdCBiZSB3YXRjaHBvaW50YWJsZTsgaGVuY2Ugd2UgaGF2
ZSBubyB3YXkgb2Ygc3RhdGljYWxseSBib3VuZGluZyB0aGUgc2V0Ci0gICAgLy8gICAgb2YgcG9z
c2libGUgc3RydWN0dXJlcyB0aGF0IHggbWF5IGhhdmUgaWYgYSBjbG9iYmVyaW5nIGV2ZW50IGhh
cHBlbnMuIFNvLAotICAgIC8vICAgIHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSB3aWxsIGJl
IHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBjaGVjayB0byBnZXQKLSAgICAvLyAgICBwcm9wZXJ0eSAn
ZicsIGFuZCBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgVE9QLgotICAgIC8vCi0g
ICAgLy8gMykgeCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8KLSAgICAvLyAg
ICBXaGVyZSB4IGhhcyBhIHRlcm1pbmFsIHN0cnVjdHVyZSB0aGF0IGlzIHN0aWxsIHdhdGNocG9p
bnRhYmxlLiBJbiB0aGlzIGNhc2UsCi0gICAgLy8gICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0
dXJlIGFuZCBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYm90aCBiZQotICAgIC8vICAg
IHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBjaGVja2VkIGZvciB3aGVuIGdldHRpbmcgJ2YnLgotICAg
IC8vCi0gICAgLy8gNCkgeCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8gICAg
YmFyKCk7Ci0gICAgLy8KLSAgICAvLyAgICBXaGVyZSB4IGhhcyBhIHRlcm1pbmFsIHN0cnVjdHVy
ZSB0aGF0IGlzIHN0aWxsIHdhdGNocG9pbnRhYmxlLiBJbiB0aGlzCi0gICAgLy8gICAgY2FzZSwg
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgd2lsbCBiZSBUT1AgYmVjYXVzZSBiYXIoKSBtYXkgcG90
ZW50aWFsbHkKLSAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3
YXkgb2YgcHJvdmluZyBvdGhlcndpc2UsIGJ1dAotICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCi0g
ICAgLy8gICAgd2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KLSAgICAKLSAgICAvLyBOQi4gQWxs
IGZpZWxkcyBpbiB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KLQog
ICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0
IHRoaXMgdmFsdWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2Yg
dGhlIGN1cnJlbnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5CiAg
ICAgLy8gYmUgVE9QLCBpbmRpY2F0aW5nIHRoYXQgaXQgaXMgdGhlIHNldCBvZiBhbGwgcG9zc2li
bGUgc3RydWN0dXJlcywgaW4gd2hpY2gKQEAgLTMwMSwyOSArMzEzLDEyIEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICAvLyBpbiB3aGljaCBjYXNlIHRoaXMgdmFsdWUgY2Fubm90IGJlIGEg
Y2VsbC4gVGhpcyBpcyBhbGwgc3ViamVjdCB0byBjaGFuZ2UKICAgICAvLyBhbnl0aW1lIGEgbmV3
IHZhbHVlIGlzIGFzc2lnbmVkIHRvIHRoaXMgb25lLCBhbnl0aW1lIHRoZXJlIGlzIGEgY29udHJv
bCBmbG93CiAgICAgLy8gbWVyZ2UsIG9yIG1vc3QgY3J1Y2lhbGx5LCBhbnl0aW1lIGEgc2lkZS1l
ZmZlY3Qgb3Igc3RydWN0dXJlIGNoZWNrIGhhcHBlbnMuCi0gICAgLy8gSW4gY2FzZSBvZiBhIHNp
ZGUtZWZmZWN0LCB3ZSB0eXBpY2FsbHkgbXVzdCBhc3N1bWUgdGhhdCBhbnkgdmFsdWUgbWF5IGhh
dmUKLSAgICAvLyBoYWQgaXRzIHN0cnVjdHVyZSBjaGFuZ2VkLCBoZW5jZSBjb250cmF2ZW5pbmcg
b3VyIHByb29mLiBXZSBtYWtlIHRoZSBwcm9vZgotICAgIC8vIHZhbGlkIGFnYWluIGJ5IHN3aXRj
aGluZyB0aGlzIHRvIFRPUCAoaS5lLiBjbGFpbWluZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQK
LSAgICAvLyB0aGlzIHZhbHVlIG1heSBoYXZlIGFueSBzdHJ1Y3R1cmUpLiBPZiBub3RlIGlzIHRo
YXQgdGhlIHByb29mIHJlcHJlc2VudGVkIGJ5Ci0gICAgLy8gdGhpcyBmaWVsZCBpcyBub3Qgc3Vi
amVjdCB0byBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyAtIGV2ZW4gaWYgb25lCi0g
ICAgLy8gZmlyZXMsIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhpcyBwcm9vZiBpcyBzdGlsbCB2YWxp
ZC4KLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fY3VycmVudEtub3duU3RydWN0dXJlOwot
ICAgIAotICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJl
cyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUgbm93Ci0gICAgLy8gb3IgYW55IHRpbWUgaW4gdGhl
IGZ1dHVyZSBzdWJqZWN0IHRvIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyBv
ZgotICAgIC8vIGFsbCBtZW1iZXJzIG9mIHRoaXMgc2V0IG5vdCBoYXZpbmcgZmlyZWQuIFRoaXMg
c2V0IGlzIGltcGVydmlvdXMgdG8gc2lkZS0KLSAgICAvLyBlZmZlY3RzOyBldmVuIGlmIG9uZSBo
YXBwZW5zIHRoZSBzaWRlLWVmZmVjdCBjYW4gb25seSBjYXVzZSB0aGUgdmFsdWUgdG8KLSAgICAv
LyBjaGFuZ2UgdG8gYXQgd29yc3QgYW5vdGhlciBzdHJ1Y3R1cmUgdGhhdCBpcyBhbHNvIGEgbWVt
YmVyIG9mIHRoaXMgc2V0LiBCdXQsCi0gICAgLy8gdGhlIHRoZW9yZW0gYmVpbmcgcHJvdmVkIGJ5
IHRoaXMgZmllbGQgaXMgcHJlZGljYXRlZCB1cG9uIHRoZXJlIG5vdCBiZWluZwotICAgIC8vIGFu
eSBuZXcgc3RydWN0dXJlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgaW50byBhbnkgbWVtYmVycyBv
ZiB0aGlzIHNldC4gSW4KLSAgICAvLyBjYXNlcyB3aGVyZSB0aGVyZSBpcyBubyB3YXkgZm9yIHVz
IHRvIGd1YXJkIHRoaXMgaGFwcGVuaW5nLCB0aGUgc2V0IG11c3QgYmUKLSAgICAvLyBUT1AuIEJ1
dCBpbiBjYXNlcyB3aGVyZSB3ZSBjYW4gZ3VhcmQgbmV3IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAo
YWxsIG1lbWJlcnMKLSAgICAvLyBvZiB0aGUgc2V0IGhhdmUgc3RpbGwtdmFsaWQgc3RydWN0dXJl
IHRyYW5zaXRpb24gd2F0Y2hwb2ludHMpIHRoZW4gdGhpcyBzZXQKLSAgICAvLyB3aWxsIGJlIGZp
bml0ZS4gQW55dGltZSB0aGF0IHdlIG1ha2UgdXNlIG9mIHRoZSBmaW5pdGUgbmF0dXJlIG9mIHRo
aXMgc2V0LAotICAgIC8vIHdlIG11c3QgZmlyc3QgaXNzdWUgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlv
biB3YXRjaHBvaW50LCB3aGljaCB3aWxsIGVmZmVjdGl2ZWx5Ci0gICAgLy8gcmVzdWx0IGluIG1f
Y3VycmVudEtub3duU3RydWN0dXJlIGJlaW5nIGZpbHRlcmVkIGFjY29yZGluZyB0bwotICAgIC8v
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlOworICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVj
dCwgd2UgbXVzdCBhc3N1bWUgdGhhdCBhbnkgdmFsdWUgd2l0aCBhIHN0cnVjdHVyZSB0aGF0Cisg
ICAgLy8gaXNuJ3QgYmVpbmcgd2F0Y2hlZCBtYXkgaGF2ZSBoYWQgaXRzIHN0cnVjdHVyZSBjaGFu
Z2VkLCBoZW5jZSBjb250cmF2ZW5pbmcKKyAgICAvLyBvdXIgcHJvb2YuIEluIHN1Y2ggYSBjYXNl
IHdlIG1ha2UgdGhlIHByb29mIHZhbGlkIGFnYWluIGJ5IHN3aXRjaGluZyB0aGlzIHRvCisgICAg
Ly8gVE9QIChpLmUuIGNsYWltaW5nIHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGlzIHZhbHVl
IG1heSBoYXZlIGFueQorICAgIC8vIHN0cnVjdHVyZSkuCisgICAgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSBtX3N0cnVjdHVyZTsKICAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFp
bnQgb24gdGhlIHBvc3NpYmxlIHR5cGVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZQogICAgIC8v
IG5vdyBvciBhbnkgdGltZSBpbiB0aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4g
VGhpcyBmaWVsZCBpcwpAQCAtMzMyLDExICszMjcsMTEgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUg
ewogICAgIC8vIGJldHdlZW4gdGhpcyBmaWVsZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIGFi
b3ZlLCBpcyBhcyBmb2xsb3dzLiBUaGUKICAgICAvLyBmaWVsZHMgYWJvdmUgY29uc3RyYWludCB0
aGUgc3RydWN0dXJlcyB0aGF0IGEgY2VsbCBtYXkgaGF2ZSwgYnV0IHRoZXkgc2F5CiAgICAgLy8g
bm90aGluZyBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgYSBj
ZWxsLiBNb3JlIGZvcm1hbGx5LAotICAgIC8vIHRoZSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBp
cyBpdHNlbGYgYW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKKyAgICAvLyB0
aGUgbV9zdHJ1Y3R1cmUgaXMgaXRzZWxmIGFuIGFic3RyYWN0IHZhbHVlIHRoYXQgY29uc2lzdHMg
b2YgdGhlCiAgICAgLy8gdW5pb24gb2YgdGhlIHNldCBvZiBhbGwgbm9uLWNlbGwgdmFsdWVzIGFu
ZCB0aGUgc2V0IG9mIGNlbGwgdmFsdWVzIHRoYXQgaGF2ZQogICAgIC8vIHRoZSBnaXZlbiBzdHJ1
Y3R1cmUuIFRoaXMgYWJzdHJhY3QgdmFsdWUgaXMgdGhlbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRo
ZQotICAgIC8vIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZCB0aGUgc2V0IG9mIHZhbHVlcyB3
aG9zZSB0eXBlIGlzIG1fdHlwZS4gU28sIGZvcgotICAgIC8vIGV4YW1wbGUgaWYgbV90eXBlIGlz
IFNwZWNGaW5hbHxTcGVjSW50MzIgYW5kIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzCisgICAg
Ly8gbV9zdHJ1Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUgaXMgbV90eXBl
LiBTbywgZm9yCisgICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQz
MiBhbmQgbV9zdHJ1Y3R1cmUgaXMKICAgICAvLyBbMHgxMjM0NV0gdGhlbiB0aGlzIGFic3RyYWN0
IHZhbHVlIGNvcnJlc3BvbmRzIHRvIHRoZSBzZXQgb2YgYWxsIGludGVnZXJzCiAgICAgLy8gdW5p
ZmllZCB3aXRoIHRoZSBzZXQgb2YgYWxsIG9iamVjdHMgd2l0aCBzdHJ1Y3R1cmUgMHgxMjM0NS4K
ICAgICBTcGVjdWxhdGVkVHlwZSBtX3R5cGU7CkBAIC0zNjQsNiArMzU5LDEyIEBAIHByaXZhdGU6
CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbihJbmRleGluZ1R5cGUgZnJvbSwg
SW5kZXhpbmdUeXBlIHRvKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJy
YXlNb2Rlcyhmcm9tKSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyB8PSBhc0FycmF5TW9kZXMo
dG8pOworICAgIH0KKyAgICAKICAgICBib29sIHZhbGlkYXRlVHlwZShKU1ZhbHVlIHZhbHVlKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpAQCAtMzkxLDE5ICszOTIsMTcg
QEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1fdHlwZSB8PSB0b3A7CiAgICAgICAgIG1fYXJy
YXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUubWFrZVRvcCgpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3Ao
KTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBtX3ZhbHVlID0gSlNW
YWx1ZSgpOwogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoR3JhcGgmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSk7Ci0KICAgICB2b2lkIGZpbHRlclZhbHVlQnlUeXBlKCk7CiAgICAgdm9pZCBmaWx0ZXJBcnJh
eU1vZGVzQnlUeXBlKCk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRCZUNsZWFyKCkgY29uc3Q7CiAg
ICAgRmlsdHJhdGlvblJlc3VsdCBub3JtYWxpemVDbGFyaXR5KCk7CisgICAgRmlsdHJhdGlvblJl
c3VsdCBub3JtYWxpemVDbGFyaXR5KEdyYXBoJik7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJl
dmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFs
bG9jYXRlKCk7IC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGFsbG9jYXRlLCBhbmQgYXZvaWQgdXNp
bmcgdGhpcyBtZXRob2QuCiAgICAgdm9pZCBmcmVlKFQqKTsgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0
byBkZWxldGU7IG5ldmVyIHVzZSAnZGVsZXRlJyBkaXJlY3RseS4KICAgICAKLSAgICB2b2lkIGZy
ZWVBbGwoKTsgLy8gT25seSBjYWxsIHRoaXMgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3Iu
CisgICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIHlvdSd2ZSBlaXRoZXIg
ZnJlZWQgZXZlcnl0aGluZyBvciBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KICAgICB2
b2lkIHJlc2V0KCk7IC8vIExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1cm5zIGFsbCBtZW1v
cnkgdG8gdGhlIE9TLgogICAgIAogICAgIHVuc2lnbmVkIGluZGV4T2YoY29uc3QgVCopOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3Vt
ZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjUsNyArMzI1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBiZWNhdXNlIGlmIHdlIGdldCB1
c2VzIG9mIHRoZSByZWxldmFudAogICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0aGVu
IHdlIGNhbiBzYWZlbHkgZ2V0IHJpZCBvZiB0aGVzZSwgdG9vLiBUaGlzIG9mIGNvdXJzZQpAQCAt
NDQxLDcgKzQ0MCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAg
ICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAg
ICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGp1c3Qg
Z2V0IHJpZCBvZiB0aGlzIG5vZGUsIGlmIGl0IHJlZmVyZW5jZXMgYSBwaGFudG9tIGFyZ3VtZW50
LgogICAgICAgICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgp
Lm5vZGUoKSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
Y3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fy
cmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSwyNSArMjg5LDQ4IEBAIFN0cnVjdHVy
ZSogQXJyYXlNb2RlOjpvcmlnaW5hbEFycmF5U3RydWMKIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5
Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBJ
bmRleGluZ1R5cGUgc2hhcGUpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsK
LSAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OgotICAgICAgICByZXR1cm4gdmFsdWUubV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJ
bmRleGluZ1NoYXBlTWFzaykgPT0gc2hhcGUKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQot
ICAgICAgICAgICAgJiYgZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5zaW5nbGV0b24oKSk7CisgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheTogeworICAgICAg
ICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0
dXJlW2ldOworICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSW5k
ZXhpbmdTaGFwZU1hc2spICE9IHNoYXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWdyYXBoLmds
b2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5pc09yaWdpbmFsQXJyYXlTdHJ1
Y3R1cmUoc3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIEFycmF5
OjpBcnJheToKKyAgICBjYXNlIEFycmF5OjpBcnJheTogewogICAgICAgICBpZiAoYXJyYXlNb2Rl
c0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKHNoYXBlIHwg
SXNBcnJheSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1
ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUo
KSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBzaGFwZQotICAgICAgICAgICAgJiYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJy
YXkpOworICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1
cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZh
bHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spICE9IHNoYXBlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
JiBJc0FycmF5KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgICAgICAKLSAgICBkZWZhdWx0OgorICAgIGRl
ZmF1bHQ6IHsKICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2Fy
cmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhzaGFwZSkgfCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0Fy
cmF5KSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYg
SW5kZXhpbmdTaGFwZU1hc2spID09IHNoYXBlOwotICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLm1f
c3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAg
ICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNr
KSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfSB9CiB9CiAKIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5
Q2hlY2tlZChHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKSBj
b25zdApAQCAtMzM2LDIzICszNTksMzggQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2Vk
KEdyYXBoJiBncgogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
OgogICAgICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpP
cmlnaW5hbEFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OiB7CiAgICAg
ICAgICAgICBDUkFTSCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBjYXNlIEFycmF5OjpBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6
QXJyYXk6IHsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUu
bV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJy
YXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICAgICAmJiBoYXNBbnlBcnJheVN0b3Jh
Z2UodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlw
ZSgpKQotICAgICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5z
aW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgICAgIGlmICh2
YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9z
dHJ1Y3R1cmVbaV07CisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNB
cnJheSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBk
ZWZhdWx0OgorICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0Fs
cmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0
aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICAgICAmJiBoYXNBbnlBcnJheVN0b3JhZ2UodmFs
dWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsK
LSAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgICAg
ICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gfQogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpB
cmd1bWVudHM6CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBl
LCBTcGVjQXJndW1lbnRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEw
OSw4ICsyMTA5LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICBB
U1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNC
ZWVuSW52YWxpZGF0ZWQoKSk7CiAgICAgCiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwotICAg
IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0YSA9IG1fZ3JhcGguYWRkU3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoCi0gICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHZh
cmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKKyAgICBUcmFu
c2l0aW9uKiB0cmFuc2l0aW9uID0gbV9ncmFwaC5tX3RyYW5zaXRpb25zLmFkZCgKKyAgICAgICAg
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAKICAgICBp
ZiAodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKQogICAgICAgICAh
PSB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0yMTIx
LDEwICsyMTIxLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAKICAg
ICAgICAgaWYgKCF2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7
CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAotICAgICAgICAgICAg
ICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBiYXNl
KTsKKyAgICAgICAgICAgICAgICBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5z
aXRpb24pLCBiYXNlKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByb3BlcnR5U3Rv
cmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwKKyAgICAgICAgICAgICAgICBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbiksCiAgICAgICAgICAgICAgICAgYmFz
ZSwgYWRkVG9HcmFwaChHZXRCdXR0ZXJmbHksIGJhc2UpKTsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7CkBAIC0yMTM0LDcgKzIxMzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRC
eUlkKAogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaChHZXRCdXR0ZXJm
bHksIGJhc2UpOwogICAgIH0KIAotICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8o
dHJhbnNpdGlvbkRhdGEpLCBiYXNlKTsKKyAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJ
bmZvKHRyYW5zaXRpb24pLCBiYXNlKTsKIAogICAgIGFkZFRvR3JhcGgoCiAgICAgICAgIFB1dEJ5
T2Zmc2V0LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJ
KHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpCiAg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIihVTlNBRkUpICIpOwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZHVtcChXVEY6OmRhdGFGaWxlKCkpOwor
ICAgICAgICAgICAgICAgIGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXMoKSwgIiAiLCBtX2ludGVy
cHJldGVyKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5o
YXZlU3RydWN0dXJlcygpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgKEhhdmUgU3Ry
dWN0dXJlcykiKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NT
RVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYwLDE3ICs0NjAsMTEgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEK
LSAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVj
dHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVy
ZToKICAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAg
ICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgICAgICYmIHN0cnVj
dHVyZVNldC5jb250YWlucyhub2RlLT50cmFuc2l0aW9uKCktPm5leHQpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmNv
bnRhaW5zKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUp
KQorICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+dHJhbnNp
dGlvbigpLT5wcmV2aW91cykpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTUyNCw3ICs1MTgsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUt
PnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUgIT0gc3RydWN0dXJl
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cyAh
PSBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKQEAgLTU0NywxMSArNTQxLDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+c3RydWN0dXJlKCkgPT0gc3RydWN0dXJl
ICYmIG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICBjYXNlIEFycmF5aWZ5OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgogICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBhcnJheWlmaWNhdGlv
biBjb3VsZCBhZmZlY3Qgb3VyIHN0cnVjdHVyZXMuCkBAIC0xMzg3LDEzICsxMzc2LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
Ci0gICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBTdG9yZUVsaW1pbmF0aW9uKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RWxpbWluYXRpb24obm9kZS0+c3RydWN0dXJlKCksIG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
Ci0gICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgICAgIGlmIChjc2VN
b2RlID09IE5vcm1hbENTRSkKICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDE4LDcgKzQxOCw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5v
ZGUKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEluc3RhbmNlT2Y6CiAgICAg
ICAgIHJlYWQoSlNDZWxsX3N0cnVjdHVyZUlEKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxNSArMzMsMjMgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitz
dGF0aWMgdW5zaWduZWQgY3Jhc2hMb2NrOworCiB2b2lkIHN0YXJ0Q3Jhc2hpbmcoKQogewogI2lm
IEVOQUJMRShDT01QQVJFX0FORF9TV0FQKQotICAgIHN0YXRpYyB1bnNpZ25lZCBsb2NrOwotICAg
IHdoaWxlICghV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAoJmxvY2ssIDAsIDEpKQorICAgIHdoaWxl
ICghV1RGOjp3ZWFrQ29tcGFyZUFuZFN3YXAoJmNyYXNoTG9jaywgMCwgMSkpCiAgICAgICAgIHN0
ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisjZWxzZQorICAgIGNyYXNoTG9jayA9IDE7CiAjZW5k
aWYKIH0KIAorYm9vbCBpc0NyYXNoaW5nKCkKK3sKKyAgICByZXR1cm4gISFjcmFzaExvY2s7Cit9
CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
MSw2ICsyMTEsOCBAQCBib29sIGNoZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmlnaHQpCiAvLyB3aGVu
IHlvdSdyZSBmb3JjaW5nIGEgY3Jhc2ggd2l0aCBkaWFnbm9zdGljcy4KIHZvaWQgc3RhcnRDcmFz
aGluZygpOwogCitKU19FWFBPUlRfUFJJVkFURSBib29sIGlzQ3Jhc2hpbmcoKTsKKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDEsOCArNDEsOCBAQCB2b2lkIENvbW1vbkRhdGE6Om5vdGlmeUNvbXBpbGluZ1N0cnVj
dHVyCiAgICAgcGxhbi50cmFuc2l0aW9ucy5hZGRMYXppbHkoCiAgICAgICAgIGNvZGVCbG9jaywK
ICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljLmNvZGVPcmlnaW5Pd25lcigpLAotICAgICAg
ICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLAotICAg
ICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAg
ICAgIG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMsCisgICAgICAgIG5vZGUtPnRyYW5zaXRp
b24oKS0+bmV4dCk7CiB9CiAKIHVuc2lnbmVkIENvbW1vbkRhdGE6OmFkZENvZGVPcmlnaW4oQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NywyNyArOTcsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQoKTsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkg
ewogICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2Nr
KTsgLy8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCiAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1BoYW50b20oKTsKICAgICAgICAgICAgICAgICAg
ICAgZWxpbWluYXRlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBzdHJ1
Y3R1cmVWYWx1ZSA9IHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmU7Ci0gICAgICAgICAg
ICAgICAgaWYgKHN0cnVjdHVyZVZhbHVlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmVWYWx1ZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZVZhbHVlLnNpbmdsZXRvbigpOwot
ICAgICAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsg
Ly8gQ2F0Y2ggdGhlIGZhY3QgdGhhdCB3ZSBtYXkgZmlsdGVyIG9uIGNlbGwuCi0gICAgICAgICAg
ICAgICAgICAgIEFkamFjZW5jeUxpc3QgY2hpbGRyZW4gPSBub2RlLT5jaGlsZHJlbjsKLSAgICAg
ICAgICAgICAgICAgICAgY2hpbGRyZW4ucmVtb3ZlRWRnZSgwKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCEhY2hpbGRyZW4uY2hpbGQxKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG5v
ZGUtPm9yaWdpbiwgY2hpbGRyZW4pOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJl
bi5zZXRDaGlsZDIoRWRnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4u
c2V0Q2hpbGQzKEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1N0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIGVsaW1pbmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCkBAIC0xNTYsNyArMTQxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgTXVsdGlH
ZXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpOwogCi0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hp
bGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVy
ZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTE4MCw3ICsxNjUsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAg
ICAgICAgICBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpUHV0QnlPZmZz
ZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3Rh
dGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVy
ZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMjA1LDcgKzE5MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRWRnZS51c2VLaW5kKCkgIT0g
Q2VsbFVzZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hp
bGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVy
ZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIApAQCAtMjMyLDcgKzIxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkRWRnZS51c2VLaW5kKCkgPT0gQ2VsbFVzZSk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9z
dHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJl
KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTMyOSw3
ICszMTQsNiBAQCBwcml2YXRlOgogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAKLSAgICAgICAg
Ym9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVj
ayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAK
ICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNoYWluKCkpOwpAQCAtMzQwLDExICszMjQsNyBAQCBw
cml2YXRlOgogICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgogICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChuZWVk
c1dhdGNocG9pbnQpIHsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0g
ICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwg
Y2hpbGRFZGdlKTsKLSAgICAgICAgfSBlbHNlIGlmIChuZWVkc0NlbGxDaGVjaykgeworICAgICAg
ICBpZiAobmVlZHNDZWxsQ2hlY2spIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwg
b3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAgICB9CkBAIC0zODEsNyArMzYxLDYgQEAgcHJpdmF0
ZToKIAogICAgICAgICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUp
OwogICAgICAgICAKLSAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JO
b2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAg
ICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYg
flNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGlu
ZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCkBAIC0zODksMjEg
KzM2OCwxNiBAQCBwcml2YXRlOgogICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgogICAg
ICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKIAotICAgICAgICBpZiAo
bmVlZHNXYXRjaHBvaW50KSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVy
ZSksIGNoaWxkRWRnZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKKyAg
ICAgICAgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50
b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNoaWxkRWRnZS5z
ZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAKLSAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEqIHRyYW5zaXRpb25EYXRhID0gMDsKKyAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9
IDA7CiAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikgewotICAgICAgICAgICAgdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KHN0cnVjdHVyZSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgdHJhbnNp
dGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0
cnVjdHVyZSgpKTsKIAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlJZCkgewog
ICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwo
KSkgewpAQCAtNDM5LDcgKzQxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoIWlz
SW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIE5vZGUqIGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAg
ICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwK
LSAgICAgICAgICAgICAgICBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRn
ZSk7CisgICAgICAgICAgICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRn
ZSk7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywg
U3BlY05vbmUsIFN0b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ0OSw3ICs0MjMs
NyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICBOb2RlKiByZWFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleElu
QmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBvcmlnaW4sCi0gICAg
ICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlLAorICAgICAgICAg
ICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlLAogICAgICAgICAgICAgICAgIEVk
Z2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJ
bkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkpKTsKICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93
bkNlbGxVc2UpKTsKQEAgLTQ1Nyw3ICs0MzEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7
Ci0gICAgICAgICAgICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05v
bmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVk
Z2UpOworICAgICAgICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNw
ZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVk
Z2UpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2Rl
KCksIEtub3duQ2VsbFVzZSkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KGlu
ZGV4SW5CbG9jaywgcHV0U3RydWN0dXJlKTsKICAgICAgICAgfQpAQCAtNDc1LDE2ICs0NDksMTQg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVP
cmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7
Ci0gICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
Ci0gICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwpLCBX
ZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8oY2VsbCkpOwotICAgICAgICAKLSAgICAgICAg
aWYgKG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoY2VsbC0+c3RydWN0dXJlKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJ
bmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKKyAg
ICAgICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3Rp
bGxWYWxpZCgpKSB7CisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCisgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1
bGF0aW9uRnJvbVZhbHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8oY2Vs
bCkpOworICAgICAgICAKICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBvcmlnaW4sCiAg
ICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoY2VsbC0+c3RydWN0dXJl
KCkpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHJldmlzaW9u
IDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjIsMTYgKzYyLDYgQEAgdm9pZCBEZXNpcmVkV2F0Y2hw
b2ludHM6OmFkZExhemlseShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcp
OwogfQogCi12b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KENvZGVPcmlnaW4gY29k
ZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQsIFdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBt
X3NldHMuYWRkTGF6aWx5KGNvZGVPcmlnaW4sIGV4aXRLaW5kLCBzZXQpOwotfQotCi12b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtp
bmQgZXhpdEtpbmQsIElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKLXsKLSAgICBtX2lubGluZVNl
dHMuYWRkTGF6aWx5KGNvZGVPcmlnaW4sIGV4aXRLaW5kLCAmc2V0KTsKLX0KLQogdm9pZCBEZXNp
cmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tbW9uRGF0
YSYgY29tbW9uRGF0YSkKIHsKICAgICBtX3NldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9u
RGF0YSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBv
aW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJl
ZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDI2ICszOSw3
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdGVtcGxhdGU8dHlwZW5h
bWUgV2F0Y2hwb2ludFNldFR5cGU+Ci1zdHJ1Y3QgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBv
aW50U2V0IHsKLSAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQoKQotICAgICAg
ICA6IG1fZXhpdEtpbmQoRXhpdEtpbmRVbnNldCkKLSAgICAgICAgLCBtX3NldCgwKQotICAgIHsK
LSAgICB9Ci0gICAgCi0gICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KAotICAg
ICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50
U2V0VHlwZSogc2V0KQotICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAgICAg
ICAsIG1fZXhpdEtpbmQoZXhpdEtpbmQpCi0gICAgICAgICwgbV9zZXQoc2V0KQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgRXhpdEtpbmQgbV9l
eGl0S2luZDsKLSAgICBXYXRjaHBvaW50U2V0VHlwZSogbV9zZXQ7Ci19OworY2xhc3MgR3JhcGg7
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewpAQCAt
OTUsMTIgKzc2LDYgQEAgcHVibGljOgogICAgICAgICBtX3NldHMuYWRkKHNldCk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQg
ZXhpdEtpbmQsIFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgewotICAgICAgICBtX3Byb2Zp
bGVkV2F0Y2hwb2ludHMuYXBwZW5kKAotICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNX
YXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPihjb2RlT3JpZ2luLCBleGl0S2luZCwgc2V0
KSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb21tb25EYXRhJiBjb21tb24pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9y
ZWFsbHlBZGRlZCk7CkBAIC0xMTIsMTQgKzg3LDYgQEAgcHVibGljOgogICAgICAgICAgICAgQWRh
cHRvcjo6YWRkKGNvZGVCbG9jaywgKml0ZXIsICZjb21tb24ud2F0Y2hwb2ludHMubGFzdCgpKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wcm9maWxl
ZFdhdGNocG9pbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdl
bmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPiB3YXRjaHBvaW50ID0KLSAgICAg
ICAgICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hwb2ludHNbaV07Ci0gICAgICAgICAgICBjb21tb24u
cHJvZmlsZWRXYXRjaHBvaW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgUHJvZmlsZWRDb2Rl
QmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQod2F0Y2hwb2ludC5tX2NvZGVPcmlnaW4sIHdhdGNo
cG9pbnQubV9leGl0S2luZCwgY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBBZGFwdG9yOjphZGQo
Y29kZUJsb2NrLCB3YXRjaHBvaW50Lm1fc2V0LCAmY29tbW9uLnByb2ZpbGVkV2F0Y2hwb2ludHMu
bGFzdCgpKTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRy
dWU7CiAgICAgfQogICAgIApAQCAtMTMyLDUzICs5OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX3Byb2ZpbGVkV2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAg
ICAgICBpZiAoQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKG1fcHJvZmlsZWRXYXRjaHBvaW50
c1tpXS5tX3NldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0jaWYgQVNTRVJUX0RJ
U0FCTEVECi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKHNldCk7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBvaW50U2V0
VHlwZSopCi0gICAgewogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0jZWxzZQotICAgIGJv
b2wgaXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgewotICAgICAgICBi
b29sIHJlc3VsdCA9ICFBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQoc2V0KTsKLSAgICAgICAg
bV9maXJzdEtub3duU3RhdGUuYWRkKHNldCwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLSAgICB9CiAgICAgCi0gICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKFdhdGNocG9p
bnRTZXRUeXBlKiBzZXQpCisgICAgYm9vbCBpc1dhdGNoZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNl
dCkgY29uc3QKICAgICB7Ci0gICAgICAgIHR5cGVuYW1lIFN0YXRlTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9maXJzdEtub3duU3RhdGUuZmluZChzZXQpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2Zp
cnN0S25vd25TdGF0ZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIHJldHVybiBpdGVyLT52YWx1ZSAhPSAhQWRhcHRvcjo6aGFzQmVlbkludmFsaWRh
dGVkKHNldCk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgYm9vbCBpc1ZhbGlkT3JNaXhlZChX
YXRjaHBvaW50U2V0VHlwZSogc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzU3RpbGxWYWxp
ZChzZXQpIHx8IHNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0KTsKKyAgICAgICAgcmV0dXJuIG1f
c2V0cy5jb250YWlucyhzZXQpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8V2F0Y2hw
b2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4gbV9wcm9maWxl
ZFdhdGNocG9pbnRzOwogICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3NldHM7Ci0j
aWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIFN0YXRlTWFwIG1fZmlyc3RLbm93blN0YXRlOwotI2Vu
ZGlmCiAgICAgYm9vbCBtX3JlYWxseUFkZGVkOwogfTsKIApAQCAtMTkwLDQ4ICsxMjAsMjIgQEAg
cHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXQqKTsKICAgICB2b2lkIGFk
ZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJh
eUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0S2luZCwg
V2F0Y2hwb2ludFNldCopOwotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4sIEV4aXRLaW5k
LCBJbmxpbmVXYXRjaHBvaW50U2V0Jik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJs
b2NrKiwgQ29tbW9uRGF0YSYpOwogICAgIAogICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0
OwogICAgIAotICAgIGJvb2wgaXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXQqIHNldCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX3NldHMuaXNTdGlsbFZhbGlkKHNldCk7Ci0gICAgfQotICAgIGJv
b2wgaXNTdGlsbFZhbGlkKElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2lubGluZVNldHMuaXNTdGlsbFZhbGlkKCZzZXQpOwotICAgIH0KLSAgICBib29s
IGlzU3RpbGxWYWxpZChKU0FycmF5QnVmZmVyVmlldyogdmlldykKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2J1ZmZlclZpZXdzLmlzU3RpbGxWYWxpZCh2aWV3KTsKLSAgICB9Ci0gICAgYm9vbCBz
aG91bGRBc3N1bWVNaXhlZFN0YXRlKFdhdGNocG9pbnRTZXQqIHNldCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX3NldHMuc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShzZXQpOwotICAgIH0KLSAgICBi
b29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKCZz
ZXQpOwotICAgIH0KLSAgICBib29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoSlNBcnJheUJ1ZmZl
clZpZXcqIHZpZXcpCi0gICAgewotICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5zaG91bGRB
c3N1bWVNaXhlZFN0YXRlKHZpZXcpOwotICAgIH0KLSAgICBib29sIGlzVmFsaWRPck1peGVkKFdh
dGNocG9pbnRTZXQqIHNldCkKKyAgICBib29sIGlzV2F0Y2hlZChXYXRjaHBvaW50U2V0KiBzZXQp
CiAgICAgewotICAgICAgICByZXR1cm4gbV9zZXRzLmlzVmFsaWRPck1peGVkKHNldCk7CisgICAg
ICAgIHJldHVybiBtX3NldHMuaXNXYXRjaGVkKHNldCk7CiAgICAgfQotICAgIGJvb2wgaXNWYWxp
ZE9yTWl4ZWQoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQorICAgIGJvb2wgaXNXYXRjaGVkKElu
bGluZVdhdGNocG9pbnRTZXQmIHNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZVNl
dHMuaXNWYWxpZE9yTWl4ZWQoJnNldCk7CisgICAgICAgIHJldHVybiBtX2lubGluZVNldHMuaXNX
YXRjaGVkKCZzZXQpOwogICAgIH0KLSAgICBib29sIGlzVmFsaWRPck1peGVkKEpTQXJyYXlCdWZm
ZXJWaWV3KiB2aWV3KQorICAgIGJvb2wgaXNXYXRjaGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNWYWxpZE9yTWl4ZWQodmll
dyk7CisgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9
CiAgICAgCiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
b2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAgYm9vbCBkb2VzR0Mo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAg
Y2FzZSBQdXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgY2FzZSBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNl
IFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTMwLDcgKzkzMCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBDaGVj
a0V4ZWN1dGFibGU6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlv
bjoKICAgICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIENyZWF0ZVRo
aXM6CkBAIC0xMzUxLDcgKzEzNTAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgSlNP
YmplY3QqIHN0cmluZ1Byb3RvdHlwZU9iamVjdCA9IGFzT2JqZWN0KHN0cmluZ09iamVjdFN0cnVj
dHVyZS0+c3RvcmVkUHJvdG90eXBlKCkpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSA9IHN0cmluZ1Byb3RvdHlwZU9iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAg
ICAgIGlmICghbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJpbmdQcm90b3R5
cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQorICAgICAgICBpZiAoc3Ry
aW5nUHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
aWYgKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDYgKzc3LDE2IEBAIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXYKIAog
R3JhcGg6On5HcmFwaCgpCiB7CisgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBudW1C
bG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IHRo
aXMtPmJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICBpZiAoIWJsb2NrKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwaGlJbmRleCA9IGJsb2NrLT5waGlz
LnNpemUoKTsgcGhpSW5kZXgtLTspCisgICAgICAgICAgICBtX2FsbG9jYXRvci5mcmVlKGJsb2Nr
LT5waGlzW3BoaUluZGV4XSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gYmxv
Y2stPnNpemUoKTsgbm9kZUluZGV4LS07KQorICAgICAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShi
bG9jay0+YXQobm9kZUluZGV4KSk7CisgICAgfQogICAgIG1fYWxsb2NhdG9yLmZyZWVBbGwoKTsK
IH0KIApAQCAtMjExLDggKzIyMSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQobm9kZS0+c3RydWN0
dXJlU2V0KCksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlKCkpCiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KCpub2RlLT5zdHJ1Y3R1cmUoKSwgY29udGV4
dCkpOwotICAgIGlmIChub2RlLT5oYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpKQotICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dCgqbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5wcmV2aW91c1N0cnVjdHVyZSwgY29udGV4dCksICIgLT4gIiwgaW5Db250ZXh0KCpub2Rl
LT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSwgY29udGV4dCkpOworICAg
IGlmIChub2RlLT5oYXNUcmFuc2l0aW9uKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9p
bnRlckR1bXBJbkNvbnRleHQobm9kZS0+dHJhbnNpdGlvbigpLCBjb250ZXh0KSk7CiAgICAgaWYg
KG5vZGUtPmhhc0Z1bmN0aW9uKCkpIHsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiZnVuY3Rp
b24oIiwgUmF3UG9pbnRlcihub2RlLT5mdW5jdGlvbigpKSwgIiwgIik7CiAgICAgICAgIGlmIChu
b2RlLT5mdW5jdGlvbigpLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKSB7CkBAIC04MDAs
OCArODEwLDkgQEAgSlNBcnJheUJ1ZmZlclZpZXcqIEdyYXBoOjp0cnlHZXRGb2xkYWJsZQogICAg
IEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmll
dyo+KHZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIGlmICghd2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQodmlldykpCisgICAg
aWYgKCF2aWV3LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgV1RGOjpsb2FkTG9h
ZEZlbmNlKCk7CiAgICAgcmV0dXJuIHZpZXc7CiB9CiAKQEAgLTg0Niw3ICs4NTcsNiBAQCB2b2lk
IEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIobm9kZS0+c3RydWN0dXJl
U2V0KClbaV0pOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAg
IGNhc2UgTmV3T2JqZWN0OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgog
ICAgICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CkBAIC04NTgsOSArODY4LDM0IEBAIHZv
aWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgIGNhc2Ug
QWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJl
YWRPbmx5UG9pbnRlcigKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnRyYW5zaXRpb24oKS0+cHJldmlvdXMpOwogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFy
aWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07
CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVZh
bHVlKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgpOyBqLS07KQorICAgICAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzZXRb
al0pOworCisgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gbWFyayBhbnl0aGlu
ZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAorICAgICAgICAgICAg
ICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERv
bid0IG5lZWQgdG8gbWFyayB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0
dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhl
CisgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgorICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUt
Pm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFyaWFudC5vbGRTdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRC
eUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTg3MCw2ICs5MDUsMjAgQEAgdm9pZCBHcmFw
aDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgIH0KIH0KIAordm9pZCBHcmFwaDo6
YXNzZXJ0SXNXYXRjaGVkKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmIChzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAod2F0Y2hwb2ludHMoKS5pc1dhdGNoZWQoc3RydWN0dXJlLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHN0YXJ0
Q3Jhc2hpbmcoKTsKKyAgICBkYXRhTG9nKCJTdHJ1Y3R1cmUgIiwgcG9pbnRlckR1bXAoc3RydWN0
dXJlKSwgIiBpcyB3YXRjaGFibGUgYnV0IGlzbid0IGJlaW5nIHdhdGNoZWQuXG4iKTsKKyAgICBk
YXRhTG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICBkdW1wKCk7CisgICAg
Q1JBU0goKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZp
c2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE2OSw4ICsxNjksMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Y29uc3RhbnRSZWdpc3RlcjsKICAgICB9CiAgICAgCisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAogICAgIHZvaWQgY29udmVydFRvQ29uc3RhbnQo
Tm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CisgICAgICAgIGlmICh2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgICAgIGFzc2VydElzV2F0Y2hlZCh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0
dXJlKCkpOwogICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgICAgIG5vZGUt
PmNvbnZlcnRUb1dlYWtDb25zdGFudCh2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAgIGVsc2UKQEAg
LTM5MCwxMiArMzk0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlU2V0
Lmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIGFkZFN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBzdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEuYXBwZW5kKHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKTsKLSAgICAgICAgcmV0dXJuICZt
X3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKLSAgICB9Ci0gICAgCiAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiAgICAgewog
ICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKTsK
QEAgLTQ0Niw4ICs0NDQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBtYXNxdWVyYWRlc0Fz
VW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3Jp
Z2luKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50cy5pc1N0aWxsVmFs
aWQoCi0gICAgICAgICAgICBnbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiktPm1hc3F1ZXJhZGVz
QXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOworICAgICAgICByZXR1cm4gZ2xvYmFsT2JqZWN0Rm9y
KGNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpLT5pc1N0aWxs
VmFsaWQoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNHbG9iYWxFeGl0U2l0ZShjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCkKQEAgLTgyMyw3ICs4MjAs
NyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+
IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0
aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1
cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKLSAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7CisgICAgQmFnPFRy
YW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE5ld0FycmF5QnVm
ZmVyRGF0YSwgND4gbV9uZXdBcnJheUJ1ZmZlckRhdGE7CiAgICAgQmFnPEJyYW5jaERhdGE+IG1f
YnJhbmNoRGF0YTsKICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3
IEBACiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkRGR05vZGVUeXBlLmgiCisjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgog
I2luY2x1ZGUgIkRGR1VzZUtpbmQuaCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aCIKICNpbmNsdWRlICJHZXRCeUlkVmFyaWFudC5oIgpAQCAtNjcsMTkgKzY4LDYgQEAgc3RydWN0
IE11bHRpUHV0QnlPZmZzZXREYXRhIHsKICAgICBib29sIHJlYWxsb2NhdGVzU3RvcmFnZSgpIGNv
bnN0OwogfTsKIAotc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKLSAgICBTdHJ1Y3R1
cmUqIHByZXZpb3VzU3RydWN0dXJlOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwotICAg
IAotICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkgeyB9Ci0gICAgCi0gICAgU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZSwgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUpCi0gICAgICAgIDogcHJldmlvdXNTdHJ1Y3R1cmUocHJldmlvdXNTdHJ1Y3R1
cmUpCi0gICAgICAgICwgbmV3U3RydWN0dXJlKG5ld1N0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQot
fTsKLQogc3RydWN0IE5ld0FycmF5QnVmZmVyRGF0YSB7CiAgICAgdW5zaWduZWQgc3RhcnRDb25z
dGFudDsKICAgICB1bnNpZ25lZCBudW1Db25zdGFudHM7CkBAIC00ODUsMjEgKzQ3Myw2IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgY2hpbGRyZW4ucmVzZXQoKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX29wID09IENoZWNrU3RydWN0dXJlIHx8
IG1fb3AgPT0gQXJyYXlpZnlUb1N0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVCghY2hpbGQyKCkp
OwotICAgICAgICBBU1NFUlQoIWNoaWxkMygpKTsKLSAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSk7
Ci0gICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlKTsK
LSAgICAgICAgbV9vcCA9IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OwotICAgIH0KLSAg
ICAKLSAgICB2b2lkIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KCkKLSAg
ICB7Ci0gICAgICAgIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KHN0cnVj
dHVyZVNldCgpLm9ubHlTdHJ1Y3R1cmUoKSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgY29udmVy
dFRvR2V0QnlPZmZzZXQodW5zaWduZWQgc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCwgRWRnZSBzdG9y
YWdlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fb3AgPT0gR2V0QnlJZCB8fCBtX29wID09IEdl
dEJ5SWRGbHVzaCB8fCBtX29wID09IE11bHRpR2V0QnlPZmZzZXQpOwpAQCAtMTA5MSw3ICsxMDY0
LDcgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obV9vcEluZm8pOwogICAgIH0KIAotICAgIGJvb2wgaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKQorICAgIGJvb2wgaGFzVHJhbnNpdGlvbigpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9w
KCkpIHsKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CkBAIC0xMTA0LDEwICsxMDc3LDEwIEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSYgc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKQorICAgIFRyYW5zaXRpb24qIHRy
YW5zaXRpb24oKQogICAgIHsKLSAgICAgICAgQVNTRVJUKGhhc1N0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkpOwotICAgICAgICByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEqPihtX29wSW5mbyk7CisgICAgICAgIEFTU0VSVChoYXNUcmFuc2l0aW9uKCkpOwor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUcmFuc2l0aW9uKj4obV9vcEluZm8pOwog
ICAgIH0KICAgICAKICAgICBib29sIGhhc1N0cnVjdHVyZVNldCgpCkBAIC0xMTI5LDcgKzExMDIs
NiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmUoKQogICAgIHsKICAgICAg
ICAgc3dpdGNoIChvcCgpKSB7Ci0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CiAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgY2FzZSBO
ZXdPYmplY3Q6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMs
MTggKzE1Myw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQ
dXRCeUlkRGlyZWN0LCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAg
ICBtYWNybyhDaGVja1N0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENo
ZWNrRXhlY3V0YWJsZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIC8qIFRyYW5zaXRpb24gd2F0
Y2hwb2ludHMgYXJlIGEgY29udHJhY3QgYmV0d2VlbiB0aGUgcGFydHkgc2V0dGluZyB0aGUgd2F0
Y2hwb2ludCAqL1wKLSAgICAvKiBhbmQgdGhlIHJ1bnRpbWUgc3lzdGVtLCB3aGVyZSB0aGUgcGFy
dHkgcHJvbWlzZXMgdGhhdCB0aGUgY2hpbGQgb2JqZWN0IG9uY2UgaGFkICovXAotICAgIC8qIHRo
ZSBzdHJ1Y3R1cmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRoZSBydW50aW1lIHN5c3RlbSBpbiB0dXJu
IHByb21pc2VzIHRoYXQgdGhlICovXAotICAgIC8qIHdhdGNocG9pbnQgd2lsbCBiZSB0dXJuZWQg
aW50byBhbiBPU1IgZXhpdCBpZiBhbnkgb2JqZWN0IHdpdGggdGhhdCBzdHJ1Y3R1cmUgKi9cCi0g
ICAgLyogZXZlciB0cmFuc2l0aW9ucyB0byBhIGRpZmZlcmVudCBzdHJ1Y3R1cmUuIEhlbmNlLCB0
aGUgY2hpbGQgb2JqZWN0IG11c3QgaGF2ZSAqL1wKLSAgICAvKiBwcmV2aW91c2x5IGhhZCBhIENo
ZWNrU3RydWN0dXJlIGV4ZWN1dGVkIG9uIGl0IG9yIHdlJ3JlIGRlYWxpbmcgd2l0aCBhbiBvYmpl
Y3QgKi9cCi0gICAgLyogY29uc3RhbnQgKFdlYWtKU0NvbnN0YW50KSBhbmQgdGhlIG9iamVjdCB3
YXMga25vd24gdG8gaGF2ZSB0aGF0IHN0cnVjdHVyZSBhdCAqL1wKLSAgICAvKiBjb21waWxlLXRp
bWUuIEluIHRoZSBsYXR0ZXIgY2FzZSB0aGlzIG1lYW5zIHRoYXQgbm8gc3RydWN0dXJlIGNoZWNr
cyBoYXZlIHRvIGJlICovXAotICAgIC8qIHBlcmZvcm1lZCBmb3IgdGhpcyBvYmplY3QgYnkgSklU
dGVkIGNvZGUuIEluIHRoZSBmb3JtZXIgY2FzZSB0aGlzIG1lYW5zIHRoYXQqL1wKLSAgICAvKiB0
aGUgb2JqZWN0J3Mgc3RydWN0dXJlIGRvZXMgbm90IG5lZWQgdG8gYmUgcmVjaGVja2VkIGR1ZSB0
byBzaWRlLWVmZmVjdGluZyAqL1wKLSAgICAvKiAoY2xvYmJlcmluZykgb3BlcmF0aW9ucy4gKi9c
Ci0gICAgbWFjcm8oU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhQdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RF
eGl0KSBcCiAgICAgbWFjcm8oQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlRG9lc05vdEV4aXQgfCBOb2RlUmVzdWx0U3RvcmFnZSkgXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2
Myw3IEBACiAjaW5jbHVkZSAiREZHVW5pZmljYXRpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRGR1Zh
bGlkYXRlLmgiCiAjaW5jbHVkZSAiREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgi
CisjaW5jbHVkZSAiREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oIgogI2luY2x1
ZGUgIkRGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCIKICNpbmNsdWRlICJEZWJ1Z2dlci5o
IgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgpAQCAtMjMzLDYgKzIzNCw3IEBAIFBsYW46
OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpjb21waWxlSW5UaHIKICAgICBwZXJmb3JtQmFja3dhcmRz
UHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtUHJlZGljdGlvblByb3BhZ2F0aW9uKGRmZyk7
CiAgICAgcGVyZm9ybUZpeHVwKGRmZyk7CisgICAgcGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nKGRmZyk7CiAgICAgcGVyZm9ybUludmFsaWRhdGlvblBvaW50SW5qZWN0aW9uKGRmZyk7
CiAgICAgcGVyZm9ybVR5cGVDaGVja0hvaXN0aW5nKGRmZyk7CiAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdh
dGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3Niw3ICs1NzYsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNldEFyZ3VtZW50OgogICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToK
LSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2Fz
ZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICAgICAgY2Fz
ZSBUZWFyT2ZmQWN0aXZhdGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDIyICsy
NzUsMjYgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgICAg
ICByZXR1cm4gbm9kZS0+YXJyYXlNb2RlKCkubW9kZUZvclB1dCgpLmFscmVhZHlDaGVja2VkKAog
ICAgICAgICAgICAgZ3JhcGgsIG5vZGUsIHN0YXRlLmZvck5vZGUoZ3JhcGgudmFyQXJnQ2hpbGQo
bm9kZSwgMCkpKTsKIAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0g
ICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmlzU3Vic2V0T2YoCi0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+
c3RydWN0dXJlKCkpKTsKLSAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2Fz
ZSBQaGFudG9tUHV0U3RydWN0dXJlOgogICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6
CiAgICAgY2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgotICAgICAgICByZXR1cm4gc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJz
ZXRPZigKLSAgICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSk7CisgICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKAorICAgICAgICAgICAgU3Ry
dWN0dXJlU2V0KG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMpKTsKICAgICAgICAgCiAgICAg
Y2FzZSBHZXRCeU9mZnNldDoKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OgotICAg
IGNhc2UgUHV0QnlPZmZzZXQ6Ci0gICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1ZhbGlkT2Zmc2V0KAotICAgICAgICAg
ICAgZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4
KCldLm9mZnNldCk7CisgICAgY2FzZSBQdXRCeU9mZnNldDogeworICAgICAgICBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3Ry
dWN0dXJlOworICAgICAgICBpZiAodmFsdWUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ3JhcGgubV9zdG9yYWdlQWNj
ZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLm9mZnNldDsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gdmFsdWUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAo
IXZhbHVlW2ldLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAg
CiAgICAgY2FzZSBMYXN0Tm9kZVR5cGU6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2OTcsMjkgKzM2OTcsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDogewotICAgICAgICAvLyBUaGVyZSBpcyBhIGZhc2NpbmF0aW5n
IHF1ZXN0aW9uIGhlcmUgb2Ygd2hhdCB0byBkbyBhYm91dCBhcnJheSBwcm9maWxpbmcuCi0gICAg
ICAgIC8vIFdlICpjb3VsZCogdHJ5IHRvIHRlbGwgdGhlIE9TUiBleGl0IGFib3V0IHdoZXJlIHRo
ZSBiYXNlIG9mIHRoZSBhY2Nlc3MgaXMuCi0gICAgICAgIC8vIFRoZSBERkcgd2lsbCBoYXZlIGtl
cHQgaXQgYWxpdmUsIHRob3VnaCBpdCBtYXkgbm90IGJlIGluIGEgcmVnaXN0ZXIsIGFuZAotICAg
ICAgICAvLyB3ZSBzaG91bGRuJ3QgcmVhbGx5IGxvYWQgaXQgc2luY2UgdGhhdCBjb3VsZCBiZSBh
IHdhc3RlLiBGb3Igbm93IHRob3VnaCwKLSAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRo
ZSBmYWN0IHRoYXQgd2hlbiBhIHdhdGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKLSAgICAgICAg
Ly8gcXVpdGUgYSBoaW50IGFscmVhZHkuCi0gICAgICAgIAotICAgICAgICBtX2ppdC5hZGRXZWFr
UmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgCi0jaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoUHRyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCBUcnVzdGVkSW1tUHRyKG5vZGUtPnN0cnVjdHVyZSgpKSk7
Ci0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgaXNPSy5saW5rKCZtX2ppdCk7
Ci0jZWxzZQotICAgICAgICBzcGVjdWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsKLSNlbmRpZgot
Ci0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAg
IAogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZTogewogICAgICAgICBBU1NFUlQoaXNLbm93
bkNlbGwobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIG1faml0LmppdENvZGUoKS0+
Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5t
X3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTY5MjAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzc2NywzMiArMzc2Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgIC8vIFRoZXJl
IGlzIGEgZmFzY2luYXRpbmcgcXVlc3Rpb24gaGVyZSBvZiB3aGF0IHRvIGRvIGFib3V0IGFycmF5
IHByb2ZpbGluZy4KLSAgICAgICAgLy8gV2UgKmNvdWxkKiB0cnkgdG8gdGVsbCB0aGUgT1NSIGV4
aXQgYWJvdXQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIGFjY2VzcyBpcy4KLSAgICAgICAgLy8gVGhl
IERGRyB3aWxsIGhhdmUga2VwdCBpdCBhbGl2ZSwgdGhvdWdoIGl0IG1heSBub3QgYmUgaW4gYSBy
ZWdpc3RlciwgYW5kCi0gICAgICAgIC8vIHdlIHNob3VsZG4ndCByZWFsbHkgbG9hZCBpdCBzaW5j
ZSB0aGF0IGNvdWxkIGJlIGEgd2FzdGUuIEZvciBub3cgdGhvdWdoLAotICAgICAgICAvLyB3ZSds
bCBqdXN0IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3aGVuIGEgd2F0Y2hwb2ludCBmaXJlcyB0aGVu
IHRoYXQncwotICAgICAgICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFkeS4KLQotICAgICAgICBtX2pp
dC5hZGRXZWFrUmVmZXJlbmNlKG5vZGUtPnN0cnVjdHVyZSgpKTsKLQotI2lmICFBU1NFUlRfRElT
QUJMRUQKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxk
MSgpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9IG1faml0LmJyYW5jaFN0cnVj
dHVyZVB0cigKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpFcXVhbCwgCi0gICAgICAgICAgICBK
SVRDb21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQo
KSksIAotICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBtX2ppdC5icmVh
a3BvaW50KCk7Ci0gICAgICAgIGlzT0subGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChub2RlLT5jaGlsZDEoKSk7Ci0jZW5kaWYKLSAgICAgICAgCi0gICAgICAgIG5v
UmVzdWx0KG5vZGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgIAogICAgIGNhc2Ug
UGhhbnRvbVB1dFN0cnVjdHVyZTogewogICAgICAgICBBU1NFUlQoaXNLbm93bkNlbGwobm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSk7CiAgICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlm
eUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0
LmNvZGVCbG9jaygpLCBub2RlKTsKQEAgLTM4MDEsOCArMzc3NSw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgUHV0
U3RydWN0dXJlOiB7Ci0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZTsKLSAgICAgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0
cnVjdHVyZTsKKyAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzOworICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG5vZGUt
PnRyYW5zaXRpb24oKS0+bmV4dDsKIAogICAgICAgICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5u
b3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1faml0LmdyYXBoKCkubV9wbGFuLCBt
X2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDI5OCw3ICs0Mjk4LDcgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4
cEV4ZWMoTgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAg
IGlmIChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRl
cigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpA
QCAtNDMxOCw4ICs0MzE4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRl
UHJvcAogICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgc2NyYXRj
aEdQUjEgPSBzY3JhdGNoMS5ncHIoKTsKICAgICAgICAgCi0gICAgQVNTRVJUKCFub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0
eSgpKTsKLSAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNhcGFjaXR5ID09IG5vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsK
KyAgICBBU1NFUlQoIW5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPm91dE9mTGluZUNhcGFj
aXR5KCkpOworICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgPT0gbm9kZS0+dHJh
bnNpdGlvbigpLT5uZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKICAgICAKICAgICBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aCA9CiAgICAgICAgIGVtaXRBbGxvY2F0ZUJhc2ljU3RvcmFnZSgK
QEAgLTQzMzcsMTEgKzQzMzcsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9j
YXRlUHJvcAogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZShOb2RlKiBub2RlKQogewotICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS0+c3RydWN0
dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSAqIHNpemVvZihKU1ZhbHVlKTsKKyAgICBzaXplX3Qgb2xkU2l6ZSA9IG5vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CiAg
ICAgc2l6ZV90IG5ld1NpemUgPSBvbGRTaXplICogb3V0T2ZMaW5lR3Jvd3RoRmFjdG9yOwotICAg
IEFTU0VSVChuZXdTaXplID09IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKKyAgICBBU1NF
UlQobmV3U2l6ZSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5
KCkgKiBzaXplb2YoSlNWYWx1ZSkpOwogCi0gICAgaWYgKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsK
KyAgICBpZiAobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291bGRIYXZlSW5kZXhpbmdI
ZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzExNSw3ICszMTE1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZQogICAgIFN0cnVjdHVyZSogc3RyaW5n
T2JqZWN0U3RydWN0dXJlID0KICAgICAgICAgbV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG1fY3VycmVu
dE5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAgIAot
ICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
U3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKSB7CisgICAgaWYg
KCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVT
ZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpIHsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjaygK
ICAgICAgICAgICAgIE5vdFN0cmluZ09iamVjdCwgSlNWYWx1ZVJlZ3MoKSwgMCwKICAgICAgICAg
ICAgIG1faml0LmJyYW5jaFN0cnVjdHVyZVB0cigKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNv
bnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIDogbV9zZXQob3RoZXIubV9z
ZXQpCit7CisgICAgc2V0Q2xvYmJlcmVkKG90aGVyLmlzQ2xvYmJlcmVkKCkpOworfQorCitTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlJiBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj0oY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgbV9zZXQgPSBvdGhlci5t
X3NldDsKKyAgICBzZXRDbG9iYmVyZWQob3RoZXIuaXNDbG9iYmVyZWQoKSk7CisgICAgcmV0dXJu
ICp0aGlzOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3AoKQorewor
ICAgIG1fc2V0LmRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOworICAgIG1fc2V0Lm1f
cG9pbnRlciA9IHRvcFZhbHVlOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFz
c2VydElzV2F0Y2hlZChHcmFwaCYgZ3JhcGgpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTsp
CisgICAgICAgIGdyYXBoLmFzc2VydElzV2F0Y2hlZChhdChpKSk7Cit9CisKK3ZvaWQgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigpCit7CisgICAgLy8gVGhlIHByZW1pc2Ugb2YgdGhp
cyBhcHByb2FjaCB0byBjbG9iYmVyaW5nIGlzIHRoYXQgYW55dGltZSB3ZSBpbnRyb2R1Y2UKKyAg
ICAvLyBhIHdhdGNoYWJsZSBzdHJ1Y3R1cmUgaW50byBhbiBhYnN0cmFjdCB2YWx1ZSwgd2Ugd2F0
Y2hwb2ludCBpdC4gWW91IGNhbiBhc3NlcnQKKyAgICAvLyB0aGF0IHRoaXMgaG9sZHMgYnkgY2Fs
bGluZyBhc3NlcnRJc1dhdGNoZWQoKS4KKyAgICAgICAgCisgICAgaWYgKGlzVG9wKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHNldENsb2JiZXJlZCh0cnVlKTsKKyAgICAgICAgCisgICAgaWYg
KG1fc2V0LmlzVGhpbigpKSB7CisgICAgICAgIGlmICghbV9zZXQuc2luZ2xlU3RydWN0dXJlKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChtX3NldC5zaW5nbGVTdHJ1Y3R1cmUo
KS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkKKyAgICAgICAg
ICAgIG1ha2VUb3BXaGVuVGhpbigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAK
KyAgICBTdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3QqIGxpc3QgPSBtX3NldC5zdHJ1Y3R1cmVM
aXN0KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC0+bV9sZW5ndGg7IGktLTspIHsKKyAg
ICAgICAgaWYgKGxpc3QtPmxpc3QoKVtpXS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVu
SW52YWxpZGF0ZWQoKSkgeworICAgICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykKK3sKKyAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9zZXQuY29u
dGFpbnMoZnJvbSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoZnJvbS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKSkgeworICAgICAgICBzZXRDbG9iYmVyZWQo
dHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX3NldC5hZGQo
dG8pKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHlt
b3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZl
Y3RvcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0
cnVjdHVyZVNldCBuZXdTdHJ1Y3R1cmVzOworICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvci5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFtX3NldC5jb250YWlucyh2ZWN0b3JbaV0ucHJl
dmlvdXMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAodmVj
dG9yW2ldLnByZXZpb3VzLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKQor
ICAgICAgICAgICAgc2V0Q2xvYmJlcmVkKHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBuZXdTdHJ1Y3R1cmVzLmFkZCh2ZWN0b3JbaV0ubmV4dCk7CisgICAgfQorICAgIAorICAgIGlm
ICghbV9zZXQubWVyZ2UobmV3U3RydWN0dXJlcykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGltaXQpCisgICAgICAgIG1ha2VUb3Ao
KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIW1fc2V0LmFkZChzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBt
YWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBpZiAo
aXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBtZXJnZU5v
dFRvcChvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAg
ICAgICBtYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAv
LyBJdCBpc24ndCBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgdGhlIGNvZGUgYmVsb3cgaXMgZG9p
bmcgdGhlIHJpZ2h0IHRoaW5nLCBzbyBsZXQncyBnbworICAgIC8vIHRocm91Z2ggaXQuCisgICAg
Ly8KKyAgICAvLyBUaGlzIG5vdCBjbG9iYmVyZWQsIG90aGVyIG5vdCBjbG9iYmVyZWQ6IENsZWFy
bHksIHdlIGRvbid0IHdhbnQgdG8gbWFrZSBhbnl0aGluZyBjbG9iYmVyZWQKKyAgICAvLyBzaW5j
ZSB3ZSBqdXN0IGhhdmUgdHdvIHNldHMgYW5kIHdlIGFyZSBtZXJnaW5nIHRoZW0uIG1lcmdlTm90
VG9wKCkgY2FuIGhhbmRsZSB0aGlzIGp1c3QKKyAgICAvLyBmaW5lLgorICAgIC8vCisgICAgLy8g
VGhpcyBjbG9iYmVyZWQsIG90aGVyIGNsb2JiZXJlZDogQ2xvYmJlcmVkIG1lYW5zIHRoYXQgd2Ug
aGF2ZSBhIHNldCBvZiB0aGluZ3MsIHBsdXMgd2UKKyAgICAvLyB0ZW1wb3JhcmlseSBoYXZlIHRo
ZSBzZXQgb2YgYWxsIHRoaW5ncyBidXQgdGhlIGxhdHRlciB3aWxsIGdvIGF3YXkgb25jZSB3ZSBo
aXQgdGhlIG5leHQKKyAgICAvLyBpbnZhbGlkYXRpb24gcG9pbnQuIFRoaXMgYWxsb3dzIHVzIHRv
IG1lcmdlIHR3byBjbG9iYmVyZWQgc2V0cyB0aGUgbmF0dXJhbCB3YXkuIEZvciBub3cKKyAgICAv
LyB0aGUgc2V0IHdpbGwgc3RpbGwgYmUgVE9QIChhbmQgc28gd2Uga2VlcCB0aGUgY2xvYmJlcmVk
IGJpdCBzZXQpLCBidXQgd2Uga25vdyB0aGF0IGFmdGVyCisgICAgLy8gaW52YWxpZGF0aW9uLCB3
ZSB3aWxsIGhhdmUgdGhlIHVuaW9uIG9mIHRoZSB0aGlzIGFuZCBvdGhlci4KKyAgICAvLworICAg
IC8vIFRoaXMgY2xvYmJlcmVkLCBvdGhlciBub3QgY2xvYmJlcmVkOiBJdCdzIHNhZmUgdG8gbWVy
Z2UgaW4gb3RoZXIgZm9yIGJvdGggYmVmb3JlIGFuZCBhZnRlcgorICAgIC8vIGludmFsaWRhdGlv
biwgc28gbG9uZyBhcyB3ZSBsZWF2ZSB0aGUgY2xvYmJlcmVkIGJpdCBzZXQuIEJlZm9yZSBpbnZh
bGlkYXRpb24gdGhpcyBoYXMgbm8KKyAgICAvLyBlZmZlY3Qgc2luY2UgdGhlIHNldCB3aWxsIHN0
aWxsIGFwcGVhciB0byBoYXZlIGFsbCB0aGluZ3MgaW4gaXQuIFRoZSB3YXkgdG8gdGhpbmsgYWJv
dXQKKyAgICAvLyB3aGF0IGludmFsaWRhdGlvbiB3b3VsZCBkbyBpcyBpbWFnaW5lIGlmIHdlIGhh
ZCBhIHNldCBBIHRoYXQgd2FzIGNsb2JiZXJlZCBhbmQgYSBzZXQgQgorICAgIC8vIHRoYXQgd2Fz
bid0IGFuZCB3ZSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzLiBOb3RlIHRoYXQg
d2UgZXhwZWN0IEEgdG8gYmUgdGhlCisgICAgLy8gc2FtZSBhdCB0aGUgZW5kIGluIGJvdGggY2Fz
ZXM6CisgICAgLy8KKyAgICAvLyAgICAgICAgICAgIEEubWVyZ2UoQikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludmFsaWRhdGlvblBvaW50CisgICAgLy8gICAgICAgICAgICBJbnZhbGlk
YXRpb25Qb2ludCAgICAgICAgICAgICAgICAgICAgICBBLm1lcmdlKEIpCisgICAgLy8KKyAgICAv
LyBUaGUgZmFjdCB0aGF0IHdlIGV4cGVjdCBBIHRvIGJlIHRoZSBzYW1lIGluIGJvdGggY2FzZXMg
bWVhbnMgdGhhdCB3ZSB3YW50IHRvIG1lcmdlIG90aGVyCisgICAgLy8gaW50byB0aGlzIGJ1dCBr
ZWVwIHRoZSBjbG9iYmVyZWQgYml0LgorICAgIC8vCisgICAgLy8gVGhpcyBub3QgY2xvYmJlcmVk
LCBvdGhlciBjbG9iYmVyZWQ6IFRoaXMgaXMganVzdCB0aGUgY29udmVyc2Ugb2YgdGhlIHByZXZp
b3VzIGNhc2UuIFdlCisgICAgLy8gd2FudCB0byBtZXJnZSBvdGhlciBpbnRvIHRoaXMgYW5kIHNl
dCB0aGUgY2xvYmJlcmVkIGJpdC4KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICBpZiAoIWlzQ2xvYmJlcmVkKCkgJiYgb3RoZXIuaXNDbG9iYmVyZWQoKSkgeworICAg
ICAgICBzZXRDbG9iYmVyZWQodHJ1ZSk7CisgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIH0K
KyAgICAKKyAgICBjaGFuZ2VkIHw9IG1lcmdlTm90VG9wKG90aGVyLm1fc2V0KTsKKyAgICAKKyAg
ICByZXR1cm4gY2hhbmdlZDsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJn
ZU5vdFRvcChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQoreworICAgIGlmICghbV9zZXQubWVy
Z2Uob3RoZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNp
emUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGNv
bnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAg
bV9zZXQgPSBvdGhlcjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXND
bG9iYmVyZWQoKSkgeworICAgICAgICAvLyBXZSBoYXZlIHR3byBjaG9pY2VzIGhlcmU6CisgICAg
ICAgIC8vCisgICAgICAgIC8vIERvIG5vdGhpbmc6IEl0J3MgbGVnYWwgdG8ga2VlcCBvdXIgc2V0
IGludGFjdCwgd2hpY2ggd291bGQgZXNzZW50aWFsbHkgbWVhbiB0aGF0IGZvcgorICAgICAgICAv
LyBub3csIG91ciBzZXQgd291bGQgYmVoYXZlIGxpa2UgVE9QIGJ1dCBhZnRlciB0aGUgbmV4dCBp
bnZhbGlkYXRpb24gcG9pbnQgaXQgd29sZCBiZQorICAgICAgICAvLyBhIGZpbml0ZSBzZXQgYWdh
aW4uIFRoaXMgbWF5IGJlIGEgZ29vZCBjaG9pY2UgaWYgJ290aGVyJyBpcyBtdWNoIGJpZ2dlciB0
aGFuIG91cgorICAgICAgICAvLyBtX3NldC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmVwbGFj
ZSBtX3NldCB3aXRoIG90aGVyIGFuZCBjbGVhciB0aGUgY2xvYmJlciBiaXQ6IFRoaXMgaXMgYWxz
byBsZWdhbCwgYW5kIG1lYW5zIHRoYXQKKyAgICAgICAgLy8gd2UncmUgbm8gbG9uZ2VyIGNsb2Ji
ZXJlZC4gVGhpcyBpcyB1c3VhbGx5IGJldHRlciBiZWNhdXNlIGl0IGltbWVkaWF0ZWx5IGdpdmVz
IHVzIGEKKyAgICAgICAgLy8gc21hbGxlciBzZXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRo
aXMgc2NlbmFyaW8gc2hvdWxkIGNvbWUgdXAgcmFyZWx5LiBXZSB1c3VhbGx5IGRvbid0IGRvIGFu
eXRoaW5nIHRvIGFuIGFic3RyYWN0IHZhbHVlCisgICAgICAgIC8vIGFmdGVyIGl0IGlzIGNsb2Ji
ZXJlZC4gQnV0IHdlIGFwcGx5IHNvbWUgaGV1cmlzdGljcy4KKyAgICAgICAgCisgICAgICAgIGlm
IChvdGhlci5zaXplKCkgPiBtX3NldC5zaXplKCkgKyBjbG9iYmVyZWRTdXByZW1hY3lUaHJlc2hv
bGQpCisgICAgICAgICAgICByZXR1cm47IC8vIEtlZXAgdGhlIGNsb2JiZXJlZCBzZXQuCisgICAg
ICAgIAorICAgICAgICBtX3NldCA9IG90aGVyOworICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2Up
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fc2V0LmZpbHRlcihvdGhlcik7
Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKG90aGVyLmlzQ2xvYmJlcmVkKCkpIHsKKyAgICAgICAg
aWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAo
IWlzQ2xvYmJlcmVkKCkpIHsKKyAgICAgICAgICAgIC8vIFNlZSBqdXN0aWZpY2F0aW9uIGluIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKSwgYWJvdmUuIEFuIHVuY2xvYmJlcmVkIHNldCBpcwor
ICAgICAgICAgICAgLy8gYWxtb3N0IGFsd2F5cyBiZXR0ZXIuCisgICAgICAgICAgICBpZiAobV9z
ZXQuc2l6ZSgpID4gb3RoZXIubV9zZXQuc2l6ZSgpICsgY2xvYmJlcmVkU3VwcmVtYWN5VGhyZXNo
b2xkKQorICAgICAgICAgICAgICAgICp0aGlzID0gb3RoZXI7IC8vIEtlZXAgdGhlIGNsb2JiZXJl
ZCBzZXQuCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3NldC5m
aWx0ZXIob3RoZXIubV9zZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGZp
bHRlcihvdGhlci5tX3NldCk7Cit9CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIENvbmZvcm1zVG9U
eXBlIHsKK3B1YmxpYzoKKyAgICBDb25mb3Jtc1RvVHlwZShTcGVjdWxhdGVkVHlwZSB0eXBlKQor
ICAgICAgICA6IG1fdHlwZSh0eXBlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKHNw
ZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpICYgbV90eXBlKTsKKyAgICB9Citwcml2
YXRlOgorICAgIFNwZWN1bGF0ZWRUeXBlIG1fdHlwZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihTcGVjdWxhdGVk
VHlwZSB0eXBlKQoreworICAgIGlmICghKHR5cGUgJiBTcGVjQ2VsbCkpIHsKKyAgICAgICAgY2xl
YXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIENvbmZvcm1zVG9UeXBlIGNvbmZvcm1zVG9UeXBlKHR5
cGUpOworICAgIG1fc2V0LmdlbmVyaWNGaWx0ZXIoY29uZm9ybXNUb1R5cGUpOworfQorCitib29s
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBj
b25zdAoreworICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5jb250YWlucyhzdHJ1Y3R1cmUpOworfQor
Citib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yo
b3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YoY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9w
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzQ2xvYmJlcmVkKCkgPT0gb3Ro
ZXIuaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIu
bV9zZXQpOworICAgIAorICAgIC8vIEhlcmUgaXQgZ2V0cyB0cmlja3kuIElmIGluIGRvdWJ0LCBy
ZXR1cm4gZmFsc2UhCisgICAgCisgICAgaWYgKGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsgLy8gQSBjbG9iYmVyZWQgc2V0IGlzIG5ldmVyIGEgc3Vic2V0IG9mIGFuIHVuY2xv
YmJlcmVkIHNldC4KKyAgICAKKyAgICAvLyBBbiB1bmNsb2JiZXJlZCBzZXQgaXMgY3VycmVudGx5
IGEgc3Vic2V0IG9mIGEgY2xvYmJlcmVkIHNldCwgYnV0IGl0IG1heSBub3QgYmUgc28gYWZ0ZXIK
KyAgICAvLyBpbnZhbGlkYXRpb24uCisgICAgcmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIu
bV9zZXQpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJzZXRPZihj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAgIGlmIChpc1RvcCgpIHx8IGlz
Q2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3Nl
dC5pc1N1cGVyc2V0T2Yob3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKGlz
VG9wKCkgfHwgaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAg
cmV0dXJuIG1fc2V0Lm92ZXJsYXBzKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjpvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAob3RoZXIuaXNUb3AoKSB8fCBvdGhlci5pc0Nsb2JiZXJlZCgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gb3ZlcmxhcHMob3RoZXIubV9zZXQp
OworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yPT0oY29uc3QgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fc2V0Lm1fcG9p
bnRlciA9PSBvdGhlci5tX3NldC5tX3BvaW50ZXIpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIGlmIChpc1RvcCgpIHx8IG90aGVyLmlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsgLy8gVGhleSBjYW4ndCBiZSBib3RoIHRvcCBiZWNhdXNlIHRoZW4gdGhlaXIgcG9pbnRlciB2
YWx1ZXMgd291bGQgaGF2ZSBiZWVuIGlkZW50aWNhbCwgYWJvdmUuCisgICAgCisgICAgcmV0dXJu
IG1fc2V0ID09IG90aGVyLm1fc2V0CisgICAgICAgICYmIGlzQ2xvYmJlcmVkKCkgPT0gb3RoZXIu
aXNDbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAorewor
ICAgIGlmIChpc0Nsb2JiZXJlZCgpKQorICAgICAgICBvdXQucHJpbnQoIkNsb2JiZXJlZDoiKTsK
KyAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBl
bHNlCisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9zZXQsIGNvbnRleHQpKTsKK30KKwor
dm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJl
dmlzaW9uIDE2OTIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR1RyYW5z
aXRpb24uaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5o
IgogI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBAIC0zNywzMDAgKzM4LDEzOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUg
ewogcHVibGljOgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQotICAgICAgICA6IG1fc3Ry
dWN0dXJlKDApCi0gICAgewotICAgIH0KLSAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
KCkgeyB9CiAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
LSAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChzZXQuc2l6ZSgpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAg
ICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc2V0WzBdOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gdG9wVmFsdWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgfQotICAgIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1
cmUgPSAwOwotICAgIH0KLSAgICAKLSAgICB2b2lkIG1ha2VUb3AoKQotICAgIHsKLSAgICAgICAg
bV9zdHJ1Y3R1cmUgPSB0b3BWYWx1ZSgpOwotICAgIH0KLSAgICAKLSAgICBzdGF0aWMgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSB0b3AoKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSB2YWx1ZTsKLSAgICAgICAgdmFsdWUubWFrZVRvcCgpOwotICAgICAgICByZXR1cm4gdmFs
dWU7Ci0gICAgfQotICAgIAotICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICA6IG1fc2V0KHN0cnVjdHVyZSkKICAgICB7Ci0gICAgICAgIEFTU0VSVCghY29udGFpbnMo
c3RydWN0dXJlKSAmJiAhaXNUb3AoKSk7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAg
ICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7CiAgICAgfQotICAgIAotICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQorICAgICAgICA6IG1fc2V0KG90aGVyKQogICAgIHsKLSAgICAgICAgaWYgKGlz
VG9wKCkgfHwgIW90aGVyLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUp
IHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0p
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOwogICAgIAotICAgIGJvb2wgYWRkQWxsKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKCFvdGhl
ci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGlz
VG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChvdGhlci5pc1Rv
cCgpKSB7Ci0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIGlmICht
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3Bl
cmF0b3I9KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKTsKICAgICAKLSAgICBi
b29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHZvaWQgY2xlYXIo
KQogICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fc2V0LmNsZWFyKCk7Cisg
ICAgICAgIHNldENsb2JiZXJlZChmYWxzZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNTdWJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9zdHJ1
Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNv
bnRhaW5zKG1fc3RydWN0dXJlKTsKLSAgICB9CisgICAgdm9pZCBtYWtlVG9wKCk7CiAgICAgCi0g
ICAgYm9vbCBkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmU7Ci0gICAgfQorI2lmIEFT
U0VSVF9ESVNBQkxFRAorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3QgeyB9
CisjZWxzZQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CisjZW5kaWYK
ICAgICAKLSAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgaWYgKCFvdGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKLSAgICB9CisgICAgdm9p
ZCBjbG9iYmVyKCk7CisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKSB7IHNldENs
b2JiZXJlZChmYWxzZSk7IH0KICAgICAKLSAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAob3RoZXIu
aXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoaXNUb3AoKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0g
ICAgICAgICAgICBpZiAob3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICB2b2lkIG9i
c2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0byk7CisgICAgdm9p
ZCBvYnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvblZlY3RvciYpOwogICAgIAotICAg
IGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vic2V0T2YoKnRoaXMpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQotICAg
IHsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAgICAgICAgICBzd2l0Y2ggKG90aGVyLnNp
emUoKSkgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIG1fc3RydWN0dXJl
ID0gMDsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlclswXTsKLSAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZmlsdGVy
KFNwZWN1bGF0ZWRUeXBlIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKCEob3RoZXIgJiBTcGVj
Q2VsbCkpIHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChpc0NsZWFyT3JUb3AoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1
Y3R1cmUpICYgb3RoZXIpKQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KLSAg
ICAKLSAgICBib29sIGlzQ2xlYXIoKSBjb25zdAorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlIHRvcCgpCiAgICAgewotICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlOwotICAgIH0K
LSAgICAKLSAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gdG9w
VmFsdWUoKTsgfQorICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2xlYXIoKSBjb25zdCB7IHJldHVybiBtX3Nl
dC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zZXQubV9w
b2ludGVyID09IHRvcFZhbHVlOyB9CisgICAgYm9vbCBpc05laXRoZXJDbGVhck5vclRvcCgpIGNv
bnN0IHsgcmV0dXJuICFpc0NsZWFyKCkgJiYgIWlzVG9wKCk7IH0KKyAgICAKKyAgICAvLyBBIGNs
b2JiZXJlZCBhYnN0cmFjdCB2YWx1ZSBtZWFucyB0aGF0IHRoZSBzZXQgY3VycmVudGx5IGNvbnRh
aW5zIHRoZSBtX3NldCBzZXQgb2YKKyAgICAvLyBzdHJ1Y3R1cmVzIHBsdXMgVE9QLCBleGNlcHQg
dGhhdCBUT1Agd2lsbCBnbyBhd2F5IGF0IHRoZSBuZXh0IGludmFsaWRhdGlvbiBwb2ludC4gTm90
ZQorICAgIC8vIHRoYXQgaW50dWl0aXZlbHkgeW91IGNhbiBzb21ldGltZXMgdGhpbmsgb2YgdGhp
cyBhcyAidGhlIHNldCBvZiBzdHJ1Y3R1cmVzIGluIG1fc2V0IHBsdXMKKyAgICAvLyB0aGUgc2V0
IG9mIHN0cnVjdHVyZXMgdHJhbnNpdGlvbi1yZWFjaGFibGUgZnJvbSBtX3NldCIgLSBidXQgdGhp
cyBpc24ndCByZWFsbHkgY29ycmVjdCwKKyAgICAvLyBzaW5jZSBpZiB3ZSBhZGQgYW4gdW53YXRj
aGFibGUgc3RydWN0dXJlIGFmdGVyIGNsb2JiZXJpbmcsIHRoZSB0d28gZGVmaW5pdGlvbnMgYXJl
IG5vdAorICAgIC8vIGVxdWl2YWxlbnQuIElmIHdlIGRvIHRoaXMsIHRoZSBuZXcgdW53YXRjaGFi
bGUgc3RydWN0dXJlIHdpbGwgYmUgYWRkZWQgdG8gbV9zZXQuCisgICAgLy8gSW52YWxpZGF0aW9u
IHBvaW50cyBkbyBub3QgdHJ5IHRvICJjbGlwIiB0aGUgc2V0IG9mIHRyYW5zaXRpb24tcmVhY2hh
YmxlIHN0cnVjdHVyZXMgZnJvbQorICAgIC8vIG1fc2V0IGJ5IGxvb2tpbmcgYXQgcmVhY2hhYmls
aXR5IGFzIHRoaXMgd291bGQgbWVhbiB0aGF0IHRoZSBuZXcgc2V0IGlzIFRPUC4gSW5zdGVhZCB0
aGV5CisgICAgLy8gbGl0ZXJhbGx5IGFzc3VtZSB0aGF0IHRoZSBzZXQgaXMganVzdCBtX3NldCBy
YXRoZXIgdGhhbiBUT1AuCisgICAgYm9vbCBpc0Nsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2V0LmdldFJlc2VydmVkRmxhZygpOyB9CisgICAgCisgICAgYm9vbCBhZGQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpOworICAgIAorICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cik7CisgICAgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcik7
CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7CisgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOworICAgIHZvaWQgZmls
dGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpOwogICAgIAotICAgIGJvb2wgaXNDbGVhck9yVG9wKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPD0gdG9wVmFsdWUoKTsgfQotICAgIGJvb2wgaXNO
ZWl0aGVyQ2xlYXJOb3JUb3AoKSBjb25zdCB7IHJldHVybiAhaXNDbGVhck9yVG9wKCk7IH0KKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNv
bnN0OwogICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VCghaXNUb3AoKSk7Ci0gICAgICAgIHJldHVybiAhIW1fc3RydWN0dXJlOworICAgICAgICByZXR1
cm4gbV9zZXQuc2l6ZSgpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBp
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAgICAgQVNTRVJU
KG1fc3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7Ci0gICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmF0KGkpOwogICAgIH0KICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gYXQoaSk7Ci0gICAgfQorICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXpl
X3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIGxhc3Qo
KSBjb25zdAorICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgYWxsIHVzZXMgb2YgdGhpcyBtZXRob2Qu
IFRoZXJlIHNob3VsZG4ndCBiZSBhbnkKKyAgICAvLyBzcGVjaWFsLWNhc2luZyBmb3IgdGhlIG9u
ZS1zdHJ1Y3R1cmUgY2FzZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMzMjI5CisgICAgU3RydWN0dXJlKiBvbmx5U3RydWN0dXJlKCkgY29uc3QKICAg
ICB7CisgICAgICAgIGlmIChpc1RvcCgpIHx8IHNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBhdCgwKTsKICAgICB9CiAgICAgCi0gICAgU3Bl
Y3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKLSAgICAgICAg
aWYgKGlzQ2xlYXIoKSkKLSAgICAgICAgICAgIHJldHVybiBTcGVjTm9uZTsKLSAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSk7Ci0gICAgfQorICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpc1ZhbGlkT2Zm
c2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpOwotICAgIH0KKyAgICAvLyBUaGUgbWV0aG9kcyBiZWxvdyBhcmUgYWxsIGNv
bnNlcnZhdGl2ZSBhbmQgZXJyIG9uIHRoZSBzaWRlIG9mIG1ha2luZyAndGhpcycgYXBwZWFyIGJp
Z2dlcgorICAgIC8vIHRoYW4gaXQgaXMuIEZvciBleGFtcGxlLCBjb250YWlucygpIG1heSByZXR1
cm4gdHJ1ZSBpZiB0aGUgc2V0IGlzIGNsb2JiZXJlZCBvciBUT1AuCisgICAgLy8gaXNTdWJzZXRP
ZigpIG1heSByZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBhbWJpZ3VpdGllcy4gVGhlcmVmb3JlIHlv
dSBzaG91bGQgb25seSBwZXJmb3JtCisgICAgLy8gb3B0aW1pemF0aW9ucyBhcyBhIGNvbnNlcXVl
bmNlIG9mIHRoZSAidGhpcyBpcyBzbWFsbGVyIiByZXR1cm4gdmFsdWUgLSBzbyBmYWxzZSBmb3IK
KyAgICAvLyBjb250YWlucygpLCB0cnVlIGZvciBpc1N1YnNldE9mKCksIGZhbHNlIGZvciBpc1N1
cGVyc2V0T2YoKSwgYW5kIGZhbHNlIGZvciBvdmVybGFwcygpLgorCisgICAgYm9vbCBjb250YWlu
cyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBoYXNTaW5nbGV0
b24oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTmVpdGhlckNsZWFyTm9yVG9wKCk7
Ci0gICAgfQorICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBj
b25zdDsKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpIGNvbnN0OwogICAgIAotICAgIFN0cnVjdHVyZSogc2luZ2xldG9uKCkgY29uc3QKKyAg
ICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKKyAg
ICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc05laXRoZXJDbGVhck5vclRvcCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRP
ZigqdGhpcyk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0
cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICB9CisgICAgYm9vbCBvdmVybGFwcyhj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAKLSAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0
Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgY2xvYmJlcmVkRmxhZyA9IFN0
cnVjdHVyZVNldDo6cmVzZXJ2ZWRGbGFnOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdG9w
VmFsdWUgPSBTdHJ1Y3R1cmVTZXQ6OnJlc2VydmVkVmFsdWU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHBvbHltb3JwaGlzbUxpbWl0ID0gMTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNsb2JiZXJlZFN1cHJlbWFjeVRocmVzaG9sZCA9IDI7CisgICAgCisgICAgdm9pZCBtYWtlVG9w
V2hlblRoaW4oKQogICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIG91
dC5wcmludCgiVE9QIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIG91dC5wcmludCgiWyIpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAg
ICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwotICAg
ICAgICBvdXQucHJpbnQoIl0iKTsKKyAgICAgICAgQVNTRVJUKG1fc2V0LmlzVGhpbigpKTsKKyAg
ICAgICAgbV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7CiAgICAgfQotCi0gICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgCisgICAgYm9vbCBtZXJnZU5vdFRvcChjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKKyAgICAKKyAgICB2b2lkIHNldENsb2JiZXJlZChib29s
IGNsb2JiZXJlZCkKICAgICB7Ci0gICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICAg
ICAgQVNTRVJUKCFpc1RvcCgpIHx8ICFjbG9iYmVyZWQpOworICAgICAgICBtX3NldC5zZXRSZXNl
cnZlZEZsYWcoY2xvYmJlcmVkKTsKICAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIFN0cnVj
dHVyZSogdG9wVmFsdWUoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEp
OyB9Ci0gICAgCi0gICAgLy8gTkIuIFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9y
LgogICAgIAotICAgIC8vIFRoaXMgY2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0cnVjdHVyZSBhdCBh
IHRpbWUuCi0gICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmVTZXQgbV9z
ZXQ7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgVHJhbnNpdGlvbjo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQocHJldmlvdXMsIGNvbnRleHQpLCAiIC0+ICIsIHBv
aW50ZXJEdW1wSW5Db250ZXh0KG5leHQsIGNvbnRleHQpKTsKK30KKwordm9pZCBUcmFuc2l0aW9u
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQs
IDApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9u
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVHJhbnNpdGlvbl9oCisjZGVm
aW5lIERGR1RyYW5zaXRpb25faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBTdHJ1Y3R1cmU7CitzdHJ1Y3QgRHVtcENvbnRleHQ7CisKK25hbWVzcGFj
ZSBERkcgeworCitzdHJ1Y3QgVHJhbnNpdGlvbiB7CisgICAgU3RydWN0dXJlKiBwcmV2aW91czsK
KyAgICBTdHJ1Y3R1cmUqIG5leHQ7CisgICAgCisgICAgVHJhbnNpdGlvbigpCisgICAgICAgIDog
cHJldmlvdXMobnVsbHB0cikKKyAgICAgICAgLCBuZXh0KG51bGxwdHIpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBUcmFuc2l0aW9uKFN0cnVjdHVyZSogcHJldmlvdXMsIFN0cnVjdHVyZSogbmV4
dCkKKyAgICAgICAgOiBwcmV2aW91cyhwcmV2aW91cykKKyAgICAgICAgLCBuZXh0KG5leHQpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
fTsKKwordHlwZWRlZiBWZWN0b3I8VHJhbnNpdGlvbiwgMz4gVHJhbnNpdGlvblZlY3RvcjsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
KyNlbmRpZiAvLyBERkdUcmFuc2l0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShyZXZpc2lv
biAxNjkyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJbkJsb2Nr
IDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAgICBOb2Rl
KiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAgICAgc3dpdGNo
IChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAg
ICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7CisgICAg
ICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICAgICAgICAgICAgICBO
b2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yODUsMTMgKzI4NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZVNl
dCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9k
ZS0+Y2hpbGQxKCkgIT0gc291cmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJl
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTMz
MSw3ICszMjMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0Ogog
ICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CkBAIC0zODYsMTMgKzM3Nyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2tBY2NvdW50aW5nRm9yQXJyYXlNb2Rl
KHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hl
Y2tBY2NvdW50aW5nRm9yQXJyYXlNb2RlKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1
ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhh
c2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAid2F0Y2hhYmxl
IHN0cnVjdHVyZSB3YXRjaGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigp
CisgICAgeworICAgICAgICAvLyBUaGVzZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVkZWQgdG8g
cGxhY2F0ZSBzdWJzZXF1ZW50IGFzc2VydGlvbnMuIFdlIGNvbid0IGFjdHVhbGx5CisgICAgICAg
IC8vIGhhdmUgdG8gd2F0Y2ggdGhlc2UgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8gdHJhbnNp
dGlvbiBhd2F5IGZyb20gaXQsIGJ1dCB0aGV5IGFyZQorICAgICAgICAvLyB3YXRjaGFibGUgYW5k
IHNvIHdlIHdpbGwgYXNzZXJ0IGlmIHRoZXkgYXJlbid0IHdhdGNoZWQuCisgICAgICAgIHRyeVdh
dGNoKG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOyAKKyAgICAgICAgdHJ5V2F0
Y2gobV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7
IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFw
aC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBub2Rl
SW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkgeworICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50
OgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICB0
cnlXYXRjaChub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6Cisg
ICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmV4ZWN1dGFibGUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0
cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcnJheWlmeVRvU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2Jq
ZWN0OgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRvbVB1dFN0
cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgor
ICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUt
Pm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAg
ICAgICB0cnlXYXRjaCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVy
ZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhh
dmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3
YXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1
c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCisgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJp
YW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQub2xkU3RydWN0dXJlKCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRW
YXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNo
KHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIE5ld0FycmF5OgorICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Cisg
ICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxs
b2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdUeXBlZEFy
cmF5OgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT50eXBlZEFycmF5U3RydWN0dXJlKG5vZGUtPnR5cGVk
QXJyYXlUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVG9TdHJpbmc6CisgICAgICAgICAgICAgICAg
ICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZh
dGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBo
Lmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHRyeVdhdGNoKEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAg
ICB0cnlXYXRjaCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5V2F0
Y2goSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKGNlbGwpCisgICAgICAgICAgICB0
cnlXYXRjaChjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5V2F0
Y2goY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgdHJ5V2F0Y2goc2V0W2ldKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZh
bGlkKCkpCisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHN0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgfQorfTsKKworYm9vbCBwZXJm
b3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgV2F0Y2hhYmxlIFN0cnVjdHVyZSBXYXRjaGlu
ZyIpOworICAgIHJldHVybiBydW5QaGFzZTxXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2V0IHdhdGNocG9pbnRzIG9u
IGFueSBzdHJ1Y3R1cmVzIHRoYXQgd2Uga25vdyBvZiB0aGF0IGFyZSBjdXJyZW50bHkgd2F0Y2hh
YmxlLiBJdCdzCisvLyBzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlLCBidXQgdGhpcyBlbmRzIHVw
IGJlaW5nIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZlY3RpdmUgd2F5CisvLyBvZiByZWR1Y2lu
ZyBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRlcm1pbmFsIHN0cnVjdHVyZXM6CisvLworLy8gLSBXZSB1
c2VkIHRvIG9ubHkgc2V0IHdhdGNocG9pbnRzIG9uIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzIGlmIHdl
IGtuZXcgdGhhdCB0aGlzIHdvdWxkCisvLyAgIHJlbW92ZSBhIHN0cnVjdHVyZSBjaGVjay4gRXhw
ZXJpbWVudHMgc2hvdyB0aGF0IHN3aXRjaGluZyBmcm9tIHRoYXQsIHRvIGJsaW5kbHkKKy8vICAg
c2V0dGluZyB3YXRjaHBvaW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMsIHdhcyBub3Qg
YSByZWdyZXNzaW9uLgorLy8KKy8vIC0gSXQgbWFrZXMgYWJzdHJhY3QgaW50ZXJwcmV0YXRpb24g
YSB3aG9sZSBsb3QgZWFzaWVyLiBXZSBqdXN0IGFzc3VtZSB0aGF0IHdhdGNoYWJsZQorLy8gICBz
dHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGFueSBvdGhl
ciBsb2dpYy4KKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjkyMDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTksMTMgKzExOSw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRMYXpp
bHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAg
bV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLT5vcCgp
ID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IDogQmFk
Q2FjaGVXYXRjaHBvaW50LAotICAgICAgICAgICAgICAgIG1fbm9kZS0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBhZGRMYXpp
bHkobV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE1NCwxMSArMTQ3LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTdHJpbmdPclN0cmlu
Z09iamVjdFVzZTogewogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1
cmUgPSBnbG9iYWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7CiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IHN0cmluZ09iamVjdFN0cnVj
dHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAg
ICAgQVNTRVJUKG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1ZhbGlkT3JNaXhlZChzdHJpbmdQcm90
b3R5cGVTdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAg
ICAgICAgICBtX25vZGUtPm9yaWdpbi5zZW1hbnRpYywgTm90U3RyaW5nT2JqZWN0LAotICAgICAg
ICAgICAgICAgIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoKSk7CisgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHN0cmlu
Z1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjkyMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxl
KE5vZGUqIAogICAgIGNhc2UgQml0TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKICAgICBj
YXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnQ6CiAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgIGNhc2UgUHV0U3RydWN0dXJl
OgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNjky
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnku
aAkod29ya2luZyBjb3B5KQpAQCAtODIsMTIgKzgyLDE1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FSiwgZnVuY3Rpb25UeXBlKGlu
dFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FSkosIGZ1
bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKFNf
SklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludDY0KSkgXAorICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uLCBmdW5jdGlvblR5cGUodm9pZFR5cGUpKSBcCiAgICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fRUpKSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludDY0LCBp
bnQ2NCwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRU9aRCwgZnVuY3Rpb25U
eXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGRvdWJsZVR5cGUpKSBcCiAgICAg
bWFjcm8oVl9KSVRPcGVyYXRpb25fRU9aSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIs
IGludFB0ciwgaW50MzIsIGludDY0KSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBm
dW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklU
T3BlcmF0aW9uX0VDYiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwK
ICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBp
bnRQdHIsIGludFB0ciwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9a
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0
aW9uX0QsIGZ1bmN0aW9uVHlwZShpbnQzMiwgZG91YmxlVHlwZSkpCiAKIGNsYXNzIEludHJpbnNp
Y1JlcG9zaXRvcnkgOiBwdWJsaWMgQ29tbW9uVmFsdWVzIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjkyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1OCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjb21waWxl
Tm9kZSh1bnNpZ25lZCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIW1fc3RhdGUuaXNW
YWxpZCgpKSB7CisgICAgICAgICAgICBtX291dC50cmFwKCk7CiAgICAgICAgICAgICBtX291dC51
bnJlYWNoYWJsZSgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0z
OTksOSArNDAwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAg
ICAgICAgICAgIGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBj
b21waWxlU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKLSAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tG
dW5jdGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjA5LDEyICsxNjA3LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgY29tcGlsZVN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
KCkKLSAgICB7Ci0gICAgICAgIGFkZFdlYWtSZWZlcmVuY2UobV9ub2RlLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgIHNwZWN1bGF0ZUNlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgfQotICAgIAog
ICAgIHZvaWQgY29tcGlsZUNoZWNrRnVuY3Rpb24oKQogICAgIHsKICAgICAgICAgTFZhbHVlIGNl
bGwgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwpAQCAtMTcwMCw4ICsxNjkyLDggQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNv
bXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBt
X25vZGUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlOwotICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmU7CisgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzOworICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1f
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVj
dHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkpOwogICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBu
ZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKQEAgLTI3OTEsMjEgKzI3ODMsMTkgQEAg
cHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgp
CiAgICAgewotICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKTsKICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0Nl
bGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBzZXRTdG9yYWdlKGFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgZGF0YS5wcmV2aW91c1N0cnVjdHVyZSkpOworICAg
ICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgbV9ub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSYgZGF0YSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKTsKKyAgICAgICAg
VHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG1fbm9kZS0+dHJhbnNpdGlvbigpOwogICAgICAgICBM
VmFsdWUgb2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVl
IG9sZFN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAKICAg
ICAgICAgc2V0U3RvcmFnZSgKICAgICAgICAgICAgIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uo
Ci0gICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCBkYXRhLnByZXZpb3VzU3RydWN0
dXJlLCBkYXRhLm5ld1N0cnVjdHVyZSkpOworICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3Rv
cmFnZSwgdHJhbnNpdGlvbi0+cHJldmlvdXMsIHRyYW5zaXRpb24tPm5leHQpKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlVG9TdHJpbmcoKQpAQCAtMzIwNyw3ICszMTk3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZENhY2hlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsK
ICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtMzI3OSw3ICszMjY5LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgdGVybWluYXRlKEJhZENhY2hlKTsKKyAgICAgICAgc3Bl
Y3VsYXRlKEJhZENhY2hlLCBub1ZhbHVlKCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsK
ICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNDcxOCw3ICs0NzA4LDggQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5kKQogICAgIHsKLSAg
ICAgICAgc3BlY3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwgMCwgbV9vdXQuYm9vbGVhblRydWUpOwor
ICAgICAgICBzcGVjdWxhdGUoa2luZCwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFu
VHJ1ZSk7CisgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgdHlwZUNoZWNrKApAQCAtNTQ2Myw3ICs1NDU0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RT
dHJ1Y3R1cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSku
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2Jq
ZWN0U3RydWN0dXJlKSkpCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCkBAIC01NjY3
LDkgKzU2NTgsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXhjZXB0aW9uIGNoZWNrIGNvbnRp
bnVhdGlvbiIpKTsKICAgICAgICAgCisgICAgICAgIExWYWx1ZSBleGNlcHRpb24gPSBtX291dC5s
b2FkNjQobV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgICAg
ICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KG1f
b3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZSh2bSgpLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSkpLAot
ICAgICAgICAgICAgcmFyZWx5KG1faGFuZGxlRXhjZXB0aW9ucyksIHVzdWFsbHkoY29udGludWF0
aW9uKSk7CisgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQoZXhjZXB0aW9uKSwgcmFyZWx5KG1f
aGFuZGxlRXhjZXB0aW9ucyksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjkyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpA
QCAtMTQwLDYgKzE0MCw3IEBAIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9w
ZXIKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9FT0pzcyko
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1N0cmluZyopOwogdHlwZWRlZiBzaXplX3QgSklUX09Q
RVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgU2xv
d1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gKCpTcHJ0X0pJVE9wZXJhdGlvbl9FWikoRXhl
Y1N0YXRlKiwgaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uKSgpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
KShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04g
KCpWX0pJVE9wZXJhdGlvbl9FQ2IpKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwpAQCAtMTY3LDYg
KzE2OCw4IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSos
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwog
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0pKEV4ZWNTdGF0
ZSosIFZNKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0op
KEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXRpb25fWikoaW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9w
ZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBf
SklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVkZWYgY2hhciogSklU
X09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VDbGkpKEV4ZWNTdGF0ZSosIENhbGxMaW5rSW5m
byopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheWlmeS10
by1zdHJ1Y3R1cmUtY29udHJhZGljdGlvbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5aWZ5LXRvLXN0cnVjdHVyZS1jb250cmFkaWN0aW9u
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9h
cnJheWlmeS10by1zdHJ1Y3R1cmUtY29udHJhZGljdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oYXJyYXksIHYsIHApIHsKKyAgICBhcnJheVswXSA9
IDEwOworICAgIGlmIChwKQorICAgICAgICB2ID0gImhlbGxvIjsKKyAgICBhcnJheVswXSA9IHY7
Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kp
IHsKKyAgICB2YXIgYXJyYXkgPSBbNDJdOworICAgIGZvbyhhcnJheSwgNDMsIGZhbHNlKTsKKyAg
ICBpZiAoYXJyYXlbMF0gIT0gNDMpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIGFycmF5OworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2Z0bC1nZXRteWFyZ3VtZW50c2xlbmd0aC1pbmxpbmUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0bXlhcmd1bWVudHNsZW5ndGgtaW5s
aW5lLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9mdGwtZ2V0bXlhcmd1bWVudHNsZW5ndGgtaW5saW5lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOSBAQAorZnVuY3Rpb24gZm9vKCl7CisgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7
Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgciA9IGZv
bygxMSwgMTIsIDEzLCAxOCwgMTksIDIwKTsKKyAgICBpZiAociAhPSA2KSB0aHJvdyAiRXJyb3I6
ICIrcjsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0
aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRpb25zLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1tdWx0
aXBsZS10cmFuc2l0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1tdWx0aXBsZS10cmFuc2l0aW9ucy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACitmdW5jdGlvbiBmb28obykgeworICAg
IG8ueCA9IDE7CisgICAgby55ID0gMjsKKyAgICBvLmEgPSAzOworICAgIG8uYiA9IDQ7CisgICAg
by5jID0gNTsKKyAgICBvLmQgPSA2OworICAgIG8uZSA9IDc7CisgICAgby5mID0gODsKKyAgICBv
LmcgPSA5OworICAgIG8uaCA9IDEwOworICAgIG8uaSA9IDExOworfQorCitub0lubGluZShmb28p
OworCitmdW5jdGlvbiBGb28oKSB7CisgICAgZm9vKHRoaXMpOworfQorCit2YXIgcmVzdWx0ID0g
MDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIGZvbyh7Zjo0Mn0p
OworICAgIHJlc3VsdCArPSAobmV3IEZvbygpKS54OworfQorCitpZiAocmVzdWx0ICE9IDEwMDAw
MCkKKyAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1m
dGwtaW4tbG9vcC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwtaW4tbG9vcC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzIEBACit2YXIgZGlkVGhyb3cgPSBmYWxzZTsKK3RyeSB7CisgICAgKGZ1bmN0aW9uKCkg
eworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeyB9CisgICAgICAg
IHRocm93IDQyOworICAgIH0pKCk7Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKGUgIT0gNDIpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGU7CisgICAgZGlkVGhyb3cgPSB0
cnVlOworfQoraWYgKCFkaWRUaHJvdykKKyAgICB0aHJvdyAiRXJyb3I6IHNob3VsZCBoYXZlIHRo
cm93biBidXQgZGlkbid0LiI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3Rocm93LWZyb20tZnRsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93LWZyb20tZnRsLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgdmFyIG8gPSB7Zjo0
Mn07CisgICAgaWYgKHApCisgICAgICAgIHRocm93IG87CisgICAgcmV0dXJuIG87Cit9CisKK25v
SW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2
YXIgbyA9IGZvbyhmYWxzZSk7CisgICAgaWYgKG8uZiAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgby5mOworfQorCit2YXIgZGlkVGhyb3cgPSBmYWxzZTsKK3Ry
eSB7CisgICAgZm9vKHRydWUpOworfSBjYXRjaCAoZSkgeworICAgIGlmIChlLmYgIT0gNDIpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBpbiBjYXRjaDogIiArIG8uZjsKKyAgICBk
aWRUaHJvdyA9IHRydWU7Cit9CitpZiAoIWRpZFRocm93KQorICAgIHRocm93ICJFcnJvcjogc2hv
dWxkIGhhdmUgdGhyb3duIGJ1dCBkaWRuJ3QuIjsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjk1MTUpCisr
KyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisy
MDE0LTA2LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgW2Z0
bG9wdF0gQUkgc2hvdWxkIGJlIGFibGUgdHJhY2sgc3RydWN0dXJlIHNldHMgbGFyZ2VyIHRoYW4g
MQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDcz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3dGYv
QmFnLmg6CisgICAgICAgIChXVEY6OkJhZzo6Tm9kZTo6Tm9kZSk6CisgICAgICAgIChXVEY6OkJh
Zzo6YWRkKToKKwogMjAxNC0wNS0xOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIFtmdGxvcHRdIERGRyBieXRlY29kZSBwYXJzZXIgc2hvdWxkIHR1cm4gR2V0QnlJ
ZCB3aXRoIG5vdGhpbmcgYnV0IGEgR2V0dGVyIHN0dWIgYXMgc3R1ZmYraGFuZGxlQ2FsbCwgYW5k
IGhhbmRsZUNhbGwgc2hvdWxkIGJlIGFsbG93ZWQgdG8gaW5saW5lIGlmIGl0IHdhbnRzIHRvCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9C
YWcuaAkocmV2aXNpb24gMTY5MjAwKQorKysgU291cmNlL1dURi93dGYvQmFnLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM0LDYgKzM0LDEyIEBAIHByaXZhdGU6CiAgICAgY2xhc3MgTm9kZSB7CiAgICAg
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTm9kZShBcmdzLi4uIGFyZ3MpCisgICAgICAg
ICAgICA6IG1faXRlbShhcmdzLi4uKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIFQgbV9pdGVtOwogICAgICAgICBOb2RlKiBtX25leHQ7CiAgICAgfTsKQEAgLTUzLDkg
KzU5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBUKiBhZGQoKQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgVCogYWRkKEFyZ3MuLi4gYXJncykK
ICAgICB7Ci0gICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9kZTsKKyAgICAgICAgTm9kZSog
bmV3Tm9kZSA9IG5ldyBOb2RlKGFyZ3MuLi4pOwogICAgICAgICBuZXdOb2RlLT5tX25leHQgPSBt
X2hlYWQ7CiAgICAgICAgIG1faGVhZCA9IG5ld05vZGU7CiAgICAgICAgIHJldHVybiAmbmV3Tm9k
ZS0+bV9pdGVtOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NTE1KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMDYtMDEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBbZnRsb3B0XSBBSSBzaG91bGQg
YmUgYWJsZSB0cmFjayBzdHJ1Y3R1cmUgc2V0cyBsYXJnZXIgdGhhbiAxCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgwNzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlk
LWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
c2ltcGxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5
LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1i
eS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzOiBBZGRlZC4KKwogMjAxNC0wNS0yMSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIERGRzo6Y2xvYmJlcml6
ZSBzaG91bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMgb2YgR0MKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRp
b24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0
LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Z2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0
LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48
L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Z2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hl
Y2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0
aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnkt
aWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNp
bXBsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdy
ZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2lt
cGxlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0
aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNp
bXBsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1i
eS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQt
Ymltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmlt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MX07Cisg
ICAgdmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICByZXN1bHQgXj0gby5hOworICAg
ICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAg
fQorICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1i
eS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MSwgYjoyLCBjOjMsIGQ6
NCwgZTo1LCBmOjYsIGc6NywgaDo4LCBpOjksIGo6MTAsIGs6MTF9OworICAgIHZhciBwID0ge2E6
MiwgYjozLCBjOjQsIGQ6NSwgZTo2LCBmOjcsIGc6OCwgaDo5LCBpOjEwLCBqOjExLCBrOjEyLCBs
OjEzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
MDA7ICsraSkgeworICAgICAgICByZXN1bHQgKz0gby5hIF4gby5iIF4gby5jIF4gby5kIF4gby5l
IF4gby5mIF4gby5nIF4gby5oIF4gby5pIF4gby5qIF4gby5rOworICAgICAgICB2YXIgdG1wID0g
bzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1
bHQgIT0gNjUwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dl
dC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7
YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3LCBoOjgsIGk6OSwgajoxMCwgazoxMX07
CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyAr
K2kpCisgICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIgfCBvLmMgXiBvLmQgJiBvLmUgXiBvLmYg
fCBvLmcgXiBvLmggJiBvLmkgXiBvLmogfCBvLms7CisgICAgaWYgKHJlc3VsdCAhPSAxNTAwMDAw
MCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFk
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MX07CisgICAg
dmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcSA9IHthOjMsIGI6M307CisgICAgdmFyIHIg
PSB7YTo0LCBjOjV9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCBePSBvLmE7CisgICAgICAgIHZhciB0
bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHE7CisgICAgICAgIHEgPSByOwor
ICAgICAgICByID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IDApCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232413</attachid>
            <date>2014-06-02 20:19:22 -0700</date>
            <delta_ts>2014-06-03 13:20:04 -0700</delta_ts>
            <desc>basically works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>219507</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4MiBA
QAorMjAxNC0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0
aGFuIDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
ODA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGlu
dGVycHJldGVyKSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVy
ZToKKyAgICAgICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRy
YWNrIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAg
ICAgICBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhh
dmUgYW55IG9mIHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdo
aWNoIC0gYnV0IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3Qg
aW4gdGhlIHNldC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBz
dGlsbCBiZSBUT1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisg
ICAgICAgICAgYXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBl
eHBsb3Npb24gb24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91
Z2ggdGhhdCBpdCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBz
aW5jZSB3ZSBoYXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisg
ICAgICAgICAgc3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0
byBrbm93IGFib3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBv
aW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQK
KyAgICAgICAgICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRo
YXQgdGhlIHdhdGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGlz
IGFsbG93cyB0cmFja2luZyBvZiB3YXRjaGFibGUgc3RydWN0dXJlcyB0byBiZSBmYXIgc2ltcGxl
ciB0aGFuIGJlZm9yZS4gUHJldmlvdXNseSwKKyAgICAgICAgICBhIHN0cnVjdHVyZSBiZWluZyB0
cmFja2VkIGFzICJmdXR1cmUgcG9zc2libGUiIHdhcyBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIHdh
dGNoYWJsZSBidXQKKyAgICAgICAgICB3ZSBtaWdodCBub3QgYWN0dWFsbHkgd2F0Y2ggaXQuIFRo
aXMgbWFrZXMgYWxnZWJyYSBvdmVyIHNldHMgb2YgZnV0dXJlIHBvc3NpYmxlCisgICAgICAgICAg
c3RydWN0dXJlcyBxdWl0ZSB3ZWlyZC4gQnV0IHdhdGNoaW5nIGFsbCB3YXRjaGFibGUgc3RydWN0
dXJlcyBtZWFucyB0aGF0IHdlIHNpbXBsZSBzYXkKKyAgICAgICAgICB0aGF0IGEgc3RydWN0dXJl
IHNldCBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6IHVuY2xvYmJlcmVkLCB3aGljaCBt
ZWFucyBpdCdzIGp1c3QKKyAgICAgICAgICBhIHNldCBvZiBzdHJ1Y3R1cmVzIGFuZCBpdCBkb2Vz
bid0IG1hdHRlciB3aGF0IGlzIHdhdGNoYWJsZSBvciB3aGF0IGlzbid0IGJlY2F1c2Ugd2UndmUK
KyAgICAgICAgICBwcm92ZW4gdGhhdCB0aGUgdmFsdWUgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBz
dHJ1Y3R1cmVzIHJpZ2h0IG5vdzsgYW5kIGNsb2JiZXJlZCwgd2hpY2gKKyAgICAgICAgICBtZWFu
cyB0aGF0IHdlIGhhdmUgYSBzZXQgb2Ygc3RydWN0dXJlcywgcGx1cyBhbGwgcG9zc2libGUgc3Ry
dWN0dXJlcyB0ZW1wb3JhcmlseSwgd2l0aAorICAgICAgICAgIGludmFsaWRhdGlvbiByZW1vdmlu
ZyB0aGUgInBsdXMgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMiLiBDbG9iYmVyaW5nIGEgc2V0IG1l
YW5zIHRoYXQKKyAgICAgICAgICBpZiBhbnkgb2YgaXRzIHN0cnVjdHVyZXMgYXJlIHVud2F0Y2hh
YmxlLCB0aGUgc2V0IGp1c3QgYmVjb21lcyBUT1A7IGJ1dCBpZiBhbGwKKyAgICAgICAgICBzdHJ1
Y3R1cmVzIGluIHRoZSBzZXQgYXJlIHdhdGNoYWJsZSB0aGVuIHdlIGp1c3Qgc2V0IHRoZSBjbG9i
YmVyZWQgYml0IHRvIGFkZCB0aGUgInBsdXMKKyAgICAgICAgICBhbGwgcG9zc2libGUgc3RydWN0
dXJlcyB0ZW1wb3JhcmlseSIgdGhpbmcuIFRoaXMgcHJlY2lzZWx5IHRyYWNrcyB0aGUgZXhhY3Qg
bWVhbmluZyBvZgorICAgICAgICAgIHdhdGNoYWJpbGl0eSBhbmQgaW52YWxpZGF0aW9uIHBvaW50
cy4KKyAgICAgICAgCisgICAgICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHA6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpjb3B5RnJvbSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6U3RydWN0dXJlU2V0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU2V0OjpnZW5lcmljRmlsdGVyKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpDb250YWluc091dE9mTGluZTo6Q29udGFpbnNPdXRPZkxpbmUpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2V0OjpkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldEVtcHR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U2V0OjpnZXRSZXNlcnZlZEZsYWcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldFJl
c2VydmVkRmxhZyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Ym9vbGVhblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OnZlcmlmeUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNl
cnZlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRp
b25zKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzaG91bGRCZUNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Ojpub3JtYWxpemVDbGFyaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3Nl
cnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5o
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpUcmFu
c2l0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OlRyYW5z
aXRpb25PYnNlcnZlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6VHJhbnNpdGlvbnNPYnNlcnZlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNIZWFwVG9wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjptZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Omhhc0Nsb2JiZXJhYmxlU3Rh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VUb3ApOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmJlc3RQcm92ZW5TdHJ1Y3R1cmUpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlN
b2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tDRkEpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c3RhcnRDcmFzaGluZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6aXNDcmFzaGluZyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5o
OgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToK
KyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAgIChKU0M6OkRGRzo6V2F0
Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0OjpXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNo
cG9pbnRTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6aXNTdGlsbFZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpzaG91bGRBc3N1bWVNaXhlZFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
Ojppc1ZhbGlkT3JNaXhlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjppc1N0aWxsVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRl
c2lyZWRXYXRjaHBvaW50czo6c2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1ZhbGlkT3JNaXhlZCk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6fkdyYXBoKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldEZvbGRh
YmxlVmlldyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YTo6U3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNz
ZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
YnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpj
b250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
dmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVt
cEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRj
aGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZl
SW52YWxpZGF0aW9uUG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
aXNDbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzTmVpdGhl
ckNsZWFyTm9yVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojppc0Nsb2JiZXJlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ubHlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJz
ZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRv
cFdoZW5UaGluKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpz
ZXRDbG9iYmVyZWQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om1ha2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZp
bHRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6aXNDbGVhck9yVG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpsYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1ZhbGlkT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpoYXNT
aW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6dG9wVmFsdWUpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdUcmFuc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6VHJhbnNpdGlvbjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6VHJh
bnNpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1RyYW5zaXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6VHJhbnNpdGlvbjo6VHJhbnNpdGlvbik6CisgICAgICAgICogZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFu
dEFycmF5Q2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gp
OgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6
CisgICAgICAgICogZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDogQWRk
ZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6aGFuZGxlRWRnZSk6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2Fu
Q29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAg
ICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVQdXRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0ZXJtaW5hdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNhbGxDaGVj
ayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoV1RGOjpqc2NFeGl0KToKKyAgICAg
ICAgKGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHByaW50VXNhZ2VT
dGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0dXJlLWNvbnRyYWRpY3Rpb24uanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZnRsLWdldG15
YXJndW1lbnRzbGVuZ3RoLWlubGluZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRpb25z
LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChGb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwog
MjAxNC0wNS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtm
dGxvcHRdIERGRzo6Y2xvYmJlcml6ZSBzaG91bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMgb2Yg
R0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTkyLDkgKzE5MiwxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmNwcAorICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAogICAgIGRm
Zy9ERkdUaHJlYWREYXRhLmNwcAogICAgIGRmZy9ERkdUaHVua3MuY3BwCiAgICAgZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1RyYW5zaXRpb24uY3BwCiAg
ICAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VzZUtpbmQuY3BwCkBAIC0yMDUsNiArMjA3LDcgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHVmFyaWFibGVFdmVudC5jcHAK
ICAgICBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKICAgICBkZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdXb3JrbGlzdC5jcHAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw2ICs5MywxNSBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgewogCitOT19SRVRVUk5fV0lUSF9WQUxVRSBzdGF0aWMgdm9pZCBqc2NFeGl0KGludCBzdGF0
dXMpCit7CisgICAgaWYgKERGRzo6aXNDcmFzaGluZygpKSB7CisgICAgICAgIGZvciAoOzspCisg
ICAgICAgICAgICBwYXVzZSgpOworICAgIH0KKyAgICBleGl0KHN0YXR1cyk7Cit9CisKIGNsYXNz
IEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXI7CiBjbGFzcyBNYXN1cWVyYWRlcjsK
QEAgLTg4NSw3ICs4OTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
VHJhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0
ZSopCiB7Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNT
KTsKIAogI2lmIENPTVBJTEVSKE1TVkMpICYmIE9TKFdJTkNFKQogICAgIC8vIFdpdGhvdXQgdGhp
cywgVmlzdWFsIFN0dWRpbyB3aWxsIGNvbXBsYWluIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3Qg
cmV0dXJuIGEgdmFsdWUuCkBAIC0xMDEyLDcgKzEwMjEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgZWNvcmVfc2h1dGRvd24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJu
IHJlczsKKyAgICBqc2NFeGl0KHJlcyk7CiB9CiAKIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRz
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyaXB0
cywgYm9vbCBkdW1wKQpAQCAtMTE1Niw3ICsxMTY1LDcgQEAgc3RhdGljIE5PX1JFVFVSTiB2b2lk
IHByaW50VXNhZ2VTdGF0ZW1lbgogICAgIGZwcmludGYoc3RkZXJyLCAiICAtLTxqc2MgVk0gb3B0
aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZNIG9wdGlvblxuIik7CiAgICAg
ZnByaW50ZihzdGRlcnIsICJcbiIpOwogCi0gICAgZXhpdChoZWxwID8gRVhJVF9TVUNDRVNTIDog
RVhJVF9GQUlMVVJFKTsKKyAgICBqc2NFeGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZB
SUxVUkUpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCkBAIC0xMjQ1LDcgKzEyNTQsNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnCiAgICAgaWYgKG5lZWRUb0R1bXBPcHRpb25zKQogICAgICAgICBK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CiAgICAgaWYgKG5lZWRUb0V4aXQp
Ci0gICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAgICAganNjRXhpdChFWElUX1NVQ0NF
U1MpOwogfQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMSArNDQzLDEzIEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVGhyZWFkRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHVHJhbnNpdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVW5pZmljYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAiIC8+CkBAIC00NTksNiArNDYxLDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1dvcmtsaXN0LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+CkBAIC0x
MDI1LDYgKzEwMjgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUcmFuc2l0
aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZp
Y2F0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdVc2VL
aW5kLmgiIC8+CkBAIC0xMDM3LDYgKzEwNDEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdWYXJpYWRpY0Z1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdX
b3JrbGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERp
c2Fzc2VtYmxlci5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNiArMzUzLDcgQEAK
IAkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYz
OUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRCMEMxMTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5jaERp
cmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAxODQ5QTNCRTAw
RjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwICovOyB9OwogCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGlu
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhG
MkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi87IH07CiAJCTBGOEYyQjk2MTcy
RTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOEYyQjk5
MTcyRjA0RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTcxNzJGMDRGRDAwN0RC
REE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi87IH07CkBAIC00OTUsNiArNDk2LDgg
QEAKIAkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUREMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi87IH07CiAJCTBGQ0VGQUUwMTgwNzM4QzAwMDQ3
MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEMkQ0RkUxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEMkQ0RkMxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuY3BwICovOyB9OworCQkwRkQyRDRGRjE5MkZFRTU4MDBBMTc4QkYg
LyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8q
IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9Owog
CQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsK
QEAgLTUyOCw2ICs1MzEsOCBAQAogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAv
KiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAq
LzsgfTsKKwkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTk1Rjc5
MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uY3BwICovOyB9OwpAQCAtMjE2MCw2ICsyMTY1LDcgQEAKIAkJMEY4MzM1
QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJh
bmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JyYW5j
aERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVV
c2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVVc2VEZWYu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0
IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBkZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMTMsNiArMjMxOSw4IEBACiAJCTBGQ0VGQUREMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExMb2NhdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRM
TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG9jYXRpb24u
aDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZH
RHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQw
RTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxp
bmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIzNDgsNiArMjM1Niw4IEBACiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1
NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1RyYW5zaXRpb24uY3BwOyBwYXRoID0g
ZGZnL0RGR1RyYW5zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU3
MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUz
NEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERhdGFTZWN0aW9uLmNwcDsgcGF0aCA9IGZ0
bC9GVExEYXRhU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODA2
LDYgKzQ4MTYsNyBAQAogCQkJCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDMjBDQjQxODUyRTJDNjAw
QzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjg5M0JEQTE5
MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCiAJCQkJ
MEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAq
LywKIAkJCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8s
CiAJCQkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCAqLywKQEAg
LTQ4MTcsNiArNDgyOCw4IEBACiAJCQkJMEZEOEEzMjIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJMEZEOEEzMjMxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwICovLAogCQkJCTBGRDhBMzI0MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCisJCQkJMEZFNzIxMUIxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovLAorCQkJCTBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8sCiAJCQkJMEY2Mzk0M0MxNUM3NUYxNDAw
NkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJ
MEZCRTBGNkYxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLApA
QCAtNDgzOCw2ICs0ODUxLDggQEAKIAkJCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZH
VmFyaWFibGVFdmVudFN0cmVhbS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAq
LywKKwkJCQkwRkQyRDRGQzE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzQjE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJ
MEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2Uu
aCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICov
LApAQCAtNTc3Niw2ICs1NzkxLDcgQEAKIAkJCQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyog
RlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEw
QTIzMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUz
MUZCIC8qIEZUTERhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUM5MjJCQzE4QTE2
MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAg
LTU4MTcsNiArNTgzMyw3IEBACiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVu
d2luZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAw
N0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU3MjEx
RTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5o
IGluIEhlYWRlcnMgKi8sCkBAIC02OTU2LDYgKzY5NzMsNyBAQAogCQkJCTBGRjBGMTk5MTZCNzI5
RjYwMDVERjk1QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzY3QjVCNTE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQyRDRGRTE5MkZFRTU4MDBBMTc4
QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2Rl
RmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTg0LDYgKzcwMDIsNyBAQAogCQkJCTBGQzIw
Q0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUNDRjNERTE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1
NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzE3NCw2ICs3MTkzLDcgQEAKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyog
SlNQcm9maWxlclByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJE
MzAwN0NCNjNBIC8qIEpTUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3
QkVFMjQwMDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpT
UHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMDA4Q0QyMTg2RjhBOTMw
MDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mx
ODRFMUUxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTZXQuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBT
dHJ1Y3R1cmVTZXQmIFN0cnVjdHVyZVNldDo6b3BlcmF0b3I9KGNvCiB2b2lkIFN0cnVjdHVyZVNl
dDo6Y2xlYXIoKQogewogICAgIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAg
IHNldCgwLCB0cnVlKTsKKyAgICBzZXRFbXB0eSgpOwogfQogCiBib29sIFN0cnVjdHVyZVNldDo6
YWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNzUsNyArNzUsNyBAQCBib29sIFN0cnVjdHVy
ZVNldDo6cmVtb3ZlKFN0cnVjdHVyZSogc3RyCiB7CiAgICAgaWYgKGlzVGhpbigpKSB7CiAgICAg
ICAgIGlmIChzaW5nbGVTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHNl
dCgwLCB0cnVlKTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04OCw3ICs4OCw3IEBA
IGJvb2wgU3RydWN0dXJlU2V0OjpyZW1vdmUoU3RydWN0dXJlKiBzdHIKICAgICAgICAgbGlzdC0+
bGlzdCgpW2ldID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwogICAgICAgICBpZiAo
IWxpc3QtPm1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxp
c3QpOwotICAgICAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICAgICAgc2V0RW1wdHkoKTsK
ICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNDQsMjMgKzE0NCw4
IEBAIHZvaWQgU3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICAKLSAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5n
bGVTdHJ1Y3R1cmUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmNv
bnRhaW5zT3V0T2ZMaW5lKHNpbmdsZVN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgY2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBPdXRP
ZkxpbmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChvdGhlci5jb250YWlu
c091dE9mTGluZShsaXN0LT5saXN0KClbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIGxpc3QtPmxpc3QoKVtpLS1dID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwot
ICAgIH0KLSAgICBpZiAoIWxpc3QtPm1fbGVuZ3RoKQotICAgICAgICBjbGVhcigpOworICAgIENv
bnRhaW5zT3V0T2ZMaW5lIGNvbnRhaW5zT3V0T2ZMaW5lKG90aGVyKTsKKyAgICBnZW5lcmljRmls
dGVyKGNvbnRhaW5zT3V0T2ZMaW5lKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmV4Y2x1ZGUo
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKQEAgLTMyMyw4ICszMDgsMTAgQEAgYm9vbCBTdHJ1
Y3R1cmVTZXQ6OmNvbnRhaW5zT3V0T2ZMaW5lKFN0cgogCiB2b2lkIFN0cnVjdHVyZVNldDo6Y29w
eUZyb20oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKIHsKLSAgICBpZiAob3RoZXIuaXNUaGlu
KCkpIHsKKyAgICBpZiAob3RoZXIuaXNUaGluKCkgfHwgb3RoZXIubV9wb2ludGVyID09IHJlc2Vy
dmVkVmFsdWUpIHsKKyAgICAgICAgYm9vbCB2YWx1ZSA9IGdldFJlc2VydmVkRmxhZygpOwogICAg
ICAgICBtX3BvaW50ZXIgPSBvdGhlci5tX3BvaW50ZXI7CisgICAgICAgIHNldFJlc2VydmVkRmxh
Zyh2YWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiAxNjk1MTUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDExICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorbmFtZXNw
YWNlIERGRyB7CitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfQorCiBjbGFzcyBTdHJ1
Y3R1cmVTZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpCiAgICAgewotICAgICAgICBz
ZXQoMCwgdHJ1ZSk7CisgICAgICAgIHNldEVtcHR5KCk7CiAgICAgfQogICAgIAogICAgIFN0cnVj
dHVyZVNldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTY3LDcgKzcxLDEwIEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
VGhpbigpICYmICFzaW5nbGVTdHJ1Y3R1cmUoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBpc1Ro
aW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICBBU1NFUlQobV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAKICAgICBib29sIGFkZChTdHJ1Y3R1cmUqKTsKQEAgLTc4LDYg
Kzg1LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFz
aW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBp
ZiAoZnVuY3RvcihzaW5nbGVTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVst
LWxpc3QtPm1fbGVuZ3RoXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3Ro
KQorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBpc1N1YnNldE9m
KGNvbnN0IFN0cnVjdHVyZVNldCYpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewpAQCAtMTI0LDE1ICsxNTMsMzMgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworICAgIAog
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IGZsYWdzID0gMzsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZsYWcg
fCByZXNlcnZlZEZsYWc7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVl
ID0gNDsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0g
NDsKICAgICAKICAgICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNv
bnRhaW5zT3V0T2ZMaW5lKFN0cnVjdHVyZSopIGNvbnN0OworICAgIAorICAgIGNsYXNzIENvbnRh
aW5zT3V0T2ZMaW5lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5zT3V0T2ZMaW5lKGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgICAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcigpKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zZXQuY29udGFp
bnNPdXRPZkxpbmUoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgbV9zZXQ7CisgICAgfTsKKwogICAgIHZvaWQgY29weUZyb20o
Y29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgY2xhc3MgT3V0T2ZMaW5lTGlzdCB7CkBA
IC0xNTQsNyArMjAxLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGRlbGV0ZVN0cnVjdHVy
ZUxpc3RJZk5lY2Vzc2FyeSgpCiAgICAgewotICAgICAgICBpZiAoIWlzVGhpbigpKQorICAgICAg
ICBpZiAoIWlzVGhpbigpICYmIG1fcG9pbnRlciAhPSByZXNlcnZlZFZhbHVlKQogICAgICAgICAg
ICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShzdHJ1Y3R1cmVMaXN0KCkpOwogICAgIH0KICAgICAK
QEAgLTE4NSwxMCArMjMyLDIyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBzZXQoYml0d2lz
ZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlcyksIGZhbHNlKTsKICAgICB9CisgICAgdm9pZCBz
ZXRFbXB0eSgpCisgICAgeworICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgfQogICAgIHZvaWQg
c2V0KHVpbnRwdHJfdCBwb2ludGVyLCBib29sIHNpbmdsZVN0cnVjdHVyZSkKICAgICB7CiAgICAg
ICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xlU3RydWN0dXJlID8gdGhpbkZsYWcgOiAw
KSB8IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOwogICAgIH0KKyAgICBib29sIGdldFJlc2Vy
dmVkRmxhZygpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZzsgfQorICAg
IHZvaWQgc2V0UmVzZXJ2ZWRGbGFnKGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICBtX3BvaW50ZXIgfD0gcmVzZXJ2ZWRGbGFnOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX3BvaW50ZXIgJj0gfnJlc2VydmVkRmxhZzsKKyAgICB9CiAKICAgICB1
aW50cHRyX3QgbV9wb2ludGVyOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBAIHB1YmxpYzoKICAgICBib29sIGV4ZWN1dGVFZmZl
Y3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNp
Z25lZCBjbG9iYmVyTGltaXQsIE5vZGUqKTsKICAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpOwogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDgsNyArMTQ5LDEzIEBAIHB1YmxpYzoKIHBy
aXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29kZU9yaWdpbiYsIHVuc2lnbmVk
IGluZGV4SW5CbG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVyZWRWYXJzKGNvbnN0IENvZGVP
cmlnaW4mKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgRnVuY3RvciYpOworICAgIAogICAg
IHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKKyAgICB2b2lk
IG9ic2VydmVUcmFuc2l0aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgU3RydWN0dXJlKiBmcm9t
LCBTdHJ1Y3R1cmUqIHRvKTsKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9ucyh1bnNpZ25lZCBp
bmRleEluQmxvY2ssIGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImKTsKICAgICAKICAgICBlbnVtIEJv
b2xlYW5SZXN1bHQgewogICAgICAgICBVbmtub3duQm9vbGVhblJlc3VsdCwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIs
MTEgKzYyLDE3IEBAIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAg
ICB9CiAKICAgICAvLyBOZXh0IGNoZWNrIGlmIHdlIGNhbiBmb2xkIGJlY2F1c2Ugd2Uga25vdyB0
aGF0IHRoZSBzb3VyY2UgaXMgYW4gb2JqZWN0IG9yIHN0cmluZyBhbmQgZG9lcyBub3QgZXF1YWwg
dW5kZWZpbmVkLgotICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpCi0gICAg
ICAgICYmIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7Ci0g
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KSkKLSAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gU3RyaW5n
VHlwZSkKKyAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSAmJiAhdmFsdWUu
bV9zdHJ1Y3R1cmUuaXNUb3AoKSkgeworICAgICAgICBib29sIGFsbFRydWUgPSB0cnVlOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07
CisgICAgICAgICAgICBpZiAoc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29k
ZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAg
ICAgICAgICB8fCBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpIHsK
KyAgICAgICAgICAgICAgICBhbGxUcnVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFsbFRydWUpCiAgICAgICAg
ICAgICByZXR1cm4gRGVmaW5pdGVseVRydWU7CiAgICAgfQogICAgIApAQCAtMTA1LDkgKzExMSwx
MiBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRnZShOb2RlKiwgRWRnZSBlZGdlKQordm9pZCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRnZShOb2RlKiBu
b2RlLCBFZGdlIGVkZ2UpCiB7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1f
dHlwZSAmIH50eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSkpOworICAgIGlmICghKGZvck5v
ZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCB0b0NTdHJpbmco
IkVkZ2UgdmVyaWZpY2F0aW9uIGVycm9yOiAiLCBub2RlLCAiLT4iLCBlZGdlLCAiIHdhcyBleHBl
Y3RlZCB0byBoYXZlIHR5cGUgIiwgU3BlY3VsYXRpb25EdW1wKHR5cGVGaWx0ZXJGb3IoZWRnZS51
c2VLaW5kKCkpKSwgIiBidXQgaGFzIHR5cGUgIiwgU3BlY3VsYXRpb25EdW1wKGZvck5vZGUoZWRn
ZSkubV90eXBlKSkuZGF0YSgpKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0
ZVR5cGU+CkBAIC0xNDU2LDcgKzE0NjUsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGlzQ2VsbFNwZWN1bGF0aW9uKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAg
ICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgp
KS5iZXN0UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9u
bHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIEdldEJ5SWRTdGF0dXMg
dGhlIGFiaWxpdHkKKyAgICAgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9uIGEg
U3RydWN0dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncworICAgICAg
ICAgICAgLy8gYWJpbGl0eSB0byBnZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgR2V0QnlJZFN0YXR1
cyBvdXQgb2YgQnl0ZUNvZGVQYXJzZXIgc28gdGhhdAorICAgICAgICAgICAgLy8gQ29uc3RhbnRG
b2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1
Y3R1cmUoKSkgewogICAgICAgICAgICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBz
dHJ1Y3R1cmUsCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2Rl
LT5pZGVudGlmaWVyTnVtYmVyKCldKTsKQEAgLTE0NjYsOSArMTQ4MCwxMyBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpOwogICAgICAgICAgICAgICAg
ICAgICBBU1NFUlQoIXN0YXR1c1swXS5jaGFpbigpKTsKICAgICAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkuaXNDZWxsKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0YXR1
c1swXS5zcGVjaWZpY1ZhbHVlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgc2V0
Q29uc3RhbnQobm9kZSwgc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgICAg
IGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgCkBAIC0xNTAyLDggKzE1MjAsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+
U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVk
IHRoaXMuCiAKICAgICAgICAgU3RydWN0dXJlU2V0JiBzZXQgPSBub2RlLT5zdHJ1Y3R1cmVTZXQo
KTsKLQotICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRP
ZihzZXQpKSB7CisgICAgICAgIAorICAgICAgICAvLyBJdCdzIGludGVyZXN0aW5nIHRoYXQgd2Ug
Y291bGQgaGF2ZSBwcm92ZW4gdGhhdCB0aGUgb2JqZWN0IGhhcyBhIGxhcmdlciBzdHJ1Y3R1cmUg
c2V0CisgICAgICAgIC8vIHRoYXQgaW5jbHVkZXMgdGhlIHNldCB3ZSdyZSB0ZXN0aW5nLiBJbiB0
aGF0IGNhc2Ugd2UgY291bGQgbWFrZSB0aGUgc3RydWN0dXJlIGNoZWNrCisgICAgICAgIC8vIG1v
cmUgZWZmaWNpZW50LiBXZSBjdXJyZW50bHkgZG9uJ3QuCisgICAgICAgIAorICAgICAgICBpZiAo
dmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICBtX3N0YXRl
LnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTE1MTEsMzQgKzE1MzMsMTYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBtX3N0YXRl
LnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogCi0gICAgICAgIC8vIElmIHRoaXMgc3RydWN0dXJl
IGNoZWNrIGlzIGF0dGVtcHRpbmcgdG8gcHJvdmUga25vd2xlZGdlIGFscmVhZHkgaGVsZCBpbgot
ICAgICAgICAvLyB0aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgc2V0IHRoZW4gdGhlIGNvbnN0
YW50IGZvbGRpbmcgcGhhc2Ugc2hvdWxkCi0gICAgICAgIC8vIHR1cm4gdGhpcyBpbnRvIGEgd2F0
Y2hwb2ludCBpbnN0ZWFkLgotICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgICYmIHZhbHVlLm1fZnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICBmaWx0ZXIodmFsdWUsIHZhbHVlLm1fZnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLQogICAgICAgICBmaWx0ZXIodmFsdWUsIHNldCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDog
ewotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
OwotCi0gICAgICAgIGZpbHRlcih2YWx1ZSwgbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBt
X3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwotICAgICAgICBub2RlLT5zZXRDYW5FeGl0
KHRydWUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgICAgICAgICAKICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6Ci0gICAgICAgIGlmICgh
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigp
KSB7Ci0gICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwotICAgICAg
ICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgICAgIG9ic2Vy
dmVUcmFuc2l0aW9uKAorICAgICAgICAgICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+dHJhbnNp
dGlvbigpLT5wcmV2aW91cywgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT50cmFuc2l0aW9uKCkt
Pm5leHQpOwogICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAg
ICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE2MTYsMTMgKzE2MjAsMzkgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICBjYXNlIEFycmF5aWZ5
VG9TdHJ1Y3R1cmU6IHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgU3RydWN0dXJlU2V0IHNldCA9IG5vZGUtPnN0cnVjdHVy
ZSgpOwotICAgICAgICBpZiAodmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkKLSAgICAgICAgICAgIHx8IHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KSkKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
U3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSkpCiAgICAgICAgICAgICBtX3N0YXRlLnNl
dEZvdW5kQ29uc3RhbnRzKHRydWUpOwogICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwog
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwotICAgICAgICBmaWx0ZXIo
dmFsdWUsIHNldCk7CisgICAgICAgIAorICAgICAgICAvLyBXZSBoYXZlIGEgYnVuY2ggb2Ygb3B0
aW9ucyBvZiBob3cgdG8gZXhwcmVzcyB0aGUgYWJzdHJhY3Qgc2V0IGF0IHRoaXMgcG9pbnQuIExl
dCBzZXQgUworICAgICAgICAvLyBiZSB0aGUgc2V0IG9mIHN0cnVjdHVyZXMgdGhhdCB0aGUgdmFs
dWUgaGFkIGJlZm9yZSBjbG9iYmVyaW5nIGFuZCBhc3N1bWUgdGhhdCBhbGwgb2YKKyAgICAgICAg
Ly8gdGhlbSBhcmUgd2F0Y2hhYmxlLiBUaGUgbmV3IHZhbHVlIHNob3VsZCBiZSB0aGUgbGVhc3Qg
ZXhwcmVzc2libGUgdXBwZXIgYm91bmQgb2YgdGhlCisgICAgICAgIC8vIGludGVyc2VjdGlvbiBv
ZiAidmFsdWVzIHRoYXQgY3VycmVudGx5IGhhdmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJl
KCkiIGFuZCAidmFsdWVzCisgICAgICAgIC8vIHRoYXQgaGF2ZSBzdHJ1Y3R1cmUgaW4gUyBwbHVz
IGFueSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbi1yZWFjaGFibGUgZnJvbSBTIi4gQXNzdW1lIHRoYXQK
KyAgICAgICAgLy8gbm9kZS0+c3RydWN0dXJlKCkgaXMgbm90IGluIFMgYnV0IGl0IGlzIHRyYW5z
aXRpb24tcmVhY2hhYmxlIGZyb20gUy4gVGhlbiB3ZSB3b3VsZAorICAgICAgICAvLyBsaWtlIHRv
IHNheSB0aGF0IHRoZSByZXN1bHQgaXMgInZhbHVlcyB0aGF0IGhhdmUgc3RydWN0dXJlID0gbm9k
ZS0+c3RydWN0dXJlKCkgdW50aWwKKyAgICAgICAgLy8gd2UgaW52YWxpZGF0ZSIsIGJ1dCB0aGVy
ZSBpcyBubyB3YXkgdG8gZXhwcmVzcyB0aGlzIHVzaW5nIHRoZSBBYnN0cmFjdFZhbHVlIHN5bnRh
eC4gU28KKyAgICAgICAgLy8gd2UgbXVzdCBjaG9vc2UgYmV0d2VlbjoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gMSkgInZhbHVlcyB0aGF0IGN1cnJlbnRseSBoYXZlIHN0cnVjdHVyZSA9IG5vZGUt
PnN0cnVjdHVyZSgpIi4gVGhpcyBpcyBhIHZhbGlkCisgICAgICAgIC8vICAgIHN1cGVyc2V0IG9m
IHRoZSB2YWx1ZSB0aGF0IHdlIHJlYWxseSB3YW50LCBhbmQgaXQncyBzcGVjaWZpYyBlbm91Z2gg
dG8gc2F0aXNmeSB0aGUKKyAgICAgICAgLy8gICAgcHJlY29uZGl0aW9ucyBvZiB0aGUgYXJyYXkg
YWNjZXNzIHRoYXQgdGhpcyBpcyBndWFyZGluZy4gSXQncyBhbHNvIHNwZWNpZmljIGVub3VnaAor
ICAgICAgICAvLyAgICB0byBhbGxvdyByZWxldmFudCBvcHRpbWl6YXRpb25zIGluIHRoZSBjYXNl
IHRoYXQgd2UgZGlkbid0IGhhdmUgYSBjb250cmFkaWN0aW9uCisgICAgICAgIC8vICAgIGxpa2Ug
aW4gdGhpcyBleGFtcGxlLiBOb3RpY2UgdGhhdCBpbiB0aGUgYWJzY2VuY2Ugb2YgYW55IGNvbnRy
YWRpY3Rpb24sIHRoaXMgcmVzdWx0CisgICAgICAgIC8vICAgIGlzIHByZWNpc2UgcmF0aGVyIHRo
YW4gYmVpbmcgYSBjb25zZXJ2YXRpdmUgTFVCLgorICAgICAgICAvLworICAgICAgICAvLyAyKSAi
dmFsdWVzIHRoYXQgY3VycmVudGx5IGhhdmEgc3RydWN0dXJlIGluIFMgcGx1cyBhbnkgc3RydWN0
dXJlIHRyYW5zaXRpb24tcmVhY2hhYmxlCisgICAgICAgIC8vICAgIGZyb20gUyIuIFRoaXMgaXMg
YWxzbyBhIHZhbGlkIHN1cGVyc2V0IG9mIHRoZSB2YWx1ZSB0aGF0IHdlIHJlYWxseSB3YW50LCBi
dXQgaXQncworICAgICAgICAvLyAgICBub3Qgc3BlY2lmaWMgZW5vdWdoIHRvIHNhdGlzZnkgdGhl
IHByZWNvbmRpdGlvbnMgb2YgdGhlIGFycmF5IGFjY2VzcyB0aGF0IHRoaXMgaXMKKyAgICAgICAg
Ly8gICAgZ3VhcmRpbmcgLSBzbyBwbGF5aW5nIHN1Y2ggc2hlbmFuaWdhbnMgd291bGQgcHJlY2x1
ZGUgdXMgZnJvbSBoYXZpbmcgYXNzZXJ0aW9ucyBvbgorICAgICAgICAvLyAgICB0aGUgdHlwaW5n
IHByZWNvbmRpdGlvbnMgb2YgYW55IGFycmF5IGFjY2Vzc2VzLiBUaGlzIHdvdWxkIGFsc28gbm90
IGJlIGEgZGVzaXJhYmxlCisgICAgICAgIC8vICAgIGFuc3dlciBpbiB0aGUgYWJzZW5jZSBvZiBh
IGNvbnRyYWRpY3Rpb24uCisgICAgICAgIC8vCisgICAgICAgIC8vIE5vdGUgdGhhdCBpdCdzIHRl
bXB0aW5nIHRvIHNpbXBseSBzYXkgdGhhdCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzIEJPVFRPTSBi
ZWNhdXNlIG9mCisgICAgICAgIC8vIHRoZSBjb250cmFkaWN0aW9uLiBUaGF0IHdvdWxkIGJlIHdy
b25nLCBzaW5jZSB3ZSBoYXZlbid0IGhpdCBhbiBpbnZhbGlkYXRpb24gcG9pbnQsCisgICAgICAg
IC8vIHlldC4KKyAgICAgICAgdmFsdWUuc2V0KG1fZ3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsK
ICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpAQCAtMTY1MSw3ICsxNjgxLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKTsKICAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxs
KSk7IC8vIEVkZ2UgZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgog
Ci0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmJlc3RQcm92ZW5TdHJ1
Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlzIHNob3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBj
YXNlcyBpbiBNdWx0aUdldEJ5T2Zmc2V0LiBJZiB0aGF0IHJlc3VsdHMgaW4gYWxsCisgICAgICAg
IC8vIGNhc2VzIGhhdmluZyB0aGUgc2FtZSBvZmZzZXQgdGhlbiB3ZSBzaG91bGQgc3RyZW5ndGgg
cmVkdWNlIGl0IHRvIGEgQ2hlY2tTdHJ1Y3R1cmUgKworICAgICAgICAvLyBHZXRCeU9mZnNldC4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIy
OQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5v
bmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBjb25zdCBHZXRCeUlkVmFyaWFu
dCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBA
IC0xNjc3LDYgKzE3MTEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiAgICAgICAgIAogICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHNldCk7CiAgICAg
ICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZl
U3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAgICAgCkBA
IC0xNjg4LDcgKzE3MjMsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRn
ZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAKLSAgICAgICAg
aWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7
CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGluIE11
bHRpUHV0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKKyAgICAgICAgLy8gb25l
IGNhc2UsIG9yIG5vdGhpbmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2ZSB0aGUgc2Ft
ZSBvZmZzZXQsIHRoZW4gd2Ugc2hvdWxkCisgICAgICAgIC8vIGp1c3Qgc3RyZW5ndGggcmVkdWNl
IGl0IHRvIHRoZSBhcHByb3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVjdHVyZSwKKyAg
ICAgICAgLy8gW1JlXUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1cmUsIGFuZCBQ
dXRCeU9mZnNldC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5t
X3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZh
bHNlOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBjb25zdCBQ
dXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFy
aWFudHNbaV07CkBAIC0xNzE1LDI1ICsxNzU1LDI1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICAKLSAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAg
CisgICAgICAgIFN0cnVjdHVyZVNldCBvbGRTZXQ7CiAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdT
ZXQ7CisgICAgICAgIFRyYW5zaXRpb25WZWN0b3IgdHJhbnNpdGlvbnM7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKLSAgICAgICAgICAg
ICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5z
dHJ1Y3R1cmUoKSkpCi0gICAgICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5zdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pOwotICAgICAgICAgICAgaWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmNvbnRh
aW5zKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpKQorICAgICAgICAgICAgb2xkU2V0LmFkZCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAgICAgICAgICAgICAgIHRyYW5zaXRpb25z
LmFwcGVuZChUcmFuc2l0aW9uKHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCkpKTsKICAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKHZhcmlhbnQubmV3U3RydWN0
dXJlKCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAg
IG5ld1NldC5hZGQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIFVzZSBmaWx0ZXIodmFsdWUsIHNldCkgYXMgYSB3
YXkgb2Ygc2V0dGluZyB0aGUgc3RydWN0dXJlIHNldC4gVGhpcyB3b3JrcyBiZWNhdXNlCi0gICAg
ICAgIC8vIHdlIHdvdWxkIGhhdmUgYWxyZWFkeSBtYWRlIHRoZSBzZXQgYmUgVE9QIGJlZm9yZSB0
aGlzLiBGaWx0ZXJpbmcgdG9wIGlzIGFub3RoZXIgCi0gICAgICAgIC8vIHdheSBvZiBzZXR0aW5n
LgotICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIG5ld1NldCk7CisgICAgICAgIGZpbHRl
cihub2RlLT5jaGlsZDEoKSwgb2xkU2V0KTsKKyAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0
dXJlcyh0cnVlKTsKKyAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1pdCwgdHJh
bnNpdGlvbnMpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwg
bmV3U2V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtMTc2Nyw3ICsxODA3LDEy
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1
dEJ5SWRGbHVzaDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIG5vZGUtPnNldENh
bkV4aXQodHJ1ZSk7Ci0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlz
IHVzZSBvZiBvbmx5U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBQdXRC
eUlkU3RhdHVzIHRoZSBhYmlsaXR5CisgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2Vk
IG9uIGEgU3RydWN0dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncwor
ICAgICAgICAvLyBhYmlsaXR5IHRvIGdlbmVyYXRlIGNvZGUgYmFzZWQgb24gYSBQdXRCeUlkU3Rh
dHVzIG91dCBvZiBCeXRlQ29kZVBhcnNlciBzbyB0aGF0CisgICAgICAgIC8vIENvbnN0YW50Rm9s
ZGluZ1BoYXNlIGNhbiB1c2UgaXQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpKSB7
CiAgICAgICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3IoCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLAogICAgICAgICAgICAgICAgIG1f
Z3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCkBAIC0xNzgxLDcg
KzE4MjYsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBp
ZiAoc3RhdHVzWzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgeworICAg
ICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFu
c2l0aW9uCisgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKICAgICAg
ICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHN0YXR1
c1swXS5uZXdTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2
ZVN0cnVjdHVyZXModHJ1ZSk7CkBAIC0xODU1LDYgKzE5MDIsNyBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIAogICAgIGNhc2UgSW52YWxpZGF0aW9u
UG9pbnQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CisgICAgICAgIGZvckFsbFZh
bHVlcyhjbG9iYmVyTGltaXQsIEFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2lu
dEZvcik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CkBA
IC0xOTU3LDMyICsyMDA1LDY3IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcyh1
bnNpZ25lZCBjbG9iYmVyTGltaXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKAorICAg
IHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBpZiAoIW1f
c3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIGlmIChjbG9iYmVy
TGltaXQgPj0gbV9zdGF0ZS5ibG9jaygpLT5zaXplKCkpCiAgICAgICAgIGNsb2JiZXJMaW1pdCA9
IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpOwogICAgIGVsc2UKICAgICAgICAgY2xvYmJlckxpbWl0
Kys7CiAgICAgQVNTRVJUKGNsb2JiZXJMaW1pdCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0tOykKLSAgICAgICAgZm9yTm9k
ZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICBm
dW5jdG9yKGZvck5vZGUobV9zdGF0ZS5ibG9jaygpLT5hdChpKSkpOwogICAgIGlmIChtX2dyYXBo
Lm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOwogICAgICAgICBIYXNo
U2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhl
YWQuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICAg
ICAgZm9yTm9kZSgqaXRlcikuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgICAgIGZ1bmN0
b3IoZm9yTm9kZSgqaXRlcikpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52
YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQotICAgICAgICBtX3N0YXRlLnZh
cmlhYmxlcygpLmFyZ3VtZW50KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0
b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKLSAgICAgICAgbV9z
dGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOwotICAgIG1fc3Rh
dGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJp
YWJsZXMoKS5sb2NhbChpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVU
eXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJl
clN0cnVjdHVyZXModW5zaWduZWQgY2xvYmJlckxpbWl0KQoreworICAgIGlmICghbV9zdGF0ZS5o
YXZlU3RydWN0dXJlcygpKQorICAgICAgICByZXR1cm47CisgICAgZm9yQWxsVmFsdWVzKGNsb2Ji
ZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOworICAgIG1fc3Rh
dGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RT
dGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpv
YnNlcnZlVHJhbnNpdGlvbigKKyAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIFN0cnVjdHVyZSog
ZnJvbSwgU3RydWN0dXJlKiB0bykKK3sKKyAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIEFic3RyYWN0VmFsdWU6OlRyYW5zaXRpb25PYnNlcnZl
ciB0cmFuc2l0aW9uT2JzZXJ2ZXIoZnJvbSwgdG8pOworICAgIGZvckFsbFZhbHVlcyhjbG9iYmVy
TGltaXQsIHRyYW5zaXRpb25PYnNlcnZlcik7CisgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRy
dWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46Om9ic2VydmVUcmFuc2l0aW9ucygK
KyAgICB1bnNpZ25lZCBjbG9iYmVyTGltaXQsIGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZlY3Rv
cikKK3sKKyAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIEFic3RyYWN0VmFsdWU6OlRyYW5zaXRpb25zT2JzZXJ2ZXIgdHJhbnNpdGlvbnNPYnNl
cnZlcih2ZWN0b3IpOworICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25z
T2JzZXJ2ZXIpOwogICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
Y29uc3RfY2FzdDxBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPio+KHRoaXMp
LT5kdW1wKG91dCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgog
dm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KQogewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAx
Njk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMjkgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCit2b2lkIEFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9ucyhj
b25zdCBUcmFuc2l0aW9uVmVjdG9yJiB2ZWN0b3IpCit7CisgICAgaWYgKG1fdHlwZSAmIFNwZWND
ZWxsKSB7CisgICAgICAgIG1fc3RydWN0dXJlLm9ic2VydmVUcmFuc2l0aW9ucyh2ZWN0b3IpOwor
ICAgICAgICBBcnJheU1vZGVzIG5ld01vZGVzID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gdmVjdG9yLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAm
IGFzQXJyYXlNb2Rlcyh2ZWN0b3JbaV0ucHJldmlvdXMtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAg
ICAgICAgICAgICBuZXdNb2RlcyB8PSBhc0FycmF5TW9kZXModmVjdG9yW2ldLm5leHQtPmluZGV4
aW5nVHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBtX2FycmF5TW9kZXMgfD0gbmV3TW9kZXM7
CisgICAgfQorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKK30KKwogdm9pZCBBYnN0cmFjdFZhbHVl
OjpzZXRNb3N0U3BlY2lmaWMoR3JhcGgmIGdyYXBoLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlm
ICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICBtX2N1cnJlbnRLbm93
blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgIGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lk
ZXIoc3RydWN0dXJlKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAg
IG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwot
ICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fc3Ry
dWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAgICAg
ICAKQEAgLTUwLDE5ICs2MywyNiBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZp
YyhHcmFwCiAgICAgbV92YWx1ZSA9IHZhbHVlOwogICAgICAgICAKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZh
bHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghIXZhbHVl
ICYmIHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1h
a2VUb3AoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCk7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBz
dHJ1Y3R1cmUpOwotICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CisgICAgICAg
IGlmIChncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRoZSB3YXRjaHBvaW50IGZv
ciB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gc2V0LgorICAgICAgICAgICAgLy8gQnV0IHdlIGNhbid0
IGJlY2F1c2Ugb3VyIHZpZXcgb2Ygd2hhdCBzdHJ1Y3R1cmUgYSB2YWx1ZSBoYXMga2VlcHMgY2hh
bmdpbmcuIFRoYXQncworICAgICAgICAgICAgLy8gd2h5IHdlIGNhbGwgY29uc2lkZXIoKS4KKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM0
MjYKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICAgICAgbV9h
cnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAg
ICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOworICAgICAgICB9CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5j
bGVhcigpOwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAKQEAgLTcwLDE3
ICs5MCwyOSBAQCB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIEpTCiAgICAg
bV92YWx1ZSA9IHZhbHVlOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3Nl
cnRJc1dhdGNoZWQoZ3JhcGgpOwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYg
Z3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIG1fY3VycmVudEtub3duU3RydWN0
dXJlID0gc3RydWN0dXJlOwotICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBz
dHJ1Y3R1cmUpOworICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgIG1fYXJyYXlNb2Rl
cyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICBtX3R5cGUg
PSBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKICAgICBtX3ZhbHVlID0gSlNW
YWx1ZSgpOwogICAgIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNo
ZWQoZ3JhcGgpOworfQorCit2b2lkIEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc2V0KQoreworICAgIG1fc3RydWN0dXJlID0gc2V0OworICAgIG1f
YXJyYXlNb2RlcyA9IHNldC5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3R5cGUg
PSBzZXQuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOworICAgIG1fdmFsdWUgPSBKU1ZhbHVl
KCk7CisgICAgCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0Y2hlZChn
cmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Zml4VHlwZUZvclJlcHJlc2VudGF0aW9u
KE5vZGVGbGFncyByZXByZXNlbnRhdGlvbikKQEAgLTEyOSwyMSArMTYxLDE4IEBAIEZpbHRyYXRp
b25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKEcKICAgICAKICAgICBtX3R5cGUgJj0gb3Ro
ZXIuc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpOwogICAgIG1fYXJyYXlNb2RlcyAmPSBvdGhl
ci5hcnJheU1vZGVzRnJvbVN0cnVjdHVyZXMoKTsKLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5maWx0ZXIob3RoZXIpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CiAgICAgCiAg
ICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHByaW9yIHRvIHRoZSBhYm92ZSB0d28gc3RhdGVtZW50
cyB3ZSBoYWQgKEZvbywgVE9QKSwgd2hlcmUKICAgICAvLyBGb28gaXMgYSBTcGVjdWxhdGVkVHlw
ZSB0aGF0IGlzIGRpc2pvaW50IHdpdGggdGhlIHBhc3NlZCBTdHJ1Y3R1cmVTZXQuIEluIHRoYXQK
ICAgICAvLyBjYXNlLCB3ZSB3aWxsIG5vdyBoYXZlIChOb25lLCBbc29tZVN0cnVjdHVyZV0pLiBJ
biBnZW5lcmFsLCB3ZSBuZWVkIHRvIG1ha2UKICAgICAvLyBzdXJlIHRoYXQgbmV3IGluZm9ybWF0
aW9uIGdsZWFuZWQgZnJvbSB0aGUgU3BlY3VsYXRlZFR5cGUgbmVlZHMgdG8gYmUgZmVkIGJhY2sK
ICAgICAvLyBpbnRvIHRoZSBpbmZvcm1hdGlvbiBnbGVhbmVkIGZyb20gdGhlIFN0cnVjdHVyZVNl
dC4KLSAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKKyAgICBtX3N0
cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKICAgICAKLSAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJl
KGdyYXBoLCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgIAog
ICAgIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwot
ICAgIHJldHVybiBub3JtYWxpemVDbGFyaXR5KCk7CisgICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJp
dHkoZ3JhcGgpOwogfQogCiBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckFy
cmF5TW9kZXMoQXJyYXlNb2RlcyBhcnJheU1vZGVzKQpAQCAtMTY5LDggKzE5OCw3IEBAIEZpbHRy
YXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFMKICAgICAvLyB0aGUgcGFzc2VkIHR5
cGUgaXMgQXJyYXkuIEF0IHRoaXMgcG9pbnQgd2UnbGwgaGF2ZSAoTm9uZSwgVE9QKS4gVGhlIGJl
c3Qgd2F5CiAgICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBmaWx0ZXJpbmcgZG9l
cyB0aGUgcmlnaHQgdGhpbmcgaXMgdG8gZmlsdGVyIG9uCiAgICAgLy8gdGhlIG5ldyB0eXBlIChO
b25lKSByYXRoZXIgdGhhbiB0aGUgb25lIHBhc3NlZCAoQXJyYXkpLgotICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwotICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKHR5cGUpOwogICAgIGZp
bHRlckFycmF5TW9kZXNCeVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHJl
dHVybiBub3JtYWxpemVDbGFyaXR5KCk7CkBAIC0xODQsMTUgKzIxMiw2IEBAIEZpbHRyYXRpb25S
ZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQnkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIEFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiBncmFw
aCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAg
aWYgKGdyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlv
bldhdGNocG9pbnRTZXQoKSkpCi0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmU7Ci0gICAgZWxzZQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1h
a2VUb3AoKTsKLX0KLQogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7
CiAgICAgLy8gV2UgY291bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1
cmVQb3NzaWJsZVN0cnVjdHVyZSBjb250cmF2ZW5lcwpAQCAtMjM4LDggKzI1Nyw3IEBAIGJvb2wg
QWJzdHJhY3RWYWx1ZTo6c2hvdWxkQmVDbGVhcigpIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgCiAgICAgaWYgKCEobV90eXBlICYgflNwZWNDZWxsKQotICAgICAgICAmJiAoIW1fYXJy
YXlNb2RlcwotICAgICAgICAgICAgfHwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigp
KSkKKyAgICAgICAgJiYgKCFtX2FycmF5TW9kZXMgfHwgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDEy
ICsyODEsMTggQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpub3JtYWxpegogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9y
bWFsaXplQ2xhcml0eShHcmFwaCYgZ3JhcGgpCit7CisgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1
bHQgPSBub3JtYWxpemVDbGFyaXR5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBBYnN0cmFj
dFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBpZiAoIShtX3R5cGUgJiBT
cGVjQ2VsbCkpIHsKLSAgICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xl
YXIoKSk7Ci0gICAgICAgIEFTU0VSVChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzQ2xlYXIo
KSk7CisgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICBBU1NF
UlQoIW1fYXJyYXlNb2Rlcyk7CiAgICAgfQogICAgIApAQCAtMjg5LDYgKzMxMywxMSBAQCB2b2lk
IEFic3RyYWN0VmFsdWU6OmNoZWNrQ29uc2lzdGVuY3koKSBjCiAgICAgLy8gd2UgZG9uJ3Qgd2Fu
dCB0byBnZXQgcGVkYW50aWMgYWJvdXQgdGhpcyBhcyBpdCB3b3VsZCBvbmx5IGluY3JlYXNlIHRo
ZSBjb21wdXRhdGlvbmFsCiAgICAgLy8gY29tcGxleGl0eSBvZiB0aGUgY29kZS4KIH0KKwordm9p
ZCBBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQoR3JhcGgmIGdyYXBoKSBjb25zdAorewor
ICAgIG1fc3RydWN0dXJlLmFzc2VydElzV2F0Y2hlZChncmFwaCk7Cit9CiAjZW5kaWYKIAogdm9p
ZCBBYnN0cmFjdFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0zMDIsOCAr
MzMxLDcgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50UwogICAgIGlm
IChtX3R5cGUgJiBTcGVjQ2VsbCkgewogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAi
LCAiLCBBcnJheU1vZGVzRHVtcChtX2FycmF5TW9kZXMpLCAiLCAiLAotICAgICAgICAgICAgaW5D
b250ZXh0KG1fY3VycmVudEtub3duU3RydWN0dXJlLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAg
ICAgIGluQ29udGV4dChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLCBjb250ZXh0KSk7CisgICAg
ICAgICAgICBpbkNvbnRleHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYg
KCEhbV92YWx1ZSkKICAgICAgICAgb3V0LnByaW50KCIsICIsIGluQ29udGV4dChtX3ZhbHVlLCBj
b250ZXh0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAgc3RydWN0
IEFic3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY05vbmU7CiAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IDA7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNs
ZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTc1LDE1ICs3NCw3NCBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpCiAgICAgewog
ICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsb2JiZXIo
KTsKICAgICAgICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAg
ICAgICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICAgICAgQVNT
RVJUKCFtX2FycmF5TW9kZXMpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3ko
KTsKICAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY2xvYmJlclN0cnVjdHVyZXNGb3IoQWJz
dHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICB2YWx1ZS5jbG9iYmVyU3RydWN0dXJl
cygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCisg
ICAgeworICAgICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBv
YnNlcnZlSW52YWxpZGF0aW9uUG9pbnRGb3IoQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgewor
ICAgICAgICB2YWx1ZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8p
CisgICAgeworICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgIG1f
c3RydWN0dXJlLm9ic2VydmVUcmFuc2l0aW9uKGZyb20sIHRvKTsKKyAgICAgICAgICAgIG9ic2Vy
dmVJbmRleGluZ1R5cGVUcmFuc2l0aW9uKGZyb20tPmluZGV4aW5nVHlwZSgpLCB0by0+aW5kZXhp
bmdUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvblZlY3Rv
ciYgdmVjdG9yKTsKKyAgICAKKyAgICBjbGFzcyBUcmFuc2l0aW9uT2JzZXJ2ZXIgeworICAgIHB1
YmxpYzoKKyAgICAgICAgVHJhbnNpdGlvbk9ic2VydmVyKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0
dXJlKiB0bykKKyAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAgICAgICAgICAsIG1fdG8o
dG8pCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBvcGVyYXRv
cigpKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZS5v
YnNlcnZlVHJhbnNpdGlvbihtX2Zyb20sIG1fdG8pOworICAgICAgICB9CisgICAgcHJpdmF0ZToK
KyAgICAgICAgU3RydWN0dXJlKiBtX2Zyb207CisgICAgICAgIFN0cnVjdHVyZSogbV90bzsKKyAg
ICB9OworICAgIAorICAgIGNsYXNzIFRyYW5zaXRpb25zT2JzZXJ2ZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNpdGlvbnNPYnNlcnZlcihjb25zdCBUcmFuc2l0aW9uVmVjdG9yJiB2ZWN0
b3IpCisgICAgICAgICAgICA6IG1fdmVjdG9yKHZlY3RvcikKKyAgICAgICAgeworICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RWYWx1ZSYgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhbHVlLm9ic2VydmVUcmFuc2l0aW9ucyhtX3ZlY3Rv
cik7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBUcmFuc2l0aW9uVmVj
dG9yJiBtX3ZlY3RvcjsKKyAgICB9OworICAgIAogICAgIHZvaWQgY2xvYmJlclZhbHVlKCkKICAg
ICB7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC05MSw3ICsxNDksMTAgQEAgc3Ry
dWN0IEFic3RyYWN0VmFsdWUgewogICAgIAogICAgIGJvb2wgaXNIZWFwVG9wKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZSAmJiBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1RvcCgpICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUuaXNUb3AoKTsKKyAgICAgICAgcmV0dXJuIChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90
eXBlCisgICAgICAgICAgICAmJiBtX3N0cnVjdHVyZS5pc1RvcCgpCisgICAgICAgICAgICAmJiBt
X2FycmF5TW9kZXMgPT0gQUxMX0FSUkFZX01PREVTCisgICAgICAgICAgICAmJiAhbV92YWx1ZTsK
ICAgICB9CiAgICAgCiAgICAgYm9vbCB2YWx1ZUlzVG9wKCkgY29uc3QKQEAgLTExNCwxNiArMTc1
LDE1IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB2b2lkIHNldE1vc3RTcGVjaWZpYyhH
cmFwaCYsIEpTVmFsdWUpOwogICAgIHZvaWQgc2V0KEdyYXBoJiwgSlNWYWx1ZSk7CiAgICAgdm9p
ZCBzZXQoR3JhcGgmLCBTdHJ1Y3R1cmUqKTsKKyAgICB2b2lkIHNldChHcmFwaCYsIGNvbnN0IFN0
cnVjdHVyZVNldCYpOwogICAgIAogICAgIHZvaWQgc2V0VHlwZShTcGVjdWxhdGVkVHlwZSB0eXBl
KQogICAgIHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9j
dXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwotICAgICAgICAgICAgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9w
KCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigpOwot
ICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAg
ICAgICAgIH0KICAgICAgICAgbV90eXBlID0gdHlwZTsKQEAgLTEzOCw4ICsxOTgsNyBAQCBzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVy
Lm1fdHlwZQogICAgICAgICAgICAgJiYgbV9hcnJheU1vZGVzID09IG90aGVyLm1fYXJyYXlNb2Rl
cwotICAgICAgICAgICAgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPT0gb3RoZXIubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUKLSAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUgPT0gb3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZQorICAgICAgICAgICAgJiYgbV9z
dHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKICAgICAgICAgICAgICYmIG1fdmFsdWUgPT0g
b3RoZXIubV92YWx1ZTsKICAgICB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFic3RyYWN0
VmFsdWUmIG90aGVyKSBjb25zdApAQCAtMTYyLDggKzIyMSw3IEBAIHN0cnVjdCBBYnN0cmFjdFZh
bHVlIHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZVNwZWN1
bGF0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKICAgICAgICAgICAgIHJlc3VsdCB8PSBtZXJn
ZUFycmF5TW9kZXMobV9hcnJheU1vZGVzLCBvdGhlci5tX2FycmF5TW9kZXMpOwotICAgICAgICAg
ICAgcmVzdWx0IHw9IG1fY3VycmVudEtub3duU3RydWN0dXJlLmFkZEFsbChvdGhlci5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXN1bHQgfD0gbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSk7CisgICAg
ICAgICAgICByZXN1bHQgfD0gbV9zdHJ1Y3R1cmUubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmUpOwog
ICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIubV92YWx1ZSkgewogICAgICAgICAgICAg
ICAgIHJlc3VsdCB8PSAhIW1fdmFsdWU7CiAgICAgICAgICAgICAgICAgbV92YWx1ZSA9IEpTVmFs
dWUoKTsKQEAgLTE3OSw4ICsyMzcsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAg
IG1lcmdlU3BlY3VsYXRpb24obV90eXBlLCB0eXBlKTsKICAgICAgICAgCiAgICAgICAgIGlmICh0
eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1h
a2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgp
OworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICAgICAgbV9hcnJh
eU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAgICB9CiAgICAgICAgIG1fdmFsdWUgPSBK
U1ZhbHVlKCk7CkBAIC0yMjUsNzUgKzI4MiwzMCBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAg
ICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAgICAgICAgICAgICBBU1NF
UlQobV90eXBlICYgU3BlY0NlbGwpOwogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQotICAgICAgICAgICAgICAgICYm
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIG1fc3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKICAgICAgICAgICAgICAg
ICAmJiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgIAotICAgIFN0cnVjdHVyZSogYmVzdFByb3ZlblN0cnVjdHVyZSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAg
ICAgIGlmIChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAg
ICAgICAgcmV0dXJuIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKICAgICBib29sIGhhc0Nsb2JiZXJhYmxlU3RhdGUo
KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
TmVpdGhlckNsZWFyTm9yVG9wKCkKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmlzTmVpdGhl
ckNsZWFyTm9yVG9wKCkKICAgICAgICAgICAgIHx8ICFhcnJheU1vZGVzQXJlQ2xlYXJPclRvcCht
X2FycmF5TW9kZXMpOwogICAgIH0KICAgICAKICNpZiBBU1NFUlRfRElTQUJMRUQKICAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdCB7IH0KKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChH
cmFwaCYpIGNvbnN0IHsgfQogI2Vsc2UKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25z
dDsKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0OwogI2VuZGlmCiAgICAg
CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICAvLyBBIGdy
ZWF0IHdheSB0byB0aGluayBhYm91dCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIG1fY3VycmVudEtu
b3duU3RydWN0dXJlIGFuZAotICAgIC8vIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgaXMgdG8g
Y29uc2lkZXIgdGhlc2UgZm91ciBleGFtcGxlczoKLSAgICAvLwotICAgIC8vIDEpIHggPSBmb28o
KTsKLSAgICAvLwotICAgIC8vICAgIEluIHRoaXMgY2FzZSB4J3MgbV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUgYW5kIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2lsbAotICAgIC8vICAgIGJvdGgg
YmUgVE9QLCBzaW5jZSB3ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IHggZm9yIHN1cmUsIHll
dC4KLSAgICAvLwotICAgIC8vIDIpIHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAg
IC8vCi0gICAgLy8gICAgV2hlcmUgeCB3aWxsIGxhdGVyIGhhdmUgYSBuZXcgcHJvcGVydHkgYWRk
ZWQgdG8gaXQsICdnJy4gQmVjYXVzZSBvZiB0aGUKLSAgICAvLyAgICBrbm93biBidXQgbm90LXll
dC1leGVjdXRlZCBwcm9wZXJ0eSBhZGRpdGlvbiwgeCdzIGN1cnJlbnQgc3RydWN0dXJlIHdpbGwK
LSAgICAvLyAgICBub3QgYmUgd2F0Y2hwb2ludGFibGU7IGhlbmNlIHdlIGhhdmUgbm8gd2F5IG9m
IHN0YXRpY2FsbHkgYm91bmRpbmcgdGhlIHNldAotICAgIC8vICAgIG9mIHBvc3NpYmxlIHN0cnVj
dHVyZXMgdGhhdCB4IG1heSBoYXZlIGlmIGEgY2xvYmJlcmluZyBldmVudCBoYXBwZW5zLiBTbywK
LSAgICAvLyAgICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgd2lsbCBiZSB3aGF0ZXZlciBz
dHJ1Y3R1cmUgd2UgY2hlY2sgdG8gZ2V0Ci0gICAgLy8gICAgcHJvcGVydHkgJ2YnLCBhbmQgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJlIFRPUC4KLSAgICAvLwotICAgIC8vIDMpIHgg
PSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUgeCBo
YXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBzdGlsbCB3YXRjaHBvaW50YWJsZS4gSW4g
dGhpcyBjYXNlLAotICAgIC8vICAgIHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJvdGggYmUKLSAgICAvLyAgICB3aGF0ZXZlciBz
dHJ1Y3R1cmUgd2UgY2hlY2tlZCBmb3Igd2hlbiBnZXR0aW5nICdmJy4KLSAgICAvLwotICAgIC8v
IDQpIHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vICAgIGJhcigpOwotICAg
IC8vCi0gICAgLy8gICAgV2hlcmUgeCBoYXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBz
dGlsbCB3YXRjaHBvaW50YWJsZS4gSW4gdGhpcwotICAgIC8vICAgIGNhc2UsIG1fY3VycmVudEtu
b3duU3RydWN0dXJlIHdpbGwgYmUgVE9QIGJlY2F1c2UgYmFyKCkgbWF5IHBvdGVudGlhbGx5Ci0g
ICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5kIHdlIGhhdmUgbm8gd2F5IG9mIHByb3Zp
bmcgb3RoZXJ3aXNlLCBidXQKLSAgICAvLyAgICB4J3MgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBoYWQgY2hlY2tlZAotICAgIC8vICAgIHdo
ZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCi0gICAgCi0gICAgLy8gTkIuIEFsbCBmaWVsZHMgaW4g
dGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVzdHJ1Y3RvcnMuCi0KICAgICAvLyBUaGlz
IGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVl
IGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUgc3RydWN0dXJlIG9mIHRoZSBjdXJyZW50
IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBUaGUgc2V0IG1heQogICAgIC8vIGJlIFRP
UCwgaW5kaWNhdGluZyB0aGF0IGl0IGlzIHRoZSBzZXQgb2YgYWxsIHBvc3NpYmxlIHN0cnVjdHVy
ZXMsIGluIHdoaWNoCkBAIC0zMDEsMjkgKzMxMywxMiBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGlzIHZhbHVlIGNhbm5vdCBiZSBhIGNlbGwuIFRoaXMg
aXMgYWxsIHN1YmplY3QgdG8gY2hhbmdlCiAgICAgLy8gYW55dGltZSBhIG5ldyB2YWx1ZSBpcyBh
c3NpZ25lZCB0byB0aGlzIG9uZSwgYW55dGltZSB0aGVyZSBpcyBhIGNvbnRyb2wgZmxvdwogICAg
IC8vIG1lcmdlLCBvciBtb3N0IGNydWNpYWxseSwgYW55dGltZSBhIHNpZGUtZWZmZWN0IG9yIHN0
cnVjdHVyZSBjaGVjayBoYXBwZW5zLgotICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVjdCwg
d2UgdHlwaWNhbGx5IG11c3QgYXNzdW1lIHRoYXQgYW55IHZhbHVlIG1heSBoYXZlCi0gICAgLy8g
aGFkIGl0cyBzdHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2UgY29udHJhdmVuaW5nIG91ciBwcm9vZi4g
V2UgbWFrZSB0aGUgcHJvb2YKLSAgICAvLyB2YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcgdGhpcyB0
byBUT1AgKGkuZS4gY2xhaW1pbmcgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0Ci0gICAgLy8gdGhp
cyB2YWx1ZSBtYXkgaGF2ZSBhbnkgc3RydWN0dXJlKS4gT2Ygbm90ZSBpcyB0aGF0IHRoZSBwcm9v
ZiByZXByZXNlbnRlZCBieQotICAgIC8vIHRoaXMgZmllbGQgaXMgbm90IHN1YmplY3QgdG8gc3Ry
dWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgLSBldmVuIGlmIG9uZQotICAgIC8vIGZpcmVz
LCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoaXMgcHJvb2YgaXMgc3RpbGwgdmFsaWQuCi0gICAgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZTsKLSAgICAKLSAgICAv
LyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlz
IHZhbHVlIGNhbiBoYXZlIG5vdwotICAgIC8vIG9yIGFueSB0aW1lIGluIHRoZSBmdXR1cmUgc3Vi
amVjdCB0byB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgb2YKLSAgICAvLyBh
bGwgbWVtYmVycyBvZiB0aGlzIHNldCBub3QgaGF2aW5nIGZpcmVkLiBUaGlzIHNldCBpcyBpbXBl
cnZpb3VzIHRvIHNpZGUtCi0gICAgLy8gZWZmZWN0czsgZXZlbiBpZiBvbmUgaGFwcGVucyB0aGUg
c2lkZS1lZmZlY3QgY2FuIG9ubHkgY2F1c2UgdGhlIHZhbHVlIHRvCi0gICAgLy8gY2hhbmdlIHRv
IGF0IHdvcnN0IGFub3RoZXIgc3RydWN0dXJlIHRoYXQgaXMgYWxzbyBhIG1lbWJlciBvZiB0aGlz
IHNldC4gQnV0LAotICAgIC8vIHRoZSB0aGVvcmVtIGJlaW5nIHByb3ZlZCBieSB0aGlzIGZpZWxk
IGlzIHByZWRpY2F0ZWQgdXBvbiB0aGVyZSBub3QgYmVpbmcKLSAgICAvLyBhbnkgbmV3IHN0cnVj
dHVyZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGludG8gYW55IG1lbWJlcnMgb2YgdGhpcyBzZXQu
IEluCi0gICAgLy8gY2FzZXMgd2hlcmUgdGhlcmUgaXMgbm8gd2F5IGZvciB1cyB0byBndWFyZCB0
aGlzIGhhcHBlbmluZywgdGhlIHNldCBtdXN0IGJlCi0gICAgLy8gVE9QLiBCdXQgaW4gY2FzZXMg
d2hlcmUgd2UgY2FuIGd1YXJkIG5ldyBzdHJ1Y3R1cmUgdHJhbnNpdGlvbnMgKGFsbCBtZW1iZXJz
Ci0gICAgLy8gb2YgdGhlIHNldCBoYXZlIHN0aWxsLXZhbGlkIHN0cnVjdHVyZSB0cmFuc2l0aW9u
IHdhdGNocG9pbnRzKSB0aGVuIHRoaXMgc2V0Ci0gICAgLy8gd2lsbCBiZSBmaW5pdGUuIEFueXRp
bWUgdGhhdCB3ZSBtYWtlIHVzZSBvZiB0aGUgZmluaXRlIG5hdHVyZSBvZiB0aGlzIHNldCwKLSAg
ICAvLyB3ZSBtdXN0IGZpcnN0IGlzc3VlIGEgc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2lu
dCwgd2hpY2ggd2lsbCBlZmZlY3RpdmVseQotICAgIC8vIHJlc3VsdCBpbiBtX2N1cnJlbnRLbm93
blN0cnVjdHVyZSBiZWluZyBmaWx0ZXJlZCBhY2NvcmRpbmcgdG8KLSAgICAvLyBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9mdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZTsKKyAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3QsIHdlIG11c3Qg
YXNzdW1lIHRoYXQgYW55IHZhbHVlIHdpdGggYSBzdHJ1Y3R1cmUgdGhhdAorICAgIC8vIGlzbid0
IGJlaW5nIHdhdGNoZWQgbWF5IGhhdmUgaGFkIGl0cyBzdHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2Ug
Y29udHJhdmVuaW5nCisgICAgLy8gb3VyIHByb29mLiBJbiBzdWNoIGEgY2FzZSB3ZSBtYWtlIHRo
ZSBwcm9vZiB2YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcgdGhpcyB0bworICAgIC8vIFRPUCAoaS5l
LiBjbGFpbWluZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQgdGhpcyB2YWx1ZSBtYXkgaGF2ZSBh
bnkKKyAgICAvLyBzdHJ1Y3R1cmUpLgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1
Y3R1cmU7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBw
b3NzaWJsZSB0eXBlcyB0aGF0IHRoaXMgdmFsdWUgY2FuIGhhdmUKICAgICAvLyBub3cgb3IgYW55
IHRpbWUgaW4gdGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlzIHJlYXNzaWduZWQuIFRoaXMgZmllbGQg
aXMKQEAgLTMzMiwxMSArMzI3LDExIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAvLyBi
ZXR3ZWVuIHRoaXMgZmllbGQsIGFuZCB0aGUgc3RydWN0dXJlIGZpZWxkcyBhYm92ZSwgaXMgYXMg
Zm9sbG93cy4gVGhlCiAgICAgLy8gZmllbGRzIGFib3ZlIGNvbnN0cmFpbnQgdGhlIHN0cnVjdHVy
ZXMgdGhhdCBhIGNlbGwgbWF5IGhhdmUsIGJ1dCB0aGV5IHNheQogICAgIC8vIG5vdGhpbmcgYWJv
dXQgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGEgY2VsbC4gTW9yZSBm
b3JtYWxseSwKLSAgICAvLyB0aGUgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMgaXRzZWxmIGFu
IGFic3RyYWN0IHZhbHVlIHRoYXQgY29uc2lzdHMgb2YgdGhlCisgICAgLy8gdGhlIG1fc3RydWN0
dXJlIGlzIGl0c2VsZiBhbiBhYnN0cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQogICAg
IC8vIHVuaW9uIG9mIHRoZSBzZXQgb2YgYWxsIG5vbi1jZWxsIHZhbHVlcyBhbmQgdGhlIHNldCBv
ZiBjZWxsIHZhbHVlcyB0aGF0IGhhdmUKICAgICAvLyB0aGUgZ2l2ZW4gc3RydWN0dXJlLiBUaGlz
IGFic3RyYWN0IHZhbHVlIGlzIHRoZW4gdGhlIGludGVyc2VjdGlvbiBvZiB0aGUKLSAgICAvLyBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQgdGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBp
cyBtX3R5cGUuIFNvLCBmb3IKLSAgICAvLyBleGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8
U3BlY0ludDMyIGFuZCBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBpcworICAgIC8vIG1fc3RydWN0
dXJlIGFuZCB0aGUgc2V0IG9mIHZhbHVlcyB3aG9zZSB0eXBlIGlzIG1fdHlwZS4gU28sIGZvcgor
ICAgIC8vIGV4YW1wbGUgaWYgbV90eXBlIGlzIFNwZWNGaW5hbHxTcGVjSW50MzIgYW5kIG1fc3Ry
dWN0dXJlIGlzCiAgICAgLy8gWzB4MTIzNDVdIHRoZW4gdGhpcyBhYnN0cmFjdCB2YWx1ZSBjb3Jy
ZXNwb25kcyB0byB0aGUgc2V0IG9mIGFsbCBpbnRlZ2VycwogICAgIC8vIHVuaWZpZWQgd2l0aCB0
aGUgc2V0IG9mIGFsbCBvYmplY3RzIHdpdGggc3RydWN0dXJlIDB4MTIzNDUuCiAgICAgU3BlY3Vs
YXRlZFR5cGUgbV90eXBlOwpAQCAtMzY0LDYgKzM1OSwxMiBAQCBwcml2YXRlOgogICAgICAgICBt
X2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgfQogICAgIAorICAgIHZvaWQgb2Jz
ZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRpb24oSW5kZXhpbmdUeXBlIGZyb20sIEluZGV4aW5nVHlw
ZSB0bykKKyAgICB7CisgICAgICAgIGlmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoZnJv
bSkpCisgICAgICAgICAgICBtX2FycmF5TW9kZXMgfD0gYXNBcnJheU1vZGVzKHRvKTsKKyAgICB9
CisgICAgCiAgICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7
CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKQEAgLTM5MSwxOSArMzkyLDE3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBtX3R5cGUgfD0gdG9wOwogICAgICAgICBtX2FycmF5TW9kZXMgPSBB
TExfQVJSQVlfTU9ERVM7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3Ao
KTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAg
IG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNldEZ1dHVy
ZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOwotCiAgICAg
dm9pZCBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHZvaWQgZmlsdGVyQXJyYXlNb2Rlc0J5VHlw
ZSgpOwogICAgIAogICAgIGJvb2wgc2hvdWxkQmVDbGVhcigpIGNvbnN0OwogICAgIEZpbHRyYXRp
b25SZXN1bHQgbm9ybWFsaXplQ2xhcml0eSgpOworICAgIEZpbHRyYXRpb25SZXN1bHQgbm9ybWFs
aXplQ2xhcml0eShHcmFwaCYpOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCShyZXZpc2lvbiAxNjk1
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkKiBhbGxvY2F0ZSgpOyAv
LyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwgYW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0
aG9kLgogICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwgdGhpcyBtZXRob2QgdG8gZGVsZXRlOyBu
ZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCiAgICAgCi0gICAgdm9pZCBmcmVlQWxsKCk7IC8v
IE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgorICAgIHZvaWQg
ZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiB5b3UndmUgZWl0aGVyIGZyZWVkIGV2ZXJ5
dGhpbmcgb3IgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCiAgICAgdm9pZCByZXNldCgp
OyAvLyBMaWtlIGZyZWVBbGwoKSwgYnV0IGFsc28gcmV0dXJucyBhbGwgbWVtb3J5IHRvIHRoZSBP
Uy4KICAgICAKICAgICB1bnNpZ25lZCBpbmRleE9mKGNvbnN0IFQqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzI1LDcgKzMyNSw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoK
ICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6CiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlc2UgYmVjYXVzZSBpZiB3ZSBnZXQgdXNlcyBvZiB0aGUg
cmVsZXZhbnQKICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFibGUgdGhlbiB3ZSBjYW4gc2Fm
ZWx5IGdldCByaWQgb2YgdGhlc2UsIHRvby4gVGhpcyBvZiBjb3Vyc2UKQEAgLTQ0MSw3ICs0NDAs
NiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBDaGVj
a0FycmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGdldCByaWQgb2Yg
dGhpcyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhhbnRvbSBhcmd1bWVudC4KICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkocmV2aXNp
b24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yODksMjUgKzI4OSw0OCBAQCBTdHJ1Y3R1cmUqIEFycmF5TW9k
ZTo6b3JpZ2luYWxBcnJheVN0cnVjCiBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSwgSW5kZXhpbmdUeXBl
IHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJyYXlDbGFzcygpKSB7Ci0gICAgY2FzZSBB
cnJheTo6T3JpZ2luYWxBcnJheToKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFw
ZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkKLSAgICAgICAgICAg
ICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5pc09yaWdp
bmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9u
KCkpOworICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6IHsKKyAgICAgICAgaWYgKHZhbHVl
Lm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAg
ICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVN
YXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFncmFwaC5nbG9iYWxPYmplY3RG
b3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKHN0cnVj
dHVyZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBBcnJheTo6QXJyYXk6Cisg
ICAgY2FzZSBBcnJheTo6QXJyYXk6IHsKICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hl
Y2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGlu
Z1NoYXBlTWFzaykgPT0gc2hhcGUKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAg
ICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVj
dHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElu
ZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAgZGVmYXVsdDoKKyAgICBkZWZhdWx0OiB7CiAg
ICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1vZGVzLCBh
c0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1vZGVzKHNoYXBlIHwgSXNBcnJheSkpKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hh
cGVNYXNrKSA9PSBzaGFwZTsKLSAgICB9CisgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5p
c1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICBpZiAo
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgIT0gc2hhcGUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0gfQogfQogCiBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3Jh
cGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZhbHVlJiB2YWx1ZSkgY29uc3QKQEAgLTMz
NiwyMyArMzU5LDM4IEBAIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IK
ICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAg
c3dpdGNoIChhcnJheUNsYXNzKCkpIHsKLSAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJh
eToKKyAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheTogewogICAgICAgICAgICAgQ1JB
U0goKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAgIGNhc2UgQXJyYXk6OkFycmF5OiB7CiAg
ICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2Rl
cywgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1Np
bmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55QXJyYXlTdG9yYWdlKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSkKLSAgICAg
ICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkt
PmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1
Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ld
OworICAgICAgICAgICAgICAgIGlmICghaGFzQW55QXJyYXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tl
ZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3Jh
Z2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRo
U2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRv
bigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAgIH0K
KyAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1f
c3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICAgICAgaWYgKCFoYXNB
bnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9IH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6QXJndW1lbnRzOgog
ICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2VkKHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3Vt
ZW50cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMDksOCArMjEwOSw4
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgQVNTRVJUKHZhcmlh
bnQub2xkU3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRh
dGVkKCkpOwogICAgIAogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKLSAgICBTdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSogdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKAotICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSh2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKSk7CisgICAgVHJhbnNpdGlvbiogdHJh
bnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9ucy5hZGQoCisgICAgICAgIHZhcmlhbnQub2xk
U3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogCiAgICAgaWYgKHZhcmlhbnQu
b2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkKICAgICAgICAgIT0gdmFyaWFudC5u
ZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewpAQCAtMjEyMSwxMCArMjEyMSwx
MCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogCiAgICAgICAgIGlmICgh
dmFyaWFudC5vbGRTdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICBBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisgICAgICAg
ICAgICAgICAgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uKSwgYmFz
ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRU
b0dyYXBoKAotICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5m
byh0cmFuc2l0aW9uRGF0YSksCisgICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSwgT3BJbmZvKHRyYW5zaXRpb24pLAogICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3Jh
cGgoR2V0QnV0dGVyZmx5LCBiYXNlKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjEz
NCw3ICsyMTM0LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsK
ICAgICB9CiAKLSAgICBhZGRUb0dyYXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25E
YXRhKSwgYmFzZSk7CisgICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0
aW9uKSwgYmFzZSk7CiAKICAgICBhZGRUb0dyYXBoKAogICAgICAgICBQdXRCeU9mZnNldCwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAx
Njk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
aWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUsIG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIoVU5TQUZFKSAiKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBtX2ludGVycHJldGVyLmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKG1fc3RhdGUudmFyaWFibGVzKCksICIgIiwgbV9pbnRlcnByZXRlcik7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuaGF2ZVN0cnVjdHVy
ZXMoKSkKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiIChIYXZlIFN0cnVjdHVyZXMpIik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAkocmV2aXNp
b24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2MCwxNyArNDYwLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoK
LSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAgICAgICAg
ICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmUoKSkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAg
ICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5uZXdTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29u
dGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2Rl
LT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKKyAgICAgICAg
ICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJl
dmlvdXMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC01MjQsNyArNTE4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNh
c2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlICE9IHN0cnVjdHVyZSk7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMgIT0gc3RydWN0dXJl
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgUHV0QnlPZmZzZXQ6CkBAIC01NDcsMTEgKzU0MSw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBub2RlLT5j
aGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBB
cnJheWlmeToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAg
ICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291bGQgYWZm
ZWN0IG91ciBzdHJ1Y3R1cmVzLgpAQCAtMTM4NywxMyArMTM3Niw2IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAg
ICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0
aW9uKG5vZGUtPnN0cnVjdHVyZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKICAg
ICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9PSBOb3Jt
YWxDU0UpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOCw3ICs0
MTgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgICAgICByZWFkKEpT
Q2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUgKzMz
LDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RhdGljIHVuc2ln
bmVkIGNyYXNoTG9jazsKKwogdm9pZCBzdGFydENyYXNoaW5nKCkKIHsKICNpZiBFTkFCTEUoQ09N
UEFSRV9BTkRfU1dBUCkKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9jazsKLSAgICB3aGlsZSAoIVdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZsb2NrLCAwLCAxKSkKKyAgICB3aGlsZSAoIVdURjo6d2Vh
a0NvbXBhcmVBbmRTd2FwKCZjcmFzaExvY2ssIDAsIDEpKQogICAgICAgICBzdGQ6OnRoaXNfdGhy
ZWFkOjp5aWVsZCgpOworI2Vsc2UKKyAgICBjcmFzaExvY2sgPSAxOwogI2VuZGlmCiB9CiAKK2Jv
b2wgaXNDcmFzaGluZygpCit7CisgICAgcmV0dXJuICEhY3Jhc2hMb2NrOworfQorCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiArMjExLDgg
QEAgYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogLy8gd2hlbiB5b3UncmUgZm9y
Y2luZyBhIGNyYXNoIHdpdGggZGlhZ25vc3RpY3MuCiB2b2lkIHN0YXJ0Q3Jhc2hpbmcoKTsKIAor
SlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0NyYXNoaW5nKCk7CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDgg
KzQxLDggQEAgdm9pZCBDb21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cgogICAgIHBs
YW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAogICAgICAgICBjb2RlQmxvY2ssCiAgICAgICAgIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKLSAgICAgICAgbm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwKLSAgICAgICAgbm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzLAorICAgICAgICBub2RlLT50cmFuc2l0aW9uKCktPm5leHQp
OwogfQogCiB1bnNpZ25lZCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmlnaW4gY29k
ZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsMjcgKzk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHNldCA9
IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNo
IHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgogICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGVsaW1pbmF0
ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlVmFsdWUg
PSB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlOwotICAgICAgICAgICAgICAgIGlmIChz
dHJ1Y3R1cmVWYWx1ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgICAgICAgICAgJiYgc3Ry
dWN0dXJlVmFsdWUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENhdGNoIHRo
ZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgotICAgICAgICAgICAgICAgICAgICBB
ZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47Ci0gICAgICAgICAgICAgICAg
ICAgIGNoaWxkcmVuLnJlbW92ZUVkZ2UoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghIWNo
aWxkcmVuLmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQu
aW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5vcmlnaW4s
IGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0Q2hpbGQy
KEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMyhF
ZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBlbGltaW5h
dGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtMTU2LDcgKzE0MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogY2hp
bGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlPZmZzZXRE
YXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJv
dmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCkBAIC0xODAsNyArMTY1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAgICAgTXVs
dGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpOwog
Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUo
Y2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25seVN0cnVj
dHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTIwNSw3ICsxOTAsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIGlmIChjaGlsZEVkZ2UudXNlS2luZCgpICE9IENlbGxVc2UpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJv
dmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBt
X3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAK
QEAgLTIzMiw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOwogICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9u
bHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC0zMjksMjIgKzMxNCwxNyBA
QCBwcml2YXRlOgogICAgICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAg
ICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAKLSAgICAgICAgYm9vbCBuZWVk
c1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3Rh
dGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAg
QVNTRVJUKCF2YXJpYW50LmNoYWluKCkpOwotICAgICAgICBBU1NFUlQodmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKS5jb250YWlucyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdHJ1
Y3R1cmUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkuY29udGFpbnMoc3RydWN0dXJlKSk7CiAgICAg
ICAgIAogICAgICAgICAvLyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhl
IENGQSBmb3J3YXJkIG92ZXIgdGhlIEdldEJ5SWQKICAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSB3
ZSBzaWduYWwgdG8gdGhlIGxvb3AgdGhhdCBpdCBzaG91bGQgY29udGludWUgYW5kIG5vdAogICAg
ICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgogICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1
dGUoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgCi0gICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQp
IHsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQs
IG9yaWdpbiwKLSAgICAgICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsK
LSAgICAgICAgfSBlbHNlIGlmIChuZWVkc0NlbGxDaGVjaykgeworICAgICAgICBpZiAobmVlZHND
ZWxsQ2hlY2spIHsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGls
ZEVkZ2UpOwogICAgICAgICB9CkBAIC0zODEsNyArMzYxLDYgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBBU1NFUlQodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwogICAgICAgICAK
LSAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAgICAgYm9vbCBuZWVk
c0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwog
ICAgICAgICAKICAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNo
IHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBQdXRCeUlkCkBAIC0zODksMjEgKzM2OCwxNiBAQCBw
cml2YXRlOgogICAgICAgICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgogICAgICAgICBtX2ludGVy
cHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2NrKTsKIAotICAgICAgICBpZiAobmVlZHNXYXRjaHBv
aW50KSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRn
ZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKKyAgICAgICAgaWYgKG5l
ZWRzQ2VsbENoZWNrKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwg
Y2hpbGRFZGdlKTsKICAgICAgICAgfQogCiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtu
b3duQ2VsbFVzZSk7CiAKLSAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRp
b25EYXRhID0gMDsKKyAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IDA7CiAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewotICAg
ICAgICAgICAgdHJhbnNpdGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHN0cnVjdHVyZSwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOworICAgICAgICAgICAgdHJhbnNpdGlvbiA9IG1fZ3Jh
cGgubV90cmFuc2l0aW9ucy5hZGQoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsK
IAogICAgICAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlJZCkgewogICAgICAgICAgICAg
ICAgIGlmICghc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewpAQCAtNDM5
LDcgKzQxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0
KHZhcmlhbnQub2Zmc2V0KCkpKTsKICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRl
eEluQmxvY2ssIFNwZWNOb25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAg
ICAgICBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CisgICAgICAg
ICAgICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CiAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0
b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxs
VXNlKSk7CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ0OSw3ICs0MjMsNyBAQCBwcml2YXRl
OgogCiAgICAgICAgICAgICBOb2RlKiByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAg
T3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlLAorICAgICAgICAgICAgICAgIE9wSW5m
byh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlLAogICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgR2V0QnV0dGVyZmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkpKTsKICAgICAgICAgICAgIG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJy
aWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsK
QEAgLTQ1Nyw3ICs0MzEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKHZh
cmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7Ci0gICAgICAgICAg
ICBOb2RlKiBwdXRTdHJ1Y3R1cmUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVj
dHVyZSwgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAg
ICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQdXRT
dHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2UpOwogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBT
dG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2Vs
bFVzZSkpOwogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KGluZGV4SW5CbG9jaywg
cHV0U3RydWN0dXJlKTsKICAgICAgICAgfQpAQCAtNDc1LDE2ICs0NDksMTIgQEAgcHJpdmF0ZToK
IAogICAgIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2lu
LCB1bnNpZ25lZCBpbmRleEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7CisgICAgICAgIGlm
IChtX2dyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoY2VsbC0+c3RydWN0dXJlKCkpKQorICAg
ICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9u
RnJvbVZhbHVlKGNlbGwpLCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8oY2VsbCkpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQo
Y2VsbC0+c3RydWN0dXJlKCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7Ci0gICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0g
ICAgICAgICAgICAgICAgT3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3Rh
bnQsIENlbGxVc2UpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNw
ZWNOb25lLCBDaGVja1N0cnVjdHVyZSwgb3JpZ2luLAogICAgICAgICAgICAgT3BJbmZvKG1fZ3Jh
cGguYWRkU3RydWN0dXJlU2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVkZ2Uod2Vha0NvbnN0YW50
LCBDZWxsVXNlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTYyLDE0ICs2MiwxMiBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJy
CiAgICAgbV9idWZmZXJWaWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAKLXZvaWQgRGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0
S2luZCwgV2F0Y2hwb2ludFNldCogc2V0KQorYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNp
ZGVyKFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAgIG1fc2V0cy5hZGRMYXppbHkoY29kZU9y
aWdpbiwgZXhpdEtpbmQsIHNldCk7Ci19Ci0KLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgSW5saW5lV2F0
Y2hwb2ludFNldCYgc2V0KQotewotICAgIG1faW5saW5lU2V0cy5hZGRMYXppbHkoY29kZU9yaWdp
biwgZXhpdEtpbmQsICZzZXQpOworICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNp
dGlvbldhdGNocG9pbnRTZXQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRGVzaXJl
ZFdhdGNocG9pbnRzOjpyZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEm
IGNvbW1vbkRhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDI2
ICszOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdGVtcGxhdGU8
dHlwZW5hbWUgV2F0Y2hwb2ludFNldFR5cGU+Ci1zdHJ1Y3QgV2F0Y2hwb2ludEZvckdlbmVyaWNX
YXRjaHBvaW50U2V0IHsKLSAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQoKQot
ICAgICAgICA6IG1fZXhpdEtpbmQoRXhpdEtpbmRVbnNldCkKLSAgICAgICAgLCBtX3NldCgwKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0
KAotICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRj
aHBvaW50U2V0VHlwZSogc2V0KQotICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQot
ICAgICAgICAsIG1fZXhpdEtpbmQoZXhpdEtpbmQpCi0gICAgICAgICwgbV9zZXQoc2V0KQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgRXhpdEtp
bmQgbV9leGl0S2luZDsKLSAgICBXYXRjaHBvaW50U2V0VHlwZSogbV9zZXQ7Ci19OworY2xhc3Mg
R3JhcGg7CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3Ig
ewpAQCAtOTUsMTIgKzc2LDYgQEAgcHVibGljOgogICAgICAgICBtX3NldHMuYWRkKHNldCk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhp
dEtpbmQgZXhpdEtpbmQsIFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgewotICAgICAgICBt
X3Byb2ZpbGVkV2F0Y2hwb2ludHMuYXBwZW5kKAotICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdl
bmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPihjb2RlT3JpZ2luLCBleGl0S2lu
ZCwgc2V0KSk7Ci0gICAgfQotICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29k
ZUJsb2NrLCBDb21tb25EYXRhJiBjb21tb24pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VS
VCghbV9yZWFsbHlBZGRlZCk7CkBAIC0xMTIsMTQgKzg3LDYgQEAgcHVibGljOgogICAgICAgICAg
ICAgQWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgKml0ZXIsICZjb21tb24ud2F0Y2hwb2ludHMubGFz
dCgpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9w
cm9maWxlZFdhdGNocG9pbnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgV2F0Y2hwb2lu
dEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPiB3YXRjaHBvaW50ID0K
LSAgICAgICAgICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hwb2ludHNbaV07Ci0gICAgICAgICAgICBj
b21tb24ucHJvZmlsZWRXYXRjaHBvaW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgUHJvZmls
ZWRDb2RlQmxvY2tKZXR0aXNvbmluZ1dhdGNocG9pbnQod2F0Y2hwb2ludC5tX2NvZGVPcmlnaW4s
IHdhdGNocG9pbnQubV9leGl0S2luZCwgY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBBZGFwdG9y
OjphZGQoY29kZUJsb2NrLCB3YXRjaHBvaW50Lm1fc2V0LCAmY29tbW9uLnByb2ZpbGVkV2F0Y2hw
b2ludHMubGFzdCgpKTsKLSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRl
ZCA9IHRydWU7CiAgICAgfQogICAgIApAQCAtMTMyLDUzICs5OSwxNiBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX3Byb2ZpbGVkV2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBpZiAoQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKG1fcHJvZmlsZWRXYXRj
aHBvaW50c1tpXS5tX3NldCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0jaWYgQVNT
RVJUX0RJU0FCTEVECi0gICAgYm9vbCBpc1N0aWxsVmFsaWQoV2F0Y2hwb2ludFNldFR5cGUqIHNl
dCkKKyAgICBib29sIGlzV2F0Y2hlZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KSBjb25zdAogICAg
IHsKLSAgICAgICAgcmV0dXJuICFBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQoc2V0KTsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKFdhdGNocG9pbnRTZXRU
eXBlKikKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgYm9v
bCBpc1N0aWxsVmFsaWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAgICB7Ci0gICAgICAgIGJv
b2wgcmVzdWx0ID0gIUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZChzZXQpOwotICAgICAgICBt
X2ZpcnN0S25vd25TdGF0ZS5hZGQoc2V0LCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSAgICAKLSAgICBib29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoV2F0Y2hwb2lu
dFNldFR5cGUqIHNldCkKLSAgICB7Ci0gICAgICAgIHR5cGVuYW1lIFN0YXRlTWFwOjppdGVyYXRv
ciBpdGVyID0gbV9maXJzdEtub3duU3RhdGUuZmluZChzZXQpOwotICAgICAgICBpZiAoaXRlciA9
PSBtX2ZpcnN0S25vd25TdGF0ZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCi0gICAgICAgIHJldHVybiBpdGVyLT52YWx1ZSAhPSAhQWRhcHRvcjo6aGFzQmVlbklu
dmFsaWRhdGVkKHNldCk7Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgYm9vbCBpc1ZhbGlkT3JN
aXhlZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzU3Rp
bGxWYWxpZChzZXQpIHx8IHNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0KTsKKyAgICAgICAgcmV0
dXJuIG1fc2V0cy5jb250YWlucyhzZXQpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8
V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4gbV9w
cm9maWxlZFdhdGNocG9pbnRzOwogICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3Nl
dHM7Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIFN0YXRlTWFwIG1fZmlyc3RLbm93blN0YXRl
OwotI2VuZGlmCiAgICAgYm9vbCBtX3JlYWxseUFkZGVkOwogfTsKIApAQCAtMTkwLDQ4ICsxMjAs
MjQgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXQqKTsKICAgICB2
b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CiAgICAgdm9pZCBhZGRMYXppbHko
SlNBcnJheUJ1ZmZlclZpZXcqKTsKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0
S2luZCwgV2F0Y2hwb2ludFNldCopOwotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4sIEV4
aXRLaW5kLCBJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAgCisgICAgYm9vbCBjb25zaWRlcihT
dHJ1Y3R1cmUqKTsKICAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25E
YXRhJik7CiAgICAgCiAgICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CiAgICAgCi0gICAg
Ym9vbCBpc1N0aWxsVmFsaWQoV2F0Y2hwb2ludFNldCogc2V0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fc2V0cy5pc1N0aWxsVmFsaWQoc2V0KTsKLSAgICB9Ci0gICAgYm9vbCBpc1N0aWxsVmFs
aWQoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5s
aW5lU2V0cy5pc1N0aWxsVmFsaWQoJnNldCk7Ci0gICAgfQotICAgIGJvb2wgaXNTdGlsbFZhbGlk
KEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVy
Vmlld3MuaXNTdGlsbFZhbGlkKHZpZXcpOwotICAgIH0KLSAgICBib29sIHNob3VsZEFzc3VtZU1p
eGVkU3RhdGUoV2F0Y2hwb2ludFNldCogc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2V0
cy5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKHNldCk7Ci0gICAgfQotICAgIGJvb2wgc2hvdWxkQXNz
dW1lTWl4ZWRTdGF0ZShJbmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gbV9pbmxpbmVTZXRzLnNob3VsZEFzc3VtZU1peGVkU3RhdGUoJnNldCk7Ci0gICAgfQot
ICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShKU0FycmF5QnVmZmVyVmlldyogdmlldykK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLnNob3VsZEFzc3VtZU1peGVkU3Rh
dGUodmlldyk7Ci0gICAgfQotICAgIGJvb2wgaXNWYWxpZE9yTWl4ZWQoV2F0Y2hwb2ludFNldCog
c2V0KQorICAgIGJvb2wgaXNXYXRjaGVkKFdhdGNocG9pbnRTZXQqIHNldCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3NldHMuaXNWYWxpZE9yTWl4ZWQoc2V0KTsKKyAgICAgICAgcmV0dXJuIG1f
c2V0cy5pc1dhdGNoZWQoc2V0KTsKICAgICB9Ci0gICAgYm9vbCBpc1ZhbGlkT3JNaXhlZChJbmxp
bmVXYXRjaHBvaW50U2V0JiBzZXQpCisgICAgYm9vbCBpc1dhdGNoZWQoSW5saW5lV2F0Y2hwb2lu
dFNldCYgc2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1ZhbGlkT3JN
aXhlZCgmc2V0KTsKKyAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1dhdGNoZWQoJnNldCk7
CiAgICAgfQotICAgIGJvb2wgaXNWYWxpZE9yTWl4ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcp
CisgICAgYm9vbCBpc1dhdGNoZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewotICAg
ICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1ZhbGlkT3JNaXhlZCh2aWV3KTsKKyAgICAgICAg
cmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRjaGVkKHZpZXcpOwogICAgIH0KICAgICAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4Miw3ICsxODIsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICBjYXNlIFB1dEJ5VmFs
OgogICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OgogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0
cnVjdHVyZToKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MzAsNyArOTMwLDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToK
ICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBj
YXNlIENoZWNrSGFzSW5zdGFuY2U6CiAgICAgICAgIGNhc2UgQ3JlYXRlVGhpczoKQEAgLTEzNTEs
NyArMTM1MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCogc3RyaW5n
UHJvdG90eXBlT2JqZWN0ID0gYXNPYmplY3Qoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQ
cm90b3R5cGUoKSk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJl
ID0gc3RyaW5nUHJvdG90eXBlT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKCFtX2dy
YXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+
dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCisgICAgICAgIGlmICghbV9ncmFwaC53YXRjaHBv
aW50cygpLmNvbnNpZGVyKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICBpZiAoc3RyaW5nUHJvdG90eXBlU3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSkKQEAgLTE5MDUsMjUgKzE5MDQsMTUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgYWRkUmVxdWlyZWRQaGFudG9tKGVkZ2Uubm9kZSgpKTsK
IAorICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhZWRnZS0+aGFzRG91Ymxl
UmVzdWx0KCkpOworCiAgICAgICAgICAgICBOb2RlKiByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAo
ZWRnZS0+aGFzRG91YmxlUmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwg
bmV2ZXIgaGFwcGVuLgotICAgICAgICAgICAgICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKLSAgICAgICAg
ICAgICAgICBkYXRhTG9nKCJGb3VuZCBhbiBJbnQ1MlJlcFVzZSB0byBhIGRvdWJsZSByZXN1bHQ6
ICIsIG5vZGUsICIgLT4gIiwgZWRnZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5k
dW1wKCk7Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIH0gZWxzZSBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1l
dGljKCkpIHsKKyAgICAgICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVJbnQzMkZvckFy
aXRobWV0aWMoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50MzIs
IEludDUyUmVwLCBub2RlLT5vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5u
b2RlKCksIEludDMyVXNlKSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgb25seSBoZXJlIGZvciBkZWFsaW5nIHdpdGggY29uc3RhbnRzLgotICAgICAg
ICAgICAgICAgIGlmIChlZGdlLT5vcCgpICE9IEpTQ29uc3RhbnQpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3RhcnRDcmFzaGluZygpOwotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3Vu
ZCBhbiBJbnQ1MlJlcFVzZSBvbiBzb21ldGhpbmcgdGhhdCBpcyBuZWl0aGVyIEludDMyIG5vciBh
IGNvbnN0YW50OiAiLCBub2RlLCAiIC0+ICIsIGVkZ2UsICJcbiIpOwotICAgICAgICAgICAgICAg
ICAgICBtX2dyYXBoLmR1bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBub2RlLCBlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpOwogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9k
ZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnROdW1i
ZXIoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywxNiBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFu
JiBwbGFuLCBMb25nTGl2CiAKIEdyYXBoOjp+R3JhcGgoKQogeworICAgIGZvciAoQmxvY2tJbmRl
eCBibG9ja0luZGV4ID0gbnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFi
bG9jaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgcGhp
SW5kZXggPSBibG9jay0+cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgbV9h
bGxvY2F0b3IuZnJlZShibG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICBmb3IgKHVuc2ln
bmVkIG5vZGVJbmRleCA9IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAg
IG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIH0KICAgICBtX2Fs
bG9jYXRvci5mcmVlQWxsKCk7CiB9CiAKQEAgLTIxMSw4ICsyMjEsOCBAQCB2b2lkIEdyYXBoOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5D
b250ZXh0KG5vZGUtPnN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmhh
c1N0cnVjdHVyZSgpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dCgqbm9kZS0+
c3RydWN0dXJlKCksIGNvbnRleHQpKTsKLSAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoKm5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUsIGNvbnRleHQpLCAiIC0+
ICIsIGluQ29udGV4dCgqbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUsIGNvbnRleHQpKTsKKyAgICBpZiAobm9kZS0+aGFzVHJhbnNpdGlvbigpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPnRyYW5zaXRpb24oKSwg
Y29udGV4dCkpOwogICAgIGlmIChub2RlLT5oYXNGdW5jdGlvbigpKSB7CiAgICAgICAgIG91dC5w
cmludChjb21tYSwgImZ1bmN0aW9uKCIsIFJhd1BvaW50ZXIobm9kZS0+ZnVuY3Rpb24oKSksICIs
ICIpOwogICAgICAgICBpZiAobm9kZS0+ZnVuY3Rpb24oKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6
aW5mbygpKSkgewpAQCAtODAwLDggKzgxMCw5IEBAIEpTQXJyYXlCdWZmZXJWaWV3KiBHcmFwaDo6
dHJ5R2V0Rm9sZGFibGUKICAgICBKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpzRHluYW1pY0Nh
c3Q8SlNBcnJheUJ1ZmZlclZpZXcqPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CiAgICAgaWYg
KCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIXdhdGNocG9pbnRzKCkuaXNTdGls
bFZhbGlkKHZpZXcpKQorICAgIGlmICghdmlldy0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAw
OworICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwogICAgIHJldHVybiB2aWV3OwogfQogCkBAIC04
NDYsNyArODU3LDYgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgog
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2lu
dGVyKG5vZGUtPnN0cnVjdHVyZVNldCgpW2ldKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CiAgICAgICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpAQCAt
ODU4LDkgKzg2OCwzNCBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
CiAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoCi0gICAgICAgICAgICAgICAgICAgIG5v
ZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgICAgICBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKTsKICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKAotICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7
CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRp
R2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsg
ai0tOykKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRS
ZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBu
ZWVkIHRvIG1hcmsgYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQg
d291bGQKKyAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBD
aGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIG1hcmsgdGhlCisgICAgICAgICAgICAgICAg
ICAgIC8vIGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlP
ZmZzZXQgaWYgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQg
dGhhdC4KKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlh
bnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwor
ICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2lu
dGVyKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlh
bnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC04NzAsNiAr
OTA1LDM1IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICB9
CiB9CiAKK3ZvaWQgR3JhcGg6OmFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K3sKKyAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICh3YXRjaHBvaW50cygpLmlzV2F0Y2hlZChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0KCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgREZHX0NSQVNIKCp0
aGlzLCBudWxscHRyLCB0b0NTdHJpbmcoIlN0cnVjdHVyZSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1
cmUpLCAiIGlzIHdhdGNoYWJsZSBidXQgaXNuJ3QgYmVpbmcgd2F0Y2hlZC4iKS5kYXRhKCkpOwor
fQorCit2b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAorICAgIE5vZGUqIG5vZGUs
IGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3Qg
Y2hhciogYXNzZXJ0aW9uKQoreworICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKKyAgICBkYXRhTG9nKCJE
RkcgQVNTRVJUSU9OIEZBSUxFRDogIiwgYXNzZXJ0aW9uLCAiXG4iKTsKKyAgICBkYXRhTG9nKGZp
bGUsICIoIiwgbGluZSwgIikgOiAiLCBmdW5jdGlvbiwgIlxuIik7CisgICAgZGF0YUxvZygiXG4i
KTsKKyAgICBpZiAobm9kZSkgeworICAgICAgICBkYXRhTG9nKCJXaGlsZSBoYW5kbGluZyBub2Rl
ICIsIG5vZGUsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KKyAgICBkYXRh
TG9nKCJHcmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICBkdW1wKCk7CisgICAgZGF0
YUxvZygiXG4iKTsKKyAgICBkYXRhTG9nKCJERkcgQVNTRVJUSU9OIEZBSUxFRDogIiwgYXNzZXJ0
aW9uLCAiXG4iKTsKKyAgICBkYXRhTG9nKGZpbGUsICIoIiwgbGluZSwgIikgOiAiLCBmdW5jdGlv
biwgIlxuIik7CisgICAgQ1JBU0goKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw4ICsxNjksMTIgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gY29uc3RhbnRSZWdpc3RlcjsKICAgICB9CiAgICAgCisgICAgdm9pZCBh
c3NlcnRJc1dhdGNoZWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAogICAgIHZvaWQgY29u
dmVydFRvQ29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CisgICAgICAg
IGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGFzc2VydElzV2F0Y2hlZCh2YWx1ZS5h
c0NlbGwoKS0+c3RydWN0dXJlKCkpOwogICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkKICAg
ICAgICAgICAgIG5vZGUtPmNvbnZlcnRUb1dlYWtDb25zdGFudCh2YWx1ZS5hc0NlbGwoKSk7CiAg
ICAgICAgIGVsc2UKQEAgLTM5MCwxMiArMzk0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Jm1fc3RydWN0dXJlU2V0Lmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEqIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKGNvbnN0IFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhJiBzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSkKLSAgICB7Ci0gICAgICAgIG1fc3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEuYXBwZW5kKHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKTsKLSAg
ICAgICAgcmV0dXJuICZtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKLSAgICB9Ci0g
ICAgCiAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZv
cihjb2RlT3JpZ2luKTsKQEAgLTQ0Niw4ICs0NDQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9v
bCBtYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChjb25zdCBDb2Rl
T3JpZ2luJiBjb2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGxhbi53YXRjaHBv
aW50cy5pc1N0aWxsVmFsaWQoCi0gICAgICAgICAgICBnbG9iYWxPYmplY3RGb3IoY29kZU9yaWdp
biktPm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOworICAgICAgICByZXR1cm4g
Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hw
b2ludCgpLT5pc1N0aWxsVmFsaWQoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNHbG9iYWxF
eGl0U2l0ZShjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCkK
QEAgLTgwNyw2ICs4MDQsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCB2aXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAgICAgCisgICAgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIGhhbmRsZUFzc2VydGlvbkZhaWx1cmUoCisgICAgICAgIE5vZGUqIG5v
ZGUsIGNvbnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwKKyAg
ICAgICAgY29uc3QgY2hhciogYXNzZXJ0aW9uKTsKKyAgICAKICAgICBWTSYgbV92bTsKICAgICBQ
bGFuJiBtX3BsYW47CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTgyMyw3ICs4MjQs
NyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+
IG1fdmFyaWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0
aW9uLCA4PiBtX2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1
cmVTZXQsIDE2PiBtX3N0cnVjdHVyZVNldDsKLSAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7CisgICAgQmFnPFRy
YW5zaXRpb24+IG1fdHJhbnNpdGlvbnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE5ld0FycmF5QnVm
ZmVyRGF0YSwgND4gbV9uZXdBcnJheUJ1ZmZlckRhdGE7CiAgICAgQmFnPEJyYW5jaERhdGE+IG1f
YnJhbmNoRGF0YTsKICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwpAQCAtOTMzLDYg
KzkzNCwxNyBAQCBwcml2YXRlOgogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNl
KQogCisjZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVh
azsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVf
XywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdoaWxlIChmYWxz
ZSkKKworI2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVy
ZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobm9kZSks
IF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOworCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2
aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0Fu
YWx5c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMyArNjgsMTEgQEAgcHVibGlj
OgogICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwogICAgICAgICAKICAgICAgICAgaWYgKCFt
X2dyYXBoLmJsb2NrKDApLT5zc2EtPmxpdmVBdEhlYWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICBzdGFydENyYXNoaW5nKCk7Ci0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAg
ICJCYWQgbGl2ZW5lc3MgYW5hbHlzaXMgcmVzdWx0OiBsaXZlIGF0IHJvb3QgaXMgbm90IGVtcHR5
OiAiLAotICAgICAgICAgICAgICAgIG5vZGVMaXN0RHVtcChtX2dyYXBoLmJsb2NrKDApLT5zc2Et
PmxpdmVBdEhlYWQpLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2Yg
ZXJyb3I6XG4iKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwotICAgICAgICAgICAgQ1JB
U0goKTsKKyAgICAgICAgICAgIERGR19DUkFTSCgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBu
dWxscHRyLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZygKKyAgICAgICAgICAgICAgICAgICAg
IkJhZCBsaXZlbmVzcyBhbmFseXNpcyByZXN1bHQ6IGxpdmUgYXQgcm9vdCBpcyBub3QgZW1wdHk6
ICIsCisgICAgICAgICAgICAgICAgICAgIG5vZGVMaXN0RHVtcChtX2dyYXBoLmJsb2NrKDApLT5z
c2EtPmxpdmVBdEhlYWQpKS5kYXRhKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2lu
Y2x1ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1
ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAi
REZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKQEAg
LTY3LDE5ICs2OCw2IEBAIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgYm9vbCBy
ZWFsbG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKIH07CiAKLXN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSB7Ci0gICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpIHsg
fQotICAgIAotICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKFN0cnVjdHVyZSogcHJldmlvdXNT
dHJ1Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQotICAgICAgICA6IHByZXZpb3VzU3Ry
dWN0dXJlKHByZXZpb3VzU3RydWN0dXJlKQotICAgICAgICAsIG5ld1N0cnVjdHVyZShuZXdTdHJ1
Y3R1cmUpCi0gICAgewotICAgIH0KLX07Ci0KIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewog
ICAgIHVuc2lnbmVkIHN0YXJ0Q29uc3RhbnQ7CiAgICAgdW5zaWduZWQgbnVtQ29uc3RhbnRzOwpA
QCAtNDg1LDIxICs0NzMsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0
KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9v
cCA9PSBDaGVja1N0cnVjdHVyZSB8fCBtX29wID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpOwotICAg
ICAgICBBU1NFUlQoIWNoaWxkMigpKTsKLSAgICAgICAgQVNTRVJUKCFjaGlsZDMoKSk7Ci0gICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1
aW50cHRyX3Q+KHN0cnVjdHVyZSk7Ci0gICAgICAgIG1fb3AgPSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludCgpCi0gICAgewotICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5vbmx5U3RydWN0dXJlKCkpOwotICAgIH0K
LSAgICAKICAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09
IEdldEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2ggfHwgbV9vcCA9PSBNdWx0aUdldEJ5T2Zm
c2V0KTsKQEAgLTEwOTEsNyArMTA2NCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb3BJbmZvKTsKICAgICB9CiAKLSAgICBib29sIGhh
c1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkKKyAgICBib29sIGhhc1RyYW5zaXRpb24oKQogICAg
IHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgpA
QCAtMTEwNCwxMCArMTA3NywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEmIHN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
KCkKKyAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVCho
YXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpKTsKLSAgICAgICAgcmV0dXJuICpyZWludGVycHJl
dF9jYXN0PFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKj4obV9vcEluZm8pOworICAgICAgICBBU1NF
UlQoaGFzVHJhbnNpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VHJh
bnNpdGlvbio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmVT
ZXQoKQpAQCAtMTEyOSw3ICsxMTAyLDYgQEAgc3RydWN0IE5vZGUgewogICAgIGJvb2wgaGFzU3Ry
dWN0dXJlKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNlIE5ld1N0cmluZ09i
amVjdDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTUzLDE4ICsxNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5v
ZGVDbG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmUsIE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhDaGVja0V4ZWN1dGFibGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
LSAgICAvKiBUcmFuc2l0aW9uIHdhdGNocG9pbnRzIGFyZSBhIGNvbnRyYWN0IGJldHdlZW4gdGhl
IHBhcnR5IHNldHRpbmcgdGhlIHdhdGNocG9pbnQgKi9cCi0gICAgLyogYW5kIHRoZSBydW50aW1l
IHN5c3RlbSwgd2hlcmUgdGhlIHBhcnR5IHByb21pc2VzIHRoYXQgdGhlIGNoaWxkIG9iamVjdCBv
bmNlIGhhZCAqL1wKLSAgICAvKiB0aGUgc3RydWN0dXJlIGJlaW5nIHdhdGNoZWQsIGFuZCB0aGUg
cnVudGltZSBzeXN0ZW0gaW4gdHVybiBwcm9taXNlcyB0aGF0IHRoZSAqL1wKLSAgICAvKiB3YXRj
aHBvaW50IHdpbGwgYmUgdHVybmVkIGludG8gYW4gT1NSIGV4aXQgaWYgYW55IG9iamVjdCB3aXRo
IHRoYXQgc3RydWN0dXJlICovXAotICAgIC8qIGV2ZXIgdHJhbnNpdGlvbnMgdG8gYSBkaWZmZXJl
bnQgc3RydWN0dXJlLiBIZW5jZSwgdGhlIGNoaWxkIG9iamVjdCBtdXN0IGhhdmUgKi9cCi0gICAg
LyogcHJldmlvdXNseSBoYWQgYSBDaGVja1N0cnVjdHVyZSBleGVjdXRlZCBvbiBpdCBvciB3ZSdy
ZSBkZWFsaW5nIHdpdGggYW4gb2JqZWN0ICovXAotICAgIC8qIGNvbnN0YW50IChXZWFrSlNDb25z
dGFudCkgYW5kIHRoZSBvYmplY3Qgd2FzIGtub3duIHRvIGhhdmUgdGhhdCBzdHJ1Y3R1cmUgYXQg
Ki9cCi0gICAgLyogY29tcGlsZS10aW1lLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhpcyBtZWFucyB0
aGF0IG5vIHN0cnVjdHVyZSBjaGVja3MgaGF2ZSB0byBiZSAqL1wKLSAgICAvKiBwZXJmb3JtZWQg
Zm9yIHRoaXMgb2JqZWN0IGJ5IEpJVHRlZCBjb2RlLiBJbiB0aGUgZm9ybWVyIGNhc2UgdGhpcyBt
ZWFucyB0aGF0Ki9cCi0gICAgLyogdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBkb2VzIG5vdCBuZWVk
IHRvIGJlIHJlY2hlY2tlZCBkdWUgdG8gc2lkZS1lZmZlY3RpbmcgKi9cCi0gICAgLyogKGNsb2Ji
ZXJpbmcpIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0U3RydWN0dXJlLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVjdHVyZSwgTm9kZU11c3RH
ZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEFsbG9jYXRlUHJvcGVydHlT
dG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0
b3JhZ2UpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhh
c2UuaCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdp
c3RlckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdh
dGNoaW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKQEAg
LTIzMyw2ICsyMzQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhy
CiAgICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRp
Y3Rpb25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgIHBlcmZv
cm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhkZmcpOwogICAgIHBlcmZvcm1JbnZhbGlkYXRp
b25Qb2ludEluamVjdGlvbihkZmcpOwogICAgIHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyhkZmcp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDYgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAg
Y2FzZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQdXRT
dHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTY5NTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI3NSwyMiArMjc1LDI2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFj
dFN0YXRlVHlwZSYgc3QKICAgICAgICAgcmV0dXJuIG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQ
dXQoKS5hbHJlYWR5Q2hlY2tlZCgKICAgICAgICAgICAgIGdyYXBoLCBub2RlLCBzdGF0ZS5mb3JO
b2RlKGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKSk7CiAKLSAgICBjYXNlIFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKSkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKAotICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgICAgIAogICAgIGNhc2Ug
UHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICBjYXNlIEFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZToKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2YoCi0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSkpOworICAgICAg
ICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZigKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT50cmFuc2l0aW9uKCktPnByZXZp
b3VzKSk7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldDoKLSAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICByZXR1cm4g
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNW
YWxpZE9mZnNldCgKLSAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+
c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5vZmZzZXQpOworICAgIGNhc2UgUHV0QnlPZmZzZXQ6
IHsKKyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5mb3JOb2Rl
KG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKKyAgICAgICAgaWYgKHZhbHVlLmlzVG9wKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRl
eCgpXS5vZmZzZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgaWYgKCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjk1
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjk3LDI5ICszNjk3LDYgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgLy8g
VGhlcmUgaXMgYSBmYXNjaW5hdGluZyBxdWVzdGlvbiBoZXJlIG9mIHdoYXQgdG8gZG8gYWJvdXQg
YXJyYXkgcHJvZmlsaW5nLgotICAgICAgICAvLyBXZSAqY291bGQqIHRyeSB0byB0ZWxsIHRoZSBP
U1IgZXhpdCBhYm91dCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgYWNjZXNzIGlzLgotICAgICAgICAv
LyBUaGUgREZHIHdpbGwgaGF2ZSBrZXB0IGl0IGFsaXZlLCB0aG91Z2ggaXQgbWF5IG5vdCBiZSBp
biBhIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHJlYWxseSBsb2FkIGl0
IHNpbmNlIHRoYXQgY291bGQgYmUgYSB3YXN0ZS4gRm9yIG5vdyB0aG91Z2gsCi0gICAgICAgIC8v
IHdlJ2xsIGp1c3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdoZW4gYSB3YXRjaHBvaW50IGZpcmVz
IHRoZW4gdGhhdCdzCi0gICAgICAgIC8vIHF1aXRlIGEgaGludCBhbHJlYWR5LgotICAgICAgICAK
LSAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAg
ICAgIAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNP
SyA9IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKG9wMS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgVHJ1c3RlZEltbVB0
cihub2RlLT5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0gICAg
ICAgIGlzT0subGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAgICAgc3BlY3VsYXRlQ2VsbChub2Rl
LT5jaGlsZDEoKSk7Ci0jZW5kaWYKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgICAgICAKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsK
ICAgICAgICAgQVNTRVJUKGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAg
ICAgICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFu
c2l0aW9uKG1faml0LmdyYXBoKCkubV9wbGFuLCBtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NjcsMzIgKzM3NjcsNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDogewotICAgICAgICAvLyBUaGVyZSBpcyBhIGZhc2NpbmF0aW5nIHF1ZXN0aW9uIGhlcmUgb2Yg
d2hhdCB0byBkbyBhYm91dCBhcnJheSBwcm9maWxpbmcuCi0gICAgICAgIC8vIFdlICpjb3VsZCog
dHJ5IHRvIHRlbGwgdGhlIE9TUiBleGl0IGFib3V0IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBhY2Nl
c3MgaXMuCi0gICAgICAgIC8vIFRoZSBERkcgd2lsbCBoYXZlIGtlcHQgaXQgYWxpdmUsIHRob3Vn
aCBpdCBtYXkgbm90IGJlIGluIGEgcmVnaXN0ZXIsIGFuZAotICAgICAgICAvLyB3ZSBzaG91bGRu
J3QgcmVhbGx5IGxvYWQgaXQgc2luY2UgdGhhdCBjb3VsZCBiZSBhIHdhc3RlLiBGb3Igbm93IHRo
b3VnaCwKLSAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hlbiBh
IHdhdGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKLSAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFs
cmVhZHkuCi0KLSAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1Y3R1cmUo
KSk7Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
T0sgPSBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6
RXF1YWwsIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0Nl
bGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgp
KTsKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBpc09LLmxpbmsoJm1faml0
KTsKLSNlbHNlCi0gICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQxKCkpOwotI2VuZGlm
Ci0gICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotICAgICAgICAKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgQVNT
RVJUKGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICBtX2ppdC5q
aXRDb2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1faml0
LmdyYXBoKCkubV9wbGFuLCBtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CkBAIC0zODAxLDggKzM3
NzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQog
ICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewotICAgICAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1
Y3R1cmU7Ci0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmU7CisgICAgICAgIFN0cnVjdHVyZSogb2xkU3Ry
dWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsKKyAgICAgICAgU3RydWN0dXJl
KiBuZXdTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CiAKICAgICAgICAgbV9q
aXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbiht
X2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOTgsNyArNDI5OCw3IEBAIGJvb2wgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUt
PnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUlu
ZGV4aW5nSGVhZGVyKCkpIHsKKyAgICBpZiAobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKQEAgLTQzMTgsOCArNDMxOCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3By
KCk7CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgICAgIAot
ICAgIEFTU0VSVCghbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVj
dHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVD
YXBhY2l0eSA9PSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKCFub2RlLT50cmFuc2l0aW9uKCktPnBy
ZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGlu
ZUNhcGFjaXR5ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHko
KSk7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQogICAgICAgICBlbWl0
QWxsb2NhdGVCYXNpY1N0b3JhZ2UoCkBAIC00MzM3LDExICs0MzM3LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBzaXplX3Qg
b2xkU2l6ZSA9IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgc2l6ZV90IG9s
ZFNpemUgPSBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgp
ICogc2l6ZW9mKEpTVmFsdWUpOwogICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9m
TGluZUdyb3d0aEZhY3RvcjsKLSAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT5zdHJ1Y3R1cmVU
cmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVv
ZihKU1ZhbHVlKSk7CisgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5u
ZXh0LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKIAotICAgIGlmIChu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhh
dmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlv
dXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
MTUsNyArMzExNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09iamUK
ICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9CiAgICAgICAgIG1faml0Lmds
b2JhbE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmpl
Y3RTdHJ1Y3R1cmUoKTsKICAgICAKLSAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RT
dHJ1Y3R1cmUpKSkgeworICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fc3RydWN0dXJl
LmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKSB7CiAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBOb3RTdHJpbmdPYmplY3QsIEpTVmFs
dWVSZWdzKCksIDAsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikK
KyAgICA6IG1fc2V0KG90aGVyLm1fc2V0KQoreworICAgIHNldENsb2JiZXJlZChvdGhlci5pc0Ns
b2JiZXJlZCgpKTsKK30KKworU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6b3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQor
eworICAgIG1fc2V0ID0gb3RoZXIubV9zZXQ7CisgICAgc2V0Q2xvYmJlcmVkKG90aGVyLmlzQ2xv
YmJlcmVkKCkpOworICAgIHJldHVybiAqdGhpczsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptYWtlVG9wKCkKK3sKKyAgICBtX3NldC5kZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNl
c3NhcnkoKTsKKyAgICBtX3NldC5tX3BvaW50ZXIgPSB0b3BWYWx1ZTsKK30KKworI2lmICFBU1NF
UlRfRElTQUJMRUQKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVk
KEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKKyAgICAgICAgZ3Jh
cGguYXNzZXJ0SXNXYXRjaGVkKGF0KGkpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVE
CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigpCit7CisgICAgLy8gVGhl
IHByZW1pc2Ugb2YgdGhpcyBhcHByb2FjaCB0byBjbG9iYmVyaW5nIGlzIHRoYXQgYW55dGltZSB3
ZSBpbnRyb2R1Y2UKKyAgICAvLyBhIHdhdGNoYWJsZSBzdHJ1Y3R1cmUgaW50byBhbiBhYnN0cmFj
dCB2YWx1ZSwgd2Ugd2F0Y2hwb2ludCBpdC4gWW91IGNhbiBhc3NlcnQKKyAgICAvLyB0aGF0IHRo
aXMgaG9sZHMgYnkgY2FsbGluZyBhc3NlcnRJc1dhdGNoZWQoKS4KKyAgICAgICAgCisgICAgaWYg
KGlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldENsb2JiZXJlZCh0cnVlKTsKKyAg
ICAgICAgCisgICAgaWYgKG1fc2V0LmlzVGhpbigpKSB7CisgICAgICAgIGlmICghbV9zZXQuc2lu
Z2xlU3RydWN0dXJlKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghbV9zZXQu
c2luZ2xlU3RydWN0dXJlKCktPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAgICAgICAgICBtYWtlVG9w
V2hlblRoaW4oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgU3RydWN0
dXJlU2V0OjpPdXRPZkxpbmVMaXN0KiBsaXN0ID0gbV9zZXQuc3RydWN0dXJlTGlzdCgpOworICAg
IGZvciAodW5zaWduZWQgaSA9IGxpc3QtPm1fbGVuZ3RoOyBpLS07KSB7CisgICAgICAgIGlmICgh
bGlzdC0+bGlzdCgpW2ldLT5kZmdTaG91bGRXYXRjaCgpKSB7CisgICAgICAgICAgICBtYWtlVG9w
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb24oU3RydWN0dXJlKiBmcm9tLCBT
dHJ1Y3R1cmUqIHRvKQoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKCFtX3NldC5jb250YWlucyhmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGlmIChmcm9tLT5kZmdTaG91bGRXYXRjaCgpKSB7CisgICAgICAgIHNldENsb2JiZXJlZCh0
cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZCh0
bykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1v
cnBoaXNtTGltaXQpCisgICAgICAgIG1ha2VUb3AoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvblZlY3RvciYgdmVj
dG9yKQoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3Ry
dWN0dXJlU2V0IG5ld1N0cnVjdHVyZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yLnNp
emUoKTsgaS0tOykgeworICAgICAgICBpZiAoIW1fc2V0LmNvbnRhaW5zKHZlY3RvcltpXS5wcmV2
aW91cykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZWN0
b3JbaV0ucHJldmlvdXMtPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAgICAgICAgICBzZXRDbG9iYmVy
ZWQodHJ1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1N0cnVjdHVyZXMuYWRkKHZl
Y3RvcltpXS5uZXh0KTsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX3NldC5tZXJnZShuZXdTdHJ1
Y3R1cmVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX3NldC5zaXplKCkgPiBw
b2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAgbWFrZVRvcCgpOworfQorCitib29sIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBpZiAoaXNU
b3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghbV9zZXQuYWRkKHN0
cnVjdHVyZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6
ZSgpID4gcG9seW1vcnBoaXNtTGltaXQpCisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZShjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQoreworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIG1lcmdlTm90VG9wKG90aGVyKTsKK30KKworYm9v
bCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBvdGhlcikKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIGlmIChvdGhlci5pc1RvcCgpKSB7CisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIEl0IGlzbid0IGltbWVkaWF0ZWx5
IG9idmlvdXMgdGhhdCB0aGUgY29kZSBiZWxvdyBpcyBkb2luZyB0aGUgcmlnaHQgdGhpbmcsIHNv
IGxldCdzIGdvCisgICAgLy8gdGhyb3VnaCBpdC4KKyAgICAvLworICAgIC8vIFRoaXMgbm90IGNs
b2JiZXJlZCwgb3RoZXIgbm90IGNsb2JiZXJlZDogQ2xlYXJseSwgd2UgZG9uJ3Qgd2FudCB0byBt
YWtlIGFueXRoaW5nIGNsb2JiZXJlZAorICAgIC8vIHNpbmNlIHdlIGp1c3QgaGF2ZSB0d28gc2V0
cyBhbmQgd2UgYXJlIG1lcmdpbmcgdGhlbS4gbWVyZ2VOb3RUb3AoKSBjYW4gaGFuZGxlIHRoaXMg
anVzdAorICAgIC8vIGZpbmUuCisgICAgLy8KKyAgICAvLyBUaGlzIGNsb2JiZXJlZCwgb3RoZXIg
Y2xvYmJlcmVkOiBDbG9iYmVyZWQgbWVhbnMgdGhhdCB3ZSBoYXZlIGEgc2V0IG9mIHRoaW5ncywg
cGx1cyB3ZQorICAgIC8vIHRlbXBvcmFyaWx5IGhhdmUgdGhlIHNldCBvZiBhbGwgdGhpbmdzIGJ1
dCB0aGUgbGF0dGVyIHdpbGwgZ28gYXdheSBvbmNlIHdlIGhpdCB0aGUgbmV4dAorICAgIC8vIGlu
dmFsaWRhdGlvbiBwb2ludC4gVGhpcyBhbGxvd3MgdXMgdG8gbWVyZ2UgdHdvIGNsb2JiZXJlZCBz
ZXRzIHRoZSBuYXR1cmFsIHdheS4gRm9yIG5vdworICAgIC8vIHRoZSBzZXQgd2lsbCBzdGlsbCBi
ZSBUT1AgKGFuZCBzbyB3ZSBrZWVwIHRoZSBjbG9iYmVyZWQgYml0IHNldCksIGJ1dCB3ZSBrbm93
IHRoYXQgYWZ0ZXIKKyAgICAvLyBpbnZhbGlkYXRpb24sIHdlIHdpbGwgaGF2ZSB0aGUgdW5pb24g
b2YgdGhlIHRoaXMgYW5kIG90aGVyLgorICAgIC8vCisgICAgLy8gVGhpcyBjbG9iYmVyZWQsIG90
aGVyIG5vdCBjbG9iYmVyZWQ6IEl0J3Mgc2FmZSB0byBtZXJnZSBpbiBvdGhlciBmb3IgYm90aCBi
ZWZvcmUgYW5kIGFmdGVyCisgICAgLy8gaW52YWxpZGF0aW9uLCBzbyBsb25nIGFzIHdlIGxlYXZl
IHRoZSBjbG9iYmVyZWQgYml0IHNldC4gQmVmb3JlIGludmFsaWRhdGlvbiB0aGlzIGhhcyBubwor
ICAgIC8vIGVmZmVjdCBzaW5jZSB0aGUgc2V0IHdpbGwgc3RpbGwgYXBwZWFyIHRvIGhhdmUgYWxs
IHRoaW5ncyBpbiBpdC4gVGhlIHdheSB0byB0aGluayBhYm91dAorICAgIC8vIHdoYXQgaW52YWxp
ZGF0aW9uIHdvdWxkIGRvIGlzIGltYWdpbmUgaWYgd2UgaGFkIGEgc2V0IEEgdGhhdCB3YXMgY2xv
YmJlcmVkIGFuZCBhIHNldCBCCisgICAgLy8gdGhhdCB3YXNuJ3QgYW5kIHdlIGNvbnNpZGVyZWQg
dGhlIGZvbGxvd2luZyB0d28gY2FzZXMuIE5vdGUgdGhhdCB3ZSBleHBlY3QgQSB0byBiZSB0aGUK
KyAgICAvLyBzYW1lIGF0IHRoZSBlbmQgaW4gYm90aCBjYXNlczoKKyAgICAvLworICAgIC8vICAg
ICAgICAgICAgQS5tZXJnZShCKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52YWxpZGF0
aW9uUG9pbnQKKyAgICAvLyAgICAgICAgICAgIEludmFsaWRhdGlvblBvaW50ICAgICAgICAgICAg
ICAgICAgICAgIEEubWVyZ2UoQikKKyAgICAvLworICAgIC8vIFRoZSBmYWN0IHRoYXQgd2UgZXhw
ZWN0IEEgdG8gYmUgdGhlIHNhbWUgaW4gYm90aCBjYXNlcyBtZWFucyB0aGF0IHdlIHdhbnQgdG8g
bWVyZ2Ugb3RoZXIKKyAgICAvLyBpbnRvIHRoaXMgYnV0IGtlZXAgdGhlIGNsb2JiZXJlZCBiaXQu
CisgICAgLy8KKyAgICAvLyBUaGlzIG5vdCBjbG9iYmVyZWQsIG90aGVyIGNsb2JiZXJlZDogVGhp
cyBpcyBqdXN0IHRoZSBjb252ZXJzZSBvZiB0aGUgcHJldmlvdXMgY2FzZS4gV2UKKyAgICAvLyB3
YW50IHRvIG1lcmdlIG90aGVyIGludG8gdGhpcyBhbmQgc2V0IHRoZSBjbG9iYmVyZWQgYml0Lgor
ICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGlmICghaXNDbG9iYmVy
ZWQoKSAmJiBvdGhlci5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIHNldENsb2JiZXJlZCh0cnVl
KTsKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgfQorICAgIAorICAgIGNoYW5nZWQgfD0g
bWVyZ2VOb3RUb3Aob3RoZXIubV9zZXQpOworICAgIAorICAgIHJldHVybiBjaGFuZ2VkOworfQor
Citib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlTm90VG9wKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpCit7CisgICAgaWYgKCFtX3NldC5tZXJnZShvdGhlcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGlt
aXQpCisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cikKK3sKKyAgICBpZiAoaXNUb3AoKSkgeworICAgICAgICBtX3NldCA9IG90aGVyOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpc0Nsb2JiZXJlZCgpKSB7CisgICAgICAg
IC8vIFdlIGhhdmUgdHdvIGNob2ljZXMgaGVyZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8g
bm90aGluZzogSXQncyBsZWdhbCB0byBrZWVwIG91ciBzZXQgaW50YWN0LCB3aGljaCB3b3VsZCBl
c3NlbnRpYWxseSBtZWFuIHRoYXQgZm9yCisgICAgICAgIC8vIG5vdywgb3VyIHNldCB3b3VsZCBi
ZWhhdmUgbGlrZSBUT1AgYnV0IGFmdGVyIHRoZSBuZXh0IGludmFsaWRhdGlvbiBwb2ludCBpdCB3
b2xkIGJlCisgICAgICAgIC8vIGEgZmluaXRlIHNldCBhZ2Fpbi4gVGhpcyBtYXkgYmUgYSBnb29k
IGNob2ljZSBpZiAnb3RoZXInIGlzIG11Y2ggYmlnZ2VyIHRoYW4gb3VyCisgICAgICAgIC8vIG1f
c2V0LgorICAgICAgICAvLworICAgICAgICAvLyBSZXBsYWNlIG1fc2V0IHdpdGggb3RoZXIgYW5k
IGNsZWFyIHRoZSBjbG9iYmVyIGJpdDogVGhpcyBpcyBhbHNvIGxlZ2FsLCBhbmQgbWVhbnMgdGhh
dAorICAgICAgICAvLyB3ZSdyZSBubyBsb25nZXIgY2xvYmJlcmVkLiBUaGlzIGlzIHVzdWFsbHkg
YmV0dGVyIGJlY2F1c2UgaXQgaW1tZWRpYXRlbHkgZ2l2ZXMgdXMgYQorICAgICAgICAvLyBzbWFs
bGVyIHNldC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBzY2VuYXJpbyBzaG91bGQgY29t
ZSB1cCByYXJlbHkuIFdlIHVzdWFsbHkgZG9uJ3QgZG8gYW55dGhpbmcgdG8gYW4gYWJzdHJhY3Qg
dmFsdWUKKyAgICAgICAgLy8gYWZ0ZXIgaXQgaXMgY2xvYmJlcmVkLiBCdXQgd2UgYXBwbHkgc29t
ZSBoZXVyaXN0aWNzLgorICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IG1fc2V0
LnNpemUoKSArIGNsb2JiZXJlZFN1cHJlbWFjeVRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVy
bjsgLy8gS2VlcCB0aGUgY2xvYmJlcmVkIHNldC4KKyAgICAgICAgCisgICAgICAgIG1fc2V0ID0g
b3RoZXI7CisgICAgICAgIHNldENsb2JiZXJlZChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgbV9zZXQuZmlsdGVyKG90aGVyKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIp
Cit7CisgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAob3RoZXIuaXNDbG9iYmVyZWQoKSkgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNDbG9iYmVyZWQoKSkgeworICAg
ICAgICAgICAgLy8gU2VlIGp1c3RpZmljYXRpb24gaW4gZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYpLCBhYm92ZS4gQW4gdW5jbG9iYmVyZWQgc2V0IGlzCisgICAgICAgICAgICAvLyBhbG1vc3Qg
YWx3YXlzIGJldHRlci4KKyAgICAgICAgICAgIGlmIChtX3NldC5zaXplKCkgPiBvdGhlci5tX3Nl
dC5zaXplKCkgKyBjbG9iYmVyZWRTdXByZW1hY3lUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAg
KnRoaXMgPSBvdGhlcjsgLy8gS2VlcCB0aGUgY2xvYmJlcmVkIHNldC4KKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fc2V0LmZpbHRlcihvdGhlci5tX3NldCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZmlsdGVyKG90aGVyLm1fc2V0KTsKK30K
KworbmFtZXNwYWNlIHsKKworY2xhc3MgQ29uZm9ybXNUb1R5cGUgeworcHVibGljOgorICAgIENv
bmZvcm1zVG9UeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJl
KHN0cnVjdHVyZSkgJiBtX3R5cGUpOworICAgIH0KK3ByaXZhdGU6CisgICAgU3BlY3VsYXRlZFR5
cGUgbV90eXBlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCit7CisgICAgaWYg
KCEodHlwZSAmIFNwZWNDZWxsKSkgeworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgQ29uZm9ybXNUb1R5cGUgY29uZm9ybXNUb1R5cGUodHlwZSk7CisgICAgbV9zZXQuZ2VuZXJp
Y0ZpbHRlcihjb25mb3Jtc1RvVHlwZSk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6Y29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9w
KCkgfHwgaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0
dXJuIG1fc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorewor
ICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhlcik7Cit9CisKK2Jvb2wgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAKKyAgICBpZiAoaXNDbG9iYmVyZWQoKSA9PSBvdGhlci5pc0Nsb2JiZXJlZCgpKQorICAg
ICAgICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhlci5tX3NldCk7CisgICAgCisgICAgLy8g
SGVyZSBpdCBnZXRzIHRyaWNreS4gSWYgaW4gZG91YnQsIHJldHVybiBmYWxzZSEKKyAgICAKKyAg
ICBpZiAoaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBIGNsb2JiZXJl
ZCBzZXQgaXMgbmV2ZXIgYSBzdWJzZXQgb2YgYW4gdW5jbG9iYmVyZWQgc2V0LgorICAgIAorICAg
IC8vIEFuIHVuY2xvYmJlcmVkIHNldCBpcyBjdXJyZW50bHkgYSBzdWJzZXQgb2YgYSBjbG9iYmVy
ZWQgc2V0LCBidXQgaXQgbWF5IG5vdCBiZSBzbyBhZnRlcgorICAgIC8vIGludmFsaWRhdGlvbi4K
KyAgICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpIGNvbnN0Cit7CisgICAgaWYgKGlzVG9wKCkgfHwgaXNDbG9iYmVyZWQoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0LmlzU3VwZXJzZXRPZihvdGhlcik7
Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3ZlcmxhcHMoY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQub3ZlcmxhcHMo
b3RoZXIpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om92ZXJsYXBzKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIGlmIChvdGhlci5p
c1RvcCgpIHx8IG90aGVyLmlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IAorICAgIHJldHVybiBvdmVybGFwcyhvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBv
dGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9zZXQubV9wb2ludGVyID09IG90aGVyLm1fc2V0Lm1f
cG9pbnRlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzVG9wKCkgfHwg
b3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBUaGV5IGNhbid0IGJlIGJv
dGggdG9wIGJlY2F1c2UgdGhlbiB0aGVpciBwb2ludGVyIHZhbHVlcyB3b3VsZCBoYXZlIGJlZW4g
aWRlbnRpY2FsLCBhYm92ZS4KKyAgICAKKyAgICByZXR1cm4gbV9zZXQgPT0gb3RoZXIubV9zZXQK
KyAgICAgICAgJiYgaXNDbG9iYmVyZWQoKSA9PSBvdGhlci5pc0Nsb2JiZXJlZCgpOworfQorCit2
b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91
dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKGlzQ2xvYmJlcmVkKCkp
CisgICAgICAgIG91dC5wcmludCgiQ2xvYmJlcmVkOiIpOworICAgIAorICAgIGlmIChpc1RvcCgp
KQorICAgICAgICBvdXQucHJpbnQoIlRPUCIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50
KGluQ29udGV4dChtX3NldCwgY29udGV4dCkpOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0
KG91dCwgMCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVO
QUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkpT
Q2VsbC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiRHVtcENvbnRl
eHQuaCIKQEAgLTM3LDMwMCArMzgsMTQxIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAogY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSgpCi0gICAgICAgIDogbV9zdHJ1Y3R1cmUoMCkKLSAgICB7Ci0gICAg
fQotICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKSB7IH0KICAgICBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgICAgICA6IG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHNldC5z
aXplKCkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSAxOgotICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSB0b3BWYWx1
ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBjbGVhcigpCi0gICAgewotICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgbWFrZVRvcCgpCi0gICAgewotICAgICAgICBtX3N0cnVjdHVyZSA9IHRvcFZhbHVl
KCk7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgp
Ci0gICAgewotICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAgICAgICB2
YWx1ZS5tYWtlVG9wKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogbV9zZXQoc3RydWN0dXJl
KQogICAgIHsKLSAgICAgICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpICYmICFpc1RvcCgp
KTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICAgICAg
c2V0Q2xvYmJlcmVkKGZhbHNlKTsKICAgICB9Ci0gICAgCi0gICAgYm9vbCBhZGRBbGwoY29uc3Qg
U3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpCisgICAgICAgIDogbV9zZXQob3RoZXIpCiAgICAgewotICAgICAg
ICBpZiAoaXNUb3AoKSB8fCAhb3RoZXIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAob3RoZXIuc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgbWFrZVRvcCgp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFtX3N0
cnVjdHVyZSkgewotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlclswXTsKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBv
dGhlclswXSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgbWFrZVRvcCgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsKICAgICB9
CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcik7CiAgICAgCi0gICAgYm9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIW90aGVyLm1fc3RydWN0dXJlKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKLSAgICAgICAgICAg
IG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVy
Lm1fc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOwogICAgIAotICAgIGJvb2wgY29udGFpbnMoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0CisgICAgdm9pZCBjbGVhcigpCiAgICAgewotICAgICAgICBp
ZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAobV9zdHJ1
Y3R1cmUgPT0gc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICAgICAgc2V0Q2xvYmJlcmVk
KGZhbHNlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUp
OwotICAgIH0KKyAgICB2b2lkIG1ha2VUb3AoKTsKICAgICAKLSAgICBib29sIGRvZXNOb3RDb250
YWluQW55T3RoZXJUaGFuKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICgh
bV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG1f
c3RydWN0dXJlID09IHN0cnVjdHVyZTsKLSAgICB9CisjaWYgQVNTRVJUX0RJU0FCTEVECisgICAg
dm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdCB7IH0KKyNlbHNlCisgICAgdm9pZCBh
c3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKKyNlbmRpZgogICAgIAotICAgIGJvb2wgaXNT
dXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAg
ICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIW90
aGVyLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAob3RoZXIu
c2l6ZSgpID4gMSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIG1f
c3RydWN0dXJlID09IG90aGVyWzBdOwotICAgIH0KKyAgICB2b2lkIGNsb2JiZXIoKTsKKyAgICB2
b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpIHsgc2V0Q2xvYmJlcmVkKGZhbHNlKTsgfQog
ICAgIAotICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBv
dGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIGlmIChvdGhl
ci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3Ro
ZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24oU3Ry
dWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKTsKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9u
cyhjb25zdCBUcmFuc2l0aW9uVmVjdG9yJik7CiAgICAgCi0gICAgYm9vbCBpc1N1cGVyc2V0T2Yo
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7Ci0gICAgfQotICAgIAotICAgIHZvaWQg
ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIW1f
c3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGlz
VG9wKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAg
ICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAob3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUpKQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KLSAgICAKLSAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKLSAgICB7Ci0gICAgICAg
IGlmIChpc1RvcCgpKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0
dXJlOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVj
dHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
aWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3RydWN0
dXJlID0gMDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgb3Ro
ZXIpCi0gICAgewotICAgICAgICBpZiAoIShvdGhlciAmIFNwZWNDZWxsKSkgewotICAgICAgICAg
ICAgY2xlYXIoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgaWYgKGlzQ2xlYXJPclRvcCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAg
IGlmICghKHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSkgJiBvdGhlcikpCi0g
ICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNDbGVh
cigpIGNvbnN0CisgICAgc3RhdGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkKICAgICB7
Ci0gICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmU7Ci0gICAgfQotICAgIAotICAgIGJvb2wgaXNU
b3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA9PSB0b3BWYWx1ZSgpOyB9CisgICAgICAg
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9zZXQubV9w
b2ludGVyID0gdG9wVmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmlzRW1wdHkoKTsgfQorICAg
IGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3NldC5tX3BvaW50ZXIgPT0gdG9wVmFsdWU7
IH0KKyAgICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xl
YXIoKSAmJiAhaXNUb3AoKTsgfQorICAgIAorICAgIC8vIEEgY2xvYmJlcmVkIGFic3RyYWN0IHZh
bHVlIG1lYW5zIHRoYXQgdGhlIHNldCBjdXJyZW50bHkgY29udGFpbnMgdGhlIG1fc2V0IHNldCBv
ZgorICAgIC8vIHN0cnVjdHVyZXMgcGx1cyBUT1AsIGV4Y2VwdCB0aGF0IFRPUCB3aWxsIGdvIGF3
YXkgYXQgdGhlIG5leHQgaW52YWxpZGF0aW9uIHBvaW50LiBOb3RlCisgICAgLy8gdGhhdCBpbnR1
aXRpdmVseSB5b3UgY2FuIHNvbWV0aW1lcyB0aGluayBvZiB0aGlzIGFzICJ0aGUgc2V0IG9mIHN0
cnVjdHVyZXMgaW4gbV9zZXQgcGx1cworICAgIC8vIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0cmFu
c2l0aW9uLXJlYWNoYWJsZSBmcm9tIG1fc2V0IiAtIGJ1dCB0aGlzIGlzbid0IHJlYWxseSBjb3Jy
ZWN0LAorICAgIC8vIHNpbmNlIGlmIHdlIGFkZCBhbiB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgYWZ0
ZXIgY2xvYmJlcmluZywgdGhlIHR3byBkZWZpbml0aW9ucyBhcmUgbm90CisgICAgLy8gZXF1aXZh
bGVudC4gSWYgd2UgZG8gdGhpcywgdGhlIG5ldyB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgd2lsbCBi
ZSBhZGRlZCB0byBtX3NldC4KKyAgICAvLyBJbnZhbGlkYXRpb24gcG9pbnRzIGRvIG5vdCB0cnkg
dG8gImNsaXAiIHRoZSBzZXQgb2YgdHJhbnNpdGlvbi1yZWFjaGFibGUgc3RydWN0dXJlcyBmcm9t
CisgICAgLy8gbV9zZXQgYnkgbG9va2luZyBhdCByZWFjaGFiaWxpdHkgYXMgdGhpcyB3b3VsZCBt
ZWFuIHRoYXQgdGhlIG5ldyBzZXQgaXMgVE9QLiBJbnN0ZWFkIHRoZXkKKyAgICAvLyBsaXRlcmFs
bHkgYXNzdW1lIHRoYXQgdGhlIHNldCBpcyBqdXN0IG1fc2V0IHJhdGhlciB0aGFuIFRPUC4KKyAg
ICBib29sIGlzQ2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuZ2V0UmVzZXJ2ZWRGbGFn
KCk7IH0KKyAgICAKKyAgICBib29sIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CisgICAgCisg
ICAgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKKyAgICBib29sIG1lcmdl
KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKTsKKyAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBvdGhlcik7CisgICAgdm9pZCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUg
dHlwZSk7CiAgICAgCi0gICAgYm9vbCBpc0NsZWFyT3JUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZSA8PSB0b3BWYWx1ZSgpOyB9Ci0gICAgYm9vbCBpc05laXRoZXJDbGVhck5vclRvcCgp
IGNvbnN0IHsgcmV0dXJuICFpc0NsZWFyT3JUb3AoKTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCiAgICAgc2l6
ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAg
ICAgcmV0dXJuICEhbV9zdHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5zaXplKCk7CiAg
ICAgfQogICAgIAogICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAg
ICAgICBBU1NFUlQoIWlzVG9wKCkpOwotICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOwor
ICAgICAgICByZXR1cm4gbV9zZXQuYXQoaSk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSog
b3BlcmF0b3JbXShzaXplX3QgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChpKTsK
LSAgICB9CisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVy
biBhdChpKTsgfQogICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgLy8gRklY
TUU6IEVsaW1pbmF0ZSBhbGwgdXNlcyBvZiB0aGlzIG1ldGhvZC4gVGhlcmUgc2hvdWxkbid0IGJl
IGFueQorICAgIC8vIHNwZWNpYWwtY2FzaW5nIGZvciB0aGUgb25lLXN0cnVjdHVyZSBjYXNlLgor
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAg
ICBTdHJ1Y3R1cmUqIG9ubHlTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlz
VG9wKCkgfHwgc2l6ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAg
ICAgcmV0dXJuIGF0KDApOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxh
dGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQot
ICAgICAgICAgICAgcmV0dXJuIFNwZWNDZWxsOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAg
ICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlKG1fc3RydWN0dXJlKTsKLSAgICB9CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKICAgICAKLSAgICBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQg
b2Zmc2V0KQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCk7Ci0gICAg
fQorICAgIC8vIFRoZSBtZXRob2RzIGJlbG93IGFyZSBhbGwgY29uc2VydmF0aXZlIGFuZCBlcnIg
b24gdGhlIHNpZGUgb2YgbWFraW5nICd0aGlzJyBhcHBlYXIgYmlnZ2VyCisgICAgLy8gdGhhbiBp
dCBpcy4gRm9yIGV4YW1wbGUsIGNvbnRhaW5zKCkgbWF5IHJldHVybiB0cnVlIGlmIHRoZSBzZXQg
aXMgY2xvYmJlcmVkIG9yIFRPUC4KKyAgICAvLyBpc1N1YnNldE9mKCkgbWF5IHJldHVybiBmYWxz
ZSBpbiBjYXNlIG9mIGFtYmlndWl0aWVzLiBUaGVyZWZvcmUgeW91IHNob3VsZCBvbmx5IHBlcmZv
cm0KKyAgICAvLyBvcHRpbWl6YXRpb25zIGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhlICJ0aGlzIGlz
IHNtYWxsZXIiIHJldHVybiB2YWx1ZSAtIHNvIGZhbHNlIGZvcgorICAgIC8vIGNvbnRhaW5zKCks
IHRydWUgZm9yIGlzU3Vic2V0T2YoKSwgZmFsc2UgZm9yIGlzU3VwZXJzZXRPZigpLCBhbmQgZmFs
c2UgZm9yIG92ZXJsYXBzKCkuCisKKyAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0
dXJlKSBjb25zdDsKICAgICAKLSAgICBib29sIGhhc1NpbmdsZXRvbigpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKTsKLSAgICB9CisgICAgYm9vbCBp
c1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNT
dWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAg
Ci0gICAgU3RydWN0dXJlKiBzaW5nbGV0b24oKSBjb25zdAorICAgIGJvb2wgaXNTdXBlcnNldE9m
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNTdXBlcnNldE9m
KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzTmVpdGhlckNsZWFyTm9yVG9wKCkpOwotICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmU7CisgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlzKTsKICAgICB9CiAg
ICAgCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90
aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlOwotICAgIH0KKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYg
b3RoZXIpIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpIGNvbnN0OwogICAgIAotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0
cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3ByaXZhdGU6CisgICAgc3Rh
dGljIGNvbnN0IHVpbnRwdHJfdCBjbG9iYmVyZWRGbGFnID0gU3RydWN0dXJlU2V0OjpyZXNlcnZl
ZEZsYWc7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0b3BWYWx1ZSA9IFN0cnVjdHVyZVNl
dDo6cmVzZXJ2ZWRWYWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcG9seW1vcnBoaXNt
TGltaXQgPSAxMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2xvYmJlcmVkU3VwcmVtYWN5
VGhyZXNob2xkID0gMjsKKyAgICAKKyAgICB2b2lkIG1ha2VUb3BXaGVuVGhpbigpCiAgICAgewot
ICAgICAgICBpZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50
KCJbIik7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG91dC5wcmludChp
bkNvbnRleHQoKm1fc3RydWN0dXJlLCBjb250ZXh0KSk7Ci0gICAgICAgIG91dC5wcmludCgiXSIp
OworICAgICAgICBBU1NFUlQobV9zZXQuaXNUaGluKCkpOworICAgICAgICBtX3NldC5tX3BvaW50
ZXIgPSB0b3BWYWx1ZTsKICAgICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICAKKyAgICBib29sIG1lcmdlTm90VG9wKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpOworICAgIAorICAgIHZvaWQgc2V0Q2xvYmJlcmVkKGJvb2wgY2xvYmJlcmVkKQogICAgIHsK
LSAgICAgICAgZHVtcEluQ29udGV4dChvdXQsIDApOworICAgICAgICBBU1NFUlQoIWlzVG9wKCkg
fHwgIWNsb2JiZXJlZCk7CisgICAgICAgIG1fc2V0LnNldFJlc2VydmVkRmxhZyhjbG9iYmVyZWQp
OwogICAgIH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgU3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7IH0KLSAgICAKLSAgICAvLyBO
Qi4gVGhpcyBtdXN0IGhhdmUgYSB0cml2aWFsIGRlc3RydWN0b3IuCiAgICAgCi0gICAgLy8gVGhp
cyBjYW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KLSAgICBTdHJ1Y3R1
cmUqIG1fc3RydWN0dXJlOworICAgIFN0cnVjdHVyZVNldCBtX3NldDsKIH07CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJh
bnNpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
cmFuc2l0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHJhbnNpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKwordm9pZCBUcmFuc2l0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1
bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChwb2ludGVyRHVtcElu
Q29udGV4dChwcmV2aW91cywgY29udGV4dCksICIgLT4gIiwgcG9pbnRlckR1bXBJbkNvbnRleHQo
bmV4dCwgY29udGV4dCkpOworfQorCit2b2lkIFRyYW5zaXRpb246OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdUcmFuc2l0aW9uX2gKKyNkZWZpbmUgREZHVHJhbnNpdGlvbl9o
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFN0cnVj
dHVyZTsKK3N0cnVjdCBEdW1wQ29udGV4dDsKKworbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBU
cmFuc2l0aW9uIHsKKyAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzOworICAgIFN0cnVjdHVyZSogbmV4
dDsKKyAgICAKKyAgICBUcmFuc2l0aW9uKCkKKyAgICAgICAgOiBwcmV2aW91cyhudWxscHRyKQor
ICAgICAgICAsIG5leHQobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFRyYW5zaXRp
b24oU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQorICAgICAgICA6IHByZXZp
b3VzKHByZXZpb3VzKQorICAgICAgICAsIG5leHQobmV4dCkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit0eXBlZGVmIFZlY3Rv
cjxUcmFuc2l0aW9uLCAzPiBUcmFuc2l0aW9uVmVjdG9yOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1RyYW5z
aXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hv
aXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNSw4ICsyMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyAr
K2luZGV4SW5CbG9jaykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQo
aW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKLSAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAgICAgICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9kZS0+
Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkgIT0g
R2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4NSwxMyArMjg0
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1
cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3Vy
Y2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVj
dHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzMxLDcgKzMyMyw2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKQEAgLTM4
NiwxMyArMzc3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Rp
Y2VTdHJ1Y3R1cmVDaGVja0FjY291bnRpbmdGb3JBcnJheU1vZGUodmFyaWFibGUsIHN1Yk5vZGUt
PnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVja0FjY291bnRpbmdGb3JBcnJh
eU1vZGUodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFz
ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworY2xhc3MgV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZSA6IHB1YmxpYyBQaGFzZSB7
CitwdWJsaWM6CisgICAgV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZShHcmFwaCYgZ3Jh
cGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ3YXRjaGFibGUgc3RydWN0dXJlIHdhdGNoaW5n
IikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIC8v
IFRoZXNlIGFyZSBwcmV0dHkgZHVtYiwgYnV0IG5lZWRlZCB0byBwbGFjYXRlIHN1YnNlcXVlbnQg
YXNzZXJ0aW9ucy4gV2UgY29uJ3QgYWN0dWFsbHkKKyAgICAgICAgLy8gaGF2ZSB0byB3YXRjaCB0
aGVzZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc2l0aW9uIGF3YXkgZnJvbSBpdCwg
YnV0IHRoZXkgYXJlCisgICAgICAgIC8vIHdhdGNoYWJsZSBhbmQgc28gd2Ugd2lsbCBhc3NlcnQg
aWYgdGhleSBhcmVuJ3Qgd2F0Y2hlZC4KKyAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5tX3ZtLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSk7IAorICAgICAgICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uZ2V0
dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJ
bmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgp
OworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9kZSog
bm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBKU0NvbnN0YW50
OgorICAgICAgICAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAg
ICAgIHRyeVdhdGNoKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNl
IENoZWNrRnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmZ1bmN0
aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICAgICAg
dHJ5V2F0Y2gobm9kZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToK
KyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlU2V0KCkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgICAgICAgICAg
ICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1
cmU6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICAg
ICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAgY2Fz
ZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2go
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNl
dDoKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERh
dGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlh
bnQuc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZh
cmlhbnQuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
bmVlZCB0byB3YXRjaCBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhh
dCB3b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQg
aW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1c2Ug
TXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyB2YXJpYW50cyBkaWQgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdmFy
aWFudC5jYWxsTGlua1N0YXR1cygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2Rl
LT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAg
ICAgICAgdHJ5V2F0Y2godmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXk6Cisg
ICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAgICAg
dHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmluZGV4
aW5nVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAgICAg
ICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBUb1N0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFw
aC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2Vt
YW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdSZWdleHA6
CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgdHJ5V2F0Y2goSlNWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVlLmFz
Q2VsbCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChKU0NlbGwqIGNlbGwpCisg
ICAgeworICAgICAgICBpZiAoY2VsbCkKKyAgICAgICAgICAgIHRyeVdhdGNoKGNlbGwtPnN0cnVj
dHVyZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7IGkt
LTspCisgICAgICAgICAgICB0cnlXYXRjaChzZXRbaV0pOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHRyeVdhdGNoKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgbV9ncmFwaC53
YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSk7CisgICAgfQorfTsKKworYm9vbCBwZXJm
b3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNhbXBs
aW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgV2F0Y2hhYmxlIFN0cnVjdHVyZSBXYXRjaGlu
ZyIpOworICAgIHJldHVybiBydW5QaGFzZTxXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
PihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2V0IHdhdGNocG9pbnRzIG9u
IGFueSBzdHJ1Y3R1cmVzIHRoYXQgd2Uga25vdyBvZiB0aGF0IGFyZSBjdXJyZW50bHkgd2F0Y2hh
YmxlLiBJdCdzCisvLyBzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlLCBidXQgdGhpcyBlbmRzIHVw
IGJlaW5nIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZlY3RpdmUgd2F5CisvLyBvZiByZWR1Y2lu
ZyBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRlcm1pbmFsIHN0cnVjdHVyZXM6CisvLworLy8gLSBXZSB1
c2VkIHRvIG9ubHkgc2V0IHdhdGNocG9pbnRzIG9uIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzIGlmIHdl
IGtuZXcgdGhhdCB0aGlzIHdvdWxkCisvLyAgIHJlbW92ZSBhIHN0cnVjdHVyZSBjaGVjay4gRXhw
ZXJpbWVudHMgc2hvdyB0aGF0IHN3aXRjaGluZyBmcm9tIHRoYXQsIHRvIGJsaW5kbHkKKy8vICAg
c2V0dGluZyB3YXRjaHBvaW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMsIHdhcyBub3Qg
YSByZWdyZXNzaW9uLgorLy8KKy8vIC0gSXQgbWFrZXMgYWJzdHJhY3QgaW50ZXJwcmV0YXRpb24g
YSB3aG9sZSBsb3QgZWFzaWVyLiBXZSBqdXN0IGFzc3VtZSB0aGF0IHdhdGNoYWJsZQorLy8gICBz
dHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGFueSBvdGhl
ciBsb2dpYy4KKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NCw4ICs2NCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBoYW5k
bGUoKQogICAgIHsKLSAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9u
b2RlLCBoYW5kbGVFZGdlKTsKLSAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgp
KSB7CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSXNVbmRl
ZmluZWQ6CkBAIC0xMTksMTMgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRMYXpp
bHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAot
ICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAg
bV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLT5vcCgp
ID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IDogQmFk
Q2FjaGVXYXRjaHBvaW50LAotICAgICAgICAgICAgICAgIG1fbm9kZS0+c3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBhZGRMYXpp
bHkobV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTE0NywyNiArMTM4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAg
ICB2b2lkIGhhbmRsZUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHN3aXRj
aCAoZWRnZS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6Ci0gICAg
ICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6IHsKLSAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVjdFN0
cnVjdHVyZSgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1
cmUgPSBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNW
YWxpZE9yTWl4ZWQoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMo
KS5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsIE5v
dFN0cmluZ09iamVjdCwKLSAgICAgICAgICAgICAgICBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgdm9pZCBoYW5kbGVNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRX
YXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9u
IDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxldmVs
IGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRVUlNo
aWZ0OgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgY2FzZSBQ
dXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJl
dmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0VKLCBmdW5j
dGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludDY0KSkgXAogICAgIG1hY3JvKFNfSklUT3BlcmF0
aW9uX0VKSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCwgaW50NjQpKSBcCiAg
ICAgbWFjcm8oU19KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50NjQpKSBc
CisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb24sIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwKICAg
ICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FSkpKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0
ciwgaW50NjQsIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pE
LCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91YmxlVHlw
ZSkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVy
YXRpb25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAg
bWFjcm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwg
aW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJh
dGlvbl9KLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklU
T3BlcmF0aW9uX1osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIpKSBcCiAgICAgbWFjcm8o
Wl9KSVRPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBlKGludDMyLCBkb3VibGVUeXBlKSkKIAogY2xh
c3MgSW50cmluc2ljUmVwb3NpdG9yeSA6IHB1YmxpYyBDb21tb25WYWx1ZXMgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDIsNyArMjAyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0OwogICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9kZSByZXN1bHQgdHlwZSIpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbV9waGlz
LmFkZChub2RlLCBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIHR5cGUpKTsKQEAgLTI1OCw3
ICsyNTgsMjEgQEAgcHJpdmF0ZToKICAgICBib29sIGNvbXBpbGVOb2RlKHVuc2lnbmVkIG5vZGVJ
bmRleCkKICAgICB7CiAgICAgICAgIGlmICghbV9zdGF0ZS5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgICAgICBtX291dC5jcmFzaCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIGRvbWluYXRlZCBibG9ja3MuIFVu
ZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzIHdlIHdvdWxkIGV4cGVjdAorICAgICAgICAgICAgLy8g
dGhlbSB0byBiZSBpbnZhbGlkYXRlZCBhbHJlYWR5LiBCdXQgeW91IGNhbiBoYXZlIHRoZSBDRkEg
YmVjb21lIG1vcmUKKyAgICAgICAgICAgIC8vIHByZWNpc2Ugb3ZlciB0aW1lIGJlY2F1c2UgdGhl
IHN0cnVjdHVyZXMgb2Ygb2JqZWN0cyBjaGFuZ2Ugb24gdGhlIG1haW4KKyAgICAgICAgICAgIC8v
IHRocmVhZC4gRmFpbGluZyB0byBkbyB0aGlzIHdvdWxkIHJlc3VsdCBpbiB3ZWlyZCBjcmFzaGVz
IGR1ZSB0byBhIHZhbHVlCisgICAgICAgICAgICAvLyBiZWluZyB1c2VkIGJ1dCBub3QgZGVmaW5l
ZC4gUmFjZSBjb25kaXRpb25zIEZUVyEKKyAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
a0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMobV9o
aWdoQmxvY2ssIHRhcmdldCkpCisgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+Y2ZhSGFzVmlz
aXRlZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTksOSArNDEzLDYgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAgIGNvbXBpbGVD
aGVja1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBjb21waWxlU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENo
ZWNrRnVuY3Rpb246CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tGdW5jdGlvbigpOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC02MzYsMTIgKzY0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
QWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQgbm9kZSBpbiBGVEwg
YmFja2VuZDpcbiIpOwotICAgICAgICAgICAgbV9ncmFwaC5kdW1wKFdURjo6ZGF0YUZpbGUoKSwg
IiAgICAiLCBtX25vZGUpOwotICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAgICAgICAgICAg
IGRhdGFMb2coIkZ1bGwgZ3JhcGggZHVtcDpcbiIpOwotICAgICAgICAgICAgbV9ncmFwaC5kdW1w
KCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBi
YWNrZW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTY3
NSw3ICs2ODEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNzAxLDcgKzcwNyw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmdldChzb3VyY2UpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtNzQ0LDcgKzc1MCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTc2OSw3ICs3NzUsNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC04
MjEsNyArODI3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2lu
ZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC04MzAsNyArODM2
LDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0
ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKTsKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQob3BlcmFuZC5pc0FyZ3VtZW50KCkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpOwogCiAgICAgICAgIExWYWx1ZSBqc1ZhbHVl
ID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCkBAIC04NTEsNyArODU3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTg3
MCw3ICs4NzYsNyBAQCBwcml2YXRlOgogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgQWJzdHJhY3RWYWx1
ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkp
OwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYWJsZS0+aXNDYXB0
dXJlZCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24odmFsdWUu
bV90eXBlKSkKICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXlsb2FkRm9yKHZh
cmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpKTsKQEAgLTkyMiw3ICs5MjgsNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xMDk4LDcgKzExMDQsNyBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0K
QEAgLTExNzIsNyArMTE3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQi
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI3NSw3ICsxMjgx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzczLDcgKzEzNzksNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTE0MjQsNyArMTQzMCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
dXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ1
MCw3ICsxNDU2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTE3LDcgKzE1MjMsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KQEAgLTE2MDksMTIgKzE2MTUsNiBAQCBwcml2YXRlOgogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBjb21waWxlU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKQotICAgIHsKLSAg
ICAgICAgYWRkV2Vha1JlZmVyZW5jZShtX25vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgc3Bl
Y3VsYXRlQ2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBjb21w
aWxlQ2hlY2tGdW5jdGlvbigpCiAgICAgewogICAgICAgICBMVmFsdWUgY2VsbCA9IGxvd0NlbGwo
bV9ub2RlLT5jaGlsZDEoKSk7CkBAIC0xNjgzLDcgKzE2ODMsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVBcnJheVN0b3JhZ2Up
LCBtX2NhbGxGcmFtZSwgY2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTcwMCw4ICsxNzAwLDggQEAgcHJp
dmF0ZToKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLm5vdGlmeUNv
bXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVCbG9jaygpLCBt
X25vZGUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlOwotICAgICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdT
dHJ1Y3R1cmU7CisgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9ub2RlLT50cmFu
c2l0aW9uKCktPnByZXZpb3VzOworICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1f
bm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwogICAgICAgICBBU1NFUlRfVU5VU0VEKG9sZFN0cnVj
dHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPmluZGV4
aW5nVHlwZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxp
bmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5lVHlwZUZsYWdz
KCkpOwogICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBu
ZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKQEAgLTE3NTcsNyArMTc1Nyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KQEAgLTE4ODMsNyArMTg4Myw3IEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBjaGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICBzZXRJbnQzMihtX291dC5hZGQobV9vdXQubG9hZDMyTm9u
TmVnYXRpdmUocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIG1fb3V0LmNvbnN0
SW50MzIoLTEpKSk7CiAgICAgfQogICAgIApAQCAtMTkwOSw3ICsxOTA5LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBGVEwgc2hvdWxkIHN1cHBvcnQgYWN0aXZhdGlvbnMuCiAg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5
NTc2CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5pbXBsZW1lbnRl
ZCIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBUeXBlZFBvaW50ZXIgYmFzZTsKQEAg
LTE5NDYsNyArMTk0Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBh
cnJheSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0y
MDk2LDcgKzIwOTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQubG9hZDMyKHBvaW50ZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgREZH
X0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBlbGVtZW50IHNpemUiKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYg
KGVsZW1lbnRTaXplKHR5cGUpIDwgNCkgewpAQCAtMjE0MCwxNCArMjE0MCwxNCBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkRG91YmxlKHBvaW50ZXIp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHR5cGVkIGFycmF5
IHR5cGUiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgc2V0RG91YmxlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJh
eSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gfQogICAgIH0KQEAgLTIy
NTMsNyArMjI1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCBhcnJheSB0eXBlIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKQEAgLTIzNDYsNyArMjM0Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50U2l6ZSh0eXBl
KSkgewpAQCAtMjM2Myw3ICsyMzYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlZlR5cGUgPSBtX291dC5yZWYzMjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgZWxlbWVudCBzaXplIik7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgLyogIWlzSW50KHR5cGUpICovIHsK
ICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGNoaWxkMyk7CkBA
IC0yMzc3LDcgKzIzNzcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVm
VHlwZSA9IG1fb3V0LnJlZkRvdWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMjQw
MSw3ICsyNDAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5
IHR5cGUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMjQ3Myw3
ICsyNDczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTMxLDcgKzI1MzEsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KQEAgLTI1NzYsNyArMjU3Niw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlw
ZUR1cmluZ0FsbG9jYXRpb24oCiAgICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsK
ICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBl
KCkgPT0gbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG1fbm9kZS0+aW5kZXhpbmdU
eXBlKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJh
ZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7
CiAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fbm9kZS0+bnVtQ2hpbGRyZW4o
KTsKQEAgLTI2NTMsNyArMjY1Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmlu
Z0FsbG9jYXRpb24oCiAgICAgICAgICAgICBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAg
ICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0g
bV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9u
b2RlLCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkp
OwogICAgICAgICAKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlzSGF2aW5nQUJhZFRpbWUo
KSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpKSB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fbm9kZS0+bnVtQ29uc3RhbnRzKCk7CkBA
IC0yNzkxLDIxICsyNzkxLDE5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlQWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQogICAgIHsKLSAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEmIGRhdGEgPSBtX25vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCk7CiAgICAgICAg
IExWYWx1ZSBvYmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAKLSAg
ICAgICAgc2V0U3RvcmFnZShhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShvYmplY3QsIGRhdGEucHJl
dmlvdXNTdHJ1Y3R1cmUpKTsKKyAgICAgICAgc2V0U3RvcmFnZShhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZShvYmplY3QsIG1fbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cykpOwogICAgIH0KIAog
ICAgIHZvaWQgY29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoKQogICAgIHsKLSAgICAg
ICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEmIGRhdGEgPSBtX25vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCk7CisgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBtX25vZGUtPnRy
YW5zaXRpb24oKTsKICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIExWYWx1ZSBvbGRTdG9yYWdlID0gbG93U3RvcmFnZShtX25vZGUtPmNo
aWxkMigpKTsKICAgICAgICAgCiAgICAgICAgIHNldFN0b3JhZ2UoCiAgICAgICAgICAgICByZWFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlKAotICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFn
ZSwgZGF0YS5wcmV2aW91c1N0cnVjdHVyZSwgZGF0YS5uZXdTdHJ1Y3R1cmUpKTsKKyAgICAgICAg
ICAgICAgICBvYmplY3QsIG9sZFN0b3JhZ2UsIHRyYW5zaXRpb24tPnByZXZpb3VzLCB0cmFuc2l0
aW9uLT5uZXh0KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZVRvU3RyaW5nKCkKQEAg
LTI4OTAsNyArMjg4OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMjk4Miw3ICsyOTgwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFr
ZVJvcGUzKSwgbV9jYWxsRnJhbWUsIGtpZHNbMF0sIGtpZHNbMV0sIGtpZHNbMl0pKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUs
ICJCYWQgbnVtYmVyIG9mIGNoaWxkcmVuIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CkBAIC0zMjA3LDcgKzMyMDUsNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhl
eGl0LCBjb250aW51YXRpb24pOwotICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRy
dWUpOwogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0zMjc5LDcgKzMyNzcsNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhl
eGl0LCBjb250aW51YXRpb24pOwotICAgICAgICB0ZXJtaW5hdGUoQmFkQ2FjaGUpOworICAgICAg
ICBzcGVjdWxhdGUoQmFkQ2FjaGUsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRy
dWUpOwogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwogICAgICAgICAKICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0zMzk4LDcgKzMzOTYsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVDb21wYXJlRXFDb25zdGFudCgpCkBAIC0zNDkxLDcgKzM0ODksNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIHVzZSBraW5kcyIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDb21wYXJl
U3RyaWN0RXFDb25zdGFudCgpCkBAIC0zNjI3LDcgKzM2MjUsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzY3Myw3ICszNjcxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTM3MjYsMTEgKzM3MjQsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVuaW1w
bGVtZW50ZWQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAotICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHN3aXRjaCBraW5kIik7CiAgICAgfQogICAgIAogICAgIHZvaWQg
Y29tcGlsZVJldHVybigpCkBAIC0zOTE0LDcgKzM5MTIsNyBAQCBwcml2YXRlOgogICAgICAgICBz
cGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CiAjZW5kaWYKICAgICB9Ci0KKyAgICAKICAgICBM
VmFsdWUgZGlkT3ZlcmZsb3dTdGFjaygpCiAgICAgewogICAgICAgICAvLyBUaGlzIGRvZXMgYSB2
ZXJ5IHNpbXBsZSBsZWFmIGZ1bmN0aW9uIGFuYWx5c2lzLiBUaGUgaW52YXJpYW50IG9mIEZUTCBj
YWxsCkBAIC00MTg5LDcgKzQxODcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kcyIpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBhcmVFcU9iamVjdE9yT3RoZXJUb09iamVjdChFZGdl
IGxlZnRDaGlsZCwgRWRnZSByaWdodENoaWxkKQpAQCAtNDQ2OCw3ICs0NDY2LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuYm9vbGVhbiwgZmFzdFJlc3Vs
dCwgc2xvd1Jlc3VsdCk7CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQ3MTgsNyArNDcxNiw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCB0ZXJtaW5hdGUoRXhpdEtpbmQga2luZCkKICAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZShr
aW5kLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgc3BlY3VsYXRl
KGtpbmQsIG5vVmFsdWUoKSwgbnVsbHB0ciwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBt
X3N0YXRlLnNldElzVmFsaWQoZmFsc2UpOwogICAgIH0KICAgICAKICAgICB2b2lkIHR5cGVDaGVj
aygKQEAgLTQ3NzQsNyArNDc3Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICB9CiAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRlLmZvck5v
ZGUoZWRnZSkubV90eXBlICYgU3BlY0ludDMyKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCAhKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiBTcGVjSW50MzIpKTsK
ICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fb3V0Lmlu
dDMyWmVybzsKICAgICB9CkBAIC00NzgyLDcgKzQ3ODEsNyBAQCBwcml2YXRlOgogICAgIGVudW0g
SW50NTJLaW5kIHsgU3RyaWN0SW50NTIsIEludDUyIH07CiAgICAgTFZhbHVlIGxvd0ludDUyKEVk
Z2UgZWRnZSwgSW50NTJLaW5kIGtpbmQpCiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChl
ZGdlLnVzZUtpbmQoKSA9PSBJbnQ1MlJlcFVzZSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBlZGdlLnVzZUtpbmQoKSA9PSBJbnQ1MlJlcFVzZSk7CiAgICAgICAgIAogICAg
ICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlOwogICAgICAgICAKQEAgLTQ4MDgsNyArNDgwNyw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlKTsKKyAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlKTsK
ICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fb3V0Lmlu
dDY0WmVybzsKICAgICB9CkBAIC00ODQ0LDcgKzQ4NDMsNyBAQCBwcml2YXRlOgogICAgICAgICBj
YXNlIFN0cmljdEludDUyOgogICAgICAgICAgICAgcmV0dXJuIEludDUyOwogICAgICAgICB9Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVl
IGxvd1doaWNoZXZlckludDUyKEVkZ2UgZWRnZSwgSW50NTJLaW5kJiBraW5kKQpAQCAtNDg3NCw3
ICs0ODczLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRWYWx1ZTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRlLmZv
ck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dy
YXBoLCBtX25vZGUsICEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNDZWxsKSk7
CiAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAgICAgICAgIHJldHVybiBtX291dC5p
bnRQdHJaZXJvOwogICAgIH0KQEAgLTQ5NDMsMjAgKzQ5NDIsMTkgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVB
U0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNCb29sZWFuKSk7
CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhKG1fc3RhdGUuZm9yTm9kZShl
ZGdlKS5tX3R5cGUgJiBTcGVjQm9vbGVhbikpOwogICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFi
bGUpOwogICAgICAgICByZXR1cm4gbV9vdXQuYm9vbGVhbkZhbHNlOwogICAgIH0KICAgICAKICAg
ICBMVmFsdWUgbG93RG91YmxlKEVkZ2UgZWRnZSkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNT
RVJUKGlzRG91YmxlKGVkZ2UudXNlS2luZCgpKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFw
aCwgbV9ub2RlLCBpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAKICAgICAgICAg
TG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fZG91YmxlVmFsdWVzLmdldChlZGdlLm5vZGUoKSk7
CiAgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZS52
YWx1ZSgpOwotICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5tX3R5cGUpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1f
c3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUpOwogICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFi
bGUpOwogICAgICAgICByZXR1cm4gbV9vdXQuZG91YmxlWmVybzsKICAgICB9CkBAIC00OTY0LDgg
KzQ5NjIsOCBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBsb3dKU1ZhbHVlKEVkZ2UgZWRnZSwgT3Bl
cmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQog
ICAgIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbiB8fCBlZGdlLnVzZUtpbmQoKSA9PSBVbnR5cGVkVXNlKTsKLSAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWlzRG91YmxlKGVkZ2UudXNlS2luZCgpKSk7Ci0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGVkZ2UudXNlS2luZCgpICE9IEludDUyUmVwVXNlKTsKKyAgICAgICAgREZHX0FTU0VS
VChtX2dyYXBoLCBtX25vZGUsICFpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkpOworICAgICAgICBE
RkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZWRnZS51c2VLaW5kKCkgIT0gSW50NTJSZXBVc2Up
OwogICAgICAgICAKICAgICAgICAgaWYgKGVkZ2UtPmhhc0NvbnN0YW50KCkpCiAgICAgICAgICAg
ICByZXR1cm4gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUobV9ncmFwaC52YWx1ZU9m
SlNDb25zdGFudChlZGdlLm5vZGUoKSkpKTsKQEAgLTQ5ODgsNyArNDk4Niw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiVmFsdWUgbm90IGRlZmluZWQiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogICAgIApAQCAtNTI0Niw4ICs1MjQ0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNwZWN1
bGF0ZU1pc2MoZWRnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGRhdGFMb2coIlVuc3VwcG9ydGVkIHNwZWN1bGF0aW9uIHVzZSBraW5kOiAiLCBl
ZGdlLnVzZUtpbmQoKSwgIlxuIik7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVuc3VwcG9y
dGVkIHNwZWN1bGF0aW9uIHVzZSBraW5kIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgCkBAIC01
MzAwLDcgKzUyOTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzd2l0
Y2ggKGFycmF5TW9kZS5hcnJheUNsYXNzKCkpIHsKICAgICAgICAgICAgIGNhc2UgQXJyYXk6Ok9y
aWdpbmFsQXJyYXk6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5leHBlY3Rl
ZCBvcmlnaW5hbCBhcnJheSIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CkBAIC01MzIwLDcgKzUzMTcs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDgoYXJyYXlN
b2RlLnNoYXBlTWFzaygpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQ29ycnVwdCBhcnJheSBjbGFzcyIpOwogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKQEAgLTU0NjMsNyArNTQ2MCw3IEBAIHByaXZhdGU6
CiAgICAgICAgIFN0cnVjdHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0KICAgICAgICAgICAg
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5n
T2JqZWN0U3RydWN0dXJlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2Rl
KGVkZ2UpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0
cmluZ09iamVjdFN0cnVjdHVyZSkpKQorICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKGVkZ2Up
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVy
ZSkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKApA
QCAtNTY2Nyw5ICs1NjY0LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkV4Y2VwdGlvbiBjaGVj
ayBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAorICAgICAgICBMVmFsdWUgZXhjZXB0aW9uID0g
bV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKHZtKCkuYWRkcmVzc09mRXhjZXB0aW9uKCkpKTsK
KyAgICAgICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0Lm5vdFpl
cm82NChtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRpb24o
KSkpKSwKLSAgICAgICAgICAgIHJhcmVseShtX2hhbmRsZUV4Y2VwdGlvbnMpLCB1c3VhbGx5KGNv
bnRpbnVhdGlvbikpOworICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KGV4Y2VwdGlvbiksIHJh
cmVseShtX2hhbmRsZUV4Y2VwdGlvbnMpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwogICAgICAg
ICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uKTsKICAgICB9CkBAIC01NzU2
LDEwICs1NzU0LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChPcHRp
b25zOjp2YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGRhdGFMb2coIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAiIHRvIGJlIGF2YWlsYWJsZSBidXQgaXQg
d2Fzbid0LlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2
YWxpZGF0ZUZUTE9TUkV4aXRMaXZlbmVzcygpKQorICAgICAgICAgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkV4cGVjdGVkIHIiLCBvcGVyYW5kLCAiIHRv
IGJlIGF2YWlsYWJsZSBidXQgaXQgd2Fzbid0LiIpLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBERkcncyBEQ0UgcHJvdmVk
IHRoYXQgdGhlIHZhbHVlIGlzIGRlYWQgaW4gYnl0ZWNvZGUKICAgICAgICAgICAgICAgICAvLyBl
dmVuIHRob3VnaCB0aGUgYnl0ZWNvZGUgbGl2ZW5lc3MgYW5hbHlzaXMgdGhpbmtzIGl0J3MgbGl2
ZS4gVGhpcyBpcwpAQCAtNTg2NCw4ICs1ODYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGRhdGFMb2coIkNhbm5vdCBmaW5kIHZhbHVlIGZv
ciBub2RlOiAiLCBub2RlLCAiXG4iKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5u
b3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9kZSkuZGF0YSgpKTsKICAgICB9CiAgICAgCiAg
ICAgYm9vbCB0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KE9TUkV4aXQmIGV4aXQsIHVuc2ln
bmVkIGluZGV4LCBOb2RlKiBub2RlKQpAQCAtNTk0Myw3ICs1OTM4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkNvcnJ1cHQgaW50NTIga2luZCIpOwogICAgIH0KICAgICB2b2lkIHNldEpTVmFsdWUoTm9kZSog
bm9kZSwgTFZhbHVlIHZhbHVlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM4LDkgKzEzOCwxNCBAQCB2b2lk
IE91dHB1dDo6YnJhbmNoKExWYWx1ZSBjb25kaXRpb24sIExCCiAgICAgICAgICAgICBjb25zdElu
dDMyKG5vdFRha2VuV2VpZ2h0LnNjYWxlVG9Ub3RhbCh0b3RhbCkpKSk7CiB9CiAKK05PX1JFVFVS
Tl9EVUVfVE9fQ1JBU0ggc3RhdGljIHZvaWQgZnRsVW5yZWFjaGFibGUoKQoreworICAgIFdURkNy
YXNoKCk7Cit9CisKIHZvaWQgT3V0cHV0OjpjcmFzaE5vblRlcm1pbmFsKCkKIHsKLSAgICBjYWxs
KGludFRvUHRyKGNvbnN0SW50UHRyKGFib3J0KSwgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKHZv
aWRUeXBlKSkpKTsKKyAgICBjYWxsKG9wZXJhdGlvbihmdGxVbnJlYWNoYWJsZSkpOwogfQogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsNyBA
QCB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyCiB0eXBlZGVmIHNpemVf
dCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyYXRpb25fRU9Kc3MpKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNTdHJpbmcqKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9w
ZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIFNsb3dQYXRoUmV0dXJuVHlwZSBK
SVRfT1BFUkFUSU9OICgqU3BydF9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3Qp
OwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbikoKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUq
LCBKU0NlbGwqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25f
RUNiKShFeGVjU3RhdGUqLCBDb2RlQmxvY2sqKTsKQEAgLTE2Nyw2ICsxNjgsOCBAQCB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJB
VElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwordHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1opKGludDMyX3Qp
OwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0
YXRlKik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQyko
RXhlY1N0YXRlKiwgSlNDZWxsKik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJ
VE9wZXJhdGlvbl9FQ2xpKShFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNjk1MTUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMzU4LDYgKzM1OCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV90
cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5pc1N0aWxsVmFsaWQoKTsKICAgICB9CisgICAgCisgICAg
Ym9vbCBkZmdTaG91bGRXYXRjaElmUG9zc2libGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICFpc0RpY3Rpb25hcnkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkZmdTaG91bGRXYXRj
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxl
KCkgJiYgdHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKTsKKyAgICB9CiAgICAg
ICAgIAogICAgIHZvaWQgYWRkVHJhbnNpdGlvbldhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hw
b2ludCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2FycmF5aWZ5LXRvLXN0cnVjdHVyZS1jb250cmFkaWN0aW9uLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0dXJl
LWNvbnRyYWRpY3Rpb24uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2FycmF5aWZ5LXRvLXN0cnVjdHVyZS1jb250cmFkaWN0aW9uLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhcnJheSwgdiwgcCkgewor
ICAgIGFycmF5WzBdID0gMTA7CisgICAgaWYgKHApCisgICAgICAgIHYgPSAiaGVsbG8iOworICAg
IGFycmF5WzBdID0gdjsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDA7ICsraSkgeworICAgIHZhciBhcnJheSA9IFs0Ml07CisgICAgZm9vKGFycmF5LCA0
MywgZmFsc2UpOworICAgIGlmIChhcnJheVswXSAhPSA0MykKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgYXJyYXk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvZnRsLWdldG15YXJndW1lbnRzbGVuZ3RoLWlubGluZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXRteWFyZ3Vt
ZW50c2xlbmd0aC1pbmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXRteWFyZ3VtZW50c2xlbmd0aC1pbmxpbmUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5IEBACitmdW5jdGlvbiBmb28oKXsKKyAgICByZXR1cm4gYXJn
dW1lbnRzLmxlbmd0aDsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewor
ICAgIHZhciByID0gZm9vKDExLCAxMiwgMTMsIDE4LCAxOSwgMjApOworICAgIGlmIChyICE9IDYp
IHRocm93ICJFcnJvcjogIityOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL211bHRpLXB1dC1ieS1vZmZzZXQtbXVsdGlwbGUtdHJhbnNpdGlvbnMuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQt
Ynktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRpb25zLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxl
LXRyYW5zaXRpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK2Z1bmN0aW9u
IGZvbyhvKSB7CisgICAgby54ID0gMTsKKyAgICBvLnkgPSAyOworICAgIG8uYSA9IDM7CisgICAg
by5iID0gNDsKKyAgICBvLmMgPSA1OworICAgIG8uZCA9IDY7CisgICAgby5lID0gNzsKKyAgICBv
LmYgPSA4OworICAgIG8uZyA9IDk7CisgICAgby5oID0gMTA7CisgICAgby5pID0gMTE7Cit9CisK
K25vSW5saW5lKGZvbyk7CisKK2Z1bmN0aW9uIEZvbygpIHsKKyAgICBmb28odGhpcyk7Cit9CisK
K3ZhciByZXN1bHQgPSAwOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7Cisg
ICAgZm9vKHtmOjQyfSk7CisgICAgcmVzdWx0ICs9IChuZXcgRm9vKCkpLng7Cit9CisKK2lmIChy
ZXN1bHQgIT0gMTAwMDAwKQorICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93LWZyb20tZnRsLWlu
LWxvb3AuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK3ZhciBkaWRUaHJvdyA9IGZhbHNlOwordHJ5IHsKKyAg
ICAoZnVuY3Rpb24oKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytp
KSB7IH0KKyAgICAgICAgdGhyb3cgNDI7CisgICAgfSkoKTsKK30gY2F0Y2ggKGUpIHsKKyAgICBp
ZiAoZSAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZTsKKyAg
ICBkaWRUaHJvdyA9IHRydWU7Cit9CitpZiAoIWRpZFRocm93KQorICAgIHRocm93ICJFcnJvcjog
c2hvdWxkIGhhdmUgdGhyb3duIGJ1dCBkaWRuJ3QuIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24gZm9vKHApIHsKKyAg
ICB2YXIgbyA9IHtmOjQyfTsKKyAgICBpZiAocCkKKyAgICAgICAgdGhyb3cgbzsKKyAgICByZXR1
cm4gbzsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7
ICsraSkgeworICAgIHZhciBvID0gZm9vKGZhbHNlKTsKKyAgICBpZiAoby5mICE9IDQyKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBvLmY7Cit9CisKK3ZhciBkaWRUaHJv
dyA9IGZhbHNlOwordHJ5IHsKKyAgICBmb28odHJ1ZSk7Cit9IGNhdGNoIChlKSB7CisgICAgaWYg
KGUuZiAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGluIGNhdGNoOiAi
ICsgby5mOworICAgIGRpZFRocm93ID0gdHJ1ZTsKK30KK2lmICghZGlkVGhyb3cpCisgICAgdGhy
b3cgIkVycm9yOiBzaG91bGQgaGF2ZSB0aHJvd24gYnV0IGRpZG4ndC4iOwpJbmRleDogU291cmNl
L1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTQtMDYtMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBbZnRsb3B0XSBBSSBzaG91bGQgYmUgYWJsZSB0cmFjayBzdHJ1Y3R1cmUgc2V0
cyBsYXJnZXIgdGhhbiAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjgwNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9CYWcuaDoKKyAgICAgICAgKFdURjo6QmFnOjpOb2RlOjpOb2RlKToKKyAg
ICAgICAgKFdURjo6QmFnOjphZGQpOgorCiAyMDE0LTA1LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0gREZHIGJ5dGVjb2RlIHBhcnNlciBzaG91
bGQgdHVybiBHZXRCeUlkIHdpdGggbm90aGluZyBidXQgYSBHZXR0ZXIgc3R1YiBhcyBzdHVmZito
YW5kbGVDYWxsLCBhbmQgaGFuZGxlQ2FsbCBzaG91bGQgYmUgYWxsb3dlZCB0byBpbmxpbmUgaWYg
aXQgd2FudHMgdG8KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0JhZy5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvV1RGL3d0Zi9C
YWcuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMTIgQEAgcHJpdmF0ZToKICAgICBjbGFz
cyBOb2RlIHsKICAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBOb2RlKEFyZ3MuLi4g
YXJncykKKyAgICAgICAgICAgIDogbV9pdGVtKGFyZ3MuLi4pCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgVCBtX2l0ZW07CiAgICAgICAgIE5vZGUqIG1fbmV4dDsKICAg
ICB9OwpAQCAtNTMsOSArNTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIFQqIGFkZCgpCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBUKiBhZGQo
QXJncy4uLiBhcmdzKQogICAgIHsKLSAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ldyBOb2RlOwor
ICAgICAgICBOb2RlKiBuZXdOb2RlID0gbmV3IE5vZGUoYXJncy4uLik7CiAgICAgICAgIG5ld05v
ZGUtPm1fbmV4dCA9IG1faGVhZDsKICAgICAgICAgbV9oZWFkID0gbmV3Tm9kZTsKICAgICAgICAg
cmV0dXJuICZuZXdOb2RlLT5tX2l0ZW07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjk1MTUpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAx
NC0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFtmdGxv
cHRdIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVn
cmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9n
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1p
ZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9u
LXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5
LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0
cnVjdHVyZS1lbGltaW5hdGlvbi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qczogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGlj
LWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanM6IEFkZGVkLgorCiAyMDE0LTA1
LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2Z0bG9wdF0g
REZHOjpjbG9iYmVyaXplIHNob3VsZCBiZSBibGluZCB0byB0aGUgZWZmZWN0cyBvZiBHQwpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVj
dHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWJp
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2lt
cGxlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1i
aW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbi1zaW1wbGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBI
VE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNj
cmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlk
LWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQt
Ymltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1i
eS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1l
bGltaW5hdGlvbi1zaW1wbGUKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1
YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlk
LXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
c2ltcGxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBs
ZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFy
IG8gPSB7YToxfTsKKyAgICB2YXIgcCA9IHthOjIsIGw6MTN9OworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3Vs
dCBePSBvLmE7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAg
cCA9IHRtcDsKKyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9n
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YTox
LCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3LCBoOjgsIGk6OSwgajoxMCwgazoxMX07Cisg
ICAgdmFyIHAgPSB7YToyLCBiOjMsIGM6NCwgZDo1LCBlOjYsIGY6NywgZzo4LCBoOjksIGk6MTAs
IGo6MTEsIGs6MTIsIGw6MTN9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIgXiBv
LmMgXiBvLmQgXiBvLmUgXiBvLmYgXiBvLmcgXiBvLmggXiBvLmkgXiBvLmogXiBvLms7CisgICAg
ICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHRtcDsKKyAgICB9
CisgICAgaWYgKHJlc3VsdCAhPSA2NTAwMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQt
Y2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsK
KyAgICB2YXIgbyA9IHthOjEsIGI6MiwgYzozLCBkOjQsIGU6NSwgZjo2LCBnOjcsIGg6OCwgaTo5
LCBqOjEwLCBrOjExfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG8uYSBeIG8uYiB8IG8uYyBeIG8u
ZCAmIG8uZSBeIG8uZiB8IG8uZyBeIG8uaCAmIG8uaSBeIG8uaiB8IG8uazsKKyAgICBpZiAocmVz
dWx0ICE9IDE1MDAwMDAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
Z2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0
LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQt
YnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG8g
PSB7YToxfTsKKyAgICB2YXIgcCA9IHthOjIsIGw6MTN9OworICAgIHZhciBxID0ge2E6MywgYjoz
fTsKKyAgICB2YXIgciA9IHthOjQsIGM6NX07CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0IF49IG8uYTsK
KyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gcTsKKyAg
ICAgICAgcSA9IHI7CisgICAgICAgIHIgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0g
MCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232437</attachid>
            <date>2014-06-03 13:20:04 -0700</date>
            <delta_ts>2014-06-03 16:29:26 -0700</delta_ts>
            <desc>it&apos;s faster</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>223523</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4MiBA
QAorMjAxNC0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0
aGFuIDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
ODA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGlu
dGVycHJldGVyKSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVy
ZToKKyAgICAgICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRy
YWNrIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAg
ICAgICBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhh
dmUgYW55IG9mIHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdo
aWNoIC0gYnV0IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3Qg
aW4gdGhlIHNldC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBz
dGlsbCBiZSBUT1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisg
ICAgICAgICAgYXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBl
eHBsb3Npb24gb24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91
Z2ggdGhhdCBpdCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBz
aW5jZSB3ZSBoYXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisg
ICAgICAgICAgc3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0
byBrbm93IGFib3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBv
aW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQK
KyAgICAgICAgICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRo
YXQgdGhlIHdhdGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGlz
IGFsbG93cyB0cmFja2luZyBvZiB3YXRjaGFibGUgc3RydWN0dXJlcyB0byBiZSBmYXIgc2ltcGxl
ciB0aGFuIGJlZm9yZS4gUHJldmlvdXNseSwKKyAgICAgICAgICBhIHN0cnVjdHVyZSBiZWluZyB0
cmFja2VkIGFzICJmdXR1cmUgcG9zc2libGUiIHdhcyBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIHdh
dGNoYWJsZSBidXQKKyAgICAgICAgICB3ZSBtaWdodCBub3QgYWN0dWFsbHkgd2F0Y2ggaXQuIFRo
aXMgbWFrZXMgYWxnZWJyYSBvdmVyIHNldHMgb2YgZnV0dXJlIHBvc3NpYmxlCisgICAgICAgICAg
c3RydWN0dXJlcyBxdWl0ZSB3ZWlyZC4gQnV0IHdhdGNoaW5nIGFsbCB3YXRjaGFibGUgc3RydWN0
dXJlcyBtZWFucyB0aGF0IHdlIHNpbXBsZSBzYXkKKyAgICAgICAgICB0aGF0IGEgc3RydWN0dXJl
IHNldCBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6IHVuY2xvYmJlcmVkLCB3aGljaCBt
ZWFucyBpdCdzIGp1c3QKKyAgICAgICAgICBhIHNldCBvZiBzdHJ1Y3R1cmVzIGFuZCBpdCBkb2Vz
bid0IG1hdHRlciB3aGF0IGlzIHdhdGNoYWJsZSBvciB3aGF0IGlzbid0IGJlY2F1c2Ugd2UndmUK
KyAgICAgICAgICBwcm92ZW4gdGhhdCB0aGUgdmFsdWUgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBz
dHJ1Y3R1cmVzIHJpZ2h0IG5vdzsgYW5kIGNsb2JiZXJlZCwgd2hpY2gKKyAgICAgICAgICBtZWFu
cyB0aGF0IHdlIGhhdmUgYSBzZXQgb2Ygc3RydWN0dXJlcywgcGx1cyBhbGwgcG9zc2libGUgc3Ry
dWN0dXJlcyB0ZW1wb3JhcmlseSwgd2l0aAorICAgICAgICAgIGludmFsaWRhdGlvbiByZW1vdmlu
ZyB0aGUgInBsdXMgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMiLiBDbG9iYmVyaW5nIGEgc2V0IG1l
YW5zIHRoYXQKKyAgICAgICAgICBpZiBhbnkgb2YgaXRzIHN0cnVjdHVyZXMgYXJlIHVud2F0Y2hh
YmxlLCB0aGUgc2V0IGp1c3QgYmVjb21lcyBUT1A7IGJ1dCBpZiBhbGwKKyAgICAgICAgICBzdHJ1
Y3R1cmVzIGluIHRoZSBzZXQgYXJlIHdhdGNoYWJsZSB0aGVuIHdlIGp1c3Qgc2V0IHRoZSBjbG9i
YmVyZWQgYml0IHRvIGFkZCB0aGUgInBsdXMKKyAgICAgICAgICBhbGwgcG9zc2libGUgc3RydWN0
dXJlcyB0ZW1wb3JhcmlseSIgdGhpbmcuIFRoaXMgcHJlY2lzZWx5IHRyYWNrcyB0aGUgZXhhY3Qg
bWVhbmluZyBvZgorICAgICAgICAgIHdhdGNoYWJpbGl0eSBhbmQgaW52YWxpZGF0aW9uIHBvaW50
cy4KKyAgICAgICAgCisgICAgICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHA6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpjb3B5RnJvbSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6U3RydWN0dXJlU2V0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU2V0OjpnZW5lcmljRmlsdGVyKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpDb250YWluc091dE9mTGluZTo6Q29udGFpbnNPdXRPZkxpbmUpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2V0OjpkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldEVtcHR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U2V0OjpnZXRSZXNlcnZlZEZsYWcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldFJl
c2VydmVkRmxhZyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Ym9vbGVhblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OnZlcmlmeUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNl
cnZlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRp
b25zKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzaG91bGRCZUNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Ojpub3JtYWxpemVDbGFyaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3Nl
cnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5o
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpUcmFu
c2l0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OlRyYW5z
aXRpb25PYnNlcnZlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6VHJhbnNpdGlvbnNPYnNlcnZlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNIZWFwVG9wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjptZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Omhhc0Nsb2JiZXJhYmxlU3Rh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VUb3ApOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmJlc3RQcm92ZW5TdHJ1Y3R1cmUpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlN
b2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tDRkEpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c3RhcnRDcmFzaGluZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6aXNDcmFzaGluZyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5o
OgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToK
KyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAgIChKU0M6OkRGRzo6V2F0
Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0OjpXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNo
cG9pbnRTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6aXNTdGlsbFZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpzaG91bGRBc3N1bWVNaXhlZFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
Ojppc1ZhbGlkT3JNaXhlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjppc1N0aWxsVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRl
c2lyZWRXYXRjaHBvaW50czo6c2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1ZhbGlkT3JNaXhlZCk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6fkdyYXBoKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldEZvbGRh
YmxlVmlldyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YTo6U3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNz
ZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
YnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpj
b250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
dmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVt
cEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRj
aGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZl
SW52YWxpZGF0aW9uUG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
aXNDbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzTmVpdGhl
ckNsZWFyTm9yVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojppc0Nsb2JiZXJlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ubHlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJz
ZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRv
cFdoZW5UaGluKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpz
ZXRDbG9iYmVyZWQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om1ha2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZp
bHRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6aXNDbGVhck9yVG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpsYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1ZhbGlkT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpoYXNT
aW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6dG9wVmFsdWUpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdUcmFuc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6VHJhbnNpdGlvbjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6VHJh
bnNpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1RyYW5zaXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6VHJhbnNpdGlvbjo6VHJhbnNpdGlvbik6CisgICAgICAgICogZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFu
dEFycmF5Q2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gp
OgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6
CisgICAgICAgICogZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDogQWRk
ZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6aGFuZGxlRWRnZSk6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2Fu
Q29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAg
ICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVQdXRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0ZXJtaW5hdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNhbGxDaGVj
ayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoV1RGOjpqc2NFeGl0KToKKyAgICAg
ICAgKGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHByaW50VXNhZ2VT
dGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0dXJlLWNvbnRyYWRpY3Rpb24uanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZnRsLWdldG15
YXJndW1lbnRzbGVuZ3RoLWlubGluZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRpb25z
LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChGb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwog
MjAxNC0wNS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtm
dGxvcHRdIERGRzo6Y2xvYmJlcml6ZSBzaG91bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMgb2Yg
R0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTkyLDkgKzE5MiwxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmNwcAorICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAogICAgIGRm
Zy9ERkdUaHJlYWREYXRhLmNwcAogICAgIGRmZy9ERkdUaHVua3MuY3BwCiAgICAgZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1RyYW5zaXRpb24uY3BwCiAg
ICAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VzZUtpbmQuY3BwCkBAIC0yMDUsNiArMjA3LDcgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHVmFyaWFibGVFdmVudC5jcHAK
ICAgICBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKICAgICBkZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdXb3JrbGlzdC5jcHAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw2ICs5MywxNSBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgewogCitOT19SRVRVUk5fV0lUSF9WQUxVRSBzdGF0aWMgdm9pZCBqc2NFeGl0KGludCBzdGF0
dXMpCit7CisgICAgaWYgKERGRzo6aXNDcmFzaGluZygpKSB7CisgICAgICAgIGZvciAoOzspCisg
ICAgICAgICAgICBwYXVzZSgpOworICAgIH0KKyAgICBleGl0KHN0YXR1cyk7Cit9CisKIGNsYXNz
IEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXI7CiBjbGFzcyBNYXN1cWVyYWRlcjsK
QEAgLTg4NSw3ICs4OTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
VHJhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0
ZSopCiB7Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNT
KTsKIAogI2lmIENPTVBJTEVSKE1TVkMpICYmIE9TKFdJTkNFKQogICAgIC8vIFdpdGhvdXQgdGhp
cywgVmlzdWFsIFN0dWRpbyB3aWxsIGNvbXBsYWluIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3Qg
cmV0dXJuIGEgdmFsdWUuCkBAIC0xMDEyLDcgKzEwMjEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgZWNvcmVfc2h1dGRvd24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJu
IHJlczsKKyAgICBqc2NFeGl0KHJlcyk7CiB9CiAKIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRz
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyaXB0
cywgYm9vbCBkdW1wKQpAQCAtMTE1Niw3ICsxMTY1LDcgQEAgc3RhdGljIE5PX1JFVFVSTiB2b2lk
IHByaW50VXNhZ2VTdGF0ZW1lbgogICAgIGZwcmludGYoc3RkZXJyLCAiICAtLTxqc2MgVk0gb3B0
aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZNIG9wdGlvblxuIik7CiAgICAg
ZnByaW50ZihzdGRlcnIsICJcbiIpOwogCi0gICAgZXhpdChoZWxwID8gRVhJVF9TVUNDRVNTIDog
RVhJVF9GQUlMVVJFKTsKKyAgICBqc2NFeGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZB
SUxVUkUpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCkBAIC0xMjQ1LDcgKzEyNTQsNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnCiAgICAgaWYgKG5lZWRUb0R1bXBPcHRpb25zKQogICAgICAgICBK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CiAgICAgaWYgKG5lZWRUb0V4aXQp
Ci0gICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAgICAganNjRXhpdChFWElUX1NVQ0NF
U1MpOwogfQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMSArNDQzLDEzIEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVGhyZWFkRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHVHJhbnNpdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVW5pZmljYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAiIC8+CkBAIC00NTksNiArNDYxLDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1dvcmtsaXN0LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+CkBAIC0x
MDI1LDYgKzEwMjgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUcmFuc2l0
aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZp
Y2F0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdVc2VL
aW5kLmgiIC8+CkBAIC0xMDM3LDYgKzEwNDEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdWYXJpYWRpY0Z1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdX
b3JrbGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERp
c2Fzc2VtYmxlci5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNiArMzUzLDcgQEAK
IAkJMEY4MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODMzNUI1MTYz
OUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4MzY0QjcxNjRCMEMxMTAwNTMz
MjlBIC8qIERGR0JyYW5jaERpcmVjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8qIERGR0JyYW5jaERp
cmVjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMTAxODQ5QTNCRTAw
RjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVj
dHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwICovOyB9OwogCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGlu
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhG
MkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi87IH07CiAJCTBGOEYyQjk2MTcy
RTA0QTMwMDdEQkRBNSAvKiBGVExMaW5rLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOEYyQjk5
MTcyRjA0RkYwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTcxNzJGMDRGRDAwN0RC
REE1IC8qIERGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi87IH07CkBAIC00OTUsNiArNDk2LDgg
QEAKIAkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUREMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi87IH07CiAJCTBGQ0VGQUUwMTgwNzM4QzAwMDQ3
MkNFNCAvKiBGVExMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEMkM5MjQx
NkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAvKiBT
dHJ1Y3R1cmVJbmxpbmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEZEMkQ0RkUxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEMkQ0RkMxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuY3BwICovOyB9OworCQkwRkQyRDRGRjE5MkZFRTU4MDBBMTc4QkYg
LyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8q
IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNDODIwMTQxMTVDRjgwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwICovOyB9Owog
CQkwRkQzQzgyODE0MTE1RDRGMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0Ig
LyogREZHRHJpdmVyLmggKi87IH07CiAJCTBGRDgxQUQyMTU0RkI0RUUwMDk4M0U3MiAvKiBERkdE
b21pbmF0b3JzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRDgxQUNGMTU0RkI0RUIwMDk4M0U3MiAvKiBERkdEb21pbmF0b3JzLmNwcCAqLzsgfTsK
QEAgLTUyOCw2ICs1MzEsOCBAQAogCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YUR1bXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4
IC8qIE9wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkUyMjhFQTE0MzZBQjIzMDAx
OTZDNDggLyogT3B0aW9ucy5jcHAgKi87IH07CisJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAv
KiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAq
LzsgfTsKKwkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFODUzNEIxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkU4NTM0OTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9p
bnRzLmNwcCAqLzsgfTsKIAkJMEZFODUzNEMxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFODUzNEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTk1Rjc5
MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uY3BwICovOyB9OwpAQCAtMjE2MCw2ICsyMTY1LDcgQEAKIAkJMEY4MzM1
QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzNjRCNTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJh
bmNoRGlyZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0JyYW5j
aERpcmVjdGlvbi5oOyBwYXRoID0gZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVV
c2VEZWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVVc2VEZWYu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4OTNCREExOTM2RTIzQzAwMTIxMUY0
IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHBhdGggPSBkZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTExpbmsuY3BwOyBwYXRoID0gZnRsL0ZUTExpbmsuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGVExMaW5rLmg7IHBhdGggPSBmdGwvRlRMTGluay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJl
ZElkZW50aWZpZXJzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRJZGVudGlmaWVy
cy5jcHA7IHBhdGggPSBkZmcvREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTIzMTMsNiArMjMxOSw4IEBACiAJCTBGQ0VGQUREMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBGVExMb2NhdGlvbi5jcHA7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFERTE4MDczOEMwMDA0NzJDRTQgLyogRlRM
TG9jYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTG9jYXRpb24u
aDsgcGF0aCA9IGZ0bC9GVExMb2NhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkQyQzkyMzE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJ1Y3R1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0RyaXZlci5jcHA7IHBhdGggPSBkZmcvREZH
RHJpdmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZEM0M4MjIxNDExNUQw
RTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdEcml2ZXIuaDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZENTY1MjIxNkFCNzgwQTAwMTk3NjUzIC8qIERGR0Jhc2ljQmxvY2tJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2tJbmxp
bmVzLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTIzNDgsNiArMjM1Niw4IEBACiAJCTBGRERCRkIzMTY2NkVFRDUwMEM1
NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgcGF0aCA9IGRmZy9ERkdW
YXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE9wdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBPcHRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRTcyMTFCMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1RyYW5zaXRpb24uY3BwOyBwYXRoID0g
ZGZnL0RGR1RyYW5zaXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU3
MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmg7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0OTE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHBhdGggPSBkZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUz
NEExNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgcGF0aCA9IGRm
Zy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFOTVGNzcxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTERhdGFTZWN0aW9uLmNwcDsgcGF0aCA9IGZ0
bC9GVExEYXRhU2VjdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODA2
LDYgKzQ4MTYsNyBAQAogCQkJCTJBQ0NGM0REMTg1RkUyNkIwMDgzRTJBRCAvKiBERkdTdG9yZUJh
cnJpZXJFbGlzaW9uUGhhc2UuaCAqLywKIAkJCQkwRkMyMENCMzE4NTJFMkM2MDBDOUU5NTQgLyog
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDMjBDQjQxODUyRTJDNjAw
QzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuaCAqLywKKwkJCQkwRjg5M0JEQTE5
MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi8sCiAJCQkJ
MEY2Mzk0NzYxNURDRTM0NzAwNkE1OTdDIC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCAq
LywKIAkJCQkwRjJGQ0NGNzE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8s
CiAJCQkJMEYyRkNDRjgxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCAqLywKQEAg
LTQ4MTcsNiArNDgyOCw4IEBACiAJCQkJMEZEOEEzMjIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCiAJCQkJMEZEOEEzMjMxN0Q1MUY1
NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2suY3BwICovLAogCQkJCTBGRDhBMzI0MTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggKi8sCisJCQkJMEZFNzIxMUIxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovLAorCQkJCTBGRTcyMTFDMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggKi8sCiAJCQkJMEY2Mzk0M0MxNUM3NUYxNDAw
NkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwICovLAogCQkJCTBGNjM5NDNE
MTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJ
MEZCRTBGNkYxNkMxREIwMTAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLApA
QCAtNDgzOCw2ICs0ODUxLDggQEAKIAkJCQkwRjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZH
VmFyaWFibGVFdmVudFN0cmVhbS5oICovLAogCQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAv
KiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0
MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAq
LywKKwkJCQkwRkQyRDRGQzE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJl
V2F0Y2hpbmdQaGFzZS5jcHAgKi8sCisJCQkJMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERG
R1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzQjE4MjAy
MTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJ
MEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2Uu
aCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICov
LApAQCAtNTc3Niw2ICs1NzkxLDcgQEAKIAkJCQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyog
RlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEz
REIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEw
QTIzMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExDb21tb25WYWx1ZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMg
LyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUz
MUZCIC8qIEZUTERhdGFTZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUM5MjJCQzE4QTE2
MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAg
LTU4MTcsNiArNTgzMyw3IEBACiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVu
d2luZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAw
N0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU3MjEx
RTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5o
IGluIEhlYWRlcnMgKi8sCkBAIC02OTU2LDYgKzY5NzMsNyBAQAogCQkJCTBGRjBGMTk5MTZCNzI5
RjYwMDVERjk1QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzY3QjVCNTE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01p
bmlmaWVkTm9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkQyRDRGRTE5MkZFRTU4MDBBMTc4
QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzM3ODEwRDE3OTlFQTJFMDA4MTc1MzMgLyogREZHTmF0dXJhbExvb3BzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMwMEI5QTJEOSAvKiBERkdOb2Rl
RmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC02OTg0LDYgKzcwMDIsNyBAQAogCQkJCTBGQzIw
Q0I5MTg1NTZBMzUwMEM5RTk1NCAvKiBERkdTU0FMb3dlcmluZ1BoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUZCNEY0MTdGQ0I5MTcwMENCNjdGOCAvKiBERkdTdGFja0xheW91dFBoYXNl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNEYyOURGMThCNkFEMUMwMDU3QkMxNSAvKiBERkdT
dGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkU3MjExRDE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkyQUNDRjNERTE4NUZFMjZCMDA4M0UyQUQgLyogREZHU3RvcmVCYXJyaWVyRWxp
c2lvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1
NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzE3NCw2ICs3MTkzLDcgQEAKIAkJCQk5NUY2RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyog
SlNQcm9maWxlclByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MxODRFMUExN0JFREJE
MzAwN0NCNjNBIC8qIEpTUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUyMjE3
QkVFMjQwMDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0MwMDhDREExODcxMjRCQjAwOTU1QzI0IC8qIEpT
UHJvbWlzZURlZmVycmVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMDA4Q0QyMTg2RjhBOTMw
MDk1NUMyNCAvKiBKU1Byb21pc2VGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mx
ODRFMUUxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1
cmVTZXQuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMjQgKzMwLDEwIEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi1TdHJ1Y3R1cmVTZXQ6OlN0cnVjdHVyZVNldChjb25zdCBT
dHJ1Y3R1cmVTZXQmIG90aGVyKQotewotICAgIGNvcHlGcm9tKG90aGVyKTsKLX0KLQotU3RydWN0
dXJlU2V0JiBTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KQotewotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
IGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAgIGNvcHlGcm9tKG90aGVyKTsK
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIHZvaWQgU3RydWN0dXJlU2V0OjpjbGVhcigpCiB7CiAg
ICAgZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7Ci0gICAgc2V0KDAsIHRydWUpOwor
ICAgIHNldEVtcHR5KCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlU2V0OjphZGQoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkBAIC03NSw3ICs2MSw3IEBAIGJvb2wgU3RydWN0dXJlU2V0OjpyZW1vdmUoU3Ry
dWN0dXJlKiBzdHIKIHsKICAgICBpZiAoaXNUaGluKCkpIHsKICAgICAgICAgaWYgKHNpbmdsZVN0
cnVjdHVyZSgpID09IHN0cnVjdHVyZSkgewotICAgICAgICAgICAgc2V0KDAsIHRydWUpOworICAg
ICAgICAgICAgc2V0RW1wdHkoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg4LDcgKzc0LDcgQEAgYm9vbCBTdHJ1Y3R1cmVT
ZXQ6OnJlbW92ZShTdHJ1Y3R1cmUqIHN0cgogICAgICAgICBsaXN0LT5saXN0KClbaV0gPSBsaXN0
LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CiAgICAgICAgIGlmICghbGlzdC0+bV9sZW5ndGgp
IHsKICAgICAgICAgICAgIE91dE9mTGluZUxpc3Q6OmRlc3Ryb3kobGlzdCk7Ci0gICAgICAgICAg
ICBzZXQoMCwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRFbXB0eSgpOwogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KQEAgLTE0NCwyMyArMTMwLDggQEAgdm9pZCBTdHJ1Y3R1
cmVTZXQ6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIGlmIChpc1RoaW4oKSkgewotICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuY29udGFpbnNPdXRPZkxpbmUo
c2luZ2xlU3RydWN0dXJlKCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjbGVhcigp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIE91dE9mTGluZUxpc3QqIGxpc3Qg
PSBzdHJ1Y3R1cmVMaXN0KCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1f
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0T2ZMaW5lKGxpc3Qt
Pmxpc3QoKVtpXSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbGlzdC0+bGlzdCgp
W2ktLV0gPSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07Ci0gICAgfQotICAgIGlmICgh
bGlzdC0+bV9sZW5ndGgpCi0gICAgICAgIGNsZWFyKCk7CisgICAgQ29udGFpbnNPdXRPZkxpbmUg
Y29udGFpbnNPdXRPZkxpbmUob3RoZXIpOworICAgIGdlbmVyaWNGaWx0ZXIoY29udGFpbnNPdXRP
ZkxpbmUpOwogfQogCiB2b2lkIFN0cnVjdHVyZVNldDo6ZXhjbHVkZShjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQpAQCAtMzIxLDEzICsyOTIsOSBAQCBib29sIFN0cnVjdHVyZVNldDo6Y29udGFp
bnNPdXRPZkxpbmUoU3RyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFN0cnVjdHVyZVNl
dDo6Y29weUZyb20oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3ZvaWQgU3RydWN0dXJlU2V0
Ojpjb3B5RnJvbU91dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQogewotICAgIGlm
IChvdGhlci5pc1RoaW4oKSkgewotICAgICAgICBtX3BvaW50ZXIgPSBvdGhlci5tX3BvaW50ZXI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCisgICAgQVNTRVJUKCFvdGhlci5pc1RoaW4o
KSAmJiBvdGhlci5tX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSk7CiAgICAgT3V0T2ZMaW5lTGlz
dCogb3RoZXJMaXN0ID0gb3RoZXIuc3RydWN0dXJlTGlzdCgpOwogICAgIE91dE9mTGluZUxpc3Qq
IG15TGlzdCA9IE91dE9mTGluZUxpc3Q6OmNyZWF0ZShvdGhlckxpc3QtPm1fbGVuZ3RoKTsKICAg
ICBteUxpc3QtPm1fbGVuZ3RoID0gb3RoZXJMaXN0LT5tX2xlbmd0aDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDE2OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsMTEgKzMzLDE1IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCituYW1l
c3BhY2UgREZHIHsKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7Cit9CisKIGNsYXNzIFN0
cnVjdHVyZVNldCB7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU2V0KCkKICAgICB7Ci0gICAgICAg
IHNldCgwLCB0cnVlKTsKKyAgICAgICAgc2V0RW1wdHkoKTsKICAgICB9CiAgICAgCiAgICAgU3Ry
dWN0dXJlU2V0KFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtNDUsOCArNDksMTkgQEAgcHVibGlj
OgogICAgICAgICBzZXQoc3RydWN0dXJlKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlU2V0
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOwotICAgIFN0cnVjdHVyZVNldCYgb3BlcmF0b3I9
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJl
U2V0KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBjb3B5RnJvbShv
dGhlcik7CisgICAgfQorICAgIAorICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlU2V0JiBvcGVy
YXRvcj0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlz
ID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgZGVsZXRlU3Ry
dWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAgICAgIGNvcHlGcm9tKG90aGVyKTsKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgIH0KICAgICAKICAgICB+U3RydWN0dXJlU2V0KCkKICAgICB7
CkBAIC02Nyw3ICs4MiwxMCBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc1RoaW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7
CisgICAgICAgIGJvb2wgcmVzdWx0ID0gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVjdHVyZSgpOwor
ICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgQVNTRVJUKG1fcG9pbnRlciAhPSByZXNl
cnZlZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBhZGQoU3RydWN0dXJlKik7CkBAIC03OCw2ICs5NiwyOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgdm9pZCBleGNsdWRlKGNvbnN0IFN0cnVj
dHVyZVNldCYpOwogICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBnZW5lcmljRmlsdGVyKEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAoaXNU
aGluKCkpIHsKKyAgICAgICAgICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgaWYgKGZ1bmN0b3Ioc2luZ2xlU3RydWN0dXJlKCkp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE91dE9mTGluZUxpc3Qq
IGxpc3QgPSBzdHJ1Y3R1cmVMaXN0KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsaXN0LT5tX2xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoZnVuY3RvcihsaXN0LT5s
aXN0KClbaV0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGlzdC0+
bGlzdCgpW2ktLV0gPSBsaXN0LT5saXN0KClbLS1saXN0LT5tX2xlbmd0aF07CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAg
fQorICAgIAogICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmKSBjb25zdDsK
ICAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAog
ICAgIHsKQEAgLTEyNCwxNiArMTY0LDQ0IEBAIHB1YmxpYzoKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKICAgICAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIERGRzo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTsKKyAgICAKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHRo
aW5GbGFnID0gMTsKICAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkRmxhZyA9IDI7
Ci0gICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBmbGFncyA9IDM7CisgICAgc3RhdGljIGNvbnN0
IHVpbnRwdHJfdCBmbGFncyA9IHRoaW5GbGFnIHwgcmVzZXJ2ZWRGbGFnOwogICAgIHN0YXRpYyBj
b25zdCB1aW50cHRyX3QgcmVzZXJ2ZWRWYWx1ZSA9IDQ7CiAKICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZGVmYXVsdFN0YXJ0aW5nU2l6ZSA9IDQ7CiAgICAgCiAgICAgYm9vbCBhZGRPdXRPZkxp
bmUoU3RydWN0dXJlKik7CiAgICAgYm9vbCBjb250YWluc091dE9mTGluZShTdHJ1Y3R1cmUqKSBj
b25zdDsKLSAgICB2b2lkIGNvcHlGcm9tKGNvbnN0IFN0cnVjdHVyZVNldCYpOworICAgIAorICAg
IGNsYXNzIENvbnRhaW5zT3V0T2ZMaW5lIHsKKyAgICBwdWJsaWM6CisgICAgICAgIENvbnRhaW5z
T3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgICAgICAgICAgOiBtX3NldChz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRv
cigpKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9zZXQuY29udGFpbnNPdXRPZkxpbmUoc3RydWN0dXJlKTsKKyAgICAgICAgfQorICAgIHByaXZh
dGU6CisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBjb3B5RnJvbShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKG90aGVyLmlzVGhpbigpIHx8IG90aGVyLm1fcG9pbnRlciA9PSByZXNl
cnZlZFZhbHVlKSB7CisgICAgICAgICAgICBib29sIHZhbHVlID0gZ2V0UmVzZXJ2ZWRGbGFnKCk7
CisgICAgICAgICAgICBtX3BvaW50ZXIgPSBvdGhlci5tX3BvaW50ZXI7CisgICAgICAgICAgICBz
ZXRSZXNlcnZlZEZsYWcodmFsdWUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGNvcHlGcm9tT3V0T2ZMaW5lKG90aGVyKTsKKyAgICB9CisgICAgdm9pZCBjb3B5RnJv
bU91dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKICAgICAKICAgICBjbGFzcyBP
dXRPZkxpbmVMaXN0IHsKICAgICBwdWJsaWM6CkBAIC0xNTIsOSArMjIwLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgdW5zaWduZWQgbV9jYXBhY2l0eTsKICAgICB9OwogICAgIAotICAgIHZvaWQgZGVs
ZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCkKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZGVs
ZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCkKICAgICB7Ci0gICAgICAgIGlmICghaXNUaGlu
KCkpCisgICAgICAgIGlmICghaXNUaGluKCkgJiYgbV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUp
CiAgICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KHN0cnVjdHVyZUxpc3QoKSk7CiAg
ICAgfQogICAgIApAQCAtMTg1LDEwICsyNTMsMjIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IHNldChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmVzKSwgZmFsc2UpOwogICAgIH0K
KyAgICB2b2lkIHNldEVtcHR5KCkKKyAgICB7CisgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICB9
CiAgICAgdm9pZCBzZXQodWludHB0cl90IHBvaW50ZXIsIGJvb2wgc2luZ2xlU3RydWN0dXJlKQog
ICAgIHsKICAgICAgICAgbV9wb2ludGVyID0gcG9pbnRlciB8IChzaW5nbGVTdHJ1Y3R1cmUgPyB0
aGluRmxhZyA6IDApIHwgKG1fcG9pbnRlciAmIHJlc2VydmVkRmxhZyk7CiAgICAgfQorICAgIGJv
b2wgZ2V0UmVzZXJ2ZWRGbGFnKCkgY29uc3QgeyByZXR1cm4gbV9wb2ludGVyICYgcmVzZXJ2ZWRG
bGFnOyB9CisgICAgdm9pZCBzZXRSZXNlcnZlZEZsYWcoYm9vbCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgIG1fcG9pbnRlciB8PSByZXNlcnZlZEZsYWc7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcG9pbnRlciAmPSB+cmVzZXJ2ZWRGbGFnOworICAg
IH0KIAogICAgIHVpbnRwdHJfdCBtX3BvaW50ZXI7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHJldmlzaW9uIDE2
OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsNiArMTE0LDcgQEAgcHVibGljOgogICAgIGJvb2wg
ZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICBib29sIGV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgTm9kZSopOwogICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTE0OCw3ICsxNDksMTMgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICB2b2lkIGNsb2JiZXJXb3JsZChjb25zdCBDb2RlT3JpZ2lu
JiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrKTsKICAgICB2b2lkIGNsb2JiZXJDYXB0dXJlZFZhcnMo
Y29uc3QgQ29kZU9yaWdpbiYpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JBbGxWYWx1ZXModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBGdW5jdG9yJik7
CisgICAgCiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBpbmRleEluQmxvY2sp
OworICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24odW5zaWduZWQgaW5kZXhJbkJsb2NrLCBTdHJ1
Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8pOworICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb25z
KHVuc2lnbmVkIGluZGV4SW5CbG9jaywgY29uc3QgVHJhbnNpdGlvblZlY3RvciYpOwogICAgIAog
ICAgIGVudW0gQm9vbGVhblJlc3VsdCB7CiAgICAgICAgIFVua25vd25Cb29sZWFuUmVzdWx0LApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MiwxMSArNjIsMTcgQEAgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OgogICAgIH0KIAogICAgIC8vIE5leHQgY2hlY2sgaWYgd2UgY2FuIGZvbGQgYmVjYXVz
ZSB3ZSBrbm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbiBvYmplY3Qgb3Igc3RyaW5nIGFuZCBkb2Vz
IG5vdCBlcXVhbCB1bmRlZmluZWQuCi0gICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1f
dHlwZSkKLSAgICAgICAgJiYgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1hc3F1
ZXJhZGVzQXNVbmRlZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKQotICAgICAgICAgICAgJiYgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUo
KSAhPSBTdHJpbmdUeXBlKQorICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUp
ICYmICF2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKSB7CisgICAgICAgIGJvb2wgYWxsVHJ1ZSA9
IHRydWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0
cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1hc3F1ZXJhZGVzQXNVbmRl
ZmluZWQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMp
KQorICAgICAgICAgICAgICAgIHx8IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgPT0gU3Ry
aW5nVHlwZSkgeworICAgICAgICAgICAgICAgIGFsbFRydWUgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoYWxsVHJ1
ZSkKICAgICAgICAgICAgIHJldHVybiBEZWZpbml0ZWx5VHJ1ZTsKICAgICB9CiAgICAgCkBAIC0x
MDUsOSArMTExLDEyIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojp2ZXJpZnlFZGdlKE5vZGUqLCBFZGdlIGVk
Z2UpCit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojp2ZXJpZnlF
ZGdlKE5vZGUqIG5vZGUsIEVkZ2UgZWRnZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCghKGZvck5v
ZGUoZWRnZSkubV90eXBlICYgfnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSk7CisgICAg
aWYgKCEoZm9yTm9kZShlZGdlKS5tX3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQo
KSkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG5vZGUs
IHRvQ1N0cmluZygiRWRnZSB2ZXJpZmljYXRpb24gZXJyb3I6ICIsIG5vZGUsICItPiIsIGVkZ2Us
ICIgd2FzIGV4cGVjdGVkIHRvIGhhdmUgdHlwZSAiLCBTcGVjdWxhdGlvbkR1bXAodHlwZUZpbHRl
ckZvcihlZGdlLnVzZUtpbmQoKSkpLCAiIGJ1dCBoYXMgdHlwZSAiLCBTcGVjdWxhdGlvbkR1bXAo
Zm9yTm9kZShlZGdlKS5tX3R5cGUpKS5kYXRhKCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBB
YnN0cmFjdFN0YXRlVHlwZT4KQEAgLTE0NTYsNyArMTQ2NSwxMiBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24obm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24o
KSkpIHsKLSAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgLy8gVGhp
cyB1c2Ugb2Ygb25seVN0cnVjdHVyZSgpIHNob3VsZCBiZSByZXBsYWNlZCBieSBnaXZpbmcgR2V0
QnlJZFN0YXR1cyB0aGUgYWJpbGl0eQorICAgICAgICAgICAgLy8gdG8gY29tcHV0ZSB0aGluZ3Mg
YmFzZWQgb24gYSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29kZVBhcnNl
cidzCisgICAgICAgICAgICAvLyBhYmlsaXR5IHRvIGdlbmVyYXRlIGNvZGUgYmFzZWQgb24gYSBH
ZXRCeUlkU3RhdHVzIG91dCBvZiBCeXRlQ29kZVBhcnNlciBzbyB0aGF0CisgICAgICAgICAgICAv
LyBDb25zdGFudEZvbGRpbmdQaGFzZSBjYW4gdXNlIGl0LgorICAgICAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICAgICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1
cmUub25seVN0cnVjdHVyZSgpKSB7CiAgICAgICAgICAgICAgICAgR2V0QnlJZFN0YXR1cyBzdGF0
dXMgPSBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fdm0sIHN0cnVjdHVyZSwKICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5pZGVudGlm
aWVycygpW25vZGUtPmlkZW50aWZpZXJOdW1iZXIoKV0pOwpAQCAtMTQ2Niw5ICsxNDgwLDEzIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSk7CiAgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVCghc3RhdHVzWzBdLmNoYWluKCkpOwogICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVl
KCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5p
c0NlbGwoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVy
KHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAg
ICAgICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0
KCkpOwogICAgICAgICAgICAgICAgICAgICAKQEAgLTE1MDIsOCArMTUyMCwxMiBAQCBib29sIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVCghKHZhbHVl
Lm1fdHlwZSAmIH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJl
YWR5IGVuc3VyZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0
cnVjdHVyZVNldCgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgaW50ZXJlc3Rp
bmcgdGhhdCB3ZSBjb3VsZCBoYXZlIHByb3ZlbiB0aGF0IHRoZSBvYmplY3QgaGFzIGEgbGFyZ2Vy
IHN0cnVjdHVyZSBzZXQKKyAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdlJ3JlIHRl
c3RpbmcuIEluIHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hlY2sKKyAg
ICAgICAgLy8gbW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KKyAgICAgICAgCisg
ICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAg
ICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpAQCAtMTUxMSwzNCArMTUzMywxNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7CiAgICAg
ICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAKLSAgICAgICAgLy8gSWYgdGhp
cyBzdHJ1Y3R1cmUgY2hlY2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFk
eSBoZWxkIGluCi0gICAgICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhl
biB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFzZSBzaG91bGQKLSAgICAgICAgLy8gdHVybiB0aGlz
IGludG8gYSB3YXRjaHBvaW50IGluc3RlYWQuCi0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgJiYgdmFsdWUubV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgbV9z
dGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwg
dmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25X
YXRjaHBvaW50OiB7Ci0gICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSk7Ci0KLSAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1cmUoKSk7
Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgIG5vZGUt
PnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgICAgIAog
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAg
ICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc0NsZWFyKCkpIHsKLSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1p
dCk7Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBpZiAo
IWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkgeworICAgICAg
ICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgY2xvYmJlckxpbWl0LCBu
b2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIG5vZGUtPnRy
YW5zaXRpb24oKS0+bmV4dCk7CiAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVz
KHRydWUpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMTYxNiwxMyArMTYyMCwzOSBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogICAgIGNh
c2UgQXJyYXlpZnlUb1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9k
ZS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlLmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSkKICAgICAgICAgICAg
IG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAg
ICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGhhdmUgYSBi
dW5jaCBvZiBvcHRpb25zIG9mIGhvdyB0byBleHByZXNzIHRoZSBhYnN0cmFjdCBzZXQgYXQgdGhp
cyBwb2ludC4gTGV0IHNldCBTCisgICAgICAgIC8vIGJlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0
aGF0IHRoZSB2YWx1ZSBoYWQgYmVmb3JlIGNsb2JiZXJpbmcgYW5kIGFzc3VtZSB0aGF0IGFsbCBv
ZgorICAgICAgICAvLyB0aGVtIGFyZSB3YXRjaGFibGUuIFRoZSBuZXcgdmFsdWUgc2hvdWxkIGJl
IHRoZSBsZWFzdCBleHByZXNzaWJsZSB1cHBlciBib3VuZCBvZiB0aGUKKyAgICAgICAgLy8gaW50
ZXJzZWN0aW9uIG9mICJ2YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2ZSBzdHJ1Y3R1cmUgPSBub2Rl
LT5zdHJ1Y3R1cmUoKSIgYW5kICJ2YWx1ZXMKKyAgICAgICAgLy8gdGhhdCBoYXZlIHN0cnVjdHVy
ZSBpbiBTIHBsdXMgYW55IHN0cnVjdHVyZSB0cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9tIFMiLiBB
c3N1bWUgdGhhdAorICAgICAgICAvLyBub2RlLT5zdHJ1Y3R1cmUoKSBpcyBub3QgaW4gUyBidXQg
aXQgaXMgdHJhbnNpdGlvbi1yZWFjaGFibGUgZnJvbSBTLiBUaGVuIHdlIHdvdWxkCisgICAgICAg
IC8vIGxpa2UgdG8gc2F5IHRoYXQgdGhlIHJlc3VsdCBpcyAidmFsdWVzIHRoYXQgaGF2ZSBzdHJ1
Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKSB1bnRpbAorICAgICAgICAvLyB3ZSBpbnZhbGlkYXRl
IiwgYnV0IHRoZXJlIGlzIG5vIHdheSB0byBleHByZXNzIHRoaXMgdXNpbmcgdGhlIEFic3RyYWN0
VmFsdWUgc3ludGF4LiBTbworICAgICAgICAvLyB3ZSBtdXN0IGNob29zZSBiZXR3ZWVuOgorICAg
ICAgICAvLworICAgICAgICAvLyAxKSAidmFsdWVzIHRoYXQgY3VycmVudGx5IGhhdmUgc3RydWN0
dXJlID0gbm9kZS0+c3RydWN0dXJlKCkiLiBUaGlzIGlzIGEgdmFsaWQKKyAgICAgICAgLy8gICAg
c3VwZXJzZXQgb2YgdGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdhbnQsIGFuZCBpdCdzIHNwZWNp
ZmljIGVub3VnaCB0byBzYXRpc2Z5IHRoZQorICAgICAgICAvLyAgICBwcmVjb25kaXRpb25zIG9m
IHRoZSBhcnJheSBhY2Nlc3MgdGhhdCB0aGlzIGlzIGd1YXJkaW5nLiBJdCdzIGFsc28gc3BlY2lm
aWMgZW5vdWdoCisgICAgICAgIC8vICAgIHRvIGFsbG93IHJlbGV2YW50IG9wdGltaXphdGlvbnMg
aW4gdGhlIGNhc2UgdGhhdCB3ZSBkaWRuJ3QgaGF2ZSBhIGNvbnRyYWRpY3Rpb24KKyAgICAgICAg
Ly8gICAgbGlrZSBpbiB0aGlzIGV4YW1wbGUuIE5vdGljZSB0aGF0IGluIHRoZSBhYnNjZW5jZSBv
ZiBhbnkgY29udHJhZGljdGlvbiwgdGhpcyByZXN1bHQKKyAgICAgICAgLy8gICAgaXMgcHJlY2lz
ZSByYXRoZXIgdGhhbiBiZWluZyBhIGNvbnNlcnZhdGl2ZSBMVUIuCisgICAgICAgIC8vCisgICAg
ICAgIC8vIDIpICJ2YWx1ZXMgdGhhdCBjdXJyZW50bHkgaGF2YSBzdHJ1Y3R1cmUgaW4gUyBwbHVz
IGFueSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbi1yZWFjaGFibGUKKyAgICAgICAgLy8gICAgZnJvbSBT
Ii4gVGhpcyBpcyBhbHNvIGEgdmFsaWQgc3VwZXJzZXQgb2YgdGhlIHZhbHVlIHRoYXQgd2UgcmVh
bGx5IHdhbnQsIGJ1dCBpdCdzCisgICAgICAgIC8vICAgIG5vdCBzcGVjaWZpYyBlbm91Z2ggdG8g
c2F0aXNmeSB0aGUgcHJlY29uZGl0aW9ucyBvZiB0aGUgYXJyYXkgYWNjZXNzIHRoYXQgdGhpcyBp
cworICAgICAgICAvLyAgICBndWFyZGluZyAtIHNvIHBsYXlpbmcgc3VjaCBzaGVuYW5pZ2FucyB3
b3VsZCBwcmVjbHVkZSB1cyBmcm9tIGhhdmluZyBhc3NlcnRpb25zIG9uCisgICAgICAgIC8vICAg
IHRoZSB0eXBpbmcgcHJlY29uZGl0aW9ucyBvZiBhbnkgYXJyYXkgYWNjZXNzZXMuIFRoaXMgd291
bGQgYWxzbyBub3QgYmUgYSBkZXNpcmFibGUKKyAgICAgICAgLy8gICAgYW5zd2VyIGluIHRoZSBh
YnNlbmNlIG9mIGEgY29udHJhZGljdGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0
aGF0IGl0J3MgdGVtcHRpbmcgdG8gc2ltcGx5IHNheSB0aGF0IHRoZSByZXN1bHRpbmcgdmFsdWUg
aXMgQk9UVE9NIGJlY2F1c2Ugb2YKKyAgICAgICAgLy8gdGhlIGNvbnRyYWRpY3Rpb24uIFRoYXQg
d291bGQgYmUgd3JvbmcsIHNpbmNlIHdlIGhhdmVuJ3QgaGl0IGFuIGludmFsaWRhdGlvbiBwb2lu
dCwKKyAgICAgICAgLy8geWV0LgorICAgICAgICB2YWx1ZS5zZXQobV9ncmFwaCwgbm9kZS0+c3Ry
dWN0dXJlKCkpOwogICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAg
ICAgICBicmVhazsKICAgICB9CkBAIC0xNjUxLDcgKzE2ODEsMTEgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1ZS5tX3R5cGUg
JiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBlbnN1
cmVkIHRoaXMuCiAKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYmVz
dFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1c3QgZmlsdGVy
IGRvd24gdGhlIGNhc2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVzdWx0cyBpbiBh
bGwKKyAgICAgICAgLy8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVuIHdlIHNob3Vs
ZCBzdHJlbmd0aCByZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCisgICAgICAgIC8vIEdl
dEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1f
c3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBkb25lID0gZmFs
c2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgIGNvbnN0IEdl
dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJp
YW50c1tpXTsKQEAgLTE2NzcsNiArMTcxMSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwg
c2V0KTsKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOworICAgICAgICBtX3N0
YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTE2ODgsNyArMTcyMywxMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAmIH5TcGVjQ2Vs
bCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQgdGhpcy4K
IAotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0UHJvdmVuU3Ry
dWN0dXJlKCkpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0ZXIgZG93biB0aGUg
Y2FzZXMgaW4gTXVsdGlQdXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGluIGVpdGhlcgorICAg
ICAgICAvLyBvbmUgY2FzZSwgb3Igbm90aGluZyBidXQgcmVwbGFjZSBjYXNlcyBhbmQgdGhleSBo
YXZlIHRoZSBzYW1lIG9mZnNldCwgdGhlbiB3ZSBzaG91bGQKKyAgICAgICAgLy8ganVzdCBzdHJl
bmd0aCByZWR1Y2UgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9mIENoZWNrU3Ry
dWN0dXJlLAorICAgICAgICAvLyBbUmVdQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIFB1dFN0cnVj
dHVyZSwgYW5kIFB1dEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9v
bCBkb25lID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0
aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAg
ICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNl
dERhdGEoKS52YXJpYW50c1tpXTsKQEAgLTE3MTUsMjUgKzE3NTUsMjUgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAotICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQp
OwotICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlU2V0IG9sZFNldDsKICAgICAgICAgU3RydWN0
dXJlU2V0IG5ld1NldDsKKyAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJp
YW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAg
ICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkgewot
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlu
cyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2
YXJpYW50LnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbik7Ci0gICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICBvbGRT
ZXQuYWRkKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAg
dHJhbnNpdGlvbnMuYXBwZW5kKFRyYW5zaXRpb24odmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwgdmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFu
dC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7CisgICAg
ICAgICAgICAgICAgbmV3U2V0LmFkZCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gVXNlIGZpbHRlcih2YWx1ZSwg
c2V0KSBhcyBhIHdheSBvZiBzZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlzIHdvcmtzIGJl
Y2F1c2UKLSAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIHNldCBiZSBU
T1AgYmVmb3JlIHRoaXMuIEZpbHRlcmluZyB0b3AgaXMgYW5vdGhlciAKLSAgICAgICAgLy8gd2F5
IG9mIHNldHRpbmcuCi0gICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3U2V0KTsKKyAg
ICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBvbGRTZXQpOworICAgICAgICBtX3N0YXRlLnNl
dEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICBvYnNlcnZlVHJhbnNpdGlvbnMoY2xvYmJl
ckxpbWl0LCB0cmFuc2l0aW9ucyk7CisgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnNl
dChtX2dyYXBoLCBuZXdTZXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCkBAIC0xNzY3
LDcgKzE4MDcsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAg
bm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAg
ICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQgYmUgcmVwbGFjZWQgYnkg
Z2l2aW5nIFB1dEJ5SWRTdGF0dXMgdGhlIGFiaWxpdHkKKyAgICAgICAgLy8gdG8gY29tcHV0ZSB0
aGluZ3MgYmFzZWQgb24gYSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVuIHRvIGZhY3RvciBCeXRlQ29k
ZVBhcnNlcidzCisgICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBh
IFB1dEJ5SWRTdGF0dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAgICAgLy8g
Q29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3Ry
dWN0dXJlKCkpIHsKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMgc3RhdHVzID0gUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdm0sCiAgICAgICAg
ICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSwK
QEAgLTE3ODEsNyArMTgyNiw5IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0
aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5raW5kKCkgPT0gUHV0QnlJZFZh
cmlhbnQ6OlRyYW5zaXRpb24KKyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlLT50cmFu
c2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdGF0dXNbMF0ubmV3U3RydWN0
dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGlt
aXQpOwogICAgICAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9n
cmFwaCwgc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKQEAgLTE4NTUsNiArMTkwMiw3IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBJ
bnZhbGlkYXRpb25Qb2ludDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKKyAgICAg
ICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFs
aWRhdGlvblBvaW50Rm9yKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENoZWNrV2F0Y2hk
b2dUaW1lcjoKQEAgLTE5MzYsNiArMTk4NCw3IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdm9p
ZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlckNhcHR1cmVk
VmFycyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQogeworICAgIFNhbXBsaW5nUmVnaW9u
IHNhbXBsaW5nUmVnaW9uKCJERkcgQUkgQ2xvYmJlciBDYXB0dXJlZCBWYXJzIik7CiAgICAgaWYg
KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIGNvbnN0IEJpdFZlY3RvciYg
Y2FwdHVyZWRWYXJzID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhcHR1cmVkVmFyczsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNhcHR1cmVkVmFycy5zaXplKCk7IGktLTspIHsKQEAg
LTE5NTcsMzIgKzIwMDYsNjkgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pdCkKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIEFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpmb3JBbGxWYWx1ZXMoCisgICAg
dW5zaWduZWQgY2xvYmJlckxpbWl0LCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIGlmICghbV9z
dGF0ZS5oYXZlU3RydWN0dXJlcygpKQotICAgICAgICByZXR1cm47CisgICAgU2FtcGxpbmdSZWdp
b24gc2FtcGxpbmdSZWdpb24oIkRGRyBBSSBGb3IgQWxsIFZhbHVlcyIpOwogICAgIGlmIChjbG9i
YmVyTGltaXQgPj0gbV9zdGF0ZS5ibG9jaygpLT5zaXplKCkpCiAgICAgICAgIGNsb2JiZXJMaW1p
dCA9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpOwogICAgIGVsc2UKICAgICAgICAgY2xvYmJlckxp
bWl0Kys7CiAgICAgQVNTRVJUKGNsb2JiZXJMaW1pdCA8PSBtX3N0YXRlLmJsb2NrKCktPnNpemUo
KSk7CiAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0tOykKLSAgICAgICAgZm9y
Tm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAg
ICBmdW5jdG9yKGZvck5vZGUobV9zdGF0ZS5ibG9jaygpLT5hdChpKSkpOwogICAgIGlmIChtX2dy
YXBoLm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOwogICAgICAgICBI
YXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVB
dEhlYWQuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAg
ICAgICAgZm9yTm9kZSgqaXRlcikuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgICAgIGZ1
bmN0b3IoZm9yTm9kZSgqaXRlcikpOwogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygpOyBpLS07KQotICAgICAgICBtX3N0YXRl
LnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1
bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVudChpKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZMb2NhbHMoKTsgaS0tOykKLSAgICAgICAg
bV9zdGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOwotICAgIG1f
c3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52
YXJpYWJsZXMoKS5sb2NhbChpKSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3Rh
dGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xv
YmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xvYmJlckxpbWl0KQoreworICAgIFNhbXBsaW5nUmVn
aW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQUkgQ2xvYmJlciBTdHJ1Y3R1cmVzIik7CisgICAgaWYg
KCFtX3N0YXRlLmhhdmVTdHJ1Y3R1cmVzKCkpCisgICAgICAgIHJldHVybjsKKyAgICBmb3JBbGxW
YWx1ZXMoY2xvYmJlckxpbWl0LCBBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlc0Zvcik7
CisgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46Om9ic2VydmVUcmFuc2l0aW9uKAorICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwg
U3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKQoreworICAgIGlmICghbV9zdGF0ZS5oYXZl
U3RydWN0dXJlcygpKQorICAgICAgICByZXR1cm47CisgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNp
dGlvbk9ic2VydmVyIHRyYW5zaXRpb25PYnNlcnZlcihmcm9tLCB0byk7CisgICAgZm9yQWxsVmFs
dWVzKGNsb2JiZXJMaW1pdCwgdHJhbnNpdGlvbk9ic2VydmVyKTsKKyAgICBtX3N0YXRlLnNldERp
ZENsb2JiZXIodHJ1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBl
Pgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRy
YW5zaXRpb25zKAorICAgIHVuc2lnbmVkIGNsb2JiZXJMaW1pdCwgY29uc3QgVHJhbnNpdGlvblZl
Y3RvciYgdmVjdG9yKQoreworICAgIGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQorICAg
ICAgICByZXR1cm47CisgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlciB0cmFu
c2l0aW9uc09ic2VydmVyKHZlY3Rvcik7CisgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwg
dHJhbnNpdGlvbnNPYnNlcnZlcik7CiAgICAgbV9zdGF0ZS5zZXREaWRDbG9iYmVyKHRydWUpOwog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBjb25zdF9jYXN0PEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+Kj4odGhpcyktPmR1bXAob3V0KTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RT
dGF0ZVR5cGU+CiB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpCiB7CiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE2ICszMywyOSBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRy
YW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZlY3RvcikKK3sKKyAgICBpZiAobV90
eXBlICYgU3BlY0NlbGwpIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZVRyYW5zaXRpb25z
KHZlY3Rvcik7CisgICAgICAgIEFycmF5TW9kZXMgbmV3TW9kZXMgPSAwOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB2ZWN0b3Iuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBpZiAobV9h
cnJheU1vZGVzICYgYXNBcnJheU1vZGVzKHZlY3RvcltpXS5wcmV2aW91cy0+aW5kZXhpbmdUeXBl
KCkpKQorICAgICAgICAgICAgICAgIG5ld01vZGVzIHw9IGFzQXJyYXlNb2Rlcyh2ZWN0b3JbaV0u
bmV4dC0+aW5kZXhpbmdUeXBlKCkpOworICAgICAgICB9CisgICAgICAgIG1fYXJyYXlNb2RlcyB8
PSBuZXdNb2RlczsKKyAgICB9CisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworfQorCiB2b2lkIEFi
c3RyYWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwaCYgZ3JhcGgsIEpTVmFsdWUgdmFsdWUp
CiB7CiAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgIG1f
Y3VycmVudEtub3duU3RydWN0dXJlID0gc3RydWN0dXJlOwotICAgICAgICBzZXRGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZShncmFwaCwgc3RydWN0dXJlKTsKKyAgICAgICAgZ3JhcGgud2F0Y2hwb2lu
dHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUpOworICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVy
ZTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJl
LmNsZWFyKCk7Ci0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAg
ICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAg
ICB9CiAgICAgICAgIApAQCAtNTAsMTkgKzYzLDI2IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0
TW9zdFNwZWNpZmljKEdyYXAKICAgICBtX3ZhbHVlID0gdmFsdWU7CiAgICAgICAgIAogICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOwogfQogCiB2b2lk
IEFic3RyYWN0VmFsdWU6OnNldChHcmFwaCYgZ3JhcGgsIEpTVmFsdWUgdmFsdWUpCiB7CiAgICAg
aWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKLSAgICAgICAgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUoZ3JhcGgsIHN0cnVjdHVyZSk7Ci0gICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2Rl
cyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAgY2xvYmJlckFycmF5TW9kZXMo
KTsKKyAgICAgICAgaWYgKGdyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKSkg
eworICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gYXNzdW1lIHRoYXQgdGhlIHdh
dGNocG9pbnQgZm9yIHRoaXMgaGFzIGFscmVhZHkgYmVlbiBzZXQuCisgICAgICAgICAgICAvLyBC
dXQgd2UgY2FuJ3QgYmVjYXVzZSBvdXIgdmlldyBvZiB3aGF0IHN0cnVjdHVyZSBhIHZhbHVlIGhh
cyBrZWVwcyBjaGFuZ2luZy4gVGhhdCdzCisgICAgICAgICAgICAvLyB3aHkgd2UgY2FsbCBjb25z
aWRlcigpLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzMzQyNgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAg
ICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CisgICAgICAg
IH0KICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigp
OwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
c3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgfQogICAg
IApAQCAtNzAsMTcgKzkwLDI5IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFw
aCwgSlMKICAgICBtX3ZhbHVlID0gdmFsdWU7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6
c2V0KEdyYXBoJiBncmFwaCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgc2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAg
bV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOwogICAgIG1f
dmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIGFz
c2VydElzV2F0Y2hlZChncmFwaCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBo
JiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgbV9zdHJ1Y3R1cmUgPSBz
ZXQ7CisgICAgbV9hcnJheU1vZGVzID0gc2V0LmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwor
ICAgIG1fdHlwZSA9IHNldC5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV92YWx1
ZSA9IEpTVmFsdWUoKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0
SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpmaXhUeXBlRm9yUmVw
cmVzZW50YXRpb24oTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uKQpAQCAtMTI5LDIxICsxNjEsMTgg
QEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwogICAgIAogICAgIG1f
dHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAgICAgbV9hcnJheU1v
ZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwotICAgIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVy
KTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3IgdG8gdGhlIGFib3ZlIHR3
byBzdGF0ZW1lbnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAgIC8vIEZvbyBpcyBhIFNw
ZWN1bGF0ZWRUeXBlIHRoYXQgaXMgZGlzam9pbnQgd2l0aCB0aGUgcGFzc2VkIFN0cnVjdHVyZVNl
dC4gSW4gdGhhdAogICAgIC8vIGNhc2UsIHdlIHdpbGwgbm93IGhhdmUgKE5vbmUsIFtzb21lU3Ry
dWN0dXJlXSkuIEluIGdlbmVyYWwsIHdlIG5lZWQgdG8gbWFrZQogICAgIC8vIHN1cmUgdGhhdCBu
ZXcgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlwZSBuZWVkcyB0byBi
ZSBmZWQgYmFjawogICAgIC8vIGludG8gdGhlIGluZm9ybWF0aW9uIGdsZWFuZWQgZnJvbSB0aGUg
U3RydWN0dXJlU2V0LgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihtX3R5cGUp
OworICAgIG1fc3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogICAgIAotICAgIGlmIChtX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgc2V0RnV0dXJlUG9zc2li
bGVTdHJ1Y3R1cmUoZ3JhcGgsIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsK
LSAgICAgICAgCiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIGZpbHRlclZhbHVl
QnlUeXBlKCk7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICByZXR1cm4gbm9y
bWFsaXplQ2xhcml0eShncmFwaCk7CiB9CiAKIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCkBAIC0xNjMsMTQgKzE5
MiwyNiBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihTCiAgICAgaWYg
KChtX3R5cGUgJiB0eXBlKSA9PSBtX3R5cGUpCiAgICAgICAgIHJldHVybiBGaWx0cmF0aW9uT0s7
CiAgICAgCisgICAgLy8gRmFzdCBwYXRoIGZvciB0aGUgY2FzZSB0aGF0IHdlIGRvbid0IGV2ZW4g
aGF2ZSBhIGNlbGwuCisgICAgaWYgKCEobV90eXBlICYgU3BlY0NlbGwpKSB7CisgICAgICAgIG1f
dHlwZSAmPSB0eXBlOworICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3VsdDsKKyAgICAgICAg
aWYgKG1fdHlwZSA9PSBTcGVjTm9uZSkgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IENvbnRyYWRpY3Rpb247CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
cmVzdWx0ID0gRmlsdHJhdGlvbk9LOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIG1fdHlwZSAmPSB0eXBlOwogICAg
IAogICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBwcmlvciB0byB0aGlzIGZpbHRlcigpIGNhbGwg
d2UgaGFkLCBzYXksIChGaW5hbCwgVE9QKSwgYW5kCiAgICAgLy8gdGhlIHBhc3NlZCB0eXBlIGlz
IEFycmF5LiBBdCB0aGlzIHBvaW50IHdlJ2xsIGhhdmUgKE5vbmUsIFRPUCkuIFRoZSBiZXN0IHdh
eQogICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgZmlsdGVyaW5nIGRvZXMgdGhl
IHJpZ2h0IHRoaW5nIGlzIHRvIGZpbHRlciBvbgogICAgIC8vIHRoZSBuZXcgdHlwZSAoTm9uZSkg
cmF0aGVyIHRoYW4gdGhlIG9uZSBwYXNzZWQgKEFycmF5KS4KLSAgICBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKLSAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmZp
bHRlcihtX3R5cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcih0eXBlKTsKICAgICBmaWx0ZXJB
cnJheU1vZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICByZXR1cm4g
bm9ybWFsaXplQ2xhcml0eSgpOwpAQCAtMTg0LDE1ICsyMjUsNiBAQCBGaWx0cmF0aW9uUmVzdWx0
IEFic3RyYWN0VmFsdWU6OmZpbHRlckJ5CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBB
YnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFwaCYgZ3JhcGgsIFN0
cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgIGlmIChn
cmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRj
aHBvaW50U2V0KCkpKQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID0gc3RydWN0
dXJlOwotICAgIGVsc2UKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9w
KCk7Ci19Ci0KIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5cGUoKQogewogICAg
IC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0aGUgZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMKQEAgLTIzOCw4ICsyNzAsNyBAQCBib29sIEFic3Ry
YWN0VmFsdWU6OnNob3VsZEJlQ2xlYXIoKSBjb25zCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IAogICAgIGlmICghKG1fdHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAgICAgJiYgKCFtX2FycmF5TW9k
ZXMKLSAgICAgICAgICAgIHx8IG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSkpCisg
ICAgICAgICYmICghbV9hcnJheU1vZGVzIHx8IG1fc3RydWN0dXJlLmlzQ2xlYXIoKSkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAgLTI2MywxMiArMjk0
LDE4IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXoKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6Om5vcm1hbGl6
ZUNsYXJpdHkoR3JhcGgmIGdyYXBoKQoreworICAgIEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0ID0g
bm9ybWFsaXplQ2xhcml0eSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgQWJzdHJhY3RWYWx1
ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgaWYgKCEobV90eXBlICYgU3BlY0Nl
bGwpKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkp
OwotICAgICAgICBBU1NFUlQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc0NsZWFyKCkpOwor
ICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAgICAgICAgQVNTRVJUKCFt
X2FycmF5TW9kZXMpOwogICAgIH0KICAgICAKQEAgLTI4OSw2ICszMjYsMTEgQEAgdm9pZCBBYnN0
cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgYwogICAgIC8vIHdlIGRvbid0IHdhbnQgdG8g
Z2V0IHBlZGFudGljIGFib3V0IHRoaXMgYXMgaXQgd291bGQgb25seSBpbmNyZWFzZSB0aGUgY29t
cHV0YXRpb25hbAogICAgIC8vIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUuCiB9CisKK3ZvaWQgQWJz
dHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29uc3QKK3sKKyAgICBt
X3N0cnVjdHVyZS5hc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworfQogI2VuZGlmCiAKIHZvaWQgQWJz
dHJhY3RWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtMzAyLDggKzM0NCw3
IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMKICAgICBpZiAobV90
eXBlICYgU3BlY0NlbGwpIHsKICAgICAgICAgb3V0LnByaW50KAogICAgICAgICAgICAgIiwgIiwg
QXJyYXlNb2Rlc0R1bXAobV9hcnJheU1vZGVzKSwgIiwgIiwKLSAgICAgICAgICAgIGluQ29udGV4
dChtX2N1cnJlbnRLbm93blN0cnVjdHVyZSwgY29udGV4dCksICIsICIsCi0gICAgICAgICAgICBp
bkNvbnRleHQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSwgY29udGV4dCkpOworICAgICAgICAg
ICAgaW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSk7CiAgICAgfQogICAgIGlmICghIW1f
dmFsdWUpCiAgICAgICAgIG91dC5wcmludCgiLCAiLCBpbkNvbnRleHQobV92YWx1ZSwgY29udGV4
dCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw3IEBAIHN0cnVjdCBBYnN0
cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNwZWNOb25lOwogICAgICAgICBt
X2FycmF5TW9kZXMgPSAwOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jbGVhcigp
OwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1f
c3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkBAIC03NSwxNSArNzQsNzQgQEAgc3RydWN0IEFi
c3RyYWN0VmFsdWUgewogICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKQogICAgIHsKICAgICAg
ICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5jbG9iYmVyKCk7CiAg
ICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7CisgICAgICAg
ICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAgICAgICAgICAgIEFTU0VSVCgh
bV9hcnJheU1vZGVzKTsKICAgICAgICAgfQogICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzRm9yKEFic3RyYWN0
VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdmFsdWUuY2xvYmJlclN0cnVjdHVyZXMoKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKQorICAgIHsK
KyAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7CisgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgb2JzZXJ2
ZUludmFsaWRhdGlvblBvaW50Rm9yKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgdmFsdWUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgb2JzZXJ2ZVRyYW5zaXRpb24oU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKQorICAg
IHsKKyAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZS5vYnNlcnZlVHJhbnNpdGlvbihmcm9tLCB0byk7CisgICAgICAgICAgICBvYnNlcnZlSW5k
ZXhpbmdUeXBlVHJhbnNpdGlvbihmcm9tLT5pbmRleGluZ1R5cGUoKSwgdG8tPmluZGV4aW5nVHlw
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZl
Y3Rvcik7CisgICAgCisgICAgY2xhc3MgVHJhbnNpdGlvbk9ic2VydmVyIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFRyYW5zaXRpb25PYnNlcnZlcihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSog
dG8pCisgICAgICAgICAgICA6IG1fZnJvbShmcm9tKQorICAgICAgICAgICAgLCBtX3RvKHRvKQor
ICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgb3BlcmF0b3IoKShB
YnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUub2JzZXJ2
ZVRyYW5zaXRpb24obV9mcm9tLCBtX3RvKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAg
ICAgIFN0cnVjdHVyZSogbV9mcm9tOworICAgICAgICBTdHJ1Y3R1cmUqIG1fdG87CisgICAgfTsK
KyAgICAKKyAgICBjbGFzcyBUcmFuc2l0aW9uc09ic2VydmVyIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFRyYW5zaXRpb25zT2JzZXJ2ZXIoY29uc3QgVHJhbnNpdGlvblZlY3RvciYgdmVjdG9yKQor
ICAgICAgICAgICAgOiBtX3ZlY3Rvcih2ZWN0b3IpCisgICAgICAgIHsKKyAgICAgICAgfQogICAg
ICAgICAKKyAgICAgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YWx1ZS5vYnNlcnZlVHJhbnNpdGlvbnMobV92ZWN0b3IpOwor
ICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgVHJhbnNpdGlvblZlY3RvciYg
bV92ZWN0b3I7CisgICAgfTsKKyAgICAKICAgICB2b2lkIGNsb2JiZXJWYWx1ZSgpCiAgICAgewog
ICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtOTEsNyArMTQ5LDEwIEBAIHN0cnVjdCBB
YnN0cmFjdFZhbHVlIHsKICAgICAKICAgICBib29sIGlzSGVhcFRvcCgpIGNvbnN0CiAgICAgewot
ICAgICAgICByZXR1cm4gKG1fdHlwZSB8IFNwZWNIZWFwVG9wKSA9PSBtX3R5cGUgJiYgbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaXNUb3AoKSAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlz
VG9wKCk7CisgICAgICAgIHJldHVybiAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZQor
ICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUuaXNUb3AoKQorICAgICAgICAgICAgJiYgbV9hcnJh
eU1vZGVzID09IEFMTF9BUlJBWV9NT0RFUworICAgICAgICAgICAgJiYgIW1fdmFsdWU7CiAgICAg
fQogICAgIAogICAgIGJvb2wgdmFsdWVJc1RvcCgpIGNvbnN0CkBAIC0xMTQsMTYgKzE3NSwxNSBA
QCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgdm9pZCBzZXRNb3N0U3BlY2lmaWMoR3JhcGgm
LCBKU1ZhbHVlKTsKICAgICB2b2lkIHNldChHcmFwaCYsIEpTVmFsdWUpOwogICAgIHZvaWQgc2V0
KEdyYXBoJiwgU3RydWN0dXJlKik7CisgICAgdm9pZCBzZXQoR3JhcGgmLCBjb25zdCBTdHJ1Y3R1
cmVTZXQmKTsKICAgICAKICAgICB2b2lkIHNldFR5cGUoU3BlY3VsYXRlZFR5cGUgdHlwZSkKICAg
ICB7CiAgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVu
dEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwog
ICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAg
ICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgICAgIG1f
c3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgICAg
ICB9CiAgICAgICAgIG1fdHlwZSA9IHR5cGU7CkBAIC0xMzgsOCArMTk4LDcgQEAgc3RydWN0IEFi
c3RyYWN0VmFsdWUgewogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBvdGhlci5tX3R5
cGUKICAgICAgICAgICAgICYmIG1fYXJyYXlNb2RlcyA9PSBvdGhlci5tX2FycmF5TW9kZXMKLSAg
ICAgICAgICAgICYmIG1fY3VycmVudEtub3duU3RydWN0dXJlID09IG90aGVyLm1fY3VycmVudEtu
b3duU3RydWN0dXJlCi0gICAgICAgICAgICAmJiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlID09
IG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUKKyAgICAgICAgICAgICYmIG1fc3RydWN0
dXJlID09IG90aGVyLm1fc3RydWN0dXJlCiAgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90aGVy
Lm1fdmFsdWU7CiAgICAgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBYnN0cmFjdFZhbHVl
JiBvdGhlcikgY29uc3QKQEAgLTE2Miw4ICsyMjEsNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VTcGVjdWxhdGlv
bihtX3R5cGUsIG90aGVyLm1fdHlwZSk7CiAgICAgICAgICAgICByZXN1bHQgfD0gbWVyZ2VBcnJh
eU1vZGVzKG1fYXJyYXlNb2Rlcywgb3RoZXIubV9hcnJheU1vZGVzKTsKLSAgICAgICAgICAgIHJl
c3VsdCB8PSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmVzdWx0IHw9IG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuYWRkQWxsKG90aGVyLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgcmVzdWx0IHw9IG1fc3RydWN0dXJlLm1lcmdlKG90aGVyLm1fc3RydWN0dXJlKTsKICAgICAg
ICAgICAgIGlmIChtX3ZhbHVlICE9IG90aGVyLm1fdmFsdWUpIHsKICAgICAgICAgICAgICAgICBy
ZXN1bHQgfD0gISFtX3ZhbHVlOwogICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7
CkBAIC0xNzksOCArMjM3LDcgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAgICBtZXJn
ZVNwZWN1bGF0aW9uKG1fdHlwZSwgdHlwZSk7CiAgICAgICAgIAogICAgICAgICBpZiAodHlwZSAm
IFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9w
KCk7Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2Rl
cyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICAgICAgfQogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1
ZSgpOwpAQCAtMjI1LDc1ICsyODIsMzAgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgICAg
ICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICAgICAgQVNTRVJUKG1f
dHlwZSAmIFNwZWNDZWxsKTsKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFs
dWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudEtu
b3duU3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICAmJiBtX2Z1
dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNvbnRhaW5zKHN0cnVjdHVyZSkKKyAgICAgICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgJiYg
KG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAK
LSAgICBTdHJ1Y3R1cmUqIGJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKG1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBp
ZiAobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgICAg
IHJldHVybiBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgCiAgICAgYm9vbCBoYXNDbG9iYmVyYWJsZVN0YXRlKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc05laXRo
ZXJDbGVhck5vclRvcCgpCisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS5pc05laXRoZXJDbGVh
ck5vclRvcCgpCiAgICAgICAgICAgICB8fCAhYXJyYXlNb2Rlc0FyZUNsZWFyT3JUb3AobV9hcnJh
eU1vZGVzKTsKICAgICB9CiAgICAgCiAjaWYgQVNTRVJUX0RJU0FCTEVECiAgICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KCkgY29uc3QgeyB9CisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgm
KSBjb25zdCB7IH0KICNlbHNlCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3Q7Cisg
ICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKICNlbmRpZgogICAgIAogICAg
IHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgLy8gQSBncmVhdCB3
YXkgdG8gdGhpbmsgYWJvdXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZSBhbmQKLSAgICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIGlzIHRvIGNvbnNp
ZGVyIHRoZXNlIGZvdXIgZXhhbXBsZXM6Ci0gICAgLy8KLSAgICAvLyAxKSB4ID0gZm9vKCk7Ci0g
ICAgLy8KLSAgICAvLyAgICBJbiB0aGlzIGNhc2UgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJl
IGFuZCBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwKLSAgICAvLyAgICBib3RoIGJlIFRP
UCwgc2luY2Ugd2UgZG9uJ3Qga25vdyBhbnl0aGluZyBhYm91dCB4IGZvciBzdXJlLCB5ZXQuCi0g
ICAgLy8KLSAgICAvLyAyKSB4ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLwot
ICAgIC8vICAgIFdoZXJlIHggd2lsbCBsYXRlciBoYXZlIGEgbmV3IHByb3BlcnR5IGFkZGVkIHRv
IGl0LCAnZycuIEJlY2F1c2Ugb2YgdGhlCi0gICAgLy8gICAga25vd24gYnV0IG5vdC15ZXQtZXhl
Y3V0ZWQgcHJvcGVydHkgYWRkaXRpb24sIHgncyBjdXJyZW50IHN0cnVjdHVyZSB3aWxsCi0gICAg
Ly8gICAgbm90IGJlIHdhdGNocG9pbnRhYmxlOyBoZW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBzdGF0
aWNhbGx5IGJvdW5kaW5nIHRoZSBzZXQKLSAgICAvLyAgICBvZiBwb3NzaWJsZSBzdHJ1Y3R1cmVz
IHRoYXQgeCBtYXkgaGF2ZSBpZiBhIGNsb2JiZXJpbmcgZXZlbnQgaGFwcGVucy4gU28sCi0gICAg
Ly8gICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0
dXJlIHdlIGNoZWNrIHRvIGdldAotICAgIC8vICAgIHByb3BlcnR5ICdmJywgYW5kIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBiZSBUT1AuCi0gICAgLy8KLSAgICAvLyAzKSB4ID0gZm9v
KCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLwotICAgIC8vICAgIFdoZXJlIHggaGFzIGEg
dGVybWluYWwgc3RydWN0dXJlIHRoYXQgaXMgc3RpbGwgd2F0Y2hwb2ludGFibGUuIEluIHRoaXMg
Y2FzZSwKLSAgICAvLyAgICB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUgd2lsbCBib3RoIGJlCi0gICAgLy8gICAgd2hhdGV2ZXIgc3RydWN0
dXJlIHdlIGNoZWNrZWQgZm9yIHdoZW4gZ2V0dGluZyAnZicuCi0gICAgLy8KLSAgICAvLyA0KSB4
ID0gZm9vKCk7Ci0gICAgLy8gICAgeSA9IHguZjsKLSAgICAvLyAgICBiYXIoKTsKLSAgICAvLwot
ICAgIC8vICAgIFdoZXJlIHggaGFzIGEgdGVybWluYWwgc3RydWN0dXJlIHRoYXQgaXMgc3RpbGwg
d2F0Y2hwb2ludGFibGUuIEluIHRoaXMKLSAgICAvLyAgICBjYXNlLCBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZSB3aWxsIGJlIFRPUCBiZWNhdXNlIGJhcigpIG1heSBwb3RlbnRpYWxseQotICAgIC8v
ICAgIGNoYW5nZSB4J3Mgc3RydWN0dXJlIGFuZCB3ZSBoYXZlIG5vIHdheSBvZiBwcm92aW5nIG90
aGVyd2lzZSwgYnV0Ci0gICAgLy8gICAgeCdzIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgd2ls
bCBiZSB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgaGFkIGNoZWNrZWQKLSAgICAvLyAgICB3aGVuIGdl
dHRpbmcgcHJvcGVydHkgJ2YnLgotICAgIAotICAgIC8vIE5CLiBBbGwgZmllbGRzIGluIHRoaXMg
c3RydWN0IG11c3QgaGF2ZSB0cml2aWFsIGRlc3RydWN0b3JzLgotCiAgICAgLy8gVGhpcyBpcyBh
IHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4g
aGF2ZSByaWdodAogICAgIC8vIG5vdy4gVGhlIHN0cnVjdHVyZSBvZiB0aGUgY3VycmVudCB2YWx1
ZSBtdXN0IGJlbG9uZyB0byB0aGlzIHNldC4gVGhlIHNldCBtYXkKICAgICAvLyBiZSBUT1AsIGlu
ZGljYXRpbmcgdGhhdCBpdCBpcyB0aGUgc2V0IG9mIGFsbCBwb3NzaWJsZSBzdHJ1Y3R1cmVzLCBp
biB3aGljaApAQCAtMzAxLDI5ICszMTMsMTIgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAg
IC8vIGluIHdoaWNoIGNhc2UgdGhpcyB2YWx1ZSBjYW5ub3QgYmUgYSBjZWxsLiBUaGlzIGlzIGFs
bCBzdWJqZWN0IHRvIGNoYW5nZQogICAgIC8vIGFueXRpbWUgYSBuZXcgdmFsdWUgaXMgYXNzaWdu
ZWQgdG8gdGhpcyBvbmUsIGFueXRpbWUgdGhlcmUgaXMgYSBjb250cm9sIGZsb3cKICAgICAvLyBt
ZXJnZSwgb3IgbW9zdCBjcnVjaWFsbHksIGFueXRpbWUgYSBzaWRlLWVmZmVjdCBvciBzdHJ1Y3R1
cmUgY2hlY2sgaGFwcGVucy4KLSAgICAvLyBJbiBjYXNlIG9mIGEgc2lkZS1lZmZlY3QsIHdlIHR5
cGljYWxseSBtdXN0IGFzc3VtZSB0aGF0IGFueSB2YWx1ZSBtYXkgaGF2ZQotICAgIC8vIGhhZCBp
dHMgc3RydWN0dXJlIGNoYW5nZWQsIGhlbmNlIGNvbnRyYXZlbmluZyBvdXIgcHJvb2YuIFdlIG1h
a2UgdGhlIHByb29mCi0gICAgLy8gdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMgdG8gVE9Q
IChpLmUuIGNsYWltaW5nIHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdAotICAgIC8vIHRoaXMgdmFs
dWUgbWF5IGhhdmUgYW55IHN0cnVjdHVyZSkuIE9mIG5vdGUgaXMgdGhhdCB0aGUgcHJvb2YgcmVw
cmVzZW50ZWQgYnkKLSAgICAvLyB0aGlzIGZpZWxkIGlzIG5vdCBzdWJqZWN0IHRvIHN0cnVjdHVy
ZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIC0gZXZlbiBpZiBvbmUKLSAgICAvLyBmaXJlcywgd2Ug
Y2FuIGJlIHN1cmUgdGhhdCB0aGlzIHByb29mIGlzIHN0aWxsIHZhbGlkLgotICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmU7Ci0gICAgCi0gICAgLy8gVGhp
cyBpcyBhIHByb3ZlbiBjb25zdHJhaW50IG9uIHRoZSBzdHJ1Y3R1cmVzIHRoYXQgdGhpcyB2YWx1
ZSBjYW4gaGF2ZSBub3cKLSAgICAvLyBvciBhbnkgdGltZSBpbiB0aGUgZnV0dXJlIHN1YmplY3Qg
dG8gdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzIG9mCi0gICAgLy8gYWxsIG1l
bWJlcnMgb2YgdGhpcyBzZXQgbm90IGhhdmluZyBmaXJlZC4gVGhpcyBzZXQgaXMgaW1wZXJ2aW91
cyB0byBzaWRlLQotICAgIC8vIGVmZmVjdHM7IGV2ZW4gaWYgb25lIGhhcHBlbnMgdGhlIHNpZGUt
ZWZmZWN0IGNhbiBvbmx5IGNhdXNlIHRoZSB2YWx1ZSB0bwotICAgIC8vIGNoYW5nZSB0byBhdCB3
b3JzdCBhbm90aGVyIHN0cnVjdHVyZSB0aGF0IGlzIGFsc28gYSBtZW1iZXIgb2YgdGhpcyBzZXQu
IEJ1dCwKLSAgICAvLyB0aGUgdGhlb3JlbSBiZWluZyBwcm92ZWQgYnkgdGhpcyBmaWVsZCBpcyBw
cmVkaWNhdGVkIHVwb24gdGhlcmUgbm90IGJlaW5nCi0gICAgLy8gYW55IG5ldyBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbnMgaW50cm9kdWNlZCBpbnRvIGFueSBtZW1iZXJzIG9mIHRoaXMgc2V0LiBJbgot
ICAgIC8vIGNhc2VzIHdoZXJlIHRoZXJlIGlzIG5vIHdheSBmb3IgdXMgdG8gZ3VhcmQgdGhpcyBo
YXBwZW5pbmcsIHRoZSBzZXQgbXVzdCBiZQotICAgIC8vIFRPUC4gQnV0IGluIGNhc2VzIHdoZXJl
IHdlIGNhbiBndWFyZCBuZXcgc3RydWN0dXJlIHRyYW5zaXRpb25zIChhbGwgbWVtYmVycwotICAg
IC8vIG9mIHRoZSBzZXQgaGF2ZSBzdGlsbC12YWxpZCBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRj
aHBvaW50cykgdGhlbiB0aGlzIHNldAotICAgIC8vIHdpbGwgYmUgZmluaXRlLiBBbnl0aW1lIHRo
YXQgd2UgbWFrZSB1c2Ugb2YgdGhlIGZpbml0ZSBuYXR1cmUgb2YgdGhpcyBzZXQsCi0gICAgLy8g
d2UgbXVzdCBmaXJzdCBpc3N1ZSBhIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQsIHdo
aWNoIHdpbGwgZWZmZWN0aXZlbHkKLSAgICAvLyByZXN1bHQgaW4gbV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUgYmVpbmcgZmlsdGVyZWQgYWNjb3JkaW5nIHRvCi0gICAgLy8gbV9mdXR1cmVQb3NzaWJs
ZVN0cnVjdHVyZS4KLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fZnV0dXJlUG9zc2libGVT
dHJ1Y3R1cmU7CisgICAgLy8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0LCB3ZSBtdXN0IGFzc3Vt
ZSB0aGF0IGFueSB2YWx1ZSB3aXRoIGEgc3RydWN0dXJlIHRoYXQKKyAgICAvLyBpc24ndCBiZWlu
ZyB3YXRjaGVkIG1heSBoYXZlIGhhZCBpdHMgc3RydWN0dXJlIGNoYW5nZWQsIGhlbmNlIGNvbnRy
YXZlbmluZworICAgIC8vIG91ciBwcm9vZi4gSW4gc3VjaCBhIGNhc2Ugd2UgbWFrZSB0aGUgcHJv
b2YgdmFsaWQgYWdhaW4gYnkgc3dpdGNoaW5nIHRoaXMgdG8KKyAgICAvLyBUT1AgKGkuZS4gY2xh
aW1pbmcgdGhhdCB3ZSBoYXZlIHByb3ZlZCB0aGF0IHRoaXMgdmFsdWUgbWF5IGhhdmUgYW55Cisg
ICAgLy8gc3RydWN0dXJlKS4KKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3RydWN0dXJl
OwogICAgIAogICAgIC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgcG9zc2li
bGUgdHlwZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlCiAgICAgLy8gbm93IG9yIGFueSB0aW1l
IGluIHRoZSBmdXR1cmUsIHVubGVzcyBpdCBpcyByZWFzc2lnbmVkLiBUaGlzIGZpZWxkIGlzCkBA
IC0zMzIsMTEgKzMyNywxMSBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gYmV0d2Vl
biB0aGlzIGZpZWxkLCBhbmQgdGhlIHN0cnVjdHVyZSBmaWVsZHMgYWJvdmUsIGlzIGFzIGZvbGxv
d3MuIFRoZQogICAgIC8vIGZpZWxkcyBhYm92ZSBjb25zdHJhaW50IHRoZSBzdHJ1Y3R1cmVzIHRo
YXQgYSBjZWxsIG1heSBoYXZlLCBidXQgdGhleSBzYXkKICAgICAvLyBub3RoaW5nIGFib3V0IHdo
ZXRoZXIgb3Igbm90IHRoZSB2YWx1ZSBpcyBrbm93biB0byBiZSBhIGNlbGwuIE1vcmUgZm9ybWFs
bHksCi0gICAgLy8gdGhlIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0
cmFjdCB2YWx1ZSB0aGF0IGNvbnNpc3RzIG9mIHRoZQorICAgIC8vIHRoZSBtX3N0cnVjdHVyZSBp
cyBpdHNlbGYgYW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKICAgICAvLyB1
bmlvbiBvZiB0aGUgc2V0IG9mIGFsbCBub24tY2VsbCB2YWx1ZXMgYW5kIHRoZSBzZXQgb2YgY2Vs
bCB2YWx1ZXMgdGhhdCBoYXZlCiAgICAgLy8gdGhlIGdpdmVuIHN0cnVjdHVyZS4gVGhpcyBhYnN0
cmFjdCB2YWx1ZSBpcyB0aGVuIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCi0gICAgLy8gbV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUgaXMgbV90
eXBlLiBTbywgZm9yCi0gICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJ
bnQzMiBhbmQgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgaXMKKyAgICAvLyBtX3N0cnVjdHVyZSBh
bmQgdGhlIHNldCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IKKyAgICAv
LyBleGFtcGxlIGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX3N0cnVjdHVy
ZSBpcwogICAgIC8vIFsweDEyMzQ1XSB0aGVuIHRoaXMgYWJzdHJhY3QgdmFsdWUgY29ycmVzcG9u
ZHMgdG8gdGhlIHNldCBvZiBhbGwgaW50ZWdlcnMKICAgICAvLyB1bmlmaWVkIHdpdGggdGhlIHNl
dCBvZiBhbGwgb2JqZWN0cyB3aXRoIHN0cnVjdHVyZSAweDEyMzQ1LgogICAgIFNwZWN1bGF0ZWRU
eXBlIG1fdHlwZTsKQEAgLTM2NCw2ICszNTksMTIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9hcnJh
eU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgIH0KICAgICAKKyAgICB2b2lkIG9ic2VydmVJ
bmRleGluZ1R5cGVUcmFuc2l0aW9uKEluZGV4aW5nVHlwZSBmcm9tLCBJbmRleGluZ1R5cGUgdG8p
CisgICAgeworICAgICAgICBpZiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVzKGZyb20pKQor
ICAgICAgICAgICAgbV9hcnJheU1vZGVzIHw9IGFzQXJyYXlNb2Rlcyh0byk7CisgICAgfQorICAg
IAogICAgIGJvb2wgdmFsaWRhdGVUeXBlKEpTVmFsdWUgdmFsdWUpIGNvbnN0CiAgICAgewogICAg
ICAgICBpZiAoaXNIZWFwVG9wKCkpCkBAIC0zOTEsMTkgKzM5MiwxNyBAQCBwcml2YXRlOgogICAg
IHsKICAgICAgICAgbV90eXBlIHw9IHRvcDsKICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FS
UkFZX01PREVTOwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0g
ICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBtX3N0
cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzZXRGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZShHcmFwaCYsIFN0cnVjdHVyZSogc3RydWN0dXJlKTsKLQogICAgIHZvaWQg
ZmlsdGVyVmFsdWVCeVR5cGUoKTsKICAgICB2b2lkIGZpbHRlckFycmF5TW9kZXNCeVR5cGUoKTsK
ICAgICAKICAgICBib29sIHNob3VsZEJlQ2xlYXIoKSBjb25zdDsKICAgICBGaWx0cmF0aW9uUmVz
dWx0IG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAgICBGaWx0cmF0aW9uUmVzdWx0IG5vcm1hbGl6ZUNs
YXJpdHkoR3JhcGgmKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkocmV2aXNpb24gMTY5NTE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCogYWxsb2NhdGUoKTsgLy8gVXNl
IHBsYWNlbWVudCBuZXcgdG8gYWxsb2NhdGUsIGFuZCBhdm9pZCB1c2luZyB0aGlzIG1ldGhvZC4K
ICAgICB2b2lkIGZyZWUoVCopOyAvLyBDYWxsIHRoaXMgbWV0aG9kIHRvIGRlbGV0ZTsgbmV2ZXIg
dXNlICdkZWxldGUnIGRpcmVjdGx5LgogICAgIAotICAgIHZvaWQgZnJlZUFsbCgpOyAvLyBPbmx5
IGNhbGwgdGhpcyBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KKyAgICB2b2lkIGZyZWVB
bGwoKTsgLy8gT25seSBjYWxsIHRoaXMgaWYgeW91J3ZlIGVpdGhlciBmcmVlZCBldmVyeXRoaW5n
IG9yIGlmIFQgaGFzIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgogICAgIHZvaWQgcmVzZXQoKTsgLy8g
TGlrZSBmcmVlQWxsKCksIGJ1dCBhbHNvIHJldHVybnMgYWxsIG1lbW9yeSB0byB0aGUgT1MuCiAg
ICAgCiAgICAgdW5zaWduZWQgaW5kZXhPZihjb25zdCBUKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyNSw3ICszMjUsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgot
ICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAg
ICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OgogICAgICAgICAgICAgICAgICAgICAvLyBXZSBk
b24ndCBjYXJlIGFib3V0IHRoZXNlIGJlY2F1c2UgaWYgd2UgZ2V0IHVzZXMgb2YgdGhlIHJlbGV2
YW50CiAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhYmxlIHRoZW4gd2UgY2FuIHNhZmVseSBn
ZXQgcmlkIG9mIHRoZXNlLCB0b28uIFRoaXMgb2YgY291cnNlCkBAIC00NDEsNyArNDQwLDYgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJh
eTogewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBnZXQgcmlkIG9mIHRoaXMg
bm9kZSwgaWYgaXQgcmVmZXJlbmNlcyBhIHBoYW50b20gYXJndW1lbnQuCiAgICAgICAgICAgICAg
ICAgICAgIGlmICghaXNPS1RvT3B0aW1pemUobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE2
OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg5LDI1ICsyODksNDggQEAgU3RydWN0dXJlKiBBcnJheU1vZGU6Om9y
aWdpbmFsQXJyYXlTdHJ1YwogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUsIEluZGV4aW5nVHlwZSBzaGFw
ZSkgY29uc3QKIHsKICAgICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewotICAgIGNhc2UgQXJyYXk6
Ok9yaWdpbmFsQXJyYXk6Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNr
KSA9PSBzaGFwZQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJl
LnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpCi0gICAgICAgICAgICAmJiBn
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNPcmlnaW5hbEFy
cmF5U3RydWN0dXJlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpKTsK
KyAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OiB7CisgICAgICAgIGlmICh2YWx1ZS5tX3N0
cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAg
ICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykg
IT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYg
KCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPmlzT3JpZ2luYWxBcnJheVN0cnVjdHVyZShzdHJ1Y3R1cmUp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CiAgICAgICAgIAotICAgIGNhc2UgQXJyYXk6OkFycmF5OgorICAgIGNh
c2UgQXJyYXk6OkFycmF5OiB7CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQo
dmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0FycmF5KSkpCiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtub3du
U3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFw
ZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAgICAgIGlm
ICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVb
aV07CisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGlu
Z1NoYXBlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CiAgICAgICAgIAotICAgIGRlZmF1bHQ6CisgICAgZGVmYXVsdDogewogICAgICAg
ICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJh
eU1vZGVzKHNoYXBlKSB8IGFzQXJyYXlNb2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFz
aykgPT0gc2hhcGU7Ci0gICAgfQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3Ao
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
dmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgaWYgKChzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spICE9IHNoYXBlKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9IH0KIH0KIAogYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBn
cmFwaCwgTm9kZSogbm9kZSwgQWJzdHJhY3RWYWx1ZSYgdmFsdWUpIGNvbnN0CkBAIC0zMzYsMjMg
KzM1OSwzOCBAQCBib29sIEFycmF5TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyCiAgICAg
ICAgIAogICAgIGNhc2UgQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2U6CiAgICAgICAgIHN3aXRj
aCAoYXJyYXlDbGFzcygpKSB7Ci0gICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6Cisg
ICAgICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJyYXk6IHsKICAgICAgICAgICAgIENSQVNIKCk7
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5OgorICAgICAgICBjYXNlIEFycmF5OjpBcnJheTogewogICAgICAg
ICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0
b24oKQotICAgICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpCi0gICAgICAgICAg
ICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSAmIElzQXJyYXkpOworICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJl
LmlzVG9wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWhhc0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5n
VHlwZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
ICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6CisgICAgICAg
IGRlZmF1bHQ6IHsKICAgICAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFs
dWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8
IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFy
cmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQ
dXRBcnJheVN0b3JhZ2UpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIHJldHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQot
ICAgICAgICAgICAgICAgICYmIGhhc0FueUFycmF5U3RvcmFnZSh2YWx1ZS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICB9CisgICAg
ICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVj
dHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgICAgIGlmICghaGFzQW55QXJy
YXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfSB9CiAgICAgICAgIAogICAgIGNhc2UgQXJyYXk6OkFyZ3VtZW50czoKICAgICAg
ICAgcmV0dXJuIHNwZWN1bGF0aW9uQ2hlY2tlZCh2YWx1ZS5tX3R5cGUsIFNwZWNBcmd1bWVudHMp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA5LDggKzIxMDksOCBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIEFTU0VSVCh2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKICAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgU3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgKLSAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEodmFyaWFudC5vbGRTdHJ1Y3R1
cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOworICAgIFRyYW5zaXRpb24qIHRyYW5zaXRp
b24gPSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRkKAorICAgICAgICB2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKIAogICAgIGlmICh2YXJpYW50Lm9sZFN0
cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICE9IHZhcmlhbnQubmV3U3Ry
dWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKQEAgLTIxMjEsMTAgKzIxMjEsMTAgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKIAogICAgICAgICBpZiAoIXZhcmlh
bnQub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgIHBy
b3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2UpOworICAgICAgICAgICAg
ICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbiksIGJhc2UpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRkVG9HcmFw
aCgKLSAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJh
bnNpdGlvbkRhdGEpLAorICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Us
IE9wSW5mbyh0cmFuc2l0aW9uKSwKICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dyYXBoKEdl
dEJ1dHRlcmZseSwgYmFzZSkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTIxMzQsNyAr
MjEzNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgICAg
ICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7CiAgICAg
fQogCi0gICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSks
IGJhc2UpOworICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNpdGlvbiks
IGJhc2UpOwogCiAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgUHV0QnlPZmZzZXQsCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMiw3ICsxMDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmICgh
c2FmZVRvRXhlY3V0ZShtX3N0YXRlLCBtX2dyYXBoLCBub2RlKSkKICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiKFVOU0FGRSkgIik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgbV9pbnRlcnByZXRlci5kdW1wKFdURjo6ZGF0YUZpbGUoKSk7CisgICAgICAgICAgICAgICAg
ZGF0YUxvZyhtX3N0YXRlLnZhcmlhYmxlcygpLCAiICIsIG1faW50ZXJwcmV0ZXIpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLmhhdmVTdHJ1Y3R1cmVzKCkp
CiAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIiAoSGF2ZSBTdHJ1Y3R1cmVzKSIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2
OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjAsMTcgKzQ2MCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAg
ICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlKCkpKQotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYg
c3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3
U3RydWN0dXJlKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5z
KG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAg
ICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
KSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIApAQCAtNTI0LDcgKzUxOCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1
dFN0cnVjdHVyZToKLSAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSAhPSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzICE9IHN0cnVjdHVyZSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgpAQCAtNTQ3LDExICs1NDEsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5zdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgbm9kZS0+Y2hpbGQx
KCkgPT0gY2hpbGQxKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQXJyYXlp
Znk6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAgICAg
ICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBv
dXIgc3RydWN0dXJlcy4KQEAgLTEzODcsMTMgKzEzNzYsNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIGVsaW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlm
IChjc2VNb2RlID09IFN0b3JlRWxpbWluYXRpb24pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBpZiAoc3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihu
b2RlLT5zdHJ1Y3R1cmUoKSwgbm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAgICAgICAg
ICBlbGltaW5hdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgaWYgKGNzZU1vZGUgPT0gTm9ybWFsQ1NF
KQogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNyArNDE4LDYg
QEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50OgogICAgIGNhc2UgSW5zdGFuY2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxf
c3RydWN0dXJlSUQpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMywyMyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKK3N0YXRpYyB1bnNpZ25lZCBj
cmFzaExvY2s7CisKIHZvaWQgc3RhcnRDcmFzaGluZygpCiB7CiAjaWYgRU5BQkxFKENPTVBBUkVf
QU5EX1NXQVApCi0gICAgc3RhdGljIHVuc2lnbmVkIGxvY2s7Ci0gICAgd2hpbGUgKCFXVEY6Ondl
YWtDb21wYXJlQW5kU3dhcCgmbG9jaywgMCwgMSkpCisgICAgd2hpbGUgKCFXVEY6OndlYWtDb21w
YXJlQW5kU3dhcCgmY3Jhc2hMb2NrLCAwLCAxKSkKICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6
eWllbGQoKTsKKyNlbHNlCisgICAgY3Jhc2hMb2NrID0gMTsKICNlbmRpZgogfQogCitib29sIGlz
Q3Jhc2hpbmcoKQoreworICAgIHJldHVybiAhIWNyYXNoTG9jazsKK30KKwogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDb21tb24uaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw4IEBAIGJv
b2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwgVSByaWdodCkKIC8vIHdoZW4geW91J3JlIGZvcmNpbmcg
YSBjcmFzaCB3aXRoIGRpYWdub3N0aWNzLgogdm9pZCBzdGFydENyYXNoaW5nKCk7CiAKK0pTX0VY
UE9SVF9QUklWQVRFIGJvb2wgaXNDcmFzaGluZygpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDb21tb25EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbW1vbkRhdGEuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4
IEBAIHZvaWQgQ29tbW9uRGF0YTo6bm90aWZ5Q29tcGlsaW5nU3RydWN0dXIKICAgICBwbGFuLnRy
YW5zaXRpb25zLmFkZExhemlseSgKICAgICAgICAgY29kZUJsb2NrLAogICAgICAgICBub2RlLT5v
cmlnaW4uc2VtYW50aWMuY29kZU9yaWdpbk93bmVyKCksCi0gICAgICAgIG5vZGUtPnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUsCi0gICAgICAgIG5vZGUtPnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgbm9kZS0+dHJhbnNp
dGlvbigpLT5wcmV2aW91cywKKyAgICAgICAgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKIH0K
IAogdW5zaWduZWQgQ29tbW9uRGF0YTo6YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmln
aW4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1Bo
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk3LDI3ICs5NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2Rl
LT5zdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IHNldCA9IG5vZGUtPnN0cnVjdHVyZVNldCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5t
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUg
ZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvUGhhbnRvbSgpOwogICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZVZhbHVlID0gdmFs
dWUubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0
dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVy
ZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gc3RydWN0dXJlVmFsdWUuc2luZ2xldG9uKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFj
dCB0aGF0IHdlIG1heSBmaWx0ZXIgb24gY2VsbC4KLSAgICAgICAgICAgICAgICAgICAgQWRqYWNl
bmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUtPmNoaWxkcmVuOwotICAgICAgICAgICAgICAgICAgICBj
aGlsZHJlbi5yZW1vdmVFZGdlKDApOwotICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZHJl
bi5jaGlsZDEoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgbm9kZS0+b3JpZ2luLCBjaGls
ZHJlbik7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdl
KCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQoc3RydWN0dXJlKTsKLSAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAg
LTE1Niw3ICsxNDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0g
Y2hpbGRFZGdlLm5vZGUoKTsKICAgICAgICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYg
ZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0
cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIApAQCAtMTgwLDcgKzE2NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
Tm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIE11bHRpUHV0
QnlPZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKIAotICAg
ICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxk
KS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUo
KTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC0yMDUsNyArMTkwLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRFZGdlLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0
cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0
ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0y
MzIsNyArMjE3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtpbmQoKSA9PSBDZWxsVXNlKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9k
ZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3Ry
dWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMzI5LDIyICszMTQsMTcgQEAgcHJp
dmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAg
Tm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogCi0gICAgICAgIGJvb2wgbmVlZHNXYXRj
aHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aGFzU2luZ2xldG9uKCk7CiAgICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKICAgICAgICAgCiAgICAgICAgIEFTU0VS
VCghdmFyaWFudC5jaGFpbigpKTsKLSAgICAgICAgQVNTRVJUKHZhcmlhbnQuc3RydWN0dXJlU2V0
KCkuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc3RydWN0dXJl
LCB2YXJpYW50LnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVyZSkpOwogICAgICAgICAK
ICAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEg
Zm9yd2FyZCBvdmVyIHRoZSBHZXRCeUlkCiAgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgd2Ugc2ln
bmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFuZCBub3QKICAgICAgICAg
Ly8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGlu
ZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7Ci0g
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGlu
ZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmln
aW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7Ci0gICAg
ICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKKyAgICAgICAgaWYgKG5lZWRzQ2VsbENo
ZWNrKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAg
ICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdl
KTsKICAgICAgICAgfQpAQCAtMzgxLDcgKzM2MSw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgQVNT
RVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKICAgICAgICAgCi0gICAg
ICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAgIGJvb2wgbmVlZHNDZWxs
Q2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKICAgICAg
ICAgCiAgICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxzZSwgcHVzaCB0aGUg
Q0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJZApAQCAtMzg5LDIxICszNjgsMTYgQEAgcHJpdmF0
ZToKICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAgICAgICAgbV9pbnRlcnByZXRl
ci5leGVjdXRlKGluZGV4SW5CbG9jayk7CiAKLSAgICAgICAgaWYgKG5lZWRzV2F0Y2hwb2ludCkg
ewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAg
ICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwg
b3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBjaGlsZEVkZ2UpOwot
ICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAgICAgIGlmIChuZWVkc0Nl
bGxDaGVjaykgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAg
ICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBvcmlnaW4sIGNoaWxk
RWRnZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNlS2luZChLbm93bkNl
bGxVc2UpOwogCi0gICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0cmFuc2l0aW9uRGF0
YSA9IDA7CisgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSAwOwogICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pIHsKLSAgICAgICAg
ICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgK
LSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1Y3R1cmUsIHZhcmlh
bnQubmV3U3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24gPSBtX2dyYXBoLm1f
dHJhbnNpdGlvbnMuYWRkKHN0cnVjdHVyZSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CiAKICAg
ICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKICAgICAgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsKQEAgLTQzOSw3ICs0
MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFpc0lubGluZU9mZnNldCh2YXJp
YW50Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAg
b3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAg
ICAgIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJh
cnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkp
OwogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShhbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00NDksNyArNDIzLDcgQEAgcHJpdmF0ZToKIAog
ICAgICAgICAgICAgTm9kZSogcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9u
U2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwg
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5m
byh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSwKKyAgICAgICAgICAgICAgICBPcEluZm8odHJh
bnNpdGlvbiksIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICBFZGdlKG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKSk7CiAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwg
b3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CkBAIC00
NTcsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIGlmICh2YXJpYW50
LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewotICAgICAgICAgICAgTm9k
ZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUs
IG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsKKyAgICAgICAgICAg
IE5vZGUqIHB1dFN0cnVjdHVyZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9uZSwgUHV0U3RydWN0
dXJlLCBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlKTsKICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVC
YXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2Up
KTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleEluQmxvY2ssIHB1dFN0
cnVjdHVyZSk7CiAgICAgICAgIH0KQEAgLTQ3NSwxNiArNDQ5LDEyIEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2luIG9yaWdpbiwgdW5z
aWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgeworICAgICAgICBpZiAobV9n
cmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKGNlbGwtPnN0cnVjdHVyZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKwogICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBtX2luc2VydGlvblNl
dC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBzcGVjdWxhdGlvbkZyb21W
YWx1ZShjZWxsKSwgV2Vha0pTQ29uc3RhbnQsIG9yaWdpbiwgT3BJbmZvKGNlbGwpKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlkKGNlbGwt
PnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewotICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ss
IFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAg
ICAgICAgICAgIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBD
ZWxsVXNlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQogICAgICAgICBtX2lu
c2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9u
ZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdlKHdlYWtDb25zdGFudCwgQ2Vs
bFVzZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVz
aXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Miwx
NCArNjIsMTIgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycgogICAg
IG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCi12b2lkIERlc2lyZWRXYXRjaHBv
aW50czo6YWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQs
IFdhdGNocG9pbnRTZXQqIHNldCkKK2Jvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjpjb25zaWRlcihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX3NldHMuYWRkTGF6aWx5KGNvZGVPcmlnaW4s
IGV4aXRLaW5kLCBzZXQpOwotfQotCi12b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5
KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQsIElubGluZVdhdGNocG9p
bnRTZXQmIHNldCkKLXsKLSAgICBtX2lubGluZVNldHMuYWRkTGF6aWx5KGNvZGVPcmlnaW4sIGV4
aXRLaW5kLCAmc2V0KTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFkZExhemlseShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25X
YXRjaHBvaW50U2V0KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21tb25EYXRhJiBjb21t
b25EYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwyNiArMzks
NyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIFdhdGNocG9pbnRTZXRUeXBlPgotc3RydWN0IFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hw
b2ludFNldCB7Ci0gICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KCkKLSAgICAg
ICAgOiBtX2V4aXRLaW5kKEV4aXRLaW5kVW5zZXQpCi0gICAgICAgICwgbV9zZXQoMCkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldCgKLSAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hwb2lu
dFNldFR5cGUqIHNldCkKLSAgICAgICAgOiBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKLSAgICAg
ICAgLCBtX2V4aXRLaW5kKGV4aXRLaW5kKQotICAgICAgICAsIG1fc2V0KHNldCkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwotICAgIEV4aXRLaW5kIG1f
ZXhpdEtpbmQ7Ci0gICAgV2F0Y2hwb2ludFNldFR5cGUqIG1fc2V0OwotfTsKK2NsYXNzIEdyYXBo
OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKQEAg
LTk1LDEyICs3Niw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zZXRzLmFkZChzZXQpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5k
IGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQotICAgIHsKLSAgICAgICAgbV9wcm9m
aWxlZFdhdGNocG9pbnRzLmFwcGVuZCgKLSAgICAgICAgICAgIFdhdGNocG9pbnRGb3JHZW5lcmlj
V2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4oY29kZU9yaWdpbiwgZXhpdEtpbmQsIHNl
dCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqIGNvZGVCbG9j
aywgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1f
cmVhbGx5QWRkZWQpOwpAQCAtMTEyLDE0ICs4Nyw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIEFk
YXB0b3I6OmFkZChjb2RlQmxvY2ssICppdGVyLCAmY29tbW9uLndhdGNocG9pbnRzLmxhc3QoKSk7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fcHJvZmls
ZWRXYXRjaHBvaW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFdhdGNocG9pbnRGb3JH
ZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4gd2F0Y2hwb2ludCA9Ci0gICAg
ICAgICAgICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzW2ldOwotICAgICAgICAgICAgY29tbW9u
LnByb2ZpbGVkV2F0Y2hwb2ludHMuYXBwZW5kKAotICAgICAgICAgICAgICAgIFByb2ZpbGVkQ29k
ZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KHdhdGNocG9pbnQubV9jb2RlT3JpZ2luLCB3YXRj
aHBvaW50Lm1fZXhpdEtpbmQsIGNvZGVCbG9jaykpOwotICAgICAgICAgICAgQWRhcHRvcjo6YWRk
KGNvZGVCbG9jaywgd2F0Y2hwb2ludC5tX3NldCwgJmNvbW1vbi5wcm9maWxlZFdhdGNocG9pbnRz
Lmxhc3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIG1fcmVhbGx5QWRkZWQgPSB0
cnVlOwogICAgIH0KICAgICAKQEAgLTEzMiw1MyArOTksMTYgQEAgcHVibGljOgogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gbV9wcm9maWxlZFdhdGNocG9pbnRzLnNpemUoKTsgaS0tOykgewotICAgICAg
ICAgICAgaWYgKEFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZChtX3Byb2ZpbGVkV2F0Y2hwb2lu
dHNbaV0ubV9zZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotI2lmIEFTU0VSVF9E
SVNBQkxFRAotICAgIGJvb2wgaXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCisg
ICAgYm9vbCBpc1dhdGNoZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiAhQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKHNldCk7Ci0gICAgfQot
ICAgIAotICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBvaW50U2V0VHlwZSop
Ci0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQotICAgIGJvb2wgaXNT
dGlsbFZhbGlkKFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgewotICAgICAgICBib29sIHJl
c3VsdCA9ICFBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQoc2V0KTsKLSAgICAgICAgbV9maXJz
dEtub3duU3RhdGUuYWRkKHNldCwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKFdhdGNocG9pbnRTZXRU
eXBlKiBzZXQpCi0gICAgewotICAgICAgICB0eXBlbmFtZSBTdGF0ZU1hcDo6aXRlcmF0b3IgaXRl
ciA9IG1fZmlyc3RLbm93blN0YXRlLmZpbmQoc2V0KTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gbV9m
aXJzdEtub3duU3RhdGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IAotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUgIT0gIUFkYXB0b3I6Omhhc0JlZW5JbnZhbGlk
YXRlZChzZXQpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIGJvb2wgaXNWYWxpZE9yTWl4ZWQo
V2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc1N0aWxsVmFs
aWQoc2V0KSB8fCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKHNldCk7CisgICAgICAgIHJldHVybiBt
X3NldHMuY29udGFpbnMoc2V0KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFdhdGNo
cG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4+IG1fcHJvZmls
ZWRXYXRjaHBvaW50czsKICAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBlKj4gbV9zZXRzOwot
I2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBTdGF0ZU1hcCBtX2ZpcnN0S25vd25TdGF0ZTsKLSNl
bmRpZgogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKIH07CiAKQEAgLTE5MCw0OCArMTIwLDI0IEBA
IHB1YmxpYzoKICAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50U2V0Kik7CiAgICAgdm9pZCBh
ZGRMYXppbHkoSW5saW5lV2F0Y2hwb2ludFNldCYpOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJy
YXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9pZCBhZGRMYXppbHkoQ29kZU9yaWdpbiwgRXhpdEtpbmQs
IFdhdGNocG9pbnRTZXQqKTsKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0S2lu
ZCwgSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIAorICAgIGJvb2wgY29uc2lkZXIoU3RydWN0
dXJlKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwgQ29tbW9uRGF0YSYp
OwogICAgIAogICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0OwogICAgIAotICAgIGJvb2wg
aXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXQqIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X3NldHMuaXNTdGlsbFZhbGlkKHNldCk7Ci0gICAgfQotICAgIGJvb2wgaXNTdGlsbFZhbGlkKElu
bGluZVdhdGNocG9pbnRTZXQmIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZVNl
dHMuaXNTdGlsbFZhbGlkKCZzZXQpOwotICAgIH0KLSAgICBib29sIGlzU3RpbGxWYWxpZChKU0Fy
cmF5QnVmZmVyVmlldyogdmlldykKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdz
LmlzU3RpbGxWYWxpZCh2aWV3KTsKLSAgICB9Ci0gICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0
YXRlKFdhdGNocG9pbnRTZXQqIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NldHMuc2hv
dWxkQXNzdW1lTWl4ZWRTdGF0ZShzZXQpOwotICAgIH0KLSAgICBib29sIHNob3VsZEFzc3VtZU1p
eGVkU3RhdGUoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faW5saW5lU2V0cy5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKCZzZXQpOwotICAgIH0KLSAgICBi
b29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKHZp
ZXcpOwotICAgIH0KLSAgICBib29sIGlzVmFsaWRPck1peGVkKFdhdGNocG9pbnRTZXQqIHNldCkK
KyAgICBib29sIGlzV2F0Y2hlZChXYXRjaHBvaW50U2V0KiBzZXQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gbV9zZXRzLmlzVmFsaWRPck1peGVkKHNldCk7CisgICAgICAgIHJldHVybiBtX3NldHMu
aXNXYXRjaGVkKHNldCk7CiAgICAgfQotICAgIGJvb2wgaXNWYWxpZE9yTWl4ZWQoSW5saW5lV2F0
Y2hwb2ludFNldCYgc2V0KQorICAgIGJvb2wgaXNXYXRjaGVkKElubGluZVdhdGNocG9pbnRTZXQm
IHNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZVNldHMuaXNWYWxpZE9yTWl4ZWQo
JnNldCk7CisgICAgICAgIHJldHVybiBtX2lubGluZVNldHMuaXNXYXRjaGVkKCZzZXQpOwogICAg
IH0KLSAgICBib29sIGlzVmFsaWRPck1peGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQorICAg
IGJvb2wgaXNXYXRjaGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fYnVmZmVyVmlld3MuaXNWYWxpZE9yTWl4ZWQodmlldyk7CisgICAgICAgIHJldHVy
biBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CiAgICAgCiBwcml2YXRlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTY5
NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQdXRCeVZhbDoKICAg
ICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDoKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1
cmU6CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMwLDcg
KzkzMCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFibGU6CiAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAgICAgY2FzZSBD
aGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIENyZWF0ZVRoaXM6CkBAIC0xMzUxLDcgKzEz
NTAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgSlNPYmplY3QqIHN0cmluZ1Byb3Rv
dHlwZU9iamVjdCA9IGFzT2JqZWN0KHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3RvcmVkUHJvdG90
eXBlKCkpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IHN0
cmluZ1Byb3RvdHlwZU9iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGlmICghbV9ncmFwaC53
YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPnRyYW5z
aXRpb25XYXRjaHBvaW50U2V0KCkpKQorICAgICAgICBpZiAoIW1fZ3JhcGgud2F0Y2hwb2ludHMo
KS5jb25zaWRlcihzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAKICAgICAgICAgaWYgKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpCkBAIC0xOTA1LDI1ICsxOTA0LDE1IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIGFkZFJlcXVpcmVkUGhhbnRvbShlZGdlLm5vZGUoKSk7CiAKKyAg
ICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWVkZ2UtPmhhc0RvdWJsZVJlc3Vs
dCgpKTsKKwogICAgICAgICAgICAgTm9kZSogcmVzdWx0OwotICAgICAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0RvdWJsZVJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIG5ldmVy
IGhhcHBlbi4KLSAgICAgICAgICAgICAgICBzdGFydENyYXNoaW5nKCk7Ci0gICAgICAgICAgICAg
ICAgZGF0YUxvZygiRm91bmQgYW4gSW50NTJSZXBVc2UgdG8gYSBkb3VibGUgcmVzdWx0OiAiLCBu
b2RlLCAiIC0+ICIsIGVkZ2UsICJcbiIpOwotICAgICAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZUludDMyRm9yQXJpdGhtZXRpYygp
KSB7CisgICAgICAgICAgICBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1l
dGljKCkpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnRO
b2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDMyLCBJbnQ1
MlJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgp
LCBJbnQzMlVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBU
aGlzIGlzIG9ubHkgaGVyZSBmb3IgZGVhbGluZyB3aXRoIGNvbnN0YW50cy4KLSAgICAgICAgICAg
ICAgICBpZiAoZWRnZS0+b3AoKSAhPSBKU0NvbnN0YW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN0YXJ0Q3Jhc2hpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRm91bmQgYW4g
SW50NTJSZXBVc2Ugb24gc29tZXRoaW5nIHRoYXQgaXMgbmVpdGhlciBJbnQzMiBub3IgYSBjb25z
dGFudDogIiwgbm9kZSwgIiAtPiAiLCBlZGdlLCAiXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9ncmFwaC5kdW1wKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERGR19BU1NFUlQo
bV9ncmFwaCwgbm9kZSwgZWRnZS0+b3AoKSA9PSBKU0NvbnN0YW50KTsKICAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAg
ICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUyQ29uc3RhbnQsIG5vZGUtPm9y
aWdpbiwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGVkZ2UtPmNvbnN0YW50TnVtYmVyKCkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
Njk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNiArNzcsMTYgQEAgR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxh
biwgTG9uZ0xpdgogCiBHcmFwaDo6fkdyYXBoKCkKIHsKKyAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIGlmICghYmxvY2sp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIHBoaUluZGV4
ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAgICAgIG1fYWxsb2Nh
dG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBu
b2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAgICAgICAgICBtX2Fs
bG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKKyAgICB9CiAgICAgbV9hbGxvY2F0
b3IuZnJlZUFsbCgpOwogfQogCkBAIC0yMTEsOCArMjIxLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4
dChub2RlLT5zdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5oYXNTdHJ1
Y3R1cmUoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoKm5vZGUtPnN0cnVj
dHVyZSgpLCBjb250ZXh0KSk7Ci0gICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KCpub2RlLT5zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLCBjb250ZXh0KSwgIiAtPiAiLCBp
bkNvbnRleHQoKm5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlLCBj
b250ZXh0KSk7CisgICAgaWYgKG5vZGUtPmhhc1RyYW5zaXRpb24oKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2RlLT50cmFuc2l0aW9uKCksIGNvbnRl
eHQpKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgewogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9uKCkpLCAiLCAiKTsK
ICAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8o
KSkpIHsKQEAgLTgwMCw4ICs4MTAsOSBAQCBKU0FycmF5QnVmZmVyVmlldyogR3JhcGg6OnRyeUdl
dEZvbGRhYmxlCiAgICAgSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBqc0R5bmFtaWNDYXN0PEpT
QXJyYXlCdWZmZXJWaWV3Kj4odmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOwogICAgIGlmICghdmll
dykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCF3YXRjaHBvaW50cygpLmlzU3RpbGxWYWxp
ZCh2aWV3KSkKKyAgICBpZiAoIXZpZXctPmxlbmd0aCgpKQogICAgICAgICByZXR1cm4gMDsKKyAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICByZXR1cm4gdmlldzsKIH0KIApAQCAtODQ2LDcg
Kzg1Nyw2IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihu
b2RlLT5zdHJ1Y3R1cmVTZXQoKVtpXSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgogICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5
VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKQEAgLTg1OCw5
ICs4NjgsMzQgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAg
ICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgIGNhc2Ug
UmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVu
ZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5z
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKTsKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cyk7CiAgICAgICAgICAgICAgICAg
dmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcigKLSAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgICAgICBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5
T2Zmc2V0OgorICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0
QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAg
ICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEo
KS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5VmFsdWUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHNldC5zaXplKCk7IGotLTsp
CisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9u
bHlQb2ludGVyKHNldFtqXSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0
byBtYXJrIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxk
CisgICAgICAgICAgICAgICAgICAgIC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tT
dHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byBtYXJrIHRoZQorICAgICAgICAgICAgICAgICAgICAv
LyBjYWxsTGlua1N0YXR1cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0
IGlmIGFueSBvZiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQu
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIFB1dEJ5SWRWYXJpYW50JiB2
YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAg
ICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih2
YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQu
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtODcwLDYgKzkwNSwz
NSBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgfQogfQog
Cit2b2lkIEdyYXBoOjphc3NlcnRJc1dhdGNoZWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgaWYgKCFzdHJ1Y3R1cmUtPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAod2F0Y2hwb2ludHMoKS5pc1dhdGNoZWQoc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIERGR19DUkFTSCgqdGhpcywg
bnVsbHB0ciwgdG9DU3RyaW5nKCJTdHJ1Y3R1cmUgIiwgcG9pbnRlckR1bXAoc3RydWN0dXJlKSwg
IiBpcyB3YXRjaGFibGUgYnV0IGlzbid0IGJlaW5nIHdhdGNoZWQuIikuZGF0YSgpKTsKK30KKwor
dm9pZCBHcmFwaDo6aGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSgKKyAgICBOb2RlKiBub2RlLCBjb25z
dCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIq
IGFzc2VydGlvbikKK3sKKyAgICBzdGFydENyYXNoaW5nKCk7CisgICAgZGF0YUxvZygiREZHIEFT
U0VSVElPTiBGQUlMRUQ6ICIsIGFzc2VydGlvbiwgIlxuIik7CisgICAgZGF0YUxvZyhmaWxlLCAi
KCIsIGxpbmUsICIpIDogIiwgZnVuY3Rpb24sICJcbiIpOworICAgIGRhdGFMb2coIlxuIik7Cisg
ICAgaWYgKG5vZGUpIHsKKyAgICAgICAgZGF0YUxvZygiV2hpbGUgaGFuZGxpbmcgbm9kZSAiLCBu
b2RlLCAiXG4iKTsKKyAgICAgICAgZGF0YUxvZygiXG4iKTsKKyAgICB9CisgICAgZGF0YUxvZygi
R3JhcGggYXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgZHVtcCgpOworICAgIGRhdGFMb2co
IlxuIik7CisgICAgZGF0YUxvZygiREZHIEFTU0VSVElPTiBGQUlMRUQ6ICIsIGFzc2VydGlvbiwg
IlxuIik7CisgICAgZGF0YUxvZyhmaWxlLCAiKCIsIGxpbmUsICIpIDogIiwgZnVuY3Rpb24sICJc
biIpOworICAgIENSQVNIKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksOCArMTY5LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGNvbnN0YW50UmVnaXN0ZXI7CiAgICAgfQogICAgIAorICAgIHZvaWQgYXNzZXJ0
SXNXYXRjaGVkKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKKyAgICAKICAgICB2b2lkIGNvbnZlcnRU
b0NvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFsdWUpCiAgICAgeworICAgICAgICBpZiAo
dmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBhc3NlcnRJc1dhdGNoZWQodmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpKTsKICAgICAgICAgaWYgKHZhbHVlLmlzT2JqZWN0KCkpCiAgICAgICAg
ICAgICBub2RlLT5jb252ZXJ0VG9XZWFrQ29uc3RhbnQodmFsdWUuYXNDZWxsKCkpOwogICAgICAg
ICBlbHNlCkBAIC0zOTAsMTIgKzM5NCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICZtX3N0
cnVjdHVyZVNldC5sYXN0KCk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKiBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShjb25zdCBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSYgc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpCi0gICAgewotICAgICAgICBtX3N0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhLmFwcGVuZChzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSk7Ci0gICAgICAg
IHJldHVybiAmbV9zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YS5sYXN0KCk7Ci0gICAgfQotICAgIAog
ICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3RGb3IoQ29kZU9yaWdpbiBjb2RlT3JpZ2lu
KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3IoY29k
ZU9yaWdpbik7CkBAIC00NDYsOCArNDQ0LDcgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgbWFz
cXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQoY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbikKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3BsYW4ud2F0Y2hwb2ludHMu
aXNTdGlsbFZhbGlkKAotICAgICAgICAgICAgZ2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5t
YXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgpKTsKKyAgICAgICAgcmV0dXJuIGdsb2Jh
bE9iamVjdEZvcihjb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnQo
KS0+aXNTdGlsbFZhbGlkKCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzR2xvYmFsRXhpdFNp
dGUoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQpCkBAIC04
MDcsNiArODA0LDEwIEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRDaGls
ZHJlbihTbG90VmlzaXRvciYpIG92ZXJyaWRlOwogICAgIAorICAgIE5PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggdm9pZCBoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAorICAgICAgICBOb2RlKiBub2RlLCBj
b25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSwgY29uc3QgY2hhciogZnVuY3Rpb24sCisgICAgICAg
IGNvbnN0IGNoYXIqIGFzc2VydGlvbik7CisgICAgCiAgICAgVk0mIG1fdm07CiAgICAgUGxhbiYg
bV9wbGFuOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkBAIC04MjMsNyArODI0LDcgQEAg
cHVibGljOgogICAgIFNlZ21lbnRlZFZlY3RvcjxWYXJpYWJsZUFjY2Vzc0RhdGEsIDE2PiBtX3Zh
cmlhYmxlQWNjZXNzRGF0YTsKICAgICBTZWdtZW50ZWRWZWN0b3I8QXJndW1lbnRQb3NpdGlvbiwg
OD4gbV9hcmd1bWVudFBvc2l0aW9uczsKICAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlU2V0
LCAxNj4gbV9zdHJ1Y3R1cmVTZXQ7Ci0gICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhLCA4PiBtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhOworICAgIEJhZzxUcmFuc2l0
aW9uPiBtX3RyYW5zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxOZXdBcnJheUJ1ZmZlckRh
dGEsIDQ+IG1fbmV3QXJyYXlCdWZmZXJEYXRhOwogICAgIEJhZzxCcmFuY2hEYXRhPiBtX2JyYW5j
aERhdGE7CiAgICAgQmFnPFN3aXRjaERhdGE+IG1fc3dpdGNoRGF0YTsKQEAgLTkzMyw2ICs5MzQs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSkKIAor
I2RlZmluZSBERkdfQVNTRVJUKGdyYXBoLCBub2RlLCBhc3NlcnRpb24pIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoISEoYXNzZXJ0aW9uKSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgKG5vZGUpLCBfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sICNhc3NlcnRpb24pOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisK
KyNkZWZpbmUgREZHX0NSQVNIKGdyYXBoLCBub2RlLCByZWFzb24pICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAoZ3JhcGgpLmhhbmRsZUFzc2VydGlvbkZhaWx1cmUoICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKG5vZGUpLCBfX0ZJ
TEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sIChyZWFzb24pKTsKKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHAJKHJldmlzaW9u
IDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNp
c1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTMgKzY4LDExIEBAIHB1YmxpYzoKICAg
ICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAgICAgCiAgICAgICAgIGlmICghbV9ncmFw
aC5ibG9jaygwKS0+c3NhLT5saXZlQXRIZWFkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgc3Rh
cnRDcmFzaGluZygpOwotICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAiQmFk
IGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogbGl2ZSBhdCByb290IGlzIG5vdCBlbXB0eTogIiwK
LSAgICAgICAgICAgICAgICBub2RlTGlzdER1bXAobV9ncmFwaC5ibG9jaygwKS0+c3NhLT5saXZl
QXRIZWFkKSwgIlxuIik7Ci0gICAgICAgICAgICBkYXRhTG9nKCJJUiBhdCB0aW1lIG9mIGVycm9y
OlxuIik7Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKLSAgICAgICAgICAgIENSQVNIKCk7
CisgICAgICAgICAgICBERkdfQ1JBU0goCisgICAgICAgICAgICAgICAgbV9ncmFwaCwgbnVsbHB0
ciwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICJCYWQg
bGl2ZW5lc3MgYW5hbHlzaXMgcmVzdWx0OiBsaXZlIGF0IHJvb3QgaXMgbm90IGVtcHR5OiAiLAor
ICAgICAgICAgICAgICAgICAgICBub2RlTGlzdER1bXAobV9ncmFwaC5ibG9jaygwKS0+c3NhLT5s
aXZlQXRIZWFkKSkuZGF0YSgpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTY5
NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJERkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRl
ICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKKyNpbmNsdWRlICJE
RkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNlS2luZC5oIgogI2luY2x1ZGUgIkRGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIgogI2luY2x1ZGUgIkdldEJ5SWRWYXJpYW50LmgiCkBAIC02Nywx
OSArNjgsNiBAQCBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNldERhdGEgewogICAgIGJvb2wgcmVhbGxv
Y2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiB9OwogCi1zdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEgewotICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmU7Ci0gICAgCi0gICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSB7IH0KLSAg
ICAKLSAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKLSAgICAgICAgOiBwcmV2aW91c1N0cnVjdHVy
ZShwcmV2aW91c1N0cnVjdHVyZSkKLSAgICAgICAgLCBuZXdTdHJ1Y3R1cmUobmV3U3RydWN0dXJl
KQotICAgIHsKLSAgICB9Ci19OwotCiBzdHJ1Y3QgTmV3QXJyYXlCdWZmZXJEYXRhIHsKICAgICB1
bnNpZ25lZCBzdGFydENvbnN0YW50OwogICAgIHVuc2lnbmVkIG51bUNvbnN0YW50czsKQEAgLTQ4
NSwyMSArNDczLDYgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjaGlsZHJlbi5yZXNldCgpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50KFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fb3AgPT0g
Q2hlY2tTdHJ1Y3R1cmUgfHwgbV9vcCA9PSBBcnJheWlmeVRvU3RydWN0dXJlKTsKLSAgICAgICAg
QVNTRVJUKCFjaGlsZDIoKSk7Ci0gICAgICAgIEFTU0VSVCghY2hpbGQzKCkpOwotICAgICAgICBB
U1NFUlQoc3RydWN0dXJlKTsKLSAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0
cl90PihzdHJ1Y3R1cmUpOwotICAgICAgICBtX29wID0gU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQoKQotICAgIHsKLSAgICAgICAgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQoc3RydWN0dXJlU2V0KCkub25seVN0cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAg
CiAgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0
YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewogICAgICAgICBBU1NFUlQobV9vcCA9PSBHZXRC
eUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoIHx8IG1fb3AgPT0gTXVsdGlHZXRCeU9mZnNldCk7
CkBAIC0xMDkxLDcgKzEwNjQsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihtX29wSW5mbyk7CiAgICAgfQogCi0gICAgYm9vbCBoYXNTdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpCisgICAgYm9vbCBoYXNUcmFuc2l0aW9uKCkKICAgICB7CiAg
ICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKQEAgLTEx
MDQsMTAgKzEwNzcsMTAgQEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpCisg
ICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbigpCiAgICAgewotICAgICAgICBBU1NFUlQoaGFzU3Ry
dWN0dXJlVHJhbnNpdGlvbkRhdGEoKSk7Ci0gICAgICAgIHJldHVybiAqcmVpbnRlcnByZXRfY2Fz
dDxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSo+KG1fb3BJbmZvKTsKKyAgICAgICAgQVNTRVJUKGhh
c1RyYW5zaXRpb24oKSk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFRyYW5zaXRp
b24qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3RydWN0dXJlU2V0KCkK
QEAgLTExMjksNyArMTEwMiw2IEBAIHN0cnVjdCBOb2RlIHsKICAgICBib29sIGhhc1N0cnVjdHVy
ZSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKLSAgICAgICAgY2FzZSBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJl
OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAx
Njk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE1MywxOCArMTUzLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xv
YmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oQ2hlY2tFeGVjdXRhYmxlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
LyogVHJhbnNpdGlvbiB3YXRjaHBvaW50cyBhcmUgYSBjb250cmFjdCBiZXR3ZWVuIHRoZSBwYXJ0
eSBzZXR0aW5nIHRoZSB3YXRjaHBvaW50ICovXAotICAgIC8qIGFuZCB0aGUgcnVudGltZSBzeXN0
ZW0sIHdoZXJlIHRoZSBwYXJ0eSBwcm9taXNlcyB0aGF0IHRoZSBjaGlsZCBvYmplY3Qgb25jZSBo
YWQgKi9cCi0gICAgLyogdGhlIHN0cnVjdHVyZSBiZWluZyB3YXRjaGVkLCBhbmQgdGhlIHJ1bnRp
bWUgc3lzdGVtIGluIHR1cm4gcHJvbWlzZXMgdGhhdCB0aGUgKi9cCi0gICAgLyogd2F0Y2hwb2lu
dCB3aWxsIGJlIHR1cm5lZCBpbnRvIGFuIE9TUiBleGl0IGlmIGFueSBvYmplY3Qgd2l0aCB0aGF0
IHN0cnVjdHVyZSAqL1wKLSAgICAvKiBldmVyIHRyYW5zaXRpb25zIHRvIGEgZGlmZmVyZW50IHN0
cnVjdHVyZS4gSGVuY2UsIHRoZSBjaGlsZCBvYmplY3QgbXVzdCBoYXZlICovXAotICAgIC8qIHBy
ZXZpb3VzbHkgaGFkIGEgQ2hlY2tTdHJ1Y3R1cmUgZXhlY3V0ZWQgb24gaXQgb3Igd2UncmUgZGVh
bGluZyB3aXRoIGFuIG9iamVjdCAqL1wKLSAgICAvKiBjb25zdGFudCAoV2Vha0pTQ29uc3RhbnQp
IGFuZCB0aGUgb2JqZWN0IHdhcyBrbm93biB0byBoYXZlIHRoYXQgc3RydWN0dXJlIGF0ICovXAot
ICAgIC8qIGNvbXBpbGUtdGltZS4gSW4gdGhlIGxhdHRlciBjYXNlIHRoaXMgbWVhbnMgdGhhdCBu
byBzdHJ1Y3R1cmUgY2hlY2tzIGhhdmUgdG8gYmUgKi9cCi0gICAgLyogcGVyZm9ybWVkIGZvciB0
aGlzIG9iamVjdCBieSBKSVR0ZWQgY29kZS4gSW4gdGhlIGZvcm1lciBjYXNlIHRoaXMgbWVhbnMg
dGhhdCovXAotICAgIC8qIHRoZSBvYmplY3QncyBzdHJ1Y3R1cmUgZG9lcyBub3QgbmVlZCB0byBi
ZSByZWNoZWNrZWQgZHVlIHRvIHNpZGUtZWZmZWN0aW5nICovXAotICAgIC8qIChjbG9iYmVyaW5n
KSBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFB1dFN0cnVjdHVyZSwgTm9kZU11c3RH
ZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b21QdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJh
dGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNybyhBbGxvY2F0ZVByb3BlcnR5U3RvcmFn
ZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdl
KSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE2
OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlICJERkdVbmlmaWNhdGlvblBoYXNlLmgi
CiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNsdWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGlu
Z1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIgogI2lu
Y2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCkBAIC0yMzMs
NiArMjM0LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAg
IHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1QcmVkaWN0aW9u
UHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4dXAoZGZnKTsKKyAgICBwZXJmb3JtV2F0
Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoZGZnKTsKICAgICBwZXJmb3JtSW52YWxpZGF0aW9uUG9p
bnRJbmplY3Rpb24oZGZnKTsKICAgICBwZXJmb3JtVHlwZUNoZWNrSG9pc3RpbmcoZGZnKTsKICAg
ICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTc2LDcgKzU3Niw2IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
U2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgIGNhc2Ug
Q2hlY2tFeGVjdXRhYmxlOgotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAgICAgIGNhc2UgUHV0U3RydWN0
dXJlOgogICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0aW9uOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE2OTUxNSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzUsMjIgKzI3NSwyNiBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0CiAgICAgICAgIHJldHVybiBub2RlLT5hcnJheU1vZGUoKS5tb2RlRm9yUHV0KCku
YWxyZWFkeUNoZWNrZWQoCiAgICAgICAgICAgICBncmFwaCwgbm9kZSwgc3RhdGUuZm9yTm9kZShn
cmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkpOwogCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZigKLSAgICAgICAgICAgIFN0
cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICAKICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBBbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0g
ICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5pc1N1YnNldE9mKAotICAgICAgICAgICAgU3RydWN0dXJlU2V0KG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
CisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cykp
OwogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OgogICAgIGNhc2UgR2V0R2V0dGVyU2V0
dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBQdXRCeU9mZnNldDoKLSAgICAgICAgcmV0dXJuIHN0YXRl
LmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzVmFsaWRP
ZmZzZXQoCi0gICAgICAgICAgICBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3Jh
Z2VBY2Nlc3NEYXRhSW5kZXgoKV0ub2Zmc2V0KTsKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OiB7Cisg
ICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZhbHVlID0gc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CisgICAgICAgIGlmICh2YWx1ZS5pc1RvcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBn
cmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0u
b2Zmc2V0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQogICAgICAgICAKICAgICBjYXNlIExhc3ROb2RlVHlwZToKICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTY5NTE1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzY5NywyOSArMzY5Nyw2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKLSAg
ICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgIC8vIFRoZXJl
IGlzIGEgZmFzY2luYXRpbmcgcXVlc3Rpb24gaGVyZSBvZiB3aGF0IHRvIGRvIGFib3V0IGFycmF5
IHByb2ZpbGluZy4KLSAgICAgICAgLy8gV2UgKmNvdWxkKiB0cnkgdG8gdGVsbCB0aGUgT1NSIGV4
aXQgYWJvdXQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIGFjY2VzcyBpcy4KLSAgICAgICAgLy8gVGhl
IERGRyB3aWxsIGhhdmUga2VwdCBpdCBhbGl2ZSwgdGhvdWdoIGl0IG1heSBub3QgYmUgaW4gYSBy
ZWdpc3RlciwgYW5kCi0gICAgICAgIC8vIHdlIHNob3VsZG4ndCByZWFsbHkgbG9hZCBpdCBzaW5j
ZSB0aGF0IGNvdWxkIGJlIGEgd2FzdGUuIEZvciBub3cgdGhvdWdoLAotICAgICAgICAvLyB3ZSds
bCBqdXN0IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3aGVuIGEgd2F0Y2hwb2ludCBmaXJlcyB0aGVu
IHRoYXQncwotICAgICAgICAvLyBxdWl0ZSBhIGhpbnQgYWxyZWFkeS4KLSAgICAgICAgCi0gICAg
ICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICAK
LSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT0sgPSBt
X2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhv
cDEuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIFRydXN0ZWRJbW1QdHIobm9k
ZS0+c3RydWN0dXJlKCkpKTsKLSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBp
c09LLmxpbmsoJm1faml0KTsKLSNlbHNlCi0gICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hp
bGQxKCkpOwotI2VuZGlmCi0KLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CiAgICAg
ICAgIEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAg
bV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlv
bihtX2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzY3LDMyICszNzY3LDYgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAotICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsK
LSAgICAgICAgLy8gVGhlcmUgaXMgYSBmYXNjaW5hdGluZyBxdWVzdGlvbiBoZXJlIG9mIHdoYXQg
dG8gZG8gYWJvdXQgYXJyYXkgcHJvZmlsaW5nLgotICAgICAgICAvLyBXZSAqY291bGQqIHRyeSB0
byB0ZWxsIHRoZSBPU1IgZXhpdCBhYm91dCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgYWNjZXNzIGlz
LgotICAgICAgICAvLyBUaGUgREZHIHdpbGwgaGF2ZSBrZXB0IGl0IGFsaXZlLCB0aG91Z2ggaXQg
bWF5IG5vdCBiZSBpbiBhIHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHJl
YWxseSBsb2FkIGl0IHNpbmNlIHRoYXQgY291bGQgYmUgYSB3YXN0ZS4gRm9yIG5vdyB0aG91Z2gs
Ci0gICAgICAgIC8vIHdlJ2xsIGp1c3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdoZW4gYSB3YXRj
aHBvaW50IGZpcmVzIHRoZW4gdGhhdCdzCi0gICAgICAgIC8vIHF1aXRlIGEgaGludCBhbHJlYWR5
LgotCi0gICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+c3RydWN0dXJlKCkpOwot
Ci0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc09LID0g
bV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkVxdWFs
LCAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRyZXNzKG9wMS5ncHIoKSwgSlNDZWxsOjpz
dHJ1Y3R1cmVJRE9mZnNldCgpKSwgCi0gICAgICAgICAgICBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0g
ICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSAgICAgICAgaXNPSy5saW5rKCZtX2ppdCk7Ci0j
ZWxzZQotICAgICAgICBzcGVjdWxhdGVDZWxsKG5vZGUtPmNoaWxkMSgpKTsKLSNlbmRpZgotICAg
ICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAg
ICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CiAgICAgICAgIEFTU0VSVChp
c0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkpKTsKICAgICAgICAgbV9qaXQuaml0Q29k
ZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2ppdC5ncmFw
aCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwpAQCAtMzgwMSw4ICszNzc1LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKLSAgICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1
Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJl
OwotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkubmV3U3RydWN0dXJlOworICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVy
ZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CisgICAgICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwogCiAgICAgICAgIG1faml0Lmpp
dENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9qaXQu
Z3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygpLCBub2RlKTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9u
IDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mjk4LDcgKzQyOTgsNyBAQCBib29sIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
bGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2RlKQogewotICAgIGlmIChub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJbmRleGlu
Z0hlYWRlcigpKSB7CisgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMtPmNvdWxk
SGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFz
ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CkBAIC00MzE4LDggKzQzMTgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwog
ICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gxLmdwcigpOwogICAgICAgICAKLSAgICBB
U1NFUlQoIW5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEFTU0VSVChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNp
dHkgPT0gbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9m
TGluZUNhcGFjaXR5KCkpOworICAgIEFTU0VSVCghbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91
cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBh
Y2l0eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQtPm91dE9mTGluZUNhcGFjaXR5KCkpOwog
ICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoID0KICAgICAgICAgZW1pdEFsbG9j
YXRlQmFzaWNTdG9yYWdlKApAQCAtNDMzNywxMSArNDMzNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7Ci0gICAgc2l6ZV90IG9sZFNp
emUgPSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5v
dXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpOworICAgIHNpemVfdCBvbGRTaXpl
ID0gbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNp
emVvZihKU1ZhbHVlKTsKICAgICBzaXplX3QgbmV3U2l6ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVH
cm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+c3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNW
YWx1ZSkpOworICAgIEFTU0VSVChuZXdTaXplID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKSk7CiAKLSAgICBpZiAobm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5k
ZXhpbmdIZWFkZXIoKSkgeworICAgIGlmIChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5j
b3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTE1LDcg
KzMxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplCiAgICAg
U3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICBtX2ppdC5nbG9iYWxP
YmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0U3Ry
dWN0dXJlKCk7CiAgICAgCi0gICAgaWYgKCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0
dXJlKSkpIHsKKyAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1
YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkgewogICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgTm90U3RyaW5nT2JqZWN0LCBKU1ZhbHVlUmVn
cygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIENvbW1lbnQgb3V0IHRoZSBlbXB0eSBTQU1QTEUo
KSBkZWZpbml0aW9uLCBhbmQgdW5jb21tZW50IHRoZSBvbmUgdGhhdCB1c2VzIFNhbXBsaW5nUmVn
aW9uLCBpZgorLy8geW91IHdhbnQgZXh0cmVtZWx5IGZpbmUtZ3JhaW5lZCBwcm9maWxpbmcgaW4g
dGhpcyBjb2RlLgorI2RlZmluZSBTQU1QTEUobmFtZSkgCisvLyNkZWZpbmUgU0FNUExFKG5hbWUp
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKG5hbWUpCisKKyNpZiAhQVNTRVJUX0RJU0FC
TEVECit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZChHcmFwaCYg
Z3JhcGgpIGNvbnN0Cit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFzc2Vy
dElzV2F0Y2hlZCIpOworCisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCisgICAgICAgIGdyYXBoLmFzc2Vy
dElzV2F0Y2hlZChhdChpKSk7Cit9CisjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAorCit2b2lk
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIoKQoreworICAgIFNBTVBMRSgiU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSBjbG9iYmVyIik7CisKKyAgICAvLyBUaGUgcHJlbWlzZSBvZiB0aGlz
IGFwcHJvYWNoIHRvIGNsb2JiZXJpbmcgaXMgdGhhdCBhbnl0aW1lIHdlIGludHJvZHVjZQorICAg
IC8vIGEgd2F0Y2hhYmxlIHN0cnVjdHVyZSBpbnRvIGFuIGFic3RyYWN0IHZhbHVlLCB3ZSB3YXRj
aHBvaW50IGl0LiBZb3UgY2FuIGFzc2VydAorICAgIC8vIHRoYXQgdGhpcyBob2xkcyBieSBjYWxs
aW5nIGFzc2VydElzV2F0Y2hlZCgpLgorICAgICAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0Q2xvYmJlcmVkKHRydWUpOworICAgICAgICAKKyAgICBpZiAo
bV9zZXQuaXNUaGluKCkpIHsKKyAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVTdHJ1Y3R1cmUoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFtX3NldC5zaW5nbGVTdHJ1Y3R1cmUo
KS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAgICAgIG1ha2VUb3BXaGVuVGhpbigpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAgICBTdHJ1Y3R1cmVTZXQ6Ok91dE9mTGlu
ZUxpc3QqIGxpc3QgPSBtX3NldC5zdHJ1Y3R1cmVMaXN0KCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbGlzdC0+bV9sZW5ndGg7IGktLTspIHsKKyAgICAgICAgaWYgKCFsaXN0LT5saXN0KClbaV0t
PmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjpvYnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8pCit7
CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG9ic2VydmVUcmFuc2l0aW9uIik7
CisKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghbV9z
ZXQuY29udGFpbnMoZnJvbSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoZnJvbS0+
ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBzZXRDbG9iYmVyZWQodHJ1ZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX3NldC5hZGQodG8pKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQor
ICAgICAgICBtYWtlVG9wKCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b2Jz
ZXJ2ZVRyYW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImIHZlY3RvcikKK3sKKyAgICBT
QU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgb2JzZXJ2ZVRyYW5zaXRpb25zIik7CisKKyAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFN0cnVjdHVyZVNldCBu
ZXdTdHJ1Y3R1cmVzOworICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvci5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgaWYgKCFtX3NldC5jb250YWlucyh2ZWN0b3JbaV0ucHJldmlvdXMpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAodmVjdG9yW2ldLnByZXZp
b3VzLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICAgICAgc2V0Q2xvYmJlcmVkKHRydWUpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdTdHJ1Y3R1cmVzLmFkZCh2ZWN0b3JbaV0ubmV4
dCk7CisgICAgfQorICAgIAorICAgIGlmICghbV9zZXQubWVyZ2UobmV3U3RydWN0dXJlcykpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNt
TGltaXQpCisgICAgICAgIG1ha2VUb3AoKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlIGFkZCIpOworCisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZChzdHJ1Y3R1cmUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUoKSA+IHBvbHltb3JwaGlzbUxpbWl0
KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
K3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbWVyZ2Ugc2V0Iik7CisKKyAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBt
ZXJnZU5vdFRvcChvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVy
Z2VTbG93KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQoreworICAgIFNBTVBM
RSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtZXJnZSB2YWx1ZSBzbG93Iik7CisKKyAgICAvLyBJ
dCBpc24ndCBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQgdGhlIGNvZGUgYmVsb3cgaXMgZG9pbmcg
dGhlIHJpZ2h0IHRoaW5nLCBzbyBsZXQncyBnbworICAgIC8vIHRocm91Z2ggaXQuCisgICAgLy8K
KyAgICAvLyBUaGlzIG5vdCBjbG9iYmVyZWQsIG90aGVyIG5vdCBjbG9iYmVyZWQ6IENsZWFybHks
IHdlIGRvbid0IHdhbnQgdG8gbWFrZSBhbnl0aGluZyBjbG9iYmVyZWQKKyAgICAvLyBzaW5jZSB3
ZSBqdXN0IGhhdmUgdHdvIHNldHMgYW5kIHdlIGFyZSBtZXJnaW5nIHRoZW0uIG1lcmdlTm90VG9w
KCkgY2FuIGhhbmRsZSB0aGlzIGp1c3QKKyAgICAvLyBmaW5lLgorICAgIC8vCisgICAgLy8gVGhp
cyBjbG9iYmVyZWQsIG90aGVyIGNsb2JiZXJlZDogQ2xvYmJlcmVkIG1lYW5zIHRoYXQgd2UgaGF2
ZSBhIHNldCBvZiB0aGluZ3MsIHBsdXMgd2UKKyAgICAvLyB0ZW1wb3JhcmlseSBoYXZlIHRoZSBz
ZXQgb2YgYWxsIHRoaW5ncyBidXQgdGhlIGxhdHRlciB3aWxsIGdvIGF3YXkgb25jZSB3ZSBoaXQg
dGhlIG5leHQKKyAgICAvLyBpbnZhbGlkYXRpb24gcG9pbnQuIFRoaXMgYWxsb3dzIHVzIHRvIG1l
cmdlIHR3byBjbG9iYmVyZWQgc2V0cyB0aGUgbmF0dXJhbCB3YXkuIEZvciBub3cKKyAgICAvLyB0
aGUgc2V0IHdpbGwgc3RpbGwgYmUgVE9QIChhbmQgc28gd2Uga2VlcCB0aGUgY2xvYmJlcmVkIGJp
dCBzZXQpLCBidXQgd2Uga25vdyB0aGF0IGFmdGVyCisgICAgLy8gaW52YWxpZGF0aW9uLCB3ZSB3
aWxsIGhhdmUgdGhlIHVuaW9uIG9mIHRoZSB0aGlzIGFuZCBvdGhlci4KKyAgICAvLworICAgIC8v
IFRoaXMgY2xvYmJlcmVkLCBvdGhlciBub3QgY2xvYmJlcmVkOiBJdCdzIHNhZmUgdG8gbWVyZ2Ug
aW4gb3RoZXIgZm9yIGJvdGggYmVmb3JlIGFuZCBhZnRlcgorICAgIC8vIGludmFsaWRhdGlvbiwg
c28gbG9uZyBhcyB3ZSBsZWF2ZSB0aGUgY2xvYmJlcmVkIGJpdCBzZXQuIEJlZm9yZSBpbnZhbGlk
YXRpb24gdGhpcyBoYXMgbm8KKyAgICAvLyBlZmZlY3Qgc2luY2UgdGhlIHNldCB3aWxsIHN0aWxs
IGFwcGVhciB0byBoYXZlIGFsbCB0aGluZ3MgaW4gaXQuIFRoZSB3YXkgdG8gdGhpbmsgYWJvdXQK
KyAgICAvLyB3aGF0IGludmFsaWRhdGlvbiB3b3VsZCBkbyBpcyBpbWFnaW5lIGlmIHdlIGhhZCBh
IHNldCBBIHRoYXQgd2FzIGNsb2JiZXJlZCBhbmQgYSBzZXQgQgorICAgIC8vIHRoYXQgd2Fzbid0
IGFuZCB3ZSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzLiBOb3RlIHRoYXQgd2Ug
ZXhwZWN0IEEgdG8gYmUgdGhlCisgICAgLy8gc2FtZSBhdCB0aGUgZW5kIGluIGJvdGggY2FzZXM6
CisgICAgLy8KKyAgICAvLyAgICAgICAgICAgIEEubWVyZ2UoQikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEludmFsaWRhdGlvblBvaW50CisgICAgLy8gICAgICAgICAgICBJbnZhbGlkYXRp
b25Qb2ludCAgICAgICAgICAgICAgICAgICAgICBBLm1lcmdlKEIpCisgICAgLy8KKyAgICAvLyBU
aGUgZmFjdCB0aGF0IHdlIGV4cGVjdCBBIHRvIGJlIHRoZSBzYW1lIGluIGJvdGggY2FzZXMgbWVh
bnMgdGhhdCB3ZSB3YW50IHRvIG1lcmdlIG90aGVyCisgICAgLy8gaW50byB0aGlzIGJ1dCBrZWVw
IHRoZSBjbG9iYmVyZWQgYml0LgorICAgIC8vCisgICAgLy8gVGhpcyBub3QgY2xvYmJlcmVkLCBv
dGhlciBjbG9iYmVyZWQ6IFRoaXMgaXMganVzdCB0aGUgY29udmVyc2Ugb2YgdGhlIHByZXZpb3Vz
IGNhc2UuIFdlCisgICAgLy8gd2FudCB0byBtZXJnZSBvdGhlciBpbnRvIHRoaXMgYW5kIHNldCB0
aGUgY2xvYmJlcmVkIGJpdC4KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIWlzQ2xvYmJlcmVkKCkgJiYgb3RoZXIuaXNDbG9iYmVyZWQoKSkgeworICAgICAg
ICBzZXRDbG9iYmVyZWQodHJ1ZSk7CisgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBjaGFuZ2VkIHw9IG1lcmdlTm90VG9wKG90aGVyLm1fc2V0KTsKKyAgICAKKyAgICBy
ZXR1cm4gY2hhbmdlZDsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZU5v
dFRvcChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQoreworICAgIFNBTVBMRSgiU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSBtZXJnZSBub3QgdG9wIik7CisKKyAgICBpZiAoIW1fc2V0Lm1lcmdlKG90
aGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChtX3NldC5zaXplKCkg
PiBwb2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAgbWFrZVRvcCgpOworICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBT
dHJ1Y3R1cmVTZXQmIG90aGVyKQoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSBmaWx0ZXIgc2V0Iik7CisKKyAgICBpZiAoaXNUb3AoKSkgeworICAgICAgICBtX3NldCA9IG90
aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpc0Nsb2JiZXJlZCgp
KSB7CisgICAgICAgIC8vIFdlIGhhdmUgdHdvIGNob2ljZXMgaGVyZToKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gRG8gbm90aGluZzogSXQncyBsZWdhbCB0byBrZWVwIG91ciBzZXQgaW50YWN0LCB3
aGljaCB3b3VsZCBlc3NlbnRpYWxseSBtZWFuIHRoYXQgZm9yCisgICAgICAgIC8vIG5vdywgb3Vy
IHNldCB3b3VsZCBiZWhhdmUgbGlrZSBUT1AgYnV0IGFmdGVyIHRoZSBuZXh0IGludmFsaWRhdGlv
biBwb2ludCBpdCB3b2xkIGJlCisgICAgICAgIC8vIGEgZmluaXRlIHNldCBhZ2Fpbi4gVGhpcyBt
YXkgYmUgYSBnb29kIGNob2ljZSBpZiAnb3RoZXInIGlzIG11Y2ggYmlnZ2VyIHRoYW4gb3VyCisg
ICAgICAgIC8vIG1fc2V0LgorICAgICAgICAvLworICAgICAgICAvLyBSZXBsYWNlIG1fc2V0IHdp
dGggb3RoZXIgYW5kIGNsZWFyIHRoZSBjbG9iYmVyIGJpdDogVGhpcyBpcyBhbHNvIGxlZ2FsLCBh
bmQgbWVhbnMgdGhhdAorICAgICAgICAvLyB3ZSdyZSBubyBsb25nZXIgY2xvYmJlcmVkLiBUaGlz
IGlzIHVzdWFsbHkgYmV0dGVyIGJlY2F1c2UgaXQgaW1tZWRpYXRlbHkgZ2l2ZXMgdXMgYQorICAg
ICAgICAvLyBzbWFsbGVyIHNldC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gVGhpcyBzY2VuYXJp
byBzaG91bGQgY29tZSB1cCByYXJlbHkuIFdlIHVzdWFsbHkgZG9uJ3QgZG8gYW55dGhpbmcgdG8g
YW4gYWJzdHJhY3QgdmFsdWUKKyAgICAgICAgLy8gYWZ0ZXIgaXQgaXMgY2xvYmJlcmVkLiBCdXQg
d2UgYXBwbHkgc29tZSBoZXVyaXN0aWNzLgorICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyLnNp
emUoKSA+IG1fc2V0LnNpemUoKSArIGNsb2JiZXJlZFN1cHJlbWFjeVRocmVzaG9sZCkKKyAgICAg
ICAgICAgIHJldHVybjsgLy8gS2VlcCB0aGUgY2xvYmJlcmVkIHNldC4KKyAgICAgICAgCisgICAg
ICAgIG1fc2V0ID0gb3RoZXI7CisgICAgICAgIHNldENsb2JiZXJlZChmYWxzZSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9zZXQuZmlsdGVyKG90aGVyKTsKK30KKwordm9p
ZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpCit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGZpbHRl
ciB2YWx1ZSIpOworCisgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBpZiAob3RoZXIuaXNDbG9iYmVyZWQoKSkgeworICAgICAgICBpZiAoaXNUb3AoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICghaXNDbG9iYmVyZWQo
KSkgeworICAgICAgICAgICAgLy8gU2VlIGp1c3RpZmljYXRpb24gaW4gZmlsdGVyKGNvbnN0IFN0
cnVjdHVyZVNldCYpLCBhYm92ZS4gQW4gdW5jbG9iYmVyZWQgc2V0IGlzCisgICAgICAgICAgICAv
LyBhbG1vc3QgYWx3YXlzIGJldHRlci4KKyAgICAgICAgICAgIGlmIChtX3NldC5zaXplKCkgPiBv
dGhlci5tX3NldC5zaXplKCkgKyBjbG9iYmVyZWRTdXByZW1hY3lUaHJlc2hvbGQpCisgICAgICAg
ICAgICAgICAgKnRoaXMgPSBvdGhlcjsgLy8gS2VlcCB0aGUgY2xvYmJlcmVkIHNldC4KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1fc2V0LmZpbHRlcihvdGhlci5t
X3NldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZmlsdGVyKG90aGVyLm1f
c2V0KTsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3MgQ29uZm9ybXNUb1R5cGUgeworcHVibGlj
OgorICAgIENvbmZvcm1zVG9UeXBlKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgICAgIDogbV90
eXBlKHR5cGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICByZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9t
U3RydWN0dXJlKHN0cnVjdHVyZSkgJiBtX3R5cGUpOworICAgIH0KK3ByaXZhdGU6CisgICAgU3Bl
Y3VsYXRlZFR5cGUgbV90eXBlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Zv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdyhTcGVjdWxhdGVkVHlwZSB0eXBl
KQoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBmaWx0ZXIgdHlwZSBzbG93
Iik7CisKKyAgICBpZiAoISh0eXBlICYgU3BlY0NlbGwpKSB7CisgICAgICAgIGNsZWFyKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAK
KyAgICBDb25mb3Jtc1RvVHlwZSBjb25mb3Jtc1RvVHlwZSh0eXBlKTsKKyAgICBtX3NldC5nZW5l
cmljRmlsdGVyKGNvbmZvcm1zVG9UeXBlKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjpjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKK3sKKyAgICBTQU1QTEUo
IlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgY29udGFpbnMiKTsKKworICAgIGlmIChpc1RvcCgpIHx8
IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBt
X3NldC5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKK3sKKyAgICBT
QU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgaXNTdWJzZXRPZiBzZXQiKTsKKworICAgIGlm
IChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBv
dGhlcikgY29uc3QKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgaXNTdWJz
ZXRPZiB2YWx1ZSIpOworCisgICAgaWYgKGlzVG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgaWYgKGlzQ2xvYmJlcmVkKCkgPT0gb3RoZXIuaXNDbG9iYmVyZWQoKSkKKyAgICAgICAg
cmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIubV9zZXQpOworICAgIAorICAgIC8vIEhlcmUg
aXQgZ2V0cyB0cmlja3kuIElmIGluIGRvdWJ0LCByZXR1cm4gZmFsc2UhCisgICAgCisgICAgaWYg
KGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsgLy8gQSBjbG9iYmVyZWQgc2V0
IGlzIG5ldmVyIGEgc3Vic2V0IG9mIGFuIHVuY2xvYmJlcmVkIHNldC4KKyAgICAKKyAgICAvLyBB
biB1bmNsb2JiZXJlZCBzZXQgaXMgY3VycmVudGx5IGEgc3Vic2V0IG9mIGEgY2xvYmJlcmVkIHNl
dCwgYnV0IGl0IG1heSBub3QgYmUgc28gYWZ0ZXIKKyAgICAvLyBpbnZhbGlkYXRpb24uCisgICAg
cmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIubV9zZXQpOworfQorCitib29sIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBj
b25zdAoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBpc1N1cGVyc2V0T2Yg
c2V0Iik7CisKKyAgICBpZiAoaXNUb3AoKSB8fCBpc0Nsb2JiZXJlZCgpKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQuaXNTdXBlcnNldE9mKG90aGVyKTsKK30K
KworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBv
dmVybGFwcyBzZXQiKTsKKworICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5vdmVybGFwcyhvdGhlcik7
Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3ZlcmxhcHMoY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlIG92ZXJsYXBzIHZhbHVlIik7CisKKyAgICBpZiAob3RoZXIuaXNUb3AoKSB8
fCBvdGhlci5pc0Nsb2JiZXJlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICBy
ZXR1cm4gb3ZlcmxhcHMob3RoZXIubV9zZXQpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmVxdWFsc1Nsb3coY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNv
bnN0Cit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGVxdWFsc1Nsb3ciKTsK
KworICAgIEFTU0VSVChtX3NldC5tX3BvaW50ZXIgIT0gb3RoZXIubV9zZXQubV9wb2ludGVyKTsK
KyAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgIEFTU0VSVCghb3RoZXIuaXNUb3AoKSk7CisgICAg
CisgICAgcmV0dXJuIG1fc2V0ID09IG90aGVyLm1fc2V0CisgICAgICAgICYmIGlzQ2xvYmJlcmVk
KCkgPT0gb3RoZXIuaXNDbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0
KSBjb25zdAoreworICAgIGlmIChpc0Nsb2JiZXJlZCgpKQorICAgICAgICBvdXQucHJpbnQoIkNs
b2JiZXJlZDoiKTsKKyAgICAKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgb3V0LnByaW50KCJU
T1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludChpbkNvbnRleHQobV9zZXQsIGNvbnRl
eHQpKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDApOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1
ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJTcGVj
dWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBAIC0zNywzMDAgKzM4LDE4
NiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUgewogcHVibGljOgotICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQotICAg
ICAgICA6IG1fc3RydWN0dXJlKDApCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpIHsgfQor
ICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAg
IDogbV9zZXQoc3RydWN0dXJlKQogICAgIHsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsK
ICAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKLSAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgICAgICA6IG1fc2V0KG90
aGVyKQogICAgIHsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsKKyAgICB9CisgICAgQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQorICAgICAgICA6IG1fc2V0KG90aGVyLm1fc2V0KQorICAgIHsKKyAgICAg
ICAgc2V0Q2xvYmJlcmVkKG90aGVyLmlzQ2xvYmJlcmVkKCkpOwogICAgIH0KICAgICAKLSAgICBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIEFMV0FZ
U19JTkxJTkUgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIG90aGVyKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChzZXQuc2l6ZSgp
KSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gc2V0WzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUoKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIG1fc2V0ID0gb3RoZXIubV9z
ZXQ7CisgICAgICAgIHNldENsb2JiZXJlZChvdGhlci5pc0Nsb2JiZXJlZCgpKTsKKyAgICAgICAg
cmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKICAgICB2b2lkIGNsZWFyKCkKICAgICB7Ci0gICAg
ICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICAgICAgc2V0
Q2xvYmJlcmVkKGZhbHNlKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBtYWtlVG9wKCkKICAgICB7
Ci0gICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUoKTsKKyAgICAgICAgbV9zZXQuZGVsZXRl
U3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAgICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRv
cFZhbHVlOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB0
b3AoKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAg
ICAgdmFsdWUubWFrZVRvcCgpOwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQorI2lmIEFT
U0VSVF9ESVNBQkxFRAorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3QgeyB9
CisjZWxzZQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CisjZW5kaWYK
ICAgICAKLSAgICB2b2lkIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVCghY29udGFpbnMoc3RydWN0dXJlKSAmJiAhaXNUb3AoKSk7Ci0gICAgICAgIGlmICht
X3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgfQorICAgIHZvaWQgY2xvYmJlcigp
OworICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCkgeyBzZXRDbG9iYmVyZWQoZmFs
c2UpOyB9CiAgICAgCi0gICAgYm9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
LSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpIHx8ICFvdGhlci5zaXplKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChvdGhlci5zaXplKCkgPiAxKSB7Ci0gICAgICAg
ICAgICBtYWtlVG9wKCk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIW1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVy
WzBdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1f
c3RydWN0dXJlID09IG90aGVyWzBdKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICBtYWtlVG9wKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICB2b2lkIG9ic2Vy
dmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0byk7CisgICAgdm9pZCBv
YnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvblZlY3RvciYpOwogICAgIAotICAgIGJv
b2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHN0YXRp
YyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCiAgICAgewotICAgICAgICBpZiAoIW90aGVy
Lm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNU
b3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9w
KCkpIHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKG1f
c3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOworICAgICAgICByZXR1
cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IHN0cnVjdHVyZSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorICAgIGJv
b2wgaXNDbGVhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wg
aXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3NldC5tX3BvaW50ZXIgPT0gdG9wVmFsdWU7IH0KKyAg
ICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xlYXIoKSAm
JiAhaXNUb3AoKTsgfQogICAgIAotICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKTsK
LSAgICB9CisgICAgLy8gQSBjbG9iYmVyZWQgYWJzdHJhY3QgdmFsdWUgbWVhbnMgdGhhdCB0aGUg
c2V0IGN1cnJlbnRseSBjb250YWlucyB0aGUgbV9zZXQgc2V0IG9mCisgICAgLy8gc3RydWN0dXJl
cyBwbHVzIFRPUCwgZXhjZXB0IHRoYXQgdGhlICJwbHVzIFRPUCIgd2lsbCBnbyBhd2F5IGF0IHRo
ZSBuZXh0IGludmFsaWRhdGlvbgorICAgIC8vIHBvaW50LiBOb3RlIHRoYXQgaXQncyB0ZW1wdGlu
ZyB0byB0aGluayBvZiB0aGlzIGFzICJ0aGUgc2V0IG9mIHN0cnVjdHVyZXMgaW4gbV9zZXQgcGx1
cworICAgIC8vIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9t
IG1fc2V0IiAtIGJ1dCB0aGlzIGlzbid0IHJlYWxseSBjb3JyZWN0LAorICAgIC8vIHNpbmNlIGlm
IHdlIGFkZCBhbiB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgYWZ0ZXIgY2xvYmJlcmluZywgdGhlIHR3
byBkZWZpbml0aW9ucyBhcmUgbm90CisgICAgLy8gZXF1aXZhbGVudC4gSWYgd2UgZG8gdGhpcywg
dGhlIG5ldyB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgd2lsbCBiZSBhZGRlZCB0byBtX3NldC4KKyAg
ICAvLyBJbnZhbGlkYXRpb24gcG9pbnRzIGRvIG5vdCB0cnkgdG8gImNsaXAiIHRoZSBzZXQgb2Yg
dHJhbnNpdGlvbi1yZWFjaGFibGUgc3RydWN0dXJlcyBmcm9tCisgICAgLy8gbV9zZXQgYnkgbG9v
a2luZyBhdCByZWFjaGFiaWxpdHkgYXMgdGhpcyB3b3VsZCBtZWFuIHRoYXQgdGhlIG5ldyBzZXQg
aXMgVE9QLiBJbnN0ZWFkIHRoZXkKKyAgICAvLyBsaXRlcmFsbHkgYXNzdW1lIHRoYXQgdGhlIHNl
dCBpcyBqdXN0IG1fc2V0IHJhdGhlciB0aGFuIG1fc2V0IHBsdXMgVE9QLgorICAgIGJvb2wgaXND
bG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX3NldC5nZXRSZXNlcnZlZEZsYWcoKTsgfQogICAg
IAotICAgIGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOwotICAgIH0KKyAg
ICBib29sIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7CiAgICAgCi0gICAgYm9vbCBpc1N1cGVy
c2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlm
IChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghb3RoZXIu
c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChvdGhlci5zaXpl
KCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gbV9zdHJ1
Y3R1cmUgPT0gb3RoZXJbMF07Ci0gICAgfQorICAgIGJvb2wgbWVyZ2UoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcik7CiAgICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIEFMV0FZU19JTkxJTkUgYm9vbCBtZXJnZShj
b25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKICAgICB7Ci0gICAgICAgIGlmIChv
dGhlci5pc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChpc1Rv
cCgpKQorICAgICAgICBpZiAob3RoZXIuaXNDbGVhcigpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIGlmIChvdGhlci5t
X3N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIu
bV9zdHJ1Y3R1cmU7CisgICAgICAgIAorICAgICAgICBpZiAoaXNUb3AoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhp
cyk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIHN3aXRjaCAo
b3RoZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAgICAgbV9z
dHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVy
WzBdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQorICAg
ICAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAgICAgICAgICAgbWFrZVRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChvdGhl
ci5jb250YWlucyhtX3N0cnVjdHVyZSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgICAgIHJldHVybiBtZXJnZVNsb3cob3RoZXIp
OwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKLSAgICB9CisgICAgdm9pZCBmaWx0
ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgZmlsdGVyKFNwZWN1
bGF0ZWRUeXBlIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKCEob3RoZXIgJiBTcGVjQ2VsbCkp
IHsKLSAgICAgICAgICAgIGNsZWFyKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChpc0NsZWFyT3JUb3AoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUp
ICYgb3RoZXIpKQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgIHZvaWQgZmlsdGVy
KFNwZWN1bGF0ZWRUeXBlIHR5cGUpCisgICAgeworICAgICAgICBpZiAoaXNOZWl0aGVyQ2xlYXJO
b3JUb3AoKSkKKyAgICAgICAgICAgIGZpbHRlclNsb3codHlwZSk7CiAgICAgfQogICAgIAotICAg
IGJvb2wgaXNDbGVhcigpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAg
ICByZXR1cm4gIW1fc3RydWN0dXJlOworICAgICAgICBpZiAobV9zZXQuaXNUaGluKCkgfHwgaXNU
b3AoKSB8fCBvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fc2V0Lm1fcG9pbnRl
ciA9PSBvdGhlci5tX3NldC5tX3BvaW50ZXI7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZXF1
YWxzU2xvdyhvdGhlcik7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJl
dHVybiBtX3N0cnVjdHVyZSA9PSB0b3BWYWx1ZSgpOyB9Ci0gICAgCi0gICAgYm9vbCBpc0NsZWFy
T3JUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA8PSB0b3BWYWx1ZSgpOyB9Ci0gICAg
Ym9vbCBpc05laXRoZXJDbGVhck5vclRvcCgpIGNvbnN0IHsgcmV0dXJuICFpc0NsZWFyT3JUb3Ao
KTsgfQotICAgIAogICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VCghaXNUb3AoKSk7Ci0gICAgICAgIHJldHVybiAhIW1fc3RydWN0dXJlOworICAgICAgICByZXR1
cm4gbV9zZXQuc2l6ZSgpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBp
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAgICAgQVNTRVJU
KG1fc3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7Ci0gICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmF0KGkpOwogICAgIH0KICAg
ICAKLSAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gYXQoaSk7Ci0gICAgfQorICAgIFN0cnVjdHVyZSogb3BlcmF0b3JbXShzaXpl
X3QgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICAKLSAgICBTdHJ1Y3R1cmUqIGxhc3Qo
KSBjb25zdAorICAgIC8vIEZJWE1FOiBFbGltaW5hdGUgYWxsIHVzZXMgb2YgdGhpcyBtZXRob2Qu
IFRoZXJlIHNob3VsZG4ndCBiZSBhbnkKKyAgICAvLyBzcGVjaWFsLWNhc2luZyBmb3IgdGhlIG9u
ZS1zdHJ1Y3R1cmUgY2FzZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMzMjI5CisgICAgU3RydWN0dXJlKiBvbmx5U3RydWN0dXJlKCkgY29uc3QKICAg
ICB7CisgICAgICAgIGlmIChpc1RvcCgpIHx8IHNpemUoKSAhPSAxKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBhdCgwKTsKICAgICB9CiAgICAgCi0gICAgU3Bl
Y3VsYXRlZFR5cGUgc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0Ci0gICAgewotICAg
ICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBTcGVjQ2VsbDsKLSAgICAgICAg
aWYgKGlzQ2xlYXIoKSkKLSAgICAgICAgICAgIHJldHVybiBTcGVjTm9uZTsKLSAgICAgICAgcmV0
dXJuIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSk7Ci0gICAgfQorICAgIHZv
aWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpc1ZhbGlkT2Zm
c2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpOwotICAgIH0KKyAgICAvLyBUaGUgbWV0aG9kcyBiZWxvdyBhcmUgYWxsIGNv
bnNlcnZhdGl2ZSBhbmQgZXJyIG9uIHRoZSBzaWRlIG9mIG1ha2luZyAndGhpcycgYXBwZWFyIGJp
Z2dlcgorICAgIC8vIHRoYW4gaXQgaXMuIEZvciBleGFtcGxlLCBjb250YWlucygpIG1heSByZXR1
cm4gdHJ1ZSBpZiB0aGUgc2V0IGlzIGNsb2JiZXJlZCBvciBUT1AuCisgICAgLy8gaXNTdWJzZXRP
ZigpIG1heSByZXR1cm4gZmFsc2UgaW4gY2FzZSBvZiBhbWJpZ3VpdGllcy4gVGhlcmVmb3JlIHlv
dSBzaG91bGQgb25seSBwZXJmb3JtCisgICAgLy8gb3B0aW1pemF0aW9ucyBhcyBhIGNvbnNlcXVl
bmNlIG9mIHRoZSAidGhpcyBpcyBzbWFsbGVyIiByZXR1cm4gdmFsdWUgLSBzbyBmYWxzZSBmb3IK
KyAgICAvLyBjb250YWlucygpLCB0cnVlIGZvciBpc1N1YnNldE9mKCksIGZhbHNlIGZvciBpc1N1
cGVyc2V0T2YoKSwgYW5kIGZhbHNlIGZvciBvdmVybGFwcygpLgorCisgICAgYm9vbCBjb250YWlu
cyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBoYXNTaW5nbGV0
b24oKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzTmVpdGhlckNsZWFyTm9yVG9wKCk7
Ci0gICAgfQorICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBj
b25zdDsKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpIGNvbnN0OwogICAgIAotICAgIFN0cnVjdHVyZSogc2luZ2xldG9uKCkgY29uc3QKKyAg
ICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKKyAg
ICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikg
Y29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChpc05laXRoZXJDbGVhck5vclRvcCgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRP
ZigqdGhpcyk7CiAgICAgfQogICAgIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3N0
cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKLSAgICB9CisgICAgYm9vbCBvdmVybGFwcyhj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdDsKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCBjbG9iYmVyZWRGbGFnID0gU3RydWN0dXJlU2V0Ojpy
ZXNlcnZlZEZsYWc7CisgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCB0b3BWYWx1ZSA9IFN0cnVj
dHVyZVNldDo6cmVzZXJ2ZWRWYWx1ZTsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcG9seW1v
cnBoaXNtTGltaXQgPSAxMDsKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2xvYmJlcmVkU3Vw
cmVtYWN5VGhyZXNob2xkID0gMjsKKyAgICAKKyAgICB2b2lkIGZpbHRlclNsb3coU3BlY3VsYXRl
ZFR5cGUgdHlwZSk7CisgICAgYm9vbCBtZXJnZVNsb3coY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpOwogICAgIAotICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYg
b3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKKyAgICBib29sIGVxdWFsc1Nsb3coY29u
c3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0OworICAgIAorICAgIHZvaWQg
bWFrZVRvcFdoZW5UaGluKCkKICAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKSB7Ci0gICAgICAg
ICAgICBvdXQucHJpbnQoIlRPUCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBvdXQucHJpbnQoIlsiKTsKLSAgICAgICAgaWYgKG1fc3RydWN0dXJl
KQotICAgICAgICAgICAgb3V0LnByaW50KGluQ29udGV4dCgqbV9zdHJ1Y3R1cmUsIGNvbnRleHQp
KTsKLSAgICAgICAgb3V0LnByaW50KCJdIik7CisgICAgICAgIEFTU0VSVChtX3NldC5pc1RoaW4o
KSk7CisgICAgICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOwogICAgIH0KLQotICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIAorICAgIGJvb2wgbWVyZ2VOb3RU
b3AoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7CisgICAgCisgICAgdm9pZCBzZXRDbG9iYmVy
ZWQoYm9vbCBjbG9iYmVyZWQpCiAgICAgewotICAgICAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7
CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSB8fCAhY2xvYmJlcmVkKTsKKyAgICAgICAgbV9zZXQu
c2V0UmVzZXJ2ZWRGbGFnKGNsb2JiZXJlZCk7CiAgICAgfQotCi1wcml2YXRlOgotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIHRvcFZhbHVlKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1
cmUqPigxKTsgfQotICAgIAotICAgIC8vIE5CLiBUaGlzIG11c3QgaGF2ZSBhIHRyaXZpYWwgZGVz
dHJ1Y3Rvci4KICAgICAKLSAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1
cmUgYXQgYSB0aW1lLgotICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CisgICAgU3RydWN0dXJl
U2V0IG1fc2V0OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFuc2l0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgi
CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIFRyYW5zaXRpb246OmR1bXBJbkNv
bnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KHBvaW50ZXJEdW1wSW5Db250ZXh0KHByZXZpb3VzLCBjb250ZXh0KSwgIiAt
PiAiLCBwb2ludGVyRHVtcEluQ29udGV4dChuZXh0LCBjb250ZXh0KSk7Cit9CisKK3ZvaWQgVHJh
bnNpdGlvbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRl
eHQob3V0LCAwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJh
bnNpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJh
bnNpdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdU
cmFuc2l0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1RyYW5zaXRpb25f
aAorI2RlZmluZSBERkdUcmFuc2l0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgU3RydWN0dXJlOworc3RydWN0IER1bXBDb250ZXh0OworCitu
YW1lc3BhY2UgREZHIHsKKworc3RydWN0IFRyYW5zaXRpb24geworICAgIFN0cnVjdHVyZSogcHJl
dmlvdXM7CisgICAgU3RydWN0dXJlKiBuZXh0OworICAgIAorICAgIFRyYW5zaXRpb24oKQorICAg
ICAgICA6IHByZXZpb3VzKG51bGxwdHIpCisgICAgICAgICwgbmV4dChudWxscHRyKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIHByZXZpb3VzLCBTdHJ1Y3R1
cmUqIG5leHQpCisgICAgICAgIDogcHJldmlvdXMocHJldmlvdXMpCisgICAgICAgICwgbmV4dChu
ZXh0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKK307CisKK3R5cGVkZWYgVmVjdG9yPFRyYW5zaXRpb24sIDM+IFRyYW5zaXRpb25WZWN0
b3I7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHVHJhbnNpdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAko
cmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDggKzIxNSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4
SW5CbG9jayA8IGJsb2NrLT5zaXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CiAgICAgICAgICAgICAg
ICAgTm9kZSogbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwogICAgICAgICAgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgewotICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1
cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDog
eworICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKICAgICAgICAgICAgICAg
ICAgICAgTm9kZSogY2hpbGQgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmIChjaGlsZC0+b3AoKSAhPSBHZXRMb2NhbCkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjg1LDEzICsyODQsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1
Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJjZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0
cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CkBAIC0zMzEsNyArMzIzLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgICAgICAgICAgY2FzZSBHZXRCeU9m
ZnNldDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgpAQCAtMzg2LDEzICszNzcsNiBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVjdHVyZUNoZWNrQWNjb3VudGluZ0ZvckFy
cmF5TW9kZSh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDogewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3Vy
Y2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0cnVj
dHVyZUNoZWNrQWNjb3VudGluZ0ZvckFycmF5TW9kZSh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0
dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNv
dXJjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxl
U3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdXYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIK
KyNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBXYXRjaGFibGVTdHJ1Y3R1cmVXYXRj
aGluZ1BoYXNlIDogcHVibGljIFBoYXNlIHsKK3B1YmxpYzoKKyAgICBXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlKEdyYXBoJiBncmFwaCkKKyAgICAgICAgOiBQaGFzZShncmFwaCwgIndh
dGNoYWJsZSBzdHJ1Y3R1cmUgd2F0Y2hpbmciKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9v
bCBydW4oKQorICAgIHsKKyAgICAgICAgLy8gVGhlc2UgYXJlIHByZXR0eSBkdW1iLCBidXQgbmVl
ZGVkIHRvIHBsYWNhdGUgc3Vic2VxdWVudCBhc3NlcnRpb25zLiBXZSBjb24ndCBhY3R1YWxseQor
ICAgICAgICAvLyBoYXZlIHRvIHdhdGNoIHRoZXNlIGJlY2F1c2UgdGhlcmUgaXMgbm8gd2F5IHRv
IHRyYW5zaXRpb24gYXdheSBmcm9tIGl0LCBidXQgdGhleSBhcmUKKyAgICAgICAgLy8gd2F0Y2hh
YmxlIGFuZCBzbyB3ZSB3aWxsIGFzc2VydCBpZiB0aGV5IGFyZW4ndCB3YXRjaGVkLgorICAgICAg
ICB0cnlXYXRjaChtX2dyYXBoLm1fdm0uc3RyaW5nU3RydWN0dXJlLmdldCgpKTsgCisgICAgICAg
IHRyeVdhdGNoKG1fZ3JhcGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJs
b2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gMDsgbm9kZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBXZWFrSlND
b25zdGFudDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC52YWx1ZU9mSlND
b25zdGFudChub2RlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAgICAgICAg
ICAgICAgdHJ5V2F0Y2gobm9kZS0+ZnVuY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRh
YmxlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5leGVjdXRhYmxlKCkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChu
b2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICAgICAg
ICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIE5ld1N0
cmluZ09iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJl
KCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIFBoYW50
b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3Rv
cmFnZToKKyAgICAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Cisg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJl
dmlvdXMtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOworICAg
ICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsg
aS0tOykgeworICAgICAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBz
dHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5l
ZWQgdG8gd2F0Y2ggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYWxsTGlua1N0YXR1
cyBiZWNhdXNlIHdlIHdvdWxkbid0IHVzZSBNdWx0aUdldEJ5T2Zmc2V0IGlmIGFueSBvZiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRh
KCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQdXRC
eUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFu
dHNbaV07CisgICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50Lm9sZFN0cnVj
dHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQ
dXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnlXYXRjaCh2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBOZXdBcnJheToKKyAgICAgICAgICAgICAgICBjYXNlIE5ld0FycmF5QnVm
ZmVyOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZv
cihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1
cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3
VHlwZWRBcnJheToKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+dHlwZWRBcnJheVN0cnVjdHVyZShub2Rl
LT50eXBlZEFycmF5VHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIFRvU3RyaW5nOgorICAgICAgICAg
ICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIENyZWF0
ZUFjdGl2YXRpb246CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFs
T2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2go
bV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+cmVnRXhwU3Ry
dWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCB0cnlXYXRj
aChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAg
ICAgICAgICAgdHJ5V2F0Y2godmFsdWUuYXNDZWxsKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHRyeVdhdGNoKEpTQ2VsbCogY2VsbCkKKyAgICB7CisgICAgICAgIGlmIChjZWxsKQorICAgICAg
ICAgICAgdHJ5V2F0Y2goY2VsbC0+c3RydWN0dXJlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHRyeVdhdGNoKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQorICAgIHsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gc2V0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIHRyeVdhdGNoKHNldFtp
XSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5V2F0Y2goU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJl
KTsKKyAgICB9Cit9OworCitib29sIHBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhH
cmFwaCYgZ3JhcGgpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBX
YXRjaGFibGUgU3RydWN0dXJlIFdhdGNoaW5nIik7CisgICAgcmV0dXJuIHJ1blBoYXNlPFdhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U+KGdyYXBoKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorI2Rl
ZmluZSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKworI2lmIEVOQUJMRShE
RkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIEdyYXBo
OworCisvLyBTZXQgd2F0Y2hwb2ludHMgb24gYW55IHN0cnVjdHVyZXMgdGhhdCB3ZSBrbm93IG9m
IHRoYXQgYXJlIGN1cnJlbnRseSB3YXRjaGFibGUuIEl0J3MKKy8vIHNvbWV3aGF0IGNvdW50ZXJp
bnR1aXRpdmUsIGJ1dCB0aGlzIGVuZHMgdXAgYmVpbmcgdGhlIGNsZWFuZXN0IGFuZCBtb3N0IGVm
ZmVjdGl2ZSB3YXkKKy8vIG9mIHJlZHVjaW5nIHN0cnVjdHVyZSBjaGVja3Mgb24gdGVybWluYWwg
c3RydWN0dXJlczoKKy8vCisvLyAtIFdlIHVzZWQgdG8gb25seSBzZXQgd2F0Y2hwb2ludHMgb24g
d2F0Y2hhYmxlIHN0cnVjdHVyZXMgaWYgd2Uga25ldyB0aGF0IHRoaXMgd291bGQKKy8vICAgcmVt
b3ZlIGEgc3RydWN0dXJlIGNoZWNrLiBFeHBlcmltZW50cyBzaG93IHRoYXQgc3dpdGNoaW5nIGZy
b20gdGhhdCwgdG8gYmxpbmRseQorLy8gICBzZXR0aW5nIHdhdGNocG9pbnRzIG9uIGFsbCB3YXRj
aGFibGUgc3RydWN0dXJlcywgd2FzIG5vdCBhIHJlZ3Jlc3Npb24uCisvLworLy8gLSBJdCBtYWtl
cyBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiBhIHdob2xlIGxvdCBlYXNpZXIuIFdlIGp1c3QgYXNz
dW1lIHRoYXQgd2F0Y2hhYmxlCisvLyAgIHN0cnVjdHVyZXMgYXJlIHVuY2xvYmJlcmFibGUgd2l0
aG91dCBoYXZpbmcgdG8gZG8gYW55IG90aGVyIGxvZ2ljLgorCitib29sIHBlcmZvcm1XYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZyhHcmFwaCYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1dhdGNoYWJsZVN0
cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDYgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICB2b2lkIGhhbmRsZSgpCiAgICAgewotICAgICAgICBERkdfTk9ERV9E
T19UT19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIGhhbmRsZUVkZ2UpOwotICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKICAgICAgICAgY2FzZSBDb21wYXJlRXFDb25z
dGFudDoKICAgICAgICAgY2FzZSBJc1VuZGVmaW5lZDoKQEAgLTExOSwxMyArMTE3LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGFkZExhemlseShqc0Nhc3Q8SlNGdW5jdGlvbio+KG1fbm9kZS0+
ZnVuY3Rpb24oKSktPmFsbG9jYXRpb25Qcm9maWxlV2F0Y2hwb2ludFNldCgpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlv
bldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KAotICAgICAgICAgICAgICAgIG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLAotICAgICAgICAgICAg
ICAgIG1fbm9kZS0+Y2hpbGQxKCktPm9wKCkgPT0gV2Vha0pTQ29uc3RhbnQgPyBCYWRXZWFrQ29u
c3RhbnRDYWNoZVdhdGNocG9pbnQgOiBCYWRDYWNoZVdhdGNocG9pbnQsCi0gICAgICAgICAgICAg
ICAgbV9ub2RlLT5zdHJ1Y3R1cmUoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIFZhcmlhYmxlV2F0Y2hw
b2ludDoKICAgICAgICAgICAgIGFkZExhemlseShtX25vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTQ3LDI2ICsxMzgsNiBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgaGFuZGxlRWRnZShOb2RlKiwgRWRnZSBl
ZGdlKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChlZGdlLnVzZUtpbmQoKSkgewotICAgICAgICBj
YXNlIFN0cmluZ09iamVjdFVzZToKLSAgICAgICAgY2FzZSBTdHJpbmdPclN0cmluZ09iamVjdFVz
ZTogewotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPSBnbG9i
YWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSA9IHN0cmluZ09iamVjdFN0cnVjdHVyZS0+c3Rv
cmVkUHJvdG90eXBlKCkuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICAgICAgQVNTRVJU
KG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1ZhbGlkT3JNaXhlZChzdHJpbmdQcm90b3R5cGVTdHJ1
Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKTsKLSAgICAgICAgICAgIAotICAgICAg
ICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYywgTm90U3RyaW5nT2JqZWN0LAotICAgICAgICAgICAgICAg
IHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICB2b2lk
IGhhbmRsZU1hc3F1ZXJhZGVzQXNVbmRlZmluZWQoKQogICAgIHsKICAgICAgICAgaWYgKG1fZ3Jh
cGgubWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdhdGNocG9pbnRJc1N0aWxsVmFsaWQobV9ub2RlLT5v
cmlnaW4uc2VtYW50aWMpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBh
YmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw2
IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIEJp
dExTaGlmdDoKICAgICBjYXNlIEJpdFVSU2hpZnQ6CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToK
LSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgIGNhc2UgQXJyYXlp
ZnlUb1N0cnVjdHVyZToKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21Q
dXRTdHJ1Y3R1cmU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNp
Y1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTgyLDEyICs4MiwxNSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFj
cm8oU19KSVRPcGVyYXRpb25fRUosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGludFB0ciwgaW50NjQp
KSBcCiAgICAgbWFjcm8oU19KSVRPcGVyYXRpb25fRUpKLCBmdW5jdGlvblR5cGUoaW50UHRyLCBp
bnRQdHIsIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9KLCBmdW5j
dGlvblR5cGUoaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VKSkosIGZ1
bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnQ2NCwgaW50NjQsIGludDY0KSkgXAogICAg
IG1hY3JvKFZfSklUT3BlcmF0aW9uX0VPWkQsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRy
LCBpbnRQdHIsIGludDMyLCBkb3VibGVUeXBlKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9u
X0VPWkosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQ2
NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKHZvaWRUeXBl
LCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQ2IsIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVy
YXRpb25fRVZ3c0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDY0
KSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
aW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnQzMikpIFwKICAgICBtYWNybyhaX0pJVE9wZXJhdGlvbl9ELCBmdW5jdGlvblR5cGUo
aW50MzIsIGRvdWJsZVR5cGUpKQogCiBjbGFzcyBJbnRyaW5zaWNSZXBvc2l0b3J5IDogcHVibGlj
IENvbW1vblZhbHVlcyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMiw3
ICsyMDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB0eXBlID0gbV9vdXQuaW50
NjQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAiQmFkIFBoaSBub2RlIHJl
c3VsdCB0eXBlIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUsIGJ1aWxkQWxsb2NhKG1fb3V0Lm1f
YnVpbGRlciwgdHlwZSkpOwpAQCAtMjU4LDcgKzI1OCwyMSBAQCBwcml2YXRlOgogICAgIGJvb2wg
Y29tcGlsZU5vZGUodW5zaWduZWQgbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCFtX3N0
YXRlLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAgICAg
ICAgICAgIG1fb3V0LmNyYXNoKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEludmFs
aWRhdGUgZG9taW5hdGVkIGJsb2Nrcy4gVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgd2Ugd291
bGQgZXhwZWN0CisgICAgICAgICAgICAvLyB0aGVtIHRvIGJlIGludmFsaWRhdGVkIGFscmVhZHku
IEJ1dCB5b3UgY2FuIGhhdmUgdGhlIENGQSBiZWNvbWUgbW9yZQorICAgICAgICAgICAgLy8gcHJl
Y2lzZSBvdmVyIHRpbWUgYmVjYXVzZSB0aGUgc3RydWN0dXJlcyBvZiBvYmplY3RzIGNoYW5nZSBv
biB0aGUgbWFpbgorICAgICAgICAgICAgLy8gdGhyZWFkLiBGYWlsaW5nIHRvIGRvIHRoaXMgd291
bGQgcmVzdWx0IGluIHdlaXJkIGNyYXNoZXMgZHVlIHRvIGEgdmFsdWUKKyAgICAgICAgICAgIC8v
IGJlaW5nIHVzZWQgYnV0IG5vdCBkZWZpbmVkLiBSYWNlIGNvbmRpdGlvbnMgRlRXIQorICAgICAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBi
bG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gbV9n
cmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgu
bV9kb21pbmF0b3JzLmRvbWluYXRlcyhtX2hpZ2hCbG9jaywgdGFyZ2V0KSkKKyAgICAgICAgICAg
ICAgICAgICAgdGFyZ2V0LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTM5OSw5ICs0MTMsNiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJlKCk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAg
ICAgICAgIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpOwotICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAgICAgICAgIGNvbXBp
bGVDaGVja0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTYzNiwxMiArNjQ3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJvZmlsZVdhdGNocG9pbnQ6CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGRhdGFMb2co
IlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kOlxuIik7Ci0gICAgICAgICAgICBtX2dy
YXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG1fbm9kZSk7Ci0gICAgICAgICAgICBk
YXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiRnVsbCBncmFwaCBkdW1wOlxuIik7
Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
VW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtNjc1LDcgKzY4MSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBtX291dC5zZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgZGVzdGluYXRpb24p
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CkBAIC03MDEsNyArNzA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldEpTVmFs
dWUobV9vdXQuZ2V0KHNvdXJjZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC03NDQsNyArNzUwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAt
NzY5LDcgKzc3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTgyMSw3ICs4MjcsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KQEAgLTgzMCw3ICs4MzYsNyBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRh
KCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0gdmFyaWFibGUtPm1hY2hpbmVM
b2NhbCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvcGVyYW5kLmlzQXJndW1lbnQoKSk7Cisg
ICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBvcGVyYW5kLmlzQXJndW1lbnQoKSk7
CiAKICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2FkNjQoYWRkcmVzc0ZvcihvcGVy
YW5kKSk7CiAKQEAgLTg1MSw3ICs4NTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0SlNW
YWx1ZShqc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQpAQCAtODcwLDcgKzg3Niw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCku
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FT
U0VSVCh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBo
LCBtX25vZGUsIHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAgc2V0SW50MzIo
bV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpKSkpOwpAQCAt
OTIyLDcgKzkyOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgZmx1c2ggZm9ybWF0Iik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTEwOTgsNyArMTEw
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE3Miw3ICsxMTc4LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CkBAIC0xMjc1LDcgKzEyODEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
ICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTEz
NzMsNyArMTM3OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQyNCw3ICsxNDMwLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NS
QVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDUwLDcgKzE0NTYsNyBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KQEAgLTE1MTcsNyArMTUyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTYwOSwxMiAr
MTYxNSw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCgpCi0gICAgewotICAgICAgICBhZGRXZWFrUmVmZXJlbmNlKG1fbm9kZS0+
c3RydWN0dXJlKCkpOwotICAgICAgICBzcGVjdWxhdGVDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwot
ICAgIH0KLSAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0Z1bmN0aW9uKCkKICAgICB7CiAgICAg
ICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKQEAgLTE2ODMsNyAr
MTY4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSksIG1fY2FsbEZyYW1lLCBjZWxsKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgYXJyYXkgdHlwZSIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC0xNzAwLDggKzE3MDAsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgbV9mdGxTdGF0
ZS5qaXRDb2RlLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2dy
YXBoLm1fcGxhbiwgY29kZUJsb2NrKCksIG1fbm9kZSk7CiAKLSAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNT
dHJ1Y3R1cmU7Ci0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZTsKKyAgICAgICAgU3RydWN0dXJlKiBv
bGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7CisgICAgICAgIFN0
cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRTdHJ1Y3R1cmUtPmluZGV4aW5nVHlw
ZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICBBU1NFUlQob2xk
U3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygpID09IG5ld1N0cnVjdHVyZS0+
dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAgICAgIEFTU0VSVChvbGRTdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5ld1N0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkp
OwpAQCAtMTc1Nyw3ICsxNzU3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2lu
ZCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTg4Myw3ICsx
ODgzLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGNoZWNrQXJndW1lbnRzTm90Q3JlYXRl
ZCgpOwogCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25vZGUtPm9yaWdpbi5zZW1hbnRpYy5p
bmxpbmVDYWxsRnJhbWUpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIHNldEludDMy
KG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXlsb2FkRm9yKEpTU3RhY2s6OkFy
Z3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsKICAgICB9CiAgICAgCkBAIC0x
OTA5LDcgKzE5MDksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgLy8gRklYTUU6IEZUTCBzaG91
bGQgc3VwcG9ydCBhY3RpdmF0aW9ucy4KICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjk1NzYKICAgICAgICAgICAgIAotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJVbmltcGxlbWVudGVkIik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIFR5cGVkUG9pbnRlciBiYXNlOwpAQCAtMTk0Niw3ICsxOTQ2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KQEAgLTIwOTYsNyArMjA5Niw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkMzIocG9pbnRlcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGVs
ZW1lbnQgc2l6ZSIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUodHlwZSkgPCA0KSB7CkBAIC0y
MTQwLDE0ICsyMTQwLDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1fb3V0LmxvYWREb3VibGUocG9pbnRlcik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzZXREb3VibGUocmVzdWx0KTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfSB9CiAgICAgfQpAQCAtMjI1Myw3ICsyMjUzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwpAQCAtMjM0Niw3ICsy
MzQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CkBAIC0yMzYzLDcgKzIzNjMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVmVHlwZSA9IG1fb3V0LnJlZjMyOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBl
bGVtZW50IHNpemUiKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0g
ZWxzZSAvKiAhaXNJbnQodHlwZSkgKi8gewogICAgICAgICAgICAgICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dEb3VibGUoY2hpbGQzKTsKQEAgLTIzNzcsNyArMjM3Nyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICByZWZUeXBlID0gbV9vdXQucmVmRG91YmxlOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB0eXBl
ZCBhcnJheSB0eXBlIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCkBAIC0yNDAxLDcgKzI0MDEsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0yNDczLDcgKzI0NzMsNyBAQCBwcml2YXRlOgogICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2Rl
LCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAg
IH0KQEAgLTI1MzEsNyArMjUzMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjU3Niw3ICsyNTc2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFy
cmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKICAgICAgICAgICAg
IG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHN0cnVjdHVyZS0+aW5kZXhpbmdU
eXBlKCkgPT0gbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAo
IWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2Uo
bV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1l
bnRzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpOwpAQCAtMjY1Myw3ICsyNjUzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnbG9iYWxPYmplY3QtPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbigKICAgICAgICAgICAgIG1fbm9k
ZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3Ry
dWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkg
PT0gbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWdsb2Jh
bE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFoYXNBbnlBcnJheVN0b3JhZ2UobV9ub2Rl
LT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0g
bV9ub2RlLT5udW1Db25zdGFudHMoKTsKQEAgLTI3OTEsMjEgKzI3OTEsMTkgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewot
ICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+c3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKTsKICAgICAgICAgTFZhbHVlIG9iamVjdCA9IGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlKG9iamVjdCwgZGF0YS5wcmV2aW91c1N0cnVjdHVyZSkpOworICAgICAgICBzZXRT
dG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgbV9ub2RlLT50cmFuc2l0aW9u
KCktPnByZXZpb3VzKSk7CiAgICAgfQogCiAgICAgdm9pZCBjb21waWxlUmVhbGxvY2F0ZVByb3Bl
cnR5U3RvcmFnZSgpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYgZGF0
YSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKTsKKyAgICAgICAgVHJhbnNpdGlv
biogdHJhbnNpdGlvbiA9IG1fbm9kZS0+dHJhbnNpdGlvbigpOwogICAgICAgICBMVmFsdWUgb2Jq
ZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgTFZhbHVlIG9sZFN0b3Jh
Z2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAKICAgICAgICAgc2V0
U3RvcmFnZSgKICAgICAgICAgICAgIHJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAg
ICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCBkYXRhLnByZXZpb3VzU3RydWN0dXJlLCBkYXRh
Lm5ld1N0cnVjdHVyZSkpOworICAgICAgICAgICAgICAgIG9iamVjdCwgb2xkU3RvcmFnZSwgdHJh
bnNpdGlvbi0+cHJldmlvdXMsIHRyYW5zaXRpb24tPm5leHQpKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlVG9TdHJpbmcoKQpAQCAtMjg5MCw3ICsyODg4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CkBAIC0yOTgyLDcgKzI5ODAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25NYWtlUm9wZTMpLCBtX2NhbGxGcmFtZSwga2lkc1swXSwg
a2lkc1sxXSwga2lkc1syXSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBudW1iZXIgb2YgY2hpbGRyZW4iKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKQEAgLTMyMDcsNyArMzIwNSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHRl
cm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKQEAgLTMyNzksNyArMzI3Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHRl
cm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgIHNwZWN1bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgp
LCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxl
KCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKQEAgLTMzOTgsNyArMzM5Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7
CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVFcUNvbnN0YW50KCkKQEAgLTM0
OTEsNyArMzQ4OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7CiAgICAgfQogICAg
IAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RFcUNvbnN0YW50KCkKQEAgLTM2MjcsNyAr
MzYyNSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0zNjczLDcgKzM2NzEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzcyNiwxMSArMzcyNCwxMSBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjYXNlIFN3aXRjaFN0cmluZzoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiVW5pbXBsZW1lbnRlZCIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgc3dpdGNoIGtpbmQi
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlUmV0dXJuKCkKQEAgLTM5MTQsNyArMzkx
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZShtX25vZGUtPmNoaWxkMSgpKTsKICNl
bmRpZgogICAgIH0KLQorICAgIAogICAgIExWYWx1ZSBkaWRPdmVyZmxvd1N0YWNrKCkKICAgICB7
CiAgICAgICAgIC8vIFRoaXMgZG9lcyBhIHZlcnkgc2ltcGxlIGxlYWYgZnVuY3Rpb24gYW5hbHlz
aXMuIFRoZSBpbnZhcmlhbnQgb2YgRlRMIGNhbGwKQEAgLTQxODksNyArNDE4Nyw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmRzIik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGFyZUVx
T2JqZWN0T3JPdGhlclRvT2JqZWN0KEVkZ2UgbGVmdENoaWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCkBA
IC00NDY4LDcgKzQ0NjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIG1fb3V0LnBo
aShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICAgICAgfQogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQpAQCAtNDcxOCw3ICs0NzE2
LDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5kKQog
ICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKGtpbmQsIG5vVmFsdWUoKSwgMCwgbV9vdXQuYm9vbGVh
blRydWUpOworICAgICAgICBzcGVjdWxhdGUoa2luZCwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291
dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgdHlwZUNoZWNrKApAQCAtNDc3NCw3ICs0NzczLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiBTcGVjSW50MzIpKTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICEobV9zdGF0ZS5mb3JOb2RlKGVk
Z2UpLm1fdHlwZSAmIFNwZWNJbnQzMikpOwogICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUp
OwogICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJvOwogICAgIH0KQEAgLTQ3ODIsNyArNDc4
MSw3IEBAIHByaXZhdGU6CiAgICAgZW51bSBJbnQ1MktpbmQgeyBTdHJpY3RJbnQ1MiwgSW50NTIg
fTsKICAgICBMVmFsdWUgbG93SW50NTIoRWRnZSBlZGdlLCBJbnQ1MktpbmQga2luZCkKICAgICB7
Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkZ2UudXNlS2luZCgpID09IEludDUyUmVwVXNlKTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVkZ2UudXNlS2luZCgpID09IElu
dDUyUmVwVXNlKTsKICAgICAgICAgCiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWU7CiAg
ICAgICAgIApAQCAtNDgwOCw3ICs0ODA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3RhdGUuZm9yTm9kZShl
ZGdlKS5tX3R5cGUpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIW1fc3Rh
dGUuZm9yTm9kZShlZGdlKS5tX3R5cGUpOwogICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUp
OwogICAgICAgICByZXR1cm4gbV9vdXQuaW50NjRaZXJvOwogICAgIH0KQEAgLTQ4NDQsNyArNDg0
Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3RyaWN0SW50NTI6CiAgICAgICAgICAgICBy
ZXR1cm4gSW50NTI7CiAgICAgICAgIH0KLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIp
OwogICAgIH0KICAgICAKICAgICBMVmFsdWUgbG93V2hpY2hldmVySW50NTIoRWRnZSBlZGdlLCBJ
bnQ1MktpbmQmIGtpbmQpCkBAIC00ODc0LDcgKzQ4NzMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuIHVuY2hlY2tlZFZhbHVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUgJiBTcGVjQ2VsbCkp
OworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShtX3N0YXRlLmZvck5vZGUo
ZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxl
KTsKICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clplcm87CiAgICAgfQpAQCAtNDk0MywyMCAr
NDk0MiwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShtX3N0YXRlLmZvck5vZGUoZWRn
ZSkubV90eXBlICYgU3BlY0Jvb2xlYW4pKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBt
X25vZGUsICEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNCb29sZWFuKSk7CiAg
ICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAgICAgICAgIHJldHVybiBtX291dC5ib29s
ZWFuRmFsc2U7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBsb3dEb3VibGUoRWRnZSBlZGdlKQog
ICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGlzRG91YmxlKGVkZ2UudXNlS2lu
ZCgpKSk7CiAgICAgICAgIAogICAgICAgICBMb3dlcmVkTm9kZVZhbHVlIHZhbHVlID0gbV9kb3Vi
bGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQog
ICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7Ci0gICAgICAgIAotICAgICAgICBSRUxF
QVNFX0FTU0VSVCghbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSk7CisgICAgICAgIERGR19B
U1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSk7CiAg
ICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAgICAgICAgIHJldHVybiBtX291dC5kb3Vi
bGVaZXJvOwogICAgIH0KQEAgLTQ5NjQsOCArNDk2Miw4IEBAIHByaXZhdGU6CiAgICAgTFZhbHVl
IGxvd0pTVmFsdWUoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRv
bWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgewogICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2luZCgpID09
IFVudHlwZWRVc2UpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCghaXNEb3VibGUoZWRnZS51c2VL
aW5kKCkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWRnZS51c2VLaW5kKCkgIT0gSW50NTJS
ZXBVc2UpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIWlzRG91YmxlKGVk
Z2UudXNlS2luZCgpKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBlZGdl
LnVzZUtpbmQoKSAhPSBJbnQ1MlJlcFVzZSk7CiAgICAgICAgIAogICAgICAgICBpZiAoZWRnZS0+
aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHJldHVybiBtX291dC5jb25zdEludDY0KEpTVmFs
dWU6OmVuY29kZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KGVkZ2Uubm9kZSgpKSkpOwpAQCAt
NDk4OCw3ICs0OTg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJWYWx1ZSBub3QgZGVmaW5lZCIp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgCkBAIC01MjQ2LDggKzUyNDQsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgc3BlY3VsYXRlTWlzYyhlZGdlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZGF0YUxvZygiVW5zdXBwb3J0ZWQg
c3BlY3VsYXRpb24gdXNlIGtpbmQ6ICIsIGVkZ2UudXNlS2luZCgpLCAiXG4iKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiVW5zdXBwb3J0ZWQgc3BlY3VsYXRpb24gdXNlIGtpbmQiKTsKICAg
ICAgICAgfQogICAgIH0KICAgICAKQEAgLTUzMDAsNyArNTI5Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLmFycmF5Q2xhc3MoKSkgewog
ICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKLSAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJVbmV4cGVjdGVkIG9yaWdpbmFsIGFycmF5Iik7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIEFycmF5
OjpBcnJheToKQEAgLTUzMjAsNyArNTMxNyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmNvbnN0SW50OChhcnJheU1vZGUuc2hhcGVNYXNrKCkpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGFycmF5
IGNsYXNzIik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgpAQCAt
NTQ2Myw3ICs1NDYwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmpl
Y3RTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKICAgICAgICAgCi0g
ICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCisgICAgICAg
IGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1
cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIAogICAgICAgICBzcGVjdWxhdGUoCkBAIC01NjY3LDkgKzU2NjQsMTAgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiRXhjZXB0aW9uIGNoZWNrIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCisg
ICAgICAgIExWYWx1ZSBleGNlcHRpb24gPSBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUodm0o
KS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNo
KAotICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0
ZSh2bSgpLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSkpLAotICAgICAgICAgICAgcmFyZWx5KG1faGFu
ZGxlRXhjZXB0aW9ucyksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CisgICAgICAgICAgICBtX291
dC5ub3RaZXJvNjQoZXhjZXB0aW9uKSwgcmFyZWx5KG1faGFuZGxlRXhjZXB0aW9ucyksIHVzdWFs
bHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24pOwogICAgIH0KQEAgLTU3NTYsMTAgKzU3NTQsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNz
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQs
ICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3QuXG4iKTsKLSAgICAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpCisg
ICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygi
RXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3QuIiku
ZGF0YSgpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5z
IHRoYXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRl
Y29kZQogICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHRoZSBieXRlY29kZSBsaXZlbmVz
cyBhbmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlzIGlzCkBAIC01ODY0LDggKzU4NjAsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgZGF0
YUxvZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5vZGU6ICIsIG5vZGUsICJcbiIpOwotICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCB0b0NTdHJpbmcoIkNhbm5vdCBmaW5kIHZhbHVlIGZvciBub2RlOiAiLCBub2Rl
KS5kYXRhKCkpOwogICAgIH0KICAgICAKICAgICBib29sIHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJn
dW1lbnQoT1NSRXhpdCYgZXhpdCwgdW5zaWduZWQgaW5kZXgsIE5vZGUqIG5vZGUpCkBAIC01OTQz
LDcgKzU5MzgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBE
RkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQ29ycnVwdCBpbnQ1MiBraW5kIik7CiAgICAgfQog
ICAgIHZvaWQgc2V0SlNWYWx1ZShOb2RlKiBub2RlLCBMVmFsdWUgdmFsdWUpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMTY5NTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xMzgsOSArMTM4LDE0IEBAIHZvaWQgT3V0cHV0OjpicmFuY2goTFZhbHVlIGNvbmRpdGlv
biwgTEIKICAgICAgICAgICAgIGNvbnN0SW50MzIobm90VGFrZW5XZWlnaHQuc2NhbGVUb1RvdGFs
KHRvdGFsKSkpKTsKIH0KIAorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxV
bnJlYWNoYWJsZSgpCit7CisgICAgV1RGQ3Jhc2goKTsKK30KKwogdm9pZCBPdXRwdXQ6OmNyYXNo
Tm9uVGVybWluYWwoKQogewotICAgIGNhbGwoaW50VG9QdHIoY29uc3RJbnRQdHIoYWJvcnQpLCBw
b2ludGVyVHlwZShmdW5jdGlvblR5cGUodm9pZFR5cGUpKSkpOworICAgIGNhbGwob3BlcmF0aW9u
KGZ0bFVucmVhY2hhYmxlKSk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxNjk1
MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQwLDYgKzE0MCw3IEBAIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04g
KCpTX0pJVE9wZXIKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlv
bl9FT0pzcykoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1N0cmluZyopOwogdHlwZWRlZiBzaXpl
X3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKIHR5
cGVkZWYgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gKCpTcHJ0X0pJVE9wZXJhdGlv
bl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uKSgpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQ2IpKEV4ZWNTdGF0ZSosIENvZGVCbG9jayopOwpA
QCAtMTY3LDYgKzE2OCw4IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVy
YXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZ3c0opKEV4
ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGlu
dDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVm0p
KEV4ZWNTdGF0ZSosIFZNKik7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0aW9uX0opKEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fWikoaW50MzJfdCk7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04g
KCpQX0pJVE9wZXJhdGlvbl9FKShFeGVjU3RhdGUqKTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJB
VElPTiAoKlBfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKIHR5cGVkZWYg
Y2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9uX0VDbGkpKEV4ZWNTdGF0ZSosIENh
bGxMaW5rSW5mbyopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTgsNiArMzU4LDE2IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmlzU3RpbGxW
YWxpZCgpOwogICAgIH0KKyAgICAKKyAgICBib29sIGRmZ1Nob3VsZFdhdGNoSWZQb3NzaWJsZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzRGljdGlvbmFyeSgpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGRmZ1Nob3VsZFdhdGNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBkZmdTaG91bGRXYXRjaElmUG9zc2libGUoKSAmJiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElz
U3RpbGxWYWxpZCgpOworICAgIH0KICAgICAgICAgCiAgICAgdm9pZCBhZGRUcmFuc2l0aW9uV2F0
Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0dXJlLWNvbnRy
YWRpY3Rpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9hcnJheWlmeS10by1zdHJ1Y3R1cmUtY29udHJhZGljdGlvbi5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0
dXJlLWNvbnRyYWRpY3Rpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVu
Y3Rpb24gZm9vKGFycmF5LCB2LCBwKSB7CisgICAgYXJyYXlbMF0gPSAxMDsKKyAgICBpZiAocCkK
KyAgICAgICAgdiA9ICJoZWxsbyI7CisgICAgYXJyYXlbMF0gPSB2OworfQorCitub0lubGluZShm
b28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIGFycmF5
ID0gWzQyXTsKKyAgICBmb28oYXJyYXksIDQzLCBmYWxzZSk7CisgICAgaWYgKGFycmF5WzBdICE9
IDQzKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBhcnJheTsKK30KKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0bXlhcmd1bWVu
dHNsZW5ndGgtaW5saW5lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvZnRsLWdldG15YXJndW1lbnRzbGVuZ3RoLWlubGluZS5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnRsLWdldG15YXJndW1l
bnRzbGVuZ3RoLWlubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkgQEAKK2Z1bmN0
aW9uIGZvbygpeworICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHIgPSBmb28oMTEsIDEyLCAxMywgMTgs
IDE5LCAyMCk7CisgICAgaWYgKHIgIT0gNikgdGhyb3cgIkVycm9yOiAiK3I7Cit9CisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNldC1t
dWx0aXBsZS10cmFuc2l0aW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL211bHRpLXB1dC1ieS1vZmZzZXQtbXVsdGlwbGUtdHJhbnNpdGlvbnMu
anMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211
bHRpLXB1dC1ieS1vZmZzZXQtbXVsdGlwbGUtdHJhbnNpdGlvbnMuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzMCBAQAorZnVuY3Rpb24gZm9vKG8pIHsKKyAgICBvLnggPSAxOworICAgIG8u
eSA9IDI7CisgICAgby5hID0gMzsKKyAgICBvLmIgPSA0OworICAgIG8uYyA9IDU7CisgICAgby5k
ID0gNjsKKyAgICBvLmUgPSA3OworICAgIG8uZiA9IDg7CisgICAgby5nID0gOTsKKyAgICBvLmgg
PSAxMDsKKyAgICBvLmkgPSAxMTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZnVuY3Rpb24gRm9v
KCkgeworICAgIGZvbyh0aGlzKTsKK30KKwordmFyIHJlc3VsdCA9IDA7CisKK2ZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICBmb28oe2Y6NDJ9KTsKKyAgICByZXN1bHQgKz0g
KG5ldyBGb28oKSkueDsKK30KKworaWYgKHJlc3VsdCAhPSAxMDAwMDApCisgICAgdGhyb3cgIkJh
ZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwtaW4tbG9vcC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93LWZyb20tZnRsLWluLWxvb3AuanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93LWZy
b20tZnRsLWluLWxvb3AuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAordmFyIGRp
ZFRocm93ID0gZmFsc2U7Cit0cnkgeworICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsgfQorICAgICAgICB0aHJvdyA0MjsKKyAgICB9
KSgpOworfSBjYXRjaCAoZSkgeworICAgIGlmIChlICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQ6ICIgKyBlOworICAgIGRpZFRocm93ID0gdHJ1ZTsKK30KK2lmICghZGlk
VGhyb3cpCisgICAgdGhyb3cgIkVycm9yOiBzaG91bGQgaGF2ZSB0aHJvd24gYnV0IGRpZG4ndC4i
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0
bC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Ro
cm93LWZyb20tZnRsLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1
IEBACitmdW5jdGlvbiBmb28ocCkgeworICAgIHZhciBvID0ge2Y6NDJ9OworICAgIGlmIChwKQor
ICAgICAgICB0aHJvdyBvOworICAgIHJldHVybiBvOworfQorCitub0lubGluZShmb28pOworCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIG8gPSBmb28oZmFsc2Up
OworICAgIGlmIChvLmYgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIG8uZjsKK30KKwordmFyIGRpZFRocm93ID0gZmFsc2U7Cit0cnkgeworICAgIGZvbyh0cnVl
KTsKK30gY2F0Y2ggKGUpIHsKKyAgICBpZiAoZS5mICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQgaW4gY2F0Y2g6ICIgKyBvLmY7CisgICAgZGlkVGhyb3cgPSB0cnVlOwor
fQoraWYgKCFkaWRUaHJvdykKKyAgICB0aHJvdyAiRXJyb3I6IHNob3VsZCBoYXZlIHRocm93biBi
dXQgZGlkbid0LiI7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL1dURi9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxNC0wNi0wMSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFtmdGxvcHRdIEFJIHNob3VsZCBi
ZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL0JhZy5oOgorICAgICAgICAo
V1RGOjpCYWc6Ok5vZGU6Ok5vZGUpOgorICAgICAgICAoV1RGOjpCYWc6OmFkZCk6CisKIDIwMTQt
MDUtMTkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0
XSBERkcgYnl0ZWNvZGUgcGFyc2VyIHNob3VsZCB0dXJuIEdldEJ5SWQgd2l0aCBub3RoaW5nIGJ1
dCBhIEdldHRlciBzdHViIGFzIHN0dWZmK2hhbmRsZUNhbGwsIGFuZCBoYW5kbGVDYWxsIHNob3Vs
ZCBiZSBhbGxvd2VkIHRvIGlubGluZSBpZiBpdCB3YW50cyB0bwpJbmRleDogU291cmNlL1dURi93
dGYvQmFnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQmFnLmgJKHJldmlzaW9uIDE2
OTUxNSkKKysrIFNvdXJjZS9XVEYvd3RmL0JhZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICsz
NCwxMiBAQCBwcml2YXRlOgogICAgIGNsYXNzIE5vZGUgewogICAgICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKICAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3M+CisgICAgICAgIE5vZGUoQXJncy4uLiBhcmdzKQorICAgICAgICAgICAgOiBtX2l0ZW0oYXJn
cy4uLikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBUIG1faXRlbTsK
ICAgICAgICAgTm9kZSogbV9uZXh0OwogICAgIH07CkBAIC01Myw5ICs1OSwxMCBAQCBwdWJsaWM6
CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgVCogYWRkKCkKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmdzPgorICAgIFQqIGFkZChBcmdzLi4uIGFyZ3MpCiAgICAgewotICAgICAgICBO
b2RlKiBuZXdOb2RlID0gbmV3IE5vZGU7CisgICAgICAgIE5vZGUqIG5ld05vZGUgPSBuZXcgTm9k
ZShhcmdzLi4uKTsKICAgICAgICAgbmV3Tm9kZS0+bV9uZXh0ID0gbV9oZWFkOwogICAgICAgICBt
X2hlYWQgPSBuZXdOb2RlOwogICAgICAgICByZXR1cm4gJm5ld05vZGUtPm1faXRlbTsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE2OTUxNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE0LTA2LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0gQUkgc2hvdWxkIGJlIGFibGUgdHJhY2sgc3Ry
dWN0dXJlIHNldHMgbGFyZ2VyIHRoYW4gMQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5
LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dl
dC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzOiBBZGRlZC4K
KyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNp
bXBsZS5qczogQWRkZWQuCisKIDIwMTQtMDUtMjEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBERkc6OmNsb2JiZXJpemUgc2hvdWxkIGJlIGJsaW5k
IHRvIHRoZSBlZmZlY3RzIG9mIEdDCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1i
eS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMt
Y2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAg
QEAKK0pTUmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24g
dGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tc2ltcGxlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBo
aWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9u
LXNpbXBsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMt
Y2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBo
aWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQt
YnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hl
Y2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNz
L2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24KKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVy
ZS1lbGltaW5hdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1p
ZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1
YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nZXQtYnktaWQtcXVh
ZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZQorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLXNpbXBsZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Z2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUu
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1
YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYv
L0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMg
QEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgbyA9IHthOjF9OworICAgIHZhciBwID0ge2E6Miwg
bDoxM307CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0IF49IG8uYTsKKyAgICAgICAgdmFyIHRtcCA9IG87
CisgICAgICAgIG8gPSBwOworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0
ICE9IDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30p
KCk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQt
Ymltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKKyhmdW5j
dGlvbigpIHsKKyAgICB2YXIgbyA9IHthOjEsIGI6MiwgYzozLCBkOjQsIGU6NSwgZjo2LCBnOjcs
IGg6OCwgaTo5LCBqOjEwLCBrOjExfTsKKyAgICB2YXIgcCA9IHthOjIsIGI6MywgYzo0LCBkOjUs
IGU6NiwgZjo3LCBnOjgsIGg6OSwgaToxMCwgajoxMSwgazoxMiwgbDoxM307CisgICAgdmFyIHJl
c3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAg
ICAgcmVzdWx0ICs9IG8uYSBeIG8uYiBeIG8uYyBeIG8uZCBeIG8uZSBeIG8uZiBeIG8uZyBeIG8u
aCBeIG8uaSBeIG8uaiBeIG8uazsKKyAgICAgICAgdmFyIHRtcCA9IG87CisgICAgICAgIG8gPSBw
OworICAgICAgICBwID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IDY1MDAwMDApCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQt
YnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOCBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MSwgYjoyLCBjOjMsIGQ6
NCwgZTo1LCBmOjYsIGc6NywgaDo4LCBpOjksIGo6MTAsIGs6MTF9OworICAgIHZhciByZXN1bHQg
PSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKQorICAgICAgICByZXN1
bHQgKz0gby5hIF4gby5iIHwgby5jIF4gby5kICYgby5lIF4gby5mIHwgby5nIF4gby5oICYgby5p
IF4gby5qIHwgby5rOworICAgIGlmIChyZXN1bHQgIT0gMTUwMDAwMDApCisgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTcgQEAK
KyhmdW5jdGlvbigpIHsKKyAgICB2YXIgbyA9IHthOjF9OworICAgIHZhciBwID0ge2E6MiwgbDox
M307CisgICAgdmFyIHEgPSB7YTozLCBiOjN9OworICAgIHZhciByID0ge2E6NCwgYzo1fTsKKyAg
ICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkg
eworICAgICAgICByZXN1bHQgXj0gby5hOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAg
byA9IHA7CisgICAgICAgIHAgPSBxOworICAgICAgICBxID0gcjsKKyAgICAgICAgciA9IHRtcDsK
KyAgICB9CisgICAgaWYgKHJlc3VsdCAhPSAwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232449</attachid>
            <date>2014-06-03 16:29:26 -0700</date>
            <delta_ts>2014-06-03 19:58:27 -0700</delta_ts>
            <desc>and now, it&apos;s actually totally sound!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>255940</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4MiBA
QAorMjAxNC0wNi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0
aGFuIDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
ODA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGlu
dGVycHJldGVyKSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVy
ZToKKyAgICAgICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRy
YWNrIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAg
ICAgICBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhh
dmUgYW55IG9mIHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdo
aWNoIC0gYnV0IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3Qg
aW4gdGhlIHNldC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBz
dGlsbCBiZSBUT1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisg
ICAgICAgICAgYXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBl
eHBsb3Npb24gb24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91
Z2ggdGhhdCBpdCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBz
aW5jZSB3ZSBoYXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisg
ICAgICAgICAgc3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0
byBrbm93IGFib3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBv
aW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQK
KyAgICAgICAgICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRo
YXQgdGhlIHdhdGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGlz
IGFsbG93cyB0cmFja2luZyBvZiB3YXRjaGFibGUgc3RydWN0dXJlcyB0byBiZSBmYXIgc2ltcGxl
ciB0aGFuIGJlZm9yZS4gUHJldmlvdXNseSwKKyAgICAgICAgICBhIHN0cnVjdHVyZSBiZWluZyB0
cmFja2VkIGFzICJmdXR1cmUgcG9zc2libGUiIHdhcyBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIHdh
dGNoYWJsZSBidXQKKyAgICAgICAgICB3ZSBtaWdodCBub3QgYWN0dWFsbHkgd2F0Y2ggaXQuIFRo
aXMgbWFrZXMgYWxnZWJyYSBvdmVyIHNldHMgb2YgZnV0dXJlIHBvc3NpYmxlCisgICAgICAgICAg
c3RydWN0dXJlcyBxdWl0ZSB3ZWlyZC4gQnV0IHdhdGNoaW5nIGFsbCB3YXRjaGFibGUgc3RydWN0
dXJlcyBtZWFucyB0aGF0IHdlIHNpbXBsZSBzYXkKKyAgICAgICAgICB0aGF0IGEgc3RydWN0dXJl
IHNldCBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6IHVuY2xvYmJlcmVkLCB3aGljaCBt
ZWFucyBpdCdzIGp1c3QKKyAgICAgICAgICBhIHNldCBvZiBzdHJ1Y3R1cmVzIGFuZCBpdCBkb2Vz
bid0IG1hdHRlciB3aGF0IGlzIHdhdGNoYWJsZSBvciB3aGF0IGlzbid0IGJlY2F1c2Ugd2UndmUK
KyAgICAgICAgICBwcm92ZW4gdGhhdCB0aGUgdmFsdWUgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBz
dHJ1Y3R1cmVzIHJpZ2h0IG5vdzsgYW5kIGNsb2JiZXJlZCwgd2hpY2gKKyAgICAgICAgICBtZWFu
cyB0aGF0IHdlIGhhdmUgYSBzZXQgb2Ygc3RydWN0dXJlcywgcGx1cyBhbGwgcG9zc2libGUgc3Ry
dWN0dXJlcyB0ZW1wb3JhcmlseSwgd2l0aAorICAgICAgICAgIGludmFsaWRhdGlvbiByZW1vdmlu
ZyB0aGUgInBsdXMgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMiLiBDbG9iYmVyaW5nIGEgc2V0IG1l
YW5zIHRoYXQKKyAgICAgICAgICBpZiBhbnkgb2YgaXRzIHN0cnVjdHVyZXMgYXJlIHVud2F0Y2hh
YmxlLCB0aGUgc2V0IGp1c3QgYmVjb21lcyBUT1A7IGJ1dCBpZiBhbGwKKyAgICAgICAgICBzdHJ1
Y3R1cmVzIGluIHRoZSBzZXQgYXJlIHdhdGNoYWJsZSB0aGVuIHdlIGp1c3Qgc2V0IHRoZSBjbG9i
YmVyZWQgYml0IHRvIGFkZCB0aGUgInBsdXMKKyAgICAgICAgICBhbGwgcG9zc2libGUgc3RydWN0
dXJlcyB0ZW1wb3JhcmlseSIgdGhpbmcuIFRoaXMgcHJlY2lzZWx5IHRyYWNrcyB0aGUgZXhhY3Qg
bWVhbmluZyBvZgorICAgICAgICAgIHdhdGNoYWJpbGl0eSBhbmQgaW52YWxpZGF0aW9uIHBvaW50
cy4KKyAgICAgICAgCisgICAgICAgIFN0aWxsIGEgd29yayBpbiBwcm9ncmVzcy4KKworICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2
YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHA6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojpjb3B5RnJvbSk6CisgICAgICAgICogYnl0ZWNvZGUv
U3RydWN0dXJlU2V0Lmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6U3RydWN0dXJlU2V0
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0Ojppc0VtcHR5KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU2V0OjpnZW5lcmljRmlsdGVyKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpDb250YWluc091dE9mTGluZTo6Q29udGFpbnNPdXRPZkxpbmUpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVTZXQ6OkNvbnRhaW5zT3V0T2ZMaW5lOjpvcGVyYXRvcigpKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlU2V0OjpkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldEVtcHR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
U2V0OjpnZXRSZXNlcnZlZEZsYWcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnNldFJl
c2VydmVkRmxhZyk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaDoKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Ym9vbGVhblJl
c3VsdCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHlwZT46OnZlcmlmeUVkZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVl
cyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNl
cnZlVHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRp
b25zKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzaG91bGRCZUNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
Ojpub3JtYWxpemVDbGFyaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpj
aGVja0NvbnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3Nl
cnRJc1dhdGNoZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNv
bnRleHQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5o
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpUcmFu
c2l0aW9uT2JzZXJ2ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OlRyYW5z
aXRpb25PYnNlcnZlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RW
YWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6VHJhbnNpdGlvbnNPYnNlcnZlcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6b3BlcmF0b3Io
KSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNIZWFwVG9wKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjptZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Omhhc0Nsb2JiZXJhYmxlU3Rh
dGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUluZGV4aW5nVHlwZVRy
YW5zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VUb3ApOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmJlc3RQcm92ZW5TdHJ1Y3R1cmUpOiBE
ZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBkZmcvREZH
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJn
dW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlN
b2RlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKToK
KyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAgICAgICAgKiBkZmcvREZHQ0ZBUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNlOjpwZXJmb3JtQmxvY2tDRkEpOgor
ICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBo
YXNlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVsaW1pbmF0aW9uKToKKyAgICAgICAg
KEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0UpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0NvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6c3RhcnRDcmFzaGluZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6aXNDcmFzaGluZyk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5o
OgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
b21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNv
bnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpD
b25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZH
OjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKToK
KyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgICog
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNE
ZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6
R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZH
OjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAgIChKU0M6OkRGRzo6V2F0
Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0OjpXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNo
cG9pbnRTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6R2VuZXJp
Y0Rlc2lyZWRXYXRjaHBvaW50czo6aXNTdGlsbFZhbGlkKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpzaG91bGRBc3N1bWVNaXhlZFN0YXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRz
Ojppc1ZhbGlkT3JNaXhlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjppc1N0aWxsVmFsaWQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkRl
c2lyZWRXYXRjaHBvaW50czo6c2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1ZhbGlkT3JNaXhlZCk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9l
c0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6fkdyYXBoKToKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldEZvbGRh
YmxlVmlldyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpERkc6OkdyYXBoOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAgICAqIGRmZy9E
RkdHcmFwaC5oOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpjb252ZXJ0VG9Db25zdGFudCk6
CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6Om1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBv
aW50SXNTdGlsbFZhbGlkKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6YWRkU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Tm9kZTo6dHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aGFzU3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YTo6U3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNvbnZl
cnRUb1N0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpoYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6Tm9kZTo6c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjb21waWxlSW5UaHJlYWRJbXBsKToKKyAgICAgICAg
KiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRm
Zy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JTdHJ1Y3R1cmUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNz
ZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
YnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjphZGQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
OjptZXJnZU5vdFRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpj
b250YWlucyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dWJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
dmVybGFwcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVt
cEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRj
aGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZl
SW52YWxpZGF0aW9uUG9pbnQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6
aXNDbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzTmVpdGhl
ckNsZWFyTm9yVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
Ojppc0Nsb2JiZXJlZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ubHlTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJz
ZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRv
cFdoZW5UaGluKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpz
ZXRDbG9iYmVyZWQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
Om1ha2VUb3ApOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZp
bHRlcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6aXNDbGVhck9yVG9wKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOjpsYXN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1ZhbGlkT2Zmc2V0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpoYXNT
aW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OnNpbmdsZXRvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6dG9wVmFsdWUpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdUcmFuc2l0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkRGRzo6VHJhbnNpdGlvbjo6ZHVtcEluQ29udGV4dCk6CisgICAgICAgIChKU0M6OkRGRzo6VHJh
bnNpdGlvbjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1RyYW5zaXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6VHJhbnNpdGlvbjo6VHJhbnNpdGlvbik6CisgICAgICAgICogZGZn
L0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlR5cGVD
aGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVkdW5kYW50U3RydWN0dXJlQ2hlY2tzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlOjppZGVudGlmeVJlZHVuZGFu
dEFycmF5Q2hlY2tzKToKKyAgICAgICAgKiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hp
bmdQaGFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2U6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UpOgorICAgICAg
ICAoSlNDOjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6dHJ5V2F0Y2gp
OgorICAgICAgICAoSlNDOjpERkc6OnBlcmZvcm1XYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyk6
CisgICAgICAgICogZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDogQWRk
ZWQuCisgICAgICAgICogZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OldhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2U6OmhhbmRsZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6aGFuZGxlRWRnZSk6Cisg
ICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y2Fu
Q29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaDoKKyAgICAg
ICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmNvbXBpbGVQdXRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNdWx0aUdldEJ5T2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11bHRpUHV0QnlPZmZz
ZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0ZXJtaW5hdGUpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVTdHJpbmdPYmplY3RGb3JT
dHJ1Y3R1cmVJRCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNhbGxDaGVj
ayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoV1RGOjpqc2NFeGl0KToKKyAgICAg
ICAgKGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHByaW50VXNhZ2VT
dGF0ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAg
ICAgKiB0ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0dXJlLWNvbnRyYWRpY3Rpb24uanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZnRsLWdldG15
YXJndW1lbnRzbGVuZ3RoLWlubGluZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAg
ICAqIHRlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRpb25z
LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChGb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKwog
MjAxNC0wNS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtm
dGxvcHRdIERGRzo6Y2xvYmJlcml6ZSBzaG91bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMgb2Yg
R0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE2OTUx
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMTkyLDkgKzE5MiwxMSBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGRm
Zy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAKICAgICBkZmcvREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAogICAgIGRmZy9ERkdTdHJlbmd0aFJlZHVjdGlv
blBoYXNlLmNwcAorICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAogICAgIGRm
Zy9ERkdUaHJlYWREYXRhLmNwcAogICAgIGRmZy9ERkdUaHVua3MuY3BwCiAgICAgZGZnL0RGR1Rp
ZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RGR1RyYW5zaXRpb24uY3BwCiAg
ICAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VuaWZpY2F0
aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VzZUtpbmQuY3BwCkBAIC0yMDUsNiArMjA3LDcgQEAg
c2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZHVmFyaWFibGVFdmVudC5jcHAK
ICAgICBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKICAgICBkZmcvREZHVmlydHVhbFJl
Z2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNw
cAogICAgIGRmZy9ERkdXb3JrbGlzdC5jcHAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHJl
dmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Myw2ICs5MywxNSBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgewogCitOT19SRVRVUk5fV0lUSF9WQUxVRSBzdGF0aWMgdm9pZCBqc2NFeGl0KGludCBzdGF0
dXMpCit7CisgICAgaWYgKERGRzo6aXNDcmFzaGluZygpKSB7CisgICAgICAgIGZvciAoOzspCisg
ICAgICAgICAgICBwYXVzZSgpOworICAgIH0KKyAgICBleGl0KHN0YXR1cyk7Cit9CisKIGNsYXNz
IEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXI7CiBjbGFzcyBNYXN1cWVyYWRlcjsK
QEAgLTg4NSw3ICs4OTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9u
VHJhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25RdWl0KEV4ZWNTdGF0
ZSopCiB7Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIGpzY0V4aXQoRVhJVF9TVUNDRVNT
KTsKIAogI2lmIENPTVBJTEVSKE1TVkMpICYmIE9TKFdJTkNFKQogICAgIC8vIFdpdGhvdXQgdGhp
cywgVmlzdWFsIFN0dWRpbyB3aWxsIGNvbXBsYWluIHRoYXQgdGhpcyBtZXRob2QgZG9lcyBub3Qg
cmV0dXJuIGEgdmFsdWUuCkBAIC0xMDEyLDcgKzEwMjEsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgZWNvcmVfc2h1dGRvd24oKTsKICNlbmRpZgogCi0gICAgcmV0dXJu
IHJlczsKKyAgICBqc2NFeGl0KHJlcyk7CiB9CiAKIHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRz
KEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8U2NyaXB0PiYgc2NyaXB0
cywgYm9vbCBkdW1wKQpAQCAtMTE1Niw3ICsxMTY1LDcgQEAgc3RhdGljIE5PX1JFVFVSTiB2b2lk
IHByaW50VXNhZ2VTdGF0ZW1lbgogICAgIGZwcmludGYoc3RkZXJyLCAiICAtLTxqc2MgVk0gb3B0
aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZNIG9wdGlvblxuIik7CiAgICAg
ZnByaW50ZihzdGRlcnIsICJcbiIpOwogCi0gICAgZXhpdChoZWxwID8gRVhJVF9TVUNDRVNTIDog
RVhJVF9GQUlMVVJFKTsKKyAgICBqc2NFeGl0KGhlbHAgPyBFWElUX1NVQ0NFU1MgOiBFWElUX0ZB
SUxVUkUpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCkBAIC0xMjQ1LDcgKzEyNTQsNyBAQCB2b2lkIENvbW1hbmRMaW5lOjpwYXJz
ZUFyZ3VtZW50cyhpbnQgYXJnCiAgICAgaWYgKG5lZWRUb0R1bXBPcHRpb25zKQogICAgICAgICBK
U0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CiAgICAgaWYgKG5lZWRUb0V4aXQp
Ci0gICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAgICAganNjRXhpdChFWElUX1NVQ0NF
U1MpOwogfQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMSArNDQzLDEzIEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhh
c2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0b3JlQmFycmll
ckVsaXNpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVGhyZWFkRGF0YS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIgLz4KICAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXGRmZ1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxkZmdcREZHVHJhbnNpdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxkZmdcREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHVW5pZmljYXRpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAiIC8+CkBAIC00NTksNiArNDYxLDcgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWaXJ0dWFsUmVnaXN0ZXJB
bGxvY2F0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZGZnXERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1dvcmtsaXN0LmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3NlbWJsZXIuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxCbG9ja0FsbG9jYXRvci5jcHAiIC8+CkBAIC0x
MDI1LDYgKzEwMjgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RpZXJV
cENoZWNrSW5qZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRm
Z1xERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUcmFuc2l0
aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVHlwZUNoZWNrSG9p
c3RpbmdQaGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VuaWZp
Y2F0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdVc2VL
aW5kLmgiIC8+CkBAIC0xMDM3LDYgKzEwNDEsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5cZGZnXERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGRmZ1xERkdWYXJpYWRpY0Z1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNocG9pbnRD
b2xsZWN0aW9uUGhhc2UuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdX
b3JrbGlzdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGlzYXNzZW1ibGVyXERp
c2Fzc2VtYmxlci5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDcgQEAK
IAkJMEY0Q0VENUYxOENFQTdBQjAwODAyRkUwIC8qIFBvbHltb3JwaGljR2V0QnlJZExpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNENFRDVEMThD
RUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0RjI5REYxOEI2QUQxQzAwNTdC
QzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNEYyOUREMThCNkFEMUMw
MDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHAgKi87
IH07CiAJCTBGNEYyOUUwMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3Vu
dEVzdGltYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0RjI5REUxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNv
dW50RXN0aW1hdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNs
b2JiZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTU0
MUIxMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuY3BwICovOyB9OwogCQkwRjU1NDFCMjE2MTNDMUZCMDBDRTNFMjUg
LyogU3BlY2lhbFBvaW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNTU5ODk4
MTdDODZDNTgwMEExRTU0MyAvKiBUb05hdGl2ZUZyb21WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTk4OTcxN0M4NkM1NjAwQTFFNTQzIC8q
IFRvTmF0aXZlRnJvbVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTM1Myw2ICszNTQsNyBAQAogCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQz
QjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxs
b2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjgzNjRCNzE2NEIwQzExMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzNjRC
NTE2NEIwQzBFMDA1MzMyOUEgLyogREZHQnJhbmNoRGlyZWN0aW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4ODVFMTExODQ5QTNCRTAwRjFF
M0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjg4NUUxMDE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjg5
M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg5M0JEQTE5MzZF
MjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgKi87IH07CiAJCTBG
OEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBG
VExMaW5rLmNwcCAqLzsgfTsKIAkJMEY4RjJCOTYxNzJFMDRBMzAwN0RCREE1IC8qIEZUTExpbmsu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk0
MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY4RjJCOTkxNzJGMDRGRjAwN0RCREE1IC8qIERGR0Rl
c2lyZWRJZGVudGlmaWVycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjhGMkI5NzE3MkYwNEZEMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZp
ZXJzLmNwcCAqLzsgfTsKQEAgLTQ5NSw2ICs0OTcsOCBAQAogCQkwRkNFRkFERjE4MDczOEMwMDA0
NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNw
cCAqLzsgfTsKIAkJMEZDRUZBRTAxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFERTE4MDcz
OEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0
dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkQyRDRGRTE5MkZF
RTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyRDRGQzE5MkZF
RTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi87
IH07CisJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkQyRDRGRDE5MkZFRTU4MDBBMTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGRDNDODI2MTQxMTVENDAwMEZEODFDQiAvKiBERkdEcml2ZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjAxNDExNUNGODAw
RkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi87IH07CiAJCTBGRDNDODI4MTQxMTVENEYwMEZEODFD
QiAvKiBERkdEcml2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRDNDODIyMTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLzsgfTsKIAkJ
MEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEODFBQ0YxNTRGQjRFQjAwOTgz
RTcyIC8qIERGR0RvbWluYXRvcnMuY3BwICovOyB9OwpAQCAtNTI4LDYgKzUzMiw4IEBACiAJCTBG
RERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkREQkZCMzE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVEMTQzNkFCMjcwMDE5
NkM0OCAvKiBPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkUyMjhFQjE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTIyOEVFMTQzNkFCMkMw
MDE5NkM0OCAvKiBPcHRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTIyOEVBMTQzNkFCMjMwMDE5NkM0OCAvKiBPcHRpb25zLmNwcCAqLzsg
fTsKKwkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUIxOTNCOUM1
OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwICovOyB9OworCQkwRkU3MjExRTE5M0I5QzU5
MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRp
b24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkU4NTM0QjE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTg1MzQ5MTcyM0NE
QTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwICovOyB9OwogCQkwRkU4NTM0
QzE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU4NTM0QTE3MjNDREE1MDBCNjE4
RjUgLyogREZHRGVzaXJlZFdhdGNocG9pbnRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFOTVGNzkxOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERh
dGFTZWN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTk1Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi87IH07
CkBAIC0yMDg4LDYgKzIwOTQsNyBAQAogCQkwRjRDRUQ1RDE4Q0VBN0FCMDA4MDJGRTAgLyogUG9s
eW1vcnBoaWNHZXRCeUlkTGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
b2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NEYyOUREMThCNkFEMUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHU3RhdGlj
RXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRGMjlERTE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291
bnRFc3RpbWF0aW9uUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZH
U3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdTdGF0
aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjUwQUYzQjE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0
YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1N0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFBRjE2MTNDMUZCMDBDRTNFMjUgLyogU3BlY2lh
bFBvaW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3BlY2lh
bFBvaW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1NDFCMDE2MTND
MUZCMDBDRTNFMjUgLyogU3BlY2lhbFBvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU3BlY2lhbFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY1NTk4OTcxN0M4NkM1NjAwQTFFNTQzIC8qIFRvTmF0aXZlRnJvbVZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFRvTmF0aXZlRnJvbVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yMTYwLDYgKzIxNjcsNyBAQAogCQkwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODM2
NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQnJhbmNoRGlyZWN0aW9uLmg7IHBhdGggPSBkZmcvREZH
QnJhbmNoRGlyZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTEw
MTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCeXRlY29kZVVzZURlZi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjg5M0JEQTE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1
IC8qIEZUTExpbmsuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGluay5jcHA7IHBhdGggPSBm
dGwvRlRMTGluay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk0MTcy
RTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExpbmsuaDsgcGF0
aCA9IGZ0bC9GVExMaW5rLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEYyQjk3
MTcyRjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVk
SWRlbnRpZmllcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjMxMyw2ICsy
MzIxLDggQEAKIAkJMEZDRUZBREQxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTExvY2F0aW9uLmNwcDsgcGF0
aCA9IGZ0bC9GVExMb2NhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
Q0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExMb2NhdGlvbi5oOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDJDOTIzMTZEMDFFRTkwMEM3ODAzRiAv
KiBTdHJ1Y3R1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0
cnVjdHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMkQ0RkMx
OTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0
Y2hpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRDJENEZEMTky
RkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIwMTQxMTVDRjgwMEZEODFD
QiAvKiBERkdEcml2ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHRHJpdmVyLmNwcDsgcGF0aCA9IGRmZy9ERkdEcml2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkQzQzgyMjE0MTE1RDBFMDBGRDgxQ0IgLyogREZHRHJpdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0RyaXZlci5oOyBwYXRoID0gZGZnL0RG
R0RyaXZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkQ1NjUyMjE2QUI3ODBB
MDAxOTc2NTMgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Js
b2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM0OCw2ICsyMzU4
LDggQEAKIAkJMEZEREJGQjMxNjY2RUVENTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YUR1bXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nl
c3NEYXRhRHVtcC5oOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFMjI4RUExNDM2QUIyMzAwMTk2QzQ4IC8qIE9w
dGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT3B0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRTIyOEVCMTQzNkFCMjMwMDE5NkM0
OCAvKiBPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9wdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVE
IC8qIERGR1RyYW5zaXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHVHJhbnNpdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHVHJhbnNpdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdU
cmFuc2l0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1RyYW5zaXRp
b24uaDsgcGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTg1MzQ5MTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHRGVzaXJlZFdhdGNo
cG9pbnRzLmNwcDsgcGF0aCA9IGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU4NTM0QTE3MjNDREE1MDBCNjE4RjUgLyogREZHRGVz
aXJlZFdhdGNocG9pbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Rl
c2lyZWRXYXRjaHBvaW50cy5oOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkU5NUY3NzE4QjU2OTQ3MDBCNTMxRkIgLyog
RlRMRGF0YVNlY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
RlRMRGF0YVNlY3Rpb24uY3BwOyBwYXRoID0gZnRsL0ZUTERhdGFTZWN0aW9uLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ4MDYsNyArNDgxOCw5IEBACiAJCQkJMkFDQ0YzREQx
ODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5oICovLAogCQkJ
CTBGQzIwQ0IzMTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNw
cCAqLywKIAkJCQkwRkMyMENCNDE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rp
b25QaGFzZS5oICovLAorCQkJCTBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmNwcCAqLywKIAkJCQkwRjYzOTQ3NjE1RENFMzQ3MDA2QTU5N0MgLyog
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGNTBBRjNCMTkzRThCMzkwMDY3
NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLywKIAkJCQkwRjJGQ0NGNzE4QTYw
MDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgKi8sCiAJCQkJMEYyRkNDRjgxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCAqLywKIAkJCQkwRkMwOTc5RjE0NkIyOEM3MDBD
RjI0NDIgLyogREZHVGh1bmtzLmNwcCAqLywKQEAgLTQ4MTcsNiArNDgzMSw4IEBACiAJCQkJMEZE
OEEzMjIxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmggKi8sCiAJCQkJMEZEOEEzMjMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwICovLAogCQkJCTBGRDhBMzI0MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggKi8sCisJCQkJMEZFNzIxMUIxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRp
b24uY3BwICovLAorCQkJCTBGRTcyMTFDMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9u
LmggKi8sCiAJCQkJMEY2Mzk0M0MxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0
aW5nUGhhc2UuY3BwICovLAogCQkJCTBGNjM5NDNEMTVDNzVGMTQwMDZBNTk3QyAvKiBERkdUeXBl
Q2hlY2tIb2lzdGluZ1BoYXNlLmggKi8sCiAJCQkJMEZCRTBGNkYxNkMxREIwMTAwODJDNUU4IC8q
IERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwICovLApAQCAtNDgzOCw2ICs0ODU0LDggQEAKIAkJCQkw
RjJCREM0MzE1MjI4MDE3MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oICovLAog
CQkJCTBGRkZDOTUzMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0
aW9uUGhhc2UuY3BwICovLAogCQkJCTBGRkZDOTU0MTRFRjkwOTUwMEM3MjUzMiAvKiBERkdWaXJ0
dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCAqLywKKwkJCQkwRkQyRDRGQzE5MkZFRTU4MDBB
MTc4QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8sCisJCQkJ
MEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5n
UGhhc2UuaCAqLywKIAkJCQkwRkM5N0YzQjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2lu
dENvbGxlY3Rpb25QaGFzZS5jcHAgKi8sCiAJCQkJMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8q
IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLywKIAkJCQkwRkRCMkNFNTE3NDgzMEEy
MDA3QjNDMUIgLyogREZHV29ya2xpc3QuY3BwICovLApAQCAtNTc3Niw2ICs1Nzk0LDcgQEAKIAkJ
CQkwRjQ4NTMyODE4N0RGREVDMDA4M0I2ODcgLyogRlRMQXZhaWxhYmxlUmVjb3ZlcnkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRUEwQTBBMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBhYmlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTIzMTcwOTYwNjkwMEJCNzIyQyAvKiBGVExD
b21tb25WYWx1ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDJENEZGMTkyRkVFNTgwMEExNzhC
RiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVBMEEwQzE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFOTVGN0ExOEI1Njk0NzAwQjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQUM5MjJCQzE4QTE2MTgyMDAzQ0UwRkIgLyogRlRMRFdBUkZEZWJ1
Z0xpbmVJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTU4MTcsNiArNTgzNiw3IEBACiAJCQkJMEY2
QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2Nr
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJh
bnNpdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8q
IEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVG
OTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMw
MDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg0LDYg
KzYyMDQsNyBAQAogCQkJCTBGNkIxQ0JBMTg2MTI0NEMwMDg0NUQ5NyAvKiBSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkIxQ0JFMTg2MTI0NkEwMDg0NUQ5
NyAvKiBSZWdpc3RlclByZXNlcnZhdGlvbldyYXBwZXJHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY1MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8q
IFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2
MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIz
MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTYsNiAr
Njk3Nyw3IEBACiAJCQkJMEZGMEYxOTkxNkI3MjlGNjAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0
YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NjdCNUI1MTdBMEI5NjUwMDYzRDk0MCAvKiBE
RkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJC
REM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRDJENEZFMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mzc4MTBEMTc5OUVBMkUwMDgx
NzUzMyAvKiBERkdOYXR1cmFsTG9vcHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMx
NkI3MkEwMzAwNURGOTVCIC8qIERGR05vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgx
QkExNTBFOTUyQzAwQjlBMkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTY5ODQsNiArNzAwNiw3IEBACiAJCQkJMEZDMjBDQjkxODU1NkEzNTAwQzlFOTU0IC8qIERGR1NT
QUxvd2VyaW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RkI0RjQxN0ZDQjkxNzAw
Q0I2N0Y4IC8qIERGR1N0YWNrTGF5b3V0UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0
RjI5REYxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRTcyMTFEMTkzQjlDNTkwMDMxRjZFRCAv
KiBERkdUcmFuc2l0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBQ0NGM0RFMTg1RkUyNkIw
MDgzRTJBRCAvKiBERkdTdG9yZUJhcnJpZXJFbGlzaW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4IC8qIERG
R1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MTc0LDYgKzcxOTcsNyBAQAogCQkJ
CTk1RjZFNjk1MEU1QjVGOTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3QzE4NEUxQTE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQcm9taXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTdDMTg0RTIyMTdCRUUyNDAwMDdDQjYzQSAvKiBKU1Byb21pc2VD
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjg5M0JEQjE5MzZFMjNDMDAxMjEx
RjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
QzAwOENEQTE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJN0MwMDhDRDIxODZGOEE5MzAwOTU1QzI0IC8qIEpTUHJvbWlzZUZ1bmN0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzE4NEUxRTE3QkVFMjJFMDA3Q0I2M0EgLyogSlNQ
cm9taXNlUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHJldmlzaW9uIDE2OTUxNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTZXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCwyNCArMzAsMTAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLVN0cnVj
dHVyZVNldDo6U3RydWN0dXJlU2V0KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi17Ci0gICAg
Y29weUZyb20ob3RoZXIpOwotfQotCi1TdHJ1Y3R1cmVTZXQmIFN0cnVjdHVyZVNldDo6b3BlcmF0
b3I9KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi17Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVy
KQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNz
YXJ5KCk7Ci0gICAgY29weUZyb20ob3RoZXIpOwotICAgIHJldHVybiAqdGhpczsKLX0KLQogdm9p
ZCBTdHJ1Y3R1cmVTZXQ6OmNsZWFyKCkKIHsKICAgICBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNl
c3NhcnkoKTsKLSAgICBzZXQoMCwgdHJ1ZSk7CisgICAgc2V0RW1wdHkoKTsKIH0KIAogYm9vbCBT
dHJ1Y3R1cmVTZXQ6OmFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTc1LDcgKzYxLDcgQEAg
Ym9vbCBTdHJ1Y3R1cmVTZXQ6OnJlbW92ZShTdHJ1Y3R1cmUqIHN0cgogewogICAgIGlmIChpc1Ro
aW4oKSkgewogICAgICAgICBpZiAoc2luZ2xlU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKSB7Ci0g
ICAgICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgICAgICAgICBzZXRFbXB0eSgpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
ODgsNyArNzQsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6cmVtb3ZlKFN0cnVjdHVyZSogc3RyCiAg
ICAgICAgIGxpc3QtPmxpc3QoKVtpXSA9IGxpc3QtPmxpc3QoKVstLWxpc3QtPm1fbGVuZ3RoXTsK
ICAgICAgICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkgewogICAgICAgICAgICAgT3V0T2ZMaW5lTGlz
dDo6ZGVzdHJveShsaXN0KTsKLSAgICAgICAgICAgIHNldCgwLCB0cnVlKTsKKyAgICAgICAgICAg
IHNldEVtcHR5KCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAt
MTQ0LDIzICsxMzAsOCBAQCB2b2lkIFN0cnVjdHVyZVNldDo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVy
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKGlzVGhpbigpKSB7Ci0gICAg
ICAgIGlmICghc2luZ2xlU3RydWN0dXJlKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IGlmIChvdGhlci5jb250YWluc091dE9mTGluZShzaW5nbGVTdHJ1Y3R1cmUoKSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAo
b3RoZXIuY29udGFpbnNPdXRPZkxpbmUobGlzdC0+bGlzdCgpW2ldKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVstLWxpc3Qt
Pm1fbGVuZ3RoXTsKLSAgICB9Ci0gICAgaWYgKCFsaXN0LT5tX2xlbmd0aCkKLSAgICAgICAgY2xl
YXIoKTsKKyAgICBDb250YWluc091dE9mTGluZSBjb250YWluc091dE9mTGluZShvdGhlcik7Cisg
ICAgZ2VuZXJpY0ZpbHRlcihjb250YWluc091dE9mTGluZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJl
U2V0OjpleGNsdWRlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCkBAIC0zMjEsMTMgKzI5Miw5
IEBAIGJvb2wgU3RydWN0dXJlU2V0Ojpjb250YWluc091dE9mTGluZShTdHIKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgU3RydWN0dXJlU2V0Ojpjb3B5RnJvbShjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKQordm9pZCBTdHJ1Y3R1cmVTZXQ6OmNvcHlGcm9tT3V0T2ZMaW5lKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpCiB7Ci0gICAgaWYgKG90aGVyLmlzVGhpbigpKSB7Ci0gICAgICAg
IG1fcG9pbnRlciA9IG90aGVyLm1fcG9pbnRlcjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAKKyAgICBBU1NFUlQoIW90aGVyLmlzVGhpbigpICYmIG90aGVyLm1fcG9pbnRlciAhPSByZXNl
cnZlZFZhbHVlKTsKICAgICBPdXRPZkxpbmVMaXN0KiBvdGhlckxpc3QgPSBvdGhlci5zdHJ1Y3R1
cmVMaXN0KCk7CiAgICAgT3V0T2ZMaW5lTGlzdCogbXlMaXN0ID0gT3V0T2ZMaW5lTGlzdDo6Y3Jl
YXRlKG90aGVyTGlzdC0+bV9sZW5ndGgpOwogICAgIG15TGlzdC0+bV9sZW5ndGggPSBvdGhlckxp
c3QtPm1fbGVuZ3RoOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVj
dHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxMSArMzMsMTUg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK25hbWVzcGFjZSBERkcgeworY2xhc3MgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTsKK30KKwogY2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBT
dHJ1Y3R1cmVTZXQoKQogICAgIHsKLSAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICBzZXRF
bXB0eSgpOwogICAgIH0KICAgICAKICAgICBTdHJ1Y3R1cmVTZXQoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpCkBAIC00NSw4ICs0OSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIHNldChzdHJ1Y3R1cmUpOwog
ICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7
Ci0gICAgU3RydWN0dXJlU2V0JiBvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7
CisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVTZXQoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cikKKyAgICB7CisgICAgICAgIGNvcHlGcm9tKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmVTZXQmIG9wZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKKyAg
ICAgICAgY29weUZyb20ob3RoZXIpOworICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQogICAg
IAogICAgIH5TdHJ1Y3R1cmVTZXQoKQogICAgIHsKQEAgLTY3LDcgKzgyLDEwIEBAIHB1YmxpYzoK
ICAgICAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIGlz
VGhpbigpICYmICFzaW5nbGVTdHJ1Y3R1cmUoKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBpc1Ro
aW4oKSAmJiAhc2luZ2xlU3RydWN0dXJlKCk7CisgICAgICAgIGlmIChyZXN1bHQpCisgICAgICAg
ICAgICBBU1NFUlQobV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OwogICAgIH0KICAgICAKICAgICBib29sIGFkZChTdHJ1Y3R1cmUqKTsKQEAgLTc4LDYg
Kzk2LDI4IEBAIHB1YmxpYzoKICAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmKTsK
ICAgICB2b2lkIGV4Y2x1ZGUoY29uc3QgU3RydWN0dXJlU2V0Jik7CiAgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNGaWx0ZXIoRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGlmIChpc1RoaW4oKSkgeworICAgICAgICAgICAgaWYgKCFz
aW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBp
ZiAoZnVuY3RvcihzaW5nbGVTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgT3V0T2ZMaW5lTGlzdCogbGlzdCA9IHN0cnVjdHVyZUxpc3QoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPm1fbGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgIGlmIChmdW5jdG9yKGxpc3QtPmxpc3QoKVtpXSkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBsaXN0LT5saXN0KClbaS0tXSA9IGxpc3QtPmxpc3QoKVst
LWxpc3QtPm1fbGVuZ3RoXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWxpc3QtPm1fbGVuZ3Ro
KQorICAgICAgICAgICAgY2xlYXIoKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBpc1N1YnNldE9m
KGNvbnN0IFN0cnVjdHVyZVNldCYpIGNvbnN0OwogICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CiAgICAgewpAQCAtMTI0LDE2ICsxNjQsNDQgQEAg
cHVibGljOgogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgREZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworICAgIAog
ICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdGhpbkZsYWcgPSAxOwogICAgIHN0YXRpYyBjb25z
dCB1aW50cHRyX3QgcmVzZXJ2ZWRGbGFnID0gMjsKLSAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IGZsYWdzID0gMzsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90IGZsYWdzID0gdGhpbkZsYWcg
fCByZXNlcnZlZEZsYWc7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZFZhbHVl
ID0gNDsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0U3RhcnRpbmdTaXplID0g
NDsKICAgICAKICAgICBib29sIGFkZE91dE9mTGluZShTdHJ1Y3R1cmUqKTsKICAgICBib29sIGNv
bnRhaW5zT3V0T2ZMaW5lKFN0cnVjdHVyZSopIGNvbnN0OwotICAgIHZvaWQgY29weUZyb20oY29u
c3QgU3RydWN0dXJlU2V0Jik7CisgICAgCisgICAgY2xhc3MgQ29udGFpbnNPdXRPZkxpbmUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgQ29udGFpbnNPdXRPZkxpbmUoY29uc3QgU3RydWN0dXJlU2V0
JiBzZXQpCisgICAgICAgICAgICA6IG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3NldC5jb250YWluc091dE9mTGluZShzdHJ1
Y3R1cmUpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBtX3NldDsKKyAgICB9OworCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGNvcHlGcm9tKGNv
bnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAob3RoZXIuaXNUaGlu
KCkgfHwgb3RoZXIubV9wb2ludGVyID09IHJlc2VydmVkVmFsdWUpIHsKKyAgICAgICAgICAgIGJv
b2wgdmFsdWUgPSBnZXRSZXNlcnZlZEZsYWcoKTsKKyAgICAgICAgICAgIG1fcG9pbnRlciA9IG90
aGVyLm1fcG9pbnRlcjsKKyAgICAgICAgICAgIHNldFJlc2VydmVkRmxhZyh2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY29weUZyb21PdXRPZkxpbmUob3Ro
ZXIpOworICAgIH0KKyAgICB2b2lkIGNvcHlGcm9tT3V0T2ZMaW5lKGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpOwogICAgIAogICAgIGNsYXNzIE91dE9mTGluZUxpc3QgewogICAgIHB1YmxpYzoK
QEAgLTE1Miw5ICsyMjAsOSBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBtX2NhcGFjaXR5
OwogICAgIH07CiAgICAgCi0gICAgdm9pZCBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3Nhcnko
KQorICAgIEFMV0FZU19JTkxJTkUgdm9pZCBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3Nhcnko
KQogICAgIHsKLSAgICAgICAgaWYgKCFpc1RoaW4oKSkKKyAgICAgICAgaWYgKCFpc1RoaW4oKSAm
JiBtX3BvaW50ZXIgIT0gcmVzZXJ2ZWRWYWx1ZSkKICAgICAgICAgICAgIE91dE9mTGluZUxpc3Q6
OmRlc3Ryb3koc3RydWN0dXJlTGlzdCgpKTsKICAgICB9CiAgICAgCkBAIC0xODUsMTAgKzI1Mywy
MiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgc2V0KGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHN0cnVjdHVyZXMpLCBmYWxzZSk7CiAgICAgfQorICAgIHZvaWQgc2V0RW1wdHkoKQorICAgIHsK
KyAgICAgICAgc2V0KDAsIHRydWUpOworICAgIH0KICAgICB2b2lkIHNldCh1aW50cHRyX3QgcG9p
bnRlciwgYm9vbCBzaW5nbGVTdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBtX3BvaW50ZXIgPSBw
b2ludGVyIHwgKHNpbmdsZVN0cnVjdHVyZSA/IHRoaW5GbGFnIDogMCkgfCAobV9wb2ludGVyICYg
cmVzZXJ2ZWRGbGFnKTsKICAgICB9CisgICAgYm9vbCBnZXRSZXNlcnZlZEZsYWcoKSBjb25zdCB7
IHJldHVybiBtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWc7IH0KKyAgICB2b2lkIHNldFJlc2VydmVk
RmxhZyhib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAg
bV9wb2ludGVyIHw9IHJlc2VydmVkRmxhZzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9w
b2ludGVyICY9IH5yZXNlcnZlZEZsYWc7CisgICAgfQogCiAgICAgdWludHB0cl90IG1fcG9pbnRl
cjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2
ICsxMTQsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBpbmRl
eEluQmxvY2spOwogICAgIGJvb2wgZXhlY3V0ZUVmZmVjdHModW5zaWduZWQgY2xvYmJlckxpbWl0
LCBOb2RlKik7CiAgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgpAQCAtMTQ4LDcgKzE0OSwxNCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZvaWQg
Y2xvYmJlcldvcmxkKGNvbnN0IENvZGVPcmlnaW4mLCB1bnNpZ25lZCBpbmRleEluQmxvY2spOwog
ICAgIHZvaWQgY2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckFsbFZhbHVlcyh1bnNp
Z25lZCBpbmRleEluQmxvY2ssIEZ1bmN0b3ImKTsKKyAgICAKICAgICB2b2lkIGNsb2JiZXJTdHJ1
Y3R1cmVzKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CisgICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlv
bih1bnNpZ25lZCBpbmRleEluQmxvY2ssIFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0byk7
CisgICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbnModW5zaWduZWQgaW5kZXhJbkJsb2NrLCBjb25z
dCBUcmFuc2l0aW9uVmVjdG9yJik7CisgICAgdm9pZCBzZXREaWRDbG9iYmVyKCk7CiAgICAgCiAg
ICAgZW51bSBCb29sZWFuUmVzdWx0IHsKICAgICAgICAgVW5rbm93bkJvb2xlYW5SZXN1bHQsCkBA
IC0xNjAsNyArMTY4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEJ1aWx0SW5Db25zdGFudChO
b2RlKiBub2RlLCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
YWJzdHJhY3RWYWx1ZSA9IGZvck5vZGUobm9kZSk7Ci0gICAgICAgIGFic3RyYWN0VmFsdWUuc2V0
KG1fZ3JhcGgsIHZhbHVlKTsKKyAgICAgICAgYWJzdHJhY3RWYWx1ZS5zZXQobV9ncmFwaCwgdmFs
dWUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICBhYnN0cmFjdFZh
bHVlLmZpeFR5cGVGb3JSZXByZXNlbnRhdGlvbihub2RlKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDExICs2MiwxNyBAQCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6
CiAgICAgfQogCiAgICAgLy8gTmV4dCBjaGVjayBpZiB3ZSBjYW4gZm9sZCBiZWNhdXNlIHdlIGtu
b3cgdGhhdCB0aGUgc291cmNlIGlzIGFuIG9iamVjdCBvciBzdHJpbmcgYW5kIGRvZXMgbm90IGVx
dWFsIHVuZGVmaW5lZC4KLSAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKQot
ICAgICAgICAmJiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkg
ewotICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fY3VycmVudEtub3duU3Ry
dWN0dXJlLnNpbmdsZXRvbigpOwotICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bWFzcXVlcmFkZXNB
c1VuZGVmaW5lZChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYykpCi0gICAgICAgICAgICAmJiBzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpICE9IFN0
cmluZ1R5cGUpCisgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHZhbHVlLm1fdHlwZSkgJiYgIXZh
bHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpIHsKKyAgICAgICAgYm9vbCBhbGxUcnVlID0gdHJ1ZTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJl
W2ldOworICAgICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZCht
X2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYykpCisgICAg
ICAgICAgICAgICAgfHwgc3RydWN0dXJlLT50eXBlSW5mbygpLnR5cGUoKSA9PSBTdHJpbmdUeXBl
KSB7CisgICAgICAgICAgICAgICAgYWxsVHJ1ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhbGxUcnVlKQogICAg
ICAgICAgICAgcmV0dXJuIERlZmluaXRlbHlUcnVlOwogICAgIH0KICAgICAKQEAgLTEwNSw5ICsx
MTEsMTIgQEAgdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnZlcmlmeUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKK3Zv
aWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnZlcmlmeUVkZ2UoTm9k
ZSogbm9kZSwgRWRnZSBlZGdlKQogewotICAgIFJFTEVBU0VfQVNTRVJUKCEoZm9yTm9kZShlZGdl
KS5tX3R5cGUgJiB+dHlwZUZpbHRlckZvcihlZGdlLnVzZUtpbmQoKSkpKTsKKyAgICBpZiAoIShm
b3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVyRm9yKGVkZ2UudXNlS2luZCgpKSkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBERkdfQ1JBU0gobV9ncmFwaCwgbm9kZSwgdG9DU3Ry
aW5nKCJFZGdlIHZlcmlmaWNhdGlvbiBlcnJvcjogIiwgbm9kZSwgIi0+IiwgZWRnZSwgIiB3YXMg
ZXhwZWN0ZWQgdG8gaGF2ZSB0eXBlICIsIFNwZWN1bGF0aW9uRHVtcCh0eXBlRmlsdGVyRm9yKGVk
Z2UudXNlS2luZCgpKSksICIgYnV0IGhhcyB0eXBlICIsIFNwZWN1bGF0aW9uRHVtcChmb3JOb2Rl
KGVkZ2UpLm1fdHlwZSkpLmRhdGEoKSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgpAQCAtMTI1NSw3ICsxMjY0LDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAg
IG1fZ3JhcGgsCiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpLT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRp
b24obm9kZS0+aW5kZXhpbmdUeXBlKCkpKTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0
dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3QXJyYXlC
dWZmZXI6CkBAIC0xMjYzLDEzICsxMjcxLDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCiAgICAgICAgICAgICBt
X2dyYXBoLAogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2lu
LnNlbWFudGljKS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9u
KG5vZGUtPmluZGV4aW5nVHlwZSgpKSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVy
ZXModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBOZXdBcnJheVdpdGhTaXplOgog
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLnNl
dFR5cGUoU3BlY0FycmF5KTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgTmV3VHlwZWRBcnJheToKQEAg
LTEyODcsMTIgKzEyOTMsMTAgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgbV9ncmFwaCwKICAgICAgICAgICAgIG1fZ3JhcGguZ2xvYmFsT2Jq
ZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUoCiAgICAg
ICAgICAgICAgICAgbm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOwotICAgICAgICBtX3N0YXRlLnNl
dEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAg
IGNhc2UgTmV3UmVnZXhwOgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dy
YXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1Y3R1
cmUoKSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBUb1RoaXM6IHsKQEAgLTEzMjAsMTMgKzEz
MjQsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIGNh
c2UgTmV3T2JqZWN0OgogICAgICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
IG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAg
ICAKICAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0
KAogICAgICAgICAgICAgbV9ncmFwaCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwotICAgICAgICBtX3N0
YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBGdW5jdGlvblJlZW50cnlXYXRjaHBvaW50OgpAQCAtMTM1OSw4ICsxMzYxLDkgQEAg
Ym9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAvLyBvZiBH
ZXRNeUFyZ3VtZW50c0xlbmd0aCwgYmVjYXVzZSBHZXRNeUFyZ3VtZW50c0xlbmd0aCBpcyBhIGNs
b2JiZXJpbmcgb3BlcmF0aW9uLgogICAgICAgICAvLyBXZSBwZXJmb3JtIGZ1cnRoZXIgb3B0aW1p
emF0aW9ucyBvbiB0aGlzIGxhdGVyIG9uLgogICAgICAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFu
dGljLmlubGluZUNhbGxGcmFtZSkgewotICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCi0g
ICAgICAgICAgICAgICAgbV9ncmFwaCwganNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlu
bGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgIHNldENv
bnN0YW50KAorICAgICAgICAgICAgICAgIG5vZGUsIGpzTnVtYmVyKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkgLSAxKSk7CisgICAgICAgICAg
ICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7IC8vIFByZXRlbmQgdGhhdCB3ZSBjbG9iYmVy
ZWQgdG8gcHJldmVudCBjb25zdGFudCBmb2xkaW5nLgogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjSW50MzIpOwogICAgICAgICBub2RlLT5zZXRD
YW5FeGl0KApAQCAtMTQ1Niw3ICsxNDU5LDEyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlm
IChpc0NlbGxTcGVjdWxhdGlvbihub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpKSkgewotICAg
ICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIHVzZSBvZiBv
bmx5U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBHZXRCeUlkU3RhdHVz
IHRoZSBhYmlsaXR5CisgICAgICAgICAgICAvLyB0byBjb21wdXRlIHRoaW5ncyBiYXNlZCBvbiBh
IFN0cnVjdHVyZVNldCwgYW5kIHRoZW4gdG8gZmFjdG9yIEJ5dGVDb2RlUGFyc2VyJ3MKKyAgICAg
ICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJhdGUgY29kZSBiYXNlZCBvbiBhIEdldEJ5SWRTdGF0
dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNvIHRoYXQKKyAgICAgICAgICAgIC8vIENvbnN0YW50
Rm9sZGluZ1BoYXNlIGNhbiB1c2UgaXQuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5vbmx5U3Ry
dWN0dXJlKCkpIHsKICAgICAgICAgICAgICAgICBHZXRCeUlkU3RhdHVzIHN0YXR1cyA9IEdldEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92bSwg
c3RydWN0dXJlLAogICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmlkZW50aWZpZXJzKClbbm9k
ZS0+aWRlbnRpZmllck51bWJlcigpXSk7CkBAIC0xNDY2LDE0ICsxNDc0LDE3IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSk7CiAgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVCghc3RhdHVzWzBdLmNoYWluKCkpOwogICAgICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpCisgICAg
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKS5pc0NlbGwoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3Rh
dHVzWzBdLnNwZWNpZmljVmFsdWUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRDb25zdGFudChub2RlLCBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICAg
ICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkpOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0
dXJlcyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQpAQCAtMTUwMiw0NCArMTUxMywyOCBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAm
IH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3Vy
ZWQgdGhpcy4KIAogICAgICAgICBTdHJ1Y3R1cmVTZXQmIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNl
dCgpOwotCi0gICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNl
dE9mKHNldCkpIHsKKyAgICAgICAgCisgICAgICAgIC8vIEl0J3MgaW50ZXJlc3RpbmcgdGhhdCB3
ZSBjb3VsZCBoYXZlIHByb3ZlbiB0aGF0IHRoZSBvYmplY3QgaGFzIGEgbGFyZ2VyIHN0cnVjdHVy
ZSBzZXQKKyAgICAgICAgLy8gdGhhdCBpbmNsdWRlcyB0aGUgc2V0IHdlJ3JlIHRlc3RpbmcuIElu
IHRoYXQgY2FzZSB3ZSBjb3VsZCBtYWtlIHRoZSBzdHJ1Y3R1cmUgY2hlY2sKKyAgICAgICAgLy8g
bW9yZSBlZmZpY2llbnQuIFdlIGN1cnJlbnRseSBkb24ndC4KKyAgICAgICAgCisgICAgICAgIGlm
ICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogCiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1ZSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0
SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0KLSAgICAgICAgLy8gSWYgdGhpcyBzdHJ1Y3R1cmUgY2hl
Y2sgaXMgYXR0ZW1wdGluZyB0byBwcm92ZSBrbm93bGVkZ2UgYWxyZWFkeSBoZWxkIGluCi0gICAg
ICAgIC8vIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBzZXQgdGhlbiB0aGUgY29uc3RhbnQg
Zm9sZGluZyBwaGFzZSBzaG91bGQKLSAgICAgICAgLy8gdHVybiB0aGlzIGludG8gYSB3YXRjaHBv
aW50IGluc3RlYWQuCi0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
LmlzU3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgJiYgdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkgewotICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENv
bnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwgdmFsdWUubV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQogCiAgICAgICAgIGZpbHRlcih2YWx1ZSwgc2V0KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0g
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0K
LSAgICAgICAgZmlsdGVyKHZhbHVlLCBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1fc3Rh
dGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Ci0gICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3Ry
dWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKLSAgICAgICAgaWYgKCFmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc0NsZWFyKCkpIHsK
LSAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgICAg
ICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwotICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZl
U3RydWN0dXJlcyh0cnVlKTsKKyAgICAgICAgaWYgKCFmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5pc0NsZWFyKCkpIHsKKyAgICAgICAgICAgIG9ic2VydmVUcmFuc2l0aW9uKAor
ICAgICAgICAgICAgICAgIGNsb2JiZXJMaW1pdCwgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91
cywgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBub2RlLT50cmFuc2l0aW9uKCktPm5leHQpOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR2V0QnV0dGVyZmx5OgpAQCAtMTU5OCw3ICsx
NTkzLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZmlsdGVyQXJyYXlNb2Rlcyhub2RlLT5j
aGlsZDEoKSwgbm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNzRmlsdGVyaW5nKCkp
OwotICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgY2FzZSBBcnJheWlmeTogewpAQCAtMTYxMSwxOSArMTYwNSw0MyBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG5vZGUtPnNl
dENhbkV4aXQodHJ1ZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7
CiAgICAgICAgIGZpbHRlckFycmF5TW9kZXMobm9kZS0+Y2hpbGQxKCksIG5vZGUtPmFycmF5TW9k
ZSgpLmFycmF5TW9kZXNUaGF0UGFzc0ZpbHRlcmluZygpKTsKLSAgICAgICAgbV9zdGF0ZS5zZXRI
YXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQXJy
YXlpZnlUb1N0cnVjdHVyZTogewogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5v
ZGUobm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBTdHJ1Y3R1cmVTZXQgc2V0ID0gbm9kZS0+c3Ry
dWN0dXJlKCk7Ci0gICAgICAgIGlmICh2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KQotICAgICAgICAgICAgfHwgdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaXNTdWJzZXRPZihzZXQpKQorICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihTdHJ1Y3R1cmVTZXQobm9kZS0+c3RydWN0dXJlKCkpKSkKICAgICAgICAgICAgIG1fc3Rh
dGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQodHJ1
ZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1pdCk7Ci0gICAgICAgIGZp
bHRlcih2YWx1ZSwgc2V0KTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVl
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIGhhdmUgYSBidW5jaCBvZiBvcHRpb25zIG9mIGhv
dyB0byBleHByZXNzIHRoZSBhYnN0cmFjdCBzZXQgYXQgdGhpcyBwb2ludC4gTGV0IHNldCBTCisg
ICAgICAgIC8vIGJlIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0aGF0IHRoZSB2YWx1ZSBoYWQgYmVm
b3JlIGNsb2JiZXJpbmcgYW5kIGFzc3VtZSB0aGF0IGFsbCBvZgorICAgICAgICAvLyB0aGVtIGFy
ZSB3YXRjaGFibGUuIFRoZSBuZXcgdmFsdWUgc2hvdWxkIGJlIHRoZSBsZWFzdCBleHByZXNzaWJs
ZSB1cHBlciBib3VuZCBvZiB0aGUKKyAgICAgICAgLy8gaW50ZXJzZWN0aW9uIG9mICJ2YWx1ZXMg
dGhhdCBjdXJyZW50bHkgaGF2ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKSIgYW5kICJ2
YWx1ZXMKKyAgICAgICAgLy8gdGhhdCBoYXZlIHN0cnVjdHVyZSBpbiBTIHBsdXMgYW55IHN0cnVj
dHVyZSB0cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9tIFMiLiBBc3N1bWUgdGhhdAorICAgICAgICAv
LyBub2RlLT5zdHJ1Y3R1cmUoKSBpcyBub3QgaW4gUyBidXQgaXQgaXMgdHJhbnNpdGlvbi1yZWFj
aGFibGUgZnJvbSBTLiBUaGVuIHdlIHdvdWxkCisgICAgICAgIC8vIGxpa2UgdG8gc2F5IHRoYXQg
dGhlIHJlc3VsdCBpcyAidmFsdWVzIHRoYXQgaGF2ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1
cmUoKSB1bnRpbAorICAgICAgICAvLyB3ZSBpbnZhbGlkYXRlIiwgYnV0IHRoZXJlIGlzIG5vIHdh
eSB0byBleHByZXNzIHRoaXMgdXNpbmcgdGhlIEFic3RyYWN0VmFsdWUgc3ludGF4LiBTbworICAg
ICAgICAvLyB3ZSBtdXN0IGNob29zZSBiZXR3ZWVuOgorICAgICAgICAvLworICAgICAgICAvLyAx
KSAidmFsdWVzIHRoYXQgY3VycmVudGx5IGhhdmUgc3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJl
KCkiLiBUaGlzIGlzIGEgdmFsaWQKKyAgICAgICAgLy8gICAgc3VwZXJzZXQgb2YgdGhlIHZhbHVl
IHRoYXQgd2UgcmVhbGx5IHdhbnQsIGFuZCBpdCdzIHNwZWNpZmljIGVub3VnaCB0byBzYXRpc2Z5
IHRoZQorICAgICAgICAvLyAgICBwcmVjb25kaXRpb25zIG9mIHRoZSBhcnJheSBhY2Nlc3MgdGhh
dCB0aGlzIGlzIGd1YXJkaW5nLiBJdCdzIGFsc28gc3BlY2lmaWMgZW5vdWdoCisgICAgICAgIC8v
ICAgIHRvIGFsbG93IHJlbGV2YW50IG9wdGltaXphdGlvbnMgaW4gdGhlIGNhc2UgdGhhdCB3ZSBk
aWRuJ3QgaGF2ZSBhIGNvbnRyYWRpY3Rpb24KKyAgICAgICAgLy8gICAgbGlrZSBpbiB0aGlzIGV4
YW1wbGUuIE5vdGljZSB0aGF0IGluIHRoZSBhYnNjZW5jZSBvZiBhbnkgY29udHJhZGljdGlvbiwg
dGhpcyByZXN1bHQKKyAgICAgICAgLy8gICAgaXMgcHJlY2lzZSByYXRoZXIgdGhhbiBiZWluZyBh
IGNvbnNlcnZhdGl2ZSBMVUIuCisgICAgICAgIC8vCisgICAgICAgIC8vIDIpICJ2YWx1ZXMgdGhh
dCBjdXJyZW50bHkgaGF2YSBzdHJ1Y3R1cmUgaW4gUyBwbHVzIGFueSBzdHJ1Y3R1cmUgdHJhbnNp
dGlvbi1yZWFjaGFibGUKKyAgICAgICAgLy8gICAgZnJvbSBTIi4gVGhpcyBpcyBhbHNvIGEgdmFs
aWQgc3VwZXJzZXQgb2YgdGhlIHZhbHVlIHRoYXQgd2UgcmVhbGx5IHdhbnQsIGJ1dCBpdCdzCisg
ICAgICAgIC8vICAgIG5vdCBzcGVjaWZpYyBlbm91Z2ggdG8gc2F0aXNmeSB0aGUgcHJlY29uZGl0
aW9ucyBvZiB0aGUgYXJyYXkgYWNjZXNzIHRoYXQgdGhpcyBpcworICAgICAgICAvLyAgICBndWFy
ZGluZyAtIHNvIHBsYXlpbmcgc3VjaCBzaGVuYW5pZ2FucyB3b3VsZCBwcmVjbHVkZSB1cyBmcm9t
IGhhdmluZyBhc3NlcnRpb25zIG9uCisgICAgICAgIC8vICAgIHRoZSB0eXBpbmcgcHJlY29uZGl0
aW9ucyBvZiBhbnkgYXJyYXkgYWNjZXNzZXMuIFRoaXMgd291bGQgYWxzbyBub3QgYmUgYSBkZXNp
cmFibGUKKyAgICAgICAgLy8gICAgYW5zd2VyIGluIHRoZSBhYnNlbmNlIG9mIGEgY29udHJhZGlj
dGlvbi4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZSB0aGF0IGl0J3MgdGVtcHRpbmcgdG8g
c2ltcGx5IHNheSB0aGF0IHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgQk9UVE9NIGJlY2F1c2Ugb2YK
KyAgICAgICAgLy8gdGhlIGNvbnRyYWRpY3Rpb24uIFRoYXQgd291bGQgYmUgd3JvbmcsIHNpbmNl
IHdlIGhhdmVuJ3QgaGl0IGFuIGludmFsaWRhdGlvbiBwb2ludCwKKyAgICAgICAgLy8geWV0Lgor
ICAgICAgICB2YWx1ZS5zZXQobV9ncmFwaCwgbm9kZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAgICAgY2FzZSBHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlOgpAQCAtMTY1
MSw3ICsxNjY5LDExIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2UgZmls
dGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCi0gICAgICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAg
ICAgICAvLyBUaGlzIHNob3VsZCBqdXN0IGZpbHRlciBkb3duIHRoZSBjYXNlcyBpbiBNdWx0aUdl
dEJ5T2Zmc2V0LiBJZiB0aGF0IHJlc3VsdHMgaW4gYWxsCisgICAgICAgIC8vIGNhc2VzIGhhdmlu
ZyB0aGUgc2FtZSBvZmZzZXQgdGhlbiB3ZSBzaG91bGQgc3RyZW5ndGggcmVkdWNlIGl0IHRvIGEg
Q2hlY2tTdHJ1Y3R1cmUgKworICAgICAgICAvLyBHZXRCeU9mZnNldC4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgICAgICBpZiAo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkp
IHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGkt
LTspIHsKICAgICAgICAgICAgICAgICBjb25zdCBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBAIC0xNjg4LDcgKzE3MTAs
MTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBB
YnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBB
U1NFUlQoISh2YWx1ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hv
dWxkIGhhdmUgYWxyZWFkeSBlbnN1cmVkIHRoaXMuCiAKLSAgICAgICAgaWYgKFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRo
aXMgc2hvdWxkIGp1c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGluIE11bHRpUHV0QnlPZmZzZXQu
IElmIHRoYXQgcmVzdWx0cyBpbiBlaXRoZXIKKyAgICAgICAgLy8gb25lIGNhc2UsIG9yIG5vdGhp
bmcgYnV0IHJlcGxhY2UgY2FzZXMgYW5kIHRoZXkgaGF2ZSB0aGUgc2FtZSBvZmZzZXQsIHRoZW4g
d2Ugc2hvdWxkCisgICAgICAgIC8vIGp1c3Qgc3RyZW5ndGggcmVkdWNlIGl0IHRvIHRoZSBhcHBy
b3ByaWF0ZSBjb21iaW5hdGlvbiBvZiBDaGVja1N0cnVjdHVyZSwKKyAgICAgICAgLy8gW1JlXUFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlLCBQdXRTdHJ1Y3R1cmUsIGFuZCBQdXRCeU9mZnNldC4KKyAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQor
ICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZS5vbmx5
U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICBjb25zdCBQdXRCeUlkVmFyaWFudCYg
dmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CkBAIC0x
Njk4LDcgKzE3MjUsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpS
ZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVl
KTsKICAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KQEAgLTE3MDcsNyArMTczMyw2IEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBjbG9iYmVy
U3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwogICAgICAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnNldChtX2dyYXBoLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAg
IG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgZG9uZSA9
IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xNzE1LDI1
ICsxNzQwLDI0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2xvYmJl
clN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAgCisgICAgICAgIFN0cnVjdHVyZVNl
dCBvbGRTZXQ7CiAgICAgICAgIFN0cnVjdHVyZVNldCBuZXdTZXQ7CisgICAgICAgIFRyYW5zaXRp
b25WZWN0b3IgdHJhbnNpdGlvbnM7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11
bHRpUHV0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICBjb25zdCBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0QnlPZmZzZXRE
YXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0
QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5zdHJ1Y3R1cmUoKSkpCi0gICAgICAg
ICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBBU1NFUlQodmFyaWFu
dC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pOwotICAgICAgICAgICAgaWYg
KHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmNvbnRhaW5zKHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpKQorICAgICAgICAgICAgb2xkU2V0LmFkZCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsK
KyAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNp
dGlvbikgeworICAgICAgICAgICAgICAgIHRyYW5zaXRpb25zLmFwcGVuZChUcmFuc2l0aW9uKHZh
cmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKICAgICAgICAg
ICAgICAgICBuZXdTZXQuYWRkKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJ
ZFZhcmlhbnQ6OlJlcGxhY2UpOworICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFyaWFudC5v
bGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCi0gICAg
ICAgIC8vIFVzZSBmaWx0ZXIodmFsdWUsIHNldCkgYXMgYSB3YXkgb2Ygc2V0dGluZyB0aGUgc3Ry
dWN0dXJlIHNldC4gVGhpcyB3b3JrcyBiZWNhdXNlCi0gICAgICAgIC8vIHdlIHdvdWxkIGhhdmUg
YWxyZWFkeSBtYWRlIHRoZSBzZXQgYmUgVE9QIGJlZm9yZSB0aGlzLiBGaWx0ZXJpbmcgdG9wIGlz
IGFub3RoZXIgCi0gICAgICAgIC8vIHdheSBvZiBzZXR0aW5nLgotICAgICAgICBmaWx0ZXIobm9k
ZS0+Y2hpbGQxKCksIG5ld1NldCk7CisgICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgb2xk
U2V0KTsKKyAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb25zKGNsb2JiZXJMaW1pdCwgdHJhbnNpdGlv
bnMpOworICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgbmV3U2V0
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIApAQCAtMTc2Nyw3ICsxNzkxLDEyIEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFB1dEJ5SWRG
bHVzaDoKICAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQo
dHJ1ZSk7Ci0gICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKSkgeworICAgICAgICAvLyBUaGlzIHVzZSBv
ZiBvbmx5U3RydWN0dXJlKCkgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGdpdmluZyBQdXRCeUlkU3Rh
dHVzIHRoZSBhYmlsaXR5CisgICAgICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9uIGEg
U3RydWN0dXJlU2V0LCBhbmQgdGhlbiB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncworICAgICAg
ICAvLyBhYmlsaXR5IHRvIGdlbmVyYXRlIGNvZGUgYmFzZWQgb24gYSBQdXRCeUlkU3RhdHVzIG91
dCBvZiBCeXRlQ29kZVBhcnNlciBzbyB0aGF0CisgICAgICAgIC8vIENvbnN0YW50Rm9sZGluZ1Bo
YXNlIGNhbiB1c2UgaXQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzMyMjkKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUub25seVN0cnVjdHVyZSgpKSB7CiAgICAg
ICAgICAgICBQdXRCeUlkU3RhdHVzIHN0YXR1cyA9IFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLAogICAgICAgICAgICAgICAgIG1fZ3JhcGgu
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyksCkBAIC0xNzc4LDEzICsxODA3
LDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAg
ICAgICAgICBpZiAoc3RhdHVzWzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
ewogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQxKCksIHN0cnVjdHVyZSk7
CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAoc3RhdHVzWzBdLmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewor
ICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpU
cmFuc2l0aW9uCisgICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZS0+dHJhbnNpdGlvbldh
dGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKICAg
ICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgsIHN0
YXR1c1swXS5uZXdTdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0
SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTE4MzEsNyArMTg2MCw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHkKICAgICAgICAgCiAgICAgY2FzZSBVcHNpbG9uOiB7CiAgICAgICAgIG1f
c3RhdGUuY3JlYXRlVmFsdWVGb3JOb2RlKG5vZGUtPnBoaSgpKTsKLSAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBmb3JOb2RlKG5v
ZGUpID0gdmFsdWU7CiAgICAgICAgIGZvck5vZGUobm9kZS0+cGhpKCkpID0gdmFsdWU7CiAgICAg
ICAgIGJyZWFrOwpAQCAtMTg1NSw2ICsxODg0LDggQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgICAgICAKICAgICBjYXNlIEludmFsaWRhdGlvblBvaW50Ogog
ICAgICAgICBub2RlLT5zZXRDYW5FeGl0KHRydWUpOworICAgICAgICBmb3JBbGxWYWx1ZXMoY2xv
YmJlckxpbWl0LCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnRGb3IpOwor
ICAgICAgICBtX3N0YXRlLnNldFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1cmVzQXJlV2F0
Y2hlZCk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDaGVja1dhdGNoZG9nVGltZXI6CkBA
IC0xOTM2LDYgKzE5NjcsNyBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5CiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJDYXB0dXJlZFZhcnMoY29uc3Qg
Q29kZU9yaWdpbiYgY29kZU9yaWdpbikKIHsKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1Jl
Z2lvbigiREZHIEFJIENsb2JiZXIgQ2FwdHVyZWQgVmFycyIpOwogICAgIGlmIChjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICBjb25zdCBCaXRWZWN0b3ImIGNhcHR1cmVkVmFy
cyA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYXB0dXJlZFZhcnM7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSBjYXB0dXJlZFZhcnMuc2l6ZSgpOyBpLS07KSB7CkBAIC0xOTU3LDQwICsx
OTg5LDgwIEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Ci12b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9iYmVyU3RydWN0dXJlcyh1bnNpZ25lZCBjbG9i
YmVyTGltaXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKAorICAgIHVuc2lnbmVkIGNs
b2JiZXJMaW1pdCwgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAgICBpZiAoIW1fc3RhdGUuaGF2ZVN0
cnVjdHVyZXMoKSkKLSAgICAgICAgcmV0dXJuOworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5n
UmVnaW9uKCJERkcgQUkgRm9yIEFsbCBWYWx1ZXMiKTsKICAgICBpZiAoY2xvYmJlckxpbWl0ID49
IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpKQogICAgICAgICBjbG9iYmVyTGltaXQgPSBtX3N0YXRl
LmJsb2NrKCktPnNpemUoKTsKICAgICBlbHNlCiAgICAgICAgIGNsb2JiZXJMaW1pdCsrOwogICAg
IEFTU0VSVChjbG9iYmVyTGltaXQgPD0gbV9zdGF0ZS5ibG9jaygpLT5zaXplKCkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSBjbG9iYmVyTGltaXQ7IGktLTspCi0gICAgICAgIGZvck5vZGUobV9zdGF0
ZS5ibG9jaygpLT5hdChpKSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgZnVuY3Rvcihm
b3JOb2RlKG1fc3RhdGUuYmxvY2soKS0+YXQoaSkpKTsKICAgICBpZiAobV9ncmFwaC5tX2Zvcm0g
PT0gU1NBKSB7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9zdGF0
ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsKICAgICAgICAgSGFzaFNldDxOb2Rl
Kj46Oml0ZXJhdG9yIGVuZCA9IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkLmVuZCgp
OwogICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgIGZvck5v
ZGUoKml0ZXIpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgICAgICBmdW5jdG9yKGZvck5v
ZGUoKml0ZXIpKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVz
KCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMo
KS5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgICAgICBmdW5jdG9yKG1fc3Rh
dGUudmFyaWFibGVzKCkuYXJndW1lbnQoaSkpOwogICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRl
LnZhcmlhYmxlcygpLm51bWJlck9mTG9jYWxzKCk7IGktLTspCi0gICAgICAgIG1fc3RhdGUudmFy
aWFibGVzKCkubG9jYWwoaSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKLSAgICBtX3N0YXRlLnNldEhh
dmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICBmdW5jdG9yKG1fc3RhdGUudmFyaWFibGVzKCku
bG9jYWwoaSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3Zv
aWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmNsb2JiZXJTdHJ1Y3R1
cmVzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGlu
Z1JlZ2lvbigiREZHIEFJIENsb2JiZXIgU3RydWN0dXJlcyIpOworICAgIGZvckFsbFZhbHVlcyhj
bG9iYmVyTGltaXQsIEFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVzRm9yKTsKKyAgICBz
ZXREaWRDbG9iYmVyKCk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBl
Pgordm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRy
YW5zaXRpb24oCisgICAgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBTdHJ1Y3R1cmUqIGZyb20sIFN0
cnVjdHVyZSogdG8pCit7CisgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyIHRy
YW5zaXRpb25PYnNlcnZlcihmcm9tLCB0byk7CisgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1p
dCwgdHJhbnNpdGlvbk9ic2VydmVyKTsKKyAgICBzZXREaWRDbG9iYmVyKCk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6b2JzZXJ2ZVRyYW5zaXRpb25zKAorICAgIHVuc2lnbmVkIGNs
b2JiZXJMaW1pdCwgY29uc3QgVHJhbnNpdGlvblZlY3RvciYgdmVjdG9yKQoreworICAgIEFic3Ry
YWN0VmFsdWU6OlRyYW5zaXRpb25zT2JzZXJ2ZXIgdHJhbnNpdGlvbnNPYnNlcnZlcih2ZWN0b3Ip
OworICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIHRyYW5zaXRpb25zT2JzZXJ2ZXIpOwor
ICAgIHNldERpZENsb2JiZXIoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0
ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpzZXRE
aWRDbG9iYmVyKCkKK3sKICAgICBtX3N0YXRlLnNldERpZENsb2JiZXIodHJ1ZSk7CisgICAgbV9z
dGF0ZS5zZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoU3RydWN0dXJlc0FyZUNsb2JiZXJlZCk7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIGNvbnN0X2Nhc3Q8QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT4qPih0aGlzKS0+ZHVtcChvdXQpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0
YXRlVHlwZT4KIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkKIHsKICAgICBDb21tYVByaW50ZXIgY29tbWEoIiAiKTsKKyAg
ICBIYXNoU2V0PE5vZGUqPiBzZWVuOwogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsK
ICAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCkt
PnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOwogICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0
b3IgZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CiAgICAgICAg
IGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0g
Kml0ZXI7CisgICAgICAgICAgICBzZWVuLmFkZChub2RlKTsKICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS5pc0Ns
ZWFyKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0xOTk5LDExICsyMDcxLDI1IEBA
IHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3N0YXRlLmJsb2NrKCktPnNpemUoKTsgKytpKSB7CiAgICAg
ICAgIE5vZGUqIG5vZGUgPSBtX3N0YXRlLmJsb2NrKCktPmF0KGkpOworICAgICAgICBzZWVuLmFk
ZChub2RlKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwog
ICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIG91dC5wcmludChjb21tYSwgbm9kZSwgIjoiLCB2YWx1ZSk7CiAgICAgfQorICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKKyAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOworICAgICAg
ICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxp
dmVBdFRhaWwuZW5kKCk7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICBpZiAoc2Vlbi5jb250
YWlucyhub2RlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5p
c0NsZWFyKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBvdXQucHJp
bnQoY29tbWEsIG5vZGUsICI6IiwgdmFsdWUpOworICAgICAgICB9CisgICAgfQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzMsMTYgKzMzLDI5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAordm9pZCBBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNp
dGlvblZlY3RvciYgdmVjdG9yKQoreworICAgIGlmIChtX3R5cGUgJiBTcGVjQ2VsbCkgeworICAg
ICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlVHJhbnNpdGlvbnModmVjdG9yKTsKKyAgICAgICAgQXJy
YXlNb2RlcyBuZXdNb2RlcyA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZlY3Rvci5z
aXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9k
ZXModmVjdG9yW2ldLnByZXZpb3VzLT5pbmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAg
bmV3TW9kZXMgfD0gYXNBcnJheU1vZGVzKHZlY3RvcltpXS5uZXh0LT5pbmRleGluZ1R5cGUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgbV9hcnJheU1vZGVzIHw9IG5ld01vZGVzOworICAgIH0KKyAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7Cit9CisKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0TW9zdFNw
ZWNpZmljKEdyYXBoJiBncmFwaCwgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAoISF2YWx1ZSAm
JiB2YWx1ZS5pc0NlbGwoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUg
PSBzdHJ1Y3R1cmU7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBz
dHJ1Y3R1cmUpOworICAgICAgICBncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVy
ZSk7CisgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOwogICAgICAgICBtX2FycmF5TW9k
ZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9m
dXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVh
cigpOwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwogICAgIH0KICAgICAgICAgCkBAIC01MCwx
OSArNjMsMzAgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcAogICAg
IG1fdmFsdWUgPSB2YWx1ZTsKICAgICAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOworICAg
IGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9CiAKLXZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdy
YXBoJiBncmFwaCwgSlNWYWx1ZSB2YWx1ZSkKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0KEdyYXBo
JiBncmFwaCwgSlNWYWx1ZSB2YWx1ZSwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNsb2JiZXJTdGF0
ZSkKIHsKICAgICBpZiAoISF2YWx1ZSAmJiB2YWx1ZS5pc0NlbGwoKSkgewotICAgICAgICBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwotICAgICAgICBzZXRGdXR1cmVQb3Nz
aWJsZVN0cnVjdHVyZShncmFwaCwgc3RydWN0dXJlKTsKLSAgICAgICAgbV9hcnJheU1vZGVzID0g
YXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwotICAgICAgICBjbG9iYmVy
QXJyYXlNb2RlcygpOworICAgICAgICBpZiAoZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihz
dHJ1Y3R1cmUpKSB7CisgICAgICAgICAgICAvLyBXZSBzaG91bGQgYmUgYWJsZSB0byBhc3N1bWUg
dGhhdCB0aGUgd2F0Y2hwb2ludCBmb3IgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIHNldC4KKyAgICAg
ICAgICAgIC8vIEJ1dCB3ZSBjYW4ndCBiZWNhdXNlIG91ciB2aWV3IG9mIHdoYXQgc3RydWN0dXJl
IGEgdmFsdWUgaGFzIGtlZXBzIGNoYW5naW5nLiBUaGF0J3MKKyAgICAgICAgICAgIC8vIHdoeSB3
ZSBjYWxsIGNvbnNpZGVyKCkuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNDI2CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVj
dHVyZTsKKyAgICAgICAgICAgIGlmIChjbG9iYmVyU3RhdGUgPT0gU3RydWN0dXJlc0FyZUNsb2Ji
ZXJlZCkgeworICAgICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsK
KyAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZS5jbG9iYmVyKCk7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9E
RVM7CisgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7
CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IDA7
CiAgICAgfQogICAgIApAQCAtNzAsMTcgKzk0LDI5IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6c2V0
KEdyYXBoJiBncmFwaCwgSlMKICAgICBtX3ZhbHVlID0gdmFsdWU7CiAgICAgCiAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7CiB9CiAKIHZvaWQgQWJz
dHJhY3RWYWx1ZTo6c2V0KEdyYXBoJiBncmFwaCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0g
ICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAgc2V0RnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmU7CiAgICAgbV9hcnJheU1vZGVzID0gYXNBcnJheU1vZGVzKHN0cnVjdHVyZS0+aW5kZXhp
bmdUeXBlKCkpOwogICAgIG1fdHlwZSA9IHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1
cmUpOwogICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFwaCk7Cit9CisKK3ZvaWQgQWJzdHJhY3RWYWx1
ZTo6c2V0KEdyYXBoJiBncmFwaCwgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCit7CisgICAgbV9z
dHJ1Y3R1cmUgPSBzZXQ7CisgICAgbV9hcnJheU1vZGVzID0gc2V0LmFycmF5TW9kZXNGcm9tU3Ry
dWN0dXJlcygpOworICAgIG1fdHlwZSA9IHNldC5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7
CisgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKKyAgICAKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpm
aXhUeXBlRm9yUmVwcmVzZW50YXRpb24oTm9kZUZsYWdzIHJlcHJlc2VudGF0aW9uKQpAQCAtMTI5
LDIxICsxNjUsMTggQEAgRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXIoRwog
ICAgIAogICAgIG1fdHlwZSAmPSBvdGhlci5zcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CiAg
ICAgbV9hcnJheU1vZGVzICY9IG90aGVyLmFycmF5TW9kZXNGcm9tU3RydWN0dXJlcygpOwotICAg
IG1fY3VycmVudEtub3duU3RydWN0dXJlLmZpbHRlcihvdGhlcik7CisgICAgbV9zdHJ1Y3R1cmUu
ZmlsdGVyKG90aGVyKTsKICAgICAKICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgcHJpb3IgdG8g
dGhlIGFib3ZlIHR3byBzdGF0ZW1lbnRzIHdlIGhhZCAoRm9vLCBUT1ApLCB3aGVyZQogICAgIC8v
IEZvbyBpcyBhIFNwZWN1bGF0ZWRUeXBlIHRoYXQgaXMgZGlzam9pbnQgd2l0aCB0aGUgcGFzc2Vk
IFN0cnVjdHVyZVNldC4gSW4gdGhhdAogICAgIC8vIGNhc2UsIHdlIHdpbGwgbm93IGhhdmUgKE5v
bmUsIFtzb21lU3RydWN0dXJlXSkuIEluIGdlbmVyYWwsIHdlIG5lZWQgdG8gbWFrZQogICAgIC8v
IHN1cmUgdGhhdCBuZXcgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTcGVjdWxhdGVkVHlw
ZSBuZWVkcyB0byBiZSBmZWQgYmFjawogICAgIC8vIGludG8gdGhlIGluZm9ybWF0aW9uIGdsZWFu
ZWQgZnJvbSB0aGUgU3RydWN0dXJlU2V0LgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZp
bHRlcihtX3R5cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOwogICAgIAotICAg
IGlmIChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAgICAgICAgc2V0
RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgsIG1fY3VycmVudEtub3duU3RydWN0dXJlLnNp
bmdsZXRvbigpKTsKLSAgICAgICAgCiAgICAgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAg
IGZpbHRlclZhbHVlQnlUeXBlKCk7Ci0gICAgcmV0dXJuIG5vcm1hbGl6ZUNsYXJpdHkoKTsKKyAg
ICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eShncmFwaCk7CiB9CiAKIEZpbHRyYXRpb25SZXN1bHQg
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyQXJyYXlNb2RlcyhBcnJheU1vZGVzIGFycmF5TW9kZXMpCkBA
IC0xNjMsMTQgKzE5NiwyNiBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRl
cihTCiAgICAgaWYgKChtX3R5cGUgJiB0eXBlKSA9PSBtX3R5cGUpCiAgICAgICAgIHJldHVybiBG
aWx0cmF0aW9uT0s7CiAgICAgCisgICAgLy8gRmFzdCBwYXRoIGZvciB0aGUgY2FzZSB0aGF0IHdl
IGRvbid0IGV2ZW4gaGF2ZSBhIGNlbGwuCisgICAgaWYgKCEobV90eXBlICYgU3BlY0NlbGwpKSB7
CisgICAgICAgIG1fdHlwZSAmPSB0eXBlOworICAgICAgICBGaWx0cmF0aW9uUmVzdWx0IHJlc3Vs
dDsKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBTcGVjTm9uZSkgeworICAgICAgICAgICAgY2xlYXIo
KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IENvbnRyYWRpY3Rpb247CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgcmVzdWx0ID0gRmlsdHJhdGlvbk9LOworICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAogICAgIG1fdHlwZSAm
PSB0eXBlOwogICAgIAogICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBwcmlvciB0byB0aGlzIGZp
bHRlcigpIGNhbGwgd2UgaGFkLCBzYXksIChGaW5hbCwgVE9QKSwgYW5kCiAgICAgLy8gdGhlIHBh
c3NlZCB0eXBlIGlzIEFycmF5LiBBdCB0aGlzIHBvaW50IHdlJ2xsIGhhdmUgKE5vbmUsIFRPUCku
IFRoZSBiZXN0IHdheQogICAgIC8vIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJ1Y3R1cmUgZmlsdGVy
aW5nIGRvZXMgdGhlIHJpZ2h0IHRoaW5nIGlzIHRvIGZpbHRlciBvbgogICAgIC8vIHRoZSBuZXcg
dHlwZSAoTm9uZSkgcmF0aGVyIHRoYW4gdGhlIG9uZSBwYXNzZWQgKEFycmF5KS4KLSAgICBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5maWx0ZXIobV90eXBlKTsKLSAgICBtX2Z1dHVyZVBvc3NpYmxl
U3RydWN0dXJlLmZpbHRlcihtX3R5cGUpOworICAgIG1fc3RydWN0dXJlLmZpbHRlcih0eXBlKTsK
ICAgICBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsK
ICAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eSgpOwpAQCAtMTg0LDE1ICsyMjksNiBAQCBGaWx0
cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlckJ5CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShHcmFw
aCYgZ3JhcGgsIFN0cnVjdHVyZSogc3RydWN0dXJlKQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUp
OwotICAgIGlmIChncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlID0gc3RydWN0dXJlOwotICAgIGVsc2UKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5tYWtlVG9wKCk7Ci19Ci0KIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyVmFsdWVCeVR5
cGUoKQogewogICAgIC8vIFdlIGNvdWxkIGdvIGZ1cnRoZXIsIGFuZCBlbnN1cmUgdGhhdCBpZiB0
aGUgZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgY29udHJhdmVuZXMKQEAgLTIzOCw4ICsyNzQsNyBA
QCBib29sIEFic3RyYWN0VmFsdWU6OnNob3VsZEJlQ2xlYXIoKSBjb25zCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAogICAgIGlmICghKG1fdHlwZSAmIH5TcGVjQ2VsbCkKLSAgICAgICAgJiYg
KCFtX2FycmF5TW9kZXMKLSAgICAgICAgICAgIHx8IG1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
Q2xlYXIoKSkpCisgICAgICAgICYmICghbV9hcnJheU1vZGVzIHx8IG1fc3RydWN0dXJlLmlzQ2xl
YXIoKSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIHJldHVybiBmYWxzZTsKQEAg
LTI2MywxMiArMjk4LDE4IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFs
aXoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitGaWx0cmF0aW9uUmVzdWx0IEFic3RyYWN0VmFs
dWU6Om5vcm1hbGl6ZUNsYXJpdHkoR3JhcGgmIGdyYXBoKQoreworICAgIEZpbHRyYXRpb25SZXN1
bHQgcmVzdWx0ID0gbm9ybWFsaXplQ2xhcml0eSgpOworICAgIGFzc2VydElzV2F0Y2hlZChncmFw
aCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQg
QWJzdHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgaWYgKCEobV90
eXBlICYgU3BlY0NlbGwpKSB7Ci0gICAgICAgIEFTU0VSVChtX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc0NsZWFyKCkpOwotICAgICAgICBBU1NFUlQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5p
c0NsZWFyKCkpOworICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAgICAg
ICAgQVNTRVJUKCFtX2FycmF5TW9kZXMpOwogICAgIH0KICAgICAKQEAgLTI4OSw2ICszMzAsMTEg
QEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpjaGVja0NvbnNpc3RlbmN5KCkgYwogICAgIC8vIHdlIGRv
bid0IHdhbnQgdG8gZ2V0IHBlZGFudGljIGFib3V0IHRoaXMgYXMgaXQgd291bGQgb25seSBpbmNy
ZWFzZSB0aGUgY29tcHV0YXRpb25hbAogICAgIC8vIGNvbXBsZXhpdHkgb2YgdGhlIGNvZGUuCiB9
CisKK3ZvaWQgQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBoJiBncmFwaCkgY29u
c3QKK3sKKyAgICBtX3N0cnVjdHVyZS5hc3NlcnRJc1dhdGNoZWQoZ3JhcGgpOworfQogI2VuZGlm
CiAKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAt
MzAyLDggKzM0OCw3IEBAIHZvaWQgQWJzdHJhY3RWYWx1ZTo6ZHVtcEluQ29udGV4dChQcmludFMK
ICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsKICAgICAgICAgb3V0LnByaW50KAogICAgICAg
ICAgICAgIiwgIiwgQXJyYXlNb2Rlc0R1bXAobV9hcnJheU1vZGVzKSwgIiwgIiwKLSAgICAgICAg
ICAgIGluQ29udGV4dChtX2N1cnJlbnRLbm93blN0cnVjdHVyZSwgY29udGV4dCksICIsICIsCi0g
ICAgICAgICAgICBpbkNvbnRleHQobV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSwgY29udGV4dCkp
OworICAgICAgICAgICAgaW5Db250ZXh0KG1fc3RydWN0dXJlLCBjb250ZXh0KSk7CiAgICAgfQog
ICAgIGlmICghIW1fdmFsdWUpCiAgICAgICAgIG91dC5wcmludCgiLCAiLCBpbkNvbnRleHQobV92
YWx1ZSwgY29udGV4dCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiREZHRmlsdHJhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR05vZGVGbGFn
cy5oIgogI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJE
RkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRl
ICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIkR1bXBDb250ZXh0LmgiCkBAIC01Myw4ICs1
NCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIG1fdHlwZSA9IFNw
ZWNOb25lOwogICAgICAgICBtX2FycmF5TW9kZXMgPSAwOwotICAgICAgICBtX2N1cnJlbnRLbm93
blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fdmFsdWUgPSBK
U1ZhbHVlKCk7CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkBAIC03NSwxNSAr
NzUsNzQgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIHZvaWQgY2xvYmJlclN0cnVjdHVy
ZXMoKQogICAgIHsKICAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAg
ICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZS5jbG9iYmVyKCk7CiAgICAgICAgICAgICBjbG9iYmVyQXJyYXlNb2RlcygpOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlz
Q2xlYXIoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKICAg
ICAgICAgICAgIEFTU0VSVCghbV9hcnJheU1vZGVzKTsKICAgICAgICAgfQogICAgICAgICBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGNsb2JiZXJTdHJ1
Y3R1cmVzRm9yKEFic3RyYWN0VmFsdWUmIHZhbHVlKQorICAgIHsKKyAgICAgICAgdmFsdWUuY2xv
YmJlclN0cnVjdHVyZXMoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0
aW9uUG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUub2JzZXJ2ZUludmFsaWRhdGlv
blBvaW50KCk7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKEFic3RyYWN0VmFsdWUmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgdmFsdWUub2JzZXJ2ZUludmFsaWRhdGlvblBvaW50KCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb24oU3RydWN0dXJlKiBmcm9tLCBT
dHJ1Y3R1cmUqIHRvKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7Cisg
ICAgICAgICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlVHJhbnNpdGlvbihmcm9tLCB0byk7CisgICAg
ICAgICAgICBvYnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbihmcm9tLT5pbmRleGluZ1R5cGUo
KSwgdG8tPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2ZVRyYW5zaXRpb25zKGNvbnN0IFRy
YW5zaXRpb25WZWN0b3ImIHZlY3Rvcik7CisgICAgCisgICAgY2xhc3MgVHJhbnNpdGlvbk9ic2Vy
dmVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zaXRpb25PYnNlcnZlcihTdHJ1Y3R1cmUq
IGZyb20sIFN0cnVjdHVyZSogdG8pCisgICAgICAgICAgICA6IG1fZnJvbShmcm9tKQorICAgICAg
ICAgICAgLCBtX3RvKHRvKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgb3BlcmF0b3IoKShBYnN0cmFjdFZhbHVlJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFsdWUub2JzZXJ2ZVRyYW5zaXRpb24obV9mcm9tLCBtX3RvKTsKKyAgICAgICAgfQor
ICAgIHByaXZhdGU6CisgICAgICAgIFN0cnVjdHVyZSogbV9mcm9tOworICAgICAgICBTdHJ1Y3R1
cmUqIG1fdG87CisgICAgfTsKKyAgICAKKyAgICBjbGFzcyBUcmFuc2l0aW9uc09ic2VydmVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zaXRpb25zT2JzZXJ2ZXIoY29uc3QgVHJhbnNpdGlv
blZlY3RvciYgdmVjdG9yKQorICAgICAgICAgICAgOiBtX3ZlY3Rvcih2ZWN0b3IpCisgICAgICAg
IHsKKyAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgdm9pZCBvcGVyYXRvcigpKEFic3RyYWN0
VmFsdWUmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZS5vYnNlcnZlVHJhbnNp
dGlvbnMobV92ZWN0b3IpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3Qg
VHJhbnNpdGlvblZlY3RvciYgbV92ZWN0b3I7CisgICAgfTsKKyAgICAKICAgICB2b2lkIGNsb2Ji
ZXJWYWx1ZSgpCiAgICAgewogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwpAQCAtOTEsNyAr
MTUwLDEwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAKICAgICBib29sIGlzSGVhcFRv
cCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gKG1fdHlwZSB8IFNwZWNIZWFwVG9wKSA9
PSBtX3R5cGUgJiYgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNUb3AoKSAmJiBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLmlzVG9wKCk7CisgICAgICAgIHJldHVybiAobV90eXBlIHwgU3BlY0hl
YXBUb3ApID09IG1fdHlwZQorICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUuaXNUb3AoKQorICAg
ICAgICAgICAgJiYgbV9hcnJheU1vZGVzID09IEFMTF9BUlJBWV9NT0RFUworICAgICAgICAgICAg
JiYgIW1fdmFsdWU7CiAgICAgfQogICAgIAogICAgIGJvb2wgdmFsdWVJc1RvcCgpIGNvbnN0CkBA
IC0xMTIsMTggKzE3NCwxNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgc2V0TW9zdFNwZWNpZmljKEdyYXBoJiwgSlNWYWx1ZSk7Ci0gICAgdm9pZCBzZXQo
R3JhcGgmLCBKU1ZhbHVlKTsKKyAgICB2b2lkIHNldChHcmFwaCYsIEpTVmFsdWUsIFN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZSk7CiAgICAgdm9pZCBzZXQoR3JhcGgmLCBTdHJ1Y3R1cmUqKTsKKyAgICB2
b2lkIHNldChHcmFwaCYsIGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIAogICAgIHZvaWQgc2V0
VHlwZShTcGVjdWxhdGVkVHlwZSB0eXBlKQogICAgIHsKICAgICAgICAgaWYgKHR5cGUgJiBTcGVj
Q2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRvcCgpOwot
ICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAg
ICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBtX2FycmF5TW9kZXMgPSBB
TExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5jbGVhcigpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKICAgICAgICAg
ICAgIG1fYXJyYXlNb2RlcyA9IDA7CiAgICAgICAgIH0KICAgICAgICAgbV90eXBlID0gdHlwZTsK
QEAgLTEzOCw4ICsxOTksNyBAQCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgewogICAgICAg
ICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZQogICAgICAgICAgICAgJiYgbV9hcnJheU1v
ZGVzID09IG90aGVyLm1fYXJyYXlNb2RlcwotICAgICAgICAgICAgJiYgbV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUgPT0gb3RoZXIubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUKLSAgICAgICAgICAgICYm
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPT0gb3RoZXIubV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZQorICAgICAgICAgICAgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUKICAg
ICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKICAgICB9CiAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdApAQCAtMTYyLDggKzIy
Miw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHJlc3VsdCB8PSBtZXJnZVNwZWN1bGF0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKTsKICAg
ICAgICAgICAgIHJlc3VsdCB8PSBtZXJnZUFycmF5TW9kZXMobV9hcnJheU1vZGVzLCBvdGhlci5t
X2FycmF5TW9kZXMpOwotICAgICAgICAgICAgcmVzdWx0IHw9IG1fY3VycmVudEtub3duU3RydWN0
dXJlLmFkZEFsbChvdGhlci5tX2N1cnJlbnRLbm93blN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBy
ZXN1bHQgfD0gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9mdXR1cmVQ
b3NzaWJsZVN0cnVjdHVyZSk7CisgICAgICAgICAgICByZXN1bHQgfD0gbV9zdHJ1Y3R1cmUubWVy
Z2Uob3RoZXIubV9zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaWYgKG1fdmFsdWUgIT0gb3RoZXIu
bV92YWx1ZSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAhIW1fdmFsdWU7CiAgICAgICAg
ICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKQEAgLTE3OSw4ICsyMzgsNyBAQCBzdHJ1Y3Qg
QWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIG1lcmdlU3BlY3VsYXRpb24obV90eXBlLCB0eXBlKTsK
ICAgICAgICAgCiAgICAgICAgIGlmICh0eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1f
Y3VycmVudEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgICAgIG1fZnV0dXJlUG9z
c2libGVTdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRv
cCgpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOwogICAgICAg
ICB9CiAgICAgICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC0yMjUsNzUgKzI4MywzMCBAQCBz
dHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2Vs
bCgpKSB7CiAgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgU3BlY0NlbGwpOwogICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0
dXJlKQotICAgICAgICAgICAgICAgICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY29udGFp
bnMoc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmNvbnRhaW5zKHN0
cnVjdHVyZSkKICAgICAgICAgICAgICAgICAmJiAobV9hcnJheU1vZGVzICYgYXNBcnJheU1vZGVz
KHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogYmVzdFByb3ZlblN0
cnVjdHVyZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuaGFzU2luZ2xldG9uKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIGlmIChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
Lmhhc1NpbmdsZXRvbigpKQotICAgICAgICAgICAgcmV0dXJuIG1fZnV0dXJlUG9zc2libGVTdHJ1
Y3R1cmUuc2luZ2xldG9uKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICAKICAgICBi
b29sIGhhc0Nsb2JiZXJhYmxlU3RhdGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
Y3VycmVudEtub3duU3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkKKyAgICAgICAgcmV0
dXJuIG1fc3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkKICAgICAgICAgICAgIHx8ICFh
cnJheU1vZGVzQXJlQ2xlYXJPclRvcChtX2FycmF5TW9kZXMpOwogICAgIH0KICAgICAKICNpZiBB
U1NFUlRfRElTQUJMRUQKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdCB7IH0KKyAg
ICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFwaCYpIGNvbnN0IHsgfQogI2Vsc2UKICAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdDsKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChHcmFw
aCYpIGNvbnN0OwogI2VuZGlmCiAgICAgCiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3Ry
ZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKICAgICAKLSAgICAvLyBBIGdyZWF0IHdheSB0byB0aGluayBhYm91dCB0aGUgZGlmZmVy
ZW5jZSBiZXR3ZWVuIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZAotICAgIC8vIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUgaXMgdG8gY29uc2lkZXIgdGhlc2UgZm91ciBleGFtcGxlczoKLSAg
ICAvLwotICAgIC8vIDEpIHggPSBmb28oKTsKLSAgICAvLwotICAgIC8vICAgIEluIHRoaXMgY2Fz
ZSB4J3MgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUgYW5kIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1
cmUgd2lsbAotICAgIC8vICAgIGJvdGggYmUgVE9QLCBzaW5jZSB3ZSBkb24ndCBrbm93IGFueXRo
aW5nIGFib3V0IHggZm9yIHN1cmUsIHlldC4KLSAgICAvLwotICAgIC8vIDIpIHggPSBmb28oKTsK
LSAgICAvLyAgICB5ID0geC5mOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUgeCB3aWxsIGxhdGVy
IGhhdmUgYSBuZXcgcHJvcGVydHkgYWRkZWQgdG8gaXQsICdnJy4gQmVjYXVzZSBvZiB0aGUKLSAg
ICAvLyAgICBrbm93biBidXQgbm90LXlldC1leGVjdXRlZCBwcm9wZXJ0eSBhZGRpdGlvbiwgeCdz
IGN1cnJlbnQgc3RydWN0dXJlIHdpbGwKLSAgICAvLyAgICBub3QgYmUgd2F0Y2hwb2ludGFibGU7
IGhlbmNlIHdlIGhhdmUgbm8gd2F5IG9mIHN0YXRpY2FsbHkgYm91bmRpbmcgdGhlIHNldAotICAg
IC8vICAgIG9mIHBvc3NpYmxlIHN0cnVjdHVyZXMgdGhhdCB4IG1heSBoYXZlIGlmIGEgY2xvYmJl
cmluZyBldmVudCBoYXBwZW5zLiBTbywKLSAgICAvLyAgICB4J3MgbV9jdXJyZW50S25vd25TdHJ1
Y3R1cmUgd2lsbCBiZSB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgY2hlY2sgdG8gZ2V0Ci0gICAgLy8g
ICAgcHJvcGVydHkgJ2YnLCBhbmQgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJlIFRP
UC4KLSAgICAvLwotICAgIC8vIDMpIHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5mOwotICAg
IC8vCi0gICAgLy8gICAgV2hlcmUgeCBoYXMgYSB0ZXJtaW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBz
dGlsbCB3YXRjaHBvaW50YWJsZS4gSW4gdGhpcyBjYXNlLAotICAgIC8vICAgIHgncyBtX2N1cnJl
bnRLbm93blN0cnVjdHVyZSBhbmQgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJvdGgg
YmUKLSAgICAvLyAgICB3aGF0ZXZlciBzdHJ1Y3R1cmUgd2UgY2hlY2tlZCBmb3Igd2hlbiBnZXR0
aW5nICdmJy4KLSAgICAvLwotICAgIC8vIDQpIHggPSBmb28oKTsKLSAgICAvLyAgICB5ID0geC5m
OwotICAgIC8vICAgIGJhcigpOwotICAgIC8vCi0gICAgLy8gICAgV2hlcmUgeCBoYXMgYSB0ZXJt
aW5hbCBzdHJ1Y3R1cmUgdGhhdCBpcyBzdGlsbCB3YXRjaHBvaW50YWJsZS4gSW4gdGhpcwotICAg
IC8vICAgIGNhc2UsIG1fY3VycmVudEtub3duU3RydWN0dXJlIHdpbGwgYmUgVE9QIGJlY2F1c2Ug
YmFyKCkgbWF5IHBvdGVudGlhbGx5Ci0gICAgLy8gICAgY2hhbmdlIHgncyBzdHJ1Y3R1cmUgYW5k
IHdlIGhhdmUgbm8gd2F5IG9mIHByb3Zpbmcgb3RoZXJ3aXNlLCBidXQKLSAgICAvLyAgICB4J3Mg
bV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVyIHN0cnVjdHVyZSB3ZSBo
YWQgY2hlY2tlZAotICAgIC8vICAgIHdoZW4gZ2V0dGluZyBwcm9wZXJ0eSAnZicuCi0gICAgCi0g
ICAgLy8gTkIuIEFsbCBmaWVsZHMgaW4gdGhpcyBzdHJ1Y3QgbXVzdCBoYXZlIHRyaXZpYWwgZGVz
dHJ1Y3RvcnMuCi0KICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhlIHN0
cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlIHJpZ2h0CiAgICAgLy8gbm93LiBUaGUg
c3RydWN0dXJlIG9mIHRoZSBjdXJyZW50IHZhbHVlIG11c3QgYmVsb25nIHRvIHRoaXMgc2V0LiBU
aGUgc2V0IG1heQogICAgIC8vIGJlIFRPUCwgaW5kaWNhdGluZyB0aGF0IGl0IGlzIHRoZSBzZXQg
b2YgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMsIGluIHdoaWNoCkBAIC0zMDEsMjkgKzMxNCwxMiBA
QCBzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CiAgICAgLy8gaW4gd2hpY2ggY2FzZSB0aGlzIHZhbHVl
IGNhbm5vdCBiZSBhIGNlbGwuIFRoaXMgaXMgYWxsIHN1YmplY3QgdG8gY2hhbmdlCiAgICAgLy8g
YW55dGltZSBhIG5ldyB2YWx1ZSBpcyBhc3NpZ25lZCB0byB0aGlzIG9uZSwgYW55dGltZSB0aGVy
ZSBpcyBhIGNvbnRyb2wgZmxvdwogICAgIC8vIG1lcmdlLCBvciBtb3N0IGNydWNpYWxseSwgYW55
dGltZSBhIHNpZGUtZWZmZWN0IG9yIHN0cnVjdHVyZSBjaGVjayBoYXBwZW5zLgotICAgIC8vIElu
IGNhc2Ugb2YgYSBzaWRlLWVmZmVjdCwgd2UgdHlwaWNhbGx5IG11c3QgYXNzdW1lIHRoYXQgYW55
IHZhbHVlIG1heSBoYXZlCi0gICAgLy8gaGFkIGl0cyBzdHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2Ug
Y29udHJhdmVuaW5nIG91ciBwcm9vZi4gV2UgbWFrZSB0aGUgcHJvb2YKLSAgICAvLyB2YWxpZCBh
Z2FpbiBieSBzd2l0Y2hpbmcgdGhpcyB0byBUT1AgKGkuZS4gY2xhaW1pbmcgdGhhdCB3ZSBoYXZl
IHByb3ZlZCB0aGF0Ci0gICAgLy8gdGhpcyB2YWx1ZSBtYXkgaGF2ZSBhbnkgc3RydWN0dXJlKS4g
T2Ygbm90ZSBpcyB0aGF0IHRoZSBwcm9vZiByZXByZXNlbnRlZCBieQotICAgIC8vIHRoaXMgZmll
bGQgaXMgbm90IHN1YmplY3QgdG8gc3RydWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludHMgLSBl
dmVuIGlmIG9uZQotICAgIC8vIGZpcmVzLCB3ZSBjYW4gYmUgc3VyZSB0aGF0IHRoaXMgcHJvb2Yg
aXMgc3RpbGwgdmFsaWQuCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX2N1cnJlbnRLbm93
blN0cnVjdHVyZTsKLSAgICAKLSAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24g
dGhlIHN0cnVjdHVyZXMgdGhhdCB0aGlzIHZhbHVlIGNhbiBoYXZlIG5vdwotICAgIC8vIG9yIGFu
eSB0aW1lIGluIHRoZSBmdXR1cmUgc3ViamVjdCB0byB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24g
d2F0Y2hwb2ludHMgb2YKLSAgICAvLyBhbGwgbWVtYmVycyBvZiB0aGlzIHNldCBub3QgaGF2aW5n
IGZpcmVkLiBUaGlzIHNldCBpcyBpbXBlcnZpb3VzIHRvIHNpZGUtCi0gICAgLy8gZWZmZWN0czsg
ZXZlbiBpZiBvbmUgaGFwcGVucyB0aGUgc2lkZS1lZmZlY3QgY2FuIG9ubHkgY2F1c2UgdGhlIHZh
bHVlIHRvCi0gICAgLy8gY2hhbmdlIHRvIGF0IHdvcnN0IGFub3RoZXIgc3RydWN0dXJlIHRoYXQg
aXMgYWxzbyBhIG1lbWJlciBvZiB0aGlzIHNldC4gQnV0LAotICAgIC8vIHRoZSB0aGVvcmVtIGJl
aW5nIHByb3ZlZCBieSB0aGlzIGZpZWxkIGlzIHByZWRpY2F0ZWQgdXBvbiB0aGVyZSBub3QgYmVp
bmcKLSAgICAvLyBhbnkgbmV3IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGludG8g
YW55IG1lbWJlcnMgb2YgdGhpcyBzZXQuIEluCi0gICAgLy8gY2FzZXMgd2hlcmUgdGhlcmUgaXMg
bm8gd2F5IGZvciB1cyB0byBndWFyZCB0aGlzIGhhcHBlbmluZywgdGhlIHNldCBtdXN0IGJlCi0g
ICAgLy8gVE9QLiBCdXQgaW4gY2FzZXMgd2hlcmUgd2UgY2FuIGd1YXJkIG5ldyBzdHJ1Y3R1cmUg
dHJhbnNpdGlvbnMgKGFsbCBtZW1iZXJzCi0gICAgLy8gb2YgdGhlIHNldCBoYXZlIHN0aWxsLXZh
bGlkIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnRzKSB0aGVuIHRoaXMgc2V0Ci0gICAg
Ly8gd2lsbCBiZSBmaW5pdGUuIEFueXRpbWUgdGhhdCB3ZSBtYWtlIHVzZSBvZiB0aGUgZmluaXRl
IG5hdHVyZSBvZiB0aGlzIHNldCwKLSAgICAvLyB3ZSBtdXN0IGZpcnN0IGlzc3VlIGEgc3RydWN0
dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCwgd2hpY2ggd2lsbCBlZmZlY3RpdmVseQotICAgIC8v
IHJlc3VsdCBpbiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBiZWluZyBmaWx0ZXJlZCBhY2NvcmRp
bmcgdG8KLSAgICAvLyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLgotICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZTsKKyAgICAvLyBJbiBjYXNlIG9m
IGEgc2lkZS1lZmZlY3QsIHdlIG11c3QgYXNzdW1lIHRoYXQgYW55IHZhbHVlIHdpdGggYSBzdHJ1
Y3R1cmUgdGhhdAorICAgIC8vIGlzbid0IGJlaW5nIHdhdGNoZWQgbWF5IGhhdmUgaGFkIGl0cyBz
dHJ1Y3R1cmUgY2hhbmdlZCwgaGVuY2UgY29udHJhdmVuaW5nCisgICAgLy8gb3VyIHByb29mLiBJ
biBzdWNoIGEgY2FzZSB3ZSBtYWtlIHRoZSBwcm9vZiB2YWxpZCBhZ2FpbiBieSBzd2l0Y2hpbmcg
dGhpcyB0bworICAgIC8vIFRPUCAoaS5lLiBjbGFpbWluZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRo
YXQgdGhpcyB2YWx1ZSBtYXkgaGF2ZSBhbnkKKyAgICAvLyBzdHJ1Y3R1cmUpLgorICAgIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7CiAgICAgCiAgICAgLy8gVGhpcyBpcyBhIHBy
b3ZlbiBjb25zdHJhaW50IG9uIHRoZSBwb3NzaWJsZSB0eXBlcyB0aGF0IHRoaXMgdmFsdWUgY2Fu
IGhhdmUKICAgICAvLyBub3cgb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZSwgdW5sZXNzIGl0IGlz
IHJlYXNzaWduZWQuIFRoaXMgZmllbGQgaXMKQEAgLTMzMiwxMSArMzI4LDExIEBAIHN0cnVjdCBB
YnN0cmFjdFZhbHVlIHsKICAgICAvLyBiZXR3ZWVuIHRoaXMgZmllbGQsIGFuZCB0aGUgc3RydWN0
dXJlIGZpZWxkcyBhYm92ZSwgaXMgYXMgZm9sbG93cy4gVGhlCiAgICAgLy8gZmllbGRzIGFib3Zl
IGNvbnN0cmFpbnQgdGhlIHN0cnVjdHVyZXMgdGhhdCBhIGNlbGwgbWF5IGhhdmUsIGJ1dCB0aGV5
IHNheQogICAgIC8vIG5vdGhpbmcgYWJvdXQgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIGlzIGtu
b3duIHRvIGJlIGEgY2VsbC4gTW9yZSBmb3JtYWxseSwKLSAgICAvLyB0aGUgbV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUgaXMgaXRzZWxmIGFuIGFic3RyYWN0IHZhbHVlIHRoYXQgY29uc2lzdHMgb2Yg
dGhlCisgICAgLy8gdGhlIG1fc3RydWN0dXJlIGlzIGl0c2VsZiBhbiBhYnN0cmFjdCB2YWx1ZSB0
aGF0IGNvbnNpc3RzIG9mIHRoZQogICAgIC8vIHVuaW9uIG9mIHRoZSBzZXQgb2YgYWxsIG5vbi1j
ZWxsIHZhbHVlcyBhbmQgdGhlIHNldCBvZiBjZWxsIHZhbHVlcyB0aGF0IGhhdmUKICAgICAvLyB0
aGUgZ2l2ZW4gc3RydWN0dXJlLiBUaGlzIGFic3RyYWN0IHZhbHVlIGlzIHRoZW4gdGhlIGludGVy
c2VjdGlvbiBvZiB0aGUKLSAgICAvLyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBhbmQgdGhlIHNl
dCBvZiB2YWx1ZXMgd2hvc2UgdHlwZSBpcyBtX3R5cGUuIFNvLCBmb3IKLSAgICAvLyBleGFtcGxl
IGlmIG1fdHlwZSBpcyBTcGVjRmluYWx8U3BlY0ludDMyIGFuZCBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZSBpcworICAgIC8vIG1fc3RydWN0dXJlIGFuZCB0aGUgc2V0IG9mIHZhbHVlcyB3aG9zZSB0
eXBlIGlzIG1fdHlwZS4gU28sIGZvcgorICAgIC8vIGV4YW1wbGUgaWYgbV90eXBlIGlzIFNwZWNG
aW5hbHxTcGVjSW50MzIgYW5kIG1fc3RydWN0dXJlIGlzCiAgICAgLy8gWzB4MTIzNDVdIHRoZW4g
dGhpcyBhYnN0cmFjdCB2YWx1ZSBjb3JyZXNwb25kcyB0byB0aGUgc2V0IG9mIGFsbCBpbnRlZ2Vy
cwogICAgIC8vIHVuaWZpZWQgd2l0aCB0aGUgc2V0IG9mIGFsbCBvYmplY3RzIHdpdGggc3RydWN0
dXJlIDB4MTIzNDUuCiAgICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOwpAQCAtMzY0LDYgKzM2MCwx
MiBAQCBwcml2YXRlOgogICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAg
ICAgfQogICAgIAorICAgIHZvaWQgb2JzZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRpb24oSW5kZXhp
bmdUeXBlIGZyb20sIEluZGV4aW5nVHlwZSB0bykKKyAgICB7CisgICAgICAgIGlmIChtX2FycmF5
TW9kZXMgJiBhc0FycmF5TW9kZXMoZnJvbSkpCisgICAgICAgICAgICBtX2FycmF5TW9kZXMgfD0g
YXNBcnJheU1vZGVzKHRvKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCB2YWxpZGF0ZVR5cGUoSlNW
YWx1ZSB2YWx1ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpc0hlYXBUb3AoKSkKQEAgLTM5
MSwxOSArMzkzLDE3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX3R5cGUgfD0gdG9wOwog
ICAgICAgICBtX2FycmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7Ci0gICAgICAgIG1fY3VycmVu
dEtub3duU3RydWN0dXJlLm1ha2VUb3AoKTsKLSAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZS5tYWtlVG9wKCk7CisgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKICAgICAgICAg
bV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0K
ICAgICAKLSAgICB2b2lkIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpOwotCiAgICAgdm9pZCBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHZv
aWQgZmlsdGVyQXJyYXlNb2Rlc0J5VHlwZSgpOwogICAgIAogICAgIGJvb2wgc2hvdWxkQmVDbGVh
cigpIGNvbnN0OwogICAgIEZpbHRyYXRpb25SZXN1bHQgbm9ybWFsaXplQ2xhcml0eSgpOworICAg
IEZpbHRyYXRpb25SZXN1bHQgbm9ybWFsaXplQ2xhcml0eShHcmFwaCYpOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fs
bG9jYXRvci5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkKiBhbGxvY2F0ZSgpOyAvLyBVc2UgcGxhY2VtZW50IG5ldyB0byBhbGxvY2F0ZSwg
YW5kIGF2b2lkIHVzaW5nIHRoaXMgbWV0aG9kLgogICAgIHZvaWQgZnJlZShUKik7IC8vIENhbGwg
dGhpcyBtZXRob2QgdG8gZGVsZXRlOyBuZXZlciB1c2UgJ2RlbGV0ZScgZGlyZWN0bHkuCiAgICAg
Ci0gICAgdm9pZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIFQgaGFzIGEgdHJpdmlh
bCBkZXN0cnVjdG9yLgorICAgIHZvaWQgZnJlZUFsbCgpOyAvLyBPbmx5IGNhbGwgdGhpcyBpZiB5
b3UndmUgZWl0aGVyIGZyZWVkIGV2ZXJ5dGhpbmcgb3IgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3Ry
dWN0b3IuCiAgICAgdm9pZCByZXNldCgpOyAvLyBMaWtlIGZyZWVBbGwoKSwgYnV0IGFsc28gcmV0
dXJucyBhbGwgbWVtb3J5IHRvIHRoZSBPUy4KICAgICAKICAgICB1bnNpZ25lZCBpbmRleE9mKGNv
bnN0IFQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI1LDcgKzMyNSw2IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6
CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgdGhlc2UgYmVjYXVz
ZSBpZiB3ZSBnZXQgdXNlcyBvZiB0aGUgcmVsZXZhbnQKICAgICAgICAgICAgICAgICAgICAgLy8g
dmFyaWFibGUgdGhlbiB3ZSBjYW4gc2FmZWx5IGdldCByaWQgb2YgdGhlc2UsIHRvby4gVGhpcyBv
ZiBjb3Vyc2UKQEAgLTQ0MSw3ICs0NDAsNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJl
OgotICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAg
ICAgICAgICAgICAgICAgY2FzZSBDaGVja0FycmF5OiB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGNhbiBqdXN0IGdldCByaWQgb2YgdGhpcyBub2RlLCBpZiBpdCByZWZlcmVuY2VzIGEgcGhh
bnRvbSBhcmd1bWVudC4KICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc09LVG9PcHRpbWl6ZShu
b2RlLT5jaGlsZDEoKS5ub2RlKCkpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQXJyYXlNb2RlLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODksMjUgKzI4OSw0
OCBAQCBTdHJ1Y3R1cmUqIEFycmF5TW9kZTo6b3JpZ2luYWxBcnJheVN0cnVjCiBib29sIEFycmF5
TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSwgSW5kZXhpbmdUeXBlIHNoYXBlKSBjb25zdAogewogICAgIHN3aXRjaCAoYXJy
YXlDbGFzcygpKSB7Ci0gICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKLSAgICAgICAgcmV0
dXJuIHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAg
ICAgICAmJiAodmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4
aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFwZU1hc2spID09IHNoYXBlCi0gICAgICAgICAgICAmJiAo
dmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgp
ICYgSXNBcnJheSkKLSAgICAgICAgICAgICYmIGdyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5v
cmlnaW4uc2VtYW50aWMpLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUodmFsdWUubV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOworICAgIGNhc2UgQXJyYXk6Ok9yaWdpbmFsQXJy
YXk6IHsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0
dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2
YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgp
ICYgSXNBcnJheSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+aXNPcmln
aW5hbEFycmF5U3RydWN0dXJlKHN0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0g
ICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgY2FzZSBBcnJheTo6QXJyYXk6IHsKICAgICAgICAg
aWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlN
b2RlcyhzaGFwZSB8IElzQXJyYXkpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAg
ICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+
aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1NoYXBlTWFzaykgPT0gc2hhcGUKLSAgICAgICAgICAg
ICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdU
eXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZh
bHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlmICgoc3RydWN0
dXJlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFwZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nVHlwZSgpICYgSXNBcnJheSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCi0gICAgZGVm
YXVsdDoKKyAgICBkZWZhdWx0OiB7CiAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNr
ZWQodmFsdWUubV9hcnJheU1vZGVzLCBhc0FycmF5TW9kZXMoc2hhcGUpIHwgYXNBcnJheU1vZGVz
KHNoYXBlIHwgSXNBcnJheSkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJl
dHVybiB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAg
ICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSA9PSBzaGFwZTsKLSAgICB9CisgICAgICAg
IGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1
cmVbaV07CisgICAgICAgICAgICBpZiAoKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRl
eGluZ1NoYXBlTWFzaykgIT0gc2hhcGUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gfQogfQogCiBib29sIEFycmF5
TW9kZTo6YWxyZWFkeUNoZWNrZWQoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBBYnN0cmFjdFZh
bHVlJiB2YWx1ZSkgY29uc3QKQEAgLTMzNiwyMyArMzU5LDM4IEBAIGJvb2wgQXJyYXlNb2RlOjph
bHJlYWR5Q2hlY2tlZChHcmFwaCYgZ3IKICAgICAgICAgCiAgICAgY2FzZSBBcnJheTo6U2xvd1B1
dEFycmF5U3RvcmFnZToKICAgICAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKLSAgICAgICAg
Y2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxB
cnJheTogewogICAgICAgICAgICAgQ1JBU0goKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6CisgICAgICAg
IGNhc2UgQXJyYXk6OkFycmF5OiB7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlD
aGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFz
QW55QXJyYXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigp
LT5pbmRleGluZ1R5cGUoKSkKLSAgICAgICAgICAgICAgICAmJiAodmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSk7CisgICAg
ICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSB2YWx1ZS5tX3N0cnVj
dHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOworICAgICAgICAgICAgICAgIGlmICghaGFzQW55QXJy
YXlTdG9yYWdlKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCEoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSAmIElzQXJyYXkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgZGVmYXVsdDogewogICAgICAgICAgICAgaWYg
KGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMsIGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5
U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkpKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAgICAgJiYgaGFzQW55QXJy
YXlTdG9yYWdlKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRl
eGluZ1R5cGUoKSk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVy
ZS5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07Cisg
ICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5pbmRleGlu
Z1R5cGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IH0KICAgICAgICAgCiAgICAg
Y2FzZSBBcnJheTo6QXJndW1lbnRzOgogICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25DaGVja2Vk
KHZhbHVlLm1fdHlwZSwgU3BlY0FyZ3VtZW50cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTY5NTE1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDEyICs1NCwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9v
bCBpc1ZhbGlkKCkgeyByZXR1cm4gbV9ibG9jay0+Y2ZhRGlkRmluaXNoOyB9CiAgICAgCisgICAg
U3RydWN0dXJlQ2xvYmJlclN0YXRlIHN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbDsgfQorICAgIAogICAg
IHZvaWQgc2V0RGlkQ2xvYmJlcihib29sKSB7IH0KKyAgICB2b2lkIHNldFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZShTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgc3RhdGUpIHsgUkVMRUFTRV9BU1NFUlQoc3Rh
dGUgPT0gbV9ibG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsKTsgfQogICAgIHZv
aWQgc2V0SXNWYWxpZChib29sIGlzVmFsaWQpIHsgbV9ibG9jay0+Y2ZhRGlkRmluaXNoID0gaXNW
YWxpZDsgfQogICAgIHZvaWQgc2V0QnJhbmNoRGlyZWN0aW9uKEJyYW5jaERpcmVjdGlvbikgeyB9
CiAgICAgdm9pZCBzZXRGb3VuZENvbnN0YW50cyhib29sKSB7IH0KLSAgICBib29sIGhhdmVTdHJ1
Y3R1cmVzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfSAvLyBJdCdzIGFsd2F5cyBzYWZlIHRvIHJl
dHVybiB0cnVlLgotICAgIHZvaWQgc2V0SGF2ZVN0cnVjdHVyZXMoYm9vbCkgeyB9CiAKIHByaXZh
dGU6CiAgICAgQmFzaWNCbG9jayogbV9ibG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
NiArNDEsOCBAQCBCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKAogICAgICwgY2ZhU2hvdWxkUmV2aXNp
dChmYWxzZSkKICAgICAsIGNmYUZvdW5kQ29uc3RhbnRzKGZhbHNlKQogICAgICwgY2ZhRGlkRmlu
aXNoKHRydWUpCisgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQoU3RydWN0dXJl
c0FyZVdhdGNoZWQpCisgICAgLCBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwoU3RydWN0
dXJlc0FyZVdhdGNoZWQpCiAgICAgLCBjZmFCcmFuY2hEaXJlY3Rpb24oSW52YWxpZEJyYW5jaERp
cmVjdGlvbikKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgLCBpc0xpbmtlZChmYWxzZSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAx
Njk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0JyYW5jaERpcmVjdGlv
bi5oIgogI2luY2x1ZGUgIkRGR0ZsdXNoZWRBdC5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNp
bmNsdWRlICJERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCIKICNpbmNsdWRlICJPcGVyYW5kcy5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAg
LTExNiw2ICsxMTcsOCBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9j
CiAgICAgYm9vbCBjZmFTaG91bGRSZXZpc2l0OwogICAgIGJvb2wgY2ZhRm91bmRDb25zdGFudHM7
CiAgICAgYm9vbCBjZmFEaWRGaW5pc2g7CisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGNmYVN0
cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZDsKKyAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2Zh
U3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsOwogICAgIEJyYW5jaERpcmVjdGlvbiBjZmFCcmFu
Y2hEaXJlY3Rpb247CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIGJvb2wgaXNMaW5rZWQ7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JyYW5jaERpcmVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnJhbmNoRGlyZWN0aW9uLmgJ
KHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnJhbmNo
RGlyZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIGlubGluZSBj
b25zdCBjaGFyKiBicmFuY2hEaXJlY3RpbwogewogICAgIHN3aXRjaCAoYnJhbmNoRGlyZWN0aW9u
KSB7CiAgICAgY2FzZSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9uOgotICAgICAgICByZXR1cm4gIklu
dmFsaWQiOworICAgICAgICByZXR1cm4gIkludmFsaWRCcmFuY2hEaXJlY3Rpb24iOwogICAgIGNh
c2UgVGFrZVRydWU6CiAgICAgICAgIHJldHVybiAiVGFrZVRydWUiOwogICAgIGNhc2UgVGFrZUZh
bHNlOgpAQCAtODEsNiArODEsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGJyYW5jaENvbmRpdGlv
bihCcmFuYwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKK25hbWVzcGFjZSBXVEYgewor
CitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQzo6REZHOjpC
cmFuY2hEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIG91dC5wcmludChKU0M6OkRGRzo6YnJh
bmNoRGlyZWN0aW9uVG9TdHJpbmcoZGlyZWN0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKICNlbmRpZiAvLyBERkdCcmFuY2hEaXJl
Y3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA5LDggKzIxMDks
OCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgIEFTU0VSVCh2YXJp
YW50Lm9sZFN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlk
YXRlZCgpKTsKICAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7Ci0gICAgU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgKLSAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEodmFyaWFudC5vbGRT
dHJ1Y3R1cmUoKSwgdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOworICAgIFRyYW5zaXRpb24qIHRy
YW5zaXRpb24gPSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRkKAorICAgICAgICB2YXJpYW50Lm9s
ZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKIAogICAgIGlmICh2YXJpYW50
Lm9sZFN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpCiAgICAgICAgICE9IHZhcmlhbnQu
bmV3U3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKQEAgLTIxMjEsMTAgKzIxMjEs
MTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKIAogICAgICAgICBpZiAo
IXZhcmlhbnQub2xkU3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAg
ICAgIHByb3BlcnR5U3RvcmFnZSA9IGFkZFRvR3JhcGgoCi0gICAgICAgICAgICAgICAgQWxsb2Nh
dGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGJhc2UpOworICAgICAg
ICAgICAgICAgIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcEluZm8odHJhbnNpdGlvbiksIGJh
c2UpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYWRk
VG9HcmFwaCgKLSAgICAgICAgICAgICAgICBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlLCBPcElu
Zm8odHJhbnNpdGlvbkRhdGEpLAorICAgICAgICAgICAgICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uKSwKICAgICAgICAgICAgICAgICBiYXNlLCBhZGRUb0dy
YXBoKEdldEJ1dHRlcmZseSwgYmFzZSkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTIx
MzQsNyArMjEzNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAg
ICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKEdldEJ1dHRlcmZseSwgYmFzZSk7
CiAgICAgfQogCi0gICAgYWRkVG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9u
RGF0YSksIGJhc2UpOworICAgIGFkZFRvR3JhcGgoUHV0U3RydWN0dXJlLCBPcEluZm8odHJhbnNp
dGlvbiksIGJhc2UpOwogCiAgICAgYWRkVG9HcmFwaCgKICAgICAgICAgUHV0QnlPZmZzZXQsCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkocmV2aXNpb24g
MTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkFQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTkyLDggKzkyLDExIEBAIHByaXZhdGU6CiAgICAgICAg
IGlmIChtX3ZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nKCIgICBCbG9jayAiLCAqYmxvY2ss
ICI6XG4iKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOwotICAgICAg
ICBpZiAobV92ZXJib3NlKQorICAgICAgICBpZiAobV92ZXJib3NlKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICBoZWFkIHZhcnM6ICIsIGJsb2NrLT52YWx1ZXNBdEhlYWQsICJcbiIpOwor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgICBoZWFkIHJlZ3M6ICIsIG1hcER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRI
ZWFkKSwgIlxuIik7CisgICAgICAgIH0KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJsb2NrLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkgewogICAg
ICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQoaSk7CkBAIC0xMDIsMTAgKzEwNSw4
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKCFzYWZlVG9FeGVjdXRlKG1fc3RhdGUs
IG1fZ3JhcGgsIG5vZGUpKQogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIoVU5TQUZFKSAi
KTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2ludGVycHJldGVyLmR1bXAo
V1RGOjpkYXRhRmlsZSgpKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKG1fc3RhdGUudmFyaWFi
bGVzKCksICIgIiwgbV9pbnRlcnByZXRlcik7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKG1fc3RhdGUuaGF2ZVN0cnVjdHVyZXMoKSkKLSAgICAgICAgICAgICAgICAgICAg
ZGF0YUxvZygiIChIYXZlIFN0cnVjdHVyZXMpIik7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0Yo
IlxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpKSkgewpAQCAtMTIxLDggKzEyMiwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
ICAgIG1fY2hhbmdlZCB8PSBtX3N0YXRlLmVuZEJhc2ljQmxvY2soTWVyZ2VUb1N1Y2Nlc3NvcnMp
OwogICAgICAgICAKLSAgICAgICAgaWYgKG1fdmVyYm9zZSkKKyAgICAgICAgaWYgKG1fdmVyYm9z
ZSkgewogICAgICAgICAgICAgZGF0YUxvZygiICAgICAgdGFpbCB2YXJzOiAiLCBibG9jay0+dmFs
dWVzQXRUYWlsLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgaGVhZCByZWdzOiAiLCBtYXBEdW1wKGJs
b2NrLT5zc2EtPnZhbHVlc0F0VGFpbCksICJcbiIpOworICAgICAgICB9CiAgICAgfQogICAgIAog
ICAgIHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjAsMTcgKzQ2
MCwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29u
dGFpbnMobm9kZS0+c3RydWN0dXJlKCkpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9
PSBjaGlsZDEKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5v
ZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKSkKKyAgICAgICAgICAg
ICAgICAgICAgJiYgc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4
dCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGlm
IChzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5w
cmV2aW91c1N0cnVjdHVyZSkpCisgICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250
YWlucyhub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKSkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApA
QCAtNTI0LDcgKzUxOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVj
dHVyZSAhPSBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT50cmFuc2l0
aW9uKCktPnByZXZpb3VzICE9IHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgpAQCAtNTQ3LDEx
ICs1NDEsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjYXNlIFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAgICAgICAgIGlmIChub2RlLT5zdHJ1Y3R1
cmUoKSA9PSBzdHJ1Y3R1cmUgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnk6CiAgICAgICAgICAgICBjYXNlIEFy
cmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgY2hlY2sgaWYg
dGhlIGFycmF5aWZpY2F0aW9uIGNvdWxkIGFmZmVjdCBvdXIgc3RydWN0dXJlcy4KQEAgLTEzODcs
MTMgKzEzNzYsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGlmIChjc2VNb2RlID09IFN0b3JlRWxpbWlu
YXRpb24pCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoc3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRFbGltaW5hdGlvbihub2RlLT5zdHJ1Y3R1cmUoKSwgbm9kZS0+
Y2hpbGQxKCkubm9kZSgpKSkKLSAgICAgICAgICAgICAgICBlbGltaW5hdGUoKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAg
ICAgICAgICAgaWYgKGNzZU1vZGUgPT0gTm9ybWFsQ1NFKQogICAgICAgICAgICAgICAgIGJyZWFr
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MTgsNyArNDE4LDYgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgIGNhc2Ug
SW5zdGFuY2VPZjoKICAgICAgICAgcmVhZChKU0NlbGxfc3RydWN0dXJlSUQpOwogICAgICAgICBy
ZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uY3BwCShyZXZp
c2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMywyMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKK3N0YXRpYyB1bnNpZ25lZCBjcmFzaExvY2s7CisKIHZvaWQgc3RhcnRD
cmFzaGluZygpCiB7CiAjaWYgRU5BQkxFKENPTVBBUkVfQU5EX1NXQVApCi0gICAgc3RhdGljIHVu
c2lnbmVkIGxvY2s7Ci0gICAgd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmbG9jaywg
MCwgMSkpCisgICAgd2hpbGUgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgmY3Jhc2hMb2NrLCAw
LCAxKSkKICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyNlbHNlCisgICAgY3Jh
c2hMb2NrID0gMTsKICNlbmRpZgogfQogCitib29sIGlzQ3Jhc2hpbmcoKQoreworICAgIHJldHVy
biAhIWNyYXNoTG9jazsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiBuYW1lc3Bh
Y2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkocmV2aXNp
b24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjExLDYgKzIxMSw4IEBAIGJvb2wgY2hlY2tBbmRTZXQoVCYgbGVmdCwg
VSByaWdodCkKIC8vIHdoZW4geW91J3JlIGZvcmNpbmcgYSBjcmFzaCB3aXRoIGRpYWdub3N0aWNz
Lgogdm9pZCBzdGFydENyYXNoaW5nKCk7CiAKK0pTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNDcmFz
aGluZygpOworCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb25EYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCShyZXZp
c2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbkRhdGEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIHZvaWQgQ29tbW9uRGF0YTo6bm90
aWZ5Q29tcGlsaW5nU3RydWN0dXIKICAgICBwbGFuLnRyYW5zaXRpb25zLmFkZExhemlseSgKICAg
ICAgICAgY29kZUJsb2NrLAogICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMuY29kZU9yaWdp
bk93bmVyKCksCi0gICAgICAgIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlv
dXNTdHJ1Y3R1cmUsCi0gICAgICAgIG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3
U3RydWN0dXJlKTsKKyAgICAgICAgbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cywKKyAgICAg
ICAgbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKIH0KIAogdW5zaWduZWQgQ29tbW9uRGF0YTo6
YWRkQ29kZU9yaWdpbihDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZv
bGRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDI3ICs5NywxMiBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgICAgICBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHNldCA9IG5vZGUtPnN0cnVjdHVyZVNl
dCgpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5p
c1N1YnNldE9mKHNldCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUu
aXNTdWJzZXRPZihzZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhl
Y3V0ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIg
b24gY2VsbC4KICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvUGhhbnRvbSgpOwog
ICAgICAgICAgICAgICAgICAgICBlbGltaW5hdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIHN0cnVjdHVyZVZhbHVlID0gdmFsdWUubV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZTsKLSAgICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlVmFsdWUuaXNTdWJzZXRPZihzZXQp
Ci0gICAgICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVZhbHVlLmhhc1NpbmdsZXRvbigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlVmFs
dWUuc2luZ2xldG9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0
ZShpbmRleEluQmxvY2spOyAvLyBDYXRjaCB0aGUgZmFjdCB0aGF0IHdlIG1heSBmaWx0ZXIgb24g
Y2VsbC4KLSAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdCBjaGlsZHJlbiA9IG5vZGUt
PmNoaWxkcmVuOwotICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5yZW1vdmVFZGdlKDApOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoISFjaGlsZHJlbi5jaGlsZDEoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgUGhhbnRvbSwgbm9kZS0+b3JpZ2luLCBjaGlsZHJlbik7Ci0gICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmNoaWxkcmVuLnNldENoaWxkMihFZGdlKCkpOwotICAgICAgICAgICAgICAgICAg
ICBub2RlLT5jaGlsZHJlbi5zZXRDaGlsZDMoRWRnZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
bm9kZS0+Y29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlKTsK
LSAgICAgICAgICAgICAgICAgICAgZWxpbWluYXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTE1Niw3ICsxNDEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gY2hpbGRFZGdlLm5vZGUoKTsKICAgICAg
ICAgICAgICAgICBNdWx0aUdldEJ5T2Zmc2V0RGF0YSYgZGF0YSA9IG5vZGUtPm11bHRpR2V0QnlP
ZmZzZXREYXRhKCk7CiAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
c3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVj
dHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIApAQCAtMTgwLDcgKzE2
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uu
bm9kZSgpOwogICAgICAgICAgICAgICAgIE11bHRpUHV0QnlPZmZzZXREYXRhJiBkYXRhID0gbm9k
ZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKTsKIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7
CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUo
Y2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAo
IXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
CkBAIC0yMDUsNyArMTkwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAoY2hpbGRF
ZGdlLnVzZUtpbmQoKSAhPSBDZWxsVXNlKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1f
c3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVjdHVyZSgpOworICAgICAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX3N0cnVj
dHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpCiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0yMzIsNyArMjE3LDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBBU1NFUlQoY2hpbGRFZGdlLnVzZUtp
bmQoKSA9PSBDZWxsVXNlKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkuYmVzdFByb3ZlblN0cnVj
dHVyZSgpOworICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5m
b3JOb2RlKGNoaWxkKS5tX3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIApAQCAtMjk4LDcgKzI4Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAvLyB0aGVu
IHdlIHJlZnVzZSB0byBmb2xkLgogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBvbGRWYWx1ZSA9
IG1fc3RhdGUuZm9yTm9kZShub2RlKTsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgY29uc3Rh
bnRWYWx1ZTsKLSAgICAgICAgICAgIGNvbnN0YW50VmFsdWUuc2V0KG1fZ3JhcGgsIHZhbHVlKTsK
KyAgICAgICAgICAgIGNvbnN0YW50VmFsdWUuc2V0KG1fZ3JhcGgsIHZhbHVlLCBtX3N0YXRlLnN0
cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIGNvbnN0YW50VmFsdWUuZml4VHlw
ZUZvclJlcHJlc2VudGF0aW9uKG5vZGUpOwogICAgICAgICAgICAgaWYgKG9sZFZhbHVlLm1lcmdl
KGNvbnN0YW50VmFsdWUpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzI5LDIyICsz
MTQsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgRWRnZSBjaGlsZEVkZ2UgPSBub2RlLT5jaGlsZDEo
KTsKICAgICAgICAgTm9kZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogCi0gICAgICAgIGJv
b2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAgIGJvb2wgbmVlZHNDZWxsQ2hlY2sg
PSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVjQ2VsbDsKICAgICAgICAgCiAg
ICAgICAgIEFTU0VSVCghdmFyaWFudC5jaGFpbigpKTsKLSAgICAgICAgQVNTRVJUKHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkuY29udGFpbnMoc3RydWN0dXJlKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoc3RydWN0dXJlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpLmNvbnRhaW5zKHN0cnVjdHVyZSkp
OwogICAgICAgICAKICAgICAgICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBw
dXNoIHRoZSBDRkEgZm9yd2FyZCBvdmVyIHRoZSBHZXRCeUlkCiAgICAgICAgIC8vIGFuZCBtYWtl
IHN1cmUgd2Ugc2lnbmFsIHRvIHRoZSBsb29wIHRoYXQgaXQgc2hvdWxkIGNvbnRpbnVlIGFuZCBu
b3QKICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAgICAgICAgbV9pbnRlcnByZXRl
ci5leGVjdXRlKGluZGV4SW5CbG9jayk7CiAgICAgICAgIAotICAgICAgICBpZiAobmVlZHNXYXRj
aHBvaW50KSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAg
ICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxk
RWRnZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKKyAgICAgICAgaWYg
KG5lZWRzQ2VsbENoZWNrKSB7CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2Rl
KAogICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdp
biwgY2hpbGRFZGdlKTsKICAgICAgICAgfQpAQCAtMzgxLDcgKzM2MSw2IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCkgPT0gc3RydWN0dXJlKTsKICAg
ICAgICAgCi0gICAgICAgIGJvb2wgbmVlZHNXYXRjaHBvaW50ID0gIW1fc3RhdGUuZm9yTm9kZShj
aGlsZCkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCk7CiAgICAgICAgIGJv
b2wgbmVlZHNDZWxsQ2hlY2sgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fdHlwZSAmIH5TcGVj
Q2VsbDsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBiZWZvcmUgd2UgZG8gYW55dGhpbmcgZWxz
ZSwgcHVzaCB0aGUgQ0ZBIGZvcndhcmQgb3ZlciB0aGUgUHV0QnlJZApAQCAtMzg5LDIxICszNjgs
MTYgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gZG8gYW55IGVsaW1pbmF0aW9ucy4KICAgICAgICAg
bV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7CiAKLSAgICAgICAgaWYgKG5lZWRz
V2F0Y2hwb2ludCkgewotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAg
ICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludCwgb3JpZ2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhzdHJ1Y3R1cmUpLCBj
aGlsZEVkZ2UpOwotICAgICAgICB9IGVsc2UgaWYgKG5lZWRzQ2VsbENoZWNrKSB7CisgICAgICAg
IGlmIChuZWVkc0NlbGxDaGVjaykgewogICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBv
cmlnaW4sIGNoaWxkRWRnZSk7CiAgICAgICAgIH0KIAogICAgICAgICBjaGlsZEVkZ2Uuc2V0VXNl
S2luZChLbm93bkNlbGxVc2UpOwogCi0gICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKiB0
cmFuc2l0aW9uRGF0YSA9IDA7CisgICAgICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSAwOwog
ICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24p
IHsKLSAgICAgICAgICAgIHRyYW5zaXRpb25EYXRhID0gbV9ncmFwaC5hZGRTdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgKLSAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShzdHJ1
Y3R1cmUsIHZhcmlhbnQubmV3U3RydWN0dXJlKCkpKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24g
PSBtX2dyYXBoLm1fdHJhbnNpdGlvbnMuYWRkKHN0cnVjdHVyZSwgdmFyaWFudC5uZXdTdHJ1Y3R1
cmUoKSk7CiAKICAgICAgICAgICAgIGlmIChub2RlLT5vcCgpID09IFB1dEJ5SWQpIHsKICAgICAg
ICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+c3RvcmVkUHJvdG90eXBlKCkuaXNOdWxsKCkpIHsK
QEAgLTQzOSw3ICs0MTMsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgQVNTRVJUKCFpc0lubGlu
ZU9mZnNldCh2YXJpYW50Lm9mZnNldCgpKSk7CiAgICAgICAgICAgICBOb2RlKiBhbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAg
ICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsCi0gICAg
ICAgICAgICAgICAgb3JpZ2luLCBPcEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOwor
ICAgICAgICAgICAgICAgIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2UpOwog
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBTdG9yZUJhcnJpZXIsIG9yaWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtu
b3duQ2VsbFVzZSkpOwogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gRWRnZShhbGxvY2F0
ZVByb3BlcnR5U3RvcmFnZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00NDksNyArNDIzLDcgQEAg
cHJpdmF0ZToKIAogICAgICAgICAgICAgTm9kZSogcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgb3JpZ2luLAotICAgICAgICAg
ICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSwKKyAgICAgICAgICAgICAg
ICBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSwKICAgICAgICAgICAgICAgICBFZGdlKG1f
aW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIGluZGV4SW5CbG9j
aywgU3BlY05vbmUsIEdldEJ1dHRlcmZseSwgb3JpZ2luLCBjaGlsZEVkZ2UpKSk7CiAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0
b3JlQmFycmllciwgb3JpZ2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxs
VXNlKSk7CkBAIC00NTcsNyArNDMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAg
IGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewotICAg
ICAgICAgICAgTm9kZSogcHV0U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQ
dXRTdHJ1Y3R1cmUsIG9yaWdpbiwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgY2hpbGRFZGdlKTsK
KyAgICAgICAgICAgIE5vZGUqIHB1dFN0cnVjdHVyZSA9IG1fZ3JhcGguYWRkTm9kZShTcGVjTm9u
ZSwgUHV0U3RydWN0dXJlLCBvcmlnaW4sIE9wSW5mbyh0cmFuc2l0aW9uKSwgY2hpbGRFZGdlKTsK
ICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVj
Tm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVkZ2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBL
bm93bkNlbGxVc2UpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydChpbmRleElu
QmxvY2ssIHB1dFN0cnVjdHVyZSk7CiAgICAgICAgIH0KQEAgLTQ3NSwxNiArNDQ5LDEyIEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25DaGVjayhOb2RlT3JpZ2lu
IG9yaWdpbiwgdW5zaWduZWQgaW5kZXhJbkJsb2NrLCBKU0NlbGwqIGNlbGwpCiAgICAgeworICAg
ICAgICBpZiAobV9ncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKGNlbGwtPnN0cnVjdHVyZSgp
KSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBOb2RlKiB3ZWFrQ29uc3RhbnQgPSBt
X2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBzcGVj
dWxhdGlvbkZyb21WYWx1ZShjZWxsKSwgV2Vha0pTQ29uc3RhbnQsIG9yaWdpbiwgT3BJbmZvKGNl
bGwpKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLndhdGNocG9pbnRzKCkuaXNTdGls
bFZhbGlkKGNlbGwtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKSkgewot
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKLSAgICAgICAgICAgICAgICBp
bmRleEluQmxvY2ssIFNwZWNOb25lLCBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgb3Jp
Z2luLAotICAgICAgICAgICAgICAgIE9wSW5mbyhjZWxsLT5zdHJ1Y3R1cmUoKSksIEVkZ2Uod2Vh
a0NvbnN0YW50LCBDZWxsVXNlKSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQog
ICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgaW5kZXhJbkJs
b2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG9yaWdpbiwKICAgICAgICAgICAgIE9wSW5m
byhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChjZWxsLT5zdHJ1Y3R1cmUoKSkpLCBFZGdlKHdlYWtD
b25zdGFudCwgQ2VsbFVzZSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC02MiwxNCArNjIsMTIgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemls
eShKU0FycgogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcpOwogfQogCi12b2lkIERl
c2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtp
bmQgZXhpdEtpbmQsIFdhdGNocG9pbnRTZXQqIHNldCkKK2Jvb2wgRGVzaXJlZFdhdGNocG9pbnRz
Ojpjb25zaWRlcihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX3NldHMuYWRkTGF6aWx5
KGNvZGVPcmlnaW4sIGV4aXRLaW5kLCBzZXQpOwotfQotCi12b2lkIERlc2lyZWRXYXRjaHBvaW50
czo6YWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQsIElu
bGluZVdhdGNocG9pbnRTZXQmIHNldCkKLXsKLSAgICBtX2lubGluZVNldHMuYWRkTGF6aWx5KGNv
ZGVPcmlnaW4sIGV4aXRLaW5kLCAmc2V0KTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxk
V2F0Y2goKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGFkZExhemlseShzdHJ1Y3R1cmUt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lk
IERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21t
b25EYXRhJiBjb21tb25EYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdE
ZXNpcmVkV2F0Y2hwb2ludHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zOSwyNiArMzksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIFdhdGNocG9pbnRTZXRUeXBlPgotc3RydWN0IFdhdGNocG9pbnRGb3JH
ZW5lcmljV2F0Y2hwb2ludFNldCB7Ci0gICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0KCkKLSAgICAgICAgOiBtX2V4aXRLaW5kKEV4aXRLaW5kVW5zZXQpCi0gICAgICAgICwgbV9z
ZXQoMCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hw
b2ludFNldCgKLSAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2lu
ZCwgV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAgICAgICAgOiBtX2NvZGVPcmlnaW4oY29kZU9y
aWdpbikKLSAgICAgICAgLCBtX2V4aXRLaW5kKGV4aXRLaW5kKQotICAgICAgICAsIG1fc2V0KHNl
dCkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwotICAg
IEV4aXRLaW5kIG1fZXhpdEtpbmQ7Ci0gICAgV2F0Y2hwb2ludFNldFR5cGUqIG1fc2V0OwotfTsK
K2NsYXNzIEdyYXBoOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RydWN0IEdlbmVyaWNTZXRB
ZGFwdG9yIHsKQEAgLTk1LDEyICs3Niw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9zZXRzLmFkZChz
ZXQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSogc2V0KQotICAgIHsKLSAg
ICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzLmFwcGVuZCgKLSAgICAgICAgICAgIFdhdGNocG9p
bnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4oY29kZU9yaWdpbiwg
ZXhpdEtpbmQsIHNldCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgQ29tbW9uRGF0YSYgY29tbW9uKQogICAgIHsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoIW1fcmVhbGx5QWRkZWQpOwpAQCAtMTEyLDE0ICs4Nyw2IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIEFkYXB0b3I6OmFkZChjb2RlQmxvY2ssICppdGVyLCAmY29tbW9uLndhdGNocG9p
bnRzLmxhc3QoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1fcHJvZmlsZWRXYXRjaHBvaW50cy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgIFdh
dGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlwZT4gd2F0Y2hw
b2ludCA9Ci0gICAgICAgICAgICAgICAgbV9wcm9maWxlZFdhdGNocG9pbnRzW2ldOwotICAgICAg
ICAgICAgY29tbW9uLnByb2ZpbGVkV2F0Y2hwb2ludHMuYXBwZW5kKAotICAgICAgICAgICAgICAg
IFByb2ZpbGVkQ29kZUJsb2NrSmV0dGlzb25pbmdXYXRjaHBvaW50KHdhdGNocG9pbnQubV9jb2Rl
T3JpZ2luLCB3YXRjaHBvaW50Lm1fZXhpdEtpbmQsIGNvZGVCbG9jaykpOwotICAgICAgICAgICAg
QWRhcHRvcjo6YWRkKGNvZGVCbG9jaywgd2F0Y2hwb2ludC5tX3NldCwgJmNvbW1vbi5wcm9maWxl
ZFdhdGNocG9pbnRzLmxhc3QoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIG1fcmVh
bGx5QWRkZWQgPSB0cnVlOwogICAgIH0KICAgICAKQEAgLTEzMiw1MyArOTksMTYgQEAgcHVibGlj
OgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICAKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wcm9maWxlZFdhdGNocG9pbnRzLnNpemUoKTsgaS0t
OykgewotICAgICAgICAgICAgaWYgKEFkYXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZChtX3Byb2Zp
bGVkV2F0Y2hwb2ludHNbaV0ubV9zZXQpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAot
I2lmIEFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgaXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXRU
eXBlKiBzZXQpCisgICAgYm9vbCBpc1dhdGNoZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKHNl
dCk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShXYXRjaHBv
aW50U2V0VHlwZSopCi0gICAgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0jZWxzZQot
ICAgIGJvb2wgaXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgewotICAg
ICAgICBib29sIHJlc3VsdCA9ICFBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQoc2V0KTsKLSAg
ICAgICAgbV9maXJzdEtub3duU3RhdGUuYWRkKHNldCwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKFdh
dGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgewotICAgICAgICB0eXBlbmFtZSBTdGF0ZU1hcDo6
aXRlcmF0b3IgaXRlciA9IG1fZmlyc3RLbm93blN0YXRlLmZpbmQoc2V0KTsKLSAgICAgICAgaWYg
KGl0ZXIgPT0gbV9maXJzdEtub3duU3RhdGUuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUgIT0gIUFkYXB0b3I6Omhh
c0JlZW5JbnZhbGlkYXRlZChzZXQpOwotICAgIH0KLSNlbmRpZgotICAgIAotICAgIGJvb2wgaXNW
YWxpZE9yTWl4ZWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBpc1N0aWxsVmFsaWQoc2V0KSB8fCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKHNldCk7CisgICAg
ICAgIHJldHVybiBtX3NldHMuY29udGFpbnMoc2V0KTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
VmVjdG9yPFdhdGNocG9pbnRGb3JHZW5lcmljV2F0Y2hwb2ludFNldDxXYXRjaHBvaW50U2V0VHlw
ZT4+IG1fcHJvZmlsZWRXYXRjaHBvaW50czsKICAgICBIYXNoU2V0PFdhdGNocG9pbnRTZXRUeXBl
Kj4gbV9zZXRzOwotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBTdGF0ZU1hcCBtX2ZpcnN0S25v
d25TdGF0ZTsKLSNlbmRpZgogICAgIGJvb2wgbV9yZWFsbHlBZGRlZDsKIH07CiAKQEAgLTE5MCw0
OCArMTIwLDI0IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50U2V0Kik7
CiAgICAgdm9pZCBhZGRMYXppbHkoSW5saW5lV2F0Y2hwb2ludFNldCYpOwogICAgIHZvaWQgYWRk
TGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7Ci0gICAgdm9pZCBhZGRMYXppbHkoQ29kZU9yaWdp
biwgRXhpdEtpbmQsIFdhdGNocG9pbnRTZXQqKTsKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3Jp
Z2luLCBFeGl0S2luZCwgSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIAorICAgIGJvb2wgY29u
c2lkZXIoU3RydWN0dXJlKik7CiAgICAgCiAgICAgdm9pZCByZWFsbHlBZGQoQ29kZUJsb2NrKiwg
Q29tbW9uRGF0YSYpOwogICAgIAogICAgIGJvb2wgYXJlU3RpbGxWYWxpZCgpIGNvbnN0OwogICAg
IAotICAgIGJvb2wgaXNTdGlsbFZhbGlkKFdhdGNocG9pbnRTZXQqIHNldCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3NldHMuaXNTdGlsbFZhbGlkKHNldCk7Ci0gICAgfQotICAgIGJvb2wgaXNT
dGlsbFZhbGlkKElubGluZVdhdGNocG9pbnRTZXQmIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2lubGluZVNldHMuaXNTdGlsbFZhbGlkKCZzZXQpOwotICAgIH0KLSAgICBib29sIGlzU3Rp
bGxWYWxpZChKU0FycmF5QnVmZmVyVmlldyogdmlldykKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
X2J1ZmZlclZpZXdzLmlzU3RpbGxWYWxpZCh2aWV3KTsKLSAgICB9Ci0gICAgYm9vbCBzaG91bGRB
c3N1bWVNaXhlZFN0YXRlKFdhdGNocG9pbnRTZXQqIHNldCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX3NldHMuc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShzZXQpOwotICAgIH0KLSAgICBib29sIHNo
b3VsZEFzc3VtZU1peGVkU3RhdGUoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5zaG91bGRBc3N1bWVNaXhlZFN0YXRlKCZzZXQpOwot
ICAgIH0KLSAgICBib29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoSlNBcnJheUJ1ZmZlclZpZXcq
IHZpZXcpCi0gICAgewotICAgICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5zaG91bGRBc3N1bWVN
aXhlZFN0YXRlKHZpZXcpOwotICAgIH0KLSAgICBib29sIGlzVmFsaWRPck1peGVkKFdhdGNocG9p
bnRTZXQqIHNldCkKKyAgICBib29sIGlzV2F0Y2hlZChXYXRjaHBvaW50U2V0KiBzZXQpCiAgICAg
ewotICAgICAgICByZXR1cm4gbV9zZXRzLmlzVmFsaWRPck1peGVkKHNldCk7CisgICAgICAgIHJl
dHVybiBtX3NldHMuaXNXYXRjaGVkKHNldCk7CiAgICAgfQotICAgIGJvb2wgaXNWYWxpZE9yTWl4
ZWQoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQorICAgIGJvb2wgaXNXYXRjaGVkKElubGluZVdh
dGNocG9pbnRTZXQmIHNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZVNldHMuaXNW
YWxpZE9yTWl4ZWQoJnNldCk7CisgICAgICAgIHJldHVybiBtX2lubGluZVNldHMuaXNXYXRjaGVk
KCZzZXQpOwogICAgIH0KLSAgICBib29sIGlzVmFsaWRPck1peGVkKEpTQXJyYXlCdWZmZXJWaWV3
KiB2aWV3KQorICAgIGJvb2wgaXNXYXRjaGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNWYWxpZE9yTWl4ZWQodmlldyk7Cisg
ICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKICAgICB9CiAgICAg
CiBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAko
cmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0Mu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODIsNyArMTgyLDYgQEAgYm9vbCBkb2VzR0MoR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgUHV0QnlWYWxEaXJlY3Q6CiAgICAgY2FzZSBQ
dXRCeVZhbDoKICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6Ci0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50
b21QdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBHZXRCeU9mZnNldDoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMwLDcgKzkzMCw2IEBAIHByaXZhdGU6CiAKICAgICAgICAgY2FzZSBDaGVja0V4ZWN1
dGFibGU6CiAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAg
ICAgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgogICAgICAgICBjYXNlIENyZWF0ZVRoaXM6CkBA
IC0xMzUxLDcgKzEzNTAsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgSlNPYmplY3Qq
IHN0cmluZ1Byb3RvdHlwZU9iamVjdCA9IGFzT2JqZWN0KHN0cmluZ09iamVjdFN0cnVjdHVyZS0+
c3RvcmVkUHJvdG90eXBlKCkpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0
cnVjdHVyZSA9IHN0cmluZ1Byb3RvdHlwZU9iamVjdC0+c3RydWN0dXJlKCk7Ci0gICAgICAgIGlm
ICghbV9ncmFwaC53YXRjaHBvaW50cygpLmlzU3RpbGxWYWxpZChzdHJpbmdQcm90b3R5cGVTdHJ1
Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKQorICAgICAgICBpZiAoIW1fZ3JhcGgu
d2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgaWYgKHN0cmluZ1Byb3RvdHlw
ZVN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCkBAIC0xOTA1LDI1ICsxOTA0LDE1IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFkZFJlcXVpcmVkUGhhbnRvbShlZGdlLm5v
ZGUoKSk7CiAKKyAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIWVkZ2UtPmhh
c0RvdWJsZVJlc3VsdCgpKTsKKwogICAgICAgICAgICAgTm9kZSogcmVzdWx0OwotICAgICAgICAg
ICAgaWYgKGVkZ2UtPmhhc0RvdWJsZVJlc3VsdCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVGhp
cyB3aWxsIG5ldmVyIGhhcHBlbi4KLSAgICAgICAgICAgICAgICBzdGFydENyYXNoaW5nKCk7Ci0g
ICAgICAgICAgICAgICAgZGF0YUxvZygiRm91bmQgYW4gSW50NTJSZXBVc2UgdG8gYSBkb3VibGUg
cmVzdWx0OiAiLCBub2RlLCAiIC0+ICIsIGVkZ2UsICJcbiIpOwotICAgICAgICAgICAgICAgIG1f
Z3JhcGguZHVtcCgpOwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZUludDMyRm9y
QXJpdGhtZXRpYygpKSB7CisgICAgICAgICAgICBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50
MzJGb3JBcml0aG1ldGljKCkpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3Bl
Y0ludDMyLCBJbnQ1MlJlcCwgbm9kZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBFZGdl
KGVkZ2Uubm9kZSgpLCBJbnQzMlVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIG9ubHkgaGVyZSBmb3IgZGVhbGluZyB3aXRoIGNvbnN0YW50cy4K
LSAgICAgICAgICAgICAgICBpZiAoZWRnZS0+b3AoKSAhPSBKU0NvbnN0YW50KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRm91bmQgYW4gSW50NTJSZXBVc2Ugb24gc29tZXRoaW5nIHRoYXQgaXMgbmVpdGhlciBJbnQz
MiBub3IgYSBjb25zdGFudDogIiwgbm9kZSwgIiAtPiAiLCBlZGdlLCAiXG4iKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgZWRnZS0+b3AoKSA9PSBKU0NvbnN0YW50KTsKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY01hY2hpbmVJbnQsIEludDUyQ29uc3Rh
bnQsIG5vZGUtPm9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKGVkZ2UtPmNvbnN0
YW50TnVtYmVyKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMTYgQEAgR3JhcGg6OkdyYXBoKFZNJiB2
bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdgogCiBHcmFwaDo6fkdyYXBoKCkKIHsKKyAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IG51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gdGhpcy0+YmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
IGlmICghYmxvY2spCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKHVuc2ln
bmVkIHBoaUluZGV4ID0gYmxvY2stPnBoaXMuc2l6ZSgpOyBwaGlJbmRleC0tOykKKyAgICAgICAg
ICAgIG1fYWxsb2NhdG9yLmZyZWUoYmxvY2stPnBoaXNbcGhpSW5kZXhdKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5kZXgtLTspCisgICAg
ICAgICAgICBtX2FsbG9jYXRvci5mcmVlKGJsb2NrLT5hdChub2RlSW5kZXgpKTsKKyAgICB9CiAg
ICAgbV9hbGxvY2F0b3IuZnJlZUFsbCgpOwogfQogCkBAIC0yMTEsOCArMjIxLDggQEAgdm9pZCBH
cmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29t
bWEsIGluQ29udGV4dChub2RlLT5zdHJ1Y3R1cmVTZXQoKSwgY29udGV4dCkpOwogICAgIGlmIChu
b2RlLT5oYXNTdHJ1Y3R1cmUoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQo
Km5vZGUtPnN0cnVjdHVyZSgpLCBjb250ZXh0KSk7Ci0gICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KCpu
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLCBjb250ZXh0
KSwgIiAtPiAiLCBpbkNvbnRleHQoKm5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3
U3RydWN0dXJlLCBjb250ZXh0KSk7CisgICAgaWYgKG5vZGUtPmhhc1RyYW5zaXRpb24oKSkKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcEluQ29udGV4dChub2RlLT50cmFuc2l0
aW9uKCksIGNvbnRleHQpKTsKICAgICBpZiAobm9kZS0+aGFzRnVuY3Rpb24oKSkgewogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsICJmdW5jdGlvbigiLCBSYXdQb2ludGVyKG5vZGUtPmZ1bmN0aW9u
KCkpLCAiLCAiKTsKICAgICAgICAgaWYgKG5vZGUtPmZ1bmN0aW9uKCktPmluaGVyaXRzKEpTRnVu
Y3Rpb246OmluZm8oKSkpIHsKQEAgLTMzOCw5ICszNDgsMTEgQEAgdm9pZCBHcmFwaDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0LCBjb25zdAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJSOiIsIHNv
cnRlZExpc3REdW1wKHJlYWRzLmRpcmVjdCgpLCAiLCIpKTsKICAgICBpZiAoIXdyaXRlcy5pc0Vt
cHR5KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlc6Iiwgc29ydGVkTGlzdER1bXAod3Jp
dGVzLmRpcmVjdCgpLCAiLCIpKTsKLSAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBub2RlLT5v
cmlnaW4uc2VtYW50aWMuYnl0ZWNvZGVJbmRleCk7Ci0gICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1h
bnRpYyAhPSBub2RlLT5vcmlnaW4uZm9yRXhpdCkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
ZXhpdDogIiwgbm9kZS0+b3JpZ2luLmZvckV4aXQpOworICAgIGlmIChub2RlLT5vcmlnaW4uaXNT
ZXQoKSkgeworICAgICAgICBvdXQucHJpbnQoY29tbWEsICJiYyMiLCBub2RlLT5vcmlnaW4uc2Vt
YW50aWMuYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMg
IT0gbm9kZS0+b3JpZ2luLmZvckV4aXQpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsICJl
eGl0OiAiLCBub2RlLT5vcmlnaW4uZm9yRXhpdCk7CisgICAgfQogICAgIAogICAgIG91dC5wcmlu
dCgiKSIpOwogCkBAIC0zNTYsNyArMzY4LDcgQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0LCBjb25zdAogCiB2b2lkIEdyYXBoOjpkdW1wQmxvY2tIZWFkZXIoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QgY2hhciogcHJlZml4LCBCYXNpY0Jsb2NrKiBibG9jaywgUGhpTm9kZUR1bXBN
b2RlIHBoaU5vZGVEdW1wTW9kZSwgRHVtcENvbnRleHQqIGNvbnRleHQpCiB7Ci0gICAgb3V0LnBy
aW50KHByZWZpeCwgIkJsb2NrICIsICpibG9jaywgIiAoIiwgaW5Db250ZXh0KGJsb2NrLT5hdCgw
KS0+b3JpZ2luLnNlbWFudGljLCBjb250ZXh0KSwgIik6ICIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/
ICIiIDogIihza2lwcGVkKSIsIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6
ICIiLCAiXG4iKTsKKyAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIiwgKmJsb2NrLCAiICgi
LCBpbkNvbnRleHQoYmxvY2stPmF0KDApLT5vcmlnaW4uc2VtYW50aWMsIGNvbnRleHQpLCAiKToi
LCBibG9jay0+aXNSZWFjaGFibGUgPyAiIiA6ICIgKHNraXBwZWQpIiwgYmxvY2stPmlzT1NSVGFy
Z2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsIGJsb2NrLT5jZmFIYXNWaXNpdGVkID8gIiIgOiAi
IChDRkEtdW5yZWFjaGFibGUpIiwgIlxuIik7CiAgICAgaWYgKGJsb2NrLT5leGVjdXRpb25Db3Vu
dCA9PSBibG9jay0+ZXhlY3V0aW9uQ291bnQpCiAgICAgICAgIG91dC5wcmludChwcmVmaXgsICIg
IEV4ZWN1dGlvbiBjb3VudDogIiwgYmxvY2stPmV4ZWN1dGlvbkNvdW50LCAiXG4iKTsKICAgICBv
dXQucHJpbnQocHJlZml4LCAiICBQcmVkZWNlc3NvcnM6Iik7CkBAIC00MzksMTYgKzQ1MSwxNyBA
QCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgIGlmICgh
YmxvY2spCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZHVtcEJsb2NrSGVhZGVyKG91
dCwgIiIsIGJsb2NrLCBEdW1wQWxsUGhpcywgY29udGV4dCk7CisgICAgICAgIG91dC5wcmludCgi
ICBTdGF0ZXM6ICIsIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQsICJcbiIp
OwogICAgICAgICBzd2l0Y2ggKG1fZm9ybSkgewogICAgICAgICBjYXNlIExvYWRTdG9yZToKICAg
ICAgICAgY2FzZSBUaHJlYWRlZENQUzogewotICAgICAgICAgICAgb3V0LnByaW50KCIgIHZhcnMg
YmVmb3JlOiAiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBWYXJzIEJlZm9yZTogIik7CiAg
ICAgICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0ZWQpCiAgICAgICAgICAgICAgICAgb3V0
LnByaW50KGluQ29udGV4dChibG9jay0+dmFsdWVzQXRIZWFkLCBjb250ZXh0KSk7CiAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CiAgICAgICAg
ICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFyIGxpbmtz
OiAiLCBibG9jay0+dmFyaWFibGVzQXRIZWFkLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICBWYXIgTGlua3M6ICIsIGJsb2NrLT52YXJpYWJsZXNBdEhlYWQsICJcbiIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDY0LDE2ICs0NzcsMTcg
QEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBEdW1wQwogICAgICAgICAgICAg
ZHVtcChvdXQsICIiLCBibG9jay0+YXQoaSksIGNvbnRleHQpOwogICAgICAgICAgICAgbGFzdE5v
ZGUgPSBibG9jay0+YXQoaSk7CiAgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KCIgIFN0YXRl
czogIiwgYmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiwgIiwgIiwgYmxvY2stPmNmYVN0cnVjdHVy
ZUNsb2JiZXJTdGF0ZUF0VGFpbCwgIlxuIik7CiAgICAgICAgIHN3aXRjaCAobV9mb3JtKSB7CiAg
ICAgICAgIGNhc2UgTG9hZFN0b3JlOgogICAgICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7Ci0gICAg
ICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBhZnRlcjogIik7CisgICAgICAgICAgICBvdXQucHJp
bnQoIiAgVmFycyBBZnRlcjogIik7CiAgICAgICAgICAgICBpZiAoYmxvY2stPmNmYUhhc1Zpc2l0
ZWQpCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChibG9jay0+dmFsdWVzQXRU
YWlsLCBjb250ZXh0KSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCI8ZW1wdHk+Iik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7Ci0gICAgICAgICAg
ICBvdXQucHJpbnQoIiAgdmFyIGxpbmtzOiAiLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLCAiXG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBWYXIgTGlua3M6ICIsIGJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwsICJcbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
ICAgIApAQCAtODAwLDggKzgxNCw5IEBAIEpTQXJyYXlCdWZmZXJWaWV3KiBHcmFwaDo6dHJ5R2V0
Rm9sZGFibGUKICAgICBKU0FycmF5QnVmZmVyVmlldyogdmlldyA9IGpzRHluYW1pY0Nhc3Q8SlNB
cnJheUJ1ZmZlclZpZXcqPih2YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CiAgICAgaWYgKCF2aWV3
KQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIXdhdGNocG9pbnRzKCkuaXNTdGlsbFZhbGlk
KHZpZXcpKQorICAgIGlmICghdmlldy0+bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOworICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOwogICAgIHJldHVybiB2aWV3OwogfQogCkBAIC04NDYsNyAr
ODYxLDYgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKG5v
ZGUtPnN0cnVjdHVyZVNldCgpW2ldKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
CiAgICAgICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlU
b1N0cnVjdHVyZToKICAgICAgICAgICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgpAQCAtODU4LDkg
Kzg3MiwzNCBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAg
ICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgY2FzZSBS
ZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5k
VW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUpOworICAgICAgICAgICAg
ICAgICAgICBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKTsKICAgICAgICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKAotICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlP
ZmZzZXQ6CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIoc2V0W2pdKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRv
IG1hcmsgYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQK
KyAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0
cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIG1hcmsgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
IGNhbGxMaW5rU3RhdHVzIGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQg
aWYgYW55IG9mIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYW50cyBkaWQgdGhhdC4K
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIE11bHRpUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAg
ICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZh
cmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5r
aW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24pCisgICAgICAgICAgICAgICAgICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHZhcmlhbnQubmV3
U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC04NzAsNiArOTA5LDM1
IEBAIHZvaWQgR3JhcGg6OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICB9CiB9CiAK
K3ZvaWQgR3JhcGg6OmFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBpZiAoIXN0cnVjdHVyZS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmICh3YXRjaHBvaW50cygpLmlzV2F0Y2hlZChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25XYXRjaHBv
aW50U2V0KCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgREZHX0NSQVNIKCp0aGlzLCBu
dWxscHRyLCB0b0NTdHJpbmcoIlN0cnVjdHVyZSAiLCBwb2ludGVyRHVtcChzdHJ1Y3R1cmUpLCAi
IGlzIHdhdGNoYWJsZSBidXQgaXNuJ3QgYmVpbmcgd2F0Y2hlZC4iKS5kYXRhKCkpOworfQorCit2
b2lkIEdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKAorICAgIE5vZGUqIG5vZGUsIGNvbnN0
IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciog
YXNzZXJ0aW9uKQoreworICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKKyAgICBkYXRhTG9nKCJERkcgQVNT
RVJUSU9OIEZBSUxFRDogIiwgYXNzZXJ0aW9uLCAiXG4iKTsKKyAgICBkYXRhTG9nKGZpbGUsICIo
IiwgbGluZSwgIikgOiAiLCBmdW5jdGlvbiwgIlxuIik7CisgICAgZGF0YUxvZygiXG4iKTsKKyAg
ICBpZiAobm9kZSkgeworICAgICAgICBkYXRhTG9nKCJXaGlsZSBoYW5kbGluZyBub2RlICIsIG5v
ZGUsICJcbiIpOworICAgICAgICBkYXRhTG9nKCJcbiIpOworICAgIH0KKyAgICBkYXRhTG9nKCJH
cmFwaCBhdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICBkdW1wKCk7CisgICAgZGF0YUxvZygi
XG4iKTsKKyAgICBkYXRhTG9nKCJERkcgQVNTRVJUSU9OIEZBSUxFRDogIiwgYXNzZXJ0aW9uLCAi
XG4iKTsKKyAgICBkYXRhTG9nKGZpbGUsICIoIiwgbGluZSwgIikgOiAiLCBmdW5jdGlvbiwgIlxu
Iik7CisgICAgQ1JBU0goKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw4ICsxNjksMTIgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gY29uc3RhbnRSZWdpc3RlcjsKICAgICB9CiAgICAgCisgICAgdm9pZCBhc3NlcnRJ
c1dhdGNoZWQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpOworICAgIAogICAgIHZvaWQgY29udmVydFRv
Q29uc3RhbnQoTm9kZSogbm9kZSwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CisgICAgICAgIGlmICh2
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGFzc2VydElzV2F0Y2hlZCh2YWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkpOwogICAgICAgICBpZiAodmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAg
ICAgIG5vZGUtPmNvbnZlcnRUb1dlYWtDb25zdGFudCh2YWx1ZS5hc0NlbGwoKSk7CiAgICAgICAg
IGVsc2UKQEAgLTM5MCwxMiArMzk0LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gJm1fc3Ry
dWN0dXJlU2V0Lmxhc3QoKTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEqIGFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKGNvbnN0IFN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhJiBzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSkKLSAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEuYXBwZW5kKHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKTsKLSAgICAgICAg
cmV0dXJuICZtX3N0cnVjdHVyZVRyYW5zaXRpb25EYXRhLmxhc3QoKTsKLSAgICB9Ci0gICAgCiAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdEZvcihDb2RlT3JpZ2luIGNvZGVPcmlnaW4p
CiAgICAgewogICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdEZvcihjb2Rl
T3JpZ2luKTsKQEAgLTQ0Niw4ICs0NDQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBtYXNx
dWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChjb25zdCBDb2RlT3JpZ2lu
JiBjb2RlT3JpZ2luKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcGxhbi53YXRjaHBvaW50cy5p
c1N0aWxsVmFsaWQoCi0gICAgICAgICAgICBnbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbiktPm1h
c3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCkpOworICAgICAgICByZXR1cm4gZ2xvYmFs
T2JqZWN0Rm9yKGNvZGVPcmlnaW4pLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludCgp
LT5pc1N0aWxsVmFsaWQoKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNHbG9iYWxFeGl0U2l0
ZShjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCkKQEAgLTgw
Nyw2ICs4MDQsMTAgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCB2aXNpdENoaWxk
cmVuKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7CiAgICAgCisgICAgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGhhbmRsZUFzc2VydGlvbkZhaWx1cmUoCisgICAgICAgIE5vZGUqIG5vZGUsIGNv
bnN0IGNoYXIqIGZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwKKyAgICAgICAg
Y29uc3QgY2hhciogYXNzZXJ0aW9uKTsKKyAgICAKICAgICBWTSYgbV92bTsKICAgICBQbGFuJiBt
X3BsYW47CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKQEAgLTgyMyw3ICs4MjQsNyBAQCBw
dWJsaWM6CiAgICAgU2VnbWVudGVkVmVjdG9yPFZhcmlhYmxlQWNjZXNzRGF0YSwgMTY+IG1fdmFy
aWFibGVBY2Nlc3NEYXRhOwogICAgIFNlZ21lbnRlZFZlY3RvcjxBcmd1bWVudFBvc2l0aW9uLCA4
PiBtX2FyZ3VtZW50UG9zaXRpb25zOwogICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVTZXQs
IDE2PiBtX3N0cnVjdHVyZVNldDsKLSAgICBTZWdtZW50ZWRWZWN0b3I8U3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEsIDg+IG1fc3RydWN0dXJlVHJhbnNpdGlvbkRhdGE7CisgICAgQmFnPFRyYW5zaXRp
b24+IG1fdHJhbnNpdGlvbnM7CiAgICAgU2VnbWVudGVkVmVjdG9yPE5ld0FycmF5QnVmZmVyRGF0
YSwgND4gbV9uZXdBcnJheUJ1ZmZlckRhdGE7CiAgICAgQmFnPEJyYW5jaERhdGE+IG1fYnJhbmNo
RGF0YTsKICAgICBCYWc8U3dpdGNoRGF0YT4gbV9zd2l0Y2hEYXRhOwpAQCAtOTMzLDYgKzkzNCwx
NyBAQCBwcml2YXRlOgogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKGZhbHNlKQogCisj
ZGVmaW5lIERGR19BU1NFUlQoZ3JhcGgsIG5vZGUsIGFzc2VydGlvbikgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGlmICghIShhc3NlcnRpb24pKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAobm9kZSksIF9fRklMRV9fLCBfX0xJTkVfXywgV1RG
X1BSRVRUWV9GVU5DVElPTiwgI2Fzc2VydGlvbik7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKwor
I2RlZmluZSBERkdfQ1JBU0goZ3JhcGgsIG5vZGUsIHJlYXNvbikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIChncmFwaCkuaGFuZGxlQXNzZXJ0aW9uRmFpbHVyZSggICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAobm9kZSksIF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgKHJlYXNvbikpOworCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE2
OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3Rh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw4IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAorc3RhdGljIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwor
CiBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6SW5QbGFjZUFic3RyYWN0U3RhdGUoR3JhcGgmIGdyYXBo
KQogICAgIDogbV9ncmFwaChncmFwaCkKICAgICAsIG1fdmFyaWFibGVzKG1fZ3JhcGgubV9jb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSwgZ3JhcGgubV9sb2NhbFZhcnMpCkBAIC01OCwzNiArNjAs
MjAgQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0JsbwogICAgICAgICBm
b3JOb2RlKGJhc2ljQmxvY2stPmF0KGkpKS5jbGVhcigpOwogCiAgICAgbV92YXJpYWJsZXMgPSBi
YXNpY0Jsb2NrLT52YWx1ZXNBdEhlYWQ7Ci0gICAgbV9oYXZlU3RydWN0dXJlcyA9IGZhbHNlOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMo
KTsgKytpKSB7Ci0gICAgICAgIGlmIChtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5oYXNDbG9iYmVy
YWJsZVN0YXRlKCkpIHsKLSAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKLSAgICAgICAgaWYgKG1f
dmFyaWFibGVzLmxvY2FsKGkpLmhhc0Nsb2JiZXJhYmxlU3RhdGUoKSkgewotICAgICAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KICAgICAKICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7CiAgICAgICAgIEhh
c2hNYXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+OjppdGVyYXRvciBpdGVyID0gYmFzaWNCbG9jay0+
c3NhLT52YWx1ZXNBdEhlYWQuYmVnaW4oKTsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJh
Y3RWYWx1ZT46Oml0ZXJhdG9yIGVuZCA9IGJhc2ljQmxvY2stPnNzYS0+dmFsdWVzQXRIZWFkLmVu
ZCgpOwotICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikKICAgICAgICAgICAgIGZvck5vZGUoaXRlci0+a2V5KSA9
IGl0ZXItPnZhbHVlOwotICAgICAgICAgICAgaWYgKGl0ZXItPnZhbHVlLmhhc0Nsb2JiZXJhYmxl
U3RhdGUoKSkKLSAgICAgICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKLSAgICAg
ICAgfQogICAgIH0KLSAgICAKICAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFs
c2U7CiAgICAgYmFzaWNCbG9jay0+Y2ZhSGFzVmlzaXRlZCA9IHRydWU7CiAgICAgbV9ibG9jayA9
IGJhc2ljQmxvY2s7CiAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKICAgICBtX2ZvdW5kQ29uc3RhbnRz
ID0gZmFsc2U7CiAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0aW9u
OworICAgIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlID0gYmFzaWNCbG9jay0+Y2ZhU3RydWN0dXJl
Q2xvYmJlclN0YXRlQXRIZWFkOwogfQogCiBzdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKEhhc2hN
YXA8Tm9kZSosIEFic3RyYWN0VmFsdWU+JiB2YWx1ZXMsIEhhc2hTZXQ8Tm9kZSo+JiBsaXZlKQpA
QCAtMTA2LDYgKzkyLDggQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSgp
CiAgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9IHRydWU7CiAgICAgcm9vdC0+Y2ZhSGFzVmlz
aXRlZCA9IGZhbHNlOwogICAgIHJvb3QtPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CisgICAg
cm9vdC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNo
ZWQ7CisgICAgcm9vdC0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsID0gU3RydWN0dXJl
c0FyZVdhdGNoZWQ7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhl
YWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgIHJvb3QtPnZhbHVlc0F0VGFp
bC5hcmd1bWVudChpKS5jbGVhcigpOwogICAgICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NB
KSB7CkBAIC0xNDcsNiArMTM1LDggQEAgdm9pZCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6aW5pdGlh
bGl6ZSgpCiAgICAgICAgIGJsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CiAgICAgICAg
IGJsb2NrLT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CiAgICAgICAgIGJsb2NrLT5jZmFGb3VuZENv
bnN0YW50cyA9IGZhbHNlOworICAgICAgICBibG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRl
QXRIZWFkID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7CisgICAgICAgIGJsb2NrLT5jZmFTdHJ1Y3R1
cmVDbG9iYmVyU3RhdGVBdFRhaWwgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBibG9jay0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgewogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5j
bGVhcigpOwogICAgICAgICAgICAgYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChpKS5jbGVh
cigpOwpAQCAtMjA0LDYgKzE5NCw4IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJh
c2ljQmxvY2sKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgICAKICAgICBpZiAobWVyZ2VN
b2RlICE9IERvbnRNZXJnZSB8fCAhQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGNoYW5nZWQg
fD0gY2hlY2tBbmRTZXQoYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCwgbV9z
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOworICAgIAogICAgICAgICBzd2l0Y2ggKG1fZ3JhcGgubV9m
b3JtKSB7CiAgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKQEAgLTI1MSw2ICsyNDMsNyBAQCB2b2lkIElu
UGxhY2VBYnN0cmFjdFN0YXRlOjpyZXNldCgpCiAgICAgbV9ibG9jayA9IDA7CiAgICAgbV9pc1Zh
bGlkID0gZmFsc2U7CiAgICAgbV9icmFuY2hEaXJlY3Rpb24gPSBJbnZhbGlkQnJhbmNoRGlyZWN0
aW9uOworICAgIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlID0gU3RydWN0dXJlc0FyZVdhdGNoZWQ7
CiB9CiAKIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJh
Y3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGUqIG5v
ZGUpCkBAIC0zMTEsMTEgKzMwNCwxNyBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJn
ZVN0YXRlQXRUCiAKIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sq
IGZyb20sIEJhc2ljQmxvY2sqIHRvKQogeworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCIgICBNZXJnaW5nIGZyb20gIiwgcG9pbnRlckR1bXAoZnJvbSksICIgdG8gIiwgcG9pbnRl
ckR1bXAodG8pLCAiXG4iKTsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mQXJndW1lbnRzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
KTsKICAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0g
dG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICAKICAgICBib29sIGNo
YW5nZWQgPSBmYWxzZTsKICAgICAKKyAgICBjaGFuZ2VkIHw9IGNoZWNrQW5kU2V0KAorICAgICAg
ICB0by0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkLAorICAgICAgICBERkc6Om1lcmdl
KGZyb20tPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCwgdG8tPmNmYVN0cnVjdHVyZUNs
b2JiZXJTdGF0ZUF0SGVhZCkpOworICAgIAogICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsK
ICAgICBjYXNlIFRocmVhZGVkQ1BTOiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsg
Kythcmd1bWVudCkgewpAQCAtMzM4LDggKzMzNywxMiBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0
YXRlOjptZXJnZShCYXNpY0JsCiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQg
PSB0by0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOwogICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7
ICsraXRlcikgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICAgTWVyZ2luZyBmb3Ig
Iiwgbm9kZSwgIjogZnJvbSAiLCBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpLT52
YWx1ZSwgIiB0byAiLCB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmluZChub2RlKS0+dmFsdWUsICJc
biIpOwogICAgICAgICAgICAgY2hhbmdlZCB8PSB0by0+c3NhLT52YWx1ZXNBdEhlYWQuZmluZChu
b2RlKS0+dmFsdWUubWVyZ2UoCiAgICAgICAgICAgICAgICAgZnJvbS0+c3NhLT52YWx1ZXNBdFRh
aWwuZmluZChub2RlKS0+dmFsdWUpOworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICAgICAgZGF0YUxvZygiICAgICAgICAgUmVzdWx0OiAiLCB0by0+c3NhLT52YWx1ZXNBdEhl
YWQuZmluZChub2RlKS0+dmFsdWUsICJcbiIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTM1Miw2ICszNTUsOCBAQCBib29sIEluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJn
ZShCYXNpY0JsCiAgICAgaWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CiAgICAgCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgICAgIFdp
bGwgcmV2aXNpdDogIiwgY2hhbmdlZCwgIlxuIik7CiAgICAgdG8tPmNmYVNob3VsZFJldmlzaXQg
fD0gY2hhbmdlZDsKICAgICAKICAgICByZXR1cm4gY2hhbmdlZDsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3Ry
YWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw5IEBAIHB1YmxpYzoKICAg
ICAvLyBEaWQgdGhlIGxhc3QgZXhlY3V0ZWQgbm9kZSBjbG9iYmVyIHRoZSB3b3JsZD8KICAgICBi
b29sIGRpZENsb2JiZXIoKSBjb25zdCB7IHJldHVybiBtX2RpZENsb2JiZXI7IH0KICAgICAKKyAg
ICAvLyBBcmUgc3RydWN0dXJlcyBjdXJyZW50bHkgY2xvYmJlcmVkPworICAgIFN0cnVjdHVyZUNs
b2JiZXJTdGF0ZSBzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZUNsb2JiZXJTdGF0ZTsgfQorICAgIAogICAgIC8vIElzIHRoZSBleGVjdXRpb24gc3RhdGUg
c3RpbGwgdmFsaWQ/IFRoaXMgd2lsbCBiZSBmYWxzZSBpZiBleGVjdXRlKCkgaGFzCiAgICAgLy8g
cmV0dXJuZWQgZmFsc2UgcHJldmlvdXNseS4KICAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJl
dHVybiBtX2lzVmFsaWQ7IH0KQEAgLTEyMiwxMSArMTI1LDEwIEBAIHB1YmxpYzoKICAgICAKICAg
ICAvLyBNZXRob2RzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIEFic3RyYWN0SW50ZXJwcmV0
ZXIuCiAgICAgdm9pZCBzZXREaWRDbG9iYmVyKGJvb2wgZGlkQ2xvYmJlcikgeyBtX2RpZENsb2Ji
ZXIgPSBkaWRDbG9iYmVyOyB9CisgICAgdm9pZCBzZXRTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlIHZhbHVlKSB7IG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlID0gdmFs
dWU7IH0KICAgICB2b2lkIHNldElzVmFsaWQoYm9vbCBpc1ZhbGlkKSB7IG1faXNWYWxpZCA9IGlz
VmFsaWQ7IH0KICAgICB2b2lkIHNldEJyYW5jaERpcmVjdGlvbihCcmFuY2hEaXJlY3Rpb24gYnJh
bmNoRGlyZWN0aW9uKSB7IG1fYnJhbmNoRGlyZWN0aW9uID0gYnJhbmNoRGlyZWN0aW9uOyB9CiAg
ICAgdm9pZCBzZXRGb3VuZENvbnN0YW50cyhib29sIGZvdW5kQ29uc3RhbnRzKSB7IG1fZm91bmRD
b25zdGFudHMgPSBmb3VuZENvbnN0YW50czsgfQotICAgIGJvb2wgaGF2ZVN0cnVjdHVyZXMoKSBj
b25zdCB7IHJldHVybiBtX2hhdmVTdHJ1Y3R1cmVzOyB9IC8vIEl0J3MgYWx3YXlzIHNhZmUgdG8g
cmV0dXJuIHRydWUuCi0gICAgdm9pZCBzZXRIYXZlU3RydWN0dXJlcyhib29sIGhhdmVTdHJ1Y3R1
cmVzKSB7IG1faGF2ZVN0cnVjdHVyZXMgPSBoYXZlU3RydWN0dXJlczsgfQogCiBwcml2YXRlOgog
ICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJz
dHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSopOwpAQCAtMTM4LDExICsxNDAsMTEgQEAgcHJp
dmF0ZToKICAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxlczsKICAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOwogICAgIAotICAgIGJvb2wgbV9oYXZlU3RydWN0dXJlczsKICAgICBi
b29sIG1fZm91bmRDb25zdGFudHM7CiAgICAgCiAgICAgYm9vbCBtX2lzVmFsaWQ7CiAgICAgYm9v
bCBtX2RpZENsb2JiZXI7CisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIG1fc3RydWN0dXJlQ2xv
YmJlclN0YXRlOwogICAgIAogICAgIEJyYW5jaERpcmVjdGlvbiBtX2JyYW5jaERpcmVjdGlvbjsg
Ly8gVGhpcyBpcyBvbmx5IHNldCBmb3IgYmxvY2tzIHRoYXQgZW5kIGluIEJyYW5jaCBhbmQgdGhh
dCBleGVjdXRlIHRvIGNvbXBsZXRpb24gKGkuZS4gbV9pc1ZhbGlkID09IHRydWUpLgogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNzQW5h
bHlzaXNQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgs
MTMgKzY4LDExIEBAIHB1YmxpYzoKICAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKICAgICAg
ICAgCiAgICAgICAgIGlmICghbV9ncmFwaC5ibG9jaygwKS0+c3NhLT5saXZlQXRIZWFkLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgc3RhcnRDcmFzaGluZygpOwotICAgICAgICAgICAgZGF0YUxv
ZygKLSAgICAgICAgICAgICAgICAiQmFkIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogbGl2ZSBh
dCByb290IGlzIG5vdCBlbXB0eTogIiwKLSAgICAgICAgICAgICAgICBub2RlTGlzdER1bXAobV9n
cmFwaC5ibG9jaygwKS0+c3NhLT5saXZlQXRIZWFkKSwgIlxuIik7Ci0gICAgICAgICAgICBkYXRh
TG9nKCJJUiBhdCB0aW1lIG9mIGVycm9yOlxuIik7Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAo
KTsKLSAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICBERkdfQ1JBU0goCisgICAgICAg
ICAgICAgICAgbV9ncmFwaCwgbnVsbHB0ciwKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoCisg
ICAgICAgICAgICAgICAgICAgICJCYWQgbGl2ZW5lc3MgYW5hbHlzaXMgcmVzdWx0OiBsaXZlIGF0
IHJvb3QgaXMgbm90IGVtcHR5OiAiLAorICAgICAgICAgICAgICAgICAgICBub2RlTGlzdER1bXAo
bV9ncmFwaC5ibG9jaygwKS0+c3NhLT5saXZlQXRIZWFkKSkuZGF0YSgpKTsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJE
RkdOb2RlRmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZH
Tm9kZVR5cGUuaCIKKyNpbmNsdWRlICJERkdUcmFuc2l0aW9uLmgiCiAjaW5jbHVkZSAiREZHVXNl
S2luZC5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgogI2luY2x1ZGUgIkdl
dEJ5SWRWYXJpYW50LmgiCkBAIC02NywxOSArNjgsNiBAQCBzdHJ1Y3QgTXVsdGlQdXRCeU9mZnNl
dERhdGEgewogICAgIGJvb2wgcmVhbGxvY2F0ZXNTdG9yYWdlKCkgY29uc3Q7CiB9OwogCi1zdHJ1
Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewotICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1
Y3R1cmU7Ci0gICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7Ci0gICAgCi0gICAgU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKSB7IH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YShT
dHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlLCBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSkKLSAg
ICAgICAgOiBwcmV2aW91c1N0cnVjdHVyZShwcmV2aW91c1N0cnVjdHVyZSkKLSAgICAgICAgLCBu
ZXdTdHJ1Y3R1cmUobmV3U3RydWN0dXJlKQotICAgIHsKLSAgICB9Ci19OwotCiBzdHJ1Y3QgTmV3
QXJyYXlCdWZmZXJEYXRhIHsKICAgICB1bnNpZ25lZCBzdGFydENvbnN0YW50OwogICAgIHVuc2ln
bmVkIG51bUNvbnN0YW50czsKQEAgLTQ4NSwyMSArNDczLDYgQEAgc3RydWN0IE5vZGUgewogICAg
ICAgICBjaGlsZHJlbi5yZXNldCgpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbnZlcnRUb1N0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50KFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fb3AgPT0gQ2hlY2tTdHJ1Y3R1cmUgfHwgbV9vcCA9PSBBcnJheWlm
eVRvU3RydWN0dXJlKTsKLSAgICAgICAgQVNTRVJUKCFjaGlsZDIoKSk7Ci0gICAgICAgIEFTU0VS
VCghY2hpbGQzKCkpOwotICAgICAgICBBU1NFUlQoc3RydWN0dXJlKTsKLSAgICAgICAgbV9vcElu
Zm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihzdHJ1Y3R1cmUpOwotICAgICAgICBtX29wID0g
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ7Ci0gICAgfQotICAgIAotICAgIHZvaWQgY29u
dmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKQotICAgIHsKLSAgICAgICAgY29u
dmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoc3RydWN0dXJlU2V0KCkub25seVN0
cnVjdHVyZSgpKTsKLSAgICB9Ci0gICAgCiAgICAgdm9pZCBjb252ZXJ0VG9HZXRCeU9mZnNldCh1
bnNpZ25lZCBzdG9yYWdlQWNjZXNzRGF0YUluZGV4LCBFZGdlIHN0b3JhZ2UpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9vcCA9PSBHZXRCeUlkIHx8IG1fb3AgPT0gR2V0QnlJZEZsdXNoIHx8IG1f
b3AgPT0gTXVsdGlHZXRCeU9mZnNldCk7CkBAIC0xMDkxLDcgKzEwNjQsNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihtX29wSW5mbyk7CiAg
ICAgfQogCi0gICAgYm9vbCBoYXNTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpCisgICAgYm9vbCBo
YXNUcmFuc2l0aW9uKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAgICAgICBj
YXNlIFB1dFN0cnVjdHVyZToKQEAgLTExMDQsMTAgKzEwNzcsMTAgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBzdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpCisgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbigpCiAgICAg
ewotICAgICAgICBBU1NFUlQoaGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSk7Ci0gICAgICAg
IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSo+KG1fb3BJ
bmZvKTsKKyAgICAgICAgQVNTRVJUKGhhc1RyYW5zaXRpb24oKSk7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFRyYW5zaXRpb24qPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAg
IGJvb2wgaGFzU3RydWN0dXJlU2V0KCkKQEAgLTExMjksNyArMTEwMiw2IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICBib29sIGhhc1N0cnVjdHVyZSgpCiAgICAgewogICAgICAgICBzd2l0Y2ggKG9wKCkp
IHsKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAg
Y2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICBjYXNlIE5ld09iamVjdDoKICAgICAg
ICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1MywxOCArMTUzLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKENoZWNrU3Ry
dWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tFeGVjdXRhYmxlLCBO
b2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgLyogVHJhbnNpdGlvbiB3YXRjaHBvaW50cyBhcmUgYSBj
b250cmFjdCBiZXR3ZWVuIHRoZSBwYXJ0eSBzZXR0aW5nIHRoZSB3YXRjaHBvaW50ICovXAotICAg
IC8qIGFuZCB0aGUgcnVudGltZSBzeXN0ZW0sIHdoZXJlIHRoZSBwYXJ0eSBwcm9taXNlcyB0aGF0
IHRoZSBjaGlsZCBvYmplY3Qgb25jZSBoYWQgKi9cCi0gICAgLyogdGhlIHN0cnVjdHVyZSBiZWlu
ZyB3YXRjaGVkLCBhbmQgdGhlIHJ1bnRpbWUgc3lzdGVtIGluIHR1cm4gcHJvbWlzZXMgdGhhdCB0
aGUgKi9cCi0gICAgLyogd2F0Y2hwb2ludCB3aWxsIGJlIHR1cm5lZCBpbnRvIGFuIE9TUiBleGl0
IGlmIGFueSBvYmplY3Qgd2l0aCB0aGF0IHN0cnVjdHVyZSAqL1wKLSAgICAvKiBldmVyIHRyYW5z
aXRpb25zIHRvIGEgZGlmZmVyZW50IHN0cnVjdHVyZS4gSGVuY2UsIHRoZSBjaGlsZCBvYmplY3Qg
bXVzdCBoYXZlICovXAotICAgIC8qIHByZXZpb3VzbHkgaGFkIGEgQ2hlY2tTdHJ1Y3R1cmUgZXhl
Y3V0ZWQgb24gaXQgb3Igd2UncmUgZGVhbGluZyB3aXRoIGFuIG9iamVjdCAqL1wKLSAgICAvKiBj
b25zdGFudCAoV2Vha0pTQ29uc3RhbnQpIGFuZCB0aGUgb2JqZWN0IHdhcyBrbm93biB0byBoYXZl
IHRoYXQgc3RydWN0dXJlIGF0ICovXAotICAgIC8qIGNvbXBpbGUtdGltZS4gSW4gdGhlIGxhdHRl
ciBjYXNlIHRoaXMgbWVhbnMgdGhhdCBubyBzdHJ1Y3R1cmUgY2hlY2tzIGhhdmUgdG8gYmUgKi9c
Ci0gICAgLyogcGVyZm9ybWVkIGZvciB0aGlzIG9iamVjdCBieSBKSVR0ZWQgY29kZS4gSW4gdGhl
IGZvcm1lciBjYXNlIHRoaXMgbWVhbnMgdGhhdCovXAotICAgIC8qIHRoZSBvYmplY3QncyBzdHJ1
Y3R1cmUgZG9lcyBub3QgbmVlZCB0byBiZSByZWNoZWNrZWQgZHVlIHRvIHNpZGUtZWZmZWN0aW5n
ICovXAotICAgIC8qIChjbG9iYmVyaW5nKSBvcGVyYXRpb25zLiAqL1wKLSAgICBtYWNybyhTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3Jv
KFB1dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFBoYW50b21QdXRT
dHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAgICBtYWNy
byhBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90
RXhpdCB8IE5vZGVSZXN1bHRTdG9yYWdlKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRl
ICJERkdVbmlmaWNhdGlvblBoYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsaWRhdGUuaCIKICNpbmNs
dWRlICJERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIKKyNpbmNsdWRlICJERkdX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiCiAjaW5jbHVkZSAiREZHV2F0Y2hwb2lu
dENvbGxlY3Rpb25QaGFzZS5oIgogI2luY2x1ZGUgIkRlYnVnZ2VyLmgiCiAjaW5jbHVkZSAiT3Bl
cmFuZHNJbmxpbmVzLmgiCkBAIC0yMzMsNiArMjM0LDcgQEAgUGxhbjo6Q29tcGlsYXRpb25QYXRo
IFBsYW46OmNvbXBpbGVJblRocgogICAgIHBlcmZvcm1CYWNrd2FyZHNQcm9wYWdhdGlvbihkZmcp
OwogICAgIHBlcmZvcm1QcmVkaWN0aW9uUHJvcGFnYXRpb24oZGZnKTsKICAgICBwZXJmb3JtRml4
dXAoZGZnKTsKKyAgICBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoZGZnKTsKICAg
ICBwZXJmb3JtSW52YWxpZGF0aW9uUG9pbnRJbmplY3Rpb24oZGZnKTsKICAgICBwZXJmb3JtVHlw
ZUNoZWNrSG9pc3RpbmcoZGZnKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rp
b25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc2LDcgKzU3Niw2IEBA
IHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tT
dHJ1Y3R1cmU6CiAgICAgICAgIGNhc2UgQ2hlY2tFeGVjdXRhYmxlOgotICAgICAgICBjYXNlIFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENoZWNrRnVuY3Rpb246
CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgICAgICBjYXNlIFRlYXJPZmZBY3RpdmF0
aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRl
LmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzUsMjIgKzI3NSwyNiBAQCBib29sIHNh
ZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgICAgIHJldHVybiBub2RlLT5h
cnJheU1vZGUoKS5tb2RlRm9yUHV0KCkuYWxyZWFkeUNoZWNrZWQoCiAgICAgICAgICAgICBncmFw
aCwgbm9kZSwgc3RhdGUuZm9yTm9kZShncmFwaC52YXJBcmdDaGlsZChub2RlLCAwKSkpOwogCi0g
ICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKLSAgICAgICAgcmV0dXJuIHN0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNT
dWJzZXRPZigKLSAgICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT5zdHJ1Y3R1cmUoKSkpOwot
ICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1
Y3R1cmU6CiAgICAgY2FzZSBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKICAgICBjYXNlIFJlYWxs
b2NhdGVQcm9wZXJ0eVN0b3JhZ2U6Ci0gICAgICAgIHJldHVybiBzdGF0ZS5mb3JOb2RlKG5vZGUt
PmNoaWxkMSgpKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKAotICAgICAgICAg
ICAgU3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNT
dHJ1Y3R1cmUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkp
Lm1fc3RydWN0dXJlLmlzU3Vic2V0T2YoCisgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+
dHJhbnNpdGlvbigpLT5wcmV2aW91cykpOwogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0
OgogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6Ci0gICAgY2FzZSBQdXRCeU9mZnNl
dDoKLSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVu
dEtub3duU3RydWN0dXJlLmlzVmFsaWRPZmZzZXQoCi0gICAgICAgICAgICBncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0ub2Zmc2V0KTsKKyAg
ICBjYXNlIFB1dEJ5T2Zmc2V0OiB7CisgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHZh
bHVlID0gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmU7CisgICAgICAg
IGlmICh2YWx1ZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0
b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0ub2Zmc2V0OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSB2YWx1ZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIGlmICghdmFsdWVbaV0tPmlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIExhc3RO
b2RlVHlwZToKICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY5NywyOSArMzY5Nyw2
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OiB7Ci0gICAgICAgIC8vIFRoZXJlIGlzIGEgZmFzY2luYXRpbmcgcXVlc3Rpb24gaGVyZSBv
ZiB3aGF0IHRvIGRvIGFib3V0IGFycmF5IHByb2ZpbGluZy4KLSAgICAgICAgLy8gV2UgKmNvdWxk
KiB0cnkgdG8gdGVsbCB0aGUgT1NSIGV4aXQgYWJvdXQgd2hlcmUgdGhlIGJhc2Ugb2YgdGhlIGFj
Y2VzcyBpcy4KLSAgICAgICAgLy8gVGhlIERGRyB3aWxsIGhhdmUga2VwdCBpdCBhbGl2ZSwgdGhv
dWdoIGl0IG1heSBub3QgYmUgaW4gYSByZWdpc3RlciwgYW5kCi0gICAgICAgIC8vIHdlIHNob3Vs
ZG4ndCByZWFsbHkgbG9hZCBpdCBzaW5jZSB0aGF0IGNvdWxkIGJlIGEgd2FzdGUuIEZvciBub3cg
dGhvdWdoLAotICAgICAgICAvLyB3ZSdsbCBqdXN0IHJlbHkgb24gdGhlIGZhY3QgdGhhdCB3aGVu
IGEgd2F0Y2hwb2ludCBmaXJlcyB0aGVuIHRoYXQncwotICAgICAgICAvLyBxdWl0ZSBhIGhpbnQg
YWxyZWFkeS4KLSAgICAgICAgCi0gICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2Uobm9kZS0+
c3RydWN0dXJlKCkpOwotICAgICAgICAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzT0sgPSBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFs
LCBKSVRDb21waWxlcjo6QWRkcmVzcyhvcDEuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIFRydXN0ZWRJbW1QdHIobm9kZS0+c3RydWN0dXJlKCkpKTsKLSAgICAgICAgbV9qaXQu
YnJlYWtwb2ludCgpOwotICAgICAgICBpc09LLmxpbmsoJm1faml0KTsKLSNlbHNlCi0gICAgICAg
IHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQxKCkpOwotI2VuZGlmCi0KLSAgICAgICAgbm9SZXN1
bHQobm9kZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBQaGFu
dG9tUHV0U3RydWN0dXJlOiB7CiAgICAgICAgIEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGls
ZDEoKS5ub2RlKCkpKTsKICAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29t
cGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29k
ZUJsb2NrKCksIG5vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzY3LDMyICszNzY3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2UgU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgLy8gVGhlcmUgaXMgYSBmYXNjaW5hdGlu
ZyBxdWVzdGlvbiBoZXJlIG9mIHdoYXQgdG8gZG8gYWJvdXQgYXJyYXkgcHJvZmlsaW5nLgotICAg
ICAgICAvLyBXZSAqY291bGQqIHRyeSB0byB0ZWxsIHRoZSBPU1IgZXhpdCBhYm91dCB3aGVyZSB0
aGUgYmFzZSBvZiB0aGUgYWNjZXNzIGlzLgotICAgICAgICAvLyBUaGUgREZHIHdpbGwgaGF2ZSBr
ZXB0IGl0IGFsaXZlLCB0aG91Z2ggaXQgbWF5IG5vdCBiZSBpbiBhIHJlZ2lzdGVyLCBhbmQKLSAg
ICAgICAgLy8gd2Ugc2hvdWxkbid0IHJlYWxseSBsb2FkIGl0IHNpbmNlIHRoYXQgY291bGQgYmUg
YSB3YXN0ZS4gRm9yIG5vdyB0aG91Z2gsCi0gICAgICAgIC8vIHdlJ2xsIGp1c3QgcmVseSBvbiB0
aGUgZmFjdCB0aGF0IHdoZW4gYSB3YXRjaHBvaW50IGZpcmVzIHRoZW4gdGhhdCdzCi0gICAgICAg
IC8vIHF1aXRlIGEgaGludCBhbHJlYWR5LgotCi0gICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVu
Y2Uobm9kZS0+c3RydWN0dXJlKCkpOwotCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBpc09LID0gbV9qaXQuYnJhbmNoU3RydWN0dXJlUHRyKAotICAgICAg
ICAgICAgSklUQ29tcGlsZXI6OkVxdWFsLCAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKG9wMS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgCi0gICAgICAgICAg
ICBub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1faml0LmJyZWFrcG9pbnQoKTsKLSAgICAg
ICAgaXNPSy5saW5rKCZtX2ppdCk7Ci0jZWxzZQotICAgICAgICBzcGVjdWxhdGVDZWxsKG5vZGUt
PmNoaWxkMSgpKTsKLSNlbmRpZgotICAgICAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAgICAgCiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0
dXJlOiB7CiAgICAgICAgIEFTU0VSVChpc0tub3duQ2VsbChub2RlLT5jaGlsZDEoKS5ub2RlKCkp
KTsKICAgICAgICAgbV9qaXQuaml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0
dXJlVHJhbnNpdGlvbihtX2ppdC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5v
ZGUpOwpAQCAtMzgwMSw4ICszNzc1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlKiBub2RlKQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKLSAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSgpLnByZXZpb3VzU3RydWN0dXJlOwotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVy
ZSA9IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlOworICAgICAg
ICBTdHJ1Y3R1cmUqIG9sZFN0cnVjdHVyZSA9IG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXM7
CisgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5u
ZXh0OwogCiAgICAgICAgIG1faml0LmppdENvZGUoKS0+Y29tbW9uLm5vdGlmeUNvbXBpbGluZ1N0
cnVjdHVyZVRyYW5zaXRpb24obV9qaXQuZ3JhcGgoKS5tX3BsYW4sIG1faml0LmNvZGVCbG9jaygp
LCBub2RlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Mjk4LDcgKzQy
OTgsNyBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZShOb2RlKiBub2Rl
KQogewotICAgIGlmIChub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3Ry
dWN0dXJlLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CisgICAgaWYgKG5vZGUtPnRyYW5z
aXRpb24oKS0+cHJldmlvdXMtPmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAg
IAogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkBAIC00MzE4LDggKzQzMTgs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBzY3JhdGNoR1BSMSA9IHNjcmF0Y2gx
LmdwcigpOwogICAgICAgICAKLSAgICBBU1NFUlQoIW5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOwotICAgIEFTU0VS
VChpbml0aWFsT3V0T2ZMaW5lQ2FwYWNpdHkgPT0gbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpOworICAgIEFTU0VSVCghbm9k
ZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQVNT
RVJUKGluaXRpYWxPdXRPZkxpbmVDYXBhY2l0eSA9PSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQt
Pm91dE9mTGluZUNhcGFjaXR5KCkpOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQ
YXRoID0KICAgICAgICAgZW1pdEFsbG9jYXRlQmFzaWNTdG9yYWdlKApAQCAtNDMzNywxMSArNDMz
NywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQWxsb2NhdGVQcm9wCiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5v
ZGUpCiB7Ci0gICAgc2l6ZV90IG9sZFNpemUgPSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0
YSgpLnByZXZpb3VzU3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFs
dWUpOworICAgIHNpemVfdCBvbGRTaXplID0gbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+
b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1ZhbHVlKTsKICAgICBzaXplX3QgbmV3U2l6
ZSA9IG9sZFNpemUgKiBvdXRPZkxpbmVHcm93dGhGYWN0b3I7Ci0gICAgQVNTRVJUKG5ld1NpemUg
PT0gbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSkpOworICAgIEFTU0VSVChuZXdTaXplID09IG5v
ZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihKU1Zh
bHVlKSk7CiAKLSAgICBpZiAobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91
c1N0cnVjdHVyZS0+Y291bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgeworICAgIGlmIChub2RlLT50
cmFuc2l0aW9uKCktPnByZXZpb3VzLT5jb3VsZEhhdmVJbmRleGluZ0hlYWRlcigpKSB7CiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTY5
NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTE1LDcgKzMxMTUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpz
cGVjdWxhdGVTdHJpbmdPYmplCiAgICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUg
PQogICAgICAgICBtX2ppdC5nbG9iYWxPYmplY3RGb3IobV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCk7CiAgICAgCi0gICAgaWYgKCFtX3N0YXRl
LmZvck5vZGUoZWRnZSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1
cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpIHsKKyAgICBpZiAoIW1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RT
dHJ1Y3R1cmUpKSkgewogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKAogICAgICAgICAgICAgTm90
U3RyaW5nT2JqZWN0LCBKU1ZhbHVlUmVncygpLCAwLAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
U3RydWN0dXJlUHRyKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJE
RkdHcmFwaC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIENvbW1l
bnQgb3V0IHRoZSBlbXB0eSBTQU1QTEUoKSBkZWZpbml0aW9uLCBhbmQgdW5jb21tZW50IHRoZSBv
bmUgdGhhdCB1c2VzIFNhbXBsaW5nUmVnaW9uLCBpZgorLy8geW91IHdhbnQgZXh0cmVtZWx5IGZp
bmUtZ3JhaW5lZCBwcm9maWxpbmcgaW4gdGhpcyBjb2RlLgorI2RlZmluZSBTQU1QTEUobmFtZSkg
CisvLyNkZWZpbmUgU0FNUExFKG5hbWUpIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKG5h
bWUpCisKKyNpZiAhQVNTRVJUX0RJU0FCTEVECit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmFzc2VydElzV2F0Y2hlZChHcmFwaCYgZ3JhcGgpIGNvbnN0Cit7CisgICAgU0FNUExFKCJTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlIGFzc2VydElzV2F0Y2hlZCIpOworCisgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGkt
LTspCisgICAgICAgIGdyYXBoLmFzc2VydElzV2F0Y2hlZChhdChpKSk7Cit9CisjZW5kaWYgLy8g
IUFTU0VSVF9ESVNBQkxFRAorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIo
KQoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjbG9iYmVyIik7CisKKyAg
ICAvLyBUaGUgcHJlbWlzZSBvZiB0aGlzIGFwcHJvYWNoIHRvIGNsb2JiZXJpbmcgaXMgdGhhdCBh
bnl0aW1lIHdlIGludHJvZHVjZQorICAgIC8vIGEgd2F0Y2hhYmxlIHN0cnVjdHVyZSBpbnRvIGFu
IGFic3RyYWN0IHZhbHVlLCB3ZSB3YXRjaHBvaW50IGl0LiBZb3UgY2FuIGFzc2VydAorICAgIC8v
IHRoYXQgdGhpcyBob2xkcyBieSBjYWxsaW5nIGFzc2VydElzV2F0Y2hlZCgpLgorICAgICAgICAK
KyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0Q2xvYmJlcmVkKHRy
dWUpOworICAgICAgICAKKyAgICBpZiAobV9zZXQuaXNUaGluKCkpIHsKKyAgICAgICAgaWYgKCFt
X3NldC5zaW5nbGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYg
KCFtX3NldC5zaW5nbGVTdHJ1Y3R1cmUoKS0+ZGZnU2hvdWxkV2F0Y2goKSkKKyAgICAgICAgICAg
IG1ha2VUb3BXaGVuVGhpbigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAKKyAg
ICBTdHJ1Y3R1cmVTZXQ6Ok91dE9mTGluZUxpc3QqIGxpc3QgPSBtX3NldC5zdHJ1Y3R1cmVMaXN0
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbGlzdC0+bV9sZW5ndGg7IGktLTspIHsKKyAgICAg
ICAgaWYgKCFsaXN0LT5saXN0KClbaV0tPmRmZ1Nob3VsZFdhdGNoKCkpIHsKKyAgICAgICAgICAg
IG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUq
IGZyb20sIFN0cnVjdHVyZSogdG8pCit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlIG9ic2VydmVUcmFuc2l0aW9uIik7CisKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGlmICghbV9zZXQuY29udGFpbnMoZnJvbSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAoZnJvbS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICBzZXRD
bG9iYmVyZWQodHJ1ZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFt
X3NldC5hZGQodG8pKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUo
KSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7Cit9CisKK3ZvaWQgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKGNvbnN0IFRyYW5zaXRpb25W
ZWN0b3ImIHZlY3RvcikKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgb2Jz
ZXJ2ZVRyYW5zaXRpb25zIik7CisKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFN0cnVjdHVyZVNldCBuZXdTdHJ1Y3R1cmVzOworICAgIGZvciAodW5zaWduZWQg
aSA9IHZlY3Rvci5zaXplKCk7IGktLTspIHsKKyAgICAgICAgaWYgKCFtX3NldC5jb250YWlucyh2
ZWN0b3JbaV0ucHJldmlvdXMpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAg
ICAgICBpZiAodmVjdG9yW2ldLnByZXZpb3VzLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICAg
ICAgc2V0Q2xvYmJlcmVkKHRydWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdTdHJ1
Y3R1cmVzLmFkZCh2ZWN0b3JbaV0ubmV4dCk7CisgICAgfQorICAgIAorICAgIGlmICghbV9zZXQu
bWVyZ2UobmV3U3RydWN0dXJlcykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobV9z
ZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGltaXQpCisgICAgICAgIG1ha2VUb3AoKTsKK30KKwor
Ym9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGFkZCIpOworCisgICAgaWYgKGlz
VG9wKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZChz
dHJ1Y3R1cmUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNp
emUoKSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UoY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlcikKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0
VmFsdWUgbWVyZ2Ugc2V0Iik7CisKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIHJldHVybiBtZXJnZU5vdFRvcChvdGhlcik7Cit9CisKK2Jvb2wgU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2VTbG93KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIG90aGVyKQoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtZXJnZSB2
YWx1ZSBzbG93Iik7CisKKyAgICAvLyBJdCBpc24ndCBpbW1lZGlhdGVseSBvYnZpb3VzIHRoYXQg
dGhlIGNvZGUgYmVsb3cgaXMgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nLCBzbyBsZXQncyBnbworICAg
IC8vIHRocm91Z2ggaXQuCisgICAgLy8KKyAgICAvLyBUaGlzIG5vdCBjbG9iYmVyZWQsIG90aGVy
IG5vdCBjbG9iYmVyZWQ6IENsZWFybHksIHdlIGRvbid0IHdhbnQgdG8gbWFrZSBhbnl0aGluZyBj
bG9iYmVyZWQKKyAgICAvLyBzaW5jZSB3ZSBqdXN0IGhhdmUgdHdvIHNldHMgYW5kIHdlIGFyZSBt
ZXJnaW5nIHRoZW0uIG1lcmdlTm90VG9wKCkgY2FuIGhhbmRsZSB0aGlzIGp1c3QKKyAgICAvLyBm
aW5lLgorICAgIC8vCisgICAgLy8gVGhpcyBjbG9iYmVyZWQsIG90aGVyIGNsb2JiZXJlZDogQ2xv
YmJlcmVkIG1lYW5zIHRoYXQgd2UgaGF2ZSBhIHNldCBvZiB0aGluZ3MsIHBsdXMgd2UKKyAgICAv
LyB0ZW1wb3JhcmlseSBoYXZlIHRoZSBzZXQgb2YgYWxsIHRoaW5ncyBidXQgdGhlIGxhdHRlciB3
aWxsIGdvIGF3YXkgb25jZSB3ZSBoaXQgdGhlIG5leHQKKyAgICAvLyBpbnZhbGlkYXRpb24gcG9p
bnQuIFRoaXMgYWxsb3dzIHVzIHRvIG1lcmdlIHR3byBjbG9iYmVyZWQgc2V0cyB0aGUgbmF0dXJh
bCB3YXkuIEZvciBub3cKKyAgICAvLyB0aGUgc2V0IHdpbGwgc3RpbGwgYmUgVE9QIChhbmQgc28g
d2Uga2VlcCB0aGUgY2xvYmJlcmVkIGJpdCBzZXQpLCBidXQgd2Uga25vdyB0aGF0IGFmdGVyCisg
ICAgLy8gaW52YWxpZGF0aW9uLCB3ZSB3aWxsIGhhdmUgdGhlIHVuaW9uIG9mIHRoZSB0aGlzIGFu
ZCBvdGhlci4KKyAgICAvLworICAgIC8vIFRoaXMgY2xvYmJlcmVkLCBvdGhlciBub3QgY2xvYmJl
cmVkOiBJdCdzIHNhZmUgdG8gbWVyZ2UgaW4gb3RoZXIgZm9yIGJvdGggYmVmb3JlIGFuZCBhZnRl
cgorICAgIC8vIGludmFsaWRhdGlvbiwgc28gbG9uZyBhcyB3ZSBsZWF2ZSB0aGUgY2xvYmJlcmVk
IGJpdCBzZXQuIEJlZm9yZSBpbnZhbGlkYXRpb24gdGhpcyBoYXMgbm8KKyAgICAvLyBlZmZlY3Qg
c2luY2UgdGhlIHNldCB3aWxsIHN0aWxsIGFwcGVhciB0byBoYXZlIGFsbCB0aGluZ3MgaW4gaXQu
IFRoZSB3YXkgdG8gdGhpbmsgYWJvdXQKKyAgICAvLyB3aGF0IGludmFsaWRhdGlvbiB3b3VsZCBk
byBpcyBpbWFnaW5lIGlmIHdlIGhhZCBhIHNldCBBIHRoYXQgd2FzIGNsb2JiZXJlZCBhbmQgYSBz
ZXQgQgorICAgIC8vIHRoYXQgd2Fzbid0IGFuZCB3ZSBjb25zaWRlcmVkIHRoZSBmb2xsb3dpbmcg
dHdvIGNhc2VzLiBOb3RlIHRoYXQgd2UgZXhwZWN0IEEgdG8gYmUgdGhlCisgICAgLy8gc2FtZSBh
dCB0aGUgZW5kIGluIGJvdGggY2FzZXM6CisgICAgLy8KKyAgICAvLyAgICAgICAgICAgIEEubWVy
Z2UoQikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludmFsaWRhdGlvblBvaW50CisgICAg
Ly8gICAgICAgICAgICBJbnZhbGlkYXRpb25Qb2ludCAgICAgICAgICAgICAgICAgICAgICBBLm1l
cmdlKEIpCisgICAgLy8KKyAgICAvLyBUaGUgZmFjdCB0aGF0IHdlIGV4cGVjdCBBIHRvIGJlIHRo
ZSBzYW1lIGluIGJvdGggY2FzZXMgbWVhbnMgdGhhdCB3ZSB3YW50IHRvIG1lcmdlIG90aGVyCisg
ICAgLy8gaW50byB0aGlzIGJ1dCBrZWVwIHRoZSBjbG9iYmVyZWQgYml0LgorICAgIC8vCisgICAg
Ly8gVGhpcyBub3QgY2xvYmJlcmVkLCBvdGhlciBjbG9iYmVyZWQ6IFRoaXMgaXMganVzdCB0aGUg
Y29udmVyc2Ugb2YgdGhlIHByZXZpb3VzIGNhc2UuIFdlCisgICAgLy8gd2FudCB0byBtZXJnZSBv
dGhlciBpbnRvIHRoaXMgYW5kIHNldCB0aGUgY2xvYmJlcmVkIGJpdC4KKyAgICAKKyAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoIWlzQ2xvYmJlcmVkKCkgJiYgb3RoZXIu
aXNDbG9iYmVyZWQoKSkgeworICAgICAgICBzZXRDbG9iYmVyZWQodHJ1ZSk7CisgICAgICAgIGNo
YW5nZWQgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBjaGFuZ2VkIHw9IG1lcmdlTm90VG9wKG90
aGVyLm1fc2V0KTsKKyAgICAKKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworYm9vbCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjptZXJnZU5vdFRvcChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQor
eworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtZXJnZSBub3QgdG9wIik7CisK
KyAgICBpZiAoIW1fc2V0Lm1lcmdlKG90aGVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIGlmIChtX3NldC5zaXplKCkgPiBwb2x5bW9ycGhpc21MaW1pdCkKKyAgICAgICAgbWFr
ZVRvcCgpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWU6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQoreworICAgIFNBTVBM
RSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBmaWx0ZXIgc2V0Iik7CisKKyAgICBpZiAoaXNUb3Ao
KSkgeworICAgICAgICBtX3NldCA9IG90aGVyOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIGlmIChpc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIC8vIFdlIGhhdmUgdHdvIGNob2lj
ZXMgaGVyZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gRG8gbm90aGluZzogSXQncyBsZWdhbCB0
byBrZWVwIG91ciBzZXQgaW50YWN0LCB3aGljaCB3b3VsZCBlc3NlbnRpYWxseSBtZWFuIHRoYXQg
Zm9yCisgICAgICAgIC8vIG5vdywgb3VyIHNldCB3b3VsZCBiZWhhdmUgbGlrZSBUT1AgYnV0IGFm
dGVyIHRoZSBuZXh0IGludmFsaWRhdGlvbiBwb2ludCBpdCB3b2xkIGJlCisgICAgICAgIC8vIGEg
ZmluaXRlIHNldCBhZ2Fpbi4gVGhpcyBtYXkgYmUgYSBnb29kIGNob2ljZSBpZiAnb3RoZXInIGlz
IG11Y2ggYmlnZ2VyIHRoYW4gb3VyCisgICAgICAgIC8vIG1fc2V0LgorICAgICAgICAvLworICAg
ICAgICAvLyBSZXBsYWNlIG1fc2V0IHdpdGggb3RoZXIgYW5kIGNsZWFyIHRoZSBjbG9iYmVyIGJp
dDogVGhpcyBpcyBhbHNvIGxlZ2FsLCBhbmQgbWVhbnMgdGhhdAorICAgICAgICAvLyB3ZSdyZSBu
byBsb25nZXIgY2xvYmJlcmVkLiBUaGlzIGlzIHVzdWFsbHkgYmV0dGVyIGJlY2F1c2UgaXQgaW1t
ZWRpYXRlbHkgZ2l2ZXMgdXMgYQorICAgICAgICAvLyBzbWFsbGVyIHNldC4KKyAgICAgICAgLy8K
KyAgICAgICAgLy8gVGhpcyBzY2VuYXJpbyBzaG91bGQgY29tZSB1cCByYXJlbHkuIFdlIHVzdWFs
bHkgZG9uJ3QgZG8gYW55dGhpbmcgdG8gYW4gYWJzdHJhY3QgdmFsdWUKKyAgICAgICAgLy8gYWZ0
ZXIgaXQgaXMgY2xvYmJlcmVkLiBCdXQgd2UgYXBwbHkgc29tZSBoZXVyaXN0aWNzLgorICAgICAg
ICAKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IG1fc2V0LnNpemUoKSArIGNsb2JiZXJlZFN1
cHJlbWFjeVRocmVzaG9sZCkKKyAgICAgICAgICAgIHJldHVybjsgLy8gS2VlcCB0aGUgY2xvYmJl
cmVkIHNldC4KKyAgICAgICAgCisgICAgICAgIG1fc2V0ID0gb3RoZXI7CisgICAgICAgIHNldENs
b2JiZXJlZChmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9zZXQu
ZmlsdGVyKG90aGVyKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIo
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgU0FNUExFKCJTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlIGZpbHRlciB2YWx1ZSIpOworCisgICAgaWYgKG90aGVyLmlzVG9w
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAob3RoZXIuaXNDbG9iYmVyZWQoKSkg
eworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIGlmICghaXNDbG9iYmVyZWQoKSkgeworICAgICAgICAgICAgLy8gU2VlIGp1c3RpZmlj
YXRpb24gaW4gZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpLCBhYm92ZS4gQW4gdW5jbG9iYmVy
ZWQgc2V0IGlzCisgICAgICAgICAgICAvLyBhbG1vc3QgYWx3YXlzIGJldHRlci4KKyAgICAgICAg
ICAgIGlmIChtX3NldC5zaXplKCkgPiBvdGhlci5tX3NldC5zaXplKCkgKyBjbG9iYmVyZWRTdXBy
ZW1hY3lUaHJlc2hvbGQpCisgICAgICAgICAgICAgICAgKnRoaXMgPSBvdGhlcjsgLy8gS2VlcCB0
aGUgY2xvYmJlcmVkIHNldC4KKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fc2V0LmZpbHRlcihvdGhlci5tX3NldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgZmlsdGVyKG90aGVyLm1fc2V0KTsKK30KKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
Q29uZm9ybXNUb1R5cGUgeworcHVibGljOgorICAgIENvbmZvcm1zVG9UeXBlKFNwZWN1bGF0ZWRU
eXBlIHR5cGUpCisgICAgICAgIDogbV90eXBlKHR5cGUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBib29sIG9wZXJhdG9yKCkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBy
ZXR1cm4gISEoc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSkgJiBtX3R5cGUpOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgU3BlY3VsYXRlZFR5cGUgbV90eXBlOworfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVy
U2xvdyhTcGVjdWxhdGVkVHlwZSB0eXBlKQoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSBmaWx0ZXIgdHlwZSBzbG93Iik7CisKKyAgICBpZiAoISh0eXBlICYgU3BlY0NlbGwp
KSB7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUKCFpc1RvcCgpKTsKKyAgICAKKyAgICBDb25mb3Jtc1RvVHlwZSBjb25mb3Jtc1RvVHlw
ZSh0eXBlKTsKKyAgICBtX3NldC5nZW5lcmljRmlsdGVyKGNvbmZvcm1zVG9UeXBlKTsKK30KKwor
Ym9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkgY29uc3QKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgY29udGFpbnMi
KTsKKworICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5jb250YWlucyhzdHJ1Y3R1cmUpOworfQorCiti
b29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikgY29uc3QKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgaXNT
dWJzZXRPZiBzZXQiKTsKKworICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhl
cik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZihjb25zdCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICBTQU1QTEUoIlN0cnVj
dHVyZUFic3RyYWN0VmFsdWUgaXNTdWJzZXRPZiB2YWx1ZSIpOworCisgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzQ2xvYmJlcmVkKCkgPT0gb3RoZXIu
aXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIubV9z
ZXQpOworICAgIAorICAgIC8vIEhlcmUgaXQgZ2V0cyB0cmlja3kuIElmIGluIGRvdWJ0LCByZXR1
cm4gZmFsc2UhCisgICAgCisgICAgaWYgKGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gQSBjbG9iYmVyZWQgc2V0IGlzIG5ldmVyIGEgc3Vic2V0IG9mIGFuIHVuY2xvYmJl
cmVkIHNldC4KKyAgICAKKyAgICAvLyBBbiB1bmNsb2JiZXJlZCBzZXQgaXMgY3VycmVudGx5IGEg
c3Vic2V0IG9mIGEgY2xvYmJlcmVkIHNldCwgYnV0IGl0IG1heSBub3QgYmUgc28gYWZ0ZXIKKyAg
ICAvLyBpbnZhbGlkYXRpb24uCisgICAgcmV0dXJuIG1fc2V0LmlzU3Vic2V0T2Yob3RoZXIubV9z
ZXQpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJzZXRPZihjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSBpc1N1cGVyc2V0T2Ygc2V0Iik7CisKKyAgICBpZiAoaXNUb3AoKSB8fCBpc0Ns
b2JiZXJlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gbV9zZXQu
aXNTdXBlcnNldE9mKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
dmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAgIFNBTVBMRSgi
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBvdmVybGFwcyBzZXQiKTsKKworICAgIGlmIChpc1RvcCgp
IHx8IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVy
biBtX3NldC5vdmVybGFwcyhvdGhlcik7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6b3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG92ZXJsYXBzIHZhbHVlIik7CisK
KyAgICBpZiAob3RoZXIuaXNUb3AoKSB8fCBvdGhlci5pc0Nsb2JiZXJlZCgpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gb3ZlcmxhcHMob3RoZXIubV9zZXQpOworfQor
Citib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmVxdWFsc1Nsb3coY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIGVxdWFsc1Nsb3ciKTsKKworICAgIEFTU0VSVChtX3NldC5tX3BvaW50ZXIgIT0g
b3RoZXIubV9zZXQubV9wb2ludGVyKTsKKyAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgIEFTU0VS
VCghb3RoZXIuaXNUb3AoKSk7CisgICAgCisgICAgcmV0dXJuIG1fc2V0ID09IG90aGVyLm1fc2V0
CisgICAgICAgICYmIGlzQ2xvYmJlcmVkKCkgPT0gb3RoZXIuaXNDbG9iYmVyZWQoKTsKK30KKwor
dm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBv
dXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmIChpc0Nsb2JiZXJlZCgp
KQorICAgICAgICBvdXQucHJpbnQoIkNsb2JiZXJlZDoiKTsKKyAgICAKKyAgICBpZiAoaXNUb3Ao
KSkKKyAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmlu
dChpbkNvbnRleHQobV9zZXQsIGNvbnRleHQpKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4
dChvdXQsIDApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJK
U0NlbGwuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5oIgogI2luY2x1ZGUgIkR1bXBDb250
ZXh0LmgiCkBAIC0zNywzMDAgKzM4LDE5MCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgewogcHVibGljOgotICAgIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUoKQotICAgICAgICA6IG1fc3RydWN0dXJlKDApCisgICAgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSgpIHsgfQorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogbV9zZXQoc3RydWN0dXJlKQogICAgIHsKKyAgICAg
ICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsKICAgICB9Ci0gICAgCi0gICAgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKLSAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1
Y3R1cmUpCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQorICAgICAgICA6IG1fc2V0KG90aGVyKQorICAgIHsKKyAgICAgICAgc2V0Q2xvYmJlcmVk
KGZhbHNlKTsKKyAgICB9CisgICAgQUxXQVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgICAgICA6IG1fc2V0KG90
aGVyLm1fc2V0KQogICAgIHsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKG90aGVyLmlzQ2xvYmJlcmVk
KCkpOwogICAgIH0KICAgICAKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVj
dHVyZVNldCYgc2V0KQorICAgIEFMV0FZU19JTkxJTkUgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQogICAgIHsKLSAg
ICAgICAgc3dpdGNoIChzZXQuc2l6ZSgpKSB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc2V0WzBdOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1f
c3RydWN0dXJlID0gdG9wVmFsdWUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cisg
ICAgICAgIG1fc2V0ID0gb3RoZXIubV9zZXQ7CisgICAgICAgIHNldENsb2JiZXJlZChvdGhlci5p
c0Nsb2JiZXJlZCgpKTsKKyAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KICAgICAKICAgICB2
b2lkIGNsZWFyKCkKICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgbV9z
ZXQuY2xlYXIoKTsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsKICAgICB9CiAgICAgCiAg
ICAgdm9pZCBtYWtlVG9wKCkKICAgICB7Ci0gICAgICAgIG1fc3RydWN0dXJlID0gdG9wVmFsdWUo
KTsKKyAgICAgICAgbV9zZXQuZGVsZXRlU3RydWN0dXJlTGlzdElmTmVjZXNzYXJ5KCk7CisgICAg
ICAgIG1fc2V0Lm1fcG9pbnRlciA9IHRvcFZhbHVlOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB0b3AoKQotICAgIHsKLSAgICAgICAgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSB2YWx1ZTsKLSAgICAgICAgdmFsdWUubWFrZVRvcCgpOwotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfQorI2lmIEFTU0VSVF9ESVNBQkxFRAorICAgIHZvaWQgYXNzZXJ0SXNX
YXRjaGVkKEdyYXBoJikgY29uc3QgeyB9CisjZWxzZQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVk
KEdyYXBoJikgY29uc3Q7CisjZW5kaWYKICAgICAKLSAgICB2b2lkIGFkZChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCghY29udGFpbnMoc3RydWN0dXJlKSAmJiAh
aXNUb3AoKSk7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG1ha2VUb3Ao
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0g
ICAgfQorICAgIHZvaWQgY2xvYmJlcigpOworICAgIHZvaWQgb2JzZXJ2ZUludmFsaWRhdGlvblBv
aW50KCkgeyBzZXRDbG9iYmVyZWQoZmFsc2UpOyB9CiAgICAgCi0gICAgYm9vbCBhZGRBbGwoY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpIHx8ICFv
dGhlci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChvdGhl
ci5zaXplKCkgPiAxKSB7Ci0gICAgICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKSB7Ci0gICAgICAg
ICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyWzBdKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtYWtlVG9wKCk7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3Ry
dWN0dXJlKiB0byk7CisgICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlv
blZlY3RvciYpOwogICAgIAotICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCiAg
ICAgewotICAgICAgICBpZiAoIW90aGVyLm1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpIHsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVy
ZSkgewotICAgICAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIG1ha2VUb3AoKTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIG1fc3RydWN0dXJlID0g
b3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fc2V0Lm1fcG9pbnRlciA9
IHRvcFZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBib29s
IGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG1fc3RydWN0
dXJlID09IHN0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQorICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3NldC5tX3Bv
aW50ZXIgPT0gdG9wVmFsdWU7IH0KKyAgICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29u
c3QgeyByZXR1cm4gIWlzQ2xlYXIoKSAmJiAhaXNUb3AoKTsgfQogICAgIAotICAgIGJvb2wgaXNT
dWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghbV9z
dHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIG90aGVy
LmNvbnRhaW5zKG1fc3RydWN0dXJlKTsKLSAgICB9CisgICAgLy8gQSBjbG9iYmVyZWQgYWJzdHJh
Y3QgdmFsdWUgbWVhbnMgdGhhdCB0aGUgc2V0IGN1cnJlbnRseSBjb250YWlucyB0aGUgbV9zZXQg
c2V0IG9mCisgICAgLy8gc3RydWN0dXJlcyBwbHVzIFRPUCwgZXhjZXB0IHRoYXQgdGhlICJwbHVz
IFRPUCIgd2lsbCBnbyBhd2F5IGF0IHRoZSBuZXh0IGludmFsaWRhdGlvbgorICAgIC8vIHBvaW50
LiBOb3RlIHRoYXQgaXQncyB0ZW1wdGluZyB0byB0aGluayBvZiB0aGlzIGFzICJ0aGUgc2V0IG9m
IHN0cnVjdHVyZXMgaW4gbV9zZXQgcGx1cworICAgIC8vIHRoZSBzZXQgb2Ygc3RydWN0dXJlcyB0
cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9tIG1fc2V0IiAtIGJ1dCB0aGlzIGlzbid0IHJlYWxseSBj
b3JyZWN0LAorICAgIC8vIHNpbmNlIGlmIHdlIGFkZCBhbiB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUg
YWZ0ZXIgY2xvYmJlcmluZywgdGhlIHR3byBkZWZpbml0aW9ucyBhcmUgbm90CisgICAgLy8gZXF1
aXZhbGVudC4gSWYgd2UgZG8gdGhpcywgdGhlIG5ldyB1bndhdGNoYWJsZSBzdHJ1Y3R1cmUgd2ls
bCBiZSBhZGRlZCB0byBtX3NldC4KKyAgICAvLyBJbnZhbGlkYXRpb24gcG9pbnRzIGRvIG5vdCB0
cnkgdG8gImNsaXAiIHRoZSBzZXQgb2YgdHJhbnNpdGlvbi1yZWFjaGFibGUgc3RydWN0dXJlcyBm
cm9tCisgICAgLy8gbV9zZXQgYnkgbG9va2luZyBhdCByZWFjaGFiaWxpdHkgYXMgdGhpcyB3b3Vs
ZCBtZWFuIHRoYXQgdGhlIG5ldyBzZXQgaXMgVE9QLiBJbnN0ZWFkIHRoZXkKKyAgICAvLyBsaXRl
cmFsbHkgYXNzdW1lIHRoYXQgdGhlIHNldCBpcyBqdXN0IG1fc2V0IHJhdGhlciB0aGFuIG1fc2V0
IHBsdXMgVE9QLgorICAgIGJvb2wgaXNDbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX3NldC5n
ZXRSZXNlcnZlZEZsYWcoKTsgfQogICAgIAotICAgIGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhl
clRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNU
b3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVy
ZSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUg
PT0gc3RydWN0dXJlOwotICAgIH0KKyAgICBib29sIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7
CiAgICAgCi0gICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikg
Y29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmICghb3RoZXIuc2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIGlmIChvdGhlci5zaXplKCkgPiAxKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF07Ci0gICAgfQorICAgIGJv
b2wgbWVyZ2UoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7CiAgICAgCi0gICAgYm9vbCBpc1N1
YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhl
cikKICAgICB7Ci0gICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICBpZiAob3RoZXIuaXNDbGVhcigp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsK
LSAgICAgICAgICAgIGlmIChvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAgIAorICAgICAgICBp
ZiAoaXNUb3AoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3Qg
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAoIW1fc3RydWN0
dXJlKQotICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAKLSAgICAgICAgaWYgKGlzVG9wKCkp
IHsKLSAgICAgICAgICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBjYXNl
IDA6Ci0gICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
ICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAgICAg
ICAgICAgbWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICAgICAgCi0gICAgICAgIGlmIChvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgICAg
IHJldHVybiBtZXJnZVNsb3cob3RoZXIpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZpbHRlcihj
b25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmIChp
c1RvcCgpKSB7Ci0gICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90
aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fc3RydWN0dXJlID0g
MDsKLSAgICB9CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7Cisg
ICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpOwogICAg
IAotICAgIHZvaWQgZmlsdGVyKFNwZWN1bGF0ZWRUeXBlIG90aGVyKQorICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBmaWx0ZXIoU3BlY3VsYXRlZFR5cGUgdHlwZSkKICAgICB7Ci0gICAgICAgIGlmICgh
KG90aGVyICYgU3BlY0NlbGwpKSB7CisgICAgICAgIGlmICghKHR5cGUgJiBTcGVjQ2VsbCkpIHsK
ICAgICAgICAgICAgIGNsZWFyKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGlmIChpc0NsZWFyT3JUb3AoKSkKLSAgICAgICAgICAgIHJldHVybjsK
LQotICAgICAgICBpZiAoIShzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpICYg
b3RoZXIpKQotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICBpZiAoaXNOZWl0
aGVyQ2xlYXJOb3JUb3AoKSkKKyAgICAgICAgICAgIGZpbHRlclNsb3codHlwZSk7CiAgICAgfQog
ICAgIAotICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAg
ewotICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlOworICAgICAgICBpZiAoKG1fc2V0LmlzVGhp
bigpICYmIG90aGVyLm1fc2V0LmlzVGhpbigpKSB8fCBpc1RvcCgpIHx8IG90aGVyLmlzVG9wKCkp
CisgICAgICAgICAgICByZXR1cm4gbV9zZXQubV9wb2ludGVyID09IG90aGVyLm1fc2V0Lm1fcG9p
bnRlcjsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBlcXVhbHNTbG93KG90aGVyKTsKICAgICB9
CiAgICAgCi0gICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlID09IHRv
cFZhbHVlKCk7IH0KLSAgICAKLSAgICBib29sIGlzQ2xlYXJPclRvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlIDw9IHRvcFZhbHVlKCk7IH0KLSAgICBib29sIGlzTmVpdGhlckNsZWFyTm9y
VG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xlYXJPclRvcCgpOyB9Ci0gICAgCiAgICAgc2l6ZV90
IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKLSAgICAgICAg
cmV0dXJuICEhbV9zdHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5zaXplKCk7CiAgICAg
fQogICAgIAogICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoIWlzVG9wKCkpOwotICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOwotICAgICAg
ICBBU1NFUlRfVU5VU0VEKGksICFpKTsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAg
ICAgICByZXR1cm4gbV9zZXQuYXQoaSk7CiAgICAgfQogICAgIAotICAgIFN0cnVjdHVyZSogb3Bl
cmF0b3JbXShzaXplX3QgaSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBhdChpKTsKLSAg
ICB9CisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBh
dChpKTsgfQogICAgIAotICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgLy8gRklYTUU6
IEVsaW1pbmF0ZSBhbGwgdXNlcyBvZiB0aGlzIG1ldGhvZC4gVGhlcmUgc2hvdWxkbid0IGJlIGFu
eQorICAgIC8vIHNwZWNpYWwtY2FzaW5nIGZvciB0aGUgb25lLXN0cnVjdHVyZSBjYXNlLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMyMjkKKyAgICBT
dHJ1Y3R1cmUqIG9ubHlTdHJ1Y3R1cmUoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKGlzVG9w
KCkgfHwgc2l6ZSgpICE9IDEpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAg
cmV0dXJuIGF0KDApOwogICAgIH0KICAgICAKLSAgICBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlv
bkZyb21TdHJ1Y3R1cmVzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAg
ICAgICAgICAgcmV0dXJuIFNwZWNDZWxsOwotICAgICAgICBpZiAoaXNDbGVhcigpKQotICAgICAg
ICAgICAgcmV0dXJuIFNwZWNOb25lOwotICAgICAgICByZXR1cm4gc3BlY3VsYXRpb25Gcm9tU3Ry
dWN0dXJlKG1fc3RydWN0dXJlKTsKLSAgICB9CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50
U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKICAgICAKLSAgICBib29sIGlzVmFsaWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCk7Ci0gICAgfQor
ICAgIC8vIFRoZSBtZXRob2RzIGJlbG93IGFyZSBhbGwgY29uc2VydmF0aXZlIGFuZCBlcnIgb24g
dGhlIHNpZGUgb2YgbWFraW5nICd0aGlzJyBhcHBlYXIgYmlnZ2VyCisgICAgLy8gdGhhbiBpdCBp
cy4gRm9yIGV4YW1wbGUsIGNvbnRhaW5zKCkgbWF5IHJldHVybiB0cnVlIGlmIHRoZSBzZXQgaXMg
Y2xvYmJlcmVkIG9yIFRPUC4KKyAgICAvLyBpc1N1YnNldE9mKCkgbWF5IHJldHVybiBmYWxzZSBp
biBjYXNlIG9mIGFtYmlndWl0aWVzLiBUaGVyZWZvcmUgeW91IHNob3VsZCBvbmx5IHBlcmZvcm0K
KyAgICAvLyBvcHRpbWl6YXRpb25zIGFzIGEgY29uc2VxdWVuY2Ugb2YgdGhlICJ0aGlzIGlzIHNt
YWxsZXIiIHJldHVybiB2YWx1ZSAtIHNvIGZhbHNlIGZvcgorICAgIC8vIGNvbnRhaW5zKCksIHRy
dWUgZm9yIGlzU3Vic2V0T2YoKSwgZmFsc2UgZm9yIGlzU3VwZXJzZXRPZigpLCBhbmQgZmFsc2Ug
Zm9yIG92ZXJsYXBzKCkuCisKKyAgICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJl
KSBjb25zdDsKICAgICAKLSAgICBib29sIGhhc1NpbmdsZXRvbigpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKTsKLSAgICB9CisgICAgYm9vbCBpc1N1
YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNTdWJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CiAgICAgCi0g
ICAgU3RydWN0dXJlKiBzaW5nbGV0b24oKSBjb25zdAorICAgIGJvb2wgaXNTdXBlcnNldE9mKGNv
bnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaXNTdXBlcnNldE9mKGNv
bnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzTmVpdGhlckNsZWFyTm9yVG9wKCkpOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmU7CisgICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0aGlzKTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVy
KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3Ry
dWN0dXJlOwotICAgIH0KKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpIGNvbnN0OworICAgIGJvb2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZSYgb3RoZXIpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdWludHB0
cl90IGNsb2JiZXJlZEZsYWcgPSBTdHJ1Y3R1cmVTZXQ6OnJlc2VydmVkRmxhZzsKKyAgICBzdGF0
aWMgY29uc3QgdWludHB0cl90IHRvcFZhbHVlID0gU3RydWN0dXJlU2V0OjpyZXNlcnZlZFZhbHVl
OworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBwb2x5bW9ycGhpc21MaW1pdCA9IDEwOworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjbG9iYmVyZWRTdXByZW1hY3lUaHJlc2hvbGQgPSAyOwor
ICAgIAorICAgIHZvaWQgZmlsdGVyU2xvdyhTcGVjdWxhdGVkVHlwZSB0eXBlKTsKKyAgICBib29s
IG1lcmdlU2xvdyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcik7CiAgICAgCi0g
ICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250
ZXh0KSBjb25zdAorICAgIGJvb2wgZXF1YWxzU2xvdyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlJiBvdGhlcikgY29uc3Q7CisgICAgCisgICAgdm9pZCBtYWtlVG9wV2hlblRoaW4oKQogICAg
IHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAgIG91dC5wcmludCgiVE9QIik7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG91dC5w
cmludCgiWyIpOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICBvdXQucHJp
bnQoaW5Db250ZXh0KCptX3N0cnVjdHVyZSwgY29udGV4dCkpOwotICAgICAgICBvdXQucHJpbnQo
Il0iKTsKKyAgICAgICAgQVNTRVJUKG1fc2V0LmlzVGhpbigpKTsKKyAgICAgICAgbV9zZXQubV9w
b2ludGVyID0gdG9wVmFsdWU7CiAgICAgfQotCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgCisgICAgYm9vbCBtZXJnZU5vdFRvcChjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKTsKKyAgICAKKyAgICB2b2lkIHNldENsb2JiZXJlZChib29sIGNsb2JiZXJlZCkKICAg
ICB7Ci0gICAgICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKKyAgICAgICAgQVNTRVJUKCFpc1Rv
cCgpIHx8ICFjbG9iYmVyZWQpOworICAgICAgICBtX3NldC5zZXRSZXNlcnZlZEZsYWcoY2xvYmJl
cmVkKTsKICAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogdG9wVmFsdWUo
KSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOyB9Ci0gICAgCi0gICAg
Ly8gTkIuIFRoaXMgbXVzdCBoYXZlIGEgdHJpdmlhbCBkZXN0cnVjdG9yLgogICAgIAotICAgIC8v
IFRoaXMgY2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0cnVjdHVyZSBhdCBhIHRpbWUuCi0gICAgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmVTZXQgbV9zZXQ7CiB9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVfaAorI2RlZmlu
ZSBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitlbnVtIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSB7CisgICAgU3RydWN0dXJlc0FyZVdh
dGNoZWQsIC8vIENvbnN0YW50cyB3aXRoIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzIG11c3QgaGF2ZSB0
aG9zZSBzdHJ1Y3R1cmVzLgorICAgIFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQgLy8gQ29uc3RhbnRz
IHdpdGggd2F0Y2hhYmxlIHN0cnVjdHVyZXMgY291bGQgaGF2ZSBhbnkgc3RydWN0dXJlLgorfTsK
KworaW5saW5lIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBtZXJnZShTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUgYSwgU3RydWN0dXJlQ2xvYmJlclN0YXRlIGIpCit7CisgICAgc3dpdGNoIChhKSB7CisgICAg
Y2FzZSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDoKKyAgICAgICAgcmV0dXJuIGI7CisgICAgY2FzZSBT
dHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkOgorICAgICAgICByZXR1cm4gU3RydWN0dXJlc0FyZUNsb2Ji
ZXJlZDsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKworaW5saW5lIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6OkRGRzo6U3RydWN0dXJlQ2xvYmJl
clN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEpTQzo6REZH
OjpTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVzQXJl
V2F0Y2hlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OkRGRzo6U3RydWN0dXJl
c0FyZUNsb2JiZXJlZDoKKyAgICAgICAgb3V0LnByaW50KCJTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZV9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1RyYW5zaXRpb24uaCIK
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQgVHJhbnNpdGlvbjo6ZHVtcEluQ29u
dGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQocG9pbnRlckR1bXBJbkNvbnRleHQocHJldmlvdXMsIGNvbnRleHQpLCAiIC0+
ICIsIHBvaW50ZXJEdW1wSW5Db250ZXh0KG5leHQsIGNvbnRleHQpKTsKK30KKwordm9pZCBUcmFu
c2l0aW9uOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4
dChvdXQsIDApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFu
c2l0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUcmFu
c2l0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Ry
YW5zaXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVHJhbnNpdGlvbl9o
CisjZGVmaW5lIERGR1RyYW5zaXRpb25faAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBTdHJ1Y3R1cmU7CitzdHJ1Y3QgRHVtcENvbnRleHQ7CisKK25h
bWVzcGFjZSBERkcgeworCitzdHJ1Y3QgVHJhbnNpdGlvbiB7CisgICAgU3RydWN0dXJlKiBwcmV2
aW91czsKKyAgICBTdHJ1Y3R1cmUqIG5leHQ7CisgICAgCisgICAgVHJhbnNpdGlvbigpCisgICAg
ICAgIDogcHJldmlvdXMobnVsbHB0cikKKyAgICAgICAgLCBuZXh0KG51bGxwdHIpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBUcmFuc2l0aW9uKFN0cnVjdHVyZSogcHJldmlvdXMsIFN0cnVjdHVy
ZSogbmV4dCkKKyAgICAgICAgOiBwcmV2aW91cyhwcmV2aW91cykKKyAgICAgICAgLCBuZXh0KG5l
eHQpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJl
YW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworfTsKKwordHlwZWRlZiBWZWN0b3I8VHJhbnNpdGlvbiwgMz4gVHJhbnNpdGlvblZlY3Rv
cjsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdUcmFuc2l0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXhJbkJsb2NrID0gMDsgaW5kZXhJ
bkJsb2NrIDwgYmxvY2stPnNpemUoKTsgKytpbmRleEluQmxvY2spIHsKICAgICAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CiAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7
CisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogewogICAgICAgICAgICAgICAg
ICAgICBOb2RlKiBjaGlsZCA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGNoaWxkLT5vcCgpICE9IEdldExvY2FsKQogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0yODUsMTMgKzI4NCw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2sodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVj
dHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
c3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS0+c3Ry
dWN0dXJlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
QEAgLTMzMSw3ICszMjMsNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2FzZSBTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIEdldEJ5T2Zm
c2V0OgogICAgICAgICAgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAg
Y2FzZSBQdXRTdHJ1Y3R1cmU6CkBAIC0zODYsMTMgKzM3Nyw2IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0dXJlQ2hlY2tBY2NvdW50aW5nRm9yQXJy
YXlNb2RlKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OiB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yk5vZGUtPmNoaWxkMSgpICE9IHNvdXJj
ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWNlU3RydWN0
dXJlQ2hlY2tBY2NvdW50aW5nRm9yQXJyYXlNb2RlKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1
cmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENoZWNrQXJyYXk6IHsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291
cmNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR1dhdGNo
YWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFdhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgeworcHVibGljOgorICAgIFdhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UoR3JhcGgmIGdyYXBoKQorICAgICAgICA6IFBoYXNlKGdyYXBoLCAid2F0
Y2hhYmxlIHN0cnVjdHVyZSB3YXRjaGluZyIpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29s
IHJ1bigpCisgICAgeworICAgICAgICAvLyBUaGVzZSBhcmUgcHJldHR5IGR1bWIsIGJ1dCBuZWVk
ZWQgdG8gcGxhY2F0ZSBzdWJzZXF1ZW50IGFzc2VydGlvbnMuIFdlIGNvbid0IGFjdHVhbGx5Cisg
ICAgICAgIC8vIGhhdmUgdG8gd2F0Y2ggdGhlc2UgYmVjYXVzZSB0aGVyZSBpcyBubyB3YXkgdG8g
dHJhbnNpdGlvbiBhd2F5IGZyb20gaXQsIGJ1dCB0aGV5IGFyZQorICAgICAgICAvLyB3YXRjaGFi
bGUgYW5kIHNvIHdlIHdpbGwgYXNzZXJ0IGlmIHRoZXkgYXJlbid0IHdhdGNoZWQuCisgICAgICAg
IHRyeVdhdGNoKG1fZ3JhcGgubV92bS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpOyAKKyAgICAgICAg
dHJ5V2F0Y2gobV9ncmFwaC5tX3ZtLmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxv
Y2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIGlmICghYmxvY2spCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkg
eworICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYWtKU0Nv
bnN0YW50OgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLnZhbHVlT2ZKU0Nv
bnN0YW50KG5vZGUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICAgICAgICAg
ICAgICB0cnlXYXRjaChub2RlLT5mdW5jdGlvbigpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja0V4ZWN1dGFi
bGU6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmV4ZWN1dGFibGUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5v
ZGUtPnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgICAgICAg
ICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgTmV3U3Ry
aW5nT2JqZWN0OgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChub2RlLT5zdHJ1Y3R1cmUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGNhc2UgUGhhbnRv
bVB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBjYXNlIEFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlOgorICAgICAgICAgICAgICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToKKyAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2
aW91cy0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAg
ICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0
cnVjdHVyZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGhhdmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVl
ZCB0byB3YXRjaCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxMaW5rU3RhdHVz
IGJlY2F1c2Ugd2Ugd291bGRuJ3QgdXNlIE11bHRpR2V0QnlPZmZzZXQgaWYgYW55IG9mIHRoZQor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyaWFudHMgZGlkIHRoYXQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEo
KS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB1dEJ5
SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50
c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQub2xkU3RydWN0
dXJlKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09IFB1
dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRy
eVdhdGNoKHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjYXNlIE5ld0FycmF5OgorICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZm
ZXI6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVy
aW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUoKSkpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdU
eXBlZEFycmF5OgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9i
amVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT50eXBlZEFycmF5U3RydWN0dXJlKG5vZGUt
PnR5cGVkQXJyYXlUeXBlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgVG9TdHJpbmc6CisgICAgICAgICAg
ICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgQ3JlYXRl
QWN0aXZhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxP
YmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCht
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5yZWdFeHBTdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIHRyeVdhdGNo
KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAg
ICAgICAgICB0cnlXYXRjaCh2YWx1ZS5hc0NlbGwoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dHJ5V2F0Y2goSlNDZWxsKiBjZWxsKQorICAgIHsKKyAgICAgICAgaWYgKGNlbGwpCisgICAgICAg
ICAgICB0cnlXYXRjaChjZWxsLT5zdHJ1Y3R1cmUoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dHJ5V2F0Y2goY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzZXQuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgdHJ5V2F0Y2goc2V0W2ld
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
KyAgICB7CisgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5jb25zaWRlcihzdHJ1Y3R1cmUp
OworICAgIH0KK307CisKK2Jvb2wgcGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nKEdy
YXBoJiBncmFwaCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiREZHIFdh
dGNoYWJsZSBTdHJ1Y3R1cmUgV2F0Y2hpbmciKTsKKyAgICByZXR1cm4gcnVuUGhhc2U8V2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZT4oZ3JhcGgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1
cmVXYXRjaGluZ1BoYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZV9oCisjZGVm
aW5lIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2VfaAorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgR3JhcGg7
CisKKy8vIFNldCB3YXRjaHBvaW50cyBvbiBhbnkgc3RydWN0dXJlcyB0aGF0IHdlIGtub3cgb2Yg
dGhhdCBhcmUgY3VycmVudGx5IHdhdGNoYWJsZS4gSXQncworLy8gc29tZXdoYXQgY291bnRlcmlu
dHVpdGl2ZSwgYnV0IHRoaXMgZW5kcyB1cCBiZWluZyB0aGUgY2xlYW5lc3QgYW5kIG1vc3QgZWZm
ZWN0aXZlIHdheQorLy8gb2YgcmVkdWNpbmcgc3RydWN0dXJlIGNoZWNrcyBvbiB0ZXJtaW5hbCBz
dHJ1Y3R1cmVzOgorLy8KKy8vIC0gV2UgdXNlZCB0byBvbmx5IHNldCB3YXRjaHBvaW50cyBvbiB3
YXRjaGFibGUgc3RydWN0dXJlcyBpZiB3ZSBrbmV3IHRoYXQgdGhpcyB3b3VsZAorLy8gICByZW1v
dmUgYSBzdHJ1Y3R1cmUgY2hlY2suIEV4cGVyaW1lbnRzIHNob3cgdGhhdCBzd2l0Y2hpbmcgZnJv
bSB0aGF0LCB0byBibGluZGx5CisvLyAgIHNldHRpbmcgd2F0Y2hwb2ludHMgb24gYWxsIHdhdGNo
YWJsZSBzdHJ1Y3R1cmVzLCB3YXMgbm90IGEgcmVncmVzc2lvbi4KKy8vCisvLyAtIEl0IG1ha2Vz
IGFic3RyYWN0IGludGVycHJldGF0aW9uIGEgd2hvbGUgbG90IGVhc2llci4gV2UganVzdCBhc3N1
bWUgdGhhdCB3YXRjaGFibGUKKy8vICAgc3RydWN0dXJlcyBhcmUgdW5jbG9iYmVyYWJsZSB3aXRo
b3V0IGhhdmluZyB0byBkbyBhbnkgb3RoZXIgbG9naWMuCisKK2Jvb2wgcGVyZm9ybVdhdGNoYWJs
ZVN0cnVjdHVyZVdhdGNoaW5nKEdyYXBoJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHV2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmdQaGFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcAkocmV2aXNp
b24gMTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29s
bGVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsOCArNjQsNiBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIHZvaWQgaGFuZGxlKCkKICAgICB7Ci0gICAgICAgIERGR19OT0RFX0RP
X1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgaGFuZGxlRWRnZSk7Ci0gICAgICAgIAogICAg
ICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIENvbXBhcmVFcUNvbnN0
YW50OgogICAgICAgICBjYXNlIElzVW5kZWZpbmVkOgpAQCAtMTE5LDEzICsxMTcsNiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYWRkTGF6aWx5KGpzQ2FzdDxKU0Z1bmN0aW9uKj4obV9ub2RlLT5m
dW5jdGlvbigpKS0+YWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50U2V0KCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHko
Ci0gICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMsCi0gICAgICAgICAgICAg
ICAgbV9ub2RlLT5jaGlsZDEoKS0+b3AoKSA9PSBXZWFrSlNDb25zdGFudCA/IEJhZFdlYWtDb25z
dGFudENhY2hlV2F0Y2hwb2ludCA6IEJhZENhY2hlV2F0Y2hwb2ludCwKLSAgICAgICAgICAgICAg
ICBtX25vZGUtPnN0cnVjdHVyZSgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgVmFyaWFibGVXYXRjaHBv
aW50OgogICAgICAgICAgICAgYWRkTGF6aWx5KG1fbm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0
KCkpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNDcsMjYgKzEzOCw2IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBoYW5kbGVFZGdlKE5vZGUqLCBFZGdlIGVk
Z2UpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGVkZ2UudXNlS2luZCgpKSB7Ci0gICAgICAgIGNh
c2UgU3RyaW5nT2JqZWN0VXNlOgotICAgICAgICBjYXNlIFN0cmluZ09yU3RyaW5nT2JqZWN0VXNl
OiB7Ci0gICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9IGdsb2Jh
bE9iamVjdCgpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9y
ZWRQcm90b3R5cGUoKS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7Ci0gICAgICAgICAgICBBU1NFUlQo
bV9ncmFwaC53YXRjaHBvaW50cygpLmlzVmFsaWRPck1peGVkKHN0cmluZ1Byb3RvdHlwZVN0cnVj
dHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KAotICAgICAgICAgICAgICAgIG1f
bm9kZS0+b3JpZ2luLnNlbWFudGljLCBOb3RTdHJpbmdPYmplY3QsCi0gICAgICAgICAgICAgICAg
c3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIHZvaWQg
aGFuZGxlTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCgpCiAgICAgewogICAgICAgICBpZiAobV9ncmFw
aC5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0Y2hwb2ludElzU3RpbGxWYWxpZChtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYykpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDYg
QEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgQml0
TFNoaWZ0OgogICAgIGNhc2UgQml0VVJTaGlmdDoKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgot
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBBcnJheWlm
eVRvU3RydWN0dXJlOgogICAgIGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1
dFN0cnVjdHVyZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAt
ODIsMTIgKzgyLDE1IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNy
byhTX0pJVE9wZXJhdGlvbl9FSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCkp
IFwKICAgICBtYWNybyhTX0pJVE9wZXJhdGlvbl9FSkosIGZ1bmN0aW9uVHlwZShpbnRQdHIsIGlu
dFB0ciwgaW50NjQsIGludDY0KSkgXAogICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0osIGZ1bmN0
aW9uVHlwZShpbnRQdHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUpKSiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludDY0LCBpbnQ2NCwgaW50NjQpKSBcCiAgICAg
bWFjcm8oVl9KSVRPcGVyYXRpb25fRU9aRCwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIs
IGludFB0ciwgaW50MzIsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RU9aSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50MzIsIGludDY0
KSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDYiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJh
dGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50NjQp
KSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBp
bnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludDMyKSkgXAogICAgIG1hY3JvKFpfSklUT3BlcmF0aW9uX0QsIGZ1bmN0aW9uVHlwZShp
bnQzMiwgZG91YmxlVHlwZSkpCiAKIGNsYXNzIEludHJpbnNpY1JlcG9zaXRvcnkgOiBwdWJsaWMg
Q29tbW9uVmFsdWVzIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiAr
NTMsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIAogc3RhdGljIHN0ZDo6YXRvbWljPGludD4g
Y29tcGlsZUNvdW50ZXI7CiAKKyNpZiBBU1NFUlRfRElTQUJMRUQKK05PX1JFVFVSTl9EVUVfVE9f
Q1JBU0ggc3RhdGljIHZvaWQgZnRsVW5yZWFjaGFibGUoKQoreworICAgIENSQVNIKCk7Cit9Cisj
ZWxzZQorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxVbnJlYWNoYWJsZSgK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25l
ZCBub2RlSW5kZXgpCit7CisgICAgCisgICAgZGF0YUxvZygiQ3Jhc2hpbmcgaW4gdGhvdWdodC10
by1iZS11bnJlYWNoYWJsZSBGVEwtZ2VuZXJhdGVkIGNvZGUgZm9yICIsIHBvaW50ZXJEdW1wKGNv
ZGVCbG9jayksICIgYXQgYmFzaWMgYmxvY2sgIyIsIGJsb2NrSW5kZXgpOworICAgIGlmIChub2Rl
SW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIGRhdGFMb2coIiwgbm9kZSBAIiwgbm9kZUluZGV4
KTsKKyAgICBkYXRhTG9nKCIuXG4iKTsKKyAgICBDUkFTSCgpOworfQorI2VuZGlmCisKIC8vIFVz
aW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQg
b24gTExWTSwgYnkgY3JlYXRpbmcKIC8vIHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAj
ZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhy
b3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBcCkBAIC0yMDIsNyArMjIwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IG1fb3V0LmludDY0OwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbm9kZSwgIkJhZCBQaGkgbm9kZSByZXN1bHQgdHlwZSIpOwogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
bV9waGlzLmFkZChub2RlLCBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIHR5cGUpKTsKQEAg
LTIzNywxMCArMjU1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Js
b2NrLCBtX25leHRMb3dCbG9jayk7CiAgICAgICAgIAogICAgICAgICBpZiAoT3B0aW9uczo6ZnRs
Q3Jhc2hlcygpKQotICAgICAgICAgICAgbV9vdXQuY3Jhc2hOb25UZXJtaW5hbCgpOworICAgICAg
ICAgICAgbV9vdXQudHJhcCgpOwogICAgICAgICAKICAgICAgICAgaWYgKCFtX2hpZ2hCbG9jay0+
Y2ZhSGFzVmlzaXRlZCkgewotICAgICAgICAgICAgbV9vdXQuY3Jhc2goKTsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQmFpbGluZyBiZWNhdXNlIENGQSBkaWRuJ3QgcmVhY2guXG4iKTsKKyAgICAgICAgICAgIGNy
YXNoKG1faGlnaEJsb2NrLT5pbmRleCwgVUlOVF9NQVgpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMjU4LDcgKzI3OCwyNiBAQCBwcml2YXRlOgogICAgIGJv
b2wgY29tcGlsZU5vZGUodW5zaWduZWQgbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKCFt
X3N0YXRlLmlzVmFsaWQoKSkgewotICAgICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQmFpbGluZy5cbiIpOworICAgICAgICAgICAgY3Jhc2gobV9oaWdoQmxvY2st
PmluZGV4LCBtX25vZGUtPmluZGV4KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJ
bnZhbGlkYXRlIGRvbWluYXRlZCBibG9ja3MuIFVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzIHdl
IHdvdWxkIGV4cGVjdAorICAgICAgICAgICAgLy8gdGhlbSB0byBiZSBpbnZhbGlkYXRlZCBhbHJl
YWR5LiBCdXQgeW91IGNhbiBoYXZlIHRoZSBDRkEgYmVjb21lIG1vcmUKKyAgICAgICAgICAgIC8v
IHByZWNpc2Ugb3ZlciB0aW1lIGJlY2F1c2UgdGhlIHN0cnVjdHVyZXMgb2Ygb2JqZWN0cyBjaGFu
Z2Ugb24gdGhlIG1haW4KKyAgICAgICAgICAgIC8vIHRocmVhZC4gRmFpbGluZyB0byBkbyB0aGlz
IHdvdWxkIHJlc3VsdCBpbiB3ZWlyZCBjcmFzaGVzIGR1ZSB0byBhIHZhbHVlCisgICAgICAgICAg
ICAvLyBiZWluZyB1c2VkIGJ1dCBub3QgZGVmaW5lZC4gUmFjZSBjb25kaXRpb25zIEZUVyEKKyAg
ICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3Mo
KTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHRhcmdldCA9
IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCF0YXJnZXQp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChtX2dy
YXBoLm1fZG9taW5hdG9ycy5kb21pbmF0ZXMobV9oaWdoQmxvY2ssIHRhcmdldCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIkJsb2NrICIsICp0YXJnZXQsICIgd2lsbCBiYWlsIGFs
c28uXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5jZmFIYXNWaXNpdGVkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zOTksOSArNDM4
LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgICAg
IGNvbXBpbGVDaGVja1N0cnVjdHVyZSgpOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6Ci0gICAgICAgICAgICBjb21waWxlU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIENoZWNrRnVuY3Rpb246CiAgICAgICAgICAgICBjb21waWxlQ2hlY2tGdW5jdGlvbigp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC02MzYsMTIgKzY3Miw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgQWxsb2NhdGlvblByb2ZpbGVXYXRjaHBvaW50OgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkYXRhTG9nKCJVbnJlY29nbml6ZWQgbm9k
ZSBpbiBGVEwgYmFja2VuZDpcbiIpOwotICAgICAgICAgICAgbV9ncmFwaC5kdW1wKFdURjo6ZGF0
YUZpbGUoKSwgIiAgICAiLCBtX25vZGUpOwotICAgICAgICAgICAgZGF0YUxvZygiXG4iKTsKLSAg
ICAgICAgICAgIGRhdGFMb2coIkZ1bGwgZ3JhcGggZHVtcDpcbiIpOwotICAgICAgICAgICAgbV9n
cmFwaC5kdW1wKCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlVucmVjb2duaXplZCBub2Rl
IGluIEZUTCBiYWNrZW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTY3NSw3ICs3MDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9vdXQuc2V0KGxv
d0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNl
IGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtNzAxLDcg
KzczMiw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBzZXRKU1ZhbHVlKG1fb3V0LmdldChzb3Vy
Y2UpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgfQpAQCAtNzQ0LDcgKzc3NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
dXNlIGtpbmQiKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTc2OSw3ICs4MDAsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkBAIC04MjEsNyArODUyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJh
ZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC04
MzAsNyArODYxLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKTsKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlQob3BlcmFuZC5pc0FyZ3VtZW50KCkpOworICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgb3BlcmFuZC5pc0FyZ3VtZW50KCkpOwogCiAgICAgICAgIExWYWx1
ZSBqc1ZhbHVlID0gbV9vdXQubG9hZDY0KGFkZHJlc3NGb3Iob3BlcmFuZCkpOwogCkBAIC04NTEs
NyArODgyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldEpTVmFsdWUoanNWYWx1ZSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9u
b2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KQEAgLTg3MCw3ICs5MDEsNyBAQCBwcml2YXRlOgogICAgICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQodmFyaWFibGUt
PmxvY2FsKCkpOwogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCB2YXJpYWJs
ZS0+aXNDYXB0dXJlZCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIHNldEludDMyKG1fb3V0LmxvYWQzMihwYXls
b2FkRm9yKHZhcmlhYmxlLT5tYWNoaW5lTG9jYWwoKSkpKTsKQEAgLTkyMiw3ICs5NTMsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGZsdXNoIGZvcm1hdCIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMDk4LDcgKzExMjksNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTExNzIsNyArMTIwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAg
ICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
dXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTI3
NSw3ICsxMzA2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzczLDcgKzE0MDQsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KQEAgLTE0MjQsNyArMTQ1NSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTQ1MCw3ICsxNDgxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2lu
ZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNTE3LDcgKzE1
NDgsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTE2MDksMTIgKzE2NDAsNiBAQCBwcml2YXRl
OgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBjb21waWxlU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQoKQot
ICAgIHsKLSAgICAgICAgYWRkV2Vha1JlZmVyZW5jZShtX25vZGUtPnN0cnVjdHVyZSgpKTsKLSAg
ICAgICAgc3BlY3VsYXRlQ2VsbChtX25vZGUtPmNoaWxkMSgpKTsKLSAgICB9Ci0gICAgCiAgICAg
dm9pZCBjb21waWxlQ2hlY2tGdW5jdGlvbigpCiAgICAgewogICAgICAgICBMVmFsdWUgY2VsbCA9
IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CkBAIC0xNjgzLDcgKzE3MDgsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25FbnN1cmVBcnJh
eVN0b3JhZ2UpLCBtX2NhbGxGcmFtZSwgY2VsbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTcwMCw4ICsxNzI1
LDggQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9u
Lm5vdGlmeUNvbXBpbGluZ1N0cnVjdHVyZVRyYW5zaXRpb24obV9ncmFwaC5tX3BsYW4sIGNvZGVC
bG9jaygpLCBtX25vZGUpOwogCi0gICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9u
b2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlOwotICAgICAg
ICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKS5uZXdTdHJ1Y3R1cmU7CisgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gbV9u
b2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzOworICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IG1fbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0OwogICAgICAgICBBU1NFUlRfVU5VU0VE
KG9sZFN0cnVjdHVyZSwgb2xkU3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBuZXdTdHJ1Y3R1
cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgQVNTRVJUKG9sZFN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkuaW5saW5l
VHlwZUZsYWdzKCkpOwogICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLnR5
cGUoKSA9PSBuZXdTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpKTsKQEAgLTE3NTcsNyArMTc4
Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTE4ODMsNyArMTkwOCw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBjaGVja0FyZ3VtZW50c05vdENyZWF0ZWQoKTsKIAotICAgICAgICBS
RUxFQVNFX0FTU0VSVCghbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX25vZGUtPm9yaWdpbi5zZW1h
bnRpYy5pbmxpbmVDYWxsRnJhbWUpOwogICAgICAgICBzZXRJbnQzMihtX291dC5hZGQobV9vdXQu
bG9hZDMyTm9uTmVnYXRpdmUocGF5bG9hZEZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSksIG1f
b3V0LmNvbnN0SW50MzIoLTEpKSk7CiAgICAgfQogICAgIApAQCAtMTkwOSw3ICsxOTM0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIC8vIEZJWE1FOiBGVEwgc2hvdWxkIHN1cHBvcnQgYWN0aXZh
dGlvbnMuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI5NTc2CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5p
bXBsZW1lbnRlZCIpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBUeXBlZFBvaW50ZXIg
YmFzZTsKQEAgLTE5NDYsNyArMTk3MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9k
ZSwgIkJhZCBhcnJheSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICB9CkBAIC0yMDk2LDcgKzIxMjEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gbV9vdXQubG9hZDMyKHBvaW50ZXIpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBlbGVtZW50IHNpemUiKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgaWYgKGVsZW1lbnRTaXplKHR5cGUpIDwgNCkgewpAQCAtMjE0MCwxNCArMjE2NSwxNCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5sb2FkRG91Ymxl
KHBvaW50ZXIpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHR5
cGVkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgc2V0RG91YmxlKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwg
IkJhZCBhcnJheSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gfQogICAg
IH0KQEAgLTIyNTMsNyArMjI3OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCBhcnJheSB0eXBlIik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTIzNDYsNyArMjM3MSw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50
U2l6ZSh0eXBlKSkgewpAQCAtMjM2Myw3ICsyMzg4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJlZlR5cGUgPSBtX291dC5yZWYzMjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgZWxlbWVudCBzaXplIik7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgLyogIWlzSW50KHR5
cGUpICovIHsKICAgICAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93RG91YmxlKGNo
aWxkMyk7CkBAIC0yMzc3LDcgKzI0MDIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAgICAgcmVmVHlwZSA9IG1fb3V0LnJlZkRvdWJsZTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IApAQCAtMjQwMSw3ICsyNDI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAi
QmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpA
QCAtMjQ3Myw3ICsyNDk4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBhcnJheSB0eXBl
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTMxLDcgKzI1
NTYsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgIH0KQEAgLTI1NzYsNyArMjYwMSw3IEBAIHByaXZhdGU6CiAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvcklu
ZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oCiAgICAgICAgICAgICBtX25vZGUtPmluZGV4aW5n
VHlwZSgpKTsKICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZS0+aW5k
ZXhpbmdUeXBlKCkgPT0gbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7CisgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCBzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG1fbm9kZS0+
aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmlz
SGF2aW5nQUJhZFRpbWUoKSAmJiAhaGFzQW55QXJyYXlTdG9yYWdlKG1fbm9kZS0+aW5kZXhpbmdU
eXBlKCkpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IG1fbm9kZS0+bnVt
Q2hpbGRyZW4oKTsKQEAgLTI1ODksNyArMjYxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgc3dpdGNoIChtX25vZGUtPmluZGV4aW5nVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBBTExfQkxBTktfSU5ERVhJTkdfVFlQRVM6CiAgICAgICAgICAgICAgICAgY2FzZSBBTExfVU5E
RUNJREVEX0lOREVYSU5HX1RZUEVTOgotICAgICAgICAgICAgICAgICAgICBDUkFTSCgpOworICAg
ICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGluZGV4aW5n
IHR5cGUiKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKQEAgLTI2
MDcsNyArMjYzMiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
ICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwg
bV9ub2RlLCAiQ29ycnVwdCBpbmRleGluZyB0eXBlIik7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
MjY1Myw3ICsyNjc5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbigKICAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBtX25vZGUt
PmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFo
YXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ub2RlLT5udW1Db25zdGFudHMoKTsKQEAgLTI3OTEs
MjEgKzI4MTcsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVBbGxvY2F0ZVBy
b3BlcnR5U3RvcmFnZSgpCiAgICAgewotICAgICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSYg
ZGF0YSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKTsKICAgICAgICAgTFZhbHVl
IG9iamVjdCA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIAotICAgICAgICBz
ZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9iamVjdCwgZGF0YS5wcmV2aW91c1N0
cnVjdHVyZSkpOworICAgICAgICBzZXRTdG9yYWdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKG9i
amVjdCwgbV9ub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzKSk7CiAgICAgfQogCiAgICAgdm9p
ZCBjb21waWxlUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgpCiAgICAgewotICAgICAgICBTdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSYgZGF0YSA9IG1fbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRh
dGEoKTsKKyAgICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG1fbm9kZS0+dHJhbnNpdGlv
bigpOwogICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsK
ICAgICAgICAgTFZhbHVlIG9sZFN0b3JhZ2UgPSBsb3dTdG9yYWdlKG1fbm9kZS0+Y2hpbGQyKCkp
OwogICAgICAgICAKICAgICAgICAgc2V0U3RvcmFnZSgKICAgICAgICAgICAgIHJlYWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2UoCi0gICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCBkYXRh
LnByZXZpb3VzU3RydWN0dXJlLCBkYXRhLm5ld1N0cnVjdHVyZSkpOworICAgICAgICAgICAgICAg
IG9iamVjdCwgb2xkU3RvcmFnZSwgdHJhbnNpdGlvbi0+cHJldmlvdXMsIHRyYW5zaXRpb24tPm5l
eHQpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlVG9TdHJpbmcoKQpAQCAtMjg5MCw3
ICsyOTE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yOTgyLDcgKzMwMDYsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25NYWtlUm9wZTMp
LCBtX2NhbGxGcmFtZSwga2lkc1swXSwga2lkc1sxXSwga2lkc1syXSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBu
dW1iZXIgb2YgY2hpbGRyZW4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKQEAgLTMyMDcsNyArMzIzMSw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgIHNwZWN1
bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAg
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTMyNzksNyArMzMwMyw3IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGV4aXQsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIHRlcm1pbmF0ZShCYWRDYWNoZSk7CisgICAgICAgIHNwZWN1
bGF0ZShCYWRDYWNoZSwgbm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAg
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBl
bmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTMzOTgsNyArMzQyMiw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmRzIik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNv
bXBhcmVFcUNvbnN0YW50KCkKQEAgLTM0OTEsNyArMzUxNSw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
dXNlIGtpbmRzIik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUNvbXBhcmVTdHJpY3RF
cUNvbnN0YW50KCkKQEAgLTM2MjcsNyArMzY1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zNjczLDcgKzM2OTcsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzcy
NiwxMSArMzc1MCwxMSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBj
YXNlIFN3aXRjaFN0cmluZzoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5pbXBsZW1lbnRl
ZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgc3dpdGNoIGtpbmQiKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
UmV0dXJuKCkKQEAgLTM5MTQsNyArMzkzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0
ZShtX25vZGUtPmNoaWxkMSgpKTsKICNlbmRpZgogICAgIH0KLQorICAgIAogICAgIExWYWx1ZSBk
aWRPdmVyZmxvd1N0YWNrKCkKICAgICB7CiAgICAgICAgIC8vIFRoaXMgZG9lcyBhIHZlcnkgc2lt
cGxlIGxlYWYgZnVuY3Rpb24gYW5hbHlzaXMuIFRoZSBpbnZhcmlhbnQgb2YgRlRMIGNhbGwKQEAg
LTQxODksNyArNDIxMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmRzIik7CiAgICAgfQog
ICAgIAogICAgIHZvaWQgY29tcGFyZUVxT2JqZWN0T3JPdGhlclRvT2JqZWN0KEVkZ2UgbGVmdENo
aWxkLCBFZGdlIHJpZ2h0Q2hpbGQpCkBAIC00NDY4LDcgKzQ0OTIsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5ib29sZWFuLCBmYXN0UmVzdWx0LCBzbG93
UmVzdWx0KTsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CiAgICAgfQpAQCAtNDcxOCw3ICs0NzQyLDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHRl
cm1pbmF0ZShFeGl0S2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKGtpbmQsIG5v
VmFsdWUoKSwgMCwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBzcGVjdWxhdGUoa2luZCwg
bm9WYWx1ZSgpLCBudWxscHRyLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fc3RhdGUu
c2V0SXNWYWxpZChmYWxzZSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdHlwZUNoZWNrKApAQCAt
NDc3NCw3ICs0Nzk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgIH0KIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShlZGdl
KS5tX3R5cGUgJiBTcGVjSW50MzIpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsICEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNJbnQzMikpOwogICAgICAg
ICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwogICAgICAgICByZXR1cm4gbV9vdXQuaW50MzJaZXJv
OwogICAgIH0KQEAgLTQ3ODIsNyArNDgwNyw3IEBAIHByaXZhdGU6CiAgICAgZW51bSBJbnQ1Mktp
bmQgeyBTdHJpY3RJbnQ1MiwgSW50NTIgfTsKICAgICBMVmFsdWUgbG93SW50NTIoRWRnZSBlZGdl
LCBJbnQ1MktpbmQga2luZCkKICAgICB7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKGVkZ2UudXNl
S2luZCgpID09IEludDUyUmVwVXNlKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIGVkZ2UudXNlS2luZCgpID09IEludDUyUmVwVXNlKTsKICAgICAgICAgCiAgICAgICAgIExv
d2VyZWROb2RlVmFsdWUgdmFsdWU7CiAgICAgICAgIApAQCAtNDgwOCw3ICs0ODMzLDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUpOworICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG1fbm9kZSwgIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3R5cGUpOwogICAgICAg
ICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwogICAgICAgICByZXR1cm4gbV9vdXQuaW50NjRaZXJv
OwogICAgIH0KQEAgLTQ4NDQsNyArNDg2OSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU3Ry
aWN0SW50NTI6CiAgICAgICAgICAgICByZXR1cm4gSW50NTI7CiAgICAgICAgIH0KLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgIH0KICAgICAKICAgICBMVmFsdWUgbG93V2hp
Y2hldmVySW50NTIoRWRnZSBlZGdlLCBJbnQ1MktpbmQmIGtpbmQpCkBAIC00ODc0LDcgKzQ4OTks
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFZhbHVlOwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShl
ZGdlKS5tX3R5cGUgJiBTcGVjQ2VsbCkpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1f
bm9kZSwgIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0NlbGwpKTsKICAgICAg
ICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fb3V0LmludFB0clpl
cm87CiAgICAgfQpAQCAtNDk0MywyMCArNDk2OCwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0Jvb2xlYW4pKTsKKyAgICAg
ICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1f
dHlwZSAmIFNwZWNCb29sZWFuKSk7CiAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAg
ICAgICAgIHJldHVybiBtX291dC5ib29sZWFuRmFsc2U7CiAgICAgfQogICAgIAogICAgIExWYWx1
ZSBsb3dEb3VibGUoRWRnZSBlZGdlKQogICAgIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNE
b3VibGUoZWRnZS51c2VLaW5kKCkpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25v
ZGUsIGlzRG91YmxlKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAgIAogICAgICAgICBMb3dlcmVk
Tm9kZVZhbHVlIHZhbHVlID0gbV9kb3VibGVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKICAgICAg
ICAgaWYgKGlzVmFsaWQodmFsdWUpKQogICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnZhbHVlKCk7
Ci0gICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZS5mb3JOb2RlKGVkZ2Up
Lm1fdHlwZSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbV9zdGF0ZS5m
b3JOb2RlKGVkZ2UpLm1fdHlwZSk7CiAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJsZSk7CiAg
ICAgICAgIHJldHVybiBtX291dC5kb3VibGVaZXJvOwogICAgIH0KQEAgLTQ5NjQsOCArNDk4OCw4
IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIGxvd0pTVmFsdWUoRWRnZSBlZGdlLCBPcGVyYW5kU3Bl
Y3VsYXRpb25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgewog
ICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0
aW9uIHx8IGVkZ2UudXNlS2luZCgpID09IFVudHlwZWRVc2UpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVCghaXNEb3VibGUoZWRnZS51c2VLaW5kKCkpKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
ZWRnZS51c2VLaW5kKCkgIT0gSW50NTJSZXBVc2UpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG1fbm9kZSwgIWlzRG91YmxlKGVkZ2UudXNlS2luZCgpKSk7CisgICAgICAgIERGR19BU1NF
UlQobV9ncmFwaCwgbV9ub2RlLCBlZGdlLnVzZUtpbmQoKSAhPSBJbnQ1MlJlcFVzZSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoZWRnZS0+aGFzQ29uc3RhbnQoKSkKICAgICAgICAgICAgIHJldHVy
biBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0
YW50KGVkZ2Uubm9kZSgpKSkpOwpAQCAtNDk4OCw3ICs1MDEyLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25v
ZGUsICJWYWx1ZSBub3QgZGVmaW5lZCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAg
CkBAIC01MjQ2LDggKzUyNzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgc3BlY3VsYXRlTWlz
YyhlZGdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgZGF0YUxvZygiVW5zdXBwb3J0ZWQgc3BlY3VsYXRpb24gdXNlIGtpbmQ6ICIsIGVkZ2UudXNl
S2luZCgpLCAiXG4iKTsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiVW5zdXBwb3J0ZWQgc3Bl
Y3VsYXRpb24gdXNlIGtpbmQiKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTUzMDAsNyAr
NTMyMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJy
YXlNb2RlLmFycmF5Q2xhc3MoKSkgewogICAgICAgICAgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxB
cnJheToKLSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbmV4cGVjdGVkIG9yaWdp
bmFsIGFycmF5Iik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpBcnJheToKQEAgLTUzMjAsNyArNTM0Myw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50OChhcnJheU1vZGUuc2hh
cGVNYXNrKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBo
LCBtX25vZGUsICJDb3JydXB0IGFycmF5IGNsYXNzIik7CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBkZWZhdWx0OgpAQCAtNTQ2Myw3ICs1NDg2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgU3RydWN0dXJlKiBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUgPQogICAgICAgICAgICAgbV9ncmFw
aC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RT
dHJ1Y3R1cmUoKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSku
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2Jq
ZWN0U3RydWN0dXJlKSkpCisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUoZWRnZSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihTdHJ1Y3R1cmVTZXQoc3RyaW5nT2JqZWN0U3RydWN0dXJlKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCkBAIC01NjY3
LDkgKzU2OTAsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiRXhjZXB0aW9uIGNoZWNrIGNvbnRp
bnVhdGlvbiIpKTsKICAgICAgICAgCisgICAgICAgIExWYWx1ZSBleGNlcHRpb24gPSBtX291dC5s
b2FkNjQobV9vdXQuYWJzb2x1dGUodm0oKS5hZGRyZXNzT2ZFeGNlcHRpb24oKSkpOworICAgICAg
ICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubm90WmVybzY0KG1f
b3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZSh2bSgpLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSkpLAot
ICAgICAgICAgICAgcmFyZWx5KG1faGFuZGxlRXhjZXB0aW9ucyksIHVzdWFsbHkoY29udGludWF0
aW9uKSk7CisgICAgICAgICAgICBtX291dC5ub3RaZXJvNjQoZXhjZXB0aW9uKSwgcmFyZWx5KG1f
aGFuZGxlRXhjZXB0aW9ucyksIHVzdWFsbHkoY29udGludWF0aW9uKSk7CiAgICAgICAgIAogICAg
ICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24pOwogICAgIH0KQEAgLTU3NTYsMTAgKzU3
ODAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZh
bGlkYXRlRlRMT1NSRXhpdExpdmVuZXNzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZhaWxhYmxlIGJ1dCBpdCB3YXNuJ3Qu
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZhbGlkYXRl
RlRMT1NSRXhpdExpdmVuZXNzKCkpCisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsIHRvQ1N0cmluZygiRXhwZWN0ZWQgciIsIG9wZXJhbmQsICIgdG8gYmUgYXZh
aWxhYmxlIGJ1dCBpdCB3YXNuJ3QuIikuZGF0YSgpKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIERGRydzIERDRSBwcm92ZWQgdGhhdCB0
aGUgdmFsdWUgaXMgZGVhZCBpbiBieXRlY29kZQogICAgICAgICAgICAgICAgIC8vIGV2ZW4gdGhv
dWdoIHRoZSBieXRlY29kZSBsaXZlbmVzcyBhbmFseXNpcyB0aGlua3MgaXQncyBsaXZlLiBUaGlz
IGlzCkBAIC01ODY0LDggKzU4ODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgZGF0YUxvZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5vZGU6
ICIsIG5vZGUsICJcbiIpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkNhbm5vdCBmaW5k
IHZhbHVlIGZvciBub2RlOiAiLCBub2RlKS5kYXRhKCkpOwogICAgIH0KICAgICAKICAgICBib29s
IHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoT1NSRXhpdCYgZXhpdCwgdW5zaWduZWQgaW5k
ZXgsIE5vZGUqIG5vZGUpCkBAIC01OTQzLDcgKzU5NjQsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQ29ycnVw
dCBpbnQ1MiBraW5kIik7CiAgICAgfQogICAgIHZvaWQgc2V0SlNWYWx1ZShOb2RlKiBub2RlLCBM
VmFsdWUgdmFsdWUpCiAgICAgewpAQCAtNjA3MCw2ICs2MDkxLDI1IEBAIHByaXZhdGU6CiAgICAg
ICAgIHJldHVybiBhZGRyZXNzRm9yKG9wZXJhbmQsIFRhZ09mZnNldCk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgY3Jhc2goQmxvY2tJbmRleCBibG9ja0luZGV4LCB1bnNpZ25lZCBub2RlSW5kZXgp
CisgICAgeworI2lmIEFTU0VSVF9ESVNBQkxFRAorICAgICAgICBtX291dC5jYWxsKG1fb3V0Lm9w
ZXJhdGlvbihmdGxVbnJlYWNoYWJsZSkpOworICAgICAgICBVTlVTRURfUEFSQU0oYmxvY2tJbmRl
eCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShub2RlSW5kZXgpOworI2Vsc2UKKyAgICAgICAgbV9v
dXQuY2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludFRvUHRyKAorICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKGZ0bFVucmVhY2hhYmxlKSwKKyAgICAgICAgICAgICAgICBwb2ludGVy
VHlwZSgKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlKAorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQudm9pZFR5cGUsIG1fb3V0LmludFB0ciwgbV9vdXQuaW50MzIsIG1fb3V0
LmludDMyKSkpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoY29kZUJsb2NrKCkpLCBt
X291dC5jb25zdEludDMyKGJsb2NrSW5kZXgpLAorICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQz
Mihub2RlSW5kZXgpKTsKKyNlbmRpZgorICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAg
IH0KKyAgICAKICAgICBWTSYgdm0oKSB7IHJldHVybiBtX2dyYXBoLm1fdm07IH0KICAgICBDb2Rl
QmxvY2sqIGNvZGVCbG9jaygpIHsgcmV0dXJuIG1fZ3JhcGgubV9jb2RlQmxvY2s7IH0KICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5jcHAJKHJldmlzaW9uIDE2
OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMTM4LDExICsxMzgsNiBAQCB2b2lkIE91dHB1dDo6YnJhbmNoKExWYWx1ZSBjb25k
aXRpb24sIExCCiAgICAgICAgICAgICBjb25zdEludDMyKG5vdFRha2VuV2VpZ2h0LnNjYWxlVG9U
b3RhbCh0b3RhbCkpKSk7CiB9CiAKLXZvaWQgT3V0cHV0OjpjcmFzaE5vblRlcm1pbmFsKCkKLXsK
LSAgICBjYWxsKGludFRvUHRyKGNvbnN0SW50UHRyKGFib3J0KSwgcG9pbnRlclR5cGUoZnVuY3Rp
b25UeXBlKHZvaWRUeXBlKSkpKTsKLX0KLQogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMSwxNCArNDAxLDYgQEAgcHVibGljOgog
ICAgICAgICBjYWxsKHRyYXBJbnRyaW5zaWMoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgY3Jh
c2hOb25UZXJtaW5hbCgpOwotCi0gICAgdm9pZCBjcmFzaCgpCi0gICAgewotICAgICAgICBjcmFz
aE5vblRlcm1pbmFsKCk7Ci0gICAgICAgIHVucmVhY2hhYmxlKCk7Ci0gICAgfQotICAgIAogICAg
IFZhbHVlRnJvbUJsb2NrIGFuY2hvcihMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1
cm4gVmFsdWVGcm9tQmxvY2sodmFsdWUsIG1fYmxvY2spOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE2OTUxNSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAs
NiArMTQwLDcgQEAgdHlwZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcgogdHlw
ZWRlZiBzaXplX3QgSklUX09QRVJBVElPTiAoKlNfSklUT3BlcmF0aW9uX0VPSnNzKShFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTU3RyaW5nKik7CiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFUSU9O
ICgqU19KSVRPcGVyYXRpb25fSikoRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiBTbG93UGF0aFJl
dHVyblR5cGUgSklUX09QRVJBVElPTiAoKlNwcnRfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUq
LCBpbnQzMl90KTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb24p
KCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0UpKEV4ZWNT
dGF0ZSopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FQyko
RXhlY1N0YXRlKiwgSlNDZWxsKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0aW9uX0VDYikoRXhlY1N0YXRlKiwgQ29kZUJsb2NrKik7CkBAIC0xNjcsNiArMTY4LDgg
QEAgdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVndzSikoRXhlY1N0YXRlKiwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWbSkoRXhlY1N0YXRlKiwgVk0q
KTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fSikoRW5jb2Rl
ZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9a
KShpbnQzMl90KTsKIHR5cGVkZWYgY2hhciogSklUX09QRVJBVElPTiAoKlBfSklUT3BlcmF0aW9u
X0UpKEV4ZWNTdGF0ZSopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVy
YXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwogdHlwZWRlZiBjaGFyKiBKSVRfT1BFUkFU
SU9OICgqUF9KSVRPcGVyYXRpb25fRUNsaSkoRXhlY1N0YXRlKiwgQ2FsbExpbmtJbmZvKik7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MTY5NTE1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM1OCw2ICszNTgsMTYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuaXNTdGlsbFZhbGlkKCk7CiAgICAgfQor
ICAgIAorICAgIGJvb2wgZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhaXNEaWN0aW9uYXJ5KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgZGZn
U2hvdWxkV2F0Y2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRmZ1Nob3VsZFdhdGNo
SWZQb3NzaWJsZSgpICYmIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCk7Cisg
ICAgfQogICAgICAgICAKICAgICB2b2lkIGFkZFRyYW5zaXRpb25XYXRjaHBvaW50KFdhdGNocG9p
bnQqIHdhdGNocG9pbnQpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9hcnJheWlmeS10by1zdHJ1Y3R1cmUtY29udHJhZGljdGlvbi5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5aWZ5LXRv
LXN0cnVjdHVyZS1jb250cmFkaWN0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheWlmeS10by1zdHJ1Y3R1cmUtY29udHJhZGljdGlv
bi5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oYXJyYXks
IHYsIHApIHsKKyAgICBhcnJheVswXSA9IDEwOworICAgIGlmIChwKQorICAgICAgICB2ID0gImhl
bGxvIjsKKyAgICBhcnJheVswXSA9IHY7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgYXJyYXkgPSBbNDJdOworICAgIGZv
byhhcnJheSwgNDMsIGZhbHNlKTsKKyAgICBpZiAoYXJyYXlbMF0gIT0gNDMpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIGFycmF5OworfQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXRteWFyZ3VtZW50c2xlbmd0aC1pbmxpbmUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwt
Z2V0bXlhcmd1bWVudHNsZW5ndGgtaW5saW5lLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdGwtZ2V0bXlhcmd1bWVudHNsZW5ndGgtaW5saW5l
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOSBAQAorZnVuY3Rpb24gZm9vKCl7CisgICAg
cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
OyArK2kpIHsKKyAgICB2YXIgciA9IGZvbygxMSwgMTIsIDEzLCAxOCwgMTksIDIwKTsKKyAgICBp
ZiAociAhPSA2KSB0aHJvdyAiRXJyb3I6ICIrcjsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRp
b25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
bXVsdGktcHV0LWJ5LW9mZnNldC1tdWx0aXBsZS10cmFuc2l0aW9ucy5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbXVsdGktcHV0LWJ5LW9mZnNl
dC1tdWx0aXBsZS10cmFuc2l0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBA
CitmdW5jdGlvbiBmb28obykgeworICAgIG8ueCA9IDE7CisgICAgby55ID0gMjsKKyAgICBvLmEg
PSAzOworICAgIG8uYiA9IDQ7CisgICAgby5jID0gNTsKKyAgICBvLmQgPSA2OworICAgIG8uZSA9
IDc7CisgICAgby5mID0gODsKKyAgICBvLmcgPSA5OworICAgIG8uaCA9IDEwOworICAgIG8uaSA9
IDExOworfQorCitub0lubGluZShmb28pOworCitmdW5jdGlvbiBGb28oKSB7CisgICAgZm9vKHRo
aXMpOworfQorCit2YXIgcmVzdWx0ID0gMDsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7
ICsraSkgeworICAgIGZvbyh7Zjo0Mn0pOworICAgIHJlc3VsdCArPSAobmV3IEZvbygpKS54Owor
fQorCitpZiAocmVzdWx0ICE9IDEwMDAwMCkKKyAgICB0aHJvdyAiQmFkIHJlc3VsdDogIiArIHJl
c3VsdDsKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90aHJvdy1m
cm9tLWZ0bC1pbi1sb29wLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwtaW4tbG9vcC5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwtaW4tbG9vcC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACit2YXIgZGlkVGhyb3cgPSBmYWxzZTsK
K3RyeSB7CisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwMDA7ICsraSkgeyB9CisgICAgICAgIHRocm93IDQyOworICAgIH0pKCk7Cit9IGNhdGNoIChl
KSB7CisgICAgaWYgKGUgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIGU7CisgICAgZGlkVGhyb3cgPSB0cnVlOworfQoraWYgKCFkaWRUaHJvdykKKyAgICB0aHJv
dyAiRXJyb3I6IHNob3VsZCBoYXZlIHRocm93biBidXQgZGlkbid0LiI7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93LWZyb20tZnRsLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93
LWZyb20tZnRsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUgQEAKK2Z1bmN0aW9uIGZv
byhwKSB7CisgICAgdmFyIG8gPSB7Zjo0Mn07CisgICAgaWYgKHApCisgICAgICAgIHRocm93IG87
CisgICAgcmV0dXJuIG87Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgbyA9IGZvbyhmYWxzZSk7CisgICAgaWYgKG8uZiAh
PSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgby5mOworfQorCit2
YXIgZGlkVGhyb3cgPSBmYWxzZTsKK3RyeSB7CisgICAgZm9vKHRydWUpOworfSBjYXRjaCAoZSkg
eworICAgIGlmIChlLmYgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCBp
biBjYXRjaDogIiArIG8uZjsKKyAgICBkaWRUaHJvdyA9IHRydWU7Cit9CitpZiAoIWRpZFRocm93
KQorICAgIHRocm93ICJFcnJvcjogc2hvdWxkIGhhdmUgdGhyb3duIGJ1dCBkaWRuJ3QuIjsKSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxNjk1MTUpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE0LTA2LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0gQUkgc2hvdWxkIGJlIGFibGUgdHJhY2sgc3Ry
dWN0dXJlIHNldHMgbGFyZ2VyIHRoYW4gMQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI4MDczCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3dGYvQmFnLmg6CisgICAgICAgIChXVEY6OkJhZzo6Tm9kZTo6
Tm9kZSk6CisgICAgICAgIChXVEY6OkJhZzo6YWRkKToKKwogMjAxNC0wNS0xOSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIERGRyBieXRlY29kZSBw
YXJzZXIgc2hvdWxkIHR1cm4gR2V0QnlJZCB3aXRoIG5vdGhpbmcgYnV0IGEgR2V0dGVyIHN0dWIg
YXMgc3R1ZmYraGFuZGxlQ2FsbCwgYW5kIGhhbmRsZUNhbGwgc2hvdWxkIGJlIGFsbG93ZWQgdG8g
aW5saW5lIGlmIGl0IHdhbnRzIHRvCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CYWcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkocmV2aXNpb24gMTY5NTE1KQorKysgU291cmNl
L1dURi93dGYvQmFnLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDEyIEBAIHByaXZhdGU6
CiAgICAgY2xhc3MgTm9kZSB7CiAgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgTm9k
ZShBcmdzLi4uIGFyZ3MpCisgICAgICAgICAgICA6IG1faXRlbShhcmdzLi4uKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFQgbV9pdGVtOwogICAgICAgICBOb2RlKiBt
X25leHQ7CiAgICAgfTsKQEAgLTUzLDkgKzU5LDEwIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBUKiBhZGQoKQorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3M+Cisg
ICAgVCogYWRkKEFyZ3MuLi4gYXJncykKICAgICB7Ci0gICAgICAgIE5vZGUqIG5ld05vZGUgPSBu
ZXcgTm9kZTsKKyAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ldyBOb2RlKGFyZ3MuLi4pOwogICAg
ICAgICBuZXdOb2RlLT5tX25leHQgPSBtX2hlYWQ7CiAgICAgICAgIG1faGVhZCA9IG5ld05vZGU7
CiAgICAgICAgIHJldHVybiAmbmV3Tm9kZS0+bV9pdGVtOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5
NTE1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTQtMDYtMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBbZnRsb3B0XSBBSSBzaG91bGQgYmUgYWJsZSB0cmFjayBzdHJ1Y3R1cmUgc2V0cyBsYXJn
ZXIgdGhhbiAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjgwNzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1p
ZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpz
L3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1l
bGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2lt
cGxlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1i
eS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5qczogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhp
Yy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanM6IEFkZGVkLgorICAgICAgICAqIGpzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1x
dWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzOiBBZGRlZC4K
KwogMjAxNC0wNS0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IFtmdGxvcHRdIERGRzo6Y2xvYmJlcml6ZSBzaG91bGQgYmUgYmxpbmQgdG8gdGhlIGVmZmVjdHMg
b2YgR0MKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dl
dC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9n
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5
LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24tc2ltcGxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1
cmUtZWxpbWluYXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMt
Y2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
Z2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQt
YnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24tZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnkt
aWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVj
ay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQt
YnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNo
ZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dl
dC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1v
cnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291
cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3Rz
L2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLXNpbXBsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5h
dGlvbi1zaW1wbGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkg
eworICAgIHZhciBvID0ge2E6MX07CisgICAgdmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIg
cmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAg
ICAgICByZXN1bHQgXj0gby5hOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7
CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2st
c3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVs
aW1pbmF0aW9uLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZh
ciBvID0ge2E6MSwgYjoyLCBjOjMsIGQ6NCwgZTo1LCBmOjYsIGc6NywgaDo4LCBpOjksIGo6MTAs
IGs6MTF9OworICAgIHZhciBwID0ge2E6MiwgYjozLCBjOjQsIGQ6NSwgZTo2LCBmOjcsIGc6OCwg
aDo5LCBpOjEwLCBqOjExLCBrOjEyLCBsOjEzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICByZXN1bHQgKz0gby5h
IF4gby5iIF4gby5jIF4gby5kIF4gby5lIF4gby5mIF4gby5nIF4gby5oIF4gby5pIF4gby5qIF4g
by5rOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0
bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gNjUwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRp
b24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
Z2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVu
Y3Rpb24oKSB7CisgICAgdmFyIG8gPSB7YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3
LCBoOjgsIGk6OSwgajoxMCwgazoxMX07CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIg
fCBvLmMgXiBvLmQgJiBvLmUgXiBvLmYgfCBvLmcgXiBvLmggJiBvLmkgXiBvLmogfCBvLms7Cisg
ICAgaWYgKHJlc3VsdCAhPSAxNTAwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRp
b24tc2ltcGxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
c2ltcGxlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1z
aW1wbGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNyBAQAorKGZ1bmN0aW9uKCkgewor
ICAgIHZhciBvID0ge2E6MX07CisgICAgdmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcSA9
IHthOjMsIGI6M307CisgICAgdmFyIHIgPSB7YTo0LCBjOjV9OworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3Vs
dCBePSBvLmE7CisgICAgICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAg
cCA9IHE7CisgICAgICAgIHEgPSByOworICAgICAgICByID0gdG1wOworICAgIH0KKyAgICBpZiAo
cmVzdWx0ICE9IDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKK30pKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>232460</attachid>
            <date>2014-06-03 19:58:27 -0700</date>
            <delta_ts>2014-06-04 11:00:52 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>261853</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4NCBA
QAorMjAxNC0wNi0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEFJIHNob3VsZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0
aGFuIDEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
ODA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBtYWtlcyB0d28gbWFqb3IgY2hhbmdlcyB0byBob3cgQUkgKGFic3RyYWN0IGlu
dGVycHJldGVyKSBwcm92ZXMgdGhhdCBhIHZhbHVlIGhhcworICAgICAgICBzb21lIHN0cnVjdHVy
ZToKKyAgICAgICAgCisgICAgICAgIC0gU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjYW4gbm93IHRy
YWNrIGFuIGFyYml0cmFyeSBudW1iZXIgb2Ygc3RydWN0dXJlcy4gQSBzZXQgd2hvc2UKKyAgICAg
ICAgICBzaXplIGlzIGdyZWF0ZXIgdGhhbiBvbmUgbWVhbnMgdGhhdCB0aGUgdmFsdWUgbWF5IGhh
dmUgYW55IG9mIHRoZSBzdHJ1Y3R1cmVzLCBhbmQgd2UKKyAgICAgICAgICBkb24ndCBrbm93IHdo
aWNoIC0gYnV0IHdlIGRvIGtub3cgdGhhdCBpdCBjYW5ub3QgYmUgYW55IHN0cnVjdHVyZSBub3Qg
aW4gdGhlIHNldC4gVGhlCisgICAgICAgICAgc3RydWN0dXJlIGFic3RyYWN0IHZhbHVlIGNhbiBz
dGlsbCBiZSBUT1AsIHdoaWNoIG1lYW5zIHRoZSBzZXQgb2YgYWxsIHN0cnVjdHVyZXMuIFdlCisg
ICAgICAgICAgYXJ0aWZpY2lhbGx5IGxpbWl0IHRoZSBzZXQgc2l6ZSB0byBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlOjpwb2x5bW9ycGhpc21MaW1pdCB0byBndWFyZAorICAgICAgICAgIG1lbW9yeSBl
eHBsb3Npb24gb24gcGF0aG9sb2dpY2FsIHByb2dyYW1zLiBUaGlzIGxpbWl0IGlzIGJpZyBlbm91
Z2ggdGhhdCBpdCB3b3VsZG4ndAorICAgICAgICAgIGtpY2sgaW4gZm9yIG5vcm1hbCBjb2RlLCBz
aW5jZSB3ZSBoYXZlIG90aGVyIGhldXJpc3RpY3MgdGhhdCBsaW1pdCB0aGUgbnVtYmVyIG9mCisg
ICAgICAgICAgc3RydWN0dXJlcyB0aGF0IHdlIHdvdWxkIGFsbG93IGFuIGlubGluZSBjYWNoZSB0
byBrbm93IGFib3V0LgorICAgICAgICAKKyAgICAgICAgLSBXZSBlYWdlcmx5IHNldCB3YXRjaHBv
aW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMgYW5kIHRoZW4gd2UgYXNzdW1lIHRoYXQK
KyAgICAgICAgICB3YXRjaGFibGUgc3RydWN0dXJlcyBhcmUgYmVpbmcgd2F0Y2hlZCwgYW5kIHRo
YXQgdGhlIHdhdGNocG9pbnQgd2lsbCBqZXR0aXNvbiB0aGUgY29kZS4KKyAgICAgICAgICBUaGlz
IGFsbG93cyB0cmFja2luZyBvZiB3YXRjaGFibGUgc3RydWN0dXJlcyB0byBiZSBmYXIgc2ltcGxl
ciB0aGFuIGJlZm9yZS4gUHJldmlvdXNseSwKKyAgICAgICAgICBhIHN0cnVjdHVyZSBiZWluZyB0
cmFja2VkIGFzICJmdXR1cmUgcG9zc2libGUiIHdhcyBwcmVkaWNhdGVkIG9uIGl0IGJlaW5nIHdh
dGNoYWJsZSBidXQKKyAgICAgICAgICB3ZSBtaWdodCBub3QgYWN0dWFsbHkgd2F0Y2ggaXQuIFRo
aXMgbWFrZXMgYWxnZWJyYSBvdmVyIHNldHMgb2YgZnV0dXJlIHBvc3NpYmxlCisgICAgICAgICAg
c3RydWN0dXJlcyBxdWl0ZSB3ZWlyZC4gQnV0IHdhdGNoaW5nIGFsbCB3YXRjaGFibGUgc3RydWN0
dXJlcyBtZWFucyB0aGF0IHdlIHNpbXBsZSBzYXkKKyAgICAgICAgICB0aGF0IGEgc3RydWN0dXJl
IHNldCBjYW4gYmUgaW4gdGhlIGZvbGxvd2luZyBzdGF0ZXM6IHVuY2xvYmJlcmVkLCB3aGljaCBt
ZWFucyBpdCdzIGp1c3QKKyAgICAgICAgICBhIHNldCBvZiBzdHJ1Y3R1cmVzIGFuZCBpdCBkb2Vz
bid0IG1hdHRlciB3aGF0IGlzIHdhdGNoYWJsZSBvciB3aGF0IGlzbid0IGJlY2F1c2Ugd2UndmUK
KyAgICAgICAgICBwcm92ZW4gdGhhdCB0aGUgdmFsdWUgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBz
dHJ1Y3R1cmVzIHJpZ2h0IG5vdzsgYW5kIGNsb2JiZXJlZCwgd2hpY2gKKyAgICAgICAgICBtZWFu
cyB0aGF0IHdlIGhhdmUgYSBzZXQgb2Ygc3RydWN0dXJlcywgcGx1cyBhbGwgcG9zc2libGUgc3Ry
dWN0dXJlcyB0ZW1wb3JhcmlseSwgd2l0aAorICAgICAgICAgIGludmFsaWRhdGlvbiByZW1vdmlu
ZyB0aGUgInBsdXMgYWxsIHBvc3NpYmxlIHN0cnVjdHVyZXMiLiBDbG9iYmVyaW5nIGEgc2V0IG1l
YW5zIHRoYXQKKyAgICAgICAgICBpZiBhbnkgb2YgaXRzIHN0cnVjdHVyZXMgYXJlIHVud2F0Y2hh
YmxlLCB0aGUgc2V0IGp1c3QgYmVjb21lcyBUT1A7IGJ1dCBpZiBhbGwKKyAgICAgICAgICBzdHJ1
Y3R1cmVzIGluIHRoZSBzZXQgYXJlIHdhdGNoYWJsZSB0aGVuIHdlIGp1c3Qgc2V0IHRoZSBjbG9i
YmVyZWQgYml0IHRvIGFkZCB0aGUgInBsdXMKKyAgICAgICAgICBhbGwgcG9zc2libGUgc3RydWN0
dXJlcyB0ZW1wb3JhcmlseSIgdGhpbmcuIFRoaXMgcHJlY2lzZWx5IHRyYWNrcyB0aGUgZXhhY3Qg
bWVhbmluZyBvZgorICAgICAgICAgIHdhdGNoYWJpbGl0eSBhbmQgaW52YWxpZGF0aW9uIHBvaW50
cy4KKyAgICAgICAgCisgICAgICAgIFNsaWdodCBTdW5TcGlkZXIgc2xvdy1kb3duLCBuZXV0cmFs
IG9uIE9jdGFuZSwgc2xpZ2h0IEFzbUJlbmNoIHNwZWVkLXVwLiBJIGJlbGlldmUgdGhhdAorICAg
ICAgICB3ZSB3aWxsIHVsdGltYXRlbHkgdW5kbyB0aGUgU3VuU3BpZGVyIHNsb3ctZG93biBieSBt
YWtpbmcgZnVydGhlciBpbXByb3ZlbWVudHMgdG8gdGhlIHNldAorICAgICAgICByZXByZXNlbnRh
dGlvbi4gSSBiZWxpZXZlIHRoYXQgT2N0YW5lIHBlcmZyb21hbmNlIHdpbGwgdWx0aW1hdGVseSBp
bXByb3ZlIG9uY2Ugd2UgcmVtb3ZlCisgICAgICAgIHJlbWFpbmluZyBzaW5nbGV0b24gc3BlY2lh
bC1jYXNlcy4gVGhlIHVsdGltYXRlIGdvYWwgb2YgdGhpcyBpcyB0byByZW1vdmUgdGhlIG5lZWQg
dG8KKyAgICAgICAgdHJ5IHF1aXRlIHNvIGRlc3BlcmF0ZWx5IGhhcmQgdG8gbWFrZSBldmVyeXRo
aW5nIG1vbm9tb3JwaGljIGFzIHdlIGRvIGN1cnJlbnRseS4KKworICAgICAgICAqIENNYWtlTGlz
dHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OnJlbW92
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlU2V0Ojpjb3B5RnJvbU91dE9mTGluZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVNldDo6U3RydWN0dXJlU2V0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0
OjpvcGVyYXRvcj0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVTZXQ6OmNvcHlG
cm9tKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTZXQuaDoKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlU2V0OjpTdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmVTZXQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6aXNFbXB0
eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Z2VuZXJpY0ZpbHRlcik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZVNldDo6Q29udGFpbnNPdXRPZkxpbmU6OkNvbnRhaW5zT3V0T2ZMaW5l
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlU2V0OjpDb250YWluc091dE9mTGluZTo6b3BlcmF0
b3IoKSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6Y29weUZyb20pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVTZXQ6OmRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2V0RW1wdHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmVTZXQ6OmdldFJlc2VydmVkRmxhZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVNldDo6c2V0
UmVzZXJ2ZWRGbGFnKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI6OnNldEJ1aWx0SW5Db25zdGFu
dCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmJv
b2xlYW5SZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJz
dHJhY3RTdGF0ZVR5cGU+Ojp2ZXJpZnlFZGdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpjbG9i
YmVyQ2FwdHVyZWRWYXJzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXMp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpvYnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46Om9ic2VydmVUcmFuc2l0aW9ucyk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnNldERp
ZENsb2JiZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZVRyYW5zaXRpb25zKToK
KyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMpOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpzaG91bGRCZUNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpub3Jt
YWxpemVDbGFyaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjaGVja0Nv
bnNpc3RlbmN5KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dh
dGNoZWQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQp
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldEZ1dHVyZVBvc3NpYmxlU3Ry
dWN0dXJlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0VmFsdWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUludmFsaWRhdGlvblBvaW50Rm9yKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpvYnNlcnZlVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbk9ic2VydmVyOjpUcmFuc2l0aW9u
T2JzZXJ2ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OlRyYW5zaXRpb25P
YnNlcnZlcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6
VHJhbnNpdGlvbnNPYnNlcnZlcjo6VHJhbnNpdGlvbnNPYnNlcnZlcik6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNPYnNlcnZlcjo6b3BlcmF0b3IoKSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNIZWFwVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjpzZXRUeXBlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjptZXJnZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Omhhc0Nsb2JiZXJhYmxlU3RhdGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmFzc2VydElzV2F0Y2hlZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b2JzZXJ2ZUluZGV4aW5nVHlwZVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VUb3ApOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmJlc3RQcm92ZW5TdHJ1Y3R1cmUpOiBEZWxldGVk
LgorICAgICAgICAqIGRmZy9ERkdBbGxvY2F0b3IuaDoKKyAgICAgICAgKiBkZmcvREZHQXJndW1l
bnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRz
U2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKToKKyAgICAg
ICAgKiBkZmcvREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OkF0
VGFpbEFic3RyYWN0U3RhdGU6OnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6c2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBdFRhaWxBYnN0cmFjdFN0YXRlOjpzZXRGb3VuZENvbnN0YW50cyk6
CisgICAgICAgIChKU0M6OkRGRzo6QXRUYWlsQWJzdHJhY3RTdGF0ZTo6aGF2ZVN0cnVjdHVyZXMp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OkF0VGFpbEFic3RyYWN0U3RhdGU6OnNldEhh
dmVTdHJ1Y3R1cmVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgICog
ZGZnL0RGR0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHQnJhbmNoRGlyZWN0aW9uLmg6
CisgICAgICAgIChKU0M6OkRGRzo6YnJhbmNoRGlyZWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKToKKyAg
ICAgICAgKiBkZmcvREZHQ0ZBUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNGQVBoYXNl
OjpwZXJmb3JtQmxvY2tDRkEpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmNoZWNrU3RydWN0dXJlRWxpbWluYXRpb24pOgorICAg
ICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVs
aW1pbmF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6cGVyZm9ybU5vZGVDU0Up
OgorICAgICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xv
YmJlcml6ZSk6CisgICAgICAgICogZGZnL0RGR0NvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6c3RhcnRDcmFzaGluZyk6CisgICAgICAgIChKU0M6OkRGRzo6aXNDcmFzaGluZyk6CisgICAg
ICAgICogZGZnL0RGR0NvbW1vbi5oOgorICAgICAgICAqIGRmZy9ERkdDb21tb25EYXRhLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpDb21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVU
cmFuc2l0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgor
ICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToK
KyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdEdldEJ5T2Zmc2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6ZW1pdFB1dEJ5T2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpDb25zdGFudEZvbGRpbmdQaGFzZTo6YWRkU3RydWN0
dXJlVHJhbnNpdGlvbkNoZWNrKToKKyAgICAgICAgKiBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKToK
KyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oOgorICAgICAgICAoSlND
OjpERkc6OkdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZCk6CisgICAgICAgIChK
U0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxpZCk6CisgICAg
ICAgIChKU0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNXYXRjaGVkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6CisgICAgICAg
IChKU0M6OkRGRzo6V2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0OjpXYXRjaHBvaW50
Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Okdl
bmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseSk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6R2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czo6aXNTdGlsbFZhbGlkKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzOjpzaG91bGRB
c3N1bWVNaXhlZFN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpHZW5lcmljRGVz
aXJlZFdhdGNocG9pbnRzOjppc1ZhbGlkT3JNaXhlZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1N0aWxsVmFsaWQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBvaW50czo6c2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdhdGNocG9pbnRzOjppc1ZhbGlk
T3JNaXhlZCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKEpTQzo6
REZHOjpGaXh1cFBoYXNlOjpjYW5PcHRpbWl6ZVN0cmluZ09iamVjdEFjY2Vzcyk6CisgICAgICAg
IChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aW5qZWN0VHlwZUNvbnZlcnNpb25zRm9yRWRnZSk6Cisg
ICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6fkdy
YXBoKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6R3JhcGg6OmR1bXBCbG9ja0hlYWRlcik6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRy
eUdldEZvbGRhYmxlVmlldyk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjphc3NlcnRJc1dhdGNoZWQpOgorICAgICAg
ICAoSlNDOjpERkc6OkdyYXBoOjpoYW5kbGVBc3NlcnRpb25GYWlsdXJlKToKKyAgICAgICAgKiBk
ZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Y29udmVydFRvQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjptYXNxdWVyYWRlc0FzVW5kZWZpbmVkV2F0
Y2hwb2ludElzU3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmFkZFN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRl
OjpiZWdpbkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0
YXRlOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0
ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3Rh
dGU6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVy
Z2UpOgorICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oOgorICAgICAgICAo
SlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzdHJ1Y3R1cmVDbG9iYmVyU3RhdGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzZXRTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjpzZXRG
b3VuZENvbnN0YW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6
OmhhdmVTdHJ1Y3R1cmVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6c2V0SGF2ZVN0cnVjdHVyZXMpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9E
RkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVuZXNz
QW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6Omhhc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
OnRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlVHJhbnNpdGlvbkRhdGE6OlN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpjb252ZXJ0VG9T
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6aGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6Ok5vZGU6OnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6UGxhbjo6Y29tcGlsZUluVGhyZWFkSW1wbCk6CisgICAgICAgICogZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
U2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVUb0V4ZWN1dGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphc3NlcnRJc1dhdGNoZWQp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNsb2JiZXIpOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9ic2VydmVUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZl
VHJhbnNpdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2Up
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdlU2xvdyk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2VOb3RUb3Ap
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyU2xvdyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y29udGFpbnMpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3Vic2V0T2YpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJzZXRPZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3ZlcmxhcHMpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmVxdWFsc1Nsb3cpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQpOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9KToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnRvcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNDbGVhcik6CisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNUb3ApOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzTmVpdGhlckNsZWFyTm9yVG9wKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc0Nsb2JiZXJlZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChK
U0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVj
dHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVj
dHVyZUFic3RyYWN0VmFsdWU6Om9ubHlTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bWFrZVRvcFdoZW5UaGluKToKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzZXRDbG9iYmVyZWQpOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFkZCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkQWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9l
c05vdENvbnRhaW5BbnlPdGhlclRoYW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzQ2xlYXJPclRvcCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bGFzdCk6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c3BlY3VsYXRpb25Gcm9tU3RydWN0
dXJlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6aXNWYWxpZE9mZnNldCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTo6aGFzU2luZ2xldG9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzaW5nbGV0b24pOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXBJbkNvbnRleHQpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXApOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnRvcFZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpERkc6Om1lcmdlKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRl
cm5hbCk6CisgICAgICAgICogZGZnL0RGR1RyYW5zaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpUcmFuc2l0aW9uOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKEpTQzo6REZH
OjpUcmFuc2l0aW9uOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHVHJhbnNpdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpUcmFuc2l0aW9uOjpUcmFuc2l0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZTo6aWRlbnRpZnlSZWR1bmRhbnRTdHJ1Y3R1cmVDaGVja3Mp
OgorICAgICAgICAoSlNDOjpERkc6OlR5cGVDaGVja0hvaXN0aW5nUGhhc2U6OmlkZW50aWZ5UmVk
dW5kYW50QXJyYXlDaGVja3MpOgorICAgICAgICAqIGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVX
YXRjaGluZ1BoYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3Ry
dWN0dXJlV2F0Y2hpbmdQaGFzZTo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6cnVuKToK
KyAgICAgICAgKEpTQzo6REZHOjpXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlOjp0cnlX
YXRjaCk6CisgICAgICAgIChKU0M6OkRGRzo6cGVyZm9ybVdhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nKToKKyAgICAgICAgKiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBkZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZTo6aGFuZGxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlOjpoYW5kbGVFZGdl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6ZnRsVW5yZWFjaGFibGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjcmVhdGVQaGlWYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQmxvY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpj
b21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVV
cHNpbG9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVBoaSk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVEb3VibGVSZXApOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVmFsdWVSZXApOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVmFsdWVUb0ludDMyKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldExvY2FsKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoQWRkT3JTdWIpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhEaXYpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNb2QpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNaW5Pck1heCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aEFicyk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE5lZ2F0ZSk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcnJheWlmeVRvU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVB1dFN0cnVjdHVyZSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeUlkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldE15QXJndW1lbnRzTGVuZ3RoKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldE15QXJndW1lbnRCeVZh
bCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRBcnJheUxl
bmd0aCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVHZXRCeVZh
bCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVQdXRCeVZhbCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcnJheVB1c2gpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJyYXlQb3ApOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmV3QXJyYXkpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmV3QXJyYXlCdWZmZXIpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWxsb2NhdGVQcm9wZXJ0eVN0
b3JhZ2UpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlUmVhbGxv
Y2F0ZVByb3BlcnR5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbXBpbGVUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVNdWx0aUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZU11bHRpUHV0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlQ29tcGFyZUVxKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6Y29tcGlsZUNvbXBhcmVTdHJpY3RFcSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVTd2l0Y2gpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZN
Ojpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Ym9vbGlmeSk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnRlcm1pbmF0ZSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6bG93SW50NTIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpvcHBvc2l0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxv
d0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dCb29sZWFuKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93RG91YmxlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93SlNWYWx1ZSk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmlzQXJyYXlUeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6c3BlY3VsYXRlU3RyaW5nT2JqZWN0Rm9yU3RydWN0dXJlSUQpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjYWxsQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpidWlsZEV4aXRBcmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjphZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6c2V0SW50NTIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9M
TFZNOjpjcmFzaCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVT
dHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZU
TE91dHB1dC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpjcmFzaE5vblRlcm1pbmFs
KTogRGVsZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjpjcmFzaCk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMu
aDoKKyAgICAgICAgKiBqc2MuY3BwOgorICAgICAgICAoV1RGOjpqc2NFeGl0KToKKyAgICAgICAg
KGZ1bmN0aW9uUXVpdCk6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKHByaW50VXNhZ2VTdGF0
ZW1lbnQpOgorICAgICAgICAoQ29tbWFuZExpbmU6OnBhcnNlQXJndW1lbnRzKToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRmZ1Nob3Vs
ZFdhdGNoSWZQb3NzaWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGZnU2hvdWxkV2F0
Y2gpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheWlmeS10by1zdHJ1Y3R1cmUtY29udHJh
ZGljdGlvbi5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9mdGwtZ2V0bXlhcmd1bWVudHNsZW5ndGgtaW5saW5lLmpzOiBBZGRlZC4KKyAgICAgICAgKGZv
byk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL211bHRpLXB1dC1ieS1vZmZzZXQtbXVsdGlwbGUt
dHJhbnNpdGlvbnMuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKEZvbyk6Cisg
ICAgICAgICogdGVzdHMvc3RyZXNzL3Rocm93LWZyb20tZnRsLWluLWxvb3AuanM6IEFkZGVkLgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorCiAyMDE0LTA2LTAzICBNYXR0aGV3IE1pcm1hbiAgPG1taXJtYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtmdGxvcHRdIEFkZGVkIHN5c3RlbSBmb3IgaW5saW5pbmcgbmF0aXZlIGZ1
bmN0aW9ucyB2aWEgdGhlIEZUTC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTkyLDkgKzE5MiwxMSBAQCBzZXQoSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogICAgIGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFz
ZS5jcHAKICAgICBkZmcvREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmNwcAogICAgIGRmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlLmNwcAogICAgIGRmZy9ERkdUaHJlYWREYXRhLmNwcAogICAgIGRmZy9ERkdUaHVua3Mu
Y3BwCiAgICAgZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCisgICAgZGZnL0RG
R1RyYW5zaXRpb24uY3BwCiAgICAgZGZnL0RGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuY3BwCiAg
ICAgZGZnL0RGR1VuaWZpY2F0aW9uUGhhc2UuY3BwCiAgICAgZGZnL0RGR1VzZUtpbmQuY3BwCkBA
IC0yMDUsNiArMjA3LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBkZmcvREZH
VmFyaWFibGVFdmVudC5jcHAKICAgICBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKICAg
ICBkZmcvREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmNwcAorICAgIGRmZy9ERkdX
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAogICAgIGRmZy9ERkdXYXRjaHBvaW50
Q29sbGVjdGlvblBoYXNlLmNwcAogICAgIGRmZy9ERkdXb3JrbGlzdC5jcHAKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywxNSBAQCB1c2luZyBuYW1lc3Bh
Y2UgV1RGOwogCiBuYW1lc3BhY2UgewogCitOT19SRVRVUk5fV0lUSF9WQUxVRSBzdGF0aWMgdm9p
ZCBqc2NFeGl0KGludCBzdGF0dXMpCit7CisgICAgaWYgKERGRzo6aXNDcmFzaGluZygpKSB7Cisg
ICAgICAgIGZvciAoOzspCisgICAgICAgICAgICBwYXVzZSgpOworICAgIH0KKyAgICBleGl0KHN0
YXR1cyk7Cit9CisKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50SGFuZGxlT3duZXI7CiBj
bGFzcyBNYXN1cWVyYWRlcjsKQEAgLTg4NSw3ICs4OTQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGZ1bmN0aW9uVHJhCiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVu
Y3Rpb25RdWl0KEV4ZWNTdGF0ZSopCiB7Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOworICAgIGpz
Y0V4aXQoRVhJVF9TVUNDRVNTKTsKIAogI2lmIENPTVBJTEVSKE1TVkMpICYmIE9TKFdJTkNFKQog
ICAgIC8vIFdpdGhvdXQgdGhpcywgVmlzdWFsIFN0dWRpbyB3aWxsIGNvbXBsYWluIHRoYXQgdGhp
cyBtZXRob2QgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuCkBAIC0xMDEyLDcgKzEwMjEsNyBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgZWNvcmVfc2h1dGRvd24oKTsKICNl
bmRpZgogCi0gICAgcmV0dXJuIHJlczsKKyAgICBqc2NFeGl0KHJlcyk7CiB9CiAKIHN0YXRpYyBi
b29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0
b3I8U2NyaXB0PiYgc2NyaXB0cywgYm9vbCBkdW1wKQpAQCAtMTE1Niw3ICsxMTY1LDcgQEAgc3Rh
dGljIE5PX1JFVFVSTiB2b2lkIHByaW50VXNhZ2VTdGF0ZW1lbgogICAgIGZwcmludGYoc3RkZXJy
LCAiICAtLTxqc2MgVk0gb3B0aW9uPj08dmFsdWU+ICBTZXRzIHRoZSBzcGVjaWZpZWQgSlNDIFZN
IG9wdGlvblxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogCi0gICAgZXhpdChoZWxw
ID8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKKyAgICBqc2NFeGl0KGhlbHAgPyBFWElU
X1NVQ0NFU1MgOiBFWElUX0ZBSUxVUkUpOwogfQogCiB2b2lkIENvbW1hbmRMaW5lOjpwYXJzZUFy
Z3VtZW50cyhpbnQgYXJnYywgY2hhcioqIGFyZ3YpCkBAIC0xMjQ1LDcgKzEyNTQsNyBAQCB2b2lk
IENvbW1hbmRMaW5lOjpwYXJzZUFyZ3VtZW50cyhpbnQgYXJnCiAgICAgaWYgKG5lZWRUb0R1bXBP
cHRpb25zKQogICAgICAgICBKU0M6Ok9wdGlvbnM6OmR1bXBBbGxPcHRpb25zKHN0ZGVycik7CiAg
ICAgaWYgKG5lZWRUb0V4aXQpCi0gICAgICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKKyAgICAgICAg
anNjRXhpdChFWElUX1NVQ0NFU1MpOwogfQogCiBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlz
aW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ0MywxMSArNDQz
LDEzIEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RhdGljRXhlY3V0aW9u
Q291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
ZGZnXERGR1N0b3JlQmFycmllckVsaXNpb25QaGFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxkZmdcREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAiIC8+CisgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVGhyZWFkRGF0YS5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVGh1bmtzLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUb0ZUTERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVHJhbnNpdGlvbi5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVW5pZmljYXRpb25QaGFzZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxkZmdcREZHVXNlS2luZC5jcHAiIC8+CkBA
IC00NTksNiArNDYxLDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWYXJp
YWJsZUV2ZW50U3RyZWFtLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRmZ1xE
RkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cZGZnXERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5n
UGhhc2UuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZGZnXERGR1dvcmtsaXN0
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGRpc2Fzc2VtYmxlclxEaXNhc3Nl
bWJsZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caGVhcFxCbG9ja0FsbG9j
YXRvci5jcHAiIC8+CkBAIC0xMDIwLDExICsxMDIzLDEzIEBACiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxkZmdcREZHU3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdTdHJ1Y3R1cmVDbG9iYmVyU3Rh
dGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUaHJlYWREYXRhLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVGh1bmtzLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZH
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1RyYW5zaXRpb24uaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVW5pZmljYXRpb25QaGFzZS5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1VzZUtpbmQuaCIgLz4KQEAgLTEwMzcsNiAr
MTA0Miw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1ZhcmlhZGlj
RnVuY3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGRmZ1xERkdWaXJ0dWFs
UmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGRmZ1xERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxkZmdcREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZGZnXERGR1dvcmtsaXN0LmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxkaXNhc3NlbWJsZXJcRGlzYXNzZW1ibGVyLmgiIC8+CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTI3OSw2ICsyNzksNyBAQAogCQkwRjRDRUQ1RjE4Q0VBN0FCMDA4
MDJGRTAgLyogUG9seW1vcnBoaWNHZXRCeUlkTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0Q0VENUQxOENFQTdBQjAwODAyRkUwIC8qIFBvbHlt
b3JwaGljR2V0QnlJZExpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0
aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4
ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEY0RjI5RTAxOEI2QUQx
QzAwNTdCQzE1IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRGMjlERTE4QjZB
RDFDMDA1N0JDMTUgLyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjUwQUYz
QzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjUwQUYzQjE5M0U4QjM5MDA2
NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NTQxQjExNjEzQzFGQjAwQ0UzRTI1IC8q
IFNwZWNpYWxQb2ludGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAg
Ki87IH07CiAJCTBGNTU0MUIyMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1NTQxQjAxNjEz
QzFGQjAwQ0UzRTI1IC8qIFNwZWNpYWxQb2ludGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY1NTk4OTgxN0M4NkM1ODAwQTFFNTQzIC8qIFRv
TmF0aXZlRnJvbVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjU1OTg5NzE3Qzg2QzU2MDBBMUU1NDMgLyogVG9OYXRpdmVGcm9tVmFsdWUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzUzLDYg
KzM1NCw3IEBACiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Q
cm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGODM2NEI3MTY0
QjBDMTEwMDUzMzI5QSAvKiBERkdCcmFuY2hEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODM2NEI1MTY0QjBDMEUwMDUzMzI5QSAvKiBE
RkdCcmFuY2hEaXJlY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODg1RTEw
MTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFGNCAv
KiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODkzQkRBMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLzsgfTsKIAkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1
IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4RjJCOTMxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuY3BwICovOyB9OwogCQkw
RjhGMkI5NjE3MkUwNEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZU
TExpbmsuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjhGMkI5OTE3MkYwNEZGMDA3REJEQTUgLyogREZHRGVzaXJlZElkZW50aWZpZXJzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjk3MTcy
RjA0RkQwMDdEQkRBNSAvKiBERkdEZXNpcmVkSWRlbnRpZmllcnMuY3BwICovOyB9OwpAQCAtNDkz
LDYgKzQ5NSw4IEBACiAJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFE
RDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovOyB9OwogCQkwRkNFRkFFMDE4
MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQURFMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2Nh
dGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkQyQzkyMzE2RDAxRUU5MDBD
NzgwM0YgLyogU3RydWN0dXJlSW5saW5lcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGRDJENEZFMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLzsgfTsKKwkJMEZEMkQ0RkYxOTJGRUU1
ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDJENEZEMTkyRkVFNTgw
MEExNzhCRiAvKiBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZEM0M4MjYxNDExNUQ0
MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkQzQzgyMDE0MTE1Q0Y4MDBGRDgxQ0IgLyogREZHRHJpdmVyLmNw
cCAqLzsgfTsKIAkJMEZEM0M4MjgxNDExNUQ0RjAwRkQ4MUNCIC8qIERGR0RyaXZlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZEM0M4MjIxNDExNUQw
RTAwRkQ4MUNCIC8qIERGR0RyaXZlci5oICovOyB9OwogCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNF
NzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkQ4MUFDRjE1NEZCNEVCMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5j
cHAgKi87IH07CkBAIC01MjYsNiArNTMwLDggQEAKIAkJMEZEREJGQjYxNjY2RUVEQTAwQzU1RkVG
IC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRERCRkIzMTY2NkVFRDUwMEM1NUZFRiAvKiBERkdWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTIyOEVCMTQzNkFC
MjMwMDE5NkM0OCAvKiBPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZFMjI4RUUxNDM2QUIyQzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFMjI4RUEx
NDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuY3BwICovOyB9OworCQkwRkU3MjExRDE5M0I5QzU5
MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNp
dGlvbi5jcHAgKi87IH07CisJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU3
MjExQzE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRTg1MzRCMTcyM0NEQTUwMEI2MThG
NSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFODUzNDkxNzIzQ0RBNTAwQjYxOEY1IC8qIERGR0Rlc2ly
ZWRXYXRjaHBvaW50cy5jcHAgKi87IH07CiAJCTBGRTg1MzRDMTcyM0NEQTUwMEI2MThGNSAvKiBE
RkdEZXNpcmVkV2F0Y2hwb2ludHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hw
b2ludHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRkU5NUY3OTE4QjU2OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFOTVGNzcxOEI1Njk0NzAw
QjUzMUZCIC8qIEZUTERhdGFTZWN0aW9uLmNwcCAqLzsgfTsKQEAgLTIxMzEsNiArMjEzNyw3IEBA
CiAJCTBGNENFRDVEMThDRUE3QUIwMDgwMkZFMCAvKiBQb2x5bW9ycGhpY0dldEJ5SWRMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvbHltb3JwaGljR2V0QnlJZExpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RjI5REQxOEI2QUQxQzAwNTdCQzE1
IC8qIERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1hdGlvblBoYXNlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRp
b25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEYyOURFMThCNkFE
MUMwMDU3QkMxNSAvKiBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVzdGltYXRpb25QaGFzZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdGF0aWNFeGVjdXRpb25Db3VudEVz
dGltYXRpb25QaGFzZS5oOyBwYXRoID0gZGZnL0RGR1N0YXRpY0V4ZWN1dGlvbkNvdW50RXN0aW1h
dGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNTBBRjNCMTkzRThC
MzkwMDY3NEVFOCAvKiBERkdTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHBhdGggPSBkZmcv
REZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNTU0MUFGMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFsUG9pbnRlci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGVjaWFsUG9pbnRlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNTU0MUIwMTYxM0MxRkIwMENFM0UyNSAvKiBTcGVjaWFs
UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcGVjaWFsUG9pbnRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjU1OTg5NzE3Qzg2QzU2MDBBMUU1
NDMgLyogVG9OYXRpdmVGcm9tVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVG9OYXRpdmVGcm9tVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyMDMsNiArMjIxMCw3IEBACiAJ
CTBGODMzNUI1MTYzOUMxRTMwMDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4MzY0QjUxNjRCMEMwRTAwNTMzMjlBIC8q
IERGR0JyYW5jaERpcmVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdCcmFuY2hEaXJlY3Rpb24uaDsgcGF0aCA9IGRmZy9ERkdCcmFuY2hEaXJlY3Rpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4ODVFMTAxODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5
dGVjb2RlVXNlRGVmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2Rl
VXNlRGVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODkzQkRBMTkzNkUyM0Mw
MDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOyBwYXRo
ID0gZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjhGMkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGVExMaW5rLmNwcDsgcGF0aCA9IGZ0bC9GVExMaW5rLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExp
bmsuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTGluay5oOyBwYXRoID0gZnRsL0ZUTExpbmsuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4RjJCOTcxNzJGMDRGRDAwN0RCREE1IC8qIERG
R0Rlc2lyZWRJZGVudGlmaWVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkSWRl
bnRpZmllcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Rlc2lyZWRJZGVudGlmaWVycy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzU1LDYgKzIzNjMsOCBAQAogCQkwRkNFRkFERDE4
MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRlRMTG9jYXRpb24uY3BwOyBwYXRoID0gZnRsL0ZUTExvY2F0aW9uLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDRUZBREUxODA3MzhDMDAwNDcyQ0U0
IC8qIEZUTExvY2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExv
Y2F0aW9uLmg7IHBhdGggPSBmdGwvRlRMTG9jYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZEMkM5MjMxNkQwMUVFOTAwQzc4MDNGIC8qIFN0cnVjdHVyZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3RydWN0dXJlSW5saW5lcy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkQyRDRGQzE5MkZFRTU4MDBBMTc4QkYgLyogREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcDsg
cGF0aCA9IGRmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZEMkQ0RkQxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oOyBwYXRoID0gZGZn
L0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZEM0M4MjAxNDExNUNGODAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEcml2ZXIuY3BwOyBwYXRoID0g
ZGZnL0RGR0RyaXZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRDNDODIy
MTQxMTVEMEUwMEZEODFDQiAvKiBERkdEcml2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHRHJpdmVyLmg7IHBhdGggPSBkZmcvREZHRHJpdmVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRDU2NTIyMTZBQjc4MEEwMDE5NzY1MyAvKiBERkdCYXNpY0Js
b2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Js
b2NrSW5saW5lcy5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMzkwLDYgKzI0MDAsOCBAQAogCQkwRkREQkZCMzE2NjZF
RUQ1MDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmg7IHBhdGggPSBk
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkUyMjhFQTE0MzZBQjIzMDAxOTZDNDggLyogT3B0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPcHRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFMjI4RUIxNDM2QUIyMzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkU3MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdUcmFuc2l0aW9uLmNwcDsg
cGF0aCA9IGRmZy9ERkdUcmFuc2l0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFNzIxMUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVHJhbnNpdGlvbi5oOyBwYXRoID0gZGZnL0RGR1Ry
YW5zaXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFODUzNDkxNzIzQ0RB
NTAwQjYxOEY1IC8qIERGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwOyBwYXRoID0gZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGRTg1MzRBMTcyM0NEQTUwMEI2MThGNSAvKiBERkdEZXNpcmVkV2F0Y2hwb2ludHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHBh
dGggPSBkZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRTk1Rjc3MThCNTY5NDcwMEI1MzFGQiAvKiBGVExEYXRhU2VjdGlvbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExEYXRhU2VjdGlvbi5jcHA7IHBh
dGggPSBmdGwvRlRMRGF0YVNlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNDg1Myw3ICs0ODY1LDkgQEAKIAkJCQkyQUNDRjNERDE4NUZFMjZCMDA4M0UyQUQgLyogREZH
U3RvcmVCYXJyaWVyRWxpc2lvblBoYXNlLmggKi8sCiAJCQkJMEZDMjBDQjMxODUyRTJDNjAwQzlF
OTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwICovLAogCQkJCTBGQzIwQ0I0MTg1
MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmggKi8sCisJCQkJMEY4
OTNCREExOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwICov
LAogCQkJCTBGNjM5NDc2MTVEQ0UzNDcwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlLmggKi8sCisJCQkJMEY1MEFGM0IxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNs
b2JiZXJTdGF0ZS5oICovLAogCQkJCTBGMkZDQ0Y3MThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJl
YWREYXRhLmNwcCAqLywKIAkJCQkwRjJGQ0NGODE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFk
RGF0YS5oICovLAogCQkJCTBGQzA5NzlGMTQ2QjI4QzcwMENGMjQ0MiAvKiBERkdUaHVua3MuY3Bw
ICovLApAQCAtNDg2NCw2ICs0ODc4LDggQEAKIAkJCQkwRkQ4QTMyMjE3RDUxRjU3MDBDQTJDNDAg
LyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKIAkJCQkwRkQ4QTMy
MzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgKi8sCiAJCQkJMEZEOEEzMjQxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCAqLywKKwkJCQkwRkU3
MjExQjE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNpdGlvbi5jcHAgKi8sCisJCQkJMEZFNzIx
MUMxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCAqLywKIAkJCQkwRjYzOTQzQzE1
Qzc1RjE0MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgKi8sCiAJCQkJ
MEY2Mzk0M0QxNUM3NUYxNDAwNkE1OTdDIC8qIERGR1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCAq
LywKIAkJCQkwRkJFMEY2RjE2QzFEQjAxMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5j
cHAgKi8sCkBAIC00ODg1LDYgKzQ5MDEsOCBAQAogCQkJCTBGMkJEQzQzMTUyMjgwMTcwMENEODkx
MCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggKi8sCiAJCQkJMEZGRkM5NTMxNEVGOTA5NTAw
QzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5jcHAgKi8sCiAJCQkJ
MEZGRkM5NTQxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25Q
aGFzZS5oICovLAorCQkJCTBGRDJENEZDMTkyRkVFNTgwMEExNzhCRiAvKiBERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcCAqLywKKwkJCQkwRkQyRDRGRDE5MkZFRTU4MDBBMTc4
QkYgLyogREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5oICovLAogCQkJCTBGQzk3
RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCAq
LywKIAkJCQkwRkM5N0YzQzE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZS5oICovLAogCQkJCTBGREIyQ0U1MTc0ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlz
dC5jcHAgKi8sCkBAIC01ODIzLDYgKzU4NDEsNyBAQAogCQkJCTBGNDg1MzI4MTg3REZERUMwMDgz
QjY4NyAvKiBGVExBdmFpbGFibGVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQTBB
MEExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENhcGFiaWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFQTBBMjMxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENvbW1vblZhbHVlcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZEMkQ0RkYxOTJGRUU1ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVj
dHVyZVdhdGNoaW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTBDMTcwNTEzREIw
MEJCNzIyQyAvKiBGVExDb21waWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU5NUY3QTE4QjU2
OTQ3MDBCNTMxRkIgLyogRlRMRGF0YVNlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQzky
MkJDMThBMTYxODIwMDNDRTBGQiAvKiBGVExEV0FSRkRlYnVnTGluZUluZm8uaCBpbiBIZWFkZXJz
ICovLApAQCAtNTg2NSw2ICs1ODg0LDcgQEAKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcg
LyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyMzVCRTQxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3
M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVk
VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyMzIsNiArNjI1Miw3IEBACiAJCQkJMEY2QjFD
QkExODYxMjQ0QzAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2QjFDQkUxODYxMjQ2QTAwODQ1RDk3IC8qIFJlZ2lzdGVyUHJlc2VydmF0
aW9uV3JhcHBlckdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMzE0MTIxODE0NTU5
MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjUwQUYzQzE5
M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTdEMjNFRTE4OTFCNTU0MDAzMUM3RkEgLyogUmVndWxhckV4cHJlc3Npb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNw
ZWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNzA0OSw2ICs3MDcwLDcgQEAKIAkJCQkwRkYwRjE5
OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTc2N0I1QjUxN0EwQjk2NTAwNjNEOTQwIC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAv
KiBERkdNaW5pZmllZE5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZEMkQ0RkUxOTJGRUU1
ODAwQTE3OEJGIC8qIERGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTczNzgxMEQxNzk5RUEyRTAwODE3NTMzIC8qIERGR05hdHVyYWxMb29w
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZH
Tm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5NTJDMDBCOUEyRDkgLyog
REZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzA3Nyw2ICs3MDk5LDcgQEAKIAkJ
CQkwRkMyMENCOTE4NTU2QTM1MDBDOUU5NTQgLyogREZHU1NBTG93ZXJpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjlGQjRGNDE3RkNCOTE3MDBDQjY3RjggLyogREZHU3RhY2tMYXlv
dXRQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjRGMjlERjE4QjZBRDFDMDA1N0JDMTUg
LyogREZHU3RhdGljRXhlY3V0aW9uQ291bnRFc3RpbWF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFNzIxMUQxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMkFDQ0YzREUxODVGRTI2QjAwODNFMkFEIC8qIERGR1N0b3JlQmFy
cmllckVsaXNpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMyMENCNTE4NTJFMkM2
MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTcyNjQsNiArNzI4Nyw3IEBACiAJCQkJOTVGNkU2OTUwRTVCNUY5NzAwOTFF
ODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMTg0RTFB
MTdCRURCRDMwMDdDQjYzQSAvKiBKU1Byb21pc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0Mx
ODRFMjIxN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDMDA4Q0RBMTg3MTI0QkIwMDk1NUMy
NCAvKiBKU1Byb21pc2VEZWZlcnJlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3QzAwOENEMjE4
NkY4QTkzMDA5NTVDMjQgLyogSlNQcm9taXNlRnVuY3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTdDMTg0RTFFMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21pc2VQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0
dXJlU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU2V0LmNwcAkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDI0ICsz
MCwxMCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotU3RydWN0dXJlU2V0OjpTdHJ1Y3R1cmVTZXQo
Y29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKLXsKLSAgICBjb3B5RnJvbShvdGhlcik7Ci19Ci0K
LVN0cnVjdHVyZVNldCYgU3RydWN0dXJlU2V0OjpvcGVyYXRvcj0oY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikKLXsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhp
czsKLSAgICBkZWxldGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKLSAgICBjb3B5RnJvbShv
dGhlcik7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCiB2b2lkIFN0cnVjdHVyZVNldDo6Y2xlYXIo
KQogewogICAgIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOwotICAgIHNldCgwLCB0
cnVlKTsKKyAgICBzZXRFbXB0eSgpOwogfQogCiBib29sIFN0cnVjdHVyZVNldDo6YWRkKFN0cnVj
dHVyZSogc3RydWN0dXJlKQpAQCAtNzUsNyArNjEsNyBAQCBib29sIFN0cnVjdHVyZVNldDo6cmVt
b3ZlKFN0cnVjdHVyZSogc3RyCiB7CiAgICAgaWYgKGlzVGhpbigpKSB7CiAgICAgICAgIGlmIChz
aW5nbGVTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIHNldCgwLCB0cnVl
KTsKKyAgICAgICAgICAgIHNldEVtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC04OCw3ICs3NCw3IEBAIGJvb2wgU3Ry
dWN0dXJlU2V0OjpyZW1vdmUoU3RydWN0dXJlKiBzdHIKICAgICAgICAgbGlzdC0+bGlzdCgpW2ld
ID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwogICAgICAgICBpZiAoIWxpc3QtPm1f
bGVuZ3RoKSB7CiAgICAgICAgICAgICBPdXRPZkxpbmVMaXN0OjpkZXN0cm95KGxpc3QpOwotICAg
ICAgICAgICAgc2V0KDAsIHRydWUpOworICAgICAgICAgICAgc2V0RW1wdHkoKTsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNDQsMjMgKzEzMCw4IEBAIHZvaWQg
U3RydWN0dXJlU2V0OjpmaWx0ZXIoY29uc3QgU3RydWN0dXIKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICAKLSAgICBpZiAoaXNUaGluKCkpIHsKLSAgICAgICAgaWYgKCFzaW5nbGVTdHJ1Y3R1
cmUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zT3V0
T2ZMaW5lKHNpbmdsZVN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Y2xlYXIoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBPdXRPZkxpbmVMaXN0
KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
aXN0LT5tX2xlbmd0aDsgKytpKSB7Ci0gICAgICAgIGlmIChvdGhlci5jb250YWluc091dE9mTGlu
ZShsaXN0LT5saXN0KClbaV0pKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGxpc3Qt
Pmxpc3QoKVtpLS1dID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOwotICAgIH0KLSAg
ICBpZiAoIWxpc3QtPm1fbGVuZ3RoKQotICAgICAgICBjbGVhcigpOworICAgIENvbnRhaW5zT3V0
T2ZMaW5lIGNvbnRhaW5zT3V0T2ZMaW5lKG90aGVyKTsKKyAgICBnZW5lcmljRmlsdGVyKGNvbnRh
aW5zT3V0T2ZMaW5lKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVTZXQ6OmV4Y2x1ZGUoY29uc3QgU3Ry
dWN0dXJlU2V0JiBvdGhlcikKQEAgLTMyMSwxMyArMjkyLDkgQEAgYm9vbCBTdHJ1Y3R1cmVTZXQ6
OmNvbnRhaW5zT3V0T2ZMaW5lKFN0cgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTdHJ1
Y3R1cmVTZXQ6OmNvcHlGcm9tKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit2b2lkIFN0cnVj
dHVyZVNldDo6Y29weUZyb21PdXRPZkxpbmUoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKIHsK
LSAgICBpZiAob3RoZXIuaXNUaGluKCkpIHsKLSAgICAgICAgbV9wb2ludGVyID0gb3RoZXIubV9w
b2ludGVyOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAorICAgIEFTU0VSVCghb3RoZXIu
aXNUaGluKCkgJiYgb3RoZXIubV9wb2ludGVyICE9IHJlc2VydmVkVmFsdWUpOwogICAgIE91dE9m
TGluZUxpc3QqIG90aGVyTGlzdCA9IG90aGVyLnN0cnVjdHVyZUxpc3QoKTsKICAgICBPdXRPZkxp
bmVMaXN0KiBteUxpc3QgPSBPdXRPZkxpbmVMaXN0OjpjcmVhdGUob3RoZXJMaXN0LT5tX2xlbmd0
aCk7CiAgICAgbXlMaXN0LT5tX2xlbmd0aCA9IG90aGVyTGlzdC0+bV9sZW5ndGg7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVNldC5oCShyZXZpc2lv
biAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDExICszMywxNSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorbmFtZXNwYWNlIERGRyB7CitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworfQorCiBj
bGFzcyBTdHJ1Y3R1cmVTZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpCiAgICAgewot
ICAgICAgICBzZXQoMCwgdHJ1ZSk7CisgICAgICAgIHNldEVtcHR5KCk7CiAgICAgfQogICAgIAog
ICAgIFN0cnVjdHVyZVNldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTQ1LDggKzQ5LDE5IEBA
IHB1YmxpYzoKICAgICAgICAgc2V0KHN0cnVjdHVyZSk7CiAgICAgfQogICAgIAotICAgIFN0cnVj
dHVyZVNldChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKLSAgICBTdHJ1Y3R1cmVTZXQmIG9w
ZXJhdG9yPShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKKyAgICBBTFdBWVNfSU5MSU5FIFN0
cnVjdHVyZVNldChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgY29w
eUZyb20ob3RoZXIpOworICAgIH0KKyAgICAKKyAgICBBTFdBWVNfSU5MSU5FIFN0cnVjdHVyZVNl
dCYgb3BlcmF0b3I9KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIGRl
bGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpOworICAgICAgICBjb3B5RnJvbShvdGhlcik7
CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CiAgICAgCiAgICAgflN0cnVjdHVyZVNldCgp
CiAgICAgewpAQCAtNjcsNyArODIsMTAgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaXNUaGluKCkgJiYgIXNpbmdsZVN0cnVj
dHVyZSgpOworICAgICAgICBib29sIHJlc3VsdCA9IGlzVGhpbigpICYmICFzaW5nbGVTdHJ1Y3R1
cmUoKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIEFTU0VSVChtX3BvaW50ZXIg
IT0gcmVzZXJ2ZWRWYWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIAog
ICAgIGJvb2wgYWRkKFN0cnVjdHVyZSopOwpAQCAtNzgsNiArOTYsMjggQEAgcHVibGljOgogICAg
IHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOwogICAgIHZvaWQgZXhjbHVkZShjb25z
dCBTdHJ1Y3R1cmVTZXQmKTsKICAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZ2VuZXJpY0ZpbHRlcihGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
aWYgKGlzVGhpbigpKSB7CisgICAgICAgICAgICBpZiAoIXNpbmdsZVN0cnVjdHVyZSgpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGlmIChmdW5jdG9yKHNpbmdsZVN0cnVj
dHVyZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICBjbGVhcigpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBPdXRPZkxp
bmVMaXN0KiBsaXN0ID0gc3RydWN0dXJlTGlzdCgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGlzdC0+bV9sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGZ1bmN0b3Io
bGlzdC0+bGlzdCgpW2ldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGxpc3QtPmxpc3QoKVtpLS1dID0gbGlzdC0+bGlzdCgpWy0tbGlzdC0+bV9sZW5ndGhdOworICAg
ICAgICB9CisgICAgICAgIGlmICghbGlzdC0+bV9sZW5ndGgpCisgICAgICAgICAgICBjbGVhcigp
OworICAgIH0KKyAgICAKICAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0Jikg
Y29uc3Q7CiAgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikg
Y29uc3QKICAgICB7CkBAIC0xMjQsMTYgKzE2NCw0NCBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisgICAgCiAgICAgc3RhdGljIGNvbnN0IHVpbnRw
dHJfdCB0aGluRmxhZyA9IDE7CiAgICAgc3RhdGljIGNvbnN0IHVpbnRwdHJfdCByZXNlcnZlZEZs
YWcgPSAyOwotICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgZmxhZ3MgPSAzOworICAgIHN0YXRp
YyBjb25zdCB1aW50cHRyX3QgZmxhZ3MgPSB0aGluRmxhZyB8IHJlc2VydmVkRmxhZzsKICAgICBz
dGF0aWMgY29uc3QgdWludHB0cl90IHJlc2VydmVkVmFsdWUgPSA0OwogCiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGRlZmF1bHRTdGFydGluZ1NpemUgPSA0OwogICAgIAogICAgIGJvb2wgYWRk
T3V0T2ZMaW5lKFN0cnVjdHVyZSopOwogICAgIGJvb2wgY29udGFpbnNPdXRPZkxpbmUoU3RydWN0
dXJlKikgY29uc3Q7Ci0gICAgdm9pZCBjb3B5RnJvbShjb25zdCBTdHJ1Y3R1cmVTZXQmKTsKKyAg
ICAKKyAgICBjbGFzcyBDb250YWluc091dE9mTGluZSB7CisgICAgcHVibGljOgorICAgICAgICBD
b250YWluc091dE9mTGluZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICAgICAgICAgIDog
bV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wg
b3BlcmF0b3IoKShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fc2V0LmNvbnRhaW5zT3V0T2ZMaW5lKHN0cnVjdHVyZSk7CisgICAgICAgIH0KKyAg
ICBwcml2YXRlOgorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIG1fc2V0OworICAgIH07CisK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgY29weUZyb20oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5pc1RoaW4oKSB8fCBvdGhlci5tX3BvaW50ZXIg
PT0gcmVzZXJ2ZWRWYWx1ZSkgeworICAgICAgICAgICAgYm9vbCB2YWx1ZSA9IGdldFJlc2VydmVk
RmxhZygpOworICAgICAgICAgICAgbV9wb2ludGVyID0gb3RoZXIubV9wb2ludGVyOworICAgICAg
ICAgICAgc2V0UmVzZXJ2ZWRGbGFnKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBjb3B5RnJvbU91dE9mTGluZShvdGhlcik7CisgICAgfQorICAgIHZvaWQg
Y29weUZyb21PdXRPZkxpbmUoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcik7CiAgICAgCiAgICAg
Y2xhc3MgT3V0T2ZMaW5lTGlzdCB7CiAgICAgcHVibGljOgpAQCAtMTUyLDkgKzIyMCw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CiAgICAgfTsKICAgICAKLSAgICB2
b2lkIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpCisgICAgQUxXQVlTX0lOTElORSB2
b2lkIGRlbGV0ZVN0cnVjdHVyZUxpc3RJZk5lY2Vzc2FyeSgpCiAgICAgewotICAgICAgICBpZiAo
IWlzVGhpbigpKQorICAgICAgICBpZiAoIWlzVGhpbigpICYmIG1fcG9pbnRlciAhPSByZXNlcnZl
ZFZhbHVlKQogICAgICAgICAgICAgT3V0T2ZMaW5lTGlzdDo6ZGVzdHJveShzdHJ1Y3R1cmVMaXN0
KCkpOwogICAgIH0KICAgICAKQEAgLTE4NSwxMCArMjUzLDIyIEBAIHByaXZhdGU6CiAgICAgewog
ICAgICAgICBzZXQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RydWN0dXJlcyksIGZhbHNlKTsK
ICAgICB9CisgICAgdm9pZCBzZXRFbXB0eSgpCisgICAgeworICAgICAgICBzZXQoMCwgdHJ1ZSk7
CisgICAgfQogICAgIHZvaWQgc2V0KHVpbnRwdHJfdCBwb2ludGVyLCBib29sIHNpbmdsZVN0cnVj
dHVyZSkKICAgICB7CiAgICAgICAgIG1fcG9pbnRlciA9IHBvaW50ZXIgfCAoc2luZ2xlU3RydWN0
dXJlID8gdGhpbkZsYWcgOiAwKSB8IChtX3BvaW50ZXIgJiByZXNlcnZlZEZsYWcpOwogICAgIH0K
KyAgICBib29sIGdldFJlc2VydmVkRmxhZygpIGNvbnN0IHsgcmV0dXJuIG1fcG9pbnRlciAmIHJl
c2VydmVkRmxhZzsgfQorICAgIHZvaWQgc2V0UmVzZXJ2ZWRGbGFnKGJvb2wgdmFsdWUpCisgICAg
eworICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICBtX3BvaW50ZXIgfD0gcmVzZXJ2ZWRG
bGFnOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BvaW50ZXIgJj0gfnJlc2VydmVkRmxh
ZzsKKyAgICB9CiAKICAgICB1aW50cHRyX3QgbV9wb2ludGVyOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlci5oCShyZXZp
c2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDYgKzExNCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIGV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgYm9vbCBl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaXQsIE5vZGUqKTsKICAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xNDgsNyArMTQ5
LDE0IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBjbG9iYmVyV29ybGQoY29uc3QgQ29k
ZU9yaWdpbiYsIHVuc2lnbmVkIGluZGV4SW5CbG9jayk7CiAgICAgdm9pZCBjbG9iYmVyQ2FwdHVy
ZWRWYXJzKGNvbnN0IENvZGVPcmlnaW4mKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yQWxsVmFsdWVzKHVuc2lnbmVkIGluZGV4SW5CbG9jaywgRnVu
Y3RvciYpOworICAgIAogICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgaW5kZXhJ
bkJsb2NrKTsKKyAgICB2b2lkIG9ic2VydmVUcmFuc2l0aW9uKHVuc2lnbmVkIGluZGV4SW5CbG9j
aywgU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKTsKKyAgICB2b2lkIG9ic2VydmVUcmFu
c2l0aW9ucyh1bnNpZ25lZCBpbmRleEluQmxvY2ssIGNvbnN0IFRyYW5zaXRpb25WZWN0b3ImKTsK
KyAgICB2b2lkIHNldERpZENsb2JiZXIoKTsKICAgICAKICAgICBlbnVtIEJvb2xlYW5SZXN1bHQg
ewogICAgICAgICBVbmtub3duQm9vbGVhblJlc3VsdCwKQEAgLTE2MCw3ICsxNjgsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0QnVpbHRJbkNvbnN0YW50KE5vZGUqIG5vZGUsIEpTVmFsdWUgdmFs
dWUpCiAgICAgewogICAgICAgICBBYnN0cmFjdFZhbHVlJiBhYnN0cmFjdFZhbHVlID0gZm9yTm9k
ZShub2RlKTsKLSAgICAgICAgYWJzdHJhY3RWYWx1ZS5zZXQobV9ncmFwaCwgdmFsdWUpOworICAg
ICAgICBhYnN0cmFjdFZhbHVlLnNldChtX2dyYXBoLCB2YWx1ZSwgbV9zdGF0ZS5zdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUoKSk7CiAgICAgICAgIGFic3RyYWN0VmFsdWUuZml4VHlwZUZvclJlcHJlc2Vu
dGF0aW9uKG5vZGUpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlz
aW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDE3IEBAIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjoKICAgICB9CiAKICAgICAvLyBOZXh0
IGNoZWNrIGlmIHdlIGNhbiBmb2xkIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMg
YW4gb2JqZWN0IG9yIHN0cmluZyBhbmQgZG9lcyBub3QgZXF1YWwgdW5kZWZpbmVkLgotICAgIGlm
IChpc0NlbGxTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpCi0gICAgICAgICYmIHZhbHVlLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCk7Ci0g
ICAgICAgIGlmICghc3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkKLSAgICAgICAgICAgICYm
IHN0cnVjdHVyZS0+dHlwZUluZm8oKS50eXBlKCkgIT0gU3RyaW5nVHlwZSkKKyAgICBpZiAoaXND
ZWxsU3BlY3VsYXRpb24odmFsdWUubV90eXBlKSAmJiAhdmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3Ao
KSkgeworICAgICAgICBib29sIGFsbFRydWUgPSB0cnVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSB2YWx1ZS5tX3N0cnVjdHVyZS5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVbaV07CisgICAgICAgICAgICBpZiAo
c3RydWN0dXJlLT5tYXNxdWVyYWRlc0FzVW5kZWZpbmVkKG1fY29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSkKKyAgICAgICAgICAgICAgICB8fCBzdHJ1Y3R1
cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IFN0cmluZ1R5cGUpIHsKKyAgICAgICAgICAgICAgICBh
bGxUcnVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGFsbFRydWUpCiAgICAgICAgICAgICByZXR1cm4gRGVmaW5p
dGVseVRydWU7CiAgICAgfQogICAgIApAQCAtMTA1LDkgKzExMSwxMiBAQCB2b2lkIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3Ry
YWN0U3RhdGVUeXBlPgotdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBl
Pjo6dmVyaWZ5RWRnZShOb2RlKiwgRWRnZSBlZGdlKQordm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6dmVyaWZ5RWRnZShOb2RlKiBub2RlLCBFZGdlIGVkZ2UpCiB7
Ci0gICAgUkVMRUFTRV9BU1NFUlQoIShmb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIH50eXBlRmlsdGVy
Rm9yKGVkZ2UudXNlS2luZCgpKSkpOworICAgIGlmICghKGZvck5vZGUoZWRnZSkubV90eXBlICYg
fnR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCB0b0NTdHJpbmcoIkVkZ2UgdmVyaWZpY2F0aW9u
IGVycm9yOiAiLCBub2RlLCAiLT4iLCBlZGdlLCAiIHdhcyBleHBlY3RlZCB0byBoYXZlIHR5cGUg
IiwgU3BlY3VsYXRpb25EdW1wKHR5cGVGaWx0ZXJGb3IoZWRnZS51c2VLaW5kKCkpKSwgIiBidXQg
aGFzIHR5cGUgIiwgU3BlY3VsYXRpb25EdW1wKGZvck5vZGUoZWRnZSkubV90eXBlKSkuZGF0YSgp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+CkBAIC0xMjU1LDcg
KzEyNjQsNiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KAogICAgICAgICAgICAgbV9ncmFwaCwKICAgICAgICAgICAg
IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFycmF5U3Ry
dWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihub2RlLT5pbmRleGluZ1R5cGUo
KSkpOwotICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKQEAgLTEyNjMsMTMgKzEy
NzEsMTEgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICBmb3JOb2RlKG5vZGUpLnNldCgKICAgICAgICAgICAgIG1fZ3JhcGgsCiAgICAgICAgICAgICBt
X2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hcnJheVN0cnVj
dHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24obm9kZS0+aW5kZXhpbmdUeXBlKCkp
KTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJl
YWs7CiAKICAgICBjYXNlIE5ld0FycmF5V2l0aFNpemU6CiAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjQXJyYXkpOwotICAg
ICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgY2FzZSBOZXdUeXBlZEFycmF5OgpAQCAtMTI4NywxMiArMTI5MywxMCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBtX2dy
YXBoLAogICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKS0+dHlwZWRBcnJheVN0cnVjdHVyZSgKICAgICAgICAgICAgICAgICBub2RlLT50eXBl
ZEFycmF5VHlwZSgpKSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2FzZSBOZXdSZWdleHA6CiAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKLSAgICAgICAgbV9zdGF0
ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAK
ICAgICBjYXNlIFRvVGhpczogewpAQCAtMTMyMCwxMyArMTMyNCwxMSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAg
IEFTU0VSVChub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1f
Z3JhcGgsIG5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0
dXJlcyh0cnVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlQWN0
aXZhdGlvbjoKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQoCiAgICAgICAgICAgICBtX2dyYXBo
LCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmFj
dGl2YXRpb25TdHJ1Y3R1cmUoKSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXMo
dHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEZ1bmN0aW9uUmVlbnRy
eVdhdGNocG9pbnQ6CkBAIC0xMzU5LDggKzEzNjEsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIC8vIG9mIEdldE15QXJndW1lbnRzTGVuZ3RoLCBi
ZWNhdXNlIEdldE15QXJndW1lbnRzTGVuZ3RoIGlzIGEgY2xvYmJlcmluZyBvcGVyYXRpb24uCiAg
ICAgICAgIC8vIFdlIHBlcmZvcm0gZnVydGhlciBvcHRpbWl6YXRpb25zIG9uIHRoaXMgbGF0ZXIg
b24uCiAgICAgICAgIGlmIChub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lKSB7
Ci0gICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldCgKLSAgICAgICAgICAgICAgICBtX2dyYXBo
LCBqc051bWJlcihub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVu
dHMuc2l6ZSgpIC0gMSkpOworICAgICAgICAgICAgc2V0Q29uc3RhbnQoCisgICAgICAgICAgICAg
ICAgbm9kZSwganNOdW1iZXIobm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSAtIDEpKTsKKyAgICAgICAgICAgIG1fc3RhdGUuc2V0RGlkQ2xvYmJl
cih0cnVlKTsgLy8gUHJldGVuZCB0aGF0IHdlIGNsb2JiZXJlZCB0byBwcmV2ZW50IGNvbnN0YW50
IGZvbGRpbmcuCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRU
eXBlKFNwZWNJbnQzMik7CiAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoCkBAIC0xNDU2LDcgKzE0
NTksMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKG5v
ZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCkpKSB7Ci0gICAgICAgICAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5iZXN0UHJvdmVuU3RydWN0dXJl
KCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91bGQg
YmUgcmVwbGFjZWQgYnkgZ2l2aW5nIEdldEJ5SWRTdGF0dXMgdGhlIGFiaWxpdHkKKyAgICAgICAg
ICAgIC8vIHRvIGNvbXB1dGUgdGhpbmdzIGJhc2VkIG9uIGEgU3RydWN0dXJlU2V0LCBhbmQgdGhl
biB0byBmYWN0b3IgQnl0ZUNvZGVQYXJzZXIncworICAgICAgICAgICAgLy8gYWJpbGl0eSB0byBn
ZW5lcmF0ZSBjb2RlIGJhc2VkIG9uIGEgR2V0QnlJZFN0YXR1cyBvdXQgb2YgQnl0ZUNvZGVQYXJz
ZXIgc28gdGhhdAorICAgICAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBp
dC4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzMyMjkKKyAgICAgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAg
ICAgICAgIEdldEJ5SWRTdGF0dXMgc3RhdHVzID0gR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigK
ICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZtLCBzdHJ1Y3R1cmUsCiAgICAgICAgICAg
ICAgICAgICAgIG1fZ3JhcGguaWRlbnRpZmllcnMoKVtub2RlLT5pZGVudGlmaWVyTnVtYmVyKCld
KTsKQEAgLTE0NjYsMTQgKzE0NzQsMTcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhdHVzWzBdLnN0cnVjdHVy
ZVNldCgpLnNpemUoKSA9PSAxKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFzdGF0dXNb
MF0uY2hhaW4oKSk7CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBp
ZiAoc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChz
dGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgp
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIHN0YXR1
c1swXS5zcGVjaWZpY1ZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobm9kZS0+Y2hpbGQx
KCksIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0x
NTAyLDQ0ICsxNTEzLDI4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICAgICAgQVNTRVJUKCEodmFsdWUubV90eXBlICYgflNwZWNDZWxsKSk7IC8vIEVkZ2Ug
ZmlsdGVyaW5nIHNob3VsZCBoYXZlIGFscmVhZHkgZW5zdXJlZCB0aGlzLgogCiAgICAgICAgIFN0
cnVjdHVyZVNldCYgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7Ci0KLSAgICAgICAgaWYgKHZh
bHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAgICAgICAK
KyAgICAgICAgLy8gSXQncyBpbnRlcmVzdGluZyB0aGF0IHdlIGNvdWxkIGhhdmUgcHJvdmVuIHRo
YXQgdGhlIG9iamVjdCBoYXMgYSBsYXJnZXIgc3RydWN0dXJlIHNldAorICAgICAgICAvLyB0aGF0
IGluY2x1ZGVzIHRoZSBzZXQgd2UncmUgdGVzdGluZy4gSW4gdGhhdCBjYXNlIHdlIGNvdWxkIG1h
a2UgdGhlIHN0cnVjdHVyZSBjaGVjaworICAgICAgICAvLyBtb3JlIGVmZmljaWVudC4gV2UgY3Vy
cmVudGx5IGRvbid0LgorICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlz
U3Vic2V0T2Yoc2V0KSkgewogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgbm9kZS0+c2V0
Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsK
LQotICAgICAgICAvLyBJZiB0aGlzIHN0cnVjdHVyZSBjaGVjayBpcyBhdHRlbXB0aW5nIHRvIHBy
b3ZlIGtub3dsZWRnZSBhbHJlYWR5IGhlbGQgaW4KLSAgICAgICAgLy8gdGhlIGZ1dHVyZVBvc3Np
YmxlU3RydWN0dXJlIHNldCB0aGVuIHRoZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlIHNob3VsZAot
ICAgICAgICAvLyB0dXJuIHRoaXMgaW50byBhIHdhdGNocG9pbnQgaW5zdGVhZC4KLSAgICAgICAg
aWYgKHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAg
ICAgICAgICAmJiB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmhhc1NpbmdsZXRvbigp
KSB7Ci0gICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAg
ICAgICAgZmlsdGVyKHZhbHVlLCB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLnNpbmds
ZXRvbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAKICAgICAgICAgZmlsdGVy
KHZhbHVlLCBzZXQpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAotICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKTsKLQotICAgICAgICBmaWx0ZXIodmFsdWUs
IG5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0
cnVlKTsKLSAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgICAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFu
dG9tUHV0U3RydWN0dXJlOgotICAgICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSkgewotICAgICAgICAgICAgY2xvYmJlclN0
cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAgICAgIGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLnNldChtX2dyYXBoLCBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVj
dHVyZSk7Ci0gICAgICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAg
ICAgICBpZiAoIWZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzQ2xlYXIoKSkg
eworICAgICAgICAgICAgb2JzZXJ2ZVRyYW5zaXRpb24oCisgICAgICAgICAgICAgICAgY2xvYmJl
ckxpbWl0LCBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLCBub2RlLT50cmFuc2l0aW9uKCkt
Pm5leHQpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgs
IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBHZXRCdXR0ZXJmbHk6CkBAIC0xNTk4LDcgKzE1OTMsNiBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBmaWx0ZXJBcnJheU1vZGVzKG5vZGUtPmNoaWxkMSgpLCBub2RlLT5hcnJheU1v
ZGUoKS5hcnJheU1vZGVzVGhhdFBhc3NGaWx0ZXJpbmcoKSk7Ci0gICAgICAgIG1fc3RhdGUuc2V0
SGF2ZVN0cnVjdHVyZXModHJ1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIEFy
cmF5aWZ5OiB7CkBAIC0xNjExLDE5ICsxNjA1LDQzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAg
ICAgY2xvYmJlclN0cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKICAgICAgICAgZmlsdGVyQXJyYXlN
b2Rlcyhub2RlLT5jaGlsZDEoKSwgbm9kZS0+YXJyYXlNb2RlKCkuYXJyYXlNb2Rlc1RoYXRQYXNz
RmlsdGVyaW5nKCkpOwotICAgICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOiB7CiAg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSk7Ci0g
ICAgICAgIFN0cnVjdHVyZVNldCBzZXQgPSBub2RlLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYg
KHZhbHVlLm1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNTdWJzZXRPZihzZXQpCi0gICAgICAg
ICAgICB8fCB2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpCisg
ICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChub2Rl
LT5zdHJ1Y3R1cmUoKSkpKQogICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0
cnVlKTsKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKICAgICAgICAgY2xvYmJlclN0
cnVjdHVyZXMoY2xvYmJlckxpbWl0KTsKLSAgICAgICAgZmlsdGVyKHZhbHVlLCBzZXQpOwotICAg
ICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOworICAgICAgICAKKyAgICAgICAg
Ly8gV2UgaGF2ZSBhIGJ1bmNoIG9mIG9wdGlvbnMgb2YgaG93IHRvIGV4cHJlc3MgdGhlIGFic3Ry
YWN0IHNldCBhdCB0aGlzIHBvaW50LiBMZXQgc2V0IFMKKyAgICAgICAgLy8gYmUgdGhlIHNldCBv
ZiBzdHJ1Y3R1cmVzIHRoYXQgdGhlIHZhbHVlIGhhZCBiZWZvcmUgY2xvYmJlcmluZyBhbmQgYXNz
dW1lIHRoYXQgYWxsIG9mCisgICAgICAgIC8vIHRoZW0gYXJlIHdhdGNoYWJsZS4gVGhlIG5ldyB2
YWx1ZSBzaG91bGQgYmUgdGhlIGxlYXN0IGV4cHJlc3NpYmxlIHVwcGVyIGJvdW5kIG9mIHRoZQor
ICAgICAgICAvLyBpbnRlcnNlY3Rpb24gb2YgInZhbHVlcyB0aGF0IGN1cnJlbnRseSBoYXZlIHN0
cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpIiBhbmQgInZhbHVlcworICAgICAgICAvLyB0aGF0
IGhhdmUgc3RydWN0dXJlIGluIFMgcGx1cyBhbnkgc3RydWN0dXJlIHRyYW5zaXRpb24tcmVhY2hh
YmxlIGZyb20gUyIuIEFzc3VtZSB0aGF0CisgICAgICAgIC8vIG5vZGUtPnN0cnVjdHVyZSgpIGlz
IG5vdCBpbiBTIGJ1dCBpdCBpcyB0cmFuc2l0aW9uLXJlYWNoYWJsZSBmcm9tIFMuIFRoZW4gd2Ug
d291bGQKKyAgICAgICAgLy8gbGlrZSB0byBzYXkgdGhhdCB0aGUgcmVzdWx0IGlzICJ2YWx1ZXMg
dGhhdCBoYXZlIHN0cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZSgpIHVudGlsCisgICAgICAgIC8v
IHdlIGludmFsaWRhdGUiLCBidXQgdGhlcmUgaXMgbm8gd2F5IHRvIGV4cHJlc3MgdGhpcyB1c2lu
ZyB0aGUgQWJzdHJhY3RWYWx1ZSBzeW50YXguIFNvCisgICAgICAgIC8vIHdlIG11c3QgY2hvb3Nl
IGJldHdlZW46CisgICAgICAgIC8vCisgICAgICAgIC8vIDEpICJ2YWx1ZXMgdGhhdCBjdXJyZW50
bHkgaGF2ZSBzdHJ1Y3R1cmUgPSBub2RlLT5zdHJ1Y3R1cmUoKSIuIFRoaXMgaXMgYSB2YWxpZAor
ICAgICAgICAvLyAgICBzdXBlcnNldCBvZiB0aGUgdmFsdWUgdGhhdCB3ZSByZWFsbHkgd2FudCwg
YW5kIGl0J3Mgc3BlY2lmaWMgZW5vdWdoIHRvIHNhdGlzZnkgdGhlCisgICAgICAgIC8vICAgIHBy
ZWNvbmRpdGlvbnMgb2YgdGhlIGFycmF5IGFjY2VzcyB0aGF0IHRoaXMgaXMgZ3VhcmRpbmcuIEl0
J3MgYWxzbyBzcGVjaWZpYyBlbm91Z2gKKyAgICAgICAgLy8gICAgdG8gYWxsb3cgcmVsZXZhbnQg
b3B0aW1pemF0aW9ucyBpbiB0aGUgY2FzZSB0aGF0IHdlIGRpZG4ndCBoYXZlIGEgY29udHJhZGlj
dGlvbgorICAgICAgICAvLyAgICBsaWtlIGluIHRoaXMgZXhhbXBsZS4gTm90aWNlIHRoYXQgaW4g
dGhlIGFic2NlbmNlIG9mIGFueSBjb250cmFkaWN0aW9uLCB0aGlzIHJlc3VsdAorICAgICAgICAv
LyAgICBpcyBwcmVjaXNlIHJhdGhlciB0aGFuIGJlaW5nIGEgY29uc2VydmF0aXZlIExVQi4KKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gMikgInZhbHVlcyB0aGF0IGN1cnJlbnRseSBoYXZhIHN0cnVj
dHVyZSBpbiBTIHBsdXMgYW55IHN0cnVjdHVyZSB0cmFuc2l0aW9uLXJlYWNoYWJsZQorICAgICAg
ICAvLyAgICBmcm9tIFMiLiBUaGlzIGlzIGFsc28gYSB2YWxpZCBzdXBlcnNldCBvZiB0aGUgdmFs
dWUgdGhhdCB3ZSByZWFsbHkgd2FudCwgYnV0IGl0J3MKKyAgICAgICAgLy8gICAgbm90IHNwZWNp
ZmljIGVub3VnaCB0byBzYXRpc2Z5IHRoZSBwcmVjb25kaXRpb25zIG9mIHRoZSBhcnJheSBhY2Nl
c3MgdGhhdCB0aGlzIGlzCisgICAgICAgIC8vICAgIGd1YXJkaW5nIC0gc28gcGxheWluZyBzdWNo
IHNoZW5hbmlnYW5zIHdvdWxkIHByZWNsdWRlIHVzIGZyb20gaGF2aW5nIGFzc2VydGlvbnMgb24K
KyAgICAgICAgLy8gICAgdGhlIHR5cGluZyBwcmVjb25kaXRpb25zIG9mIGFueSBhcnJheSBhY2Nl
c3Nlcy4gVGhpcyB3b3VsZCBhbHNvIG5vdCBiZSBhIGRlc2lyYWJsZQorICAgICAgICAvLyAgICBh
bnN3ZXIgaW4gdGhlIGFic2VuY2Ugb2YgYSBjb250cmFkaWN0aW9uLgorICAgICAgICAvLworICAg
ICAgICAvLyBOb3RlIHRoYXQgaXQncyB0ZW1wdGluZyB0byBzaW1wbHkgc2F5IHRoYXQgdGhlIHJl
c3VsdGluZyB2YWx1ZSBpcyBCT1RUT00gYmVjYXVzZSBvZgorICAgICAgICAvLyB0aGUgY29udHJh
ZGljdGlvbi4gVGhhdCB3b3VsZCBiZSB3cm9uZywgc2luY2Ugd2UgaGF2ZW4ndCBoaXQgYW4gaW52
YWxpZGF0aW9uIHBvaW50LAorICAgICAgICAvLyB5ZXQuCisgICAgICAgIHZhbHVlLnNldChtX2dy
YXBoLCBub2RlLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2U6CkBAIC0xNjUxLDcgKzE2NjksMTEgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBBU1NFUlQoISh2YWx1
ZS5tX3R5cGUgJiB+U3BlY0NlbGwpKTsgLy8gRWRnZSBmaWx0ZXJpbmcgc2hvdWxkIGhhdmUgYWxy
ZWFkeSBlbnN1cmVkIHRoaXMuCiAKLSAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0g
dmFsdWUuYmVzdFByb3ZlblN0cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgc2hvdWxkIGp1
c3QgZmlsdGVyIGRvd24gdGhlIGNhc2VzIGluIE11bHRpR2V0QnlPZmZzZXQuIElmIHRoYXQgcmVz
dWx0cyBpbiBhbGwKKyAgICAgICAgLy8gY2FzZXMgaGF2aW5nIHRoZSBzYW1lIG9mZnNldCB0aGVu
IHdlIHNob3VsZCBzdHJlbmd0aCByZWR1Y2UgaXQgdG8gYSBDaGVja1N0cnVjdHVyZSArCisgICAg
ICAgIC8vIEdldEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IHZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAgICAgICAgYm9vbCBk
b25lID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAg
IGNvbnN0IEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERh
dGEoKS52YXJpYW50c1tpXTsKQEAgLTE2ODgsNyArMTcxMCwxMiBAQCBib29sIEFic3RyYWN0SW50
ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIEFTU0VSVCghKHZhbHVlLm1fdHlwZSAm
IH5TcGVjQ2VsbCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3Vy
ZWQgdGhpcy4KIAotICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5iZXN0
UHJvdmVuU3RydWN0dXJlKCkpIHsKKyAgICAgICAgLy8gVGhpcyBzaG91bGQganVzdCBmaWx0ZXIg
ZG93biB0aGUgY2FzZXMgaW4gTXVsdGlQdXRCeU9mZnNldC4gSWYgdGhhdCByZXN1bHRzIGluIGVp
dGhlcgorICAgICAgICAvLyBvbmUgY2FzZSwgb3Igbm90aGluZyBidXQgcmVwbGFjZSBjYXNlcyBh
bmQgdGhleSBoYXZlIHRoZSBzYW1lIG9mZnNldCwgdGhlbiB3ZSBzaG91bGQKKyAgICAgICAgLy8g
anVzdCBzdHJlbmd0aCByZWR1Y2UgaXQgdG8gdGhlIGFwcHJvcHJpYXRlIGNvbWJpbmF0aW9uIG9m
IENoZWNrU3RydWN0dXJlLAorICAgICAgICAvLyBbUmVdQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Us
IFB1dFN0cnVjdHVyZSwgYW5kIFB1dEJ5T2Zmc2V0LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMjI5CisgICAgICAgIGlmIChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKSkgewogICAgICAg
ICAgICAgYm9vbCBkb25lID0gZmFsc2U7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAg
ICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQ
dXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKQEAgLTE2OTgsNyArMTcyNSw2IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICBpZiAo
dmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlJlcGxhY2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOwotICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLnNldEhhdmVTdHJ1Y3R1cmVzKHRydWUpOwogICAgICAgICAgICAgICAgICAg
ICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQpAQCAtMTcwNyw3ICsxNzMzLDYgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGNsb2JiZXJMaW1p
dCk7CiAgICAgICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuc2V0KG1fZ3JhcGgs
IHZhcmlhbnQubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91
bmRDb25zdGFudHModHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0
dXJlcyh0cnVlKTsKICAgICAgICAgICAgICAgICBkb25lID0gdHJ1ZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTE3MTUsMjUgKzE3NDAsMjQgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGlt
aXQpOwotICAgICAgICAKKyAgICAgICAgU3RydWN0dXJlU2V0IG9sZFNldDsKICAgICAgICAgU3Ry
dWN0dXJlU2V0IG5ld1NldDsKKyAgICAgICAgVHJhbnNpdGlvblZlY3RvciB0cmFuc2l0aW9uczsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52
YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlQdXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAg
ICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSkg
ewotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5jb250
YWlucyh2YXJpYW50LnN0cnVjdHVyZSgpKSkKLSAgICAgICAgICAgICAgICAgICAgbmV3U2V0LmFk
ZCh2YXJpYW50LnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFy
aWFudDo6VHJhbnNpdGlvbik7Ci0gICAgICAgICAgICBpZiAodmFsdWUubV9jdXJyZW50S25vd25T
dHJ1Y3R1cmUuY29udGFpbnModmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSkpCisgICAgICAgICAgICBv
bGRTZXQuYWRkKHZhcmlhbnQub2xkU3RydWN0dXJlKCkpOworICAgICAgICAgICAgaWYgKHZhcmlh
bnQua2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbnMuYXBwZW5kKFRyYW5zaXRpb24odmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSwg
dmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSkpOwogICAgICAgICAgICAgICAgIG5ld1NldC5hZGQodmFy
aWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVCh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6UmVwbGFjZSk7Cisg
ICAgICAgICAgICAgICAgbmV3U2V0LmFkZCh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpKTsKKyAgICAg
ICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gVXNlIGZpbHRlcih2YWx1
ZSwgc2V0KSBhcyBhIHdheSBvZiBzZXR0aW5nIHRoZSBzdHJ1Y3R1cmUgc2V0LiBUaGlzIHdvcmtz
IGJlY2F1c2UKLSAgICAgICAgLy8gd2Ugd291bGQgaGF2ZSBhbHJlYWR5IG1hZGUgdGhlIHNldCBi
ZSBUT1AgYmVmb3JlIHRoaXMuIEZpbHRlcmluZyB0b3AgaXMgYW5vdGhlciAKLSAgICAgICAgLy8g
d2F5IG9mIHNldHRpbmcuCi0gICAgICAgIGZpbHRlcihub2RlLT5jaGlsZDEoKSwgbmV3U2V0KTsK
KyAgICAgICAgZmlsdGVyKG5vZGUtPmNoaWxkMSgpLCBvbGRTZXQpOworICAgICAgICBvYnNlcnZl
VHJhbnNpdGlvbnMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9ucyk7CisgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpLnNldChtX2dyYXBoLCBuZXdTZXQpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgCkBAIC0xNzY3LDcgKzE3OTEsMTIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeQogICAgIGNhc2UgUHV0QnlJZEZsdXNoOgogICAgIGNhc2UgUHV0QnlJ
ZERpcmVjdDoKICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdCh0cnVlKTsKLSAgICAgICAgaWYgKFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkuYmVzdFByb3ZlblN0
cnVjdHVyZSgpKSB7CisgICAgICAgIC8vIFRoaXMgdXNlIG9mIG9ubHlTdHJ1Y3R1cmUoKSBzaG91
bGQgYmUgcmVwbGFjZWQgYnkgZ2l2aW5nIFB1dEJ5SWRTdGF0dXMgdGhlIGFiaWxpdHkKKyAgICAg
ICAgLy8gdG8gY29tcHV0ZSB0aGluZ3MgYmFzZWQgb24gYSBTdHJ1Y3R1cmVTZXQsIGFuZCB0aGVu
IHRvIGZhY3RvciBCeXRlQ29kZVBhcnNlcidzCisgICAgICAgIC8vIGFiaWxpdHkgdG8gZ2VuZXJh
dGUgY29kZSBiYXNlZCBvbiBhIFB1dEJ5SWRTdGF0dXMgb3V0IG9mIEJ5dGVDb2RlUGFyc2VyIHNv
IHRoYXQKKyAgICAgICAgLy8gQ29uc3RhbnRGb2xkaW5nUGhhc2UgY2FuIHVzZSBpdC4KKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAg
ICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5vbmx5U3RydWN0dXJlKCkpIHsKICAgICAgICAgICAgIFB1dEJ5SWRTdGF0dXMg
c3RhdHVzID0gUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgICAgICBtX2dy
YXBoLm1fdm0sCiAgICAgICAgICAgICAgICAgbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+
b3JpZ2luLnNlbWFudGljKSwKQEAgLTE3NzgsMTMgKzE4MDcsMTMgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0u
a2luZCgpID09IFB1dEJ5SWRWYXJpYW50OjpSZXBsYWNlKSB7CiAgICAgICAgICAgICAgICAgICAg
IGZpbHRlcihub2RlLT5jaGlsZDEoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChzdGF0dXNbMF0ua2luZCgp
ID09IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7CisgICAgICAgICAgICAgICAgaWYgKHN0
YXR1c1swXS5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgJiYgc3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZh
bGlkYXRlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5j
b25zaWRlcihzdGF0dXNbMF0ubmV3U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcyhjbG9iYmVyTGltaXQpOwogICAgICAgICAgICAgICAgICAgICBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS5zZXQobV9ncmFwaCwgc3RhdHVzWzBdLm5ld1N0cnVjdHVyZSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRIYXZlU3RydWN0dXJlcyh0cnVlKTsK
ICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0YW50cyh0cnVlKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTgzMSw3ICsx
ODYwLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAg
ICAKICAgICBjYXNlIFVwc2lsb246IHsKICAgICAgICAgbV9zdGF0ZS5jcmVhdGVWYWx1ZUZvck5v
ZGUobm9kZS0+cGhpKCkpOwotICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUo
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlID0gZm9yTm9kZShu
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkgPSB2YWx1ZTsKICAgICAgICAg
Zm9yTm9kZShub2RlLT5waGkoKSkgPSB2YWx1ZTsKICAgICAgICAgYnJlYWs7CkBAIC0xODU1LDYg
KzE4ODQsOCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgIAogICAgIGNhc2UgSW52YWxpZGF0aW9uUG9pbnQ6CiAgICAgICAgIG5vZGUtPnNldENhbkV4
aXQodHJ1ZSk7CisgICAgICAgIGZvckFsbFZhbHVlcyhjbG9iYmVyTGltaXQsIEFic3RyYWN0VmFs
dWU6Om9ic2VydmVJbnZhbGlkYXRpb25Qb2ludEZvcik7CisgICAgICAgIG1fc3RhdGUuc2V0U3Ry
dWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZXNBcmVXYXRjaGVkKTsKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIENoZWNrV2F0Y2hkb2dUaW1lcjoKQEAgLTE5MzYsNiArMTk2Nyw3IEBAIHZv
aWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKIHRlbXBsYXRlPHR5cGVuYW1l
IEFic3RyYWN0U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeXBlPjo6Y2xvYmJlckNhcHR1cmVkVmFycyhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
KQogeworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQUkgQ2xvYmJlciBD
YXB0dXJlZCBWYXJzIik7CiAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAg
ICAgICAgIGNvbnN0IEJpdFZlY3RvciYgY2FwdHVyZWRWYXJzID0gY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUtPmNhcHR1cmVkVmFyczsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IGNhcHR1cmVk
VmFycy5zaXplKCk7IGktLTspIHsKQEAgLTE5NTcsNDAgKzE5ODksODAgQEAgdm9pZCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0
cmFjdFN0YXRlVHlwZT4KLXZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmNsb2JiZXJTdHJ1Y3R1cmVzKHVuc2lnbmVkIGNsb2JiZXJMaW1pdCkKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+Ojpmb3JBbGxWYWx1ZXMoCisgICAgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBGdW5jdG9yJiBm
dW5jdG9yKQogewotICAgIGlmICghbV9zdGF0ZS5oYXZlU3RydWN0dXJlcygpKQotICAgICAgICBy
ZXR1cm47CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkRGRyBBSSBGb3IgQWxs
IFZhbHVlcyIpOwogICAgIGlmIChjbG9iYmVyTGltaXQgPj0gbV9zdGF0ZS5ibG9jaygpLT5zaXpl
KCkpCiAgICAgICAgIGNsb2JiZXJMaW1pdCA9IG1fc3RhdGUuYmxvY2soKS0+c2l6ZSgpOwogICAg
IGVsc2UKICAgICAgICAgY2xvYmJlckxpbWl0Kys7CiAgICAgQVNTRVJUKGNsb2JiZXJMaW1pdCA8
PSBtX3N0YXRlLmJsb2NrKCktPnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IGNsb2JiZXJM
aW1pdDsgaS0tOykKLSAgICAgICAgZm9yTm9kZShtX3N0YXRlLmJsb2NrKCktPmF0KGkpKS5jbG9i
YmVyU3RydWN0dXJlcygpOworICAgICAgICBmdW5jdG9yKGZvck5vZGUobV9zdGF0ZS5ibG9jaygp
LT5hdChpKSkpOwogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgSGFz
aFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0
SGVhZC5iZWdpbigpOwogICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9z
dGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQotICAgICAgICAgICAgZm9yTm9kZSgqaXRlcikuY2xvYmJlclN0cnVj
dHVyZXMoKTsKKyAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZSgqaXRlcikpOwogICAgIH0KICAg
ICBmb3IgKHNpemVfdCBpID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5udW1iZXJPZkFyZ3VtZW50cygp
OyBpLS07KQotICAgICAgICBtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpLmNsb2JiZXJT
dHJ1Y3R1cmVzKCk7CisgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5hcmd1bWVu
dChpKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3RhdGUudmFyaWFibGVzKCkubnVtYmVyT2ZM
b2NhbHMoKTsgaS0tOykKLSAgICAgICAgbV9zdGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKS5jbG9i
YmVyU3RydWN0dXJlcygpOwotICAgIG1fc3RhdGUuc2V0SGF2ZVN0cnVjdHVyZXModHJ1ZSk7Cisg
ICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5sb2NhbChpKSk7Cit9CisKK3RlbXBs
YXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgordm9pZCBBYnN0cmFjdEludGVycHJldGVy
PEFic3RyYWN0U3RhdGVUeXBlPjo6Y2xvYmJlclN0cnVjdHVyZXModW5zaWduZWQgY2xvYmJlckxp
bWl0KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgQUkgQ2xvYmJl
ciBTdHJ1Y3R1cmVzIik7CisgICAgZm9yQWxsVmFsdWVzKGNsb2JiZXJMaW1pdCwgQWJzdHJhY3RW
YWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXNGb3IpOworICAgIHNldERpZENsb2JiZXIoKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpvYnNlcnZlVHJhbnNpdGlvbigKKyAgICB1bnNpZ25l
ZCBjbG9iYmVyTGltaXQsIFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykKK3sKKyAgICBB
YnN0cmFjdFZhbHVlOjpUcmFuc2l0aW9uT2JzZXJ2ZXIgdHJhbnNpdGlvbk9ic2VydmVyKGZyb20s
IHRvKTsKKyAgICBmb3JBbGxWYWx1ZXMoY2xvYmJlckxpbWl0LCB0cmFuc2l0aW9uT2JzZXJ2ZXIp
OworICAgIHNldERpZENsb2JiZXIoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQWJzdHJhY3RT
dGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpv
YnNlcnZlVHJhbnNpdGlvbnMoCisgICAgdW5zaWduZWQgY2xvYmJlckxpbWl0LCBjb25zdCBUcmFu
c2l0aW9uVmVjdG9yJiB2ZWN0b3IpCit7CisgICAgQWJzdHJhY3RWYWx1ZTo6VHJhbnNpdGlvbnNP
YnNlcnZlciB0cmFuc2l0aW9uc09ic2VydmVyKHZlY3Rvcik7CisgICAgZm9yQWxsVmFsdWVzKGNs
b2JiZXJMaW1pdCwgdHJhbnNpdGlvbnNPYnNlcnZlcik7CisgICAgc2V0RGlkQ2xvYmJlcigpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBBYnN0cmFjdFN0YXRlVHlwZT4KK3ZvaWQgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OnNldERpZENsb2JiZXIoKQorewogICAgIG1f
c3RhdGUuc2V0RGlkQ2xvYmJlcih0cnVlKTsKKyAgICBtX3N0YXRlLnNldFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZShTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QWJzdHJhY3RTdGF0ZVR5cGU+Cit2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgY29uc3RfY2FzdDxB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPio+KHRoaXMpLT5kdW1wKG91dCk7
CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0U3RhdGVUeXBlPgogdm9pZCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KQog
ewogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOworICAgIEhhc2hTZXQ8Tm9kZSo+IHNlZW47
CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewogICAgICAgICBIYXNoU2V0PE5vZGUq
Pjo6aXRlcmF0b3IgaXRlciA9IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkLmJlZ2lu
KCk7CiAgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBtX3N0YXRlLmJsb2Nr
KCktPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsKICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgICAgIHNl
ZW4uYWRkKG5vZGUpOwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2Rl
KG5vZGUpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTE5OTksMTEgKzIwNzEsMjUgQEAgdm9pZCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
c3RhdGUuYmxvY2soKS0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgTm9kZSogbm9kZSA9IG1fc3Rh
dGUuYmxvY2soKS0+YXQoaSk7CisgICAgICAgIHNlZW4uYWRkKG5vZGUpOwogICAgICAgICBBYnN0
cmFjdFZhbHVlJiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc0Ns
ZWFyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBu
b2RlLCAiOiIsIHZhbHVlKTsKICAgICB9CisgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkg
eworICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc3RhdGUuYmxvY2so
KS0+c3NhLT5saXZlQXRUYWlsLmJlZ2luKCk7CisgICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVy
YXRvciBlbmQgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbC5lbmQoKTsKKyAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSAqaXRlcjsKKyAgICAgICAgICAgIGlmIChzZWVuLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBmb3JO
b2RlKG5vZGUpOworICAgICAgICAgICAgaWYgKHZhbHVlLmlzQ2xlYXIoKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZSwgIjoiLCB2
YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEFic3RyYWN0
U3RhdGVUeXBlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywxNiArMzMsMjkg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCit2b2lkIEFic3RyYWN0VmFs
dWU6Om9ic2VydmVUcmFuc2l0aW9ucyhjb25zdCBUcmFuc2l0aW9uVmVjdG9yJiB2ZWN0b3IpCit7
CisgICAgaWYgKG1fdHlwZSAmIFNwZWNDZWxsKSB7CisgICAgICAgIG1fc3RydWN0dXJlLm9ic2Vy
dmVUcmFuc2l0aW9ucyh2ZWN0b3IpOworICAgICAgICBBcnJheU1vZGVzIG5ld01vZGVzID0gMDsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2Rlcyh2ZWN0b3JbaV0ucHJldmlvdXMt
PmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAgICAgICBuZXdNb2RlcyB8PSBhc0FycmF5TW9k
ZXModmVjdG9yW2ldLm5leHQtPmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgfQorICAgICAgICBt
X2FycmF5TW9kZXMgfD0gbmV3TW9kZXM7CisgICAgfQorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
K30KKwogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXRNb3N0U3BlY2lmaWMoR3JhcGgmIGdyYXBoLCBK
U1ZhbHVlIHZhbHVlKQogewogICAgIGlmICghIXZhbHVlICYmIHZhbHVlLmlzQ2VsbCgpKSB7CiAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
OwotICAgICAgICBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICAgICAg
c2V0RnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUoZ3JhcGgsIHN0cnVjdHVyZSk7CisgICAgICAgIGdy
YXBoLndhdGNocG9pbnRzKCkuY29uc2lkZXIoc3RydWN0dXJlKTsKKyAgICAgICAgbV9zdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5jbGVhcigpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJl
LmNsZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CiAgICAgICAgIG1fYXJyYXlN
b2RlcyA9IDA7CiAgICAgfQogICAgICAgICAKQEAgLTUwLDE5ICs2MywzMCBAQCB2b2lkIEFic3Ry
YWN0VmFsdWU6OnNldE1vc3RTcGVjaWZpYyhHcmFwCiAgICAgbV92YWx1ZSA9IHZhbHVlOwogICAg
ICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBo
KTsKIH0KIAotdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKU1ZhbHVlIHZh
bHVlKQordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKU1ZhbHVlIHZhbHVl
LCBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2xvYmJlclN0YXRlKQogewogICAgIGlmICghIXZhbHVl
ICYmIHZhbHVlLmlzQ2VsbCgpKSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLm1h
a2VUb3AoKTsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5hc0NlbGwoKS0+
c3RydWN0dXJlKCk7Ci0gICAgICAgIHNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKGdyYXBoLCBz
dHJ1Y3R1cmUpOwotICAgICAgICBtX2FycmF5TW9kZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJl
LT5pbmRleGluZ1R5cGUoKSk7Ci0gICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CisgICAgICAg
IGlmIChncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSkpIHsKKyAgICAgICAg
ICAgIC8vIFdlIHNob3VsZCBiZSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRoZSB3YXRjaHBvaW50IGZv
ciB0aGlzIGhhcyBhbHJlYWR5IGJlZW4gc2V0LgorICAgICAgICAgICAgLy8gQnV0IHdlIGNhbid0
IGJlY2F1c2Ugb3VyIHZpZXcgb2Ygd2hhdCBzdHJ1Y3R1cmUgYSB2YWx1ZSBoYXMga2VlcHMgY2hh
bmdpbmcuIFRoYXQncworICAgICAgICAgICAgLy8gd2h5IHdlIGNhbGwgY29uc2lkZXIoKS4KKyAg
ICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM0
MjYKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgICAgICAgICAgaWYg
KGNsb2JiZXJTdGF0ZSA9PSBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkKSB7CisgICAgICAgICAgICAg
ICAgbV9hcnJheU1vZGVzID0gQUxMX0FSUkFZX01PREVTOworICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlLmNsb2JiZXIoKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1f
YXJyYXlNb2RlcyA9IGFzQXJyYXlNb2RlcyhzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKKyAgICAgICAgfQogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0gICAgICAg
IG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUu
Y2xlYXIoKTsKICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsKICAgICB9CiAgICAgCkBAIC03MCwx
NyArOTQsMjkgQEAgdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBKUwogICAg
IG1fdmFsdWUgPSB2YWx1ZTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNz
ZXJ0SXNXYXRjaGVkKGdyYXBoKTsKIH0KIAogdm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgm
IGdyYXBoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBtX2N1cnJlbnRLbm93blN0cnVj
dHVyZSA9IHN0cnVjdHVyZTsKLSAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVyZShncmFwaCwg
c3RydWN0dXJlKTsKKyAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKICAgICBtX2FycmF5TW9k
ZXMgPSBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgbV90eXBl
ID0gc3BlY3VsYXRpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CiAgICAgbV92YWx1ZSA9IEpT
VmFsdWUoKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CisgICAgYXNzZXJ0SXNXYXRj
aGVkKGdyYXBoKTsKK30KKwordm9pZCBBYnN0cmFjdFZhbHVlOjpzZXQoR3JhcGgmIGdyYXBoLCBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKK3sKKyAgICBtX3N0cnVjdHVyZSA9IHNldDsKKyAgICBt
X2FycmF5TW9kZXMgPSBzZXQuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7CisgICAgbV90eXBl
ID0gc2V0LnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICBtX3ZhbHVlID0gSlNWYWx1
ZSgpOworICAgIAorICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBhc3NlcnRJc1dhdGNoZWQo
Z3JhcGgpOwogfQogCiB2b2lkIEFic3RyYWN0VmFsdWU6OmZpeFR5cGVGb3JSZXByZXNlbnRhdGlv
bihOb2RlRmxhZ3MgcmVwcmVzZW50YXRpb24pCkBAIC0xMjksMjEgKzE2NSwxOCBAQCBGaWx0cmF0
aW9uUmVzdWx0IEFic3RyYWN0VmFsdWU6OmZpbHRlcihHCiAgICAgCiAgICAgbV90eXBlICY9IG90
aGVyLnNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKTsKICAgICBtX2FycmF5TW9kZXMgJj0gb3Ro
ZXIuYXJyYXlNb2Rlc0Zyb21TdHJ1Y3R1cmVzKCk7Ci0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1
cmUuZmlsdGVyKG90aGVyKTsKKyAgICBtX3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOwogICAgIAog
ICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBwcmlvciB0byB0aGUgYWJvdmUgdHdvIHN0YXRlbWVu
dHMgd2UgaGFkIChGb28sIFRPUCksIHdoZXJlCiAgICAgLy8gRm9vIGlzIGEgU3BlY3VsYXRlZFR5
cGUgdGhhdCBpcyBkaXNqb2ludCB3aXRoIHRoZSBwYXNzZWQgU3RydWN0dXJlU2V0LiBJbiB0aGF0
CiAgICAgLy8gY2FzZSwgd2Ugd2lsbCBub3cgaGF2ZSAoTm9uZSwgW3NvbWVTdHJ1Y3R1cmVdKS4g
SW4gZ2VuZXJhbCwgd2UgbmVlZCB0byBtYWtlCiAgICAgLy8gc3VyZSB0aGF0IG5ldyBpbmZvcm1h
dGlvbiBnbGVhbmVkIGZyb20gdGhlIFNwZWN1bGF0ZWRUeXBlIG5lZWRzIHRvIGJlIGZlZCBiYWNr
CiAgICAgLy8gaW50byB0aGUgaW5mb3JtYXRpb24gZ2xlYW5lZCBmcm9tIHRoZSBTdHJ1Y3R1cmVT
ZXQuCi0gICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CisgICAgbV9z
dHJ1Y3R1cmUuZmlsdGVyKG1fdHlwZSk7CiAgICAgCi0gICAgaWYgKG1fY3VycmVudEtub3duU3Ry
dWN0dXJlLmhhc1NpbmdsZXRvbigpKQotICAgICAgICBzZXRGdXR1cmVQb3NzaWJsZVN0cnVjdHVy
ZShncmFwaCwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCkpOwotICAgICAgICAK
ICAgICBmaWx0ZXJBcnJheU1vZGVzQnlUeXBlKCk7CiAgICAgZmlsdGVyVmFsdWVCeVR5cGUoKTsK
LSAgICByZXR1cm4gbm9ybWFsaXplQ2xhcml0eSgpOworICAgIHJldHVybiBub3JtYWxpemVDbGFy
aXR5KGdyYXBoKTsKIH0KIAogRmlsdHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJB
cnJheU1vZGVzKEFycmF5TW9kZXMgYXJyYXlNb2RlcykKQEAgLTE2MywxNCArMTk2LDI2IEBAIEZp
bHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKFMKICAgICBpZiAoKG1fdHlwZSAm
IHR5cGUpID09IG1fdHlwZSkKICAgICAgICAgcmV0dXJuIEZpbHRyYXRpb25PSzsKICAgICAKKyAg
ICAvLyBGYXN0IHBhdGggZm9yIHRoZSBjYXNlIHRoYXQgd2UgZG9uJ3QgZXZlbiBoYXZlIGEgY2Vs
bC4KKyAgICBpZiAoIShtX3R5cGUgJiBTcGVjQ2VsbCkpIHsKKyAgICAgICAgbV90eXBlICY9IHR5
cGU7CisgICAgICAgIEZpbHRyYXRpb25SZXN1bHQgcmVzdWx0OworICAgICAgICBpZiAobV90eXBl
ID09IFNwZWNOb25lKSB7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmVzdWx0
ID0gQ29udHJhZGljdGlvbjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBG
aWx0cmF0aW9uT0s7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgbV90eXBlICY9IHR5cGU7CiAgICAgCiAgICAgLy8g
SXQncyBwb3NzaWJsZSB0aGF0IHByaW9yIHRvIHRoaXMgZmlsdGVyKCkgY2FsbCB3ZSBoYWQsIHNh
eSwgKEZpbmFsLCBUT1ApLCBhbmQKICAgICAvLyB0aGUgcGFzc2VkIHR5cGUgaXMgQXJyYXkuIEF0
IHRoaXMgcG9pbnQgd2UnbGwgaGF2ZSAoTm9uZSwgVE9QKS4gVGhlIGJlc3Qgd2F5CiAgICAgLy8g
dG8gZW5zdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBmaWx0ZXJpbmcgZG9lcyB0aGUgcmlnaHQgdGhp
bmcgaXMgdG8gZmlsdGVyIG9uCiAgICAgLy8gdGhlIG5ldyB0eXBlIChOb25lKSByYXRoZXIgdGhh
biB0aGUgb25lIHBhc3NlZCAoQXJyYXkpLgotICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmZp
bHRlcihtX3R5cGUpOwotICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuZmlsdGVyKG1fdHlw
ZSk7CisgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKHR5cGUpOwogICAgIGZpbHRlckFycmF5TW9kZXNC
eVR5cGUoKTsKICAgICBmaWx0ZXJWYWx1ZUJ5VHlwZSgpOwogICAgIHJldHVybiBub3JtYWxpemVD
bGFyaXR5KCk7CkBAIC0xODQsMTUgKzIyOSw2IEBAIEZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RW
YWx1ZTo6ZmlsdGVyQnkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIEFic3RyYWN0VmFs
dWU6OnNldEZ1dHVyZVBvc3NpYmxlU3RydWN0dXJlKEdyYXBoJiBncmFwaCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZSk7Ci0gICAgaWYgKGdyYXBoLndhdGNo
cG9pbnRzKCkuaXNTdGlsbFZhbGlkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQo
KSkpCi0gICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7Ci0gICAg
ZWxzZQotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKLX0KLQog
dm9pZCBBYnN0cmFjdFZhbHVlOjpmaWx0ZXJWYWx1ZUJ5VHlwZSgpCiB7CiAgICAgLy8gV2UgY291
bGQgZ28gZnVydGhlciwgYW5kIGVuc3VyZSB0aGF0IGlmIHRoZSBmdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZSBjb250cmF2ZW5lcwpAQCAtMjM4LDggKzI3NCw3IEBAIGJvb2wgQWJzdHJhY3RWYWx1ZTo6
c2hvdWxkQmVDbGVhcigpIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgaWYg
KCEobV90eXBlICYgflNwZWNDZWxsKQotICAgICAgICAmJiAoIW1fYXJyYXlNb2RlcwotICAgICAg
ICAgICAgfHwgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKSkKKyAgICAgICAgJiYg
KCFtX2FycmF5TW9kZXMgfHwgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjYzLDEyICsyOTgsMTggQEAgRmls
dHJhdGlvblJlc3VsdCBBYnN0cmFjdFZhbHVlOjpub3JtYWxpegogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKK0ZpbHRyYXRpb25SZXN1bHQgQWJzdHJhY3RWYWx1ZTo6bm9ybWFsaXplQ2xhcml0eShH
cmFwaCYgZ3JhcGgpCit7CisgICAgRmlsdHJhdGlvblJlc3VsdCByZXN1bHQgPSBub3JtYWxpemVD
bGFyaXR5KCk7CisgICAgYXNzZXJ0SXNXYXRjaGVkKGdyYXBoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBBYnN0cmFjdFZhbHVlOjpjaGVja0Nv
bnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBpZiAoIShtX3R5cGUgJiBTcGVjQ2VsbCkpIHsKLSAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEtub3duU3RydWN0dXJlLmlzQ2xlYXIoKSk7Ci0gICAgICAg
IEFTU0VSVChtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmlzQ2xlYXIoKSk7CisgICAgICAgIEFT
U0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICBBU1NFUlQoIW1fYXJyYXlNb2Rl
cyk7CiAgICAgfQogICAgIApAQCAtMjg5LDYgKzMzMCwxMSBAQCB2b2lkIEFic3RyYWN0VmFsdWU6
OmNoZWNrQ29uc2lzdGVuY3koKSBjCiAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byBnZXQgcGVkYW50
aWMgYWJvdXQgdGhpcyBhcyBpdCB3b3VsZCBvbmx5IGluY3JlYXNlIHRoZSBjb21wdXRhdGlvbmFs
CiAgICAgLy8gY29tcGxleGl0eSBvZiB0aGUgY29kZS4KIH0KKwordm9pZCBBYnN0cmFjdFZhbHVl
Ojphc3NlcnRJc1dhdGNoZWQoR3JhcGgmIGdyYXBoKSBjb25zdAoreworICAgIG1fc3RydWN0dXJl
LmFzc2VydElzV2F0Y2hlZChncmFwaCk7Cit9CiAjZW5kaWYKIAogdm9pZCBBYnN0cmFjdFZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0zMDIsOCArMzQ4LDcgQEAgdm9pZCBB
YnN0cmFjdFZhbHVlOjpkdW1wSW5Db250ZXh0KFByaW50UwogICAgIGlmIChtX3R5cGUgJiBTcGVj
Q2VsbCkgewogICAgICAgICBvdXQucHJpbnQoCiAgICAgICAgICAgICAiLCAiLCBBcnJheU1vZGVz
RHVtcChtX2FycmF5TW9kZXMpLCAiLCAiLAotICAgICAgICAgICAgaW5Db250ZXh0KG1fY3VycmVu
dEtub3duU3RydWN0dXJlLCBjb250ZXh0KSwgIiwgIiwKLSAgICAgICAgICAgIGluQ29udGV4dCht
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLCBjb250ZXh0KSk7CisgICAgICAgICAgICBpbkNvbnRl
eHQobV9zdHJ1Y3R1cmUsIGNvbnRleHQpKTsKICAgICB9CiAgICAgaWYgKCEhbV92YWx1ZSkKICAg
ICAgICAgb3V0LnByaW50KCIsICIsIGluQ29udGV4dChtX3ZhbHVlLCBjb250ZXh0KSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNp
b24gMTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdGaWx0cmF0
aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHU3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNsb2JiZXJTdGF0
ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNwZWN1bGF0ZWRUeXBlLmgiCiAj
aW5jbHVkZSAiRHVtcENvbnRleHQuaCIKQEAgLTUzLDggKzU0LDcgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgIHsKICAgICAgICAgbV90eXBlID0gU3BlY05vbmU7CiAgICAgICAgIG1fYXJy
YXlNb2RlcyA9IDA7Ci0gICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7Ci0g
ICAgICAgIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKICAgICAgICAgbV92YWx1ZSA9IEpTVmFsdWUoKTsKICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTc1LDE1ICs3NSw3NCBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpCiAgICAgewogICAgICAgICBp
ZiAobV90eXBlICYgU3BlY0NlbGwpIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0
dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsb2JiZXIoKTsKICAgICAg
ICAgICAgIGNsb2JiZXJBcnJheU1vZGVzKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICAgICAgICAg
IEFTU0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFtX2Fy
cmF5TW9kZXMpOwogICAgICAgICB9CiAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgY2xvYmJlclN0cnVjdHVyZXNGb3IoQWJzdHJhY3RWYWx1
ZSYgdmFsdWUpCisgICAgeworICAgICAgICB2YWx1ZS5jbG9iYmVyU3RydWN0dXJlcygpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVJbnZhbGlkYXRpb25Qb2ludCgpCisgICAgeworICAg
ICAgICBtX3N0cnVjdHVyZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBvYnNlcnZlSW52
YWxpZGF0aW9uUG9pbnRGb3IoQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgeworICAgICAgICB2
YWx1ZS5vYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBv
YnNlcnZlVHJhbnNpdGlvbihTdHJ1Y3R1cmUqIGZyb20sIFN0cnVjdHVyZSogdG8pCisgICAgewor
ICAgICAgICBpZiAobV90eXBlICYgU3BlY0NlbGwpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJl
Lm9ic2VydmVUcmFuc2l0aW9uKGZyb20sIHRvKTsKKyAgICAgICAgICAgIG9ic2VydmVJbmRleGlu
Z1R5cGVUcmFuc2l0aW9uKGZyb20tPmluZGV4aW5nVHlwZSgpLCB0by0+aW5kZXhpbmdUeXBlKCkp
OworICAgICAgICB9CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvYnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvblZlY3RvciYgdmVjdG9y
KTsKKyAgICAKKyAgICBjbGFzcyBUcmFuc2l0aW9uT2JzZXJ2ZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgVHJhbnNpdGlvbk9ic2VydmVyKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykK
KyAgICAgICAgICAgIDogbV9mcm9tKGZyb20pCisgICAgICAgICAgICAsIG1fdG8odG8pCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBvcGVyYXRvcigpKEFic3Ry
YWN0VmFsdWUmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZS5vYnNlcnZlVHJh
bnNpdGlvbihtX2Zyb20sIG1fdG8pOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAg
U3RydWN0dXJlKiBtX2Zyb207CisgICAgICAgIFN0cnVjdHVyZSogbV90bzsKKyAgICB9OworICAg
IAorICAgIGNsYXNzIFRyYW5zaXRpb25zT2JzZXJ2ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
VHJhbnNpdGlvbnNPYnNlcnZlcihjb25zdCBUcmFuc2l0aW9uVmVjdG9yJiB2ZWN0b3IpCisgICAg
ICAgICAgICA6IG1fdmVjdG9yKHZlY3RvcikKKyAgICAgICAgeworICAgICAgICB9CiAgICAgICAg
IAorICAgICAgICB2b2lkIG9wZXJhdG9yKCkoQWJzdHJhY3RWYWx1ZSYgdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHZhbHVlLm9ic2VydmVUcmFuc2l0aW9ucyhtX3ZlY3Rvcik7CisgICAg
ICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBUcmFuc2l0aW9uVmVjdG9yJiBtX3Zl
Y3RvcjsKKyAgICB9OworICAgIAogICAgIHZvaWQgY2xvYmJlclZhbHVlKCkKICAgICB7CiAgICAg
ICAgIG1fdmFsdWUgPSBKU1ZhbHVlKCk7CkBAIC05MSw3ICsxNTAsMTAgQEAgc3RydWN0IEFic3Ry
YWN0VmFsdWUgewogICAgIAogICAgIGJvb2wgaXNIZWFwVG9wKCkgY29uc3QKICAgICB7Ci0gICAg
ICAgIHJldHVybiAobV90eXBlIHwgU3BlY0hlYXBUb3ApID09IG1fdHlwZSAmJiBtX2N1cnJlbnRL
bm93blN0cnVjdHVyZS5pc1RvcCgpICYmIG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaXNUb3Ao
KTsKKyAgICAgICAgcmV0dXJuIChtX3R5cGUgfCBTcGVjSGVhcFRvcCkgPT0gbV90eXBlCisgICAg
ICAgICAgICAmJiBtX3N0cnVjdHVyZS5pc1RvcCgpCisgICAgICAgICAgICAmJiBtX2FycmF5TW9k
ZXMgPT0gQUxMX0FSUkFZX01PREVTCisgICAgICAgICAgICAmJiAhbV92YWx1ZTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCB2YWx1ZUlzVG9wKCkgY29uc3QKQEAgLTExMiwxOCArMTc0LDE3IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzZXRNb3N0U3BlY2lm
aWMoR3JhcGgmLCBKU1ZhbHVlKTsKLSAgICB2b2lkIHNldChHcmFwaCYsIEpTVmFsdWUpOworICAg
IHZvaWQgc2V0KEdyYXBoJiwgSlNWYWx1ZSwgU3RydWN0dXJlQ2xvYmJlclN0YXRlKTsKICAgICB2
b2lkIHNldChHcmFwaCYsIFN0cnVjdHVyZSopOworICAgIHZvaWQgc2V0KEdyYXBoJiwgY29uc3Qg
U3RydWN0dXJlU2V0Jik7CiAgICAgCiAgICAgdm9pZCBzZXRUeXBlKFNwZWN1bGF0ZWRUeXBlIHR5
cGUpCiAgICAgewogICAgICAgICBpZiAodHlwZSAmIFNwZWNDZWxsKSB7Ci0gICAgICAgICAgICBt
X2N1cnJlbnRLbm93blN0cnVjdHVyZS5tYWtlVG9wKCk7Ci0gICAgICAgICAgICBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VU
b3AoKTsKICAgICAgICAgICAgIG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fY3VycmVudEtub3duU3RydWN0dXJlLmNsZWFyKCk7
Ci0gICAgICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAg
ICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOwogICAgICAgICAgICAgbV9hcnJheU1vZGVzID0gMDsK
ICAgICAgICAgfQogICAgICAgICBtX3R5cGUgPSB0eXBlOwpAQCAtMTM4LDggKzE5OSw3IEBAIHN0
cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICB7CiAgICAgICAgIHJldHVybiBtX3R5cGUgPT0gb3Ro
ZXIubV90eXBlCiAgICAgICAgICAgICAmJiBtX2FycmF5TW9kZXMgPT0gb3RoZXIubV9hcnJheU1v
ZGVzCi0gICAgICAgICAgICAmJiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSA9PSBvdGhlci5tX2N1
cnJlbnRLbm93blN0cnVjdHVyZQotICAgICAgICAgICAgJiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVj
dHVyZSA9PSBvdGhlci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlCisgICAgICAgICAgICAmJiBt
X3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZQogICAgICAgICAgICAgJiYgbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOwogICAgIH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpIGNvbnN0CkBAIC0xNjIsOCArMjIyLDcgQEAgc3RydWN0IEFic3RyYWN0
VmFsdWUgewogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcmVzdWx0IHw9IG1lcmdlU3Bl
Y3VsYXRpb24obV90eXBlLCBvdGhlci5tX3R5cGUpOwogICAgICAgICAgICAgcmVzdWx0IHw9IG1l
cmdlQXJyYXlNb2RlcyhtX2FycmF5TW9kZXMsIG90aGVyLm1fYXJyYXlNb2Rlcyk7Ci0gICAgICAg
ICAgICByZXN1bHQgfD0gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fY3Vy
cmVudEtub3duU3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJlc3VsdCB8PSBtX2Z1dHVyZVBvc3Np
YmxlU3RydWN0dXJlLmFkZEFsbChvdGhlci5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlKTsKKyAg
ICAgICAgICAgIHJlc3VsdCB8PSBtX3N0cnVjdHVyZS5tZXJnZShvdGhlci5tX3N0cnVjdHVyZSk7
CiAgICAgICAgICAgICBpZiAobV92YWx1ZSAhPSBvdGhlci5tX3ZhbHVlKSB7CiAgICAgICAgICAg
ICAgICAgcmVzdWx0IHw9ICEhbV92YWx1ZTsKICAgICAgICAgICAgICAgICBtX3ZhbHVlID0gSlNW
YWx1ZSgpOwpAQCAtMTc5LDggKzIzOCw3IEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsKICAgICAg
ICAgbWVyZ2VTcGVjdWxhdGlvbihtX3R5cGUsIHR5cGUpOwogICAgICAgICAKICAgICAgICAgaWYg
KHR5cGUgJiBTcGVjQ2VsbCkgewotICAgICAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
bWFrZVRvcCgpOwotICAgICAgICAgICAgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CiAgICAgICAgICAgICBtX2Fy
cmF5TW9kZXMgPSBBTExfQVJSQVlfTU9ERVM7CiAgICAgICAgIH0KICAgICAgICAgbV92YWx1ZSA9
IEpTVmFsdWUoKTsKQEAgLTIyNSw3NSArMjgzLDMwIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVlIHsK
ICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUuaXNDZWxsKCkpIHsKICAgICAgICAgICAgIEFT
U0VSVChtX3R5cGUgJiBTcGVjQ2VsbCk7CiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIHJldHVybiBtX2N1
cnJlbnRLbm93blN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAg
JiYgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5jb250YWlucyhzdHJ1Y3R1cmUpCisgICAgICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnMoc3RydWN0dXJlKQogICAgICAgICAgICAg
ICAgICYmIChtX2FycmF5TW9kZXMgJiBhc0FycmF5TW9kZXMoc3RydWN0dXJlLT5pbmRleGluZ1R5
cGUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAgICAgCi0gICAgU3RydWN0dXJlKiBiZXN0UHJvdmVuU3RydWN0dXJlKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKSkKLSAg
ICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAg
ICAgICAgaWYgKG1fZnV0dXJlUG9zc2libGVTdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5zaW5nbGV0b24oKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIAogICAgIGJvb2wgaGFzQ2xvYmJlcmFibGVTdGF0
ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUu
aXNOZWl0aGVyQ2xlYXJOb3JUb3AoKQorICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuaXNOZWl0
aGVyQ2xlYXJOb3JUb3AoKQogICAgICAgICAgICAgfHwgIWFycmF5TW9kZXNBcmVDbGVhck9yVG9w
KG1fYXJyYXlNb2Rlcyk7CiAgICAgfQogICAgIAogI2lmIEFTU0VSVF9ESVNBQkxFRAogICAgIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0IHsgfQorICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVk
KEdyYXBoJikgY29uc3QgeyB9CiAjZWxzZQogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpIGNv
bnN0OworICAgIHZvaWQgYXNzZXJ0SXNXYXRjaGVkKEdyYXBoJikgY29uc3Q7CiAjZW5kaWYKICAg
ICAKICAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNv
bnN0OwogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIC8vIEEg
Z3JlYXQgd2F5IHRvIHRoaW5rIGFib3V0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUgYW5kCi0gICAgLy8gbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSBpcyB0
byBjb25zaWRlciB0aGVzZSBmb3VyIGV4YW1wbGVzOgotICAgIC8vCi0gICAgLy8gMSkgeCA9IGZv
bygpOwotICAgIC8vCi0gICAgLy8gICAgSW4gdGhpcyBjYXNlIHgncyBtX2N1cnJlbnRLbm93blN0
cnVjdHVyZSBhbmQgbV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZSB3aWxsCi0gICAgLy8gICAgYm90
aCBiZSBUT1AsIHNpbmNlIHdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQgeCBmb3Igc3VyZSwg
eWV0LgotICAgIC8vCi0gICAgLy8gMikgeCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0g
ICAgLy8KLSAgICAvLyAgICBXaGVyZSB4IHdpbGwgbGF0ZXIgaGF2ZSBhIG5ldyBwcm9wZXJ0eSBh
ZGRlZCB0byBpdCwgJ2cnLiBCZWNhdXNlIG9mIHRoZQotICAgIC8vICAgIGtub3duIGJ1dCBub3Qt
eWV0LWV4ZWN1dGVkIHByb3BlcnR5IGFkZGl0aW9uLCB4J3MgY3VycmVudCBzdHJ1Y3R1cmUgd2ls
bAotICAgIC8vICAgIG5vdCBiZSB3YXRjaHBvaW50YWJsZTsgaGVuY2Ugd2UgaGF2ZSBubyB3YXkg
b2Ygc3RhdGljYWxseSBib3VuZGluZyB0aGUgc2V0Ci0gICAgLy8gICAgb2YgcG9zc2libGUgc3Ry
dWN0dXJlcyB0aGF0IHggbWF5IGhhdmUgaWYgYSBjbG9iYmVyaW5nIGV2ZW50IGhhcHBlbnMuIFNv
LAotICAgIC8vICAgIHgncyBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSB3aWxsIGJlIHdoYXRldmVy
IHN0cnVjdHVyZSB3ZSBjaGVjayB0byBnZXQKLSAgICAvLyAgICBwcm9wZXJ0eSAnZicsIGFuZCBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYmUgVE9QLgotICAgIC8vCi0gICAgLy8gMykg
eCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8KLSAgICAvLyAgICBXaGVyZSB4
IGhhcyBhIHRlcm1pbmFsIHN0cnVjdHVyZSB0aGF0IGlzIHN0aWxsIHdhdGNocG9pbnRhYmxlLiBJ
biB0aGlzIGNhc2UsCi0gICAgLy8gICAgeCdzIG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZCBt
X2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlIHdpbGwgYm90aCBiZQotICAgIC8vICAgIHdoYXRldmVy
IHN0cnVjdHVyZSB3ZSBjaGVja2VkIGZvciB3aGVuIGdldHRpbmcgJ2YnLgotICAgIC8vCi0gICAg
Ly8gNCkgeCA9IGZvbygpOwotICAgIC8vICAgIHkgPSB4LmY7Ci0gICAgLy8gICAgYmFyKCk7Ci0g
ICAgLy8KLSAgICAvLyAgICBXaGVyZSB4IGhhcyBhIHRlcm1pbmFsIHN0cnVjdHVyZSB0aGF0IGlz
IHN0aWxsIHdhdGNocG9pbnRhYmxlLiBJbiB0aGlzCi0gICAgLy8gICAgY2FzZSwgbV9jdXJyZW50
S25vd25TdHJ1Y3R1cmUgd2lsbCBiZSBUT1AgYmVjYXVzZSBiYXIoKSBtYXkgcG90ZW50aWFsbHkK
LSAgICAvLyAgICBjaGFuZ2UgeCdzIHN0cnVjdHVyZSBhbmQgd2UgaGF2ZSBubyB3YXkgb2YgcHJv
dmluZyBvdGhlcndpc2UsIGJ1dAotICAgIC8vICAgIHgncyBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0
dXJlIHdpbGwgYmUgd2hhdGV2ZXIgc3RydWN0dXJlIHdlIGhhZCBjaGVja2VkCi0gICAgLy8gICAg
d2hlbiBnZXR0aW5nIHByb3BlcnR5ICdmJy4KLSAgICAKLSAgICAvLyBOQi4gQWxsIGZpZWxkcyBp
biB0aGlzIHN0cnVjdCBtdXN0IGhhdmUgdHJpdmlhbCBkZXN0cnVjdG9ycy4KLQogICAgIC8vIFRo
aXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRoaXMgdmFs
dWUgY2FuIGhhdmUgcmlnaHQKICAgICAvLyBub3cuIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGN1cnJl
bnQgdmFsdWUgbXVzdCBiZWxvbmcgdG8gdGhpcyBzZXQuIFRoZSBzZXQgbWF5CiAgICAgLy8gYmUg
VE9QLCBpbmRpY2F0aW5nIHRoYXQgaXQgaXMgdGhlIHNldCBvZiBhbGwgcG9zc2libGUgc3RydWN0
dXJlcywgaW4gd2hpY2gKQEAgLTMwMSwyOSArMzE0LDEyIEBAIHN0cnVjdCBBYnN0cmFjdFZhbHVl
IHsKICAgICAvLyBpbiB3aGljaCBjYXNlIHRoaXMgdmFsdWUgY2Fubm90IGJlIGEgY2VsbC4gVGhp
cyBpcyBhbGwgc3ViamVjdCB0byBjaGFuZ2UKICAgICAvLyBhbnl0aW1lIGEgbmV3IHZhbHVlIGlz
IGFzc2lnbmVkIHRvIHRoaXMgb25lLCBhbnl0aW1lIHRoZXJlIGlzIGEgY29udHJvbCBmbG93CiAg
ICAgLy8gbWVyZ2UsIG9yIG1vc3QgY3J1Y2lhbGx5LCBhbnl0aW1lIGEgc2lkZS1lZmZlY3Qgb3Ig
c3RydWN0dXJlIGNoZWNrIGhhcHBlbnMuCi0gICAgLy8gSW4gY2FzZSBvZiBhIHNpZGUtZWZmZWN0
LCB3ZSB0eXBpY2FsbHkgbXVzdCBhc3N1bWUgdGhhdCBhbnkgdmFsdWUgbWF5IGhhdmUKLSAgICAv
LyBoYWQgaXRzIHN0cnVjdHVyZSBjaGFuZ2VkLCBoZW5jZSBjb250cmF2ZW5pbmcgb3VyIHByb29m
LiBXZSBtYWtlIHRoZSBwcm9vZgotICAgIC8vIHZhbGlkIGFnYWluIGJ5IHN3aXRjaGluZyB0aGlz
IHRvIFRPUCAoaS5lLiBjbGFpbWluZyB0aGF0IHdlIGhhdmUgcHJvdmVkIHRoYXQKLSAgICAvLyB0
aGlzIHZhbHVlIG1heSBoYXZlIGFueSBzdHJ1Y3R1cmUpLiBPZiBub3RlIGlzIHRoYXQgdGhlIHBy
b29mIHJlcHJlc2VudGVkIGJ5Ci0gICAgLy8gdGhpcyBmaWVsZCBpcyBub3Qgc3ViamVjdCB0byBz
dHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyAtIGV2ZW4gaWYgb25lCi0gICAgLy8gZmly
ZXMsIHdlIGNhbiBiZSBzdXJlIHRoYXQgdGhpcyBwcm9vZiBpcyBzdGlsbCB2YWxpZC4KLSAgICBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fY3VycmVudEtub3duU3RydWN0dXJlOwotICAgIAotICAg
IC8vIFRoaXMgaXMgYSBwcm92ZW4gY29uc3RyYWludCBvbiB0aGUgc3RydWN0dXJlcyB0aGF0IHRo
aXMgdmFsdWUgY2FuIGhhdmUgbm93Ci0gICAgLy8gb3IgYW55IHRpbWUgaW4gdGhlIGZ1dHVyZSBz
dWJqZWN0IHRvIHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyBvZgotICAgIC8v
IGFsbCBtZW1iZXJzIG9mIHRoaXMgc2V0IG5vdCBoYXZpbmcgZmlyZWQuIFRoaXMgc2V0IGlzIGlt
cGVydmlvdXMgdG8gc2lkZS0KLSAgICAvLyBlZmZlY3RzOyBldmVuIGlmIG9uZSBoYXBwZW5zIHRo
ZSBzaWRlLWVmZmVjdCBjYW4gb25seSBjYXVzZSB0aGUgdmFsdWUgdG8KLSAgICAvLyBjaGFuZ2Ug
dG8gYXQgd29yc3QgYW5vdGhlciBzdHJ1Y3R1cmUgdGhhdCBpcyBhbHNvIGEgbWVtYmVyIG9mIHRo
aXMgc2V0LiBCdXQsCi0gICAgLy8gdGhlIHRoZW9yZW0gYmVpbmcgcHJvdmVkIGJ5IHRoaXMgZmll
bGQgaXMgcHJlZGljYXRlZCB1cG9uIHRoZXJlIG5vdCBiZWluZwotICAgIC8vIGFueSBuZXcgc3Ry
dWN0dXJlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgaW50byBhbnkgbWVtYmVycyBvZiB0aGlzIHNl
dC4gSW4KLSAgICAvLyBjYXNlcyB3aGVyZSB0aGVyZSBpcyBubyB3YXkgZm9yIHVzIHRvIGd1YXJk
IHRoaXMgaGFwcGVuaW5nLCB0aGUgc2V0IG11c3QgYmUKLSAgICAvLyBUT1AuIEJ1dCBpbiBjYXNl
cyB3aGVyZSB3ZSBjYW4gZ3VhcmQgbmV3IHN0cnVjdHVyZSB0cmFuc2l0aW9ucyAoYWxsIG1lbWJl
cnMKLSAgICAvLyBvZiB0aGUgc2V0IGhhdmUgc3RpbGwtdmFsaWQgc3RydWN0dXJlIHRyYW5zaXRp
b24gd2F0Y2hwb2ludHMpIHRoZW4gdGhpcyBzZXQKLSAgICAvLyB3aWxsIGJlIGZpbml0ZS4gQW55
dGltZSB0aGF0IHdlIG1ha2UgdXNlIG9mIHRoZSBmaW5pdGUgbmF0dXJlIG9mIHRoaXMgc2V0LAot
ICAgIC8vIHdlIG11c3QgZmlyc3QgaXNzdWUgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBv
aW50LCB3aGljaCB3aWxsIGVmZmVjdGl2ZWx5Ci0gICAgLy8gcmVzdWx0IGluIG1fY3VycmVudEtu
b3duU3RydWN0dXJlIGJlaW5nIGZpbHRlcmVkIGFjY29yZGluZyB0bwotICAgIC8vIG1fZnV0dXJl
UG9zc2libGVTdHJ1Y3R1cmUuCi0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX2Z1dHVyZVBv
c3NpYmxlU3RydWN0dXJlOworICAgIC8vIEluIGNhc2Ugb2YgYSBzaWRlLWVmZmVjdCwgd2UgbXVz
dCBhc3N1bWUgdGhhdCBhbnkgdmFsdWUgd2l0aCBhIHN0cnVjdHVyZSB0aGF0CisgICAgLy8gaXNu
J3QgYmVpbmcgd2F0Y2hlZCBtYXkgaGF2ZSBoYWQgaXRzIHN0cnVjdHVyZSBjaGFuZ2VkLCBoZW5j
ZSBjb250cmF2ZW5pbmcKKyAgICAvLyBvdXIgcHJvb2YuIEluIHN1Y2ggYSBjYXNlIHdlIG1ha2Ug
dGhlIHByb29mIHZhbGlkIGFnYWluIGJ5IHN3aXRjaGluZyB0aGlzIHRvCisgICAgLy8gVE9QIChp
LmUuIGNsYWltaW5nIHRoYXQgd2UgaGF2ZSBwcm92ZWQgdGhhdCB0aGlzIHZhbHVlIG1heSBoYXZl
IGFueQorICAgIC8vIHN0cnVjdHVyZSkuCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX3N0
cnVjdHVyZTsKICAgICAKICAgICAvLyBUaGlzIGlzIGEgcHJvdmVuIGNvbnN0cmFpbnQgb24gdGhl
IHBvc3NpYmxlIHR5cGVzIHRoYXQgdGhpcyB2YWx1ZSBjYW4gaGF2ZQogICAgIC8vIG5vdyBvciBh
bnkgdGltZSBpbiB0aGUgZnV0dXJlLCB1bmxlc3MgaXQgaXMgcmVhc3NpZ25lZC4gVGhpcyBmaWVs
ZCBpcwpAQCAtMzMyLDExICszMjgsMTEgQEAgc3RydWN0IEFic3RyYWN0VmFsdWUgewogICAgIC8v
IGJldHdlZW4gdGhpcyBmaWVsZCwgYW5kIHRoZSBzdHJ1Y3R1cmUgZmllbGRzIGFib3ZlLCBpcyBh
cyBmb2xsb3dzLiBUaGUKICAgICAvLyBmaWVsZHMgYWJvdmUgY29uc3RyYWludCB0aGUgc3RydWN0
dXJlcyB0aGF0IGEgY2VsbCBtYXkgaGF2ZSwgYnV0IHRoZXkgc2F5CiAgICAgLy8gbm90aGluZyBh
Ym91dCB3aGV0aGVyIG9yIG5vdCB0aGUgdmFsdWUgaXMga25vd24gdG8gYmUgYSBjZWxsLiBNb3Jl
IGZvcm1hbGx5LAotICAgIC8vIHRoZSBtX2N1cnJlbnRLbm93blN0cnVjdHVyZSBpcyBpdHNlbGYg
YW4gYWJzdHJhY3QgdmFsdWUgdGhhdCBjb25zaXN0cyBvZiB0aGUKKyAgICAvLyB0aGUgbV9zdHJ1
Y3R1cmUgaXMgaXRzZWxmIGFuIGFic3RyYWN0IHZhbHVlIHRoYXQgY29uc2lzdHMgb2YgdGhlCiAg
ICAgLy8gdW5pb24gb2YgdGhlIHNldCBvZiBhbGwgbm9uLWNlbGwgdmFsdWVzIGFuZCB0aGUgc2V0
IG9mIGNlbGwgdmFsdWVzIHRoYXQgaGF2ZQogICAgIC8vIHRoZSBnaXZlbiBzdHJ1Y3R1cmUuIFRo
aXMgYWJzdHJhY3QgdmFsdWUgaXMgdGhlbiB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoZQotICAgIC8v
IG1fY3VycmVudEtub3duU3RydWN0dXJlIGFuZCB0aGUgc2V0IG9mIHZhbHVlcyB3aG9zZSB0eXBl
IGlzIG1fdHlwZS4gU28sIGZvcgotICAgIC8vIGV4YW1wbGUgaWYgbV90eXBlIGlzIFNwZWNGaW5h
bHxTcGVjSW50MzIgYW5kIG1fY3VycmVudEtub3duU3RydWN0dXJlIGlzCisgICAgLy8gbV9zdHJ1
Y3R1cmUgYW5kIHRoZSBzZXQgb2YgdmFsdWVzIHdob3NlIHR5cGUgaXMgbV90eXBlLiBTbywgZm9y
CisgICAgLy8gZXhhbXBsZSBpZiBtX3R5cGUgaXMgU3BlY0ZpbmFsfFNwZWNJbnQzMiBhbmQgbV9z
dHJ1Y3R1cmUgaXMKICAgICAvLyBbMHgxMjM0NV0gdGhlbiB0aGlzIGFic3RyYWN0IHZhbHVlIGNv
cnJlc3BvbmRzIHRvIHRoZSBzZXQgb2YgYWxsIGludGVnZXJzCiAgICAgLy8gdW5pZmllZCB3aXRo
IHRoZSBzZXQgb2YgYWxsIG9iamVjdHMgd2l0aCBzdHJ1Y3R1cmUgMHgxMjM0NS4KICAgICBTcGVj
dWxhdGVkVHlwZSBtX3R5cGU7CkBAIC0zNjQsNiArMzYwLDEyIEBAIHByaXZhdGU6CiAgICAgICAg
IG1fYXJyYXlNb2RlcyA9IEFMTF9BUlJBWV9NT0RFUzsKICAgICB9CiAgICAgCisgICAgdm9pZCBv
YnNlcnZlSW5kZXhpbmdUeXBlVHJhbnNpdGlvbihJbmRleGluZ1R5cGUgZnJvbSwgSW5kZXhpbmdU
eXBlIHRvKQorICAgIHsKKyAgICAgICAgaWYgKG1fYXJyYXlNb2RlcyAmIGFzQXJyYXlNb2Rlcyhm
cm9tKSkKKyAgICAgICAgICAgIG1fYXJyYXlNb2RlcyB8PSBhc0FycmF5TW9kZXModG8pOworICAg
IH0KKyAgICAKICAgICBib29sIHZhbGlkYXRlVHlwZShKU1ZhbHVlIHZhbHVlKSBjb25zdAogICAg
IHsKICAgICAgICAgaWYgKGlzSGVhcFRvcCgpKQpAQCAtMzkxLDE5ICszOTMsMTcgQEAgcHJpdmF0
ZToKICAgICB7CiAgICAgICAgIG1fdHlwZSB8PSB0b3A7CiAgICAgICAgIG1fYXJyYXlNb2RlcyA9
IEFMTF9BUlJBWV9NT0RFUzsKLSAgICAgICAgbV9jdXJyZW50S25vd25TdHJ1Y3R1cmUubWFrZVRv
cCgpOwotICAgICAgICBtX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOwogICAgICAgICBtX3ZhbHVlID0gSlNWYWx1ZSgpOwog
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc2V0RnV0
dXJlUG9zc2libGVTdHJ1Y3R1cmUoR3JhcGgmLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSk7Ci0KICAg
ICB2b2lkIGZpbHRlclZhbHVlQnlUeXBlKCk7CiAgICAgdm9pZCBmaWx0ZXJBcnJheU1vZGVzQnlU
eXBlKCk7CiAgICAgCiAgICAgYm9vbCBzaG91bGRCZUNsZWFyKCkgY29uc3Q7CiAgICAgRmlsdHJh
dGlvblJlc3VsdCBub3JtYWxpemVDbGFyaXR5KCk7CisgICAgRmlsdHJhdGlvblJlc3VsdCBub3Jt
YWxpemVDbGFyaXR5KEdyYXBoJik7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHJldmlzaW9uIDE2
OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQqIGFsbG9jYXRlKCk7
IC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGFsbG9jYXRlLCBhbmQgYXZvaWQgdXNpbmcgdGhpcyBt
ZXRob2QuCiAgICAgdm9pZCBmcmVlKFQqKTsgLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byBkZWxldGU7
IG5ldmVyIHVzZSAnZGVsZXRlJyBkaXJlY3RseS4KICAgICAKLSAgICB2b2lkIGZyZWVBbGwoKTsg
Ly8gT25seSBjYWxsIHRoaXMgaWYgVCBoYXMgYSB0cml2aWFsIGRlc3RydWN0b3IuCisgICAgdm9p
ZCBmcmVlQWxsKCk7IC8vIE9ubHkgY2FsbCB0aGlzIGlmIHlvdSd2ZSBlaXRoZXIgZnJlZWQgZXZl
cnl0aGluZyBvciBpZiBUIGhhcyBhIHRyaXZpYWwgZGVzdHJ1Y3Rvci4KICAgICB2b2lkIHJlc2V0
KCk7IC8vIExpa2UgZnJlZUFsbCgpLCBidXQgYWxzbyByZXR1cm5zIGFsbCBtZW1vcnkgdG8gdGhl
IE9TLgogICAgIAogICAgIHVuc2lnbmVkIGluZGV4T2YoY29uc3QgVCopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjUsNyArMzI1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVj
dHVyZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
OgogICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheToKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgZG9uJ3QgY2FyZSBhYm91dCB0aGVzZSBiZWNhdXNlIGlmIHdlIGdldCB1c2VzIG9mIHRo
ZSByZWxldmFudAogICAgICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZSB0aGVuIHdlIGNhbiBz
YWZlbHkgZ2V0IHJpZCBvZiB0aGVzZSwgdG9vLiBUaGlzIG9mIGNvdXJzZQpAQCAtNDQxLDcgKzQ0
MCw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgICAgICAgICAgICAgY2Fz
ZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgICAgICBjYXNlIENo
ZWNrQXJyYXk6IHsKICAgICAgICAgICAgICAgICAgICAgLy8gV2UgY2FuIGp1c3QgZ2V0IHJpZCBv
ZiB0aGlzIG5vZGUsIGlmIGl0IHJlZmVyZW5jZXMgYSBwaGFudG9tIGFyZ3VtZW50LgogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWlzT0tUb09wdGltaXplKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuY3BwCShyZXZp
c2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4OSwyNSArMjg5LDQ4IEBAIFN0cnVjdHVyZSogQXJyYXlN
b2RlOjpvcmlnaW5hbEFycmF5U3RydWMKIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlLCBJbmRleGluZ1R5
cGUgc2hhcGUpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChhcnJheUNsYXNzKCkpIHsKLSAgICBjYXNl
IEFycmF5OjpPcmlnaW5hbEFycmF5OgotICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25v
d25TdHJ1Y3R1cmUuaGFzU2luZ2xldG9uKCkKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJbmRleGluZ1No
YXBlTWFzaykgPT0gc2hhcGUKLSAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5zaW5nbGV0b24oKS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KQotICAgICAgICAg
ICAgJiYgZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPmlzT3Jp
Z2luYWxBcnJheVN0cnVjdHVyZSh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0
b24oKSk7CisgICAgY2FzZSBBcnJheTo6T3JpZ2luYWxBcnJheTogeworICAgICAgICBpZiAodmFs
dWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3RydWN0dXJlW2ldOwor
ICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdTaGFw
ZU1hc2spICE9IHNoYXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoIWdyYXBoLmdsb2JhbE9iamVj
dEZvcihub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmUoc3Ry
dWN0dXJlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgICAgICAKLSAgICBjYXNlIEFycmF5OjpBcnJheToK
KyAgICBjYXNlIEFycmF5OjpBcnJheTogewogICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlD
aGVja2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKHNoYXBlIHwgSXNBcnJheSkp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0b24oKQotICAgICAgICAgICAgJiYgKHZhbHVlLm1f
Y3VycmVudEtub3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4
aW5nU2hhcGVNYXNrKSA9PSBzaGFwZQotICAgICAgICAgICAgJiYgKHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLnNpbmdsZXRvbigpLT5pbmRleGluZ1R5cGUoKSAmIElzQXJyYXkpOworICAg
ICAgICBpZiAodmFsdWUubV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUubV9zdHJ1Y3R1cmUuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHZhbHVlLm1fc3Ry
dWN0dXJlW2ldOworICAgICAgICAgICAgaWYgKChzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYg
SW5kZXhpbmdTaGFwZU1hc2spICE9IHNoYXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGlmICghKHN0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQogICAgICAgICAKLSAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6IHsK
ICAgICAgICAgaWYgKGFycmF5TW9kZXNBbHJlYWR5Q2hlY2tlZCh2YWx1ZS5tX2FycmF5TW9kZXMs
IGFzQXJyYXlNb2RlcyhzaGFwZSkgfCBhc0FycmF5TW9kZXMoc2hhcGUgfCBJc0FycmF5KSkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHZhbHVlLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmhhc1NpbmdsZXRvbigpCi0gICAgICAgICAgICAmJiAodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpICYgSW5kZXhpbmdT
aGFwZU1hc2spID09IHNoYXBlOwotICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJl
LmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgIGlm
ICgoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSAmIEluZGV4aW5nU2hhcGVNYXNrKSAhPSBzaGFw
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSB9CiB9CiAKIGJvb2wgQXJyYXlNb2RlOjphbHJlYWR5Q2hlY2tlZChH
cmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUsIEFic3RyYWN0VmFsdWUmIHZhbHVlKSBjb25zdApAQCAt
MzM2LDIzICszNTksMzggQEAgYm9vbCBBcnJheU1vZGU6OmFscmVhZHlDaGVja2VkKEdyYXBoJiBn
cgogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAg
ICBzd2l0Y2ggKGFycmF5Q2xhc3MoKSkgewotICAgICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFy
cmF5OgorICAgICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OiB7CiAgICAgICAgICAgICBD
UkFTSCgpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgICAgIAot
ICAgICAgICBjYXNlIEFycmF5OjpBcnJheToKKyAgICAgICAgY2FzZSBBcnJheTo6QXJyYXk6IHsK
ICAgICAgICAgICAgIGlmIChhcnJheU1vZGVzQWxyZWFkeUNoZWNrZWQodmFsdWUubV9hcnJheU1v
ZGVzLCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFz
U2luZ2xldG9uKCkKLSAgICAgICAgICAgICAgICAmJiBoYXNBbnlBcnJheVN0b3JhZ2UodmFsdWUu
bV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKQotICAg
ICAgICAgICAgICAgICYmICh2YWx1ZS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5zaW5nbGV0b24o
KS0+aW5kZXhpbmdUeXBlKCkgJiBJc0FycmF5KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0
cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLm1fc3RydWN0dXJlLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdmFsdWUubV9zdHJ1Y3R1cmVb
aV07CisgICAgICAgICAgICAgICAgaWYgKCFoYXNBbnlBcnJheVN0b3JhZ2Uoc3RydWN0dXJlLT5p
bmRleGluZ1R5cGUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBpZiAoIShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpICYgSXNBcnJheSkpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rlc0FscmVhZHlDaGVj
a2VkKHZhbHVlLm1fYXJyYXlNb2RlcywgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2Rl
cyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgICAgICByZXR1cm4gdmFsdWUubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaGFzU2luZ2xl
dG9uKCkKLSAgICAgICAgICAgICAgICAmJiBoYXNBbnlBcnJheVN0b3JhZ2UodmFsdWUubV9jdXJy
ZW50S25vd25TdHJ1Y3R1cmUuc2luZ2xldG9uKCktPmluZGV4aW5nVHlwZSgpKTsKLSAgICAgICAg
fQorICAgICAgICAgICAgaWYgKHZhbHVlLm1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gdmFsdWUu
bV9zdHJ1Y3R1cmUuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSB2YWx1ZS5tX3N0cnVjdHVyZVtpXTsKKyAgICAgICAgICAgICAgICBpZiAoIWhh
c0FueUFycmF5U3RvcmFnZShzdHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0gfQogICAgICAgICAKICAgICBjYXNlIEFycmF5OjpBcmd1bWVudHM6
CiAgICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkNoZWNrZWQodmFsdWUubV90eXBlLCBTcGVjQXJn
dW1lbnRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXRU
YWlsQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0F0VGFpbEFic3RyYWN0U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MTIgKzU0LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIGlzVmFsaWQoKSB7IHJldHVybiBt
X2Jsb2NrLT5jZmFEaWRGaW5pc2g7IH0KICAgICAKKyAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUg
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+Y2ZhU3RydWN0
dXJlQ2xvYmJlclN0YXRlQXRUYWlsOyB9CisgICAgCiAgICAgdm9pZCBzZXREaWRDbG9iYmVyKGJv
b2wpIHsgfQorICAgIHZvaWQgc2V0U3RydWN0dXJlQ2xvYmJlclN0YXRlKFN0cnVjdHVyZUNsb2Ji
ZXJTdGF0ZSBzdGF0ZSkgeyBSRUxFQVNFX0FTU0VSVChzdGF0ZSA9PSBtX2Jsb2NrLT5jZmFTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwpOyB9CiAgICAgdm9pZCBzZXRJc1ZhbGlkKGJvb2wgaXNW
YWxpZCkgeyBtX2Jsb2NrLT5jZmFEaWRGaW5pc2ggPSBpc1ZhbGlkOyB9CiAgICAgdm9pZCBzZXRC
cmFuY2hEaXJlY3Rpb24oQnJhbmNoRGlyZWN0aW9uKSB7IH0KICAgICB2b2lkIHNldEZvdW5kQ29u
c3RhbnRzKGJvb2wpIHsgfQotICAgIGJvb2wgaGF2ZVN0cnVjdHVyZXMoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9IC8vIEl0J3MgYWx3YXlzIHNhZmUgdG8gcmV0dXJuIHRydWUuCi0gICAgdm9pZCBz
ZXRIYXZlU3RydWN0dXJlcyhib29sKSB7IH0KIAogcHJpdmF0ZToKICAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBAIEJhc2ljQmxvY2s6
OkJhc2ljQmxvY2soCiAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQogICAgICwgY2ZhRm91
bmRDb25zdGFudHMoZmFsc2UpCiAgICAgLCBjZmFEaWRGaW5pc2godHJ1ZSkKKyAgICAsIGNmYVN0
cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKKyAgICAsIGNm
YVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbChTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCkKICAgICAs
IGNmYUJyYW5jaERpcmVjdGlvbihJbnZhbGlkQnJhbmNoRGlyZWN0aW9uKQogI2lmICFBU1NFUlRf
RElTQUJMRUQKICAgICAsIGlzTGlua2VkKGZhbHNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiREZHQnJhbmNoRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSAiREZHRmx1
c2hlZEF0LmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR1N0cnVjdHVyZUNs
b2JiZXJTdGF0ZS5oIgogI2luY2x1ZGUgIk9wZXJhbmRzLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMTE2LDYgKzExNyw4IEBAIHN0cnVj
dCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICBib29sIGNmYVNob3VsZFJl
dmlzaXQ7CiAgICAgYm9vbCBjZmFGb3VuZENvbnN0YW50czsKICAgICBib29sIGNmYURpZEZpbmlz
aDsKKyAgICBTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgY2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRI
ZWFkOworICAgIFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBjZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVB
dFRhaWw7CiAgICAgQnJhbmNoRGlyZWN0aW9uIGNmYUJyYW5jaERpcmVjdGlvbjsKICNpZiAhQVNT
RVJUX0RJU0FCTEVECiAgICAgYm9vbCBpc0xpbmtlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnJhbmNoRGlyZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCcmFuY2hEaXJlY3Rpb24uaAkocmV2aXNpb24gMTY5NTc4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCcmFuY2hEaXJlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTAsNyArNTAsNyBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqIGJyYW5jaERpcmVj
dGlvCiB7CiAgICAgc3dpdGNoIChicmFuY2hEaXJlY3Rpb24pIHsKICAgICBjYXNlIEludmFsaWRC
cmFuY2hEaXJlY3Rpb246Ci0gICAgICAgIHJldHVybiAiSW52YWxpZCI7CisgICAgICAgIHJldHVy
biAiSW52YWxpZEJyYW5jaERpcmVjdGlvbiI7CiAgICAgY2FzZSBUYWtlVHJ1ZToKICAgICAgICAg
cmV0dXJuICJUYWtlVHJ1ZSI7CiAgICAgY2FzZSBUYWtlRmFsc2U6CkBAIC04MSw2ICs4MSwxNSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgYnJhbmNoQ29uZGl0aW9uKEJyYW5jCiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAorbmFtZXNwYWNlIFdURiB7CisKK2lubGluZSB2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSlNDOjpERkc6OkJyYW5jaERpcmVjdGlvbiBkaXJlY3Rp
b24pCit7CisgICAgb3V0LnByaW50KEpTQzo6REZHOjpicmFuY2hEaXJlY3Rpb25Ub1N0cmluZyhk
aXJlY3Rpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKIAogI2VuZGlmIC8vIERGR0JyYW5jaERpcmVjdGlvbl9oCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMTUsOCArMjExNSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgQVNTRVJUKHZhcmlhbnQub2xkU3RydWN0dXJlKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwogICAgIAogICAgIE5v
ZGUqIHByb3BlcnR5U3RvcmFnZTsKLSAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogdHJhbnNp
dGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAgICBT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSh2YXJpYW50Lm9sZFN0cnVjdHVyZSgpLCB2YXJpYW50Lm5l
d1N0cnVjdHVyZSgpKSk7CisgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90
cmFuc2l0aW9ucy5hZGQoCisgICAgICAgIHZhcmlhbnQub2xkU3RydWN0dXJlKCksIHZhcmlhbnQu
bmV3U3RydWN0dXJlKCkpOwogCiAgICAgaWYgKHZhcmlhbnQub2xkU3RydWN0dXJlKCktPm91dE9m
TGluZUNhcGFjaXR5KCkKICAgICAgICAgIT0gdmFyaWFudC5uZXdTdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSkgewpAQCAtMjEyNywxMCArMjEyNywxMCBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVQdXRCeUlkKAogCiAgICAgICAgIGlmICghdmFyaWFudC5vbGRTdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewogICAgICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0g
YWRkVG9HcmFwaCgKLSAgICAgICAgICAgICAgICBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJ
bmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisgICAgICAgICAgICAgICAgQWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uKSwgYmFzZSk7CiAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBhZGRUb0dyYXBoKAotICAgICAgICAgICAg
ICAgIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UsIE9wSW5mbyh0cmFuc2l0aW9uRGF0YSksCisg
ICAgICAgICAgICAgICAgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgT3BJbmZvKHRyYW5zaXRp
b24pLAogICAgICAgICAgICAgICAgIGJhc2UsIGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNl
KSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjE0MCw3ICsyMTQwLDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgICAgIHByb3BlcnR5U3RvcmFn
ZSA9IGFkZFRvR3JhcGgoR2V0QnV0dGVyZmx5LCBiYXNlKTsKICAgICB9CiAKLSAgICBhZGRUb0dy
YXBoKFB1dFN0cnVjdHVyZSwgT3BJbmZvKHRyYW5zaXRpb25EYXRhKSwgYmFzZSk7CisgICAgYWRk
VG9HcmFwaChQdXRTdHJ1Y3R1cmUsIE9wSW5mbyh0cmFuc2l0aW9uKSwgYmFzZSk7CiAKICAgICBh
ZGRUb0dyYXBoKAogICAgICAgICBQdXRCeU9mZnNldCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ0ZBUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NGQVBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtOTIsOCArOTIsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKG1fdmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2coIiAgIEJsb2NrICIsICpibG9jaywgIjpcbiIpOwogICAgICAgICBtX3N0
YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7Ci0gICAgICAgIGlmIChtX3ZlcmJvc2UpCisgICAg
ICAgIGlmIChtX3ZlcmJvc2UpIHsKICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIGhlYWQgdmFy
czogIiwgYmxvY2stPnZhbHVlc0F0SGVhZCwgIlxuIik7CisgICAgICAgICAgICBpZiAobV9ncmFw
aC5tX2Zvcm0gPT0gU1NBKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICAgIGhlYWQgcmVn
czogIiwgbWFwRHVtcChibG9jay0+c3NhLT52YWx1ZXNBdEhlYWQpLCAiXG4iKTsKKyAgICAgICAg
fQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBpZiAobV92ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IGJsb2NrLT5hdChpKTsKQEAgLTEwMiwxMCArMTA1LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICBpZiAoIXNhZmVUb0V4ZWN1dGUobV9zdGF0ZSwgbV9ncmFwaCwgbm9kZSkpCiAgICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2coIihVTlNBRkUpICIpOwogICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZHVtcChXVEY6OmRhdGFGaWxlKCkpOworICAg
ICAgICAgICAgICAgIGRhdGFMb2cobV9zdGF0ZS52YXJpYWJsZXMoKSwgIiAiLCBtX2ludGVycHJl
dGVyKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5oYXZl
U3RydWN0dXJlcygpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgKEhhdmUgU3RydWN0
dXJlcykiKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiXG4iKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICghbV9pbnRlcnByZXRlci5leGVjdXRlKGkpKSB7CkBAIC0xMjEsOCAr
MTIyLDExIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgbV9jaGFuZ2VkIHw9IG1fc3Rh
dGUuZW5kQmFzaWNCbG9jayhNZXJnZVRvU3VjY2Vzc29ycyk7CiAgICAgICAgIAotICAgICAgICBp
ZiAobV92ZXJib3NlKQorICAgICAgICBpZiAobV92ZXJib3NlKSB7CiAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgICB0YWlsIHZhcnM6ICIsIGJsb2NrLT52YWx1ZXNBdFRhaWwsICJcbiIpOworICAg
ICAgICAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKCIgICAgICBoZWFkIHJlZ3M6ICIsIG1hcER1bXAoYmxvY2stPnNzYS0+dmFsdWVzQXRUYWls
KSwgIlxuIik7CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBwZXJmb3JtRm9yd2Fy
ZENGQSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNlLmNwcAko
cmV2aXNpb24gMTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MCwxNyArNDYwLDExIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludDoKLSAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkgPT0gY2hpbGQxCi0gICAg
ICAgICAgICAgICAgICAgICYmIHN0cnVjdHVyZVNldC5jb250YWlucyhub2RlLT5zdHJ1Y3R1cmUo
KSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAg
ICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNoaWxkMQotICAgICAgICAgICAg
ICAgICAgICAmJiBzdHJ1Y3R1cmVTZXQuY29udGFpbnMobm9kZS0+c3RydWN0dXJlVHJhbnNpdGlv
bkRhdGEoKS5uZXdTdHJ1Y3R1cmUpKQorICAgICAgICAgICAgICAgICAgICAmJiBzdHJ1Y3R1cmVT
ZXQuY29udGFpbnMobm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKHN0cnVjdHVyZVNldC5jb250YWlu
cyhub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlKSkKKyAg
ICAgICAgICAgICAgICBpZiAoc3RydWN0dXJlU2V0LmNvbnRhaW5zKG5vZGUtPnRyYW5zaXRpb24o
KS0+cHJldmlvdXMpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC01MjQsNyArNTE4LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgUHV0U3RydWN0dXJlOgotICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLT5zdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlICE9IHN0cnVjdHVyZSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMgIT0gc3Ry
dWN0dXJlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CkBAIC01NDcsMTEgKzU0MSw2IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6
Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGUtPnN0cnVjdHVyZSgpID09IHN0cnVjdHVyZSAmJiBu
b2RlLT5jaGlsZDEoKSA9PSBjaGlsZDEpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2FzZSBBcnJheWlmeToKICAgICAgICAgICAgIGNhc2UgQXJyYXlpZnlUb1N0cnVjdHVyZToKICAg
ICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgYXJyYXlpZmljYXRpb24gY291
bGQgYWZmZWN0IG91ciBzdHJ1Y3R1cmVzLgpAQCAtMTM4NywxMyArMTM3Niw2IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAg
ICAgICAgICAgaWYgKGNzZU1vZGUgPT0gU3RvcmVFbGltaW5hdGlvbikKLSAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEVs
aW1pbmF0aW9uKG5vZGUtPnN0cnVjdHVyZSgpLCBub2RlLT5jaGlsZDEoKS5ub2RlKCkpKQotICAg
ICAgICAgICAgICAgIGVsaW1pbmF0ZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBpZiAoY3NlTW9kZSA9
PSBOb3JtYWxDU0UpCiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
OCw3ICs0MTgsNiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAg
ICAgfQogICAgICAgICAKICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgIGNhc2UgU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6CiAgICAgY2FzZSBJbnN0YW5jZU9mOgogICAgICAgICBy
ZWFkKEpTQ2VsbF9zdHJ1Y3R1cmVJRCk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5jcHAJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTUgKzMzLDIzIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAorc3RhdGlj
IHVuc2lnbmVkIGNyYXNoTG9jazsKKwogdm9pZCBzdGFydENyYXNoaW5nKCkKIHsKICNpZiBFTkFC
TEUoQ09NUEFSRV9BTkRfU1dBUCkKLSAgICBzdGF0aWMgdW5zaWduZWQgbG9jazsKLSAgICB3aGls
ZSAoIVdURjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZsb2NrLCAwLCAxKSkKKyAgICB3aGlsZSAoIVdU
Rjo6d2Vha0NvbXBhcmVBbmRTd2FwKCZjcmFzaExvY2ssIDAsIDEpKQogICAgICAgICBzdGQ6OnRo
aXNfdGhyZWFkOjp5aWVsZCgpOworI2Vsc2UKKyAgICBjcmFzaExvY2sgPSAxOwogI2VuZGlmCiB9
CiAKK2Jvb2wgaXNDcmFzaGluZygpCit7CisgICAgcmV0dXJuICEhY3Jhc2hMb2NrOworfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKIG5hbWVzcGFjZSBXVEYgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsNiAr
MjExLDggQEAgYm9vbCBjaGVja0FuZFNldChUJiBsZWZ0LCBVIHJpZ2h0KQogLy8gd2hlbiB5b3Un
cmUgZm9yY2luZyBhIGNyYXNoIHdpdGggZGlhZ25vc3RpY3MuCiB2b2lkIHN0YXJ0Q3Jhc2hpbmco
KTsKIAorSlNfRVhQT1JUX1BSSVZBVEUgYm9vbCBpc0NyYXNoaW5nKCk7CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NvbW1vbkRhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29tbW9uRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxLDggKzQxLDggQEAgdm9pZCBDb21tb25EYXRhOjpub3RpZnlDb21waWxpbmdTdHJ1Y3R1cgog
ICAgIHBsYW4udHJhbnNpdGlvbnMuYWRkTGF6aWx5KAogICAgICAgICBjb2RlQmxvY2ssCiAgICAg
ICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5jb2RlT3JpZ2luT3duZXIoKSwKLSAgICAgICAgbm9k
ZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSwKLSAgICAgICAg
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBu
b2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLAorICAgICAgICBub2RlLT50cmFuc2l0aW9uKCkt
Pm5leHQpOwogfQogCiB1bnNpZ25lZCBDb21tb25EYXRhOjphZGRDb2RlT3JpZ2luKENvZGVPcmln
aW4gY29kZU9yaWdpbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3Rh
bnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsMjcgKzk3LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IHNldCA9IG5vZGUtPnN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgc2V0ID0gbm9kZS0+c3RydWN0dXJlU2V0KCk7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbHVlLm1fY3VycmVudEtub3duU3RydWN0dXJlLmlzU3Vic2V0T2Yoc2V0KSkgeworICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKHNldCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8v
IENhdGNoIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgogICAgICAgICAgICAg
ICAgICAgICBub2RlLT5jb252ZXJ0VG9QaGFudG9tKCk7CiAgICAgICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJl
VmFsdWUgPSB2YWx1ZS5tX2Z1dHVyZVBvc3NpYmxlU3RydWN0dXJlOwotICAgICAgICAgICAgICAg
IGlmIChzdHJ1Y3R1cmVWYWx1ZS5pc1N1YnNldE9mKHNldCkKLSAgICAgICAgICAgICAgICAgICAg
JiYgc3RydWN0dXJlVmFsdWUuaGFzU2luZ2xldG9uKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVWYWx1ZS5zaW5nbGV0b24oKTsKLSAgICAg
ICAgICAgICAgICAgICAgbV9pbnRlcnByZXRlci5leGVjdXRlKGluZGV4SW5CbG9jayk7IC8vIENh
dGNoIHRoZSBmYWN0IHRoYXQgd2UgbWF5IGZpbHRlciBvbiBjZWxsLgotICAgICAgICAgICAgICAg
ICAgICBBZGphY2VuY3lMaXN0IGNoaWxkcmVuID0gbm9kZS0+Y2hpbGRyZW47Ci0gICAgICAgICAg
ICAgICAgICAgIGNoaWxkcmVuLnJlbW92ZUVkZ2UoMCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghIWNoaWxkcmVuLmNoaWxkMSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBQaGFudG9tLCBub2RlLT5v
cmlnaW4sIGNoaWxkcmVuKTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4uc2V0
Q2hpbGQyKEVkZ2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuLnNldENo
aWxkMyhFZGdlKCkpOwotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb252ZXJ0VG9TdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgICAgICAgICBl
bGltaW5hdGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIApAQCAtMTU2LDcgKzE0MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTm9k
ZSogY2hpbGQgPSBjaGlsZEVkZ2Uubm9kZSgpOwogICAgICAgICAgICAgICAgIE11bHRpR2V0QnlP
ZmZzZXREYXRhJiBkYXRhID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKTsKIAotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5i
ZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgCkBAIC0xODAsNyArMTY1LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBOb2RlKiBjaGlsZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgTXVsdGlQdXRCeU9mZnNldERhdGEmIGRhdGEgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0
YSgpOwogCi0gICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZv
ck5vZGUoY2hpbGQpLmJlc3RQcm92ZW5TdHJ1Y3R1cmUoKTsKKyAgICAgICAgICAgICAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IG1fc3RhdGUuZm9yTm9kZShjaGlsZCkubV9zdHJ1Y3R1cmUub25s
eVN0cnVjdHVyZSgpOwogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKQEAgLTIwNSw3ICsxOTAsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChjaGlsZEVkZ2UudXNlS2luZCgpICE9IENlbGxV
c2UpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5i
ZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0dXJlLm9ubHlTdHJ1Y3R1cmUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKQEAgLTIzMiw3ICsyMTcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIEFTU0VSVChjaGlsZEVkZ2UudXNlS2luZCgpID09IENlbGxVc2UpOwogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9z
dGF0ZS5mb3JOb2RlKGNoaWxkKS5iZXN0UHJvdmVuU3RydWN0dXJlKCk7CisgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtX3N0YXRlLmZvck5vZGUoY2hpbGQpLm1fc3RydWN0
dXJlLm9ubHlTdHJ1Y3R1cmUoKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZSkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgCkBAIC0yOTgsNyArMjgz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIC8vIHRoZW4gd2UgcmVmdXNlIHRvIGZvbGQuCiAg
ICAgICAgICAgICBBYnN0cmFjdFZhbHVlIG9sZFZhbHVlID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUp
OwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSBjb25zdGFudFZhbHVlOwotICAgICAgICAgICAg
Y29uc3RhbnRWYWx1ZS5zZXQobV9ncmFwaCwgdmFsdWUpOworICAgICAgICAgICAgY29uc3RhbnRW
YWx1ZS5zZXQobV9ncmFwaCwgdmFsdWUsIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkp
OwogICAgICAgICAgICAgY29uc3RhbnRWYWx1ZS5maXhUeXBlRm9yUmVwcmVzZW50YXRpb24obm9k
ZSk7CiAgICAgICAgICAgICBpZiAob2xkVmFsdWUubWVyZ2UoY29uc3RhbnRWYWx1ZSkpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CkBAIC0zMjksMjIgKzMxNCwxNyBAQCBwcml2YXRlOgogICAg
ICAgICBFZGdlIGNoaWxkRWRnZSA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICBOb2RlKiBjaGls
ZCA9IGNoaWxkRWRnZS5ub2RlKCk7CiAKLSAgICAgICAgYm9vbCBuZWVkc1dhdGNocG9pbnQgPSAh
bV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0cnVjdHVyZS5oYXNTaW5nbGV0
b24oKTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1fc3RhdGUuZm9yTm9kZShjaGls
ZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKCF2YXJpYW50
LmNoYWluKCkpOwotICAgICAgICBBU1NFUlQodmFyaWFudC5zdHJ1Y3R1cmVTZXQoKS5jb250YWlu
cyhzdHJ1Y3R1cmUpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzdHJ1Y3R1cmUsIHZhcmlhbnQu
c3RydWN0dXJlU2V0KCkuY29udGFpbnMoc3RydWN0dXJlKSk7CiAgICAgICAgIAogICAgICAgICAv
LyBOb3cgYmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHB1c2ggdGhlIENGQSBmb3J3YXJkIG92
ZXIgdGhlIEdldEJ5SWQKICAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSB3ZSBzaWduYWwgdG8gdGhl
IGxvb3AgdGhhdCBpdCBzaG91bGQgY29udGludWUgYW5kIG5vdAogICAgICAgICAvLyBkbyBhbnkg
ZWxpbWluYXRpb25zLgogICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUoaW5kZXhJbkJsb2Nr
KTsKICAgICAgICAgCi0gICAgICAgIGlmIChuZWVkc1dhdGNocG9pbnQpIHsKLSAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCi0gICAgICAgICAgICAgICAgaW5kZXhJbkJsb2Nr
LCBTcGVjTm9uZSwgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQsIG9yaWdpbiwKLSAgICAg
ICAgICAgICAgICBPcEluZm8oc3RydWN0dXJlKSwgY2hpbGRFZGdlKTsKLSAgICAgICAgfSBlbHNl
IGlmIChuZWVkc0NlbGxDaGVjaykgeworICAgICAgICBpZiAobmVlZHNDZWxsQ2hlY2spIHsKICAg
ICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgaW5k
ZXhJbkJsb2NrLCBTcGVjTm9uZSwgUGhhbnRvbSwgb3JpZ2luLCBjaGlsZEVkZ2UpOwogICAgICAg
ICB9CkBAIC0zODEsNyArMzYxLDYgQEAgcHJpdmF0ZToKIAogICAgICAgICBBU1NFUlQodmFyaWFu
dC5vbGRTdHJ1Y3R1cmUoKSA9PSBzdHJ1Y3R1cmUpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBu
ZWVkc1dhdGNocG9pbnQgPSAhbV9zdGF0ZS5mb3JOb2RlKGNoaWxkKS5tX2N1cnJlbnRLbm93blN0
cnVjdHVyZS5oYXNTaW5nbGV0b24oKTsKICAgICAgICAgYm9vbCBuZWVkc0NlbGxDaGVjayA9IG1f
c3RhdGUuZm9yTm9kZShjaGlsZCkubV90eXBlICYgflNwZWNDZWxsOwogICAgICAgICAKICAgICAg
ICAgLy8gTm93IGJlZm9yZSB3ZSBkbyBhbnl0aGluZyBlbHNlLCBwdXNoIHRoZSBDRkEgZm9yd2Fy
ZCBvdmVyIHRoZSBQdXRCeUlkCkBAIC0zODksMjEgKzM2OCwxNiBAQCBwcml2YXRlOgogICAgICAg
ICAvLyBkbyBhbnkgZWxpbWluYXRpb25zLgogICAgICAgICBtX2ludGVycHJldGVyLmV4ZWN1dGUo
aW5kZXhJbkJsb2NrKTsKIAotICAgICAgICBpZiAobmVlZHNXYXRjaHBvaW50KSB7Ci0gICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5C
bG9jaywgU3BlY05vbmUsIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0g
ICAgICAgICAgICAgICAgT3BJbmZvKHN0cnVjdHVyZSksIGNoaWxkRWRnZSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAobmVlZHNDZWxsQ2hlY2spIHsKKyAgICAgICAgaWYgKG5lZWRzQ2VsbENoZWNrKSB7
CiAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAg
IGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFBoYW50b20sIG9yaWdpbiwgY2hpbGRFZGdlKTsKICAg
ICAgICAgfQogCiAgICAgICAgIGNoaWxkRWRnZS5zZXRVc2VLaW5kKEtub3duQ2VsbFVzZSk7CiAK
LSAgICAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEqIHRyYW5zaXRpb25EYXRhID0gMDsKKyAg
ICAgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IDA7CiAgICAgICAgIGlmICh2YXJpYW50Lmtp
bmQoKSA9PSBQdXRCeUlkVmFyaWFudDo6VHJhbnNpdGlvbikgewotICAgICAgICAgICAgdHJhbnNp
dGlvbkRhdGEgPSBtX2dyYXBoLmFkZFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKAotICAgICAgICAg
ICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKHN0cnVjdHVyZSwgdmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSkpOworICAgICAgICAgICAgdHJhbnNpdGlvbiA9IG1fZ3JhcGgubV90cmFuc2l0aW9u
cy5hZGQoc3RydWN0dXJlLCB2YXJpYW50Lm5ld1N0cnVjdHVyZSgpKTsKIAogICAgICAgICAgICAg
aWYgKG5vZGUtPm9wKCkgPT0gUHV0QnlJZCkgewogICAgICAgICAgICAgICAgIGlmICghc3RydWN0
dXJlLT5zdG9yZWRQcm90b3R5cGUoKS5pc051bGwoKSkgewpAQCAtNDM5LDcgKzQxMyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBBU1NFUlQoIWlzSW5saW5lT2Zmc2V0KHZhcmlhbnQub2Zmc2V0
KCkpKTsKICAgICAgICAgICAgIE5vZGUqIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNl
cnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNO
b25lLCBBbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwKLSAgICAgICAgICAgICAgICBvcmlnaW4sIE9w
SW5mbyh0cmFuc2l0aW9uRGF0YSksIGNoaWxkRWRnZSk7CisgICAgICAgICAgICAgICAgb3JpZ2lu
LCBPcEluZm8odHJhbnNpdGlvbiksIGNoaWxkRWRnZSk7CiAgICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKGluZGV4SW5CbG9jaywgU3BlY05vbmUsIFN0b3JlQmFycmllciwgb3Jp
Z2luLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSwgS25vd25DZWxsVXNlKSk7CiAgICAgICAg
ICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBFZGdlKGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKTsKICAg
ICAgICAgfSBlbHNlIHsKQEAgLTQ0OSw3ICs0MjMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAg
ICBOb2RlKiByZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
Tm9kZSgKICAgICAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBSZWFsbG9jYXRl
UHJvcGVydHlTdG9yYWdlLCBvcmlnaW4sCi0gICAgICAgICAgICAgICAgT3BJbmZvKHRyYW5zaXRp
b25EYXRhKSwgY2hpbGRFZGdlLAorICAgICAgICAgICAgICAgIE9wSW5mbyh0cmFuc2l0aW9uKSwg
Y2hpbGRFZGdlLAogICAgICAgICAgICAgICAgIEVkZ2UobV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9k
ZSgKICAgICAgICAgICAgICAgICAgICAgaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgR2V0QnV0dGVy
Zmx5LCBvcmlnaW4sIGNoaWxkRWRnZSkpKTsKICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmlu
c2VydE5vZGUoaW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgU3RvcmVCYXJyaWVyLCBvcmlnaW4sIEVk
Z2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpLCBLbm93bkNlbGxVc2UpKTsKQEAgLTQ1Nyw3ICs0MzEs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICAgICAgICAgaWYgKHZhcmlhbnQua2luZCgpID09
IFB1dEJ5SWRWYXJpYW50OjpUcmFuc2l0aW9uKSB7Ci0gICAgICAgICAgICBOb2RlKiBwdXRTdHJ1
Y3R1cmUgPSBtX2dyYXBoLmFkZE5vZGUoU3BlY05vbmUsIFB1dFN0cnVjdHVyZSwgb3JpZ2luLCBP
cEluZm8odHJhbnNpdGlvbkRhdGEpLCBjaGlsZEVkZ2UpOworICAgICAgICAgICAgTm9kZSogcHV0
U3RydWN0dXJlID0gbV9ncmFwaC5hZGROb2RlKFNwZWNOb25lLCBQdXRTdHJ1Y3R1cmUsIG9yaWdp
biwgT3BJbmZvKHRyYW5zaXRpb24pLCBjaGlsZEVkZ2UpOwogICAgICAgICAgICAgbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZShpbmRleEluQmxvY2ssIFNwZWNOb25lLCBTdG9yZUJhcnJpZXIsIG9y
aWdpbiwgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIEtub3duQ2VsbFVzZSkpOwogICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0KGluZGV4SW5CbG9jaywgcHV0U3RydWN0dXJlKTsK
ICAgICAgICAgfQpAQCAtNDc1LDE2ICs0NDksMTIgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRk
U3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKE5vZGVPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBpbmRl
eEluQmxvY2ssIEpTQ2VsbCogY2VsbCkKICAgICB7CisgICAgICAgIGlmIChtX2dyYXBoLndhdGNo
cG9pbnRzKCkuY29uc2lkZXIoY2VsbC0+c3RydWN0dXJlKCkpKQorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIE5vZGUqIHdlYWtDb25zdGFudCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5v
ZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIHNwZWN1bGF0aW9uRnJvbVZhbHVlKGNlbGwp
LCBXZWFrSlNDb25zdGFudCwgb3JpZ2luLCBPcEluZm8oY2VsbCkpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQoY2VsbC0+c3RydWN0dXJl
KCktPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlv
blNldC5pbnNlcnROb2RlKAotICAgICAgICAgICAgICAgIGluZGV4SW5CbG9jaywgU3BlY05vbmUs
IFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50LCBvcmlnaW4sCi0gICAgICAgICAgICAgICAg
T3BJbmZvKGNlbGwtPnN0cnVjdHVyZSgpKSwgRWRnZSh3ZWFrQ29uc3RhbnQsIENlbGxVc2UpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydE5vZGUoCiAgICAgICAgICAgICBpbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0
cnVjdHVyZSwgb3JpZ2luLAogICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJl
U2V0KGNlbGwtPnN0cnVjdHVyZSgpKSksIEVkZ2Uod2Vha0NvbnN0YW50LCBDZWxsVXNlKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hw
b2ludHMuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDE0ICs2MiwxMiBA
QCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJyCiAgICAgbV9idWZmZXJW
aWV3cy5hZGRMYXppbHkodmlldyk7CiB9CiAKLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkoQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgV2F0Y2hwb2lu
dFNldCogc2V0KQorYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmNvbnNpZGVyKFN0cnVjdHVyZSog
c3RydWN0dXJlKQogewotICAgIG1fc2V0cy5hZGRMYXppbHkoY29kZU9yaWdpbiwgZXhpdEtpbmQs
IHNldCk7Ci19Ci0KLXZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoQ29kZU9yaWdp
biBjb2RlT3JpZ2luLCBFeGl0S2luZCBleGl0S2luZCwgSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0
KQotewotICAgIG1faW5saW5lU2V0cy5hZGRMYXppbHkoY29kZU9yaWdpbiwgZXhpdEtpbmQsICZz
ZXQpOworICAgIGlmICghc3RydWN0dXJlLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgYWRkTGF6aWx5KHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRT
ZXQoKSk7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpy
ZWFsbHlBZGQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbW1vbkRhdGEmIGNvbW1vbkRhdGEpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9p
bnRzLmgJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDI2ICszOSw3IEBACiAKIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdGVtcGxhdGU8dHlwZW5hbWUgV2F0Y2hw
b2ludFNldFR5cGU+Ci1zdHJ1Y3QgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0IHsK
LSAgICBXYXRjaHBvaW50Rm9yR2VuZXJpY1dhdGNocG9pbnRTZXQoKQotICAgICAgICA6IG1fZXhp
dEtpbmQoRXhpdEtpbmRVbnNldCkKLSAgICAgICAgLCBtX3NldCgwKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50U2V0KAotICAgICAgICBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kLCBXYXRjaHBvaW50U2V0VHlwZSog
c2V0KQotICAgICAgICA6IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQotICAgICAgICAsIG1fZXhp
dEtpbmQoZXhpdEtpbmQpCi0gICAgICAgICwgbV9zZXQoc2V0KQotICAgIHsKLSAgICB9Ci0gICAg
Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgRXhpdEtpbmQgbV9leGl0S2luZDsK
LSAgICBXYXRjaHBvaW50U2V0VHlwZSogbV9zZXQ7Ci19OworY2xhc3MgR3JhcGg7CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CiBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewpAQCAtOTUsMTIgKzc2
LDYgQEAgcHVibGljOgogICAgICAgICBtX3NldHMuYWRkKHNldCk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4gY29kZU9yaWdpbiwgRXhpdEtpbmQgZXhpdEtpbmQs
IFdhdGNocG9pbnRTZXRUeXBlKiBzZXQpCi0gICAgewotICAgICAgICBtX3Byb2ZpbGVkV2F0Y2hw
b2ludHMuYXBwZW5kKAotICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRjaHBvaW50
U2V0PFdhdGNocG9pbnRTZXRUeXBlPihjb2RlT3JpZ2luLCBleGl0S2luZCwgc2V0KSk7Ci0gICAg
fQotICAgIAogICAgIHZvaWQgcmVhbGx5QWRkKENvZGVCbG9jayogY29kZUJsb2NrLCBDb21tb25E
YXRhJiBjb21tb24pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9yZWFsbHlBZGRl
ZCk7CkBAIC0xMTIsMTQgKzg3LDYgQEAgcHVibGljOgogICAgICAgICAgICAgQWRhcHRvcjo6YWRk
KGNvZGVCbG9jaywgKml0ZXIsICZjb21tb24ud2F0Y2hwb2ludHMubGFzdCgpKTsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9wcm9maWxlZFdhdGNocG9p
bnRzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgV2F0Y2hwb2ludEZvckdlbmVyaWNXYXRj
aHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPiB3YXRjaHBvaW50ID0KLSAgICAgICAgICAgICAg
ICBtX3Byb2ZpbGVkV2F0Y2hwb2ludHNbaV07Ci0gICAgICAgICAgICBjb21tb24ucHJvZmlsZWRX
YXRjaHBvaW50cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgUHJvZmlsZWRDb2RlQmxvY2tKZXR0
aXNvbmluZ1dhdGNocG9pbnQod2F0Y2hwb2ludC5tX2NvZGVPcmlnaW4sIHdhdGNocG9pbnQubV9l
eGl0S2luZCwgY29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBBZGFwdG9yOjphZGQoY29kZUJsb2Nr
LCB3YXRjaHBvaW50Lm1fc2V0LCAmY29tbW9uLnByb2ZpbGVkV2F0Y2hwb2ludHMubGFzdCgpKTsK
LSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgbV9yZWFsbHlBZGRlZCA9IHRydWU7CiAgICAg
fQogICAgIApAQCAtMTMyLDUzICs5OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3Byb2ZpbGVkV2F0Y2hwb2ludHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
QWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKG1fcHJvZmlsZWRXYXRjaHBvaW50c1tpXS5tX3Nl
dCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0jaWYgQVNTRVJUX0RJU0FCTEVECi0g
ICAgYm9vbCBpc1N0aWxsVmFsaWQoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkKKyAgICBib29sIGlz
V2F0Y2hlZChXYXRjaHBvaW50U2V0VHlwZSogc2V0KSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0
dXJuICFBZGFwdG9yOjpoYXNCZWVuSW52YWxpZGF0ZWQoc2V0KTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBzaG91bGRBc3N1bWVNaXhlZFN0YXRlKFdhdGNocG9pbnRTZXRUeXBlKikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbHNlCi0gICAgYm9vbCBpc1N0aWxsVmFsaWQo
V2F0Y2hwb2ludFNldFR5cGUqIHNldCkKLSAgICB7Ci0gICAgICAgIGJvb2wgcmVzdWx0ID0gIUFk
YXB0b3I6Omhhc0JlZW5JbnZhbGlkYXRlZChzZXQpOwotICAgICAgICBtX2ZpcnN0S25vd25TdGF0
ZS5hZGQoc2V0LCByZXN1bHQpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAK
LSAgICBib29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoV2F0Y2hwb2ludFNldFR5cGUqIHNldCkK
LSAgICB7Ci0gICAgICAgIHR5cGVuYW1lIFN0YXRlTWFwOjppdGVyYXRvciBpdGVyID0gbV9maXJz
dEtub3duU3RhdGUuZmluZChzZXQpOwotICAgICAgICBpZiAoaXRlciA9PSBtX2ZpcnN0S25vd25T
dGF0ZS5lbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAg
IHJldHVybiBpdGVyLT52YWx1ZSAhPSAhQWRhcHRvcjo6aGFzQmVlbkludmFsaWRhdGVkKHNldCk7
Ci0gICAgfQotI2VuZGlmCi0gICAgCi0gICAgYm9vbCBpc1ZhbGlkT3JNaXhlZChXYXRjaHBvaW50
U2V0VHlwZSogc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzU3RpbGxWYWxpZChzZXQpIHx8
IHNob3VsZEFzc3VtZU1peGVkU3RhdGUoc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0cy5jb250
YWlucyhzZXQpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBWZWN0b3I8V2F0Y2hwb2ludEZvckdl
bmVyaWNXYXRjaHBvaW50U2V0PFdhdGNocG9pbnRTZXRUeXBlPj4gbV9wcm9maWxlZFdhdGNocG9p
bnRzOwogICAgIEhhc2hTZXQ8V2F0Y2hwb2ludFNldFR5cGUqPiBtX3NldHM7Ci0jaWYgIUFTU0VS
VF9ESVNBQkxFRAotICAgIFN0YXRlTWFwIG1fZmlyc3RLbm93blN0YXRlOwotI2VuZGlmCiAgICAg
Ym9vbCBtX3JlYWxseUFkZGVkOwogfTsKIApAQCAtMTkwLDQ4ICsxMjAsMjQgQEAgcHVibGljOgog
ICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXQqKTsKICAgICB2b2lkIGFkZExhemlseShJ
bmxpbmVXYXRjaHBvaW50U2V0Jik7CiAgICAgdm9pZCBhZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZp
ZXcqKTsKLSAgICB2b2lkIGFkZExhemlseShDb2RlT3JpZ2luLCBFeGl0S2luZCwgV2F0Y2hwb2lu
dFNldCopOwotICAgIHZvaWQgYWRkTGF6aWx5KENvZGVPcmlnaW4sIEV4aXRLaW5kLCBJbmxpbmVX
YXRjaHBvaW50U2V0Jik7CisgICAgCisgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKICAg
ICAKICAgICB2b2lkIHJlYWxseUFkZChDb2RlQmxvY2sqLCBDb21tb25EYXRhJik7CiAgICAgCiAg
ICAgYm9vbCBhcmVTdGlsbFZhbGlkKCkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBpc1N0aWxsVmFs
aWQoV2F0Y2hwb2ludFNldCogc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2V0cy5pc1N0
aWxsVmFsaWQoc2V0KTsKLSAgICB9Ci0gICAgYm9vbCBpc1N0aWxsVmFsaWQoSW5saW5lV2F0Y2hw
b2ludFNldCYgc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1N0aWxs
VmFsaWQoJnNldCk7Ci0gICAgfQotICAgIGJvb2wgaXNTdGlsbFZhbGlkKEpTQXJyYXlCdWZmZXJW
aWV3KiB2aWV3KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNTdGlsbFZh
bGlkKHZpZXcpOwotICAgIH0KLSAgICBib29sIHNob3VsZEFzc3VtZU1peGVkU3RhdGUoV2F0Y2hw
b2ludFNldCogc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fc2V0cy5zaG91bGRBc3N1bWVN
aXhlZFN0YXRlKHNldCk7Ci0gICAgfQotICAgIGJvb2wgc2hvdWxkQXNzdW1lTWl4ZWRTdGF0ZShJ
bmxpbmVXYXRjaHBvaW50U2V0JiBzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9pbmxpbmVT
ZXRzLnNob3VsZEFzc3VtZU1peGVkU3RhdGUoJnNldCk7Ci0gICAgfQotICAgIGJvb2wgc2hvdWxk
QXNzdW1lTWl4ZWRTdGF0ZShKU0FycmF5QnVmZmVyVmlldyogdmlldykKLSAgICB7Ci0gICAgICAg
IHJldHVybiBtX2J1ZmZlclZpZXdzLnNob3VsZEFzc3VtZU1peGVkU3RhdGUodmlldyk7Ci0gICAg
fQotICAgIGJvb2wgaXNWYWxpZE9yTWl4ZWQoV2F0Y2hwb2ludFNldCogc2V0KQorICAgIGJvb2wg
aXNXYXRjaGVkKFdhdGNocG9pbnRTZXQqIHNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Nl
dHMuaXNWYWxpZE9yTWl4ZWQoc2V0KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0cy5pc1dhdGNoZWQo
c2V0KTsKICAgICB9Ci0gICAgYm9vbCBpc1ZhbGlkT3JNaXhlZChJbmxpbmVXYXRjaHBvaW50U2V0
JiBzZXQpCisgICAgYm9vbCBpc1dhdGNoZWQoSW5saW5lV2F0Y2hwb2ludFNldCYgc2V0KQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1ZhbGlkT3JNaXhlZCgmc2V0KTsKKyAg
ICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1dhdGNoZWQoJnNldCk7CiAgICAgfQotICAgIGJv
b2wgaXNWYWxpZE9yTWl4ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCisgICAgYm9vbCBpc1dh
dGNoZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewotICAgICAgICByZXR1cm4gbV9i
dWZmZXJWaWV3cy5pc1ZhbGlkT3JNaXhlZCh2aWV3KTsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVy
Vmlld3MuaXNXYXRjaGVkKHZpZXcpOwogICAgIH0KICAgICAKIHByaXZhdGU6CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4Miw3ICsxODIsNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAg
ICAgY2FzZSBQdXRCeVZhbERpcmVjdDoKICAgICBjYXNlIFB1dEJ5VmFsOgogICAgIGNhc2UgUHV0
QnlWYWxBbGlhczoKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAg
IGNhc2UgUHV0U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICBj
YXNlIEdldEJ5T2Zmc2V0OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MzAsNyArOTMwLDYgQEAg
cHJpdmF0ZToKIAogICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKICAgICAgICAgY2FzZSBD
aGVja1N0cnVjdHVyZToKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dDoKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgogICAgICAgICBjYXNlIENoZWNrSGFzSW5z
dGFuY2U6CiAgICAgICAgIGNhc2UgQ3JlYXRlVGhpczoKQEAgLTEzNTEsNyArMTM1MCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBKU09iamVjdCogc3RyaW5nUHJvdG90eXBlT2JqZWN0
ID0gYXNPYmplY3Qoc3RyaW5nT2JqZWN0U3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGUoKSk7CiAg
ICAgICAgIFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlID0gc3RyaW5nUHJvdG90
eXBlT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgaWYgKCFtX2dyYXBoLndhdGNocG9pbnRz
KCkuaXNTdGlsbFZhbGlkKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNo
cG9pbnRTZXQoKSkpCisgICAgICAgIGlmICghbV9ncmFwaC53YXRjaHBvaW50cygpLmNvbnNpZGVy
KHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAogICAgICAgICBpZiAoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkKQEAgLTE5MDUsMjUgKzE5MDQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgYWRkUmVxdWlyZWRQaGFudG9tKGVkZ2Uubm9kZSgpKTsKIAorICAgICAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhZWRnZS0+aGFzRG91YmxlUmVzdWx0KCkpOworCiAg
ICAgICAgICAgICBOb2RlKiByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAoZWRnZS0+aGFzRG91Ymxl
UmVzdWx0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUaGlzIHdpbGwgbmV2ZXIgaGFwcGVuLgot
ICAgICAgICAgICAgICAgIHN0YXJ0Q3Jhc2hpbmcoKTsKLSAgICAgICAgICAgICAgICBkYXRhTG9n
KCJGb3VuZCBhbiBJbnQ1MlJlcFVzZSB0byBhIGRvdWJsZSByZXN1bHQ6ICIsIG5vZGUsICIgLT4g
IiwgZWRnZSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgbV9ncmFwaC5kdW1wKCk7Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0gZWxz
ZSBpZiAoZWRnZS0+c2hvdWxkU3BlY3VsYXRlSW50MzJGb3JBcml0aG1ldGljKCkpIHsKKyAgICAg
ICAgICAgIGlmIChlZGdlLT5zaG91bGRTcGVjdWxhdGVJbnQzMkZvckFyaXRobWV0aWMoKSkgewog
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAg
ICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50MzIsIEludDUyUmVwLCBub2Rl
LT5vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIEludDMyVXNl
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgb25s
eSBoZXJlIGZvciBkZWFsaW5nIHdpdGggY29uc3RhbnRzLgotICAgICAgICAgICAgICAgIGlmIChl
ZGdlLT5vcCgpICE9IEpTQ29uc3RhbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RhcnRDcmFz
aGluZygpOwotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGb3VuZCBhbiBJbnQ1MlJlcFVz
ZSBvbiBzb21ldGhpbmcgdGhhdCBpcyBuZWl0aGVyIEludDMyIG5vciBhIGNvbnN0YW50OiAiLCBu
b2RlLCAiIC0+ICIsIGVkZ2UsICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLmR1
bXAoKTsKLSAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBu
b2RlLCBlZGdlLT5vcCgpID09IEpTQ29uc3RhbnQpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJ
bkJsb2NrLCBTcGVjTWFjaGluZUludCwgSW50NTJDb25zdGFudCwgbm9kZS0+b3JpZ2luLAogICAg
ICAgICAgICAgICAgICAgICBPcEluZm8oZWRnZS0+Y29uc3RhbnROdW1iZXIoKSkpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE2OTU3OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Nyw2ICs3NywxNiBAQCBHcmFwaDo6R3JhcGgoVk0mIHZtLCBQbGFuJiBwbGFuLCBMb25nTGl2
CiAKIEdyYXBoOjp+R3JhcGgoKQogeworICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSB0aGlzLT5ibG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgcGhpSW5kZXggPSBibG9jay0+
cGhpcy5zaXplKCk7IHBoaUluZGV4LS07KQorICAgICAgICAgICAgbV9hbGxvY2F0b3IuZnJlZShi
bG9jay0+cGhpc1twaGlJbmRleF0pOworICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9
IGJsb2NrLT5zaXplKCk7IG5vZGVJbmRleC0tOykKKyAgICAgICAgICAgIG1fYWxsb2NhdG9yLmZy
ZWUoYmxvY2stPmF0KG5vZGVJbmRleCkpOworICAgIH0KICAgICBtX2FsbG9jYXRvci5mcmVlQWxs
KCk7CiB9CiAKQEAgLTIxMSw4ICsyMjEsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KG5vZGUtPnN0
cnVjdHVyZVNldCgpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0cnVjdHVyZSgpKQog
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIGluQ29udGV4dCgqbm9kZS0+c3RydWN0dXJlKCksIGNv
bnRleHQpKTsKLSAgICBpZiAobm9kZS0+aGFzU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKSkKLSAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoKm5vZGUtPnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUsIGNvbnRleHQpLCAiIC0+ICIsIGluQ29udGV4dCgq
bm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUsIGNvbnRleHQpKTsK
KyAgICBpZiAobm9kZS0+aGFzVHJhbnNpdGlvbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IHBvaW50ZXJEdW1wSW5Db250ZXh0KG5vZGUtPnRyYW5zaXRpb24oKSwgY29udGV4dCkpOwogICAg
IGlmIChub2RlLT5oYXNGdW5jdGlvbigpKSB7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgImZ1
bmN0aW9uKCIsIFJhd1BvaW50ZXIobm9kZS0+ZnVuY3Rpb24oKSksICIsICIpOwogICAgICAgICBp
ZiAobm9kZS0+ZnVuY3Rpb24oKS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSkgewpAQCAt
MzM4LDkgKzM0OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIlI6Iiwgc29ydGVkTGlzdER1bXAocmVhZHMuZGly
ZWN0KCksICIsIikpOwogICAgIGlmICghd3JpdGVzLmlzRW1wdHkoKSkKICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiVzoiLCBzb3J0ZWRMaXN0RHVtcCh3cml0ZXMuZGlyZWN0KCksICIsIikpOwot
ICAgIG91dC5wcmludChjb21tYSwgImJjIyIsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29k
ZUluZGV4KTsKLSAgICBpZiAobm9kZS0+b3JpZ2luLnNlbWFudGljICE9IG5vZGUtPm9yaWdpbi5m
b3JFeGl0KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJleGl0OiAiLCBub2RlLT5vcmlnaW4u
Zm9yRXhpdCk7CisgICAgaWYgKG5vZGUtPm9yaWdpbi5pc1NldCgpKSB7CisgICAgICAgIG91dC5w
cmludChjb21tYSwgImJjIyIsIG5vZGUtPm9yaWdpbi5zZW1hbnRpYy5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgaWYgKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyAhPSBub2RlLT5vcmlnaW4uZm9yRXhp
dCkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgImV4aXQ6ICIsIG5vZGUtPm9yaWdpbi5m
b3JFeGl0KTsKKyAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KCIpIik7CiAKQEAgLTM1Niw3ICsz
NjgsNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAKIHZvaWQg
R3JhcGg6OmR1bXBCbG9ja0hlYWRlcihQcmludFN0cmVhbSYgb3V0LCBjb25zdCBjaGFyKiBwcmVm
aXgsIEJhc2ljQmxvY2sqIGJsb2NrLCBQaGlOb2RlRHVtcE1vZGUgcGhpTm9kZUR1bXBNb2RlLCBE
dW1wQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBvdXQucHJpbnQocHJlZml4LCAiQmxvY2sgIiwg
KmJsb2NrLCAiICgiLCBpbkNvbnRleHQoYmxvY2stPmF0KDApLT5vcmlnaW4uc2VtYW50aWMsIGNv
bnRleHQpLCAiKTogIiwgYmxvY2stPmlzUmVhY2hhYmxlID8gIiIgOiAiKHNraXBwZWQpIiwgYmxv
Y2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIsICJcbiIpOworICAgIG91dC5w
cmludChwcmVmaXgsICJCbG9jayAiLCAqYmxvY2ssICIgKCIsIGluQ29udGV4dChibG9jay0+YXQo
MCktPm9yaWdpbi5zZW1hbnRpYywgY29udGV4dCksICIpOiIsIGJsb2NrLT5pc1JlYWNoYWJsZSA/
ICIiIDogIiAoc2tpcHBlZCkiLCBibG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIg
OiAiIiwgYmxvY2stPmNmYUhhc1Zpc2l0ZWQgPyAiIiA6ICIgKENGQS11bnJlYWNoYWJsZSkiLCAi
XG4iKTsKICAgICBpZiAoYmxvY2stPmV4ZWN1dGlvbkNvdW50ID09IGJsb2NrLT5leGVjdXRpb25D
b3VudCkKICAgICAgICAgb3V0LnByaW50KHByZWZpeCwgIiAgRXhlY3V0aW9uIGNvdW50OiAiLCBi
bG9jay0+ZXhlY3V0aW9uQ291bnQsICJcbiIpOwogICAgIG91dC5wcmludChwcmVmaXgsICIgIFBy
ZWRlY2Vzc29yczoiKTsKQEAgLTQzOSwxNiArNDUxLDE3IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCwgRHVtcEMKICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICBkdW1wQmxvY2tIZWFkZXIob3V0LCAiIiwgYmxvY2ssIER1bXBBbGxQ
aGlzLCBjb250ZXh0KTsKKyAgICAgICAgb3V0LnByaW50KCIgIFN0YXRlczogIiwgYmxvY2stPmNm
YVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZCwgIlxuIik7CiAgICAgICAgIHN3aXRjaCAobV9m
b3JtKSB7CiAgICAgICAgIGNhc2UgTG9hZFN0b3JlOgogICAgICAgICBjYXNlIFRocmVhZGVkQ1BT
OiB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAgdmFycyBiZWZvcmU6ICIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgIFZhcnMgQmVmb3JlOiAiKTsKICAgICAgICAgICAgIGlmIChibG9jay0+
Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoaW5Db250ZXh0KGJsb2Nr
LT52YWx1ZXNBdEhlYWQsIGNvbnRleHQpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAgICAgICAgIG91dC5wcmludCgiXG4iKTsK
LSAgICAgICAgICAgIG91dC5wcmludCgiICB2YXIgbGlua3M6ICIsIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgIFZhciBMaW5rczogIiwgYmxv
Y2stPnZhcmlhYmxlc0F0SGVhZCwgIlxuIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC00NjQsMTYgKzQ3NywxNyBAQCB2b2lkIEdyYXBoOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDCiAgICAgICAgICAgICBkdW1wKG91dCwgIiIsIGJsb2NrLT5h
dChpKSwgY29udGV4dCk7CiAgICAgICAgICAgICBsYXN0Tm9kZSA9IGJsb2NrLT5hdChpKTsKICAg
ICAgICAgfQorICAgICAgICBvdXQucHJpbnQoIiAgU3RhdGVzOiAiLCBibG9jay0+Y2ZhQnJhbmNo
RGlyZWN0aW9uLCAiLCAiLCBibG9jay0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsLCAi
XG4iKTsKICAgICAgICAgc3dpdGNoIChtX2Zvcm0pIHsKICAgICAgICAgY2FzZSBMb2FkU3RvcmU6
CiAgICAgICAgIGNhc2UgVGhyZWFkZWRDUFM6IHsKLSAgICAgICAgICAgIG91dC5wcmludCgiICB2
YXJzIGFmdGVyOiAiKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICBWYXJzIEFmdGVyOiAiKTsK
ICAgICAgICAgICAgIGlmIChibG9jay0+Y2ZhSGFzVmlzaXRlZCkKICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoaW5Db250ZXh0KGJsb2NrLT52YWx1ZXNBdFRhaWwsIGNvbnRleHQpKTsKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIjxlbXB0eT4iKTsKICAgICAg
ICAgICAgIG91dC5wcmludCgiXG4iKTsKLSAgICAgICAgICAgIG91dC5wcmludCgiICB2YXIgbGlu
a3M6ICIsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwsICJcbiIpOworICAgICAgICAgICAgb3V0LnBy
aW50KCIgIFZhciBMaW5rczogIiwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCwgIlxuIik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC04MDAsOCArODE0LDkg
QEAgSlNBcnJheUJ1ZmZlclZpZXcqIEdyYXBoOjp0cnlHZXRGb2xkYWJsZQogICAgIEpTQXJyYXlC
dWZmZXJWaWV3KiB2aWV3ID0ganNEeW5hbWljQ2FzdDxKU0FycmF5QnVmZmVyVmlldyo+KHZhbHVl
T2ZKU0NvbnN0YW50KG5vZGUpKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIGlmICghd2F0Y2hwb2ludHMoKS5pc1N0aWxsVmFsaWQodmlldykpCisgICAgaWYgKCF2aWV3
LT5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7
CiAgICAgcmV0dXJuIHZpZXc7CiB9CiAKQEAgLTg0Niw3ICs4NjEsNiBAQCB2b2lkIEdyYXBoOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIobm9kZS0+c3RydWN0dXJlU2V0KClbaV0p
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
Y2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDoKICAgICAgICAgICAgIGNhc2UgTmV3
T2JqZWN0OgogICAgICAgICAgICAgY2FzZSBBcnJheWlmeVRvU3RydWN0dXJlOgogICAgICAgICAg
ICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CkBAIC04NTgsOSArODcyLDM0IEBAIHZvaWQgR3JhcGg6
OnZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgIGNhc2UgQWxsb2NhdGVQ
cm9wZXJ0eVN0b3JhZ2U6CiAgICAgICAgICAgICBjYXNlIFJlYWxsb2NhdGVQcm9wZXJ0eVN0b3Jh
Z2U6CiAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9p
bnRlcigKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEo
KS5wcmV2aW91c1N0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgICAgIG5vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMpOwogICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRSZWFkT25seVBvaW50ZXIoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZVRy
YW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS0+
dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRz
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFy
aWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAg
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVZhbHVlKHZhcmlh
bnQuc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RydWN0dXJl
U2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOworICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgpOyBqLS07KQorICAgICAgICAgICAgICAgICAgICAg
ICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihzZXRbal0pOworCisg
ICAgICAgICAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gbWFyayBhbnl0aGluZyBpbiB0aGUg
c3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAorICAgICAgICAgICAgICAgICAgICAv
LyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQg
dG8gbWFyayB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVz
ZSB3ZSB3b3VsZG4ndCB1c2UgTXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCisgICAgICAg
ICAgICAgICAgICAgIC8vIHZhcmlhbnRzIGRpZCB0aGF0LgorICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgTXVsdGlQdXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgeworICAg
ICAgICAgICAgICAgICAgICBQdXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpUHV0
QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07CisgICAgICAgICAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmtpbmQoKSA9PSBQdXRCeUlkVmFyaWFu
dDo6VHJhbnNpdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWRSZWFkT25seVBvaW50ZXIodmFyaWFudC5uZXdTdHJ1Y3R1cmUoKSk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTg3MCw2ICs5MDksMzUgQEAgdm9pZCBHcmFwaDo6dmlzaXRD
aGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgIH0KIH0KIAordm9pZCBHcmFwaDo6YXNzZXJ0SXNX
YXRjaGVkKFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGlmICghc3RydWN0dXJlLT5kZmdT
aG91bGRXYXRjaCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHdhdGNocG9pbnRzKCkuaXNX
YXRjaGVkKHN0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBERkdfQ1JBU0goKnRoaXMsIG51bGxwdHIsIHRvQ1N0cmluZygiU3Ry
dWN0dXJlICIsIHBvaW50ZXJEdW1wKHN0cnVjdHVyZSksICIgaXMgd2F0Y2hhYmxlIGJ1dCBpc24n
dCBiZWluZyB3YXRjaGVkLiIpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR3JhcGg6OmhhbmRsZUFzc2Vy
dGlvbkZhaWx1cmUoCisgICAgTm9kZSogbm9kZSwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUs
IGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBhc3NlcnRpb24pCit7CisgICAgc3Rh
cnRDcmFzaGluZygpOworICAgIGRhdGFMb2coIkRGRyBBU1NFUlRJT04gRkFJTEVEOiAiLCBhc3Nl
cnRpb24sICJcbiIpOworICAgIGRhdGFMb2coZmlsZSwgIigiLCBsaW5lLCAiKSA6ICIsIGZ1bmN0
aW9uLCAiXG4iKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGlmIChub2RlKSB7CisgICAgICAg
IGRhdGFMb2coIldoaWxlIGhhbmRsaW5nIG5vZGUgIiwgbm9kZSwgIlxuIik7CisgICAgICAgIGRh
dGFMb2coIlxuIik7CisgICAgfQorICAgIGRhdGFMb2coIkdyYXBoIGF0IHRpbWUgb2YgZmFpbHVy
ZTpcbiIpOworICAgIGR1bXAoKTsKKyAgICBkYXRhTG9nKCJcbiIpOworICAgIGRhdGFMb2coIkRG
RyBBU1NFUlRJT04gRkFJTEVEOiAiLCBhc3NlcnRpb24sICJcbiIpOworICAgIGRhdGFMb2coZmls
ZSwgIigiLCBsaW5lLCAiKSA6ICIsIGZ1bmN0aW9uLCAiXG4iKTsKKyAgICBDUkFTSCgpOworfQor
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE2OTU3OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtMTY5LDggKzE2OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb25zdGFudFJlZ2lz
dGVyOwogICAgIH0KICAgICAKKyAgICB2b2lkIGFzc2VydElzV2F0Y2hlZChTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSk7CisgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9Db25zdGFudChOb2RlKiBub2RlLCBK
U1ZhbHVlIHZhbHVlKQogICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAg
ICAgICAgYXNzZXJ0SXNXYXRjaGVkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CiAgICAg
ICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKQogICAgICAgICAgICAgbm9kZS0+Y29udmVydFRvV2Vh
a0NvbnN0YW50KHZhbHVlLmFzQ2VsbCgpKTsKICAgICAgICAgZWxzZQpAQCAtMzkwLDEyICszOTQs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAmbV9zdHJ1Y3R1cmVTZXQubGFzdCgpOwogICAg
IH0KICAgICAKLSAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSogYWRkU3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoY29uc3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEmIHN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKQotICAgIHsKLSAgICAgICAgbV9zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YS5hcHBlbmQo
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEpOwotICAgICAgICByZXR1cm4gJm1fc3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEubGFzdCgpOwotICAgIH0KLSAgICAKICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0Rm9yKENvZGVPcmlnaW4gY29kZU9yaWdpbikKICAgICB7CiAgICAgICAgIHJldHVy
biBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0Rm9yKGNvZGVPcmlnaW4pOwpAQCAtNDQ2LDggKzQ0
NCw3IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRj
aHBvaW50SXNTdGlsbFZhbGlkKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9wbGFuLndhdGNocG9pbnRzLmlzU3RpbGxWYWxpZCgKLSAgICAgICAg
ICAgIGdsb2JhbE9iamVjdEZvcihjb2RlT3JpZ2luKS0+bWFzcXVlcmFkZXNBc1VuZGVmaW5lZFdh
dGNocG9pbnQoKSk7CisgICAgICAgIHJldHVybiBnbG9iYWxPYmplY3RGb3IoY29kZU9yaWdpbikt
Pm1hc3F1ZXJhZGVzQXNVbmRlZmluZWRXYXRjaHBvaW50KCktPmlzU3RpbGxWYWxpZCgpOwogICAg
IH0KICAgICAKICAgICBib29sIGhhc0dsb2JhbEV4aXRTaXRlKGNvbnN0IENvZGVPcmlnaW4mIGNv
ZGVPcmlnaW4sIEV4aXRLaW5kIGV4aXRLaW5kKQpAQCAtODA3LDYgKzgwNCwxMCBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKSBvdmVy
cmlkZTsKICAgICAKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgaGFuZGxlQXNzZXJ0
aW9uRmFpbHVyZSgKKyAgICAgICAgTm9kZSogbm9kZSwgY29uc3QgY2hhciogZmlsZSwgaW50IGxp
bmUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLAorICAgICAgICBjb25zdCBjaGFyKiBhc3NlcnRpb24p
OworICAgIAogICAgIFZNJiBtX3ZtOwogICAgIFBsYW4mIG1fcGxhbjsKICAgICBDb2RlQmxvY2sq
IG1fY29kZUJsb2NrOwpAQCAtODIzLDcgKzgyNCw3IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRW
ZWN0b3I8VmFyaWFibGVBY2Nlc3NEYXRhLCAxNj4gbV92YXJpYWJsZUFjY2Vzc0RhdGE7CiAgICAg
U2VnbWVudGVkVmVjdG9yPEFyZ3VtZW50UG9zaXRpb24sIDg+IG1fYXJndW1lbnRQb3NpdGlvbnM7
CiAgICAgU2VnbWVudGVkVmVjdG9yPFN0cnVjdHVyZVNldCwgMTY+IG1fc3RydWN0dXJlU2V0Owot
ICAgIFNlZ21lbnRlZFZlY3RvcjxTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSwgOD4gbV9zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YTsKKyAgICBCYWc8VHJhbnNpdGlvbj4gbV90cmFuc2l0aW9uczsKICAg
ICBTZWdtZW50ZWRWZWN0b3I8TmV3QXJyYXlCdWZmZXJEYXRhLCA0PiBtX25ld0FycmF5QnVmZmVy
RGF0YTsKICAgICBCYWc8QnJhbmNoRGF0YT4gbV9icmFuY2hEYXRhOwogICAgIEJhZzxTd2l0Y2hE
YXRhPiBtX3N3aXRjaERhdGE7CkBAIC05MzMsNiArOTM0LDE3IEBAIHByaXZhdGU6CiAgICAgICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCiAgICAgfSB3aGlsZSAoZmFsc2UpCiAKKyNkZWZpbmUgREZHX0FTU0VSVChncmFw
aCwgbm9kZSwgYXNzZXJ0aW9uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKCEhKGFzc2VydGlvbikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGdyYXBoKS5oYW5kbGVBc3Nl
cnRpb25GYWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIChub2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjYXNz
ZXJ0aW9uKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisjZGVmaW5lIERGR19DUkFTSChncmFw
aCwgbm9kZSwgcmVhc29uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
KGdyYXBoKS5oYW5kbGVBc3NlcnRpb25GYWlsdXJlKCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIChub2RlKSwgX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJF
VFRZX0ZVTkNUSU9OLCAocmVhc29uKSk7CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFj
dFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0lu
UGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDYgKzM3LDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCitz
dGF0aWMgY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKIEluUGxhY2VBYnN0cmFjdFN0YXRl
OjpJblBsYWNlQWJzdHJhY3RTdGF0ZShHcmFwaCYgZ3JhcGgpCiAgICAgOiBtX2dyYXBoKGdyYXBo
KQogICAgICwgbV92YXJpYWJsZXMobV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVycygp
LCBncmFwaC5tX2xvY2FsVmFycykKQEAgLTU4LDM2ICs2MCwyMCBAQCB2b2lkIEluUGxhY2VBYnN0
cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvCiAgICAgICAgIGZvck5vZGUoYmFzaWNCbG9jay0+YXQo
aSkpLmNsZWFyKCk7CiAKICAgICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVh
ZDsKLSAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKLSAgICAgICAgaWYg
KG1fdmFyaWFibGVzLmFyZ3VtZW50KGkpLmhhc0Nsb2JiZXJhYmxlU3RhdGUoKSkgewotICAgICAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLm51bWJl
ck9mTG9jYWxzKCk7ICsraSkgewotICAgICAgICBpZiAobV92YXJpYWJsZXMubG9jYWwoaSkuaGFz
Q2xvYmJlcmFibGVTdGF0ZSgpKSB7Ci0gICAgICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1
ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQogICAgIAogICAgIGlmICht
X2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKICAgICAgICAgSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RW
YWx1ZT46Oml0ZXJhdG9yIGl0ZXIgPSBiYXNpY0Jsb2NrLT5zc2EtPnZhbHVlc0F0SGVhZC5iZWdp
bigpOwogICAgICAgICBIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPjo6aXRlcmF0b3IgZW5k
ID0gYmFzaWNCbG9jay0+c3NhLT52YWx1ZXNBdEhlYWQuZW5kKCk7Ci0gICAgICAgIGZvciAoOyBp
dGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVy
KQogICAgICAgICAgICAgZm9yTm9kZShpdGVyLT5rZXkpID0gaXRlci0+dmFsdWU7Ci0gICAgICAg
ICAgICBpZiAoaXRlci0+dmFsdWUuaGFzQ2xvYmJlcmFibGVTdGF0ZSgpKQotICAgICAgICAgICAg
ICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOwotICAgICAgICB9CiAgICAgfQotICAgIAogICAg
IGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKICAgICBiYXNpY0Jsb2NrLT5j
ZmFIYXNWaXNpdGVkID0gdHJ1ZTsKICAgICBtX2Jsb2NrID0gYmFzaWNCbG9jazsKICAgICBtX2lz
VmFsaWQgPSB0cnVlOwogICAgIG1fZm91bmRDb25zdGFudHMgPSBmYWxzZTsKICAgICBtX2JyYW5j
aERpcmVjdGlvbiA9IEludmFsaWRCcmFuY2hEaXJlY3Rpb247CisgICAgbV9zdHJ1Y3R1cmVDbG9i
YmVyU3RhdGUgPSBiYXNpY0Jsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQ7CiB9
CiAKIHN0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1
ZT4mIHZhbHVlcywgSGFzaFNldDxOb2RlKj4mIGxpdmUpCkBAIC0xMDYsNiArOTIsOCBAQCB2b2lk
IEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICByb290LT5jZmFTaG91bGRS
ZXZpc2l0ID0gdHJ1ZTsKICAgICByb290LT5jZmFIYXNWaXNpdGVkID0gZmFsc2U7CiAgICAgcm9v
dC0+Y2ZhRm91bmRDb25zdGFudHMgPSBmYWxzZTsKKyAgICByb290LT5jZmFTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKKyAgICByb290LT5jZmFTdHJ1
Y3R1cmVDbG9iYmVyU3RhdGVBdFRhaWwgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2kpIHsKICAgICAgICAgcm9vdC0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7
CiAgICAgICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKQEAgLTE0Nyw2ICsxMzUsOCBA
QCB2b2lkIEluUGxhY2VBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKCkKICAgICAgICAgYmxvY2st
PmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKICAgICAgICAgYmxvY2stPmNmYUhhc1Zpc2l0ZWQg
PSBmYWxzZTsKICAgICAgICAgYmxvY2stPmNmYUZvdW5kQ29uc3RhbnRzID0gZmFsc2U7CisgICAg
ICAgIGJsb2NrLT5jZmFTdHJ1Y3R1cmVDbG9iYmVyU3RhdGVBdEhlYWQgPSBTdHJ1Y3R1cmVzQXJl
V2F0Y2hlZDsKKyAgICAgICAgYmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0VGFpbCA9
IFN0cnVjdHVyZXNBcmVXYXRjaGVkOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJs
b2NrLT52YWx1ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CiAgICAgICAgICAg
ICBibG9jay0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLmNsZWFyKCk7CiAgICAgICAgICAgICBi
bG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGkpLmNsZWFyKCk7CkBAIC0yMDQsNiArMTk0LDgg
QEAgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jawogICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOwogICAgIAogICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFB
U1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgY2hhbmdlZCB8PSBjaGVja0FuZFNldChibG9jay0+
Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRUYWlsLCBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSk7
CisgICAgCiAgICAgICAgIHN3aXRjaCAobV9ncmFwaC5tX2Zvcm0pIHsKICAgICAgICAgY2FzZSBU
aHJlYWRlZENQUzogewogICAgICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1
bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1
bWVudCkgewpAQCAtMjUxLDYgKzI0Myw3IEBAIHZvaWQgSW5QbGFjZUFic3RyYWN0U3RhdGU6OnJl
c2V0KCkKICAgICBtX2Jsb2NrID0gMDsKICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKICAgICBtX2Jy
YW5jaERpcmVjdGlvbiA9IEludmFsaWRCcmFuY2hEaXJlY3Rpb247CisgICAgbV9zdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUgPSBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZDsKIH0KIAogYm9vbCBJblBsYWNlQWJz
dHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwg
QWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZSogbm9kZSkKQEAgLTMxMSwxMSArMzA0LDE3
IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFQKIAogYm9vbCBJblBs
YWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
CiB7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIiAgIE1lcmdpbmcgZnJvbSAi
LCBwb2ludGVyRHVtcChmcm9tKSwgIiB0byAiLCBwb2ludGVyRHVtcCh0byksICJcbiIpOwogICAg
IEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIEFTU0VSVChmcm9tLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCkpOwogICAgIAogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgIAor
ICAgIGNoYW5nZWQgfD0gY2hlY2tBbmRTZXQoCisgICAgICAgIHRvLT5jZmFTdHJ1Y3R1cmVDbG9i
YmVyU3RhdGVBdEhlYWQsCisgICAgICAgIERGRzo6bWVyZ2UoZnJvbS0+Y2ZhU3RydWN0dXJlQ2xv
YmJlclN0YXRlQXRUYWlsLCB0by0+Y2ZhU3RydWN0dXJlQ2xvYmJlclN0YXRlQXRIZWFkKSk7Cisg
ICAgCiAgICAgc3dpdGNoIChtX2dyYXBoLm1fZm9ybSkgewogICAgIGNhc2UgVGhyZWFkZWRDUFM6
IHsKICAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGZyb20tPnZh
cmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CkBAIC0zMzgs
OCArMzM3LDEyIEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmwKICAg
ICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IHRvLT5zc2EtPmxpdmVBdEhlYWQu
ZW5kKCk7CiAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKCIgICAgICBNZXJnaW5nIGZvciAiLCBub2RlLCAiOiBmcm9tICIsIGZy
b20tPnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSktPnZhbHVlLCAiIHRvICIsIHRvLT5zc2Et
PnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52YWx1ZSwgIlxuIik7CiAgICAgICAgICAgICBjaGFu
Z2VkIHw9IHRvLT5zc2EtPnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52YWx1ZS5tZXJnZSgKICAg
ICAgICAgICAgICAgICBmcm9tLT5zc2EtPnZhbHVlc0F0VGFpbC5maW5kKG5vZGUpLT52YWx1ZSk7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
ICAgICBSZXN1bHQ6ICIsIHRvLT5zc2EtPnZhbHVlc0F0SGVhZC5maW5kKG5vZGUpLT52YWx1ZSwg
IlxuIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzUyLDYgKzM1NSw4
IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmwKICAgICBpZiAoIXRv
LT5jZmFIYXNWaXNpdGVkKQogICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiICAgICAgV2lsbCByZXZpc2l0OiAiLCBjaGFuZ2Vk
LCAiXG4iKTsKICAgICB0by0+Y2ZhU2hvdWxkUmV2aXNpdCB8PSBjaGFuZ2VkOwogICAgIAogICAg
IHJldHVybiBjaGFuZ2VkOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBs
YWNlQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDMsNiArMTAzLDkgQEAgcHVibGljOgogICAgIC8vIERpZCB0aGUgbGFzdCBleGVj
dXRlZCBub2RlIGNsb2JiZXIgdGhlIHdvcmxkPwogICAgIGJvb2wgZGlkQ2xvYmJlcigpIGNvbnN0
IHsgcmV0dXJuIG1fZGlkQ2xvYmJlcjsgfQogICAgIAorICAgIC8vIEFyZSBzdHJ1Y3R1cmVzIGN1
cnJlbnRseSBjbG9iYmVyZWQ/CisgICAgU3RydWN0dXJlQ2xvYmJlclN0YXRlIHN0cnVjdHVyZUNs
b2JiZXJTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlQ2xvYmJlclN0YXRlOyB9Cisg
ICAgCiAgICAgLy8gSXMgdGhlIGV4ZWN1dGlvbiBzdGF0ZSBzdGlsbCB2YWxpZD8gVGhpcyB3aWxs
IGJlIGZhbHNlIGlmIGV4ZWN1dGUoKSBoYXMKICAgICAvLyByZXR1cm5lZCBmYWxzZSBwcmV2aW91
c2x5LgogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQpAQCAt
MTIyLDExICsxMjUsMTAgQEAgcHVibGljOgogICAgIAogICAgIC8vIE1ldGhvZHMgaW50ZW5kZWQg
dG8gYmUgY2FsbGVkIGZyb20gQWJzdHJhY3RJbnRlcnByZXRlci4KICAgICB2b2lkIHNldERpZENs
b2JiZXIoYm9vbCBkaWRDbG9iYmVyKSB7IG1fZGlkQ2xvYmJlciA9IGRpZENsb2JiZXI7IH0KKyAg
ICB2b2lkIHNldFN0cnVjdHVyZUNsb2JiZXJTdGF0ZShTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgdmFs
dWUpIHsgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgPSB2YWx1ZTsgfQogICAgIHZvaWQgc2V0SXNW
YWxpZChib29sIGlzVmFsaWQpIHsgbV9pc1ZhbGlkID0gaXNWYWxpZDsgfQogICAgIHZvaWQgc2V0
QnJhbmNoRGlyZWN0aW9uKEJyYW5jaERpcmVjdGlvbiBicmFuY2hEaXJlY3Rpb24pIHsgbV9icmFu
Y2hEaXJlY3Rpb24gPSBicmFuY2hEaXJlY3Rpb247IH0KICAgICB2b2lkIHNldEZvdW5kQ29uc3Rh
bnRzKGJvb2wgZm91bmRDb25zdGFudHMpIHsgbV9mb3VuZENvbnN0YW50cyA9IGZvdW5kQ29uc3Rh
bnRzOyB9Ci0gICAgYm9vbCBoYXZlU3RydWN0dXJlcygpIGNvbnN0IHsgcmV0dXJuIG1faGF2ZVN0
cnVjdHVyZXM7IH0gLy8gSXQncyBhbHdheXMgc2FmZSB0byByZXR1cm4gdHJ1ZS4KLSAgICB2b2lk
IHNldEhhdmVTdHJ1Y3R1cmVzKGJvb2wgaGF2ZVN0cnVjdHVyZXMpIHsgbV9oYXZlU3RydWN0dXJl
cyA9IGhhdmVTdHJ1Y3R1cmVzOyB9CiAKIHByaXZhdGU6CiAgICAgYm9vbCBtZXJnZVN0YXRlQXRU
YWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxl
LCBOb2RlKik7CkBAIC0xMzgsMTEgKzE0MCwxMSBAQCBwcml2YXRlOgogICAgIE9wZXJhbmRzPEFi
c3RyYWN0VmFsdWU+IG1fdmFyaWFibGVzOwogICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CiAgICAg
Ci0gICAgYm9vbCBtX2hhdmVTdHJ1Y3R1cmVzOwogICAgIGJvb2wgbV9mb3VuZENvbnN0YW50czsK
ICAgICAKICAgICBib29sIG1faXNWYWxpZDsKICAgICBib29sIG1fZGlkQ2xvYmJlcjsKKyAgICBT
dHJ1Y3R1cmVDbG9iYmVyU3RhdGUgbV9zdHJ1Y3R1cmVDbG9iYmVyU3RhdGU7CiAgICAgCiAgICAg
QnJhbmNoRGlyZWN0aW9uIG1fYnJhbmNoRGlyZWN0aW9uOyAvLyBUaGlzIGlzIG9ubHkgc2V0IGZv
ciBibG9ja3MgdGhhdCBlbmQgaW4gQnJhbmNoIGFuZCB0aGF0IGV4ZWN1dGUgdG8gY29tcGxldGlv
biAoaS5lLiBtX2lzVmFsaWQgPT0gdHJ1ZSkuCiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNp
b24gMTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5
c2lzUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxMyArNjgsMTEgQEAgcHVibGljOgog
ICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwogICAgICAgICAKICAgICAgICAgaWYgKCFtX2dy
YXBoLmJsb2NrKDApLT5zc2EtPmxpdmVBdEhlYWQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBz
dGFydENyYXNoaW5nKCk7Ci0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJC
YWQgbGl2ZW5lc3MgYW5hbHlzaXMgcmVzdWx0OiBsaXZlIGF0IHJvb3QgaXMgbm90IGVtcHR5OiAi
LAotICAgICAgICAgICAgICAgIG5vZGVMaXN0RHVtcChtX2dyYXBoLmJsb2NrKDApLT5zc2EtPmxp
dmVBdEhlYWQpLCAiXG4iKTsKLSAgICAgICAgICAgIGRhdGFMb2coIklSIGF0IHRpbWUgb2YgZXJy
b3I6XG4iKTsKLSAgICAgICAgICAgIG1fZ3JhcGguZHVtcCgpOwotICAgICAgICAgICAgQ1JBU0go
KTsKKyAgICAgICAgICAgIERGR19DUkFTSCgKKyAgICAgICAgICAgICAgICBtX2dyYXBoLCBudWxs
cHRyLAorICAgICAgICAgICAgICAgIHRvQ1N0cmluZygKKyAgICAgICAgICAgICAgICAgICAgIkJh
ZCBsaXZlbmVzcyBhbmFseXNpcyByZXN1bHQ6IGxpdmUgYXQgcm9vdCBpcyBub3QgZW1wdHk6ICIs
CisgICAgICAgICAgICAgICAgICAgIG5vZGVMaXN0RHVtcChtX2dyYXBoLmJsb2NrKDApLT5zc2Et
PmxpdmVBdEhlYWQpKS5kYXRhKCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAx
Njk1NzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkRGR05vZGVGbGFncy5oIgogI2luY2x1
ZGUgIkRGR05vZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgorI2luY2x1ZGUg
IkRGR1RyYW5zaXRpb24uaCIKICNpbmNsdWRlICJERkdVc2VLaW5kLmgiCiAjaW5jbHVkZSAiREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFZhcmlhbnQuaCIKQEAgLTY3
LDE5ICs2OCw2IEBAIHN0cnVjdCBNdWx0aVB1dEJ5T2Zmc2V0RGF0YSB7CiAgICAgYm9vbCByZWFs
bG9jYXRlc1N0b3JhZ2UoKSBjb25zdDsKIH07CiAKLXN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSB7Ci0gICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKLSAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZTsKLSAgICAKLSAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpIHsgfQot
ICAgIAotICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlKQotICAgICAgICA6IHByZXZpb3VzU3RydWN0
dXJlKHByZXZpb3VzU3RydWN0dXJlKQotICAgICAgICAsIG5ld1N0cnVjdHVyZShuZXdTdHJ1Y3R1
cmUpCi0gICAgewotICAgIH0KLX07Ci0KIHN0cnVjdCBOZXdBcnJheUJ1ZmZlckRhdGEgewogICAg
IHVuc2lnbmVkIHN0YXJ0Q29uc3RhbnQ7CiAgICAgdW5zaWduZWQgbnVtQ29uc3RhbnRzOwpAQCAt
NDg1LDIxICs0NzMsNiBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIGNoaWxkcmVuLnJlc2V0KCk7
CiAgICAgfQogICAgIAotICAgIHZvaWQgY29udmVydFRvU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCi0gICAgewotICAgICAgICBBU1NFUlQobV9vcCA9
PSBDaGVja1N0cnVjdHVyZSB8fCBtX29wID09IEFycmF5aWZ5VG9TdHJ1Y3R1cmUpOwotICAgICAg
ICBBU1NFUlQoIWNoaWxkMigpKTsKLSAgICAgICAgQVNTRVJUKCFjaGlsZDMoKSk7Ci0gICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUpOwotICAgICAgICBtX29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KHN0cnVjdHVyZSk7Ci0gICAgICAgIG1fb3AgPSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludDsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludCgpCi0gICAgewotICAgICAgICBjb252ZXJ0VG9TdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludChzdHJ1Y3R1cmVTZXQoKS5vbmx5U3RydWN0dXJlKCkpOwotICAgIH0KLSAg
ICAKICAgICB2b2lkIGNvbnZlcnRUb0dldEJ5T2Zmc2V0KHVuc2lnbmVkIHN0b3JhZ2VBY2Nlc3NE
YXRhSW5kZXgsIEVkZ2Ugc3RvcmFnZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29wID09IEdl
dEJ5SWQgfHwgbV9vcCA9PSBHZXRCeUlkRmx1c2ggfHwgbV9vcCA9PSBNdWx0aUdldEJ5T2Zmc2V0
KTsKQEAgLTExMjUsNyArMTA5OCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1fb3BJbmZvKTsKICAgICB9CiAKLSAgICBib29sIGhhc1N0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkKKyAgICBib29sIGhhc1RyYW5zaXRpb24oKQogICAgIHsK
ICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgpAQCAt
MTEzOCwxMCArMTExMSwxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEmIHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkK
KyAgICBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChoYXNT
dHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpKTsKLSAgICAgICAgcmV0dXJuICpyZWludGVycHJldF9j
YXN0PFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKj4obV9vcEluZm8pOworICAgICAgICBBU1NFUlQo
aGFzVHJhbnNpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VHJhbnNp
dGlvbio+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNTdHJ1Y3R1cmVTZXQo
KQpAQCAtMTE2Myw3ICsxMTM2LDYgQEAgc3RydWN0IE5vZGUgewogICAgIGJvb2wgaGFzU3RydWN0
dXJlKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewotICAgICAgICBjYXNlIFN0cnVj
dHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1
cmU6CiAgICAgICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBjYXNlIE5ld1N0cmluZ09iamVj
dDoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9u
IDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTUzLDE4ICsxNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oUHV0QnlJZERpcmVjdCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVD
bG9iYmVyc1dvcmxkKSBcCiAgICAgbWFjcm8oQ2hlY2tTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJh
dGUpIFwKICAgICBtYWNybyhDaGVja0V4ZWN1dGFibGUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKLSAg
ICAvKiBUcmFuc2l0aW9uIHdhdGNocG9pbnRzIGFyZSBhIGNvbnRyYWN0IGJldHdlZW4gdGhlIHBh
cnR5IHNldHRpbmcgdGhlIHdhdGNocG9pbnQgKi9cCi0gICAgLyogYW5kIHRoZSBydW50aW1lIHN5
c3RlbSwgd2hlcmUgdGhlIHBhcnR5IHByb21pc2VzIHRoYXQgdGhlIGNoaWxkIG9iamVjdCBvbmNl
IGhhZCAqL1wKLSAgICAvKiB0aGUgc3RydWN0dXJlIGJlaW5nIHdhdGNoZWQsIGFuZCB0aGUgcnVu
dGltZSBzeXN0ZW0gaW4gdHVybiBwcm9taXNlcyB0aGF0IHRoZSAqL1wKLSAgICAvKiB3YXRjaHBv
aW50IHdpbGwgYmUgdHVybmVkIGludG8gYW4gT1NSIGV4aXQgaWYgYW55IG9iamVjdCB3aXRoIHRo
YXQgc3RydWN0dXJlICovXAotICAgIC8qIGV2ZXIgdHJhbnNpdGlvbnMgdG8gYSBkaWZmZXJlbnQg
c3RydWN0dXJlLiBIZW5jZSwgdGhlIGNoaWxkIG9iamVjdCBtdXN0IGhhdmUgKi9cCi0gICAgLyog
cHJldmlvdXNseSBoYWQgYSBDaGVja1N0cnVjdHVyZSBleGVjdXRlZCBvbiBpdCBvciB3ZSdyZSBk
ZWFsaW5nIHdpdGggYW4gb2JqZWN0ICovXAotICAgIC8qIGNvbnN0YW50IChXZWFrSlNDb25zdGFu
dCkgYW5kIHRoZSBvYmplY3Qgd2FzIGtub3duIHRvIGhhdmUgdGhhdCBzdHJ1Y3R1cmUgYXQgKi9c
Ci0gICAgLyogY29tcGlsZS10aW1lLiBJbiB0aGUgbGF0dGVyIGNhc2UgdGhpcyBtZWFucyB0aGF0
IG5vIHN0cnVjdHVyZSBjaGVja3MgaGF2ZSB0byBiZSAqL1wKLSAgICAvKiBwZXJmb3JtZWQgZm9y
IHRoaXMgb2JqZWN0IGJ5IEpJVHRlZCBjb2RlLiBJbiB0aGUgZm9ybWVyIGNhc2UgdGhpcyBtZWFu
cyB0aGF0Ki9cCi0gICAgLyogdGhlIG9iamVjdCdzIHN0cnVjdHVyZSBkb2VzIG5vdCBuZWVkIHRv
IGJlIHJlY2hlY2tlZCBkdWUgdG8gc2lkZS1lZmZlY3RpbmcgKi9cCi0gICAgLyogKGNsb2JiZXJp
bmcpIG9wZXJhdGlvbnMuICovXAotICAgIG1hY3JvKFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUHV0U3RydWN0dXJlLCBOb2RlTXVz
dEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVjdHVyZSwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEFsbG9jYXRlUHJvcGVydHlTdG9y
YWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0IHwgTm9kZVJlc3VsdFN0b3Jh
Z2UpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24g
MTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjMsNiArNjMsNyBAQAogI2luY2x1ZGUgIkRGR1VuaWZpY2F0aW9uUGhhc2Uu
aCIKICNpbmNsdWRlICJERkdWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIkRGR1ZpcnR1YWxSZWdpc3Rl
ckFsbG9jYXRpb25QaGFzZS5oIgorI2luY2x1ZGUgIkRGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuaCIKICNpbmNsdWRlICJERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmgiCiAj
aW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJPcGVyYW5kc0lubGluZXMuaCIKQEAgLTIz
Myw2ICsyMzQsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUluVGhyCiAg
ICAgcGVyZm9ybUJhY2t3YXJkc1Byb3BhZ2F0aW9uKGRmZyk7CiAgICAgcGVyZm9ybVByZWRpY3Rp
b25Qcm9wYWdhdGlvbihkZmcpOwogICAgIHBlcmZvcm1GaXh1cChkZmcpOworICAgIHBlcmZvcm1X
YXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZyhkZmcpOwogICAgIHBlcmZvcm1JbnZhbGlkYXRpb25Q
b2ludEluamVjdGlvbihkZmcpOwogICAgIHBlcmZvcm1UeXBlQ2hlY2tIb2lzdGluZyhkZmcpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFn
YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKICAgICAgICAgY2Fz
ZSBDaGVja0V4ZWN1dGFibGU6Ci0gICAgICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnQ6CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CiAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkocmV2aXNpb24gMTY5NTc4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI3NSwyMiArMjc1LDI2IEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0
YXRlVHlwZSYgc3QKICAgICAgICAgcmV0dXJuIG5vZGUtPmFycmF5TW9kZSgpLm1vZGVGb3JQdXQo
KS5hbHJlYWR5Q2hlY2tlZCgKICAgICAgICAgICAgIGdyYXBoLCBub2RlLCBzdGF0ZS5mb3JOb2Rl
KGdyYXBoLnZhckFyZ0NoaWxkKG5vZGUsIDApKSk7CiAKLSAgICBjYXNlIFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50OgotICAgICAgICByZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGls
ZDEoKSkubV9mdXR1cmVQb3NzaWJsZVN0cnVjdHVyZS5pc1N1YnNldE9mKAotICAgICAgICAgICAg
U3RydWN0dXJlU2V0KG5vZGUtPnN0cnVjdHVyZSgpKSk7Ci0gICAgICAgIAogICAgIGNhc2UgUHV0
U3RydWN0dXJlOgogICAgIGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICBjYXNlIEFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlOgogICAgIGNhc2UgUmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZToK
LSAgICAgICAgcmV0dXJuIHN0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fY3VycmVudEtu
b3duU3RydWN0dXJlLmlzU3Vic2V0T2YoCi0gICAgICAgICAgICBTdHJ1Y3R1cmVTZXQobm9kZS0+
c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVyZSkpOworICAgICAgICBy
ZXR1cm4gc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRP
ZigKKyAgICAgICAgICAgIFN0cnVjdHVyZVNldChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3Vz
KSk7CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgY2FzZSBHZXRHZXR0ZXJT
ZXR0ZXJCeU9mZnNldDoKLSAgICBjYXNlIFB1dEJ5T2Zmc2V0OgotICAgICAgICByZXR1cm4gc3Rh
dGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV9jdXJyZW50S25vd25TdHJ1Y3R1cmUuaXNWYWxp
ZE9mZnNldCgKLSAgICAgICAgICAgIGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3Rv
cmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5vZmZzZXQpOworICAgIGNhc2UgUHV0QnlPZmZzZXQ6IHsK
KyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBzdGF0ZS5mb3JOb2RlKG5v
ZGUtPmNoaWxkMSgpKS5tX3N0cnVjdHVyZTsKKyAgICAgICAgaWYgKHZhbHVlLmlzVG9wKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IGdyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgp
XS5vZmZzZXQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHZhbHVlLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgaWYgKCF2YWx1ZVtpXS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgTGFzdE5vZGVUeXBlOgogICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxNjk1Nzgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjk3LDI5ICszNjk3LDYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAot
ICAgIGNhc2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgLy8gVGhl
cmUgaXMgYSBmYXNjaW5hdGluZyBxdWVzdGlvbiBoZXJlIG9mIHdoYXQgdG8gZG8gYWJvdXQgYXJy
YXkgcHJvZmlsaW5nLgotICAgICAgICAvLyBXZSAqY291bGQqIHRyeSB0byB0ZWxsIHRoZSBPU1Ig
ZXhpdCBhYm91dCB3aGVyZSB0aGUgYmFzZSBvZiB0aGUgYWNjZXNzIGlzLgotICAgICAgICAvLyBU
aGUgREZHIHdpbGwgaGF2ZSBrZXB0IGl0IGFsaXZlLCB0aG91Z2ggaXQgbWF5IG5vdCBiZSBpbiBh
IHJlZ2lzdGVyLCBhbmQKLSAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHJlYWxseSBsb2FkIGl0IHNp
bmNlIHRoYXQgY291bGQgYmUgYSB3YXN0ZS4gRm9yIG5vdyB0aG91Z2gsCi0gICAgICAgIC8vIHdl
J2xsIGp1c3QgcmVseSBvbiB0aGUgZmFjdCB0aGF0IHdoZW4gYSB3YXRjaHBvaW50IGZpcmVzIHRo
ZW4gdGhhdCdzCi0gICAgICAgIC8vIHF1aXRlIGEgaGludCBhbHJlYWR5LgotICAgICAgICAKLSAg
ICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
IAotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNPSyA9
IG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KG9wMS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgVHJ1c3RlZEltbVB0cihu
b2RlLT5zdHJ1Y3R1cmUoKSkpOwotICAgICAgICBtX2ppdC5icmVha3BvaW50KCk7Ci0gICAgICAg
IGlzT0subGluaygmbV9qaXQpOwotI2Vsc2UKLSAgICAgICAgc3BlY3VsYXRlQ2VsbChub2RlLT5j
aGlsZDEoKSk7Ci0jZW5kaWYKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotICAgICAgICAKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKICAg
ICAgICAgQVNTRVJUKGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAg
ICBtX2ppdC5qaXRDb2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0
aW9uKG1faml0LmdyYXBoKCkubV9wbGFuLCBtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NjcsMzIgKzM3NjcsNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KICAgICAgICAgCi0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDog
ewotICAgICAgICAvLyBUaGVyZSBpcyBhIGZhc2NpbmF0aW5nIHF1ZXN0aW9uIGhlcmUgb2Ygd2hh
dCB0byBkbyBhYm91dCBhcnJheSBwcm9maWxpbmcuCi0gICAgICAgIC8vIFdlICpjb3VsZCogdHJ5
IHRvIHRlbGwgdGhlIE9TUiBleGl0IGFib3V0IHdoZXJlIHRoZSBiYXNlIG9mIHRoZSBhY2Nlc3Mg
aXMuCi0gICAgICAgIC8vIFRoZSBERkcgd2lsbCBoYXZlIGtlcHQgaXQgYWxpdmUsIHRob3VnaCBp
dCBtYXkgbm90IGJlIGluIGEgcmVnaXN0ZXIsIGFuZAotICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qg
cmVhbGx5IGxvYWQgaXQgc2luY2UgdGhhdCBjb3VsZCBiZSBhIHdhc3RlLiBGb3Igbm93IHRob3Vn
aCwKLSAgICAgICAgLy8gd2UnbGwganVzdCByZWx5IG9uIHRoZSBmYWN0IHRoYXQgd2hlbiBhIHdh
dGNocG9pbnQgZmlyZXMgdGhlbiB0aGF0J3MKLSAgICAgICAgLy8gcXVpdGUgYSBoaW50IGFscmVh
ZHkuCi0KLSAgICAgICAgbV9qaXQuYWRkV2Vha1JlZmVyZW5jZShub2RlLT5zdHJ1Y3R1cmUoKSk7
Ci0KLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzT0sg
PSBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6RXF1
YWwsIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFkZHJlc3Mob3AxLmdwcigpLCBKU0NlbGw6
OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCAKLSAgICAgICAgICAgIG5vZGUtPnN0cnVjdHVyZSgpKTsK
LSAgICAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwotICAgICAgICBpc09LLmxpbmsoJm1faml0KTsK
LSNlbHNlCi0gICAgICAgIHNwZWN1bGF0ZUNlbGwobm9kZS0+Y2hpbGQxKCkpOwotI2VuZGlmCi0g
ICAgICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgICAgICAKICAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgQVNTRVJU
KGlzS25vd25DZWxsKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSkpOwogICAgICAgICBtX2ppdC5qaXRD
b2RlKCktPmNvbW1vbi5ub3RpZnlDb21waWxpbmdTdHJ1Y3R1cmVUcmFuc2l0aW9uKG1faml0Lmdy
YXBoKCkubV9wbGFuLCBtX2ppdC5jb2RlQmxvY2soKSwgbm9kZSk7CkBAIC0zODAxLDggKzM3NzUs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogICAg
ICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewotICAgICAgICBTdHJ1Y3R1cmUqIG9sZFN0
cnVjdHVyZSA9IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1
cmU7Ci0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbm9kZS0+c3RydWN0dXJlVHJh
bnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmU7CisgICAgICAgIFN0cnVjdHVyZSogb2xkU3RydWN0
dXJlID0gbm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91czsKKyAgICAgICAgU3RydWN0dXJlKiBu
ZXdTdHJ1Y3R1cmUgPSBub2RlLT50cmFuc2l0aW9uKCktPm5leHQ7CiAKICAgICAgICAgbV9qaXQu
aml0Q29kZSgpLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0dXJlVHJhbnNpdGlvbihtX2pp
dC5ncmFwaCgpLm1fcGxhbiwgbV9qaXQuY29kZUJsb2NrKCksIG5vZGUpOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyOTgsNyArNDI5OCw3IEBAIGJvb2wgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE4KIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKE5vZGUqIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPnN0
cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUtPmNvdWxkSGF2ZUluZGV4
aW5nSGVhZGVyKCkpIHsKKyAgICBpZiAobm9kZS0+dHJhbnNpdGlvbigpLT5wcmV2aW91cy0+Y291
bGRIYXZlSW5kZXhpbmdIZWFkZXIoKSkgewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBi
YXNlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKQEAgLTQzMTgsOCArNDMxOCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CiAgICAgR1BSUmVnIHNjcmF0Y2hHUFIxID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgICAgIAotICAg
IEFTU0VSVCghbm9kZS0+c3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVy
ZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgQVNTRVJUKGluaXRpYWxPdXRPZkxpbmVDYXBh
Y2l0eSA9PSBub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgQVNTRVJUKCFub2RlLT50cmFuc2l0aW9uKCktPnByZXZp
b3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBBU1NFUlQoaW5pdGlhbE91dE9mTGluZUNh
cGFjaXR5ID09IG5vZGUtPnRyYW5zaXRpb24oKS0+bmV4dC0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7
CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPQogICAgICAgICBlbWl0QWxs
b2NhdGVCYXNpY1N0b3JhZ2UoCkBAIC00MzM3LDExICs0MzM3LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVBbGxvY2F0ZVByb3AKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVJlYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UoTm9kZSogbm9kZSkKIHsKLSAgICBzaXplX3Qgb2xk
U2l6ZSA9IG5vZGUtPnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkgKiBzaXplb2YoSlNWYWx1ZSk7CisgICAgc2l6ZV90IG9sZFNp
emUgPSBub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT5vdXRPZkxpbmVDYXBhY2l0eSgpICog
c2l6ZW9mKEpTVmFsdWUpOwogICAgIHNpemVfdCBuZXdTaXplID0gb2xkU2l6ZSAqIG91dE9mTGlu
ZUdyb3d0aEZhY3RvcjsKLSAgICBBU1NFUlQobmV3U2l6ZSA9PSBub2RlLT5zdHJ1Y3R1cmVUcmFu
c2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSAqIHNpemVvZihK
U1ZhbHVlKSk7CisgICAgQVNTRVJUKG5ld1NpemUgPT0gbm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICogc2l6ZW9mKEpTVmFsdWUpKTsKIAotICAgIGlmIChub2Rl
LT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLT5jb3VsZEhhdmVJ
bmRleGluZ0hlYWRlcigpKSB7CisgICAgaWYgKG5vZGUtPnRyYW5zaXRpb24oKS0+cHJldmlvdXMt
PmNvdWxkSGF2ZUluZGV4aW5nSGVhZGVyKCkpIHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJh
bmQgYmFzZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMxMTUs
NyArMzExNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OnNwZWN1bGF0ZVN0cmluZ09iamUKICAg
ICBTdHJ1Y3R1cmUqIHN0cmluZ09iamVjdFN0cnVjdHVyZSA9CiAgICAgICAgIG1faml0Lmdsb2Jh
bE9iamVjdEZvcihtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMpLT5zdHJpbmdPYmplY3RT
dHJ1Y3R1cmUoKTsKICAgICAKLSAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX2N1cnJl
bnRLbm93blN0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RTdHJ1
Y3R1cmUpKSkgeworICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fc3RydWN0dXJlLmlz
U3Vic2V0T2YoU3RydWN0dXJlU2V0KHN0cmluZ09iamVjdFN0cnVjdHVyZSkpKSB7CiAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soCiAgICAgICAgICAgICBOb3RTdHJpbmdPYmplY3QsIEpTVmFsdWVS
ZWdzKCksIDAsCiAgICAgICAgICAgICBtX2ppdC5icmFuY2hTdHJ1Y3R1cmVQdHIoCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gQ29tbWVudCBvdXQgdGhlIGVtcHR5IFNBTVBM
RSgpIGRlZmluaXRpb24sIGFuZCB1bmNvbW1lbnQgdGhlIG9uZSB0aGF0IHVzZXMgU2FtcGxpbmdS
ZWdpb24sIGlmCisvLyB5b3Ugd2FudCBleHRyZW1lbHkgZmluZS1ncmFpbmVkIHByb2ZpbGluZyBp
biB0aGlzIGNvZGUuCisjZGVmaW5lIFNBTVBMRShuYW1lKSAKKy8vI2RlZmluZSBTQU1QTEUobmFt
ZSkgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24obmFtZSkKKworI2lmICFBU1NFUlRfRElT
QUJMRUQKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXNzZXJ0SXNXYXRjaGVkKEdyYXBo
JiBncmFwaCkgY29uc3QKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgYXNz
ZXJ0SXNXYXRjaGVkIik7CisKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKKyAgICAgICAgZ3JhcGguYXNz
ZXJ0SXNXYXRjaGVkKGF0KGkpKTsKK30KKyNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECisKK3Zv
aWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xvYmJlcigpCit7CisgICAgU0FNUExFKCJTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlIGNsb2JiZXIiKTsKKworICAgIC8vIFRoZSBwcmVtaXNlIG9mIHRo
aXMgYXBwcm9hY2ggdG8gY2xvYmJlcmluZyBpcyB0aGF0IGFueXRpbWUgd2UgaW50cm9kdWNlCisg
ICAgLy8gYSB3YXRjaGFibGUgc3RydWN0dXJlIGludG8gYW4gYWJzdHJhY3QgdmFsdWUsIHdlIHdh
dGNocG9pbnQgaXQuIFlvdSBjYW4gYXNzZXJ0CisgICAgLy8gdGhhdCB0aGlzIGhvbGRzIGJ5IGNh
bGxpbmcgYXNzZXJ0SXNXYXRjaGVkKCkuCisgICAgICAgIAorICAgIGlmIChpc1RvcCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBzZXRDbG9iYmVyZWQodHJ1ZSk7CisgICAgICAgIAorICAgIGlm
IChtX3NldC5pc1RoaW4oKSkgeworICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZVN0cnVjdHVyZSgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIW1fc2V0LnNpbmdsZVN0cnVjdHVy
ZSgpLT5kZmdTaG91bGRXYXRjaCgpKQorICAgICAgICAgICAgbWFrZVRvcFdoZW5UaGluKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgIAorICAgIFN0cnVjdHVyZVNldDo6T3V0T2ZM
aW5lTGlzdCogbGlzdCA9IG1fc2V0LnN0cnVjdHVyZUxpc3QoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsaXN0LT5tX2xlbmd0aDsgaS0tOykgeworICAgICAgICBpZiAoIWxpc3QtPmxpc3QoKVtp
XS0+ZGZnU2hvdWxkV2F0Y2goKSkgeworICAgICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6Om9ic2VydmVUcmFuc2l0aW9uKFN0cnVjdHVyZSogZnJvbSwgU3RydWN0dXJlKiB0bykK
K3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgb2JzZXJ2ZVRyYW5zaXRpb24i
KTsKKworICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFt
X3NldC5jb250YWlucyhmcm9tKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChmcm9t
LT5kZmdTaG91bGRXYXRjaCgpKSB7CisgICAgICAgIHNldENsb2JiZXJlZCh0cnVlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fc2V0LmFkZCh0bykpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGltaXQp
CisgICAgICAgIG1ha2VUb3AoKTsKK30KKwordm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpv
YnNlcnZlVHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvblZlY3RvciYgdmVjdG9yKQoreworICAg
IFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBvYnNlcnZlVHJhbnNpdGlvbnMiKTsKKwor
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgU3RydWN0dXJlU2V0
IG5ld1N0cnVjdHVyZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gdmVjdG9yLnNpemUoKTsgaS0t
OykgeworICAgICAgICBpZiAoIW1fc2V0LmNvbnRhaW5zKHZlY3RvcltpXS5wcmV2aW91cykpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGlmICh2ZWN0b3JbaV0ucHJl
dmlvdXMtPmRmZ1Nob3VsZFdhdGNoKCkpCisgICAgICAgICAgICBzZXRDbG9iYmVyZWQodHJ1ZSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld1N0cnVjdHVyZXMuYWRkKHZlY3RvcltpXS5u
ZXh0KTsKKyAgICB9CisgICAgCisgICAgaWYgKCFtX3NldC5tZXJnZShuZXdTdHJ1Y3R1cmVzKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChtX3NldC5zaXplKCkgPiBwb2x5bW9ycGhp
c21MaW1pdCkKKyAgICAgICAgbWFrZVRvcCgpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUgYWRkIik7CisKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICghbV9zZXQuYWRkKHN0cnVjdHVyZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9zZXQuc2l6ZSgpID4gcG9seW1vcnBoaXNtTGlt
aXQpCisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjptZXJnZShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KQoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtZXJnZSBzZXQiKTsKKwor
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJu
IG1lcmdlTm90VG9wKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpt
ZXJnZVNsb3coY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCit7CisgICAgU0FN
UExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1lcmdlIHZhbHVlIHNsb3ciKTsKKworICAgIC8v
IEl0IGlzbid0IGltbWVkaWF0ZWx5IG9idmlvdXMgdGhhdCB0aGUgY29kZSBiZWxvdyBpcyBkb2lu
ZyB0aGUgcmlnaHQgdGhpbmcsIHNvIGxldCdzIGdvCisgICAgLy8gdGhyb3VnaCBpdC4KKyAgICAv
LworICAgIC8vIFRoaXMgbm90IGNsb2JiZXJlZCwgb3RoZXIgbm90IGNsb2JiZXJlZDogQ2xlYXJs
eSwgd2UgZG9uJ3Qgd2FudCB0byBtYWtlIGFueXRoaW5nIGNsb2JiZXJlZAorICAgIC8vIHNpbmNl
IHdlIGp1c3QgaGF2ZSB0d28gc2V0cyBhbmQgd2UgYXJlIG1lcmdpbmcgdGhlbS4gbWVyZ2VOb3RU
b3AoKSBjYW4gaGFuZGxlIHRoaXMganVzdAorICAgIC8vIGZpbmUuCisgICAgLy8KKyAgICAvLyBU
aGlzIGNsb2JiZXJlZCwgb3RoZXIgY2xvYmJlcmVkOiBDbG9iYmVyZWQgbWVhbnMgdGhhdCB3ZSBo
YXZlIGEgc2V0IG9mIHRoaW5ncywgcGx1cyB3ZQorICAgIC8vIHRlbXBvcmFyaWx5IGhhdmUgdGhl
IHNldCBvZiBhbGwgdGhpbmdzIGJ1dCB0aGUgbGF0dGVyIHdpbGwgZ28gYXdheSBvbmNlIHdlIGhp
dCB0aGUgbmV4dAorICAgIC8vIGludmFsaWRhdGlvbiBwb2ludC4gVGhpcyBhbGxvd3MgdXMgdG8g
bWVyZ2UgdHdvIGNsb2JiZXJlZCBzZXRzIHRoZSBuYXR1cmFsIHdheS4gRm9yIG5vdworICAgIC8v
IHRoZSBzZXQgd2lsbCBzdGlsbCBiZSBUT1AgKGFuZCBzbyB3ZSBrZWVwIHRoZSBjbG9iYmVyZWQg
Yml0IHNldCksIGJ1dCB3ZSBrbm93IHRoYXQgYWZ0ZXIKKyAgICAvLyBpbnZhbGlkYXRpb24sIHdl
IHdpbGwgaGF2ZSB0aGUgdW5pb24gb2YgdGhlIHRoaXMgYW5kIG90aGVyLgorICAgIC8vCisgICAg
Ly8gVGhpcyBjbG9iYmVyZWQsIG90aGVyIG5vdCBjbG9iYmVyZWQ6IEl0J3Mgc2FmZSB0byBtZXJn
ZSBpbiBvdGhlciBmb3IgYm90aCBiZWZvcmUgYW5kIGFmdGVyCisgICAgLy8gaW52YWxpZGF0aW9u
LCBzbyBsb25nIGFzIHdlIGxlYXZlIHRoZSBjbG9iYmVyZWQgYml0IHNldC4gQmVmb3JlIGludmFs
aWRhdGlvbiB0aGlzIGhhcyBubworICAgIC8vIGVmZmVjdCBzaW5jZSB0aGUgc2V0IHdpbGwgc3Rp
bGwgYXBwZWFyIHRvIGhhdmUgYWxsIHRoaW5ncyBpbiBpdC4gVGhlIHdheSB0byB0aGluayBhYm91
dAorICAgIC8vIHdoYXQgaW52YWxpZGF0aW9uIHdvdWxkIGRvIGlzIGltYWdpbmUgaWYgd2UgaGFk
IGEgc2V0IEEgdGhhdCB3YXMgY2xvYmJlcmVkIGFuZCBhIHNldCBCCisgICAgLy8gdGhhdCB3YXNu
J3QgYW5kIHdlIGNvbnNpZGVyZWQgdGhlIGZvbGxvd2luZyB0d28gY2FzZXMuIE5vdGUgdGhhdCB3
ZSBleHBlY3QgQSB0byBiZSB0aGUKKyAgICAvLyBzYW1lIGF0IHRoZSBlbmQgaW4gYm90aCBjYXNl
czoKKyAgICAvLworICAgIC8vICAgICAgICAgICAgQS5tZXJnZShCKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgSW52YWxpZGF0aW9uUG9pbnQKKyAgICAvLyAgICAgICAgICAgIEludmFsaWRh
dGlvblBvaW50ICAgICAgICAgICAgICAgICAgICAgIEEubWVyZ2UoQikKKyAgICAvLworICAgIC8v
IFRoZSBmYWN0IHRoYXQgd2UgZXhwZWN0IEEgdG8gYmUgdGhlIHNhbWUgaW4gYm90aCBjYXNlcyBt
ZWFucyB0aGF0IHdlIHdhbnQgdG8gbWVyZ2Ugb3RoZXIKKyAgICAvLyBpbnRvIHRoaXMgYnV0IGtl
ZXAgdGhlIGNsb2JiZXJlZCBiaXQuCisgICAgLy8KKyAgICAvLyBUaGlzIG5vdCBjbG9iYmVyZWQs
IG90aGVyIGNsb2JiZXJlZDogVGhpcyBpcyBqdXN0IHRoZSBjb252ZXJzZSBvZiB0aGUgcHJldmlv
dXMgY2FzZS4gV2UKKyAgICAvLyB3YW50IHRvIG1lcmdlIG90aGVyIGludG8gdGhpcyBhbmQgc2V0
IHRoZSBjbG9iYmVyZWQgYml0LgorICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAg
IAorICAgIGlmICghaXNDbG9iYmVyZWQoKSAmJiBvdGhlci5pc0Nsb2JiZXJlZCgpKSB7CisgICAg
ICAgIHNldENsb2JiZXJlZCh0cnVlKTsKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgfQor
ICAgIAorICAgIGNoYW5nZWQgfD0gbWVyZ2VOb3RUb3Aob3RoZXIubV9zZXQpOworICAgIAorICAg
IHJldHVybiBjaGFuZ2VkOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1lcmdl
Tm90VG9wKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgU0FNUExFKCJTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlIG1lcmdlIG5vdCB0b3AiKTsKKworICAgIGlmICghbV9zZXQubWVyZ2Uo
b3RoZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG1fc2V0LnNpemUo
KSA+IHBvbHltb3JwaGlzbUxpbWl0KQorICAgICAgICBtYWtlVG9wKCk7CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpCit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlIGZpbHRlciBzZXQiKTsKKworICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgIG1fc2V0ID0g
b3RoZXI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzQ2xvYmJlcmVk
KCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSB0d28gY2hvaWNlcyBoZXJlOgorICAgICAgICAvLwor
ICAgICAgICAvLyBEbyBub3RoaW5nOiBJdCdzIGxlZ2FsIHRvIGtlZXAgb3VyIHNldCBpbnRhY3Qs
IHdoaWNoIHdvdWxkIGVzc2VudGlhbGx5IG1lYW4gdGhhdCBmb3IKKyAgICAgICAgLy8gbm93LCBv
dXIgc2V0IHdvdWxkIGJlaGF2ZSBsaWtlIFRPUCBidXQgYWZ0ZXIgdGhlIG5leHQgaW52YWxpZGF0
aW9uIHBvaW50IGl0IHdvbGQgYmUKKyAgICAgICAgLy8gYSBmaW5pdGUgc2V0IGFnYWluLiBUaGlz
IG1heSBiZSBhIGdvb2QgY2hvaWNlIGlmICdvdGhlcicgaXMgbXVjaCBiaWdnZXIgdGhhbiBvdXIK
KyAgICAgICAgLy8gbV9zZXQuCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlcGxhY2UgbV9zZXQg
d2l0aCBvdGhlciBhbmQgY2xlYXIgdGhlIGNsb2JiZXIgYml0OiBUaGlzIGlzIGFsc28gbGVnYWws
IGFuZCBtZWFucyB0aGF0CisgICAgICAgIC8vIHdlJ3JlIG5vIGxvbmdlciBjbG9iYmVyZWQuIFRo
aXMgaXMgdXN1YWxseSBiZXR0ZXIgYmVjYXVzZSBpdCBpbW1lZGlhdGVseSBnaXZlcyB1cyBhCisg
ICAgICAgIC8vIHNtYWxsZXIgc2V0LgorICAgICAgICAvLworICAgICAgICAvLyBUaGlzIHNjZW5h
cmlvIHNob3VsZCBjb21lIHVwIHJhcmVseS4gV2UgdXN1YWxseSBkb24ndCBkbyBhbnl0aGluZyB0
byBhbiBhYnN0cmFjdCB2YWx1ZQorICAgICAgICAvLyBhZnRlciBpdCBpcyBjbG9iYmVyZWQuIEJ1
dCB3ZSBhcHBseSBzb21lIGhldXJpc3RpY3MuCisgICAgICAgIAorICAgICAgICBpZiAob3RoZXIu
c2l6ZSgpID4gbV9zZXQuc2l6ZSgpICsgY2xvYmJlcmVkU3VwcmVtYWN5VGhyZXNob2xkKQorICAg
ICAgICAgICAgcmV0dXJuOyAvLyBLZWVwIHRoZSBjbG9iYmVyZWQgc2V0LgorICAgICAgICAKKyAg
ICAgICAgbV9zZXQgPSBvdGhlcjsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX3NldC5maWx0ZXIob3RoZXIpOworfQorCit2
b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlJiBvdGhlcikKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgZmls
dGVyIHZhbHVlIik7CisKKyAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChvdGhlci5pc0Nsb2JiZXJlZCgpKSB7CisgICAgICAgIGlmIChpc1RvcCgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0Nsb2JiZXJl
ZCgpKSB7CisgICAgICAgICAgICAvLyBTZWUganVzdGlmaWNhdGlvbiBpbiBmaWx0ZXIoY29uc3Qg
U3RydWN0dXJlU2V0JiksIGFib3ZlLiBBbiB1bmNsb2JiZXJlZCBzZXQgaXMKKyAgICAgICAgICAg
IC8vIGFsbW9zdCBhbHdheXMgYmV0dGVyLgorICAgICAgICAgICAgaWYgKG1fc2V0LnNpemUoKSA+
IG90aGVyLm1fc2V0LnNpemUoKSArIGNsb2JiZXJlZFN1cHJlbWFjeVRocmVzaG9sZCkKKyAgICAg
ICAgICAgICAgICAqdGhpcyA9IG90aGVyOyAvLyBLZWVwIHRoZSBjbG9iYmVyZWQgc2V0LgorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9zZXQuZmlsdGVyKG90aGVy
Lm1fc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBmaWx0ZXIob3RoZXIu
bV9zZXQpOworfQorCituYW1lc3BhY2UgeworCitjbGFzcyBDb25mb3Jtc1RvVHlwZSB7CitwdWJs
aWM6CisgICAgQ29uZm9ybXNUb1R5cGUoU3BlY3VsYXRlZFR5cGUgdHlwZSkKKyAgICAgICAgOiBt
X3R5cGUodHlwZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IoKShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhIShzcGVjdWxhdGlvbkZy
b21TdHJ1Y3R1cmUoc3RydWN0dXJlKSAmIG1fdHlwZSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBT
cGVjdWxhdGVkVHlwZSBtX3R5cGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwor
dm9pZCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXJTbG93KFNwZWN1bGF0ZWRUeXBlIHR5
cGUpCit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGZpbHRlciB0eXBlIHNs
b3ciKTsKKworICAgIGlmICghKHR5cGUgJiBTcGVjQ2VsbCkpIHsKKyAgICAgICAgY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoIWlzVG9wKCkpOworICAg
IAorICAgIENvbmZvcm1zVG9UeXBlIGNvbmZvcm1zVG9UeXBlKHR5cGUpOworICAgIG1fc2V0Lmdl
bmVyaWNGaWx0ZXIoY29uZm9ybXNUb1R5cGUpOworfQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAoreworICAgIFNBTVBM
RSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBjb250YWlucyIpOworCisgICAgaWYgKGlzVG9wKCkg
fHwgaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJu
IG1fc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZTo6aXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAoreworICAg
IFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBpc1N1YnNldE9mIHNldCIpOworCisgICAg
aWYgKGlzVG9wKCkgfHwgaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyKTsKK30KKworYm9vbCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
IG90aGVyKSBjb25zdAoreworICAgIFNBTVBMRSgiU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBpc1N1
YnNldE9mIHZhbHVlIik7CisKKyAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAKKyAgICBpZiAoaXNDbG9iYmVyZWQoKSA9PSBvdGhlci5pc0Nsb2JiZXJlZCgpKQorICAgICAg
ICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhlci5tX3NldCk7CisgICAgCisgICAgLy8gSGVy
ZSBpdCBnZXRzIHRyaWNreS4gSWYgaW4gZG91YnQsIHJldHVybiBmYWxzZSEKKyAgICAKKyAgICBp
ZiAoaXNDbG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBBIGNsb2JiZXJlZCBz
ZXQgaXMgbmV2ZXIgYSBzdWJzZXQgb2YgYW4gdW5jbG9iYmVyZWQgc2V0LgorICAgIAorICAgIC8v
IEFuIHVuY2xvYmJlcmVkIHNldCBpcyBjdXJyZW50bHkgYSBzdWJzZXQgb2YgYSBjbG9iYmVyZWQg
c2V0LCBidXQgaXQgbWF5IG5vdCBiZSBzbyBhZnRlcgorICAgIC8vIGludmFsaWRhdGlvbi4KKyAg
ICByZXR1cm4gbV9zZXQuaXNTdWJzZXRPZihvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIp
IGNvbnN0Cit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIGlzU3VwZXJzZXRP
ZiBzZXQiKTsKKworICAgIGlmIChpc1RvcCgpIHx8IGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBtX3NldC5pc1N1cGVyc2V0T2Yob3RoZXIpOwor
fQorCitib29sIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om92ZXJsYXBzKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpIGNvbnN0Cit7CisgICAgU0FNUExFKCJTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
IG92ZXJsYXBzIHNldCIpOworCisgICAgaWYgKGlzVG9wKCkgfHwgaXNDbG9iYmVyZWQoKSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIG1fc2V0Lm92ZXJsYXBzKG90aGVy
KTsKK30KKworYm9vbCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvdmVybGFwcyhjb25zdCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUgb3ZlcmxhcHMgdmFsdWUiKTsKKworICAgIGlmIChvdGhlci5pc1RvcCgp
IHx8IG90aGVyLmlzQ2xvYmJlcmVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAg
IHJldHVybiBvdmVybGFwcyhvdGhlci5tX3NldCk7Cit9CisKK2Jvb2wgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6ZXF1YWxzU2xvdyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikg
Y29uc3QKK3sKKyAgICBTQU1QTEUoIlN0cnVjdHVyZUFic3RyYWN0VmFsdWUgZXF1YWxzU2xvdyIp
OworCisgICAgQVNTRVJUKG1fc2V0Lm1fcG9pbnRlciAhPSBvdGhlci5tX3NldC5tX3BvaW50ZXIp
OworICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgQVNTRVJUKCFvdGhlci5pc1RvcCgpKTsKKyAg
ICAKKyAgICByZXR1cm4gbV9zZXQgPT0gb3RoZXIubV9zZXQKKyAgICAgICAgJiYgaXNDbG9iYmVy
ZWQoKSA9PSBvdGhlci5pc0Nsb2JiZXJlZCgpOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWU6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRl
eHQpIGNvbnN0Cit7CisgICAgaWYgKGlzQ2xvYmJlcmVkKCkpCisgICAgICAgIG91dC5wcmludCgi
Q2xvYmJlcmVkOiIpOworICAgIAorICAgIGlmIChpc1RvcCgpKQorICAgICAgICBvdXQucHJpbnQo
IlRPUCIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KGluQ29udGV4dChtX3NldCwgY29u
dGV4dCkpOworfQorCit2b2lkIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuaAkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5j
bHVkZSAiREZHVHJhbnNpdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIlNw
ZWN1bGF0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiRHVtcENvbnRleHQuaCIKQEAgLTM3LDMwMCArMzgs
MTkwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSB7CiBwdWJsaWM6Ci0gICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpCi0g
ICAgICAgIDogbV9zdHJ1Y3R1cmUoMCkKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkgeyB9
CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICAg
ICAgOiBtX3NldChzdHJ1Y3R1cmUpCiAgICAgeworICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2Up
OwogICAgIH0KLSAgICAKLSAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQotICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgICAgIDogbV9zZXQo
b3RoZXIpCisgICAgeworICAgICAgICBzZXRDbG9iYmVyZWQoZmFsc2UpOworICAgIH0KKyAgICBB
TFdBWVNfSU5MSU5FIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpCisgICAgICAgIDogbV9zZXQob3RoZXIubV9zZXQpCiAgICAgeworICAg
ICAgICBzZXRDbG9iYmVyZWQob3RoZXIuaXNDbG9iYmVyZWQoKSk7CiAgICAgfQogICAgIAotICAg
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgQUxX
QVlTX0lOTElORSBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvcGVyYXRvcj0oY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCiAgICAgewotICAgICAgICBzd2l0Y2ggKHNldC5zaXpl
KCkpIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSB0b3BWYWx1ZSgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgbV9zZXQgPSBvdGhlci5t
X3NldDsKKyAgICAgICAgc2V0Q2xvYmJlcmVkKG90aGVyLmlzQ2xvYmJlcmVkKCkpOworICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKLSAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICBtX3NldC5jbGVhcigpOworICAgICAgICBz
ZXRDbG9iYmVyZWQoZmFsc2UpOwogICAgIH0KICAgICAKICAgICB2b2lkIG1ha2VUb3AoKQogICAg
IHsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSB0b3BWYWx1ZSgpOworICAgICAgICBtX3NldC5kZWxl
dGVTdHJ1Y3R1cmVMaXN0SWZOZWNlc3NhcnkoKTsKKyAgICAgICAgbV9zZXQubV9wb2ludGVyID0g
dG9wVmFsdWU7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
IHRvcCgpCi0gICAgewotICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZhbHVlOwotICAg
ICAgICB2YWx1ZS5tYWtlVG9wKCk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9CisjaWYg
QVNTRVJUX0RJU0FCTEVECisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdCB7
IH0KKyNlbHNlCisgICAgdm9pZCBhc3NlcnRJc1dhdGNoZWQoR3JhcGgmKSBjb25zdDsKKyNlbmRp
ZgogICAgIAotICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpICYmICFpc1RvcCgpKTsKLSAgICAgICAgaWYg
KG1fc3RydWN0dXJlKQotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKLSAgICB9CisgICAgdm9pZCBjbG9iYmVy
KCk7CisgICAgdm9pZCBvYnNlcnZlSW52YWxpZGF0aW9uUG9pbnQoKSB7IHNldENsb2JiZXJlZChm
YWxzZSk7IH0KICAgICAKLSAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKLSAgICAg
ICAgICAgIG1ha2VUb3AoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpIHsKLSAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3Ro
ZXJbMF07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIG1ha2VUb3AoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQorICAgIHZvaWQgb2Jz
ZXJ2ZVRyYW5zaXRpb24oU3RydWN0dXJlKiBmcm9tLCBTdHJ1Y3R1cmUqIHRvKTsKKyAgICB2b2lk
IG9ic2VydmVUcmFuc2l0aW9ucyhjb25zdCBUcmFuc2l0aW9uVmVjdG9yJik7CiAgICAgCi0gICAg
Ym9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgc3Rh
dGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkKICAgICB7Ci0gICAgICAgIGlmICghb3Ro
ZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChp
c1RvcCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAob3RoZXIuaXNU
b3AoKSkgewotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7Ci0gICAgICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgbWFrZVRvcCgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9zZXQubV9wb2ludGVyID0gdG9wVmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgfQogICAgIAotICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CisgICAg
Ym9vbCBpc0NsZWFyKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuaXNFbXB0eSgpOyB9CisgICAgYm9v
bCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0Lm1fcG9pbnRlciA9PSB0b3BWYWx1ZTsgfQor
ICAgIGJvb2wgaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKSBjb25zdCB7IHJldHVybiAhaXNDbGVhcigp
ICYmICFpc1RvcCgpOyB9CiAgICAgCi0gICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVy
ZVNldCYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUb3AoKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUp
OwotICAgIH0KKyAgICAvLyBBIGNsb2JiZXJlZCBhYnN0cmFjdCB2YWx1ZSBtZWFucyB0aGF0IHRo
ZSBzZXQgY3VycmVudGx5IGNvbnRhaW5zIHRoZSBtX3NldCBzZXQgb2YKKyAgICAvLyBzdHJ1Y3R1
cmVzIHBsdXMgVE9QLCBleGNlcHQgdGhhdCB0aGUgInBsdXMgVE9QIiB3aWxsIGdvIGF3YXkgYXQg
dGhlIG5leHQgaW52YWxpZGF0aW9uCisgICAgLy8gcG9pbnQuIE5vdGUgdGhhdCBpdCdzIHRlbXB0
aW5nIHRvIHRoaW5rIG9mIHRoaXMgYXMgInRoZSBzZXQgb2Ygc3RydWN0dXJlcyBpbiBtX3NldCBw
bHVzCisgICAgLy8gdGhlIHNldCBvZiBzdHJ1Y3R1cmVzIHRyYW5zaXRpb24tcmVhY2hhYmxlIGZy
b20gbV9zZXQiIC0gYnV0IHRoaXMgaXNuJ3QgcmVhbGx5IGNvcnJlY3QsCisgICAgLy8gc2luY2Ug
aWYgd2UgYWRkIGFuIHVud2F0Y2hhYmxlIHN0cnVjdHVyZSBhZnRlciBjbG9iYmVyaW5nLCB0aGUg
dHdvIGRlZmluaXRpb25zIGFyZSBub3QKKyAgICAvLyBlcXVpdmFsZW50LiBJZiB3ZSBkbyB0aGlz
LCB0aGUgbmV3IHVud2F0Y2hhYmxlIHN0cnVjdHVyZSB3aWxsIGJlIGFkZGVkIHRvIG1fc2V0Lgor
ICAgIC8vIEludmFsaWRhdGlvbiBwb2ludHMgZG8gbm90IHRyeSB0byAiY2xpcCIgdGhlIHNldCBv
ZiB0cmFuc2l0aW9uLXJlYWNoYWJsZSBzdHJ1Y3R1cmVzIGZyb20KKyAgICAvLyBtX3NldCBieSBs
b29raW5nIGF0IHJlYWNoYWJpbGl0eSBhcyB0aGlzIHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV3IHNl
dCBpcyBUT1AuIEluc3RlYWQgdGhleQorICAgIC8vIGxpdGVyYWxseSBhc3N1bWUgdGhhdCB0aGUg
c2V0IGlzIGp1c3QgbV9zZXQgcmF0aGVyIHRoYW4gbV9zZXQgcGx1cyBUT1AuCisgICAgYm9vbCBp
c0Nsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmdldFJlc2VydmVkRmxhZygpOyB9CiAg
ICAgCi0gICAgYm9vbCBkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbihTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RvcCgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmU7Ci0gICAgfQor
ICAgIGJvb2wgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKTsKICAgICAKLSAgICBib29sIGlzU3Vw
ZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFvdGhl
ci5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKG90aGVyLnNp
emUoKSA+IDEpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBtX3N0
cnVjdHVyZSA9PSBvdGhlclswXTsKLSAgICB9CisgICAgYm9vbCBtZXJnZShjb25zdCBTdHJ1Y3R1
cmVTZXQmIG90aGVyKTsKICAgICAKLSAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgQUxXQVlTX0lOTElORSBib29sIG1lcmdl
KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQogICAgIHsKLSAgICAgICAgaWYg
KG90aGVyLmlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGlz
VG9wKCkpCisgICAgICAgIGlmIChvdGhlci5pc0NsZWFyKCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChtX3N0cnVjdHVyZSkgewotICAgICAgICAgICAgaWYgKG90aGVy
Lm1fc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhl
ci5tX3N0cnVjdHVyZTsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1RvcCgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvdGhlci5pc1N1YnNldE9mKCp0
aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikKLSAgICB7Ci0gICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCi0gICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIAotICAgICAgICBpZiAoaXNUb3AoKSkgewotICAgICAgICAgICAgc3dpdGNo
IChvdGhlci5zaXplKCkpIHsKLSAgICAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IDA7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3Ro
ZXJbMF07Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Cisg
ICAgICAgIGlmIChvdGhlci5pc1RvcCgpKSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG90
aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgcmV0dXJuIG1lcmdlU2xvdyhvdGhl
cik7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUmIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpIHsKLSAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwotICAgIH0KKyAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKTsKKyAgICB2b2lkIGZpbHRlcihjb25zdCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcik7CiAgICAgCi0gICAgdm9pZCBmaWx0ZXIoU3Bl
Y3VsYXRlZFR5cGUgb3RoZXIpCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGZpbHRlcihTcGVjdWxh
dGVkVHlwZSB0eXBlKQogICAgIHsKLSAgICAgICAgaWYgKCEob3RoZXIgJiBTcGVjQ2VsbCkpIHsK
KyAgICAgICAgaWYgKCEodHlwZSAmIFNwZWNDZWxsKSkgewogICAgICAgICAgICAgY2xlYXIoKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGlz
Q2xlYXJPclRvcCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghKHNwZWN1
bGF0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSkgJiBvdGhlcikpCi0gICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IDA7CisgICAgICAgIGlmIChpc05laXRoZXJDbGVhck5vclRvcCgpKQorICAg
ICAgICAgICAgZmlsdGVyU2xvdyh0eXBlKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0NsZWFy
KCkgY29uc3QKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiAhbV9z
dHJ1Y3R1cmU7CisgICAgICAgIGlmICgobV9zZXQuaXNUaGluKCkgJiYgb3RoZXIubV9zZXQuaXNU
aGluKCkpIHx8IGlzVG9wKCkgfHwgb3RoZXIuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBt
X3NldC5tX3BvaW50ZXIgPT0gb3RoZXIubV9zZXQubV9wb2ludGVyOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIGVxdWFsc1Nsb3cob3RoZXIpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzVG9w
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gdG9wVmFsdWUoKTsgfQotICAgIAotICAg
IGJvb2wgaXNDbGVhck9yVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPD0gdG9wVmFs
dWUoKTsgfQotICAgIGJvb2wgaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKSBjb25zdCB7IHJldHVybiAh
aXNDbGVhck9yVG9wKCk7IH0KLSAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOwotICAgICAgICByZXR1cm4gISFtX3N0cnVjdHVyZTsK
KyAgICAgICAgcmV0dXJuIG1fc2V0LnNpemUoKTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJl
KiBhdChzaXplX3QgaSkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7Ci0g
ICAgICAgIEFTU0VSVChtX3N0cnVjdHVyZSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkp
OwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBtX3NldC5hdChp
KTsKICAgICB9CiAgICAgCi0gICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGF0KGkpOwotICAgIH0KKyAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgCi0gICAgU3Ry
dWN0dXJlKiBsYXN0KCkgY29uc3QKKyAgICAvLyBGSVhNRTogRWxpbWluYXRlIGFsbCB1c2VzIG9m
IHRoaXMgbWV0aG9kLiBUaGVyZSBzaG91bGRuJ3QgYmUgYW55CisgICAgLy8gc3BlY2lhbC1jYXNp
bmcgZm9yIHRoZSBvbmUtc3RydWN0dXJlIGNhc2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzIyOQorICAgIFN0cnVjdHVyZSogb25seVN0cnVjdHVy
ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoaXNUb3AoKSB8fCBzaXplKCkgIT0gMSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gYXQoMCk7CiAgICAgfQog
ICAgIAotICAgIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25z
dAotICAgIHsKLSAgICAgICAgaWYgKGlzVG9wKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY0Nl
bGw7Ci0gICAgICAgIGlmIChpc0NsZWFyKCkpCi0gICAgICAgICAgICByZXR1cm4gU3BlY05vbmU7
Ci0gICAgICAgIHJldHVybiBzcGVjdWxhdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpOwot
ICAgIH0KKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCop
IGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAgIAotICAgIGJv
b2wgaXNWYWxpZE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCi0gICAgewotICAgICAgICBp
ZiAoaXNUb3AoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGlzQ2xl
YXIoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KTsKLSAgICB9CisgICAgLy8gVGhlIG1ldGhvZHMgYmVs
b3cgYXJlIGFsbCBjb25zZXJ2YXRpdmUgYW5kIGVyciBvbiB0aGUgc2lkZSBvZiBtYWtpbmcgJ3Ro
aXMnIGFwcGVhciBiaWdnZXIKKyAgICAvLyB0aGFuIGl0IGlzLiBGb3IgZXhhbXBsZSwgY29udGFp
bnMoKSBtYXkgcmV0dXJuIHRydWUgaWYgdGhlIHNldCBpcyBjbG9iYmVyZWQgb3IgVE9QLgorICAg
IC8vIGlzU3Vic2V0T2YoKSBtYXkgcmV0dXJuIGZhbHNlIGluIGNhc2Ugb2YgYW1iaWd1aXRpZXMu
IFRoZXJlZm9yZSB5b3Ugc2hvdWxkIG9ubHkgcGVyZm9ybQorICAgIC8vIG9wdGltaXphdGlvbnMg
YXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgInRoaXMgaXMgc21hbGxlciIgcmV0dXJuIHZhbHVlIC0g
c28gZmFsc2UgZm9yCisgICAgLy8gY29udGFpbnMoKSwgdHJ1ZSBmb3IgaXNTdWJzZXRPZigpLCBm
YWxzZSBmb3IgaXNTdXBlcnNldE9mKCksIGFuZCBmYWxzZSBmb3Igb3ZlcmxhcHMoKS4KKworICAg
IGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0OwogICAgIAotICAgIGJv
b2wgaGFzU2luZ2xldG9uKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc05laXRoZXJD
bGVhck5vclRvcCgpOwotICAgIH0KKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJl
U2V0JiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdDsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIHNpbmdsZXRv
bigpIGNvbnN0CisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhl
cikgY29uc3Q7CisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgewotICAgICAgICBBU1NFUlQoaXNOZWl0aGVyQ2xlYXJO
b3JUb3AoKSk7Ci0gICAgICAgIHJldHVybiBtX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG90
aGVyLmlzU3Vic2V0T2YoKnRoaXMpOwogICAgIH0KICAgICAKLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7Ci0gICAgfQorICAgIGJv
b2wgb3ZlcmxhcHMoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3Q7CisgICAgYm9vbCBv
dmVybGFwcyhjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgY2xvYmJlcmVkRmxhZyA9IFN0
cnVjdHVyZVNldDo6cmVzZXJ2ZWRGbGFnOworICAgIHN0YXRpYyBjb25zdCB1aW50cHRyX3QgdG9w
VmFsdWUgPSBTdHJ1Y3R1cmVTZXQ6OnJlc2VydmVkVmFsdWU7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHBvbHltb3JwaGlzbUxpbWl0ID0gMTA7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGNsb2JiZXJlZFN1cHJlbWFjeVRocmVzaG9sZCA9IDI7CisgICAgCisgICAgdm9pZCBmaWx0ZXJT
bG93KFNwZWN1bGF0ZWRUeXBlIHR5cGUpOworICAgIGJvb2wgbWVyZ2VTbG93KGNvbnN0IFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKTsKICAgICAKLSAgICB2b2lkIGR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlYW0mIG91dCwgRHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0CisgICAgYm9vbCBl
cXVhbHNTbG93KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdDsKKyAg
ICAKKyAgICB2b2lkIG1ha2VUb3BXaGVuVGhpbigpCiAgICAgewotICAgICAgICBpZiAoaXNUb3Ao
KSkgewotICAgICAgICAgICAgb3V0LnByaW50KCJUT1AiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgb3V0LnByaW50KCJbIik7Ci0gICAgICAgIGlm
IChtX3N0cnVjdHVyZSkKLSAgICAgICAgICAgIG91dC5wcmludChpbkNvbnRleHQoKm1fc3RydWN0
dXJlLCBjb250ZXh0KSk7Ci0gICAgICAgIG91dC5wcmludCgiXSIpOworICAgICAgICBBU1NFUlQo
bV9zZXQuaXNUaGluKCkpOworICAgICAgICBtX3NldC5tX3BvaW50ZXIgPSB0b3BWYWx1ZTsKICAg
ICB9Ci0KLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICAKKyAgICBi
b29sIG1lcmdlTm90VG9wKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpOworICAgIAorICAgIHZv
aWQgc2V0Q2xvYmJlcmVkKGJvb2wgY2xvYmJlcmVkKQogICAgIHsKLSAgICAgICAgZHVtcEluQ29u
dGV4dChvdXQsIDApOworICAgICAgICBBU1NFUlQoIWlzVG9wKCkgfHwgIWNsb2JiZXJlZCk7Cisg
ICAgICAgIG1fc2V0LnNldFJlc2VydmVkRmxhZyhjbG9iYmVyZWQpOwogICAgIH0KLQotcHJpdmF0
ZToKLSAgICBzdGF0aWMgU3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8U3RydWN0dXJlKj4oMSk7IH0KLSAgICAKLSAgICAvLyBOQi4gVGhpcyBtdXN0IGhhdmUg
YSB0cml2aWFsIGRlc3RydWN0b3IuCiAgICAgCi0gICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJl
ciBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KLSAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOwor
ICAgIFN0cnVjdHVyZVNldCBtX3NldDsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlQ2xvYmJlclN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVD
bG9iYmVyU3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZV9oCisjZGVmaW5lIERGR1N0cnVjdHVyZUNsb2JiZXJT
dGF0ZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2VudW0gU3RydWN0dXJl
Q2xvYmJlclN0YXRlIHsKKyAgICBTdHJ1Y3R1cmVzQXJlV2F0Y2hlZCwgLy8gQ29uc3RhbnRzIHdp
dGggd2F0Y2hhYmxlIHN0cnVjdHVyZXMgbXVzdCBoYXZlIHRob3NlIHN0cnVjdHVyZXMuCisgICAg
U3RydWN0dXJlc0FyZUNsb2JiZXJlZCAvLyBDb25zdGFudHMgd2l0aCB3YXRjaGFibGUgc3RydWN0
dXJlcyBjb3VsZCBoYXZlIGFueSBzdHJ1Y3R1cmUuCit9OworCitpbmxpbmUgU3RydWN0dXJlQ2xv
YmJlclN0YXRlIG1lcmdlKFN0cnVjdHVyZUNsb2JiZXJTdGF0ZSBhLCBTdHJ1Y3R1cmVDbG9iYmVy
U3RhdGUgYikKK3sKKyAgICBzd2l0Y2ggKGEpIHsKKyAgICBjYXNlIFN0cnVjdHVyZXNBcmVXYXRj
aGVkOgorICAgICAgICByZXR1cm4gYjsKKyAgICBjYXNlIFN0cnVjdHVyZXNBcmVDbG9iYmVyZWQ6
CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKK25hbWVzcGFjZSBXVEYgeworCitpbmxpbmUgdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIEpTQzo6REZHOjpTdHJ1Y3R1cmVDbG9iYmVyU3RhdGUgc3RhdGUpCit7CisgICAg
c3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgSlNDOjpERkc6OlN0cnVjdHVyZXNBcmVXYXRjaGVk
OgorICAgICAgICBvdXQucHJpbnQoIlN0cnVjdHVyZXNBcmVXYXRjaGVkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEpTQzo6REZHOjpTdHJ1Y3R1cmVzQXJlQ2xvYmJlcmVkOgorICAgICAg
ICBvdXQucHJpbnQoIlN0cnVjdHVyZXNBcmVDbG9iYmVyZWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHU3Ry
dWN0dXJlQ2xvYmJlclN0YXRlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VHJhbnNpdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUcmFuc2l0aW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVHJhbnNpdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiREZHVHJhbnNpdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQp
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKKwordm9pZCBUcmFuc2l0aW9uOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQs
IER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIG91dC5wcmludChwb2ludGVyRHVt
cEluQ29udGV4dChwcmV2aW91cywgY29udGV4dCksICIgLT4gIiwgcG9pbnRlckR1bXBJbkNvbnRl
eHQobmV4dCwgY29udGV4dCkpOworfQorCit2b2lkIFRyYW5zaXRpb246OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RyYW5zaXRpb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHJhbnNpdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdUcmFuc2l0aW9uX2gKKyNkZWZpbmUgREZHVHJhbnNpdGlv
bl9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFN0
cnVjdHVyZTsKK3N0cnVjdCBEdW1wQ29udGV4dDsKKworbmFtZXNwYWNlIERGRyB7CisKK3N0cnVj
dCBUcmFuc2l0aW9uIHsKKyAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzOworICAgIFN0cnVjdHVyZSog
bmV4dDsKKyAgICAKKyAgICBUcmFuc2l0aW9uKCkKKyAgICAgICAgOiBwcmV2aW91cyhudWxscHRy
KQorICAgICAgICAsIG5leHQobnVsbHB0cikKKyAgICB7CisgICAgfQorICAgIAorICAgIFRyYW5z
aXRpb24oU3RydWN0dXJlKiBwcmV2aW91cywgU3RydWN0dXJlKiBuZXh0KQorICAgICAgICA6IHBy
ZXZpb3VzKHByZXZpb3VzKQorICAgICAgICAsIG5leHQobmV4dCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29u
c3Q7CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cit9OworCit0eXBlZGVmIFZl
Y3RvcjxUcmFuc2l0aW9uLCAzPiBUcmFuc2l0aW9uVmVjdG9yOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Ry
YW5zaXRpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1R5cGVDaGVj
a0hvaXN0aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE2OTU3OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxNSw4ICsyMTUsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleEluQmxvY2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgp
OyArK2luZGV4SW5CbG9jaykgewogICAgICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+
YXQoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsK
LSAgICAgICAgICAgICAgICBjYXNlIENoZWNrU3RydWN0dXJlOgotICAgICAgICAgICAgICAgIGNh
c2UgU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKKyAgICAgICAgICAgICAgICBjYXNl
IENoZWNrU3RydWN0dXJlOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNoaWxkID0gbm9k
ZS0+Y2hpbGQxKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm9wKCkg
IT0gR2V0TG9jYWwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI4NSwxMyAr
Mjg0LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1
Y3R1cmVDaGVjayh2YXJpYWJsZSwgc3ViTm9kZS0+c3RydWN0dXJlU2V0KCkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludDog
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBz
b3VyY2UpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGljZVN0
cnVjdHVyZUNoZWNrKHZhcmlhYmxlLCBzdWJOb2RlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzMxLDcgKzMyMyw2IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZToKLSAgICAgICAgICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50OgogICAgICAgICAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAg
Y2FzZSBQdXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKQEAg
LTM4NiwxMyArMzc3LDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b3RpY2VTdHJ1Y3R1cmVDaGVja0FjY291bnRpbmdGb3JBcnJheU1vZGUodmFyaWFibGUsIHN1Yk5v
ZGUtPnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnQ6IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3ViTm9kZS0+Y2hpbGQxKCkgIT0gc291cmNlKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBub3RpY2VTdHJ1Y3R1cmVDaGVja0FjY291bnRpbmdGb3JB
cnJheU1vZGUodmFyaWFibGUsIHN1Yk5vZGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2tBcnJheTogewogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzdWJOb2RlLT5jaGlsZDEoKSAhPSBzb3VyY2UpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2Uu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFi
bGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2Nr
SW5saW5lcy5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHUGhhc2UuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKKworY2xhc3MgV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZSA6IHB1YmxpYyBQaGFz
ZSB7CitwdWJsaWM6CisgICAgV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZShHcmFwaCYg
Z3JhcGgpCisgICAgICAgIDogUGhhc2UoZ3JhcGgsICJ3YXRjaGFibGUgc3RydWN0dXJlIHdhdGNo
aW5nIikKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAg
IC8vIFRoZXNlIGFyZSBwcmV0dHkgZHVtYiwgYnV0IG5lZWRlZCB0byBwbGFjYXRlIHN1YnNlcXVl
bnQgYXNzZXJ0aW9ucy4gV2UgY29uJ3QgYWN0dWFsbHkKKyAgICAgICAgLy8gaGF2ZSB0byB3YXRj
aCB0aGVzZSBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byB0cmFuc2l0aW9uIGF3YXkgZnJvbSBp
dCwgYnV0IHRoZXkgYXJlCisgICAgICAgIC8vIHdhdGNoYWJsZSBhbmQgc28gd2Ugd2lsbCBhc3Nl
cnQgaWYgdGhleSBhcmVuJ3Qgd2F0Y2hlZC4KKyAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5tX3Zt
LnN0cmluZ1N0cnVjdHVyZS5nZXQoKSk7IAorICAgICAgICB0cnlXYXRjaChtX2dyYXBoLm1fdm0u
Z2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxv
Y2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykg
eworICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOworICAgICAgICAgICAgaWYgKCFibG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IGJsb2NrLT5hdChub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBKU0NvbnN0
YW50OgorICAgICAgICAgICAgICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgICAgICAg
ICAgICAgIHRyeVdhdGNoKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
YXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPmZ1
bmN0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBjYXNlIENoZWNrRXhlY3V0YWJsZToKKyAgICAgICAgICAgICAgICAg
ICAgdHJ5V2F0Y2gobm9kZS0+ZXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZToKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobm9kZS0+c3RydWN0dXJlU2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgICAgICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1
Y3R1cmU6CisgICAgICAgICAgICAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CisgICAgICAgICAg
ICAgICAgICAgIHRyeVdhdGNoKG5vZGUtPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CisgICAgICAgICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAg
ICAgICAgICAgIGNhc2UgQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgICAgICAgICAg
Y2FzZSBSZWFsbG9jYXRlUHJvcGVydHlTdG9yYWdlOgorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChub2RlLT50cmFuc2l0aW9uKCktPnByZXZpb3VzLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0
Y2gobm9kZS0+dHJhbnNpdGlvbigpLT5uZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKS52YXJpYW50c1tpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZh
cmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNo
KHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9u
J3QgbmVlZCB0byB3YXRjaCBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2Ug
dGhhdCB3b3VsZAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9z
ZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY2FsbExpbmtTdGF0dXMgYmVjYXVzZSB3ZSB3b3VsZG4ndCB1
c2UgTXVsdGlHZXRCeU9mZnNldCBpZiBhbnkgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB2YXJpYW50cyBkaWQgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCgh
dmFyaWFudC5jYWxsTGlua1N0YXR1cygpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY2FzZSBNdWx0aVB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBub2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0t
OykgeworICAgICAgICAgICAgICAgICAgICAgICAgUHV0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBu
b2RlLT5tdWx0aVB1dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOworICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5vbGRTdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmFyaWFudC5raW5kKCkgPT0gUHV0QnlJZFZhcmlhbnQ6OlRyYW5zaXRp
b24pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5uZXdTdHJ1
Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNhc2UgTmV3QXJyYXk6
CisgICAgICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgICAgICAgICAg
ICAgdHJ5V2F0Y2gobV9ncmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGlj
KS0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKG5vZGUtPmlu
ZGV4aW5nVHlwZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjYXNlIE5ld1R5cGVkQXJyYXk6CisgICAgICAgICAg
ICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5z
ZW1hbnRpYyktPnR5cGVkQXJyYXlTdHJ1Y3R1cmUobm9kZS0+dHlwZWRBcnJheVR5cGUoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY2FzZSBUb1N0cmluZzoKKyAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9n
cmFwaC5nbG9iYWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKS0+c3RyaW5nT2JqZWN0
U3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAg
ICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmlnaW4u
c2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FzZSBOZXdSZWdl
eHA6CisgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG5vZGUtPm9yaWdpbi5zZW1hbnRpYyktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdHJ5V2F0Y2goSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIHRyeVdhdGNoKHZhbHVl
LmFzQ2VsbCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChKU0NlbGwqIGNlbGwp
CisgICAgeworICAgICAgICBpZiAoY2VsbCkKKyAgICAgICAgICAgIHRyeVdhdGNoKGNlbGwtPnN0
cnVjdHVyZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlXYXRjaChjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNldC5zaXplKCk7
IGktLTspCisgICAgICAgICAgICB0cnlXYXRjaChzZXRbaV0pOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHRyeVdhdGNoKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAgbV9ncmFw
aC53YXRjaHBvaW50cygpLmNvbnNpZGVyKHN0cnVjdHVyZSk7CisgICAgfQorfTsKKworYm9vbCBw
ZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3JhcGgmIGdyYXBoKQoreworICAgIFNh
bXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJERkcgV2F0Y2hhYmxlIFN0cnVjdHVyZSBXYXRj
aGluZyIpOworICAgIHJldHVybiBydW5QaGFzZTxXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1Bo
YXNlPihncmFwaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdXYXRj
aGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gKKyNkZWZpbmUgREZHV2F0Y2hhYmxlU3RydWN0
dXJlV2F0Y2hpbmdQaGFzZV9oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBHcmFwaDsKKworLy8gU2V0IHdhdGNocG9pbnRz
IG9uIGFueSBzdHJ1Y3R1cmVzIHRoYXQgd2Uga25vdyBvZiB0aGF0IGFyZSBjdXJyZW50bHkgd2F0
Y2hhYmxlLiBJdCdzCisvLyBzb21ld2hhdCBjb3VudGVyaW50dWl0aXZlLCBidXQgdGhpcyBlbmRz
IHVwIGJlaW5nIHRoZSBjbGVhbmVzdCBhbmQgbW9zdCBlZmZlY3RpdmUgd2F5CisvLyBvZiByZWR1
Y2luZyBzdHJ1Y3R1cmUgY2hlY2tzIG9uIHRlcm1pbmFsIHN0cnVjdHVyZXM6CisvLworLy8gLSBX
ZSB1c2VkIHRvIG9ubHkgc2V0IHdhdGNocG9pbnRzIG9uIHdhdGNoYWJsZSBzdHJ1Y3R1cmVzIGlm
IHdlIGtuZXcgdGhhdCB0aGlzIHdvdWxkCisvLyAgIHJlbW92ZSBhIHN0cnVjdHVyZSBjaGVjay4g
RXhwZXJpbWVudHMgc2hvdyB0aGF0IHN3aXRjaGluZyBmcm9tIHRoYXQsIHRvIGJsaW5kbHkKKy8v
ICAgc2V0dGluZyB3YXRjaHBvaW50cyBvbiBhbGwgd2F0Y2hhYmxlIHN0cnVjdHVyZXMsIHdhcyBu
b3QgYSByZWdyZXNzaW9uLgorLy8KKy8vIC0gSXQgbWFrZXMgYWJzdHJhY3QgaW50ZXJwcmV0YXRp
b24gYSB3aG9sZSBsb3QgZWFzaWVyLiBXZSBqdXN0IGFzc3VtZSB0aGF0IHdhdGNoYWJsZQorLy8g
ICBzdHJ1Y3R1cmVzIGFyZSB1bmNsb2JiZXJhYmxlIHdpdGhvdXQgaGF2aW5nIHRvIGRvIGFueSBv
dGhlciBsb2dpYy4KKworYm9vbCBwZXJmb3JtV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmcoR3Jh
cGgmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dh
dGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw4ICs2NCw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBo
YW5kbGUoKQogICAgIHsKLSAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwg
bV9ub2RlLCBoYW5kbGVFZGdlKTsKLSAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5v
cCgpKSB7CiAgICAgICAgIGNhc2UgQ29tcGFyZUVxQ29uc3RhbnQ6CiAgICAgICAgIGNhc2UgSXNV
bmRlZmluZWQ6CkBAIC0xMTksMTMgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBhZGRM
YXppbHkoanNDYXN0PEpTRnVuY3Rpb24qPihtX25vZGUtPmZ1bmN0aW9uKCkpLT5hbGxvY2F0aW9u
UHJvZmlsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IAotICAgICAgICBjYXNlIFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50OgotICAgICAgICAg
ICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgKLSAgICAgICAgICAgICAgICBtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYywKLSAgICAgICAgICAgICAgICBtX25vZGUtPmNoaWxkMSgpLT5v
cCgpID09IFdlYWtKU0NvbnN0YW50ID8gQmFkV2Vha0NvbnN0YW50Q2FjaGVXYXRjaHBvaW50IDog
QmFkQ2FjaGVXYXRjaHBvaW50LAotICAgICAgICAgICAgICAgIG1fbm9kZS0+c3RydWN0dXJlKCkt
PnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBWYXJpYWJsZVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBhZGRM
YXppbHkobV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTE0NywyNiArMTM4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAK
LSAgICB2b2lkIGhhbmRsZUVkZ2UoTm9kZSosIEVkZ2UgZWRnZSkKLSAgICB7Ci0gICAgICAgIHN3
aXRjaCAoZWRnZS51c2VLaW5kKCkpIHsKLSAgICAgICAgY2FzZSBTdHJpbmdPYmplY3RVc2U6Ci0g
ICAgICAgIGNhc2UgU3RyaW5nT3JTdHJpbmdPYmplY3RVc2U6IHsKLSAgICAgICAgICAgIFN0cnVj
dHVyZSogc3RyaW5nT2JqZWN0U3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVj
dFN0cnVjdHVyZSgpOwotICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1
Y3R1cmUgPSBzdHJpbmdPYmplY3RTdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZSgpLmFzQ2VsbCgp
LT5zdHJ1Y3R1cmUoKTsKLSAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoLndhdGNocG9pbnRzKCku
aXNWYWxpZE9yTWl4ZWQoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT50cmFuc2l0aW9uV2F0Y2hw
b2ludFNldCgpKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2lu
dHMoKS5hZGRMYXppbHkoCi0gICAgICAgICAgICAgICAgbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMs
IE5vdFN0cmluZ09iamVjdCwKLSAgICAgICAgICAgICAgICBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1
cmUtPnRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgdm9pZCBoYW5kbGVNYXNxdWVyYWRlc0FzVW5k
ZWZpbmVkKCkKICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoLm1hc3F1ZXJhZGVzQXNVbmRlZmlu
ZWRXYXRjaHBvaW50SXNTdGlsbFZhbGlkKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKSkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBpbmxpbmUgQ2FwYWJpbGl0eUxl
dmVsIGNhbkNvbXBpbGUoTm9kZSogCiAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgY2FzZSBCaXRV
UlNoaWZ0OgogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6Ci0gICAgY2FzZSBTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludDoKICAgICBjYXNlIEFycmF5aWZ5VG9TdHJ1Y3R1cmU6CiAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmU6CiAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJ
KHJldmlzaW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MiwxMiArODIsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFNfSklUT3BlcmF0aW9uX0VKLCBm
dW5jdGlvblR5cGUoaW50UHRyLCBpbnRQdHIsIGludDY0KSkgXAogICAgIG1hY3JvKFNfSklUT3Bl
cmF0aW9uX0VKSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50UHRyLCBpbnQ2NCwgaW50NjQpKSBc
CiAgICAgbWFjcm8oU19KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKGludFB0ciwgaW50NjQp
KSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb24sIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSkpIFwK
ICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FSkpKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGlu
dFB0ciwgaW50NjQsIGludDY0LCBpbnQ2NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9F
T1pELCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgZG91Ymxl
VHlwZSkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9p
ZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRP
cGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAg
ICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0
ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlvblR5
cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9w
ZXJhdGlvbl9KLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0KSkgXAorICAgIG1hY3JvKFZf
SklUT3BlcmF0aW9uX1osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIpKSBcCiAgICAgbWFj
cm8oWl9KSVRPcGVyYXRpb25fRCwgZnVuY3Rpb25UeXBlKGludDMyLCBkb3VibGVUeXBlKSkKIAog
Y2xhc3MgSW50cmluc2ljUmVwb3NpdG9yeSA6IHB1YmxpYyBDb21tb25WYWx1ZXMgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJl
dmlzaW9uIDE2OTU3OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw2ICs1NiwyNCBAQCB1c2luZyBuYW1lc3Bh
Y2UgREZHOwogCiBzdGF0aWMgc3RkOjphdG9taWM8aW50PiBjb21waWxlQ291bnRlcjsKIAorI2lm
IEFTU0VSVF9ESVNBQkxFRAorTk9fUkVUVVJOX0RVRV9UT19DUkFTSCBzdGF0aWMgdm9pZCBmdGxV
bnJlYWNoYWJsZSgpCit7CisgICAgQ1JBU0goKTsKK30KKyNlbHNlCitOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHN0YXRpYyB2b2lkIGZ0bFVucmVhY2hhYmxlKAorICAgIENvZGVCbG9jayogY29kZUJs
b2NrLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgsIHVuc2lnbmVkIG5vZGVJbmRleCkKK3sKKyAgICAK
KyAgICBkYXRhTG9nKCJDcmFzaGluZyBpbiB0aG91Z2h0LXRvLWJlLXVucmVhY2hhYmxlIEZUTC1n
ZW5lcmF0ZWQgY29kZSBmb3IgIiwgcG9pbnRlckR1bXAoY29kZUJsb2NrKSwgIiBhdCBiYXNpYyBi
bG9jayAjIiwgYmxvY2tJbmRleCk7CisgICAgaWYgKG5vZGVJbmRleCAhPSBVSU5UX01BWCkKKyAg
ICAgICAgZGF0YUxvZygiLCBub2RlIEAiLCBub2RlSW5kZXgpOworICAgIGRhdGFMb2coIi5cbiIp
OworICAgIENSQVNIKCk7Cit9CisjZW5kaWYKKwogLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5
cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZwog
Ly8gc2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KICNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0so
bG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKSBk
byB7IFwKQEAgLTIzNCw3ICsyNTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICB0
eXBlID0gbV9vdXQuaW50NjQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBub2RlLCAi
QmFkIFBoaSBub2RlIHJlc3VsdCB0eXBlIik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBtX3BoaXMuYWRkKG5vZGUsIGJ1aWxk
QWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgdHlwZSkpOwpAQCAtMjY5LDEwICsyODcsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ssIG1fbmV4dExvd0Jsb2NrKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChPcHRpb25zOjpmdGxDcmFzaGVzKCkpCi0gICAgICAgICAg
ICBtX291dC5jcmFzaE5vblRlcm1pbmFsKCk7CisgICAgICAgICAgICBtX291dC50cmFwKCk7CiAg
ICAgICAgIAogICAgICAgICBpZiAoIW1faGlnaEJsb2NrLT5jZmFIYXNWaXNpdGVkKSB7Ci0gICAg
ICAgICAgICBtX291dC5jcmFzaCgpOworICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nIGJlY2F1c2UgQ0ZB
IGRpZG4ndCByZWFjaC5cbiIpOworICAgICAgICAgICAgY3Jhc2gobV9oaWdoQmxvY2stPmluZGV4
LCBVSU5UX01BWCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0yOTAsNyArMzEwLDI2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjb21waWxlTm9kZSh1bnNpZ25l
ZCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAoIW1fc3RhdGUuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAgICAgaWYgKHZlcmJvc2VD
b21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJCYWlsaW5nLlxu
Iik7CisgICAgICAgICAgICBjcmFzaChtX2hpZ2hCbG9jay0+aW5kZXgsIG1fbm9kZS0+aW5kZXgo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEludmFsaWRhdGUgZG9taW5hdGVkIGJs
b2Nrcy4gVW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMgd2Ugd291bGQgZXhwZWN0CisgICAgICAg
ICAgICAvLyB0aGVtIHRvIGJlIGludmFsaWRhdGVkIGFscmVhZHkuIEJ1dCB5b3UgY2FuIGhhdmUg
dGhlIENGQSBiZWNvbWUgbW9yZQorICAgICAgICAgICAgLy8gcHJlY2lzZSBvdmVyIHRpbWUgYmVj
YXVzZSB0aGUgc3RydWN0dXJlcyBvZiBvYmplY3RzIGNoYW5nZSBvbiB0aGUgbWFpbgorICAgICAg
ICAgICAgLy8gdGhyZWFkLiBGYWlsaW5nIHRvIGRvIHRoaXMgd291bGQgcmVzdWx0IGluIHdlaXJk
IGNyYXNoZXMgZHVlIHRvIGEgdmFsdWUKKyAgICAgICAgICAgIC8vIGJlaW5nIHVzZWQgYnV0IG5v
dCBkZWZpbmVkLiBSYWNlIGNvbmRpdGlvbnMgRlRXIQorICAgICAgICAgICAgZm9yIChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogdGFyZ2V0ID0gbV9ncmFwaC5ibG9jayhibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9kb21pbmF0b3JzLmRvbWlu
YXRlcyhtX2hpZ2hCbG9jaywgdGFyZ2V0KSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxv
ZygiQmxvY2sgIiwgKnRhcmdldCwgIiB3aWxsIGJhaWwgYWxzby5cbiIpOworICAgICAgICAgICAg
ICAgICAgICB0YXJnZXQtPmNmYUhhc1Zpc2l0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTQzMSw5ICs0NzAsNiBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOgogICAgICAgICAgICAgY29tcGlsZUNoZWNrU3RydWN0dXJl
KCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludDoKLSAgICAgICAgICAgIGNvbXBpbGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoK
ICAgICAgICAgICAgIGNvbXBpbGVDaGVja0Z1bmN0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsK
QEAgLTY2OCwxMiArNzA0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBbGxvY2F0aW9uUHJv
ZmlsZVdhdGNocG9pbnQ6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIGRhdGFMb2coIlVucmVjb2duaXplZCBub2RlIGluIEZUTCBiYWNrZW5kOlxuIik7
Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAoV1RGOjpkYXRhRmlsZSgpLCAiICAgICIsIG1fbm9k
ZSk7Ci0gICAgICAgICAgICBkYXRhTG9nKCJcbiIpOwotICAgICAgICAgICAgZGF0YUxvZygiRnVs
bCBncmFwaCBkdW1wOlxuIik7Ci0gICAgICAgICAgICBtX2dyYXBoLmR1bXAoKTsKLSAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0go
bV9ncmFwaCwgbV9ub2RlLCAiVW5yZWNvZ25pemVkIG5vZGUgaW4gRlRMIGJhY2tlbmQiKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNzA3LDcgKzczOCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBtX291dC5zZXQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxk
MSgpKSwgZGVzdGluYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
REZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC03MzMsNyArNzY0LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIHNldEpTVmFsdWUobV9vdXQuZ2V0KHNvdXJjZSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Ug
a2luZCIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC03NzYsNyAr
ODA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtODAxLDcgKzgzMiw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgdXNlIGtpbmQiKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTg1Myw3ICs4ODQsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTg2Miw3ICs4OTMsNyBAQCBwcml2YXRl
OgogICAgIHsKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmFyaWFibGUtPm1hY2hpbmVMb2NhbCgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChvcGVyYW5k
LmlzQXJndW1lbnQoKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCBvcGVy
YW5kLmlzQXJndW1lbnQoKSk7CiAKICAgICAgICAgTFZhbHVlIGpzVmFsdWUgPSBtX291dC5sb2Fk
NjQoYWRkcmVzc0ZvcihvcGVyYW5kKSk7CiAKQEAgLTg4Myw3ICs5MTQsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgc2V0SlNWYWx1ZShqc1ZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtpbmQiKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtOTAyLDcgKzkzMyw3IEBA
IHByaXZhdGU6CiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOwogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1f
c3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIAot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKTsKKyAgICAgICAg
REZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbih2YWx1ZS5tX3R5cGUpKQogICAg
ICAgICAgICAgc2V0SW50MzIobV9vdXQubG9hZDMyKHBheWxvYWRGb3IodmFyaWFibGUtPm1hY2hp
bmVMb2NhbCgpKSkpOwpAQCAtOTU0LDcgKzk4NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgZmx1c2ggZm9ybWF0Iik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTExMzAsNyArMTE2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdXNlIGtp
bmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIwNCw3ICsx
MjM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzA3LDcgKzEzMzgsNyBAQCBwcml2YXRl
OgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9n
cmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KQEAgLTE0MDUsNyArMTQzNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJC
YWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQpAQCAt
MTQ1Niw3ICsxNDg3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDgyLDcgKzE1MTMsNyBA
QCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgIH0KQEAgLTE1NDksNyArMTU4MCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBt
X25vZGUsICJCYWQgdXNlIGtpbmQiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTY0MSwxMiArMTY3Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGNvbXBp
bGVTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludCgpCi0gICAgewotICAgICAgICBhZGRXZWFr
UmVmZXJlbmNlKG1fbm9kZS0+c3RydWN0dXJlKCkpOwotICAgICAgICBzcGVjdWxhdGVDZWxsKG1f
bm9kZS0+Y2hpbGQxKCkpOwotICAgIH0KLSAgICAKICAgICB2b2lkIGNvbXBpbGVDaGVja0Z1bmN0
aW9uKCkKICAgICB7CiAgICAgICAgIExWYWx1ZSBjZWxsID0gbG93Q2VsbChtX25vZGUtPmNoaWxk
MSgpKTsKQEAgLTE3MTUsNyArMTc0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB2bUNhbGwo
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkVuc3VyZUFycmF5U3RvcmFnZSksIG1fY2FsbEZyYW1l
LCBjZWxsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSCht
X2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgCkBAIC0xNzMyLDggKzE3NTcsOCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ubm90aWZ5Q29tcGlsaW5nU3RydWN0
dXJlVHJhbnNpdGlvbihtX2dyYXBoLm1fcGxhbiwgY29kZUJsb2NrKCksIG1fbm9kZSk7CiAKLSAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmU7Ci0gICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gbV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZTsKKyAg
ICAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSBtX25vZGUtPnRyYW5zaXRpb24oKS0+cHJl
dmlvdXM7CisgICAgICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gbV9ub2RlLT50cmFuc2l0
aW9uKCktPm5leHQ7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQob2xkU3RydWN0dXJlLCBvbGRTdHJ1
Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG5ld1N0cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkpOwog
ICAgICAgICBBU1NFUlQob2xkU3RydWN0dXJlLT50eXBlSW5mbygpLmlubGluZVR5cGVGbGFncygp
ID09IG5ld1N0cnVjdHVyZS0+dHlwZUluZm8oKS5pbmxpbmVUeXBlRmxhZ3MoKSk7CiAgICAgICAg
IEFTU0VSVChvbGRTdHJ1Y3R1cmUtPnR5cGVJbmZvKCkudHlwZSgpID09IG5ld1N0cnVjdHVyZS0+
dHlwZUluZm8oKS50eXBlKCkpOwpAQCAtMTc4OSw3ICsxODE0LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1f
bm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTkxNSw3ICsxOTQwLDcgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIGNoZWNr
QXJndW1lbnRzTm90Q3JlYXRlZCgpOwogCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFtX25vZGUt
Pm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgIW1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgIHNldEludDMyKG1fb3V0LmFkZChtX291dC5sb2FkMzJOb25OZWdhdGl2ZShwYXls
b2FkRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSwgbV9vdXQuY29uc3RJbnQzMigtMSkpKTsK
ICAgICB9CiAgICAgCkBAIC0xOTQxLDcgKzE5NjYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
Ly8gRklYTUU6IEZUTCBzaG91bGQgc3VwcG9ydCBhY3RpdmF0aW9ucy4KICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjk1NzYKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJVbmltcGxlbWVudGVkIik7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIFR5cGVkUG9pbnRlciBiYXNlOwpAQCAtMTk3OCw3ICsyMDAz
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTIxMjgsNyArMjE1Myw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5sb2Fk
MzIocG9pbnRlcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIGVsZW1lbnQgc2l6ZSIpOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudFNpemUo
dHlwZSkgPCA0KSB7CkBAIC0yMTcyLDE0ICsyMTk3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmxvYWREb3VibGUocG9pbnRlcik7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgdHlwZWQgYXJyYXkgdHlwZSIpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBzZXREb3Vi
bGUocmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSB9CiAgICAgfQpAQCAtMjI4NSw3ICsyMzEwLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5
cGUiKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwpAQCAtMjM3OCw3ICsyNDAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1
c2Uga2luZCIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnRTaXplKHR5cGUpKSB7CkBAIC0yMzk1
LDcgKzI0MjAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVmVHlwZSA9
IG1fb3V0LnJlZjMyOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgIkJhZCBlbGVtZW50IHNpemUiKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0gZWxzZSAvKiAhaXNJbnQodHlwZSkgKi8gewogICAgICAgICAgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dEb3VibGUoY2hpbGQzKTsKQEAgLTI0MDksNyArMjQz
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICByZWZUeXBlID0gbV9vdXQu
cmVmRG91YmxlOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCB0eXBlZCBhcnJheSB0eXBlIik7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yNDMzLDcgKzI0NTgsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIAotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgYXJyYXkgdHlwZSIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0yNTA1LDcgKzI1MzAsNyBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JB
U0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIGFycmF5IHR5cGUiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KQEAgLTI1NjMsNyArMjU4OCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KIAogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQg
YXJyYXkgdHlwZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAt
MjYwOCw3ICsyNjMzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBnbG9iYWxPYmplY3QtPmFycmF5U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2Nh
dGlvbigKICAgICAgICAgICAgIG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOwogICAgICAgICAKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlLT5pbmRleGluZ1R5cGUoKSA9PSBtX25vZGUt
PmluZGV4aW5nVHlwZSgpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIHN0
cnVjdHVyZS0+aW5kZXhpbmdUeXBlKCkgPT0gbV9ub2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpICYmICFo
YXNBbnlBcnJheVN0b3JhZ2UobV9ub2RlLT5pbmRleGluZ1R5cGUoKSkpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIG51bUVsZW1lbnRzID0gbV9ub2RlLT5udW1DaGlsZHJlbigpOwpAQCAtMjYyMSw3
ICsyNjQ2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+aW5k
ZXhpbmdUeXBlKCkpIHsKICAgICAgICAgICAgICAgICBjYXNlIEFMTF9CTEFOS19JTkRFWElOR19U
WVBFUzoKICAgICAgICAgICAgICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5ERVhJTkdfVFlQRVM6
Ci0gICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgaW5kZXhpbmcgdHlwZSIpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2Fz
ZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVTOgpAQCAtMjYzOSw3ICsyNjY0LDggQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgICAgICAgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGluZGV4
aW5nIHR5cGUiKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yNjg1LDcgKzI3MTEsNyBAQCBwcml2
YXRlOgogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlT
dHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKAogICAgICAgICAgICAgbV9u
b2RlLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChz
dHJ1Y3R1cmUtPmluZGV4aW5nVHlwZSgpID09IG1fbm9kZS0+aW5kZXhpbmdUeXBlKCkpOworICAg
ICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgc3RydWN0dXJlLT5pbmRleGluZ1R5cGUo
KSA9PSBtX25vZGUtPmluZGV4aW5nVHlwZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmICghZ2xv
YmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkgJiYgIWhhc0FueUFycmF5U3RvcmFnZShtX25v
ZGUtPmluZGV4aW5nVHlwZSgpKSkgewogICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMg
PSBtX25vZGUtPm51bUNvbnN0YW50cygpOwpAQCAtMjgyMywyMSArMjg0OSwxOSBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgY29tcGlsZUFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKCkKICAgICB7
Ci0gICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBkYXRhID0gbV9ub2RlLT5zdHJ1Y3R1
cmVUcmFuc2l0aW9uRGF0YSgpOwogICAgICAgICBMVmFsdWUgb2JqZWN0ID0gbG93Q2VsbChtX25v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgCi0gICAgICAgIHNldFN0b3JhZ2UoYWxsb2NhdGVQcm9w
ZXJ0eVN0b3JhZ2Uob2JqZWN0LCBkYXRhLnByZXZpb3VzU3RydWN0dXJlKSk7CisgICAgICAgIHNl
dFN0b3JhZ2UoYWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2Uob2JqZWN0LCBtX25vZGUtPnRyYW5zaXRp
b24oKS0+cHJldmlvdXMpKTsKICAgICB9CiAKICAgICB2b2lkIGNvbXBpbGVSZWFsbG9jYXRlUHJv
cGVydHlTdG9yYWdlKCkKICAgICB7Ci0gICAgICAgIFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhJiBk
YXRhID0gbV9ub2RlLT5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpOworICAgICAgICBUcmFuc2l0
aW9uKiB0cmFuc2l0aW9uID0gbV9ub2RlLT50cmFuc2l0aW9uKCk7CiAgICAgICAgIExWYWx1ZSBv
YmplY3QgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBMVmFsdWUgb2xkU3Rv
cmFnZSA9IGxvd1N0b3JhZ2UobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgIAogICAgICAgICBz
ZXRTdG9yYWdlKAogICAgICAgICAgICAgcmVhbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSgKLSAgICAg
ICAgICAgICAgICBvYmplY3QsIG9sZFN0b3JhZ2UsIGRhdGEucHJldmlvdXNTdHJ1Y3R1cmUsIGRh
dGEubmV3U3RydWN0dXJlKSk7CisgICAgICAgICAgICAgICAgb2JqZWN0LCBvbGRTdG9yYWdlLCB0
cmFuc2l0aW9uLT5wcmV2aW91cywgdHJhbnNpdGlvbi0+bmV4dCkpOwogICAgIH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVUb1N0cmluZygpCkBAIC0yOTIyLDcgKzI5NDYsNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFw
aCwgbV9ub2RlLCAiQmFkIHVzZSBraW5kIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgIH0KQEAgLTMwMTQsNyArMzAzOCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk1ha2VSb3BlMyksIG1fY2FsbEZyYW1lLCBraWRzWzBd
LCBraWRzWzFdLCBraWRzWzJdKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIG51bWJlciBvZiBjaGlsZHJlbiIpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwpAQCAtMzIzOSw3ICszMjYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsKLSAgICAgICAg
dGVybWluYXRlKEJhZENhY2hlKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwpAQCAtMzMxMSw3ICszMzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZXhpdCwgY29udGludWF0aW9uKTsKLSAgICAgICAg
dGVybWluYXRlKEJhZENhY2hlKTsKKyAgICAgICAgc3BlY3VsYXRlKEJhZENhY2hlLCBub1ZhbHVl
KCksIG51bGxwdHIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICAgICAgbV9vdXQudW5yZWFjaGFi
bGUoKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwpAQCAtMzQzMCw3ICszNDU0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMi
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlQ29tcGFyZUVxQ29uc3RhbnQoKQpAQCAt
MzUyMyw3ICszNTQ3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlQ29tcGFyZVN0cmljdEVxQ29uc3RhbnQoKQpAQCAtMzgyMSw3
ICszODQ1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFk
IHVzZSBraW5kIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAKQEAgLTM4NjcsNyArMzg5MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1f
Z3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0zOTIwLDExICszOTQ0LDExIEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNhc2UgU3dpdGNoU3RyaW5nOgotICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19D
UkFTSChtX2dyYXBoLCBtX25vZGUsICJVbmltcGxlbWVudGVkIik7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBzd2l0Y2gga2lu
ZCIpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVSZXR1cm4oKQpAQCAtNDEwOCw3ICs0
MTMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkpOwog
I2VuZGlmCiAgICAgfQotCisgICAgCiAgICAgTFZhbHVlIGRpZE92ZXJmbG93U3RhY2soKQogICAg
IHsKICAgICAgICAgLy8gVGhpcyBkb2VzIGEgdmVyeSBzaW1wbGUgbGVhZiBmdW5jdGlvbiBhbmFs
eXNpcy4gVGhlIGludmFyaWFudCBvZiBGVEwgY2FsbApAQCAtNDM4Myw3ICs0NDA3LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgIkJhZCB1c2Uga2luZHMiKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21wYXJl
RXFPYmplY3RPck90aGVyVG9PYmplY3QoRWRnZSBsZWZ0Q2hpbGQsIEVkZ2UgcmlnaHRDaGlsZCkK
QEAgLTQ2NjIsNyArNDY4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gbV9vdXQu
cGhpKG1fb3V0LmJvb2xlYW4sIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgICAgICB9CiAg
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCB1c2Uga2luZCIp
OwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC00OTEyLDcgKzQ5
MzYsOCBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgdGVybWluYXRlKEV4aXRLaW5kIGtpbmQp
CiAgICAgewotICAgICAgICBzcGVjdWxhdGUoa2luZCwgbm9WYWx1ZSgpLCAwLCBtX291dC5ib29s
ZWFuVHJ1ZSk7CisgICAgICAgIHNwZWN1bGF0ZShraW5kLCBub1ZhbHVlKCksIG51bGxwdHIsIG1f
b3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCB0eXBlQ2hlY2soCkBAIC00OTY4LDcgKzQ5OTMsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQogCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNJbnQzMikp
OworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgIShtX3N0YXRlLmZvck5vZGUo
ZWRnZSkubV90eXBlICYgU3BlY0ludDMyKSk7CiAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJs
ZSk7CiAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CiAgICAgfQpAQCAtNDk3Niw3ICs1
MDAxLDcgQEAgcHJpdmF0ZToKICAgICBlbnVtIEludDUyS2luZCB7IFN0cmljdEludDUyLCBJbnQ1
MiB9OwogICAgIExWYWx1ZSBsb3dJbnQ1MihFZGdlIGVkZ2UsIEludDUyS2luZCBraW5kKQogICAg
IHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoZWRnZS51c2VLaW5kKCkgPT0gSW50NTJSZXBVc2Up
OworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZWRnZS51c2VLaW5kKCkgPT0g
SW50NTJSZXBVc2UpOwogICAgICAgICAKICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZTsK
ICAgICAgICAgCkBAIC01MDAyLDcgKzUwMjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9zdGF0ZS5mb3JOb2Rl
KGVkZ2UpLm1fdHlwZSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhbV9z
dGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSk7CiAgICAgICAgIHRlcm1pbmF0ZShVbmNvdW50YWJs
ZSk7CiAgICAgICAgIHJldHVybiBtX291dC5pbnQ2NFplcm87CiAgICAgfQpAQCAtNTAzOCw3ICs1
MDYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTdHJpY3RJbnQ1MjoKICAgICAgICAgICAg
IHJldHVybiBJbnQ1MjsKICAgICAgICAgfQotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBERkdfQ1JBU0gobV9ncmFwaCwgbV9ub2RlLCAiQmFkIHVzZSBraW5k
Iik7CiAgICAgfQogICAgIAogICAgIExWYWx1ZSBsb3dXaGljaGV2ZXJJbnQ1MihFZGdlIGVkZ2Us
IEludDUyS2luZCYga2luZCkKQEAgLTUwNjgsNyArNTA5Myw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gdW5jaGVja2VkVmFsdWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IFJFTEVBU0VfQVNTRVJUKCEobV9zdGF0ZS5mb3JOb2RlKGVkZ2UpLm1fdHlwZSAmIFNwZWNDZWxs
KSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhKG1fc3RhdGUuZm9yTm9k
ZShlZGdlKS5tX3R5cGUgJiBTcGVjQ2VsbCkpOwogICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFi
bGUpOwogICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRyWmVybzsKICAgICB9CkBAIC01MTM3LDIw
ICs1MTYyLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICB9CiAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVCghKG1fc3RhdGUuZm9yTm9kZShl
ZGdlKS5tX3R5cGUgJiBTcGVjQm9vbGVhbikpOworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG1fbm9kZSwgIShtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlICYgU3BlY0Jvb2xlYW4pKTsK
ICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fb3V0LmJv
b2xlYW5GYWxzZTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvd0RvdWJsZShFZGdlIGVkZ2Up
CiAgICAgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0RvdWJsZShlZGdlLnVzZUtpbmQoKSkp
OworICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXNEb3VibGUoZWRnZS51c2VL
aW5kKCkpKTsKICAgICAgICAgCiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2Rv
dWJsZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
CiAgICAgICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUoKTsKLSAgICAgICAgCi0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlKTsKKyAgICAgICAgREZH
X0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFtX3N0YXRlLmZvck5vZGUoZWRnZSkubV90eXBlKTsK
ICAgICAgICAgdGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgcmV0dXJuIG1fb3V0LmRv
dWJsZVplcm87CiAgICAgfQpAQCAtNTE1OCw4ICs1MTgyLDggQEAgcHJpdmF0ZToKICAgICBMVmFs
dWUgbG93SlNWYWx1ZShFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUgbW9kZSA9IEF1
dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQo
bW9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgZWRnZS51c2VLaW5kKCkg
PT0gVW50eXBlZFVzZSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKCFpc0RvdWJsZShlZGdlLnVz
ZUtpbmQoKSkpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVChlZGdlLnVzZUtpbmQoKSAhPSBJbnQ1
MlJlcFVzZSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9ub2RlLCAhaXNEb3VibGUo
ZWRnZS51c2VLaW5kKCkpKTsKKyAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsIGVk
Z2UudXNlS2luZCgpICE9IEludDUyUmVwVXNlKTsKICAgICAgICAgCiAgICAgICAgIGlmIChlZGdl
LT5oYXNDb25zdGFudCgpKQogICAgICAgICAgICAgcmV0dXJuIG1fb3V0LmNvbnN0SW50NjQoSlNW
YWx1ZTo6ZW5jb2RlKG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQoZWRnZS5ub2RlKCkpKSk7CkBA
IC01MTgyLDcgKzUyMDYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIlZhbHVlIG5vdCBkZWZpbmVk
Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICAKQEAgLTU0NDAsOCArNTQ2NCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICBzcGVjdWxhdGVNaXNjKGVkZ2UpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBkYXRhTG9nKCJVbnN1cHBvcnRl
ZCBzcGVjdWxhdGlvbiB1c2Uga2luZDogIiwgZWRnZS51c2VLaW5kKCksICJcbiIpOwotICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIERGR19DUkFT
SChtX2dyYXBoLCBtX25vZGUsICJVbnN1cHBvcnRlZCBzcGVjdWxhdGlvbiB1c2Uga2luZCIpOwog
ICAgICAgICB9CiAgICAgfQogICAgIApAQCAtNTQ5NCw3ICs1NTE3LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUuYXJyYXlDbGFzcygpKSB7
CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpPcmlnaW5hbEFycmF5OgotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgREZHX0NSQVNI
KG1fZ3JhcGgsIG1fbm9kZSwgIlVuZXhwZWN0ZWQgb3JpZ2luYWwgYXJyYXkiKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGNhc2UgQXJy
YXk6OkFycmF5OgpAQCAtNTUxNCw3ICs1NTM3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQ4KGFycmF5TW9kZS5zaGFwZU1hc2soKSkpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkNvcnJ1cHQgYXJy
YXkgY2xhc3MiKTsKICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CkBA
IC01NjU3LDcgKzU2ODAsNyBAQCBwcml2YXRlOgogICAgICAgICBTdHJ1Y3R1cmUqIHN0cmluZ09i
amVjdFN0cnVjdHVyZSA9CiAgICAgICAgICAgICBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyktPnN0cmluZ09iamVjdFN0cnVjdHVyZSgpOwogICAgICAgICAK
LSAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX2N1cnJlbnRLbm93blN0cnVjdHVy
ZS5pc1N1YnNldE9mKFN0cnVjdHVyZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkKKyAgICAg
ICAgaWYgKG1fc3RhdGUuZm9yTm9kZShlZGdlKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKFN0cnVj
dHVyZVNldChzdHJpbmdPYmplY3RTdHJ1Y3R1cmUpKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKQEAgLTU4NjEsOSArNTg4NCwxMCBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJFeGNlcHRpb24gY2hlY2sgY29udGludWF0aW9uIikpOwogICAgICAgICAK
KyAgICAgICAgTFZhbHVlIGV4Y2VwdGlvbiA9IG1fb3V0LmxvYWQ2NChtX291dC5hYnNvbHV0ZSh2
bSgpLmFkZHJlc3NPZkV4Y2VwdGlvbigpKSk7CisgICAgICAgIAogICAgICAgICBtX291dC5icmFu
Y2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJvNjQobV9vdXQubG9hZDY0KG1fb3V0LmFic29s
dXRlKHZtKCkuYWRkcmVzc09mRXhjZXB0aW9uKCkpKSksCi0gICAgICAgICAgICByYXJlbHkobV9o
YW5kbGVFeGNlcHRpb25zKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKKyAgICAgICAgICAgIG1f
b3V0Lm5vdFplcm82NChleGNlcHRpb24pLCByYXJlbHkobV9oYW5kbGVFeGNlcHRpb25zKSwgdXN1
YWxseShjb250aW51YXRpb24pKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbik7CiAgICAgfQpAQCAtNTk1MCwxMCArNTk3NCw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5l
c3MoKSkgewotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJFeHBlY3RlZCByIiwgb3BlcmFu
ZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0IHdhc24ndC5cbiIpOwotICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmFsaWRhdGVGVExPU1JFeGl0TGl2ZW5lc3MoKSkK
KyAgICAgICAgICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9DU3RyaW5n
KCJFeHBlY3RlZCByIiwgb3BlcmFuZCwgIiB0byBiZSBhdmFpbGFibGUgYnV0IGl0IHdhc24ndC4i
KS5kYXRhKCkpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVh
bnMgdGhhdCB0aGUgREZHJ3MgRENFIHByb3ZlZCB0aGF0IHRoZSB2YWx1ZSBpcyBkZWFkIGluIGJ5
dGVjb2RlCiAgICAgICAgICAgICAgICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJ5dGVjb2RlIGxpdmVu
ZXNzIGFuYWx5c2lzIHRoaW5rcyBpdCdzIGxpdmUuIFRoaXMgaXMKQEAgLTYwNTgsOCArNjA4MCw3
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBk
YXRhTG9nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9kZSwgIlxuIik7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIERGR19DUkFTSChtX2dy
YXBoLCBtX25vZGUsIHRvQ1N0cmluZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5vZGU6ICIsIG5v
ZGUpLmRhdGEoKSk7CiAgICAgfQogICAgIAogICAgIGJvb2wgdHJ5VG9TZXRDb25zdGFudEV4aXRB
cmd1bWVudChPU1JFeGl0JiBleGl0LCB1bnNpZ25lZCBpbmRleCwgTm9kZSogbm9kZSkKQEAgLTYx
MzcsNyArNjE1OCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJDb3JydXB0IGludDUyIGtpbmQiKTsKICAgICB9
CiAgICAgdm9pZCBzZXRKU1ZhbHVlKE5vZGUqIG5vZGUsIExWYWx1ZSB2YWx1ZSkKICAgICB7CkBA
IC02MjY0LDYgKzYyODUsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGFkZHJlc3NGb3Io
b3BlcmFuZCwgVGFnT2Zmc2V0KTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjcmFzaChCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgsIHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisjaWYgQVNTRVJUX0RJ
U0FCTEVECisgICAgICAgIG1fb3V0LmNhbGwobV9vdXQub3BlcmF0aW9uKGZ0bFVucmVhY2hhYmxl
KSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShibG9ja0luZGV4KTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKG5vZGVJbmRleCk7CisjZWxzZQorICAgICAgICBtX291dC5jYWxsKAorICAgICAgICAgICAg
bV9vdXQuaW50VG9QdHIoCisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoZnRsVW5y
ZWFjaGFibGUpLAorICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKAorICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvblR5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICBtX291dC52b2lkVHlw
ZSwgbV9vdXQuaW50UHRyLCBtX291dC5pbnQzMiwgbV9vdXQuaW50MzIpKSksCisgICAgICAgICAg
ICBtX291dC5jb25zdEludFB0cihjb2RlQmxvY2soKSksIG1fb3V0LmNvbnN0SW50MzIoYmxvY2tJ
bmRleCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDMyKG5vZGVJbmRleCkpOworI2VuZGlm
CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgfQorICAgIAogICAgIFZNJiB2bSgp
IHsgcmV0dXJuIG1fZ3JhcGgubV92bTsgfQogICAgIENvZGVCbG9jayogY29kZUJsb2NrKCkgeyBy
ZXR1cm4gbV9ncmFwaC5tX2NvZGVCbG9jazsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmNwcAkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzgsMTEgKzEzOCw2
IEBAIHZvaWQgT3V0cHV0OjpicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwgTEIKICAgICAgICAgICAg
IGNvbnN0SW50MzIobm90VGFrZW5XZWlnaHQuc2NhbGVUb1RvdGFsKHRvdGFsKSkpKTsKIH0KIAot
dm9pZCBPdXRwdXQ6OmNyYXNoTm9uVGVybWluYWwoKQotewotICAgIGNhbGwoaW50VG9QdHIoY29u
c3RJbnRQdHIoYWJvcnQpLCBwb2ludGVyVHlwZShmdW5jdGlvblR5cGUodm9pZFR5cGUpKSkpOwot
fQotCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMTY5
NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAxLDE0ICs0MDEsNiBAQCBwdWJsaWM6CiAgICAgICAgIGNhbGwodHJhcEludHJp
bnNpYygpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjcmFzaE5vblRlcm1pbmFsKCk7Ci0KLSAg
ICB2b2lkIGNyYXNoKCkKLSAgICB7Ci0gICAgICAgIGNyYXNoTm9uVGVybWluYWwoKTsKLSAgICAg
ICAgdW5yZWFjaGFibGUoKTsKLSAgICB9Ci0gICAgCiAgICAgVmFsdWVGcm9tQmxvY2sgYW5jaG9y
KExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBWYWx1ZUZyb21CbG9jayh2YWx1
ZSwgbV9ibG9jayk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuaAkocmV2aXNpb24gMTY5NTc4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw2ICsxNDAsNyBAQCB0eXBlZGVmIHNp
emVfdCBKSVRfT1BFUkFUSU9OICgqU19KSVRPcGVyCiB0eXBlZGVmIHNpemVfdCBKSVRfT1BFUkFU
SU9OICgqU19KSVRPcGVyYXRpb25fRU9Kc3MpKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNTdHJp
bmcqKTsKIHR5cGVkZWYgc2l6ZV90IEpJVF9PUEVSQVRJT04gKCpTX0pJVE9wZXJhdGlvbl9KKShF
bmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
ICgqU3BydF9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwordHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbikoKTsKIHR5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIHZvaWQg
SklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsK
IHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRUNiKShFeGVjU3Rh
dGUqLCBDb2RlQmxvY2sqKTsKQEAgLTE2Nyw2ICsxNjgsOCBAQCB0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklU
T3BlcmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNv
ZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9u
X0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgq
Vl9KSVRPcGVyYXRpb25fRVZtKShFeGVjU3RhdGUqLCBWTSopOwordHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9KKShFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX1opKGludDMyX3QpOwogdHlwZWRlZiBj
aGFyKiBKSVRfT1BFUkFUSU9OICgqUF9KSVRPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBl
ZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9FQykoRXhlY1N0YXRlKiwg
SlNDZWxsKik7CiB0eXBlZGVmIGNoYXIqIEpJVF9PUEVSQVRJT04gKCpQX0pJVE9wZXJhdGlvbl9F
Q2xpKShFeGVjU3RhdGUqLCBDYWxsTGlua0luZm8qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzU4LDYg
KzM1OCwxNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV90cmFuc2l0aW9uV2F0
Y2hwb2ludFNldC5pc1N0aWxsVmFsaWQoKTsKICAgICB9CisgICAgCisgICAgYm9vbCBkZmdTaG91
bGRXYXRjaElmUG9zc2libGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc0RpY3Rp
b25hcnkoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkZmdTaG91bGRXYXRjaCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZGZnU2hvdWxkV2F0Y2hJZlBvc3NpYmxlKCkgJiYgdHJhbnNp
dGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFsaWQoKTsKKyAgICB9CiAgICAgICAgIAogICAgIHZv
aWQgYWRkVHJhbnNpdGlvbldhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkgY29uc3QK
ICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5aWZ5
LXRvLXN0cnVjdHVyZS1jb250cmFkaWN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXlpZnktdG8tc3RydWN0dXJlLWNvbnRyYWRpY3Rp
b24uanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2FycmF5aWZ5LXRvLXN0cnVjdHVyZS1jb250cmFkaWN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYgQEAKK2Z1bmN0aW9uIGZvbyhhcnJheSwgdiwgcCkgeworICAgIGFycmF5WzBd
ID0gMTA7CisgICAgaWYgKHApCisgICAgICAgIHYgPSAiaGVsbG8iOworICAgIGFycmF5WzBdID0g
djsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsr
aSkgeworICAgIHZhciBhcnJheSA9IFs0Ml07CisgICAgZm9vKGFycmF5LCA0MywgZmFsc2UpOwor
ICAgIGlmIChhcnJheVswXSAhPSA0MykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgYXJyYXk7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZnRsLWdldG15YXJndW1lbnRzbGVuZ3RoLWlubGluZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z0bC1nZXRteWFyZ3VtZW50c2xlbmd0aC1p
bmxpbmUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2Z0bC1nZXRteWFyZ3VtZW50c2xlbmd0aC1pbmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5IEBACitmdW5jdGlvbiBmb28oKXsKKyAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0
aDsKK30KKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciByID0g
Zm9vKDExLCAxMiwgMTMsIDE4LCAxOSwgMjApOworICAgIGlmIChyICE9IDYpIHRocm93ICJFcnJv
cjogIityOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211
bHRpLXB1dC1ieS1vZmZzZXQtbXVsdGlwbGUtdHJhbnNpdGlvbnMuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11
bHRpcGxlLXRyYW5zaXRpb25zLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9tdWx0aS1wdXQtYnktb2Zmc2V0LW11bHRpcGxlLXRyYW5zaXRpb25z
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK2Z1bmN0aW9uIGZvbyhvKSB7Cisg
ICAgby54ID0gMTsKKyAgICBvLnkgPSAyOworICAgIG8uYSA9IDM7CisgICAgby5iID0gNDsKKyAg
ICBvLmMgPSA1OworICAgIG8uZCA9IDY7CisgICAgby5lID0gNzsKKyAgICBvLmYgPSA4OworICAg
IG8uZyA9IDk7CisgICAgby5oID0gMTA7CisgICAgby5pID0gMTE7Cit9CisKK25vSW5saW5lKGZv
byk7CisKK2Z1bmN0aW9uIEZvbygpIHsKKyAgICBmb28odGhpcyk7Cit9CisKK3ZhciByZXN1bHQg
PSAwOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgZm9vKHtmOjQy
fSk7CisgICAgcmVzdWx0ICs9IChuZXcgRm9vKCkpLng7Cit9CisKK2lmIChyZXN1bHQgIT0gMTAw
MDAwKQorICAgIHRocm93ICJCYWQgcmVzdWx0OiAiICsgcmVzdWx0OworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Rocm93LWZyb20tZnRsLWluLWxvb3AuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90aHJvdy1mcm9t
LWZ0bC1pbi1sb29wLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC1pbi1sb29wLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTMgQEAKK3ZhciBkaWRUaHJvdyA9IGZhbHNlOwordHJ5IHsKKyAgICAoZnVuY3Rpb24o
KSB7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7IH0KKyAgICAg
ICAgdGhyb3cgNDI7CisgICAgfSkoKTsKK30gY2F0Y2ggKGUpIHsKKyAgICBpZiAoZSAhPSA0MikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgZTsKKyAgICBkaWRUaHJvdyA9
IHRydWU7Cit9CitpZiAoIWRpZFRocm93KQorICAgIHRocm93ICJFcnJvcjogc2hvdWxkIGhhdmUg
dGhyb3duIGJ1dCBkaWRuJ3QuIjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvdGhyb3ctZnJvbS1mdGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy90aHJvdy1mcm9tLWZ0bC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGhyb3ctZnJvbS1mdGwuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNSBAQAorZnVuY3Rpb24gZm9vKHApIHsKKyAgICB2YXIgbyA9IHtm
OjQyfTsKKyAgICBpZiAocCkKKyAgICAgICAgdGhyb3cgbzsKKyAgICByZXR1cm4gbzsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAg
IHZhciBvID0gZm9vKGZhbHNlKTsKKyAgICBpZiAoby5mICE9IDQyKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBvLmY7Cit9CisKK3ZhciBkaWRUaHJvdyA9IGZhbHNlOwor
dHJ5IHsKKyAgICBmb28odHJ1ZSk7Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKGUuZiAhPSA0MikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGluIGNhdGNoOiAiICsgby5mOworICAg
IGRpZFRocm93ID0gdHJ1ZTsKK30KK2lmICghZGlkVGhyb3cpCisgICAgdGhyb3cgIkVycm9yOiBz
aG91bGQgaGF2ZSB0aHJvd24gYnV0IGRpZG4ndC4iOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2OTU3OCkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTQtMDYtMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBb
ZnRsb3B0XSBBSSBzaG91bGQgYmUgYWJsZSB0cmFjayBzdHJ1Y3R1cmUgc2V0cyBsYXJnZXIgdGhh
biAxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjgw
NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0
Zi9CYWcuaDoKKyAgICAgICAgKFdURjo6QmFnOjpOb2RlOjpOb2RlKToKKyAgICAgICAgKFdURjo6
QmFnOjphZGQpOgorCiAyMDE0LTA1LTE5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgW2Z0bG9wdF0gREZHIGJ5dGVjb2RlIHBhcnNlciBzaG91bGQgdHVybiBHZXRC
eUlkIHdpdGggbm90aGluZyBidXQgYSBHZXR0ZXIgc3R1YiBhcyBzdHVmZitoYW5kbGVDYWxsLCBh
bmQgaGFuZGxlQ2FsbCBzaG91bGQgYmUgYWxsb3dlZCB0byBpbmxpbmUgaWYgaXQgd2FudHMgdG8K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JhZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0JhZy5oCShyZXZpc2lvbiAxNjk1NzgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CYWcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNiArMzQsMTIgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBOb2RlIHsKICAg
ICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgorICAgICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgorICAgICAgICBOb2RlKEFyZ3MuLi4gYXJncykKKyAgICAg
ICAgICAgIDogbV9pdGVtKGFyZ3MuLi4pCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgVCBtX2l0ZW07CiAgICAgICAgIE5vZGUqIG1fbmV4dDsKICAgICB9OwpAQCAtNTMs
OSArNTksMTAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIFQqIGFkZCgp
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJncz4KKyAgICBUKiBhZGQoQXJncy4uLiBhcmdz
KQogICAgIHsKLSAgICAgICAgTm9kZSogbmV3Tm9kZSA9IG5ldyBOb2RlOworICAgICAgICBOb2Rl
KiBuZXdOb2RlID0gbmV3IE5vZGUoYXJncy4uLik7CiAgICAgICAgIG5ld05vZGUtPm1fbmV4dCA9
IG1faGVhZDsKICAgICAgICAgbV9oZWFkID0gbmV3Tm9kZTsKICAgICAgICAgcmV0dXJuICZuZXdO
b2RlLT5tX2l0ZW07CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjk1NzgpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBAQAorMjAxNC0wNi0wMSAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFtmdGxvcHRdIEFJIHNob3Vs
ZCBiZSBhYmxlIHRyYWNrIHN0cnVjdHVyZSBzZXRzIGxhcmdlciB0aGFuIDEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyODA3MworCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnkt
aWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlv
bi1zaW1wbGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQtYnktaWQtYmlt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1
Y3R1cmUtZWxpbWluYXRpb24uaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9nZXQt
YnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1z
dHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL3NjcmlwdC10ZXN0cy9nZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbi5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0
LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qczogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVj
dHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanM6IEFkZGVkLgorCiAyMDE0LTA2LTAzICBNYXR0aGV3
IE1pcm1hbiAgPG1taXJtYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIEFkZGVkIHN5
c3RlbSBmb3IgaW5saW5pbmcgbmF0aXZlIGZ1bmN0aW9ucyB2aWEgdGhlIEZUTC4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUt
ZWxpbWluYXRpb24tZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnkt
aWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBo
aWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnkt
aWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtYmlt
b3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9nZXQtYnktaWQtYmltb3Jw
aGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24t
c2ltcGxlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnkt
aWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1j
aGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2lt
cGxlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
b3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvZ2V0LWJ5LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24u
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1v
cnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJl
LWVsaW1pbmF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWJpbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQt
Y2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvZ2V0LWJ5LWlkLWNoZWNrLXN0cnVjdHVyZS1lbGlt
aW5hdGlvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtY2hlY2stc3RydWN0
dXJlLWVsaW1pbmF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9nZXQtYnktaWQtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxp
bWluYXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9nZXQtYnktaWQtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVj
dHVyZS1lbGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvZ2V0LWJ5LWlkLXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1l
bGltaW5hdGlvbi1zaW1wbGUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLXNpbXBsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWlu
YXRpb24tc2ltcGxlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2dldC1ieS1pZC1xdWFkbW9y
cGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3Ry
dWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBsZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9nZXQtYnktaWQtcXVhZG1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLXNpbXBsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2dldC1ieS1pZC1xdWFk
bW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLXNpbXBs
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9n
ZXQtYnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9nZXQt
YnktaWQtYmltb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0g
e2E6MX07CisgICAgdmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICByZXN1bHQgXj0g
by5hOworICAgICAgICB2YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0
bXA7CisgICAgfQorICAgIGlmIChyZXN1bHQgIT0gMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1p
bmF0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2dldC1ieS1pZC1iaW1vcnBoaWMtY2hlY2stc3RydWN0dXJlLWVsaW1pbmF0aW9uLmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5
LWlkLWJpbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6MSwgYjoy
LCBjOjMsIGQ6NCwgZTo1LCBmOjYsIGc6NywgaDo4LCBpOjksIGo6MTAsIGs6MTF9OworICAgIHZh
ciBwID0ge2E6MiwgYjozLCBjOjQsIGQ6NSwgZTo2LCBmOjcsIGc6OCwgaDo5LCBpOjEwLCBqOjEx
LCBrOjEyLCBsOjEzfTsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICByZXN1bHQgKz0gby5hIF4gby5iIF4gby5jIF4g
by5kIF4gby5lIF4gby5mIF4gby5nIF4gby5oIF4gby5pIF4gby5qIF4gby5rOworICAgICAgICB2
YXIgdG1wID0gbzsKKyAgICAgICAgbyA9IHA7CisgICAgICAgIHAgPSB0bXA7CisgICAgfQorICAg
IGlmIChyZXN1bHQgIT0gNjUwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24uanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlkLWNoZWNr
LXN0cnVjdHVyZS1lbGltaW5hdGlvbi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1pZC1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRp
b24uanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24oKSB7CisgICAg
dmFyIG8gPSB7YToxLCBiOjIsIGM6MywgZDo0LCBlOjUsIGY6NiwgZzo3LCBoOjgsIGk6OSwgajox
MCwgazoxMX07CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDAwOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBvLmEgXiBvLmIgfCBvLmMgXiBvLmQgJiBv
LmUgXiBvLmYgfCBvLmcgXiBvLmggJiBvLmkgXiBvLmogfCBvLms7CisgICAgaWYgKHJlc3VsdCAh
PSAxNTAwMDAwMCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1i
eS1pZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2dldC1ieS1p
ZC1xdWFkbW9ycGhpYy1jaGVjay1zdHJ1Y3R1cmUtZWxpbWluYXRpb24tc2ltcGxlLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvZ2V0LWJ5LWlk
LXF1YWRtb3JwaGljLWNoZWNrLXN0cnVjdHVyZS1lbGltaW5hdGlvbi1zaW1wbGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNyBAQAorKGZ1bmN0aW9uKCkgeworICAgIHZhciBvID0ge2E6
MX07CisgICAgdmFyIHAgPSB7YToyLCBsOjEzfTsKKyAgICB2YXIgcSA9IHthOjMsIGI6M307Cisg
ICAgdmFyIHIgPSB7YTo0LCBjOjV9OworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHJlc3VsdCBePSBvLmE7CisgICAg
ICAgIHZhciB0bXAgPSBvOworICAgICAgICBvID0gcDsKKyAgICAgICAgcCA9IHE7CisgICAgICAg
IHEgPSByOworICAgICAgICByID0gdG1wOworICAgIH0KKyAgICBpZiAocmVzdWx0ICE9IDApCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7Cg==
</data>
<flag name="review"
          id="256959"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>