<?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>114906</bug_id>
          
          <creation_ts>2013-04-20 15:22:20 -0700</creation_ts>
          <short_desc>fourthTier: value profiles and array profiles should be thread-safe enough to be accessible in a concurrent compilation thread</short_desc>
          <delta_ts>2013-04-20 22:12:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>112839</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>878809</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-20 15:22:20 -0700</bug_when>
    <thetext>And all profile updating should happen on the main thread, to make the concurrency model simpler to think about.  For example, I don&apos;t want to have *storing* into a value profile from JIT code to have to be thread safe enough to handle updates on another thread.  So, all updating happens on the main thread, and the concurrent thread just reads out the results and never the stored values.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878810</commentid>
    <comment_count>1</comment_count>
      <attachid>198949</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-20 15:25:52 -0700</bug_when>
    <thetext>Created attachment 198949
work in progress

Not yet done because I need to run some benchmarks before declaring victory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878818</commentid>
    <comment_count>2</comment_count>
      <attachid>198953</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-20 20:30:39 -0700</bug_when>
    <thetext>Created attachment 198953
work in progress

Took a slightly different approach - where profiles can even be updated from the compilation thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878823</commentid>
    <comment_count>3</comment_count>
      <attachid>198954</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-20 20:51:15 -0700</bug_when>
    <thetext>Created attachment 198954
the patch

It&apos;s neutral on the benchmarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878824</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-20 21:12:30 -0700</bug_when>
    <thetext>Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

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

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

                                                     TipOfTree               LockedProfiles                                  
SunSpider:
   3d-cube                                         9.3577+-0.1587     ?      9.3742+-0.1582        ?
   3d-morph                                        8.7822+-0.1367     ?      8.8460+-0.1146        ?
   3d-raytrace                                    10.6101+-0.1796           10.4874+-0.1447          might be 1.0117x faster
   access-binary-trees                             1.8903+-0.0075     ?      1.8937+-0.0072        ?
   access-fannkuch                                 7.7053+-0.0789     ?      7.8351+-0.1151        ? might be 1.0168x slower
   access-nbody                                    4.6971+-0.0189            4.6670+-0.0602        
   access-nsieve                                   4.9093+-0.0711     ?      4.9193+-0.0716        ?
   bitops-3bit-bits-in-byte                        1.8557+-0.0140            1.8499+-0.0099        
   bitops-bits-in-byte                             6.9927+-0.1047     ?      7.0584+-0.1035        ?
   bitops-bitwise-and                              2.7573+-0.0829            2.7174+-0.0826          might be 1.0147x faster
   bitops-nsieve-bits                              4.7219+-0.0696     !      4.7994+-0.0079        ! definitely 1.0164x slower
   controlflow-recursive                           3.1428+-0.0479            3.1409+-0.0463        
   crypto-aes                                      7.7837+-0.1504     ?      7.9150+-0.1148        ? might be 1.0169x slower
   crypto-md5                                      4.3214+-0.0430     ^      4.1981+-0.0297        ^ definitely 1.0294x faster
   crypto-sha1                                     3.3035+-0.0191     ?      3.3212+-0.0250        ?
   date-format-tofte                              15.2757+-0.1966           15.0819+-0.1917          might be 1.0129x faster
   date-format-xparb                               9.4112+-0.1844     ?      9.5035+-0.2090        ?
   math-cordic                                     4.0509+-0.0078            4.0469+-0.0053        
   math-partial-sums                              12.5247+-0.1358     ?     12.5491+-0.1033        ?
   math-spectral-norm                              3.1664+-0.0125     ?      3.1702+-0.0120        ?
   regexp-dna                                     12.7820+-0.1697     ?     13.0064+-0.2351        ? might be 1.0176x slower
   string-base64                                   5.1199+-0.1657     ?      5.1662+-0.1281        ?
   string-fasta                                   10.7759+-0.1193     ?     10.7952+-0.1117        ?
   string-tagcloud                                14.3294+-0.2037     ?     14.3874+-0.1837        ?
   string-unpack-code                             28.2994+-0.3665           27.9547+-0.0960          might be 1.0123x faster
   string-validate-input                           7.3357+-0.1831     ?      7.5019+-0.1488        ? might be 1.0227x slower

   &lt;arithmetic&gt; *                                  7.9193+-0.0662     ?      7.9303+-0.0662        ? might be 1.0014x slower
   &lt;geometric&gt;                                     6.3772+-0.0480     ?      6.3906+-0.0490        ? might be 1.0021x slower
   &lt;harmonic&gt;                                      5.1467+-0.0286     ?      5.1504+-0.0328        ? might be 1.0007x slower

                                                     TipOfTree               LockedProfiles                                  
V8Spider:
   crypto                                         87.0727+-0.1760     ?     87.2338+-0.1868        ?
   deltablue                                     133.9180+-2.4561          132.3694+-0.6398          might be 1.0117x faster
   earley-boyer                                   82.9392+-0.3103     ?     83.2783+-0.3546        ?
   raytrace                                       61.8696+-0.1141     ?     61.8927+-0.1181        ?
   regexp                                        101.8283+-0.5304          101.1703+-0.2126        
   richards                                      119.3224+-0.5014          119.0459+-0.6377        
   splay                                          48.7945+-0.2703     ?     48.9303+-0.3764        ?

   &lt;arithmetic&gt;                                   90.8207+-0.3756           90.5601+-0.1210          might be 1.0029x faster
   &lt;geometric&gt; *                                  86.2339+-0.2771           86.0972+-0.1082          might be 1.0016x faster
   &lt;harmonic&gt;                                     81.5146+-0.2269           81.4820+-0.1446          might be 1.0004x faster

                                                     TipOfTree               LockedProfiles                                  
Octane and V8v7:
   encrypt                                        0.46966+-0.00049    ?     0.46999+-0.00085       ?
   decrypt                                        8.69318+-0.02709          8.67684+-0.02330       
   deltablue                             x2       0.60747+-0.00162    ^     0.60326+-0.00214       ^ definitely 1.0070x faster
   earley                                         0.92214+-0.00462          0.91742+-0.00592       
   boyer                                         12.82812+-0.05679         12.77076+-0.03563       
   raytrace                              x2       4.43990+-0.01908    ^     4.40635+-0.01145       ^ definitely 1.0076x faster
   regexp                                x2      32.42046+-0.15848         32.18105+-0.12641       
   richards                              x2       0.30838+-0.00303          0.30709+-0.00094       
   splay                                 x2       0.64601+-0.02058    ?     0.64933+-0.02367       ?
   navier-stokes                         x2      10.81009+-0.01830         10.80643+-0.02618       
   closure                                        0.30599+-0.03470    ?     0.30885+-0.03519       ?
   jquery                                         4.39313+-0.54706          4.38684+-0.54681       
   gbemu                                 x2     251.63448+-17.63160   ?   253.53389+-17.96221      ?
   box2d                                 x2      31.74139+-0.11422         31.56868+-0.09255       

V8v7:
   &lt;arithmetic&gt;                                   7.58611+-0.02251          7.54638+-0.01924         might be 1.0053x faster
   &lt;geometric&gt; *                                  2.45211+-0.01042          2.44386+-0.01086         might be 1.0034x faster
   &lt;harmonic&gt;                                     0.94206+-0.00663          0.93961+-0.00584         might be 1.0026x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                  31.49221+-1.61600    ?    31.62013+-1.64492       ? might be 1.0041x slower
   &lt;geometric&gt; *                                  4.39714+-0.06758          4.38864+-0.06683         might be 1.0019x faster
   &lt;harmonic&gt;                                     1.06625+-0.02007          1.06536+-0.01805         might be 1.0008x faster

                                                     TipOfTree               LockedProfiles                                  
Kraken:
   ai-astar                                       493.797+-0.907      ?     493.813+-0.665         ?
   audio-beat-detection                           245.307+-1.531      ?     246.430+-2.557         ?
   audio-dft                                      321.017+-1.564      ?     325.186+-9.934         ? might be 1.0130x slower
   audio-fft                                      143.223+-0.221      ?     143.286+-0.387         ?
   audio-oscillator                               234.035+-1.000            233.822+-1.129         
   imaging-darkroom                               292.199+-1.119      ?     293.117+-1.502         ?
   imaging-desaturate                             160.042+-0.174      ?     160.868+-1.159         ?
   imaging-gaussian-blur                          397.468+-0.189      ?     397.713+-0.306         ?
   json-parse-financial                            82.745+-0.655             81.733+-1.090           might be 1.0124x faster
   json-stringify-tinderbox                       101.058+-0.248            100.832+-0.355         
   stanford-crypto-aes                            237.758+-2.359            237.639+-0.929         
   stanford-crypto-ccm                            110.601+-0.319      !     111.442+-0.180         ! definitely 1.0076x slower
   stanford-crypto-pbkdf2                         272.755+-1.688      ?     275.117+-1.367         ?
   stanford-crypto-sha256-iterative               115.032+-0.084      !     116.446+-0.628         ! definitely 1.0123x slower

   &lt;arithmetic&gt; *                                 229.074+-0.413      ?     229.817+-0.823         ? might be 1.0032x slower
   &lt;geometric&gt;                                    200.281+-0.346      ?     200.829+-0.553         ? might be 1.0027x slower
   &lt;harmonic&gt;                                     174.456+-0.309      ?     174.726+-0.425         ? might be 1.0015x slower

                                                     TipOfTree               LockedProfiles                                  
JSRegress:
   adapt-to-double-divide                         22.5115+-0.1183     ?     22.8367+-0.3673        ? might be 1.0144x slower
   aliased-arguments-getbyval                      0.9167+-0.0096     ?      0.9213+-0.0119        ?
   allocate-big-object                             2.5469+-0.0329     ?      2.5613+-0.0436        ?
   arity-mismatch-inlining                         0.7642+-0.0276     ?      0.7785+-0.0108        ? might be 1.0187x slower
   array-access-polymorphic-structure              7.1490+-0.1077            7.0796+-0.1103        
   array-with-double-add                           5.8287+-0.0823            5.8219+-0.0882        
   array-with-double-increment                     4.2004+-0.0982            4.0961+-0.0121          might be 1.0255x faster
   array-with-double-mul-add                       7.1422+-0.0735            7.1165+-0.1043        
   array-with-double-sum                           7.9914+-0.0916            7.8049+-0.1066          might be 1.0239x faster
   array-with-int32-add-sub                       10.4742+-0.1030           10.4641+-0.0868        
   array-with-int32-or-double-sum                  7.9046+-0.0962     ?      8.0475+-0.0973        ? might be 1.0181x slower
   big-int-mul                                     4.9826+-0.0485            4.9509+-0.0687        
   boolean-test                                    4.4419+-0.0639            4.4191+-0.0609        
   cast-int-to-double                             13.9858+-0.1402     ?     14.2121+-0.2699        ? might be 1.0162x slower
   cell-argument                                  14.5162+-0.1737           14.4454+-0.0828        
   cfg-simplify                                    3.9474+-0.0744     ?      4.0669+-0.0616        ? might be 1.0303x slower
   cmpeq-obj-to-obj-other                         11.8995+-0.2384           11.5825+-0.1349          might be 1.0274x faster
   constant-test                                   8.5458+-0.0976            8.4134+-0.1513          might be 1.0157x faster
   direct-arguments-getbyval                       0.8419+-0.0102     ?      0.8453+-0.0097        ?
   double-pollution-getbyval                      10.7697+-0.0884           10.7130+-0.0797        
   double-pollution-putbyoffset                    4.9124+-0.1097     ?      4.9438+-0.1086        ?
   empty-string-plus-int                          11.0699+-0.1978           10.9891+-0.1770        
   external-arguments-getbyval                     2.2252+-0.0392            2.2166+-0.0309        
   external-arguments-putbyval                     3.3272+-0.0155     !      3.6172+-0.1346        ! definitely 1.0872x slower
   Float32Array-matrix-mult                       14.2409+-0.1130           14.1045+-0.0893        
   fold-double-to-int                             22.1086+-0.2176           22.0057+-0.1383        
   function-dot-apply                              3.1863+-0.0086     ?      3.1880+-0.0086        ?
   function-test                                   5.0413+-0.1051            5.0305+-0.0481        
   get-by-id-chain-from-try-block                  7.4156+-0.1005            7.3976+-0.1091        
   HashMap-put-get-iterate-keys                   96.1600+-0.3957     ?     96.7137+-0.5964        ?
   HashMap-put-get-iterate                        98.0257+-0.4533     ?     98.5038+-0.9235        ?
   HashMap-string-put-get-iterate                 74.4078+-0.6526           74.0775+-0.5569        
   indexed-properties-in-objects                   4.5325+-0.0484     ?      4.5702+-0.0112        ?
   inline-arguments-access                         1.2572+-0.0086     ?      1.2603+-0.0071        ?
   inline-arguments-local-escape                  23.3249+-0.0890     ?     23.3771+-0.1695        ?
   inline-get-scoped-var                           6.5737+-0.0945     ?      6.5918+-0.0952        ?
   inlined-put-by-id-transition                   16.4314+-0.2789     ?     16.6052+-0.2854        ? might be 1.0106x slower
   int-or-other-abs-then-get-by-val                8.8750+-0.1165     ?      8.9835+-0.0935        ? might be 1.0122x slower
   int-or-other-abs-zero-then-get-by-val          37.1456+-0.1456           37.1352+-0.1249        
   int-or-other-add-then-get-by-val               10.2326+-0.0810     ?     10.3169+-0.1187        ?
   int-or-other-add                               10.5211+-0.1136           10.5004+-0.1146        
   int-or-other-div-then-get-by-val                7.8959+-0.0994     ?      7.9301+-0.1153        ?
   int-or-other-max-then-get-by-val               10.2085+-0.1291            9.9445+-0.1652          might be 1.0265x faster
   int-or-other-min-then-get-by-val                8.2387+-0.1020            8.1549+-0.1104          might be 1.0103x faster
   int-or-other-mod-then-get-by-val                8.0218+-0.1048            8.0214+-0.1037        
   int-or-other-mul-then-get-by-val                7.2196+-0.0991            7.1165+-0.0972          might be 1.0145x faster
   int-or-other-neg-then-get-by-val                8.0586+-0.1018     ?      8.1966+-0.1095        ? might be 1.0171x slower
   int-or-other-neg-zero-then-get-by-val          36.5992+-0.2317     ?     36.9415+-0.3862        ?
   int-or-other-sub-then-get-by-val               10.2109+-0.1028     ?     10.3554+-0.1703        ? might be 1.0142x slower
   int-or-other-sub                                8.3772+-0.0709            8.2583+-0.1048          might be 1.0144x faster
   int-overflow-local                             12.9395+-0.1211           12.9188+-0.0919        
   Int16Array-bubble-sort                         49.4740+-0.1802           49.4137+-0.1813        
   Int16Array-load-int-mul                         1.8950+-0.0060     ?      1.8966+-0.0063        ?
   Int8Array-load                                  4.7644+-0.0826     !      4.8862+-0.0067        ! definitely 1.0256x slower
   integer-divide                                 15.2369+-0.1459           15.1727+-0.1013        
   integer-modulo                                  2.1033+-0.0167     ?      2.1119+-0.0163        ?
   make-indexed-storage                            3.9162+-0.0407     ?      3.9443+-0.0416        ?
   method-on-number                               23.6398+-0.3938           23.5764+-0.3127        
   nested-function-parsing-random                384.1489+-14.0031         381.4000+-12.6213       
   nested-function-parsing                        47.6256+-1.1361           47.5545+-1.0828        
   new-array-buffer-dead                           3.6394+-0.0126            3.6325+-0.0103        
   new-array-buffer-push                          10.6630+-0.1637           10.4388+-0.1406          might be 1.0215x faster
   new-array-dead                                 28.3626+-0.0896           28.2999+-0.0815        
   new-array-push                                  6.8813+-0.1150     ?      7.0085+-0.0714        ? might be 1.0185x slower
   number-test                                     4.3281+-0.0527            4.3227+-0.0551        
   object-closure-call                             8.3257+-0.1124     ?      8.3591+-0.1050        ?
   object-test                                     4.8104+-0.0763     ?      4.9217+-0.0508        ? might be 1.0231x slower
   poly-stricteq                                  92.6247+-1.4788           91.2503+-0.4066          might be 1.0151x faster
   polymorphic-structure                          20.1684+-0.3911           20.0360+-0.0805        
   polyvariant-monomorphic-get-by-id              12.5449+-0.0906           12.4562+-0.0919        
   rare-osr-exit-on-local                         20.5387+-0.0891     ?     20.6179+-0.1056        ?
   register-pressure-from-osr                     31.7010+-0.1677           31.5039+-0.1150        
   simple-activation-demo                         34.4688+-0.1186     ?     34.4741+-0.1295        ?
   slow-array-profile-convergence                  4.3041+-0.0125     !      4.3564+-0.0215        ! definitely 1.0121x slower
   slow-convergence                                3.8257+-0.0237            3.8245+-0.0044        
   sparse-conditional                              1.3387+-0.0086            1.3318+-0.0112        
   splice-to-remove                               50.8234+-0.2336     !     52.1715+-0.3243        ! definitely 1.0265x slower
   string-concat-object                            2.7553+-0.0461            2.7442+-0.0173        
   string-concat-pair-object                       2.6758+-0.0558            2.6701+-0.0116        
   string-concat-pair-simple                      17.1965+-0.2963           17.1176+-0.3033        
   string-concat-simple                           17.2186+-0.3233     ?     17.5491+-0.2397        ? might be 1.0192x slower
   string-cons-repeat                             10.1143+-0.0266     ?     10.1491+-0.0342        ?
   string-cons-tower                              11.2223+-0.3118           10.9818+-0.0342          might be 1.0219x faster
   string-equality                               104.7659+-0.1691     ?    105.4687+-1.2385        ?
   string-hash                                     2.6622+-0.0097     ?      2.6650+-0.0102        ?
   string-repeat-arith                            47.1502+-0.1759           47.1080+-0.4356        
   string-sub                                     91.8966+-1.1900           91.0326+-0.5131        
   string-test                                     4.2904+-0.0264            4.2878+-0.0383        
   structure-hoist-over-transitions                3.2757+-0.0258     ?      3.2958+-0.0287        ?
   tear-off-arguments-simple                       1.7888+-0.0102     ?      1.8200+-0.0309        ? might be 1.0174x slower
   tear-off-arguments                              3.4013+-0.0100            3.3993+-0.0085        
   temporal-structure                             20.8644+-0.1324     ?     20.9519+-0.1212        ?
   to-int32-boolean                               30.6383+-0.1004           30.6357+-0.1210        
   undefined-test                                  4.5353+-0.0534     ?      4.5646+-0.0349        ?

   &lt;arithmetic&gt;                                   21.0505+-0.1640           21.0271+-0.1503          might be 1.0011x faster
   &lt;geometric&gt; *                                   9.4526+-0.0282     ?      9.4663+-0.0213        ? might be 1.0014x slower
   &lt;harmonic&gt;                                      5.2016+-0.0251     ?      5.2246+-0.0170        ? might be 1.0044x slower

                                                     TipOfTree               LockedProfiles                                  
All benchmarks:
   &lt;arithmetic&gt;                                   41.2286+-0.3342     ?     41.2867+-0.3438        ? might be 1.0014x slower
   &lt;geometric&gt;                                    11.4432+-0.0570     ?     11.4554+-0.0521        ? might be 1.0011x slower
   &lt;harmonic&gt;                                      3.7104+-0.0353     ?      3.7161+-0.0315        ? might be 1.0015x slower

                                                     TipOfTree               LockedProfiles                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                23.0461+-0.1342     ?     23.0578+-0.1279        ? might be 1.0005x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878826</commentid>
    <comment_count>5</comment_count>
      <attachid>198955</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-20 21:38:23 -0700</bug_when>
    <thetext>Created attachment 198955
the patch

Fixed the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>878828</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-20 22:12:58 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/148804</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198949</attachid>
            <date>2013-04-20 15:25:52 -0700</date>
            <delta_ts>2013-04-20 20:30:39 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>73766</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4Nzk3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxMy0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IHZhbHVlIHByb2ZpbGVzIGFuZCBhcnJheSBwcm9maWxlcyBzaG91bGQgYmUg
dGhyZWFkLXNhZmUgZW5vdWdoIHRvIGJlIGFjY2Vzc2libGUgaW4gYSBjb25jdXJyZW50IGNvbXBp
bGF0aW9uIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE0OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBBbmQgYWxsIHByb2ZpbGUgdXBkYXRpbmcgc2hvdWxkIGhhcHBlbiBvbiB0
aGUgbWFpbiB0aHJlYWQsIHRvIG1ha2UgdGhlCisgICAgICAgIGNvbmN1cnJlbmN5IG1vZGVsIHNp
bXBsZXIgdG8gdGhpbmsgYWJvdXQuICBGb3IgZXhhbXBsZSwgSSBkb24ndCB3YW50IHRvCisgICAg
ICAgIGhhdmUgKnN0b3JpbmcqIGludG8gYSB2YWx1ZSBwcm9maWxlIGZyb20gSklUIGNvZGUgdG8g
aGF2ZSB0byBiZSB0aHJlYWQKKyAgICAgICAgc2FmZSBlbm91Z2ggdG8gaGFuZGxlIHVwZGF0ZXMg
b24gYW5vdGhlciB0aHJlYWQuICBTbywgYWxsIHVwZGF0aW5nCisgICAgICAgIGhhcHBlbnMgb24g
dGhlIG1haW4gdGhyZWFkLCBhbmQgdGhlIGNvbmN1cnJlbnQgdGhyZWFkIGp1c3QgcmVhZHMgb3V0
CisgICAgICAgIHRoZSByZXN1bHRzIGFuZCBuZXZlciB0aGUgc3RvcmVkIHZhbHVlcy4KKworICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogYnl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSk6CisgICAgICAgIChKU0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGU6OmN1
cnJlbnRJbmRleGluZ1R5cGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHA6
CisgICAgICAgIChKU0M6OkFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKToK
KyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpicmllZkRlc2NyaXB0aW9uKToKKyAgICAgICAg
KiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAgKEFycmF5UHJvZmlsZSk6CisgICAg
ICAgIChKU0M6OkFycmF5UHJvZmlsZTo6ZXhwZWN0ZWRTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpBcnJheVByb2ZpbGU6OnN0cnVjdHVyZUlzUG9seW1vcnBoaWMpOgorICAgICAgICAoSlNDOjpB
cnJheVByb2ZpbGU6Omhhc0RlZmluaXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQ
cm9maWxlOjpvYnNlcnZlZEFycmF5TW9kZXMpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6
Om1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyk6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmls
ZTo6bWF5U3RvcmVUb0hvbGUpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6Om91dE9mQm91
bmRzKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjp1c2VzT3JpZ2luYWxBcnJheVN0cnVj
dHVyZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcDoKKyAgICAgICAg
KEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0Nv
ZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5n
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQXJyYXlQcm9maWxpbmcpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ291bnRMaXZlbmVzcyk6
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDaGVja0lmU2hv
dWxkT3B0aW1pemVOb3cpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNl
dCk6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0
ZUFsbFByZWRpY3Rpb25zQW5kQ2hlY2tJZlNob3VsZE9wdGltaXplTm93KToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2tMb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuY3BwOgorICAgICAgICAoSlNDOjpDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVI
b2xkZXI6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMpOgorICAgICAgICAoSlNDOjpDb21wcmVz
c2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXI6OmFkZCk6CisgICAgICAgIChKU0M6Okxh
enlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNl
cik6CisgICAgICAgIChKU0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjp+TGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXIpOgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoSlND
OjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbik6CisgICAgICAgICog
Ynl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDoKKyAgICAgICAgKENvbXByZXNzZWRM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcik6CisgICAgICAgIChMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZVBhcnNlcik6CisgICAgICAgICogYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6Ok1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGU6
OmdldFNwZWNGYWlsQnVja2V0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICog
Ynl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlJlc29sdmVH
bG9iYWxTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVCYXNlOjpicmllZkRlc2NyaXB0aW9uKToK
KyAgICAgICAgKFZhbHVlUHJvZmlsZUJhc2UpOgorICAgICAgICAoSlNDOjpWYWx1ZVByb2ZpbGVC
YXNlOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdBcnJheU1v
ZGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKToKKyAg
ICAgICAgKiBkZmcvREZHQXJyYXlNb2RlLmg6CisgICAgICAgIChBcnJheU1vZGUpOgorICAgICAg
ICAoSlNDOjpERkc6OkFycmF5TW9kZTo6d2l0aFByb2ZpbGUpOgorICAgICAgICAqIGRmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omdl
dFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmdldEFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpmaXh1cE5v
ZGUpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25JbmplY3Rpb25QaGFzZTo6cnVuKToKKyAgICAgICAg
KiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmNob29zZUFycmF5TW9kZSk6
CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVQdXRC
eUlEKToKKyAgICAgICAgKEpTQzo6dHJ5Q2FjaGVHZXRCeUlEKToKKyAgICAgICAgKEpTQzo6REVG
SU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAoSlNDOjpsYXp5TGlua0Zvcik6CisgICAgICAg
ICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRf
U0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0VXBDYWxsKToKKyAgICAg
ICAgKiBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOgorICAgICAgICAoSlND
OjpQcm9maWxlcjo6Qnl0ZWNvZGVTZXF1ZW5jZTo6Qnl0ZWNvZGVTZXF1ZW5jZSk6CisgICAgICAg
ICogcnVudGltZS9KU1Njb3BlLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZUNv
bnRhaW5pbmdTY29wZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6SlNTY29wZTo6cmVzb2x2ZVB1
dCk6CisKIDIwMTMtMDQtMTcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBmb3VydGhUaWVyOiBhbGwgaW5saW5lIGNhY2hlcyBzaG91bGQgdGhyZWFkLXNhZmUgZW5v
dWdoIHRvIGFsbG93IGEgY29uY3VycmVudCBjb21waWxhdGlvbiB0aHJlYWQgdG8gcmVhZCB0aGVt
IHNhZmVseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0ODcw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBACiAJCTBGMEI4M0I5
MTRCQ0Y5NUYwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQjgzQjgxNEJD
Rjk1QjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzIxNUYx
QTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1
dERpcmVjdEluZGV4TW9kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGMENENEM0MTVGNkI2QkIwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVl
TWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLzsgfTsK
KwkJMEYwRDg1QjIxNzIzNDU1NDAwMzM4MjEwIC8qIENvZGVCbG9ja0xvY2suaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIxMTcyMzQ1NTEwMDMz
ODIxMCAvKiBDb2RlQmxvY2tMb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExp
bmtJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRDYWxsTGlua0luZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzOTEyOTE2NzcxQzMz
MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5MTI0MTY3NzFDMzAwMDlDQ0IwNyAv
KiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwICovOyB9OwogCQkwRjEzOTEyQTE2NzcxQzM2
MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOTEyNTE2NzcxQzMwMDA5Q0NCMDcgLyog
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTEwMzEsNiArMTAzMiw3IEBACiAJCTBGMEI4M0I4MTRCQ0Y5
NUIwMDg4NUI0RiAvKiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNl
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBDRDRDMDE1RjFBNjA0MDAzMkYx
QzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFB1dERpcmVjdEluZGV4TW9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjBDRDRDMzE1RjZCNkI1MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYwRDg1QjExNzIzNDU1MTAwMzM4MjEwIC8q
IENvZGVCbG9ja0xvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZUJsb2NrTG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjBGQzQ1ODE0QkQxNUYxMDBCODExNTQgLyogTExJbnRD
YWxsTGlua0luZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTExJbnRDYWxs
TGlua0luZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzkxMjQxNjc3MUMz
MDAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOyBwYXRo
ID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxMzkxMjUxNjc3MUMzMDAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNv
ZGVTZXF1ZW5jZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlckJ5
dGVjb2RlU2VxdWVuY2UuaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5j
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzAzNCw2ICszMDM2LDcgQEAKIAkJ
CQk5NjlBMDc5MTBFRDFEM0FFMDBGMUY2ODEgLyogQ29kZUJsb2NrLmggKi8sCiAJCQkJMEY4Rjk0
M0QxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guY3BwICovLAogCQkJCTBGOEY5NDNF
MTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmggKi8sCisJCQkJMEYwRDg1QjExNzIz
NDU1MTAwMzM4MjEwIC8qIENvZGVCbG9ja0xvY2suaCAqLywKIAkJCQkwRjk2RUJCMTE2Njc2RUY0
MDA4QkFERTMgLyogQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCAqLywKIAkJCQkwRjhGOTQ0NTE2Njc2
NEVFMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgKi8sCiAJCQkJMEZCRDdFNjcxNDQ3OTk4RjAw
NDgxMzE1IC8qIENvZGVPcmlnaW4uaCAqLywKQEAgLTMxMzAsNiArMzEzMyw3IEBACiAJCQkJMEY4
MzM1QjgxNjM5QzFFQTAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlD
b252ZW50aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwRDg1QjIxNzIzNDU1NDAwMzM4MjEw
IC8qIENvZGVCbG9ja0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDU1MTVEMDcwNTcw
MDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
M0M2MUQxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDE0ODcwMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ2LDYgKzQ2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fY3VycmVu
dEluZGV4aW5nVHlwZTsKICAgICB9CiAgICAgCisgICAgLy8gTkIuIFVubGlrZSBvdGhlciBwcm9m
aWxlcywgdGhpcyBvbmUgZG9lc24ndCBuZWVkIHRvIGJlIGFjY2Vzc2VkIHVuZGVyIGEgbG9jawor
ICAgIC8vIHNpbmNlIHRoZSBvbmx5IG9ic2VydmFibGUgZmllbGQgaGFzIGEgdHlwZSB0aGF0IGNh
biBhbHJlYWR5IGJlIGFjY2Vzc2VkIGF0b21pY2FsbHkuCisgICAgSW5kZXhpbmdUeXBlIGN1cnJl
bnRJbmRleGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRJbmRleGluZ1R5cGU7IH0K
KyAgICAKICAgICBKU0FycmF5KiB1cGRhdGVMYXN0QWxsb2NhdGlvbihKU0FycmF5KiBsYXN0QXJy
YXkpCiAgICAgewogICAgICAgICBtX2xhc3RBcnJheSA9IGxhc3RBcnJheTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCShyZXZpc2lv
biAxNDg3MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTQgKzc0LDcgQEAgdm9pZCBkdW1wQXJyYXlNb2RlcyhQ
cmludFN0cmVhbSYgb3V0LCBBcgogICAgICAgICBvdXQucHJpbnQoIkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UiKTsKIH0KIAotQXJyYXlNb2RlcyBBcnJheVByb2ZpbGU6OnVwZGF0ZWRPYnNl
cnZlZEFycmF5TW9kZXMoKSBjb25zdAotewotICAgIGlmIChtX2xhc3RTZWVuU3RydWN0dXJlKQot
ICAgICAgICByZXR1cm4gbV9vYnNlcnZlZEFycmF5TW9kZXMgfCBhcnJheU1vZGVGcm9tU3RydWN0
dXJlKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpOwotICAgIHJldHVybiBtX29ic2VydmVkQXJyYXlNb2Rl
czsKLX0KLQotdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihDb2Rl
QmxvY2sqIGNvZGVCbG9jaywgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCit2b2lkIEFy
cmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvZGVCbG9ja0xvY2tl
ciYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVy
YXRpb24pCiB7CiAgICAgaWYgKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpIHsKICAgICAgICAgbV9vYnNl
cnZlZEFycmF5TW9kZXMgfD0gYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShtX2xhc3RTZWVuU3RydWN0
dXJlKTsKQEAgLTg5LDcgKzgyLDcgQEAgdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVk
UHJlZGljdAogICAgICAgICAgICAgbV9sYXN0U2VlblN0cnVjdHVyZS0+dHlwZUluZm8oKS5pbnRl
cmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCk7
CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNPcmlnaW5hbEFycmF5
U3RydWN0dXJlKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpKQogICAgICAgICAgICAgbV91c2VzT3JpZ2lu
YWxBcnJheVN0cnVjdHVyZXMgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmVJc1BvbHlt
b3JwaGljKCkpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmVJc1BvbHltb3JwaGljKGxvY2tlcikp
IHsKICAgICAgICAgICAgIGlmICghbV9leHBlY3RlZFN0cnVjdHVyZSkKICAgICAgICAgICAgICAg
ICBtX2V4cGVjdGVkU3RydWN0dXJlID0gbV9sYXN0U2VlblN0cnVjdHVyZTsKICAgICAgICAgICAg
IGVsc2UgaWYgKG1fZXhwZWN0ZWRTdHJ1Y3R1cmUgIT0gbV9sYXN0U2VlblN0cnVjdHVyZSkKQEAg
LTEwMiwxNCArOTUsMTQgQEAgdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGlj
dAogICAgICAgICBtX2V4cGVjdGVkU3RydWN0dXJlID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmUoKTsK
ICAgICAKICAgICBpZiAob3BlcmF0aW9uID09IENvbGxlY3Rpb24KLSAgICAgICAgJiYgZXhwZWN0
ZWRTdHJ1Y3R1cmUoKQorICAgICAgICAmJiBleHBlY3RlZFN0cnVjdHVyZShsb2NrZXIpCiAgICAg
ICAgICYmICFIZWFwOjppc01hcmtlZChtX2V4cGVjdGVkU3RydWN0dXJlKSkKICAgICAgICAgbV9l
eHBlY3RlZFN0cnVjdHVyZSA9IHBvbHltb3JwaGljU3RydWN0dXJlKCk7CiB9CiAKLUNTdHJpbmcg
QXJyYXlQcm9maWxlOjpicmllZkRlc2NyaXB0aW9uKENvZGVCbG9jayogY29kZUJsb2NrKQorQ1N0
cmluZyBBcnJheVByb2ZpbGU6OmJyaWVmRGVzY3JpcHRpb24oY29uc3QgQ29kZUJsb2NrTG9ja2Vy
JiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihjb2RlQmxvY2spOworICAgIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIs
IGNvZGVCbG9jayk7CiAgICAgCiAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OwogICAgIApAQCAt
MTIyLDcgKzExNSw3IEBAIENTdHJpbmcgQXJyYXlQcm9maWxlOjpicmllZkRlc2NyaXB0aW9uKEMK
ICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIGlmIChzdHJ1Y3R1
cmVJc1BvbHltb3JwaGljKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlSXNQb2x5bW9ycGhpYyhsb2Nr
ZXIpKSB7CiAgICAgICAgIGlmIChoYXNQcmludGVkKQogICAgICAgICAgICAgb3V0LnByaW50KCIs
ICIpOwogICAgICAgICBvdXQucHJpbnQoInN0cnVjdCA9IFRPUCIpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNpb24gMTQ4NzAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEFycmF5UHJvZmlsZV9oCiAjZGVmaW5l
IEFycmF5UHJvZmlsZV9oCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tMb2NrLmgiCiAjaW5jbHVkZSAi
SlNBcnJheS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CkBAIC0xNTMsMzIgKzE1NCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGFzdFNlZW5TdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9uKENvZGVCbG9jayosIE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbik7
CisgICAgdm9pZCBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29kZUJsb2NrTG9ja2Vy
JiwgQ29kZUJsb2NrKiwgT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uKTsKICAgICAK
LSAgICBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlKCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUq
IGV4cGVjdGVkU3RydWN0dXJlKGNvbnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyKSBjb25zdAog
ICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlzUG9seW1vcnBoaWMoKSkKKyAgICAgICAgaWYg
KHN0cnVjdHVyZUlzUG9seW1vcnBoaWMobG9ja2VyKSkKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICByZXR1cm4gbV9leHBlY3RlZFN0cnVjdHVyZTsKICAgICB9Ci0gICAgYm9vbCBzdHJ1
Y3R1cmVJc1BvbHltb3JwaGljKCkgY29uc3QKKyAgICBib29sIHN0cnVjdHVyZUlzUG9seW1vcnBo
aWMoY29uc3QgQ29kZUJsb2NrTG9ja2VyJikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBt
X2V4cGVjdGVkU3RydWN0dXJlID09IHBvbHltb3JwaGljU3RydWN0dXJlKCk7CiAgICAgfQotICAg
IGJvb2wgaGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSBjb25zdAorICAgIGJvb2wgaGFzRGVmaW5pdGVT
dHJ1Y3R1cmUoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gIXN0cnVjdHVyZUlzUG9seW1vcnBoaWMoKSAmJiBtX2V4cGVjdGVkU3RydWN0
dXJlOworICAgICAgICByZXR1cm4gIXN0cnVjdHVyZUlzUG9seW1vcnBoaWMobG9ja2VyKSAmJiBt
X2V4cGVjdGVkU3RydWN0dXJlOwogICAgIH0KLSAgICBBcnJheU1vZGVzIG9ic2VydmVkQXJyYXlN
b2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2ZWRBcnJheU1vZGVzOyB9Ci0gICAgQXJyYXlN
b2RlcyB1cGRhdGVkT2JzZXJ2ZWRBcnJheU1vZGVzKCkgY29uc3Q7IC8vIENvbXB1dGVzIHRoZSBv
YnNlcnZlZCBhcnJheSBtb2RlcyB3aXRob3V0IHVwZGF0aW5nIHRoZSBwcm9maWxlLgotICAgIGJv
b2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4gbV9tYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXM7IH0KKyAgICBBcnJheU1vZGVzIG9ic2VydmVkQXJyYXlNb2Rl
cyhjb25zdCBDb2RlQmxvY2tMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX29ic2VydmVkQXJyYXlN
b2RlczsgfQorICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGNvbnN0IENvZGVC
bG9ja0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2Vz
OyB9CiAgICAgCi0gICAgYm9vbCBtYXlTdG9yZVRvSG9sZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF5
U3RvcmVUb0hvbGU7IH0KLSAgICBib29sIG91dE9mQm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9v
dXRPZkJvdW5kczsgfQorICAgIGJvb2wgbWF5U3RvcmVUb0hvbGUoY29uc3QgQ29kZUJsb2NrTG9j
a2VyJikgY29uc3QgeyByZXR1cm4gbV9tYXlTdG9yZVRvSG9sZTsgfQorICAgIGJvb2wgb3V0T2ZC
b3VuZHMoY29uc3QgQ29kZUJsb2NrTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9vdXRPZkJvdW5k
czsgfQogICAgIAotICAgIGJvb2wgdXNlc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVzKCkgY29uc3Qg
eyByZXR1cm4gbV91c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXM7IH0KKyAgICBib29sIHVzZXNP
cmlnaW5hbEFycmF5U3RydWN0dXJlcyhjb25zdCBDb2RlQmxvY2tMb2NrZXImKSBjb25zdCB7IHJl
dHVybiBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlczsgfQogICAgIAotICAgIENTdHJpbmcg
YnJpZWZEZXNjcmlwdGlvbihDb2RlQmxvY2sqKTsKKyAgICBDU3RyaW5nIGJyaWVmRGVzY3JpcHRp
b24oY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgQ29kZUJsb2NrKik7CiAgICAgCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJldmlzaW9u
IDE0ODcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGcgogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0YXR1czo6
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCiB7Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9j
ayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwog
ICAgIAogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0o
Ynl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTQ4NzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Miw5ICs2NjIsMTEg
QEAgdm9pZCBDb2RlQmxvY2s6OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludAogCiB2b2lkIENvZGVC
bG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0
aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCiB7CisgICAgQ29kZUJsb2NrTG9j
a2VyIGxvY2tlcihtX2xvY2spOworICAgIAogICAgICsraXQ7CiAjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQotICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5wcm9maWxlLT5icmllZkRl
c2NyaXB0aW9uKCk7CisgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LnByb2ZpbGUtPmJy
aWVmRGVzY3JpcHRpb24obG9ja2VyKTsKICAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFzUHJpbnRlZFBy
b2ZpbGluZyk7CkBAIC02NzcsOSArNjc5LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQ
cm9maWxpbmcoUHJpbnQKIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBBcnJheVByb2ZpbGluZyhQcmlu
dFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBib29sJiBoYXNQcmludGVkUHJv
ZmlsaW5nKQogeworICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICAKICAg
ICArK2l0OwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBDU3RyaW5nIGRlc2NyaXB0
aW9uID0gaXQtPnUuYXJyYXlQcm9maWxlLT5icmllZkRlc2NyaXB0aW9uKHRoaXMpOworICAgIENT
dHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5hcnJheVByb2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24o
bG9ja2VyLCB0aGlzKTsKICAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQogICAgICAgICBy
ZXR1cm47CiAgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7
CkBAIC0zMTY4LDYgKzMxNzIsOCBAQCBBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6Z2V0T3JBZGRB
cnJheVByCiB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVu
ZXNzKAogICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uLCB1bnNpZ25lZCYgbnVtYmVy
T2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVz
SW5Qcm9maWxlcykKIHsKKyAgICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2xvY2spOworICAgIAog
ICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CiAgICAgbnVtYmVy
T2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBWYWx1ZVByb2Zp
bGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgdGhlbiB2
YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90
YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7CkBAIC0zMTc3LDE2ICszMTgzLDE2IEBA
IHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZEMKICAgICAgICAgICAgIG51
bVNhbXBsZXMgPSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0czsgLy8gV2UgZG9uJ3Qgd2Fu
dCBwcm9maWxlcyB0aGF0IGFyZSBleHRyZW1lbHkgaG90IHRvIGJlIGdpdmVuIG1vcmUgd2VpZ2h0
LgogICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzICs9IG51bVNhbXBsZXM7CiAgICAg
ICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgewotICAgICAgICAgICAgcHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9wZXJhdGlvbik7CisgICAgICAgICAgICBw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBvcGVyYXRpb24pOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByb2ZpbGUtPm51bWJl
ck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBTcGVjTm9uZSkKICAgICAg
ICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOwotICAgICAgICBw
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24ob3BlcmF0aW9uKTsKKyAgICAgICAgcHJv
ZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgb3BlcmF0aW9uKTsKICAgICB9
CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9sYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhvcGVyYXRpb24pOworICAgIG1fbGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMobG9ja2VyLCBvcGVyYXRp
b24pOwogI2VuZGlmCiB9CiAKQEAgLTMxOTgsOCArMzIwNCwxMCBAQCB2b2lkIENvZGVCbG9jazo6
dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlCiAKIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxBcnJh
eVByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uKQogeworICAgIENvZGVC
bG9ja0xvY2sgbG9ja2VyKG1fbG9jayk7CisgICAgCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9h
cnJheVByb2ZpbGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9hcnJheVByb2ZpbGVzW2ldLmNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbih0aGlzLCBvcGVyYXRpb24pOworICAgICAgICBtX2FycmF5
UHJvZmlsZXNbaV0uY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgdGhpcywgb3BlcmF0
aW9uKTsKICAgICAKICAgICAvLyBEb24ndCBjb3VudCB0aGVzZSBlaXRoZXIsIGZvciBzaW1pbGFy
IHJlYXNvbnMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheUFsbG9jYXRpb25Qcm9maWxl
cy5zaXplKCk7IGktLTspCkBAIC0zMjEyLDcgKzMyMjAsNyBAQCB2b2lkIENvZGVCbG9jazo6dXBk
YXRlQWxsUHJlZGljdGlvbnMoT3BlCiAgICAgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucyhvcGVy
YXRpb24pOwogfQogCi1ib29sIENvZGVCbG9jazo6c2hvdWxkT3B0aW1pemVOb3coKQorYm9vbCBD
b2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ2hlY2tJZlNob3VsZE9wdGltaXplTm93
KCkKIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQogICAgIGRhdGFMb2coIkNvbnNpZGVy
aW5nIG9wdGltaXppbmcgIiwgKnRoaXMsICIuLi5cbiIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTQ4NzAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Niw2ICszNiw3IEBACiAjaW5jbHVkZSAiQ2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgi
CisjaW5jbHVkZSAiQ29kZUJsb2NrTG9jay5oIgogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNp
bmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUgIkNvbXBhY3RKSVRDb2RlTWFwLmgiCkBAIC02
OSw3ICs3MCw2IEBACiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlIDx3
dGYvQnl0ZVNwaW5Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRBcnJheS5oPgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
QEAgLTQ3OSw5ICs0NzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSBy
ZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgfQotICAgICAgICBT
cGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoaW50
IGJ5dGVjb2RlT2Zmc2V0KQorICAgICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVk
aWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgaW50IGJ5dGVj
b2RlT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
KTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCktPm1fcHJlZGljdGlvbjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
dW5zaWduZWQgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKQpAQCAtODg0LDEyICs4ODQsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
LSAgICAgICAgYm9vbCBzaG91bGRPcHRpbWl6ZU5vdygpOworICAgICAgICBib29sIHVwZGF0ZUFs
bFByZWRpY3Rpb25zQW5kQ2hlY2tJZlNob3VsZE9wdGltaXplTm93KCk7CiAgICAgICAgIHZvaWQg
dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5v
T3BlcmF0aW9uKTsKICAgICAgICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKE9wZXJh
dGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbik7CiAgICAgICAgIHZvaWQgdXBkYXRlQWxsUHJl
ZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uKTsKICNlbHNlCi0gICAg
ICAgIGJvb2wgc2hvdWxkT3B0aW1pemVOb3coKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICBi
b29sIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ2hlY2tJZlNob3VsZE9wdGltaXplTm93KCkgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQcmVkaWN0
aW9ucyhPcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb24pIHsgfQogICAgICAgICB2b2lk
IHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0
aW9uKSB7IH0KICAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGVyYXRpb25JblBy
b2dyZXNzID0gTm9PcGVyYXRpb24pIHsgfQpAQCAtOTI1LDkgKzkyNSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAvLyBBbm90aGVyIGV4Y2VwdGlvbiB0byB0aGUgcnVsZXMgaXMgdGhhdCB0
aGUgR0MgY2FuIGRvIHdoYXRldmVyIGl0IHdhbnRzCiAgICAgICAgIC8vIHdpdGhvdXQgaG9sZGlu
ZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1bnRpbCBh
bnkKICAgICAgICAgLy8gY29uY3VycmVudCBjb21waWxhdGlvbiB0aHJlYWRzIGZpbmlzaCB3aGF0
IHRoZXkncmUgZG9pbmcuCi0gICAgICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7Ci0gICAg
ICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOwotICAgICAgICBMb2NrIG1fbG9jazsK
KyAgICAgICAgQ29kZUJsb2NrTG9jayBtX2xvY2s7CiAKICAgICBwcm90ZWN0ZWQ6CiAjaWYgRU5B
QkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tM
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9ja0xvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2tMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENvZGVCbG9j
a0xvY2tfaAorI2RlZmluZSBDb2RlQmxvY2tMb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9CeXRlU3Bp
bkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisj
aWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQordHlwZWRlZiBCeXRlU3BpbkxvY2sgQ29kZUJsb2Nr
TG9jazsKK3R5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgQ29kZUJsb2NrTG9ja2VyOworI2Vsc2UKK3R5
cGVkZWYgTm9Mb2NrIENvZGVCbG9ja0xvY2s7Cit0eXBlZGVmIE5vTG9ja0xvY2tlciBDb2RlQmxv
Y2tMb2NrZXI7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBDb2Rl
QmxvY2tMb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4NzAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMTIsNyAr
MTEyLDcgQEAgdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0QgogCiBHZXRC
eUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBD
b2RlQmxvY2s6OkxvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICBDb2Rl
QmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgVU5V
U0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAkocmV2aXNpb24gMTQ4NzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzUsMTcgKzM1LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogQ29tcHJlc3NlZExh
enlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjpDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVIb2xkZXIoKSB7IH0KIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRl
cjo6fkNvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcigpIHsgfQogCi12b2lk
IENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6Y29tcHV0ZVVwZGF0ZWRQ
cmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbikKK3ZvaWQgQ29tcHJlc3Nl
ZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb25z
KGNvbnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyLCBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJh
dGlvbikKIHsKICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RhdGEtPnNpemUoKTsgKytpKQotICAgICAgICBtX2Rh
dGEtPmF0KGkpLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihvcGVyYXRpb24pOworICAgICAgICBt
X2RhdGEtPmF0KGkpLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG9wZXJhdGlvbik7
CiB9CiAKIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVIb2xkZXI6OmFkZCgKLSAgICBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSYga2V5KQorICAgIGNvbnN0IENvZGVCbG9ja0xvY2tlciYsIGNvbnN0IExhenlPcGVyYW5kVmFs
dWVQcm9maWxlS2V5JiBrZXkpCiB7CiAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgIG1fZGF0YSA9
IGFkb3B0UHRyKG5ldyBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZTo6TGlzdCgpKTsKQEAgLTYwLDIw
ICs2MCwyMiBAQCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogQ29tcHJlc3NlZExhenlPCiAgICAg
cmV0dXJuICZtX2RhdGEtPmxhc3QoKTsKIH0KIAotTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJz
ZXI6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKAotICAgIENvbXByZXNzZWRMYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZUhvbGRlciYgaG9sZGVyKQotICAgIDogbV9ob2xkZXIoaG9sZGVyKQor
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFy
c2VyKCkgeyB9CitMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6fkxhenlPcGVyYW5kVmFs
dWVQcm9maWxlUGFyc2VyKCkgeyB9CisKK3ZvaWQgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJz
ZXI6OmluaXRpYWxpemUoCisgICAgY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgQ29tcHJlc3NlZExh
enlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBob2xkZXIpCiB7Ci0gICAgaWYgKCFtX2hvbGRl
ci5tX2RhdGEpCisgICAgQVNTRVJUKG1fbWFwLmlzRW1wdHkoKSk7CisgICAgCisgICAgaWYgKCFo
b2xkZXIubV9kYXRhKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGU6Okxpc3QmIGRhdGEgPSAqbV9ob2xkZXIubV9kYXRhOworICAgIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlOjpMaXN0JiBkYXRhID0gKmhvbGRlci5tX2RhdGE7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGRhdGEuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fbWFwLmFkZChkYXRh
W2ldLmtleSgpLCAmZGF0YVtpXSk7CiB9CiAKLUxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2Vy
Ojp+TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXIoKSB7IH0KLQogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUqIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNlbnQoCiAg
ICAgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIGtleSkgY29uc3QKIHsKQEAgLTkz
LDcgKzk1LDcgQEAgU3BlY3VsYXRlZFR5cGUgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYQogICAg
IGlmICghcHJvZmlsZSkKICAgICAgICAgcmV0dXJuIFNwZWNOb25lOwogICAgIAotICAgIHJldHVy
biBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAgICByZXR1cm4gcHJvZmls
ZS0+bV9wcmVkaWN0aW9uOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oCShyZXZpc2lvbiAxNDg3MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrTG9j
ay5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC0xNTUsOSArMTU2LDEwIEBAIHB1Ymxp
YzoKICAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIoKTsKICAgICB+
Q29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyKCk7CiAgICAgCi0gICAgdm9p
ZCBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MpOworICAgIHZv
aWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBPcGVy
YXRpb25JblByb2dyZXNzKTsKICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogYWRk
KGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpOworICAgIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlKiBhZGQoCisgICAgICAgIGNvbnN0IENvZGVCbG9ja0xvY2tlciYsIGNvbnN0
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpOwogICAgIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI7CkBAIC0xNjcsMTYgKzE2
OSwxNyBAQCBwcml2YXRlOgogY2xhc3MgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKTsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigKLSAg
ICAgICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBob2xkZXIpOwor
ICAgIGV4cGxpY2l0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKCk7CiAgICAgfkxhenlP
cGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKCk7CiAgICAgCisgICAgdm9pZCBpbml0aWFsaXplKAor
ICAgICAgICBjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVIb2xkZXImIGhvbGRlcik7CisgICAgCiAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUqIGdldElmUHJlc2VudCgKICAgICAgICAgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkmIGtleSkgY29uc3Q7CiAgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbihjb25z
dCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KSBjb25zdDsKIHByaXZhdGU6Ci0gICAg
Q29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBtX2hvbGRlcjsKICAgICBI
YXNoTWFwPExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5LCBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZSo+IG1fbWFwOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAkocmV2
aXNpb24gMTQ4NzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MiwxMCArNTIsMTQgQEAg
RW5jb2RlZEpTVmFsdWUqIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBybwogICAgIGNhc2UgUmVhZHk6
CiAgICAgICAgIHJldHVybiB1LnByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KGluZGV4KTsKICAgICAg
ICAgCi0gICAgY2FzZSBMYXp5T3BlcmFuZDoKLSAgICAgICAgcmV0dXJuIHUubGF6eU9wZXJhbmQu
Y29kZUJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKS5hZGQoCi0gICAgICAgICAgICBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICB1LmxhenlPcGVyYW5k
LmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpKS0+c3BlY0ZhaWxCdWNrZXQo
aW5kZXgpOworICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJh
bmQub3BlcmFuZCk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHUu
bGF6eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZSogcHJvZmlsZSA9CisgICAgICAgICAgICB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+
bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkuYWRkKGxvY2tlciwga2V5KTsKKyAgICAgICAgcmV0
dXJuIHByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KGluZGV4KTsKKyAgICB9CiAgICAgICAgIAogICAg
IGRlZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNDg3MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgUHV0QnlJZFN0YXR1cyBQ
dXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4LCBJZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIo
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2sp
OwogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDE0ODcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZl
R2xvYmFsU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgUmVz
b2x2ZUdsb2JhbFN0YXR1cyBjb21wdXRlRm9yU3RyCiAKIFJlc29sdmVHbG9iYWxTdGF0dXMgUmVz
b2x2ZUdsb2JhbFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50LCBS
ZXNvbHZlT3BlcmF0aW9uKiBvcGVyYXRpb24sIElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0g
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBDb2Rl
QmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAKICAgICBBU1NFUlQo
b3BlcmF0aW9uLT5tX29wZXJhdGlvbiA9PSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5H
bG9iYWxQcm9wZXJ0eSk7CiAgICAgaWYgKCFvcGVyYXRpb24tPm1fc3RydWN0dXJlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNp
b24gMTQ4NzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFC
TEUoVkFMVUVfUFJPRklMRVIpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tMb2NrLmgiCiAjaW5jbHVk
ZSAiSGVhcC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlw
ZS5oIgpAQCAtMTExLDkgKzExMiw5IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBDU3RyaW5nIGJyaWVmRGVzY3JpcHRp
b24oKQorICAgIENTdHJpbmcgYnJpZWZEZXNjcmlwdGlvbihjb25zdCBDb2RlQmxvY2tMb2NrZXIm
IGxvY2tlcikKICAgICB7Ci0gICAgICAgIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAg
ICAgICBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgCiAgICAgICAg
IFN0cmluZ1ByaW50U3RyZWFtIG91dDsKICAgICAgICAgCkBAIC0xNDcsOCArMTQ4LDkgQEAgc3Ry
dWN0IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVw
ZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuCi0gICAgU3BlY3Vs
YXRlZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3Bl
cmF0aW9uID0gTm9PcGVyYXRpb24pCisgICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQg
cmV0dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAorICAg
IC8vIHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgorICAgIFNwZWN1bGF0ZWRUeXBlIGNv
bXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBPcGVyYXRpb25J
blByb2dyZXNzIG9wZXJhdGlvbiA9IE5vT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2ldKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE0
ODcwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzQsMTQgKzM0LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSog
cHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIGJvb2wgbWFrZVNhZmUpCitBcnJheU1vZGUg
QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIsIEFy
cmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIGJvb2wgbWFrZVNhZmUp
CiB7Ci0gICAgQXJyYXlNb2RlcyBvYnNlcnZlZCA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rl
cygpOworICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWQgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9k
ZXMobG9ja2VyKTsKICAgICBzd2l0Y2ggKG9ic2VydmVkKSB7CiAgICAgY2FzZSAwOgogICAgICAg
ICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpVbnByb2ZpbGVkKTsKICAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheSk6Ci0gICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFw
cm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgaWYgKGFjdGlv
biA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nl
cyhsb2NrZXIpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6VW5kZWNpZGVk
LCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpPdXRPZkJvdW5kcywgQXJyYXk6OkNvbnZlcnQpOwog
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsK
IApAQCAtNTEsNDkgKzUxLDQ5IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChB
cnJheVAKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgICAg
IAogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhVbmRlY2lkZWQpOgotICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJv
ZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgIGlmIChhY3Rpb24g
PT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMo
bG9ja2VyKSkKICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlVuZGVjaWRlZCwg
QXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpPdXRPZkJvdW5kcywgQXJyYXk6OkNvbnZlcnQp
OwogICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
KTsKIAogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEludDMyKToKLSAgICAgICAg
cmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFz
SXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6SW50MzIsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9m
aWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aEludDMyKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFy
cmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsK
KyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFycmF5OjpBcnJheSwgQXJy
YXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNh
c2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEludDMyKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdp
dGhJbnQzMik6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkludDMyLCBBcnJheTo6
UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZl
KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFycmF5OjpQb3NzaWJs
eUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2Fm
ZSk7CiAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhEb3VibGUpOgotICAgICAg
ICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpEb3VibGUsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6
OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFy
cmF5TW9kZShBcnJheTo6RG91YmxlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRo
UHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2Rl
cyhBcnJheVdpdGhEb3VibGUpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpEb3Vi
bGUsIEFycmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VT
YWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6RG91YmxlLCBBcnJheTo6QXJy
YXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsK
ICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhEb3VibGUpIHwgYXNBcnJheU1vZGVz
KEFycmF5V2l0aERvdWJsZSk6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkRvdWJs
ZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxl
LCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkRvdWJsZSwgQXJy
YXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2Zp
bGUsIG1ha2VTYWZlKTsKIAogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRp
Z3VvdXMpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJh
eTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7
CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpOb25B
cnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUp
OwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgotICAgICAgICBy
ZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6QXJyYXksIEFycmF5OjpB
c0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJh
eU1vZGUoQXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQ
cm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVz
KE5vbkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3Vv
dXMpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6
UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZl
KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6OlBv
c3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1h
a2VTYWZlKTsKIAogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFn
ZSk6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6
Ok5vbkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUpOwor
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25B
cnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUp
OwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2Up
OgogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0Fy
cmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVy
biBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwg
QXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6Ok5vbkFycmF5
LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAg
ICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpB
c0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJh
eU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0
aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJy
YXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5
U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwg
bWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJyYXlT
dG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHBy
b2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJh
eVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6Ci0gICAgICAg
IHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJy
YXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAg
IHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJy
YXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsK
ICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8
IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5
V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0g
ICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5
OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNh
ZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdl
LCBBcnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwg
cHJvZmlsZSwgbWFrZVNhZmUpOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKChvYnNlcnZl
ZCAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkpICYmIHByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpKQorICAgICAgICBpZiAoKG9ic2VydmVkICYgYXNBcnJheU1vZGVzKE5vbkFy
cmF5KSkgJiYgcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGxvY2tlcikpCiAg
ICAgICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25z
KTsKICAgICAgICAgCiAgICAgICAgIEFycmF5OjpUeXBlIHR5cGU7CkBAIC0xMTksNyArMTE5LDcg
QEAgQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKEFycmF5UAogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBhcnJheUNsYXNzID0gQXJyYXk6OlBvc3NpYmx5QXJyYXk7CiAgICAgICAg
IAotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHR5cGUsIGFycmF5Q2xhc3MsIEFycmF5OjpDb252
ZXJ0KS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJh
eU1vZGUodHlwZSwgYXJyYXlDbGFzcywgQXJyYXk6OkNvbnZlcnQpLndpdGhQcm9maWxlKGxvY2tl
ciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNDg3MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTAsMjcgKzE1
MCwyNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcnJheU1vZGUod29yZCk7CiAgICAgfQog
ICAgIAotICAgIHN0YXRpYyBBcnJheU1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSosIEFy
cmF5OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOworICAgIHN0YXRpYyBBcnJheU1vZGUgZnJvbU9i
c2VydmVkKGNvbnN0IENvZGVCbG9ja0xvY2tlciYsIEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rp
b24sIGJvb2wgbWFrZVNhZmUpOwogICAgIAogICAgIEFycmF5TW9kZSB3aXRoU3BlY3VsYXRpb24o
QXJyYXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9uKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIEFycmF5TW9kZSh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24sIGNvbnZlcnNp
b24oKSk7CiAgICAgfQogICAgIAotICAgIEFycmF5TW9kZSB3aXRoUHJvZmlsZShBcnJheVByb2Zp
bGUqIHByb2ZpbGUsIGJvb2wgbWFrZVNhZmUpIGNvbnN0CisgICAgQXJyYXlNb2RlIHdpdGhQcm9m
aWxlKGNvbnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUs
IGJvb2wgbWFrZVNhZmUpIGNvbnN0CiAgICAgewogICAgICAgICBBcnJheTo6U3BlY3VsYXRpb24g
bXlTcGVjdWxhdGlvbjsKICAgICAgICAgQXJyYXk6OkNsYXNzIG15QXJyYXlDbGFzczsKICAgICAg
ICAgCiAgICAgICAgIGlmIChtYWtlU2FmZSkKICAgICAgICAgICAgIG15U3BlY3VsYXRpb24gPSBB
cnJheTo6T3V0T2ZCb3VuZHM7Ci0gICAgICAgIGVsc2UgaWYgKHByb2ZpbGUtPm1heVN0b3JlVG9I
b2xlKCkpCisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKGxvY2tlcikp
CiAgICAgICAgICAgICBteVNwZWN1bGF0aW9uID0gQXJyYXk6OlRvSG9sZTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgbXlTcGVjdWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kczsKICAgICAgICAg
CiAgICAgICAgIGlmIChpc0pTQXJyYXkoKSkgewotICAgICAgICAgICAgaWYgKHByb2ZpbGUtPnVz
ZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlcygpICYmIGJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXko
KSkKKyAgICAgICAgICAgIGlmIChwcm9maWxlLT51c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMo
bG9ja2VyKSAmJiBiZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCiAgICAgICAgICAgICAgICAg
bXlBcnJheUNsYXNzID0gQXJyYXk6Ok9yaWdpbmFsQXJyYXk7CiAgICAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgICAgICAgbXlBcnJheUNsYXNzID0gQXJyYXk6OkFycmF5OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDE0ODcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTAsNyArODEwLDggQEAgcHJpdmF0ZToKICAgICAKICAg
ICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgIHJldHVybiBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29k
ZU9mZnNldChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOwogICAgIH0KIAogICAgIFNwZWN1bGF0ZWRU
eXBlIGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKQEAgLTgzOCw4ICs4Mzks
OCBAQCBwcml2YXRlOgogICAgIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9m
aWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbikKICAgICB7Ci0gICAgICAgIHByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9j
ayk7Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChwcm9maWxlLCBhY3Rp
b24sIGZhbHNlKTsKKyAgICAgICAgQ29kZUJsb2NrTG9jayBsb2NrZXIobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlOjpm
cm9tT2JzZXJ2ZWQobG9ja2VyLCBwcm9maWxlLCBhY3Rpb24sIGZhbHNlKTsKICAgICB9CiAgICAg
CiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCkBAIC04
NDksMjQgKzg1MCwyNCBAQCBwcml2YXRlOgogICAgIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1v
ZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rp
b24sIE5vZGUqIGJhc2UpCiAgICAgewotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2spOworICAgICAgICBDb2RlQmxv
Y2tMb2NrIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKICAg
ICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bnVtYmVyT2ZSYXJl
Q2FzZVByb2ZpbGVzKCkpCiAgICAgICAgICAgICBkYXRhTG9nRigiU2xvdyBjYXNlIHByb2ZpbGUg
Zm9yIGJjIyV1OiAldVxuIiwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5k
ZXgpLT5tX2NvdW50ZXIpOwotICAgICAgICBkYXRhTG9nRigiQXJyYXkgcHJvZmlsZSBmb3IgYmMj
JXU6ICVwJXMlcywgJXVcbiIsIG1fY3VycmVudEluZGV4LCBwcm9maWxlLT5leHBlY3RlZFN0cnVj
dHVyZSgpLCBwcm9maWxlLT5zdHJ1Y3R1cmVJc1BvbHltb3JwaGljKCkgPyAiIChwb2x5bW9ycGhp
YykiIDogIiIsIHByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3NlcygpID8gIiAobWF5
IGludGVyY2VwdCkiIDogIiIsIHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpKTsKKyAgICAg
ICAgZGF0YUxvZ0YoIkFycmF5IHByb2ZpbGUgZm9yIGJjIyV1OiAlcCVzJXMsICV1XG4iLCBtX2N1
cnJlbnRJbmRleCwgcHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSwgcHJvZmlsZS0+c3RydWN0
dXJlSXNQb2x5bW9ycGhpYyhsb2NrZXIpID8gIiAocG9seW1vcnBoaWMpIiA6ICIiLCBwcm9maWxl
LT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMobG9ja2VyKSA/ICIgKG1heSBpbnRlcmNlcHQp
IiA6ICIiLCBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMobG9ja2VyKSk7CiAjZW5kaWYKICAg
ICAgICAgCiAgICAgICAgIGJvb2wgbWFrZVNhZmUgPQogICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRl
eCkKLSAgICAgICAgICAgIHx8IHByb2ZpbGUtPm91dE9mQm91bmRzKCk7CisgICAgICAgICAgICB8
fCBwcm9maWxlLT5vdXRPZkJvdW5kcyhsb2NrZXIpOwogICAgICAgICAKLSAgICAgICAgQXJyYXlN
b2RlIHJlc3VsdCA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKHByb2ZpbGUsIGFjdGlvbiwgbWFr
ZVNhZmUpOworICAgICAgICBBcnJheU1vZGUgcmVzdWx0ID0gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2
ZWQobG9ja2VyLCBwcm9maWxlLCBhY3Rpb24sIG1ha2VTYWZlKTsKICAgICAgICAgCi0gICAgICAg
IGlmIChwcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpCisgICAgICAgIGlmIChwcm9maWxl
LT5oYXNEZWZpbml0ZVN0cnVjdHVyZShsb2NrZXIpCiAgICAgICAgICAgICAmJiByZXN1bHQuYmVu
ZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soKQogICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSkK
LSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFk
ZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksIGJhc2UpOworICAg
ICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3Ry
dWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKGxvY2tlcikpKSwgYmFzZSk7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KQEAgLTE3NzksNyArMTc4MCw3
IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29sIHNraXAKIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgdW5zaWduZWQgaWRlbnRpZmllciwgUmVzb2x2ZU9wZXJhdGlvbnMqIHJlc29sdmVPcGVyYXRp
b25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJhdGlvbiwgTm9kZSoqIGJhc2Us
IE5vZGUqKiB2YWx1ZSkKIHsKICAgICB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tl
cihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgIENv
ZGVCbG9ja0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOwogICAgICAKICAgICAgICAgaWYgKCFyZXNvbHZlT3BlcmF0aW9ucy0+bV9yZWFkeSkg
ewogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwpAQCAtMjAxNSw5ICsyMDE2
LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBj
YXNlIG9wX2NvbnZlcnRfdGhpczogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VGhpcygp
OwogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBDb252ZXJ0VGhpcykgeworICAgICAgICAg
ICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9
CiAgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwot
ICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOwogI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiW2Jj
IyV1XTogcHJvZmlsZSAlcDogIiwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUpOwog
ICAgICAgICAgICAgICAgIHByb2ZpbGUtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTIxMTMs
OCArMjExNCw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZTogeworICAg
ICAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5wcm9maWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAocHJvZmlsZS0+bV9zaW5n
bGV0b25WYWx1ZUlzVG9wCiAgICAgICAgICAgICAgICAgfHwgIXByb2ZpbGUtPm1fc2luZ2xldG9u
VmFsdWUKICAgICAgICAgICAgICAgICB8fCAhcHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZS5pc0Nl
bGwoKSkKQEAgLTMxNzcsNyArMzE3OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIFB1dFRvQmFzZU9wZXJhdGlvbiogcHV0VG9CYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzRdLnUucHV0VG9CYXNlT3BlcmF0aW9uOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2Vy
KG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXB1
dFRvQmFzZS0+bV9yZWFkeSkgewogICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNl
T1NSRXhpdCk7CkBAIC0zNDkzLDExICszNDk0LDE1IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVT
dGFja0VudHJ5OjpJbmxpbmUKICAgICAsIG1fZXhpdFByb2ZpbGUocHJvZmlsZWRCbG9jay0+ZXhp
dFByb2ZpbGUoKSkKICAgICAsIG1fY2FsbHNpdGVCbG9ja0hlYWQoY2FsbHNpdGVCbG9ja0hlYWQp
CiAgICAgLCBtX3JldHVyblZhbHVlKHJldHVyblZhbHVlVlIpCi0gICAgLCBtX2xhenlPcGVyYW5k
cyhwcm9maWxlZEJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKSkKICAgICAsIG1fZGlk
UmV0dXJuKGZhbHNlKQogICAgICwgbV9kaWRFYXJseVJldHVybihmYWxzZSkKICAgICAsIG1fY2Fs
bGVyKGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9wKQogeworICAgIHsKKyAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAg
IG1fbGF6eU9wZXJhbmRzLmluaXRpYWxpemUobG9ja2VyLCBtX3Byb2ZpbGVkQmxvY2stPmxhenlP
cGVyYW5kVmFsdWVQcm9maWxlcygpKTsKKyAgICB9CisgICAgCiAgICAgbV9hcmd1bWVudFBvc2l0
aW9ucy5yZXNpemUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkgewogICAgICAgICBieXRl
Q29kZVBhcnNlci0+bV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLmFwcGVuZChBcmd1bWVudFBv
c2l0aW9uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCShyZXZpc2lvbiAxNDg3MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTMsMTkgKzcxMywxOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKGNvZGVCbG9jaygp
LT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIoKSkgIT0gdm0oKS5wcm9wZXJ0eU5h
bWVzLT5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNv
ZGVPcmlnaW4pOwogICAgICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSAKLSAg
ICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmln
aW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAgICAgICAgIG5vZGUtPmNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jay0+Z2V0QXJy
YXlQcm9maWxlKG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBB
cnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rp
b25zKTsKICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUpIHsKLSAgICAgICAgICAgICAgICBh
cnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2dyYXBoLmJhc2VsaW5lQ29k
ZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKLSAgICAgICAgICAgICAgICBhcnJheU1vZGUg
PSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2ZpbGUsIEFycmF5OjpSZWFkLCBmYWxz
ZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2RlLnJlZmluZSgKLSAgICAg
ICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGlj
dGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkg
JiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpKSB7CisgICAgICAgICAgICAg
ICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGxvY2tlciwgYXJy
YXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOworICAgICAgICAgICAgICAgIGFycmF5TW9k
ZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnByZWRpY3Rpb24oKSwgbm9kZS0+
cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLnN1cHBvcnRzTGVu
Z3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZShsb2NrZXIpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUsIENoZWNrU3RydWN0dXJlLCBu
b2RlLT5jb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGgu
YWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5
UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUobG9ja2VyKSkpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0
aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTQ4NzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxOCArNDgsMjIgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9n
cmFwaC5tX3VuaWZpY2F0aW9uU3RhdGUgPT0gR2xvYmFsbHlVbmlmaWVkKTsKICAgICAgICAgCiAg
ICAgICAgIEFTU0VSVChjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpID49IDEpOwotICAgICAg
ICBmb3IgKHNpemVfdCBhcmcgPSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9j
aygpLT5udW1QYXJhbWV0ZXJzKCkpOyArK2FyZykgewotICAgICAgICAgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0gcHJvZmlsZWRCbG9jaygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcp
OwotICAgICAgICAgICAgaWYgKCFwcm9maWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB7CisgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxv
Y2soKS0+bV9sb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgYXJn
ID0gMDsgYXJnIDwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVy
cygpKTsgKythcmcpIHsKKyAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBw
cm9maWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgICAg
ICAgICAgaWYgKCFwcm9maWxlKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSk7
CisgICAgICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKS0+cHJlZGljdChwcm9maWxlLT5tX3ByZWRpY3Rpb24pOwogICAgICAgICAgICAgCiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICAgICAgZGF0YUxvZygKLSAgICAg
ICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKLSAgICAgICAg
ICAgICAgICBTcGVjdWxhdGlvbkR1bXAobV9ncmFwaC5tX2FyZ3VtZW50c1thcmddLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0
YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHByZWRpY3Rp
b246ICIsCisgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0aW9uRHVtcChtX2dyYXBoLm1fYXJn
dW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpLCAiXG4iKTsK
ICNlbmRpZgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tz
LnNpemUoKTsgKytibG9ja0luZGV4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VElubGluZXMuaAkocmV2aXNpb24gMTQ4NzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMyw5ICs0MzMsMTAg
QEAgc3RhdGljIGlubGluZSBib29sIGFycmF5UHJvZmlsZVNhdyhBcnJheQogCiBpbmxpbmUgSklU
QXJyYXlNb2RlIEpJVDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKIHsK
LSNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpICAgICAgICAKLSAgICBwcm9maWxlLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2Rl
cyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2RlcygpOworI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOwor
ICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1fY29kZUJsb2Nr
KTsKKyAgICBBcnJheU1vZGVzIGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9k
ZXMobG9ja2VyKTsKICAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJsZVNo
YXBlKSkKICAgICAgICAgcmV0dXJuIEpJVERvdWJsZTsKICAgICBpZiAoYXJyYXlQcm9maWxlU2F3
KGFycmF5TW9kZXMsIEludDMyU2hhcGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRTdHVicy5jcHAJKHJldmlzaW9uIDE0ODcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBw
ZXJmb3JtUGxhdGZvcm1TcGVjaWZpY0pJVEFzc2VydGlvbgogCiBORVZFUl9JTkxJTkUgc3RhdGlj
IHZvaWQgdHJ5Q2FjaGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlIGJhc2VWYWx1
ZSwgY29uc3QgUHV0UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIGJvb2wgZGlyZWN0KQogewotICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CiAgICAgCiAgICAgLy8gVGhlIGludGVycHJldGVyIGNoZWNrcyBmb3IgcmVjdXJzaW9uIGhl
cmU7IEkgZG8gbm90IGJlbGlldmUgdGhpcyBjYW4gb2NjdXIgaW4gQ1RJLgogCkBAIC05MDAsNyAr
OTAwLDcgQEAgTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlUHV0QnlJRAogCiBORVZF
Ul9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1l
LCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
U1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKIHsKLSAgICBD
b2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgIENvZGVCbG9j
a0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIC8vIEZJWE1FOiBX
cml0ZSBhIHRlc3QgdGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhl
cmUganVzdAogICAgIC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hl
Y2sgZm9yIHJlY3Vyc2lvbi4KQEAgLTE1OTAsNyArMTU5MCw3IEBAIERFRklORV9TVFVCX0ZVTkNU
SU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAot
ICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29k
ZUJsb2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgaWYgKGJh
c2VWYWx1ZS5pc0NlbGwoKQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlKCkKQEAgLTE3MDks
NyArMTcwOSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIENvZGVC
bG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9j
a2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwogCkBAIC0xODkyLDcgKzE4
OTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcHRpbWl6ZSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29kZUJsb2Nr
LT5zaG91bGRPcHRpbWl6ZU5vdygpKSB7CisgICAgICAgIGlmICghY29kZUJsb2NrLT51cGRhdGVB
bGxQcmVkaWN0aW9uc0FuZENoZWNrSWZTaG91bGRPcHRpbWl6ZU5vdygpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKICAgICAgICAgICAgIGRhdGFMb2coIkRlbGF5aW5nIG9wdGltaXph
dGlvbiBmb3IgIiwgKmNvZGVCbG9jaywgIiAoaW4gbG9vcCkgYmVjYXVzZSBvZiBpbnN1ZmZpY2ll
bnQgcHJvZmlsaW5nLlxuIik7CiAjZW5kaWYKQEAgLTIxNzIsNyArMjE3Miw3IEBAIGlubGluZSB2
b2lkKiBsYXp5TGlua0ZvcihDYWxsRnJhbWUqIGNhbGwKICAgICAgICAgICAgIGNvZGVQdHIgPSBm
dW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Ioa2luZCktPmFkZHJlc3NGb3JD
YWxsKCk7CiAgICAgfQogCi0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+
Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2Vy
IGxvY2tlcihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5tX2xvY2spOwog
ICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAgICAgICBjYWxsTGlua0luZm8t
PnNldFNlZW4oKTsKICAgICBlbHNlCkBAIC0yMjQ4LDcgKzIyNDgsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiAgICAgCiAgICAgaWYgKHNob3VsZExpbmspIHsK
ICAgICAgICAgQVNTRVJUKGNvZGVQdHIpOwotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2Nr
ZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9j
a2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgSklUOjpjb21waWxlQ2xvc3Vy
ZUNhbGwodm0sIGNhbGxMaW5rSW5mbywgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZWVDb2RlQmxvY2ss
IHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0cik7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+
aGFzU2VlbkNsb3N1cmUgPSB0cnVlOwogICAgIH0gZWxzZQpAQCAtMjM5NSw3ICsyMzk1LDcgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFsdWUgcmVz
dWx0ID0gSlNTY29wZTo6cmVzb2x2ZShjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVu
dGlmaWVyKCksIG9wZXJhdGlvbnMpOwogICAgIAogICAgIGlmICh3aWxsUmVpZnkpIHsKLSAgICAg
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9j
ayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7CiAgICAgfQog
ICAgIApAQCAtMjQxNSw3ICsyNDE1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
cHV0X3RvX2JhcwogICAgIEpTU2NvcGU6OnJlc29sdmVQdXQoY2FsbEZyYW1lLCBiYXNlLCBzdGFj
a0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCB2YWx1ZSwgb3BlcmF0aW9uKTsKICAgICAKICAg
ICBpZiAoZmlyc3RUaW1lKSB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9j
a2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbi0+
bV9yZWFkeSA9IHRydWU7CiAgICAgfQogCkBAIC0yNzUyLDcgKzI3NTIsNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Nj
b3BlOjpyZXNvbHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBd
LmlkZW50aWZpZXIoKSwgZmFsc2UsIG9wZXJhdGlvbnMsIHN0YWNrRnJhbWUuYXJnc1syXS5wdXRU
b0Jhc2VPcGVyYXRpb24oKSk7CiAgICAgCiAgICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBD
b2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFk
eSA9IHRydWU7CiAgICAgfQogICAgIApAQCAtMjc2OSw3ICsyNzY5LDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IEpT
U2NvcGU6OnJlc29sdmVCYXNlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3Nb
MF0uaWRlbnRpZmllcigpLCB0cnVlLCBvcGVyYXRpb25zLCBzdGFja0ZyYW1lLmFyZ3NbMl0ucHV0
VG9CYXNlT3BlcmF0aW9uKCkpKSB7CiAgICAgICAgIAogICAgICAgICBpZiAod2lsbFJlaWZ5KSB7
Ci0gICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxv
Y2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAg
ICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTMwNzYsNyArMzA3Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShjYWxsRnJhbWUsIHN0YWNrRnJh
bWUuYXJnc1swXS5pZGVudGlmaWVyKCksICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJh
bWUuYXJnc1sxXS5pbnQzMigpXSwgb3BlcmF0aW9ucywgc3RhY2tGcmFtZS5hcmdzWzNdLnB1dFRv
QmFzZU9wZXJhdGlvbigpKTsKICAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvZGVCbG9j
azo6TG9ja2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9j
ayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUt
PmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1
ZTsKICAgICB9CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKQEAgLTMwOTIsNyAr
MzA5Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBi
b29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyhjYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sw
XS5pZGVudGlmaWVyKCksICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sx
XS5pbnQzMigpXSwgb3BlcmF0aW9ucyk7CiAgICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBD
b2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFk
eSA9IHRydWU7CiAgICAgfQogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDE0ODcwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxNSw3ICs4MTUsNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZSkKICAgICB9CiAgICAgCiAgICAgewotICAgICAgICBD
b2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAg
ICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAg
ICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KICAgICAKQEAgLTgzNyw3
ICs4MzcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX2JhCiAgICAg
fQogCiAgICAgewotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJs
b2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoZXhlYy0+Y29k
ZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbi0+bV9yZWFkeSA9IHRydWU7CiAg
ICAgfQogICAgIApAQCAtODc1LDcgKzg3NSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9yZXNvbHZlX2IKICAgICB9CiAgICAgCiAgICAgewotICAgICAgICBDb2RlQmxvY2s6Okxv
Y2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9j
a0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJh
dGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KICAgICAKQEAgLTkwMSw3ICs5MDEsNyBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV93CiAgICAgYm9vbCB3aWxsUmVp
ZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3Bl
OjpyZXNvbHZlV2l0aEJhc2UoZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNb
M10udS5vcGVyYW5kKSwgJkxMSU5UX09QKDEpLCBvcGVyYXRpb25zLCBwY1s1XS51LnB1dFRvQmFz
ZU9wZXJhdGlvbik7CiAgICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBDb2RlQmxvY2s6Okxv
Y2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9j
a0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJh
dGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KICAgICBMTElOVF9DSEVDS19FWENFUFRJT04o
KTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVz
b2x2ZV93CiAgICAgYm9vbCB3aWxsUmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aFRoaXMoZXhlYywgZXhlYy0+Y29k
ZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKSwgJkxMSU5UX09QKDEpLCBvcGVy
YXRpb25zKTsKICAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9ja2Vy
IGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9j
a2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9u
cy0+bV9yZWFkeSA9IHRydWU7CiAgICAgfQogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwpA
QCAtOTU3LDcgKzk1Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRfYnlf
aWQKICAgICAgICAgCiAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0c1By
b3BlcnR5Q2FjaGluZygpKSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHBjWzRdLnUuc3Ry
dWN0dXJlLnNldCgKICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3RydWN0dXJlKTsKQEAgLTEwMjQsNyArMTAyNCw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICYmIGJhc2VDZWxsID09IHNsb3Qu
YmFzZSgpKSB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQ
dXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAgICAgICAgICAgQ29kZUJsb2Nr
OjpMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb2Rl
QmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSAmJiBzdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBzdHJ1Y3R1cmUtPm91dE9mTGlu
ZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0JlZW5JbnZhbGlkYXRlZCgpKTsK
QEAgLTE0NjUsNyArMTQ2NSw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxs
KEV4ZWMKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xPVyAmJiBjYWxsTGlua0luZm8p
IHsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVyID0gZXhlY0NhbGxlZS0+Y2FsbGVyRnJh
bWUoKTsKIAotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlY0NhbGxlci0+Y29k
ZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoZXhlY0Nh
bGxlci0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIAogICAgICAgICBpZiAoY2FsbExp
bmtJbmZvLT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2Vx
dWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAxNDg3MDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNDAsNyArNDAsOCBAQCBCeXRlY29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVl
bmNlKENvZGVCCiAgICAgCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQXJndW1lbnRWYWx1ZVByb2ZpbGVz
KCk7ICsraSkgewotICAgICAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gY29kZUJsb2NrLT52YWx1
ZVByb2ZpbGVGb3JBcmd1bWVudChpKS0+YnJpZWZEZXNjcmlwdGlvbigpOworICAgICAgICBDb2Rl
QmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgQ1N0cmluZyBk
ZXNjcmlwdGlvbiA9IGNvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaSktPmJyaWVm
RGVzY3JpcHRpb24obG9ja2VyKTsKICAgICAgICAgaWYgKCFkZXNjcmlwdGlvbi5sZW5ndGgoKSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucmVzZXQoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNDg3MDMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzAxLDcgKzMwMSw3IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpT
U2MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLT5hcHBlbmQoUmVzb2x2
ZU9wZXJhdGlvbjo6Y2hlY2tGb3JEeW5hbWljRW50cmllc0JlZm9yZUdsb2JhbFNjb3BlKCkpOwog
CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29k
ZUJsb2NrTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
dFRvQmFzZU9wZXJhdGlvbi0+bV9pc0R5bmFtaWMgPSByZXF1aXJlc0R5bmFtaWNDaGVja3M7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBQ
dXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5UHV0OwpAQCAtMzQ3LDcgKzM0Nyw3IEBA
IHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpTU2MKICAgICAgICAgICAgICAg
ICAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgICAgICAgICAgICAgICAgICBpZiAocHV0VG9CYXNl
T3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBs
b2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9s
b2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAg
cHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBlbnRyeS5pc1JlYWRPbmx5KCkgPyBQdXRUb0Jh
c2VPcGVyYXRpb246OlJlYWRvbmx5IDogUHV0VG9CYXNlT3BlcmF0aW9uOjpWYXJpYWJsZVB1dDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUu
c2V0KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRh
YmxlKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5hY3RpdmF0aW9uU3RydWN0
dXJlKCkpOwpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgSlNTY29wZTo6cmVzb2x2ZVB1dChDYWxs
RnJhbWUqIGNhbGwKICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFzZU9iamVjdCkKICAgICAgICAg
cmV0dXJuOwogICAgIEFTU0VSVCghYmFzZU9iamVjdC0+aGFzSW5saW5lU3RvcmFnZSgpKTsKLSAg
ICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2Nr
KTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1f
bG9jayk7CiAgICAgCiAgICAgb3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1lLT52
bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgYmFzZU9iamVj
dC0+c3RydWN0dXJlKCkpOwogICAgIHNldFB1dFByb3BlcnR5QWNjZXNzT2Zmc2V0KG9wZXJhdGlv
biwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4Nzk3KQorKysgU291
cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxMy0w
NC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRp
ZXI6IHZhbHVlIHByb2ZpbGVzIGFuZCBhcnJheSBwcm9maWxlcyBzaG91bGQgYmUgdGhyZWFkLXNh
ZmUgZW5vdWdoIHRvIGJlIGFjY2Vzc2libGUgaW4gYSBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRo
cmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE0
OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAg
ICAgICBBZGQgYWJpbGl0eSB0byBhYnN0cmFjdCB3aGV0aGVyIG9yIG5vdCB0aGUgQ29kZUJsb2Nr
IHJlcXVpcmVzIGxvY2tpbmcgYXQgYWxsLAorICAgICAgICBzaW5jZSBzb21lIHBsYXRmb3JtcyBt
YXkgbm90IHN1cHBvcnQgdGhlIGJ5dGUgc3Bpbi1sb2NraW5nIGFuZC9vciBtYXkgbm90IHdhbnQK
KyAgICAgICAgdG8sIGlmIHRoZXkgdHVybiBvZmYgY29uY3VycmVudCBKSVQuCisKKyAgICAgICAg
KiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQnl0ZVNwaW5M
b2NrLmg6CisgICAgICAgICogd3RmL05vTG9jay5oOiBBZGRlZC4KKyAgICAgICAgKFdURik6Cisg
ICAgICAgIChOb0xvY2spOgorICAgICAgICAoV1RGOjpOb0xvY2s6OmxvY2spOgorICAgICAgICAo
V1RGOjpOb0xvY2s6OnVubG9jayk6CisgICAgICAgIChXVEY6Ok5vTG9jazo6aXNIZWxkKToKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMy0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IGFsbCBpbmxpbmUgY2FjaGVzIHNo
b3VsZCB0aHJlYWQtc2FmZSBlbm91Z2ggdG8gYWxsb3cgYSBjb25jdXJyZW50IGNvbXBpbGF0aW9u
IHRocmVhZCB0byByZWFkIHRoZW0gc2FmZWx5CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0ODcwMykKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDcgQEAK
IC8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhCdWls
ZEZpbGUgc2VjdGlvbiAqLworCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3
MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkw
QjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9
OwogCQkwRjlEMzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOUQzMzVCMTY1REJB
NzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9OwogCQkwRjlEMzM2MTE2NURC
QTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVBy
aW50U3RyZWFtLmggKi87IH07CkBAIC0zMzEsNiArMzMyLDcgQEAKIC8qIEVuZCBQQlhDb250YWlu
ZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rp
b24gKi8KKwkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEwNTkxNjY0
M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1
QjE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJl
YW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVByaW50U3RyZWFtLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDIsNiArODA0LDcgQEAKIAkJCQlBOEE0
NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8sCiAJCQkJQThBNDcy
Q0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCAqLywKIAkJCQlBOEE0NzJDRjE1
MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovLAorCQkJCTBGMEQ4NUIz
MTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKIAkJCQlBOEE0NzJEMDE1MUE4MjVCMDA0
MTIzRkYgLyogTm9uY29weWFibGUuaCAqLywKIAkJCQlBOEE0NzJEMTE1MUE4MjVCMDA0MTIzRkYg
LyogTm9uQ29weWluZ1NvcnQuaCAqLywKIAkJCQlBOEE0NzJEMjE1MUE4MjVCMDA0MTIzRkYgLyog
Tm90Rm91bmQuaCAqLywKQEAgLTExNzMsNiArMTE3Niw3IEBACiAJCQkJNEZDRjI3RTExNjE3MkU4
NjAwQ0JGMDM3IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblN0cmluZy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNEZDQjcxMEExNjBBMUEwNzAwODQyNUVDIC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblZl
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjMyMkNDRTExNjU2OUExMDAwNDg1MkREIC8qIE1l
bW9yeU9iamVjdEluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMEQ4NUI0MTcyMzRDQzEwMDMz
ODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VCMTUxQTgyNUIwMDQx
MjNGRiAvKiBNZXNzYWdlUXVldWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VEMTUxQTgy
NUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNF
RTE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8s
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAkocmV2aXNpb24gMTQ4NzAzKQorKysgU291cmNlL1dU
Ri93dGYvQnl0ZVNwaW5Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+
CiAKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Ob0xvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Ob0xvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XVEYvd3RmL05vTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBOb0xvY2tf
aAorI2RlZmluZSBOb0xvY2tfaAorCisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKworY2xhc3MgTm9Mb2NrIHsKK3B1YmxpYzoKKyAgICB2b2lkIGxvY2soKSB7IH0K
KyAgICB2b2lkIHVubG9jaygpIHsgfQorICAgIGJvb2wgaXNIZWxkKCkgeyByZXR1cm4gZmFsc2U7
IH0KK307CisKK3R5cGVkZWYgTG9ja2VyPE5vTG9jaz4gTm9Mb2NrTG9ja2VyOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpOb0xvY2s7Cit1c2luZyBXVEY6Ok5vTG9ja0xvY2tl
cjsKKworI2VuZGlmIC8vIE5vTG9ja19oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTQ4
NzAxKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtODA4
LDcgKzgwOCwxMSBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIENQVShYODZfNjQpICYmIFBMQVRG
T1JNKE1BQykKKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShERkdfSklUKQorI2RlZmluZSBF
TkFCTEVfQ09OQ1VSUkVOVF9KSVQgMQorI2VuZGlmCisKKyNpZiBDUFUoWDg2XzY0KSAmJiBQTEFU
Rk9STShNQUMpICYmIEVOQUJMRShERkdfSklUKQogI2RlZmluZSBFTkFCTEVfRlRMX0pJVCAxCiAj
ZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198953</attachid>
            <date>2013-04-20 20:30:39 -0700</date>
            <delta_ts>2013-04-20 20:51:15 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79407</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBA
QAorMjAxMy0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IHZhbHVlIHByb2ZpbGVzIGFuZCBhcnJheSBwcm9maWxlcyBzaG91bGQgYmUg
dGhyZWFkLXNhZmUgZW5vdWdoIHRvIGJlIGFjY2Vzc2libGUgaW4gYSBjb25jdXJyZW50IGNvbXBp
bGF0aW9uIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE0OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBUaGlzIGludHJvZHVjZXMgdGhyZWFkIHNhZmV0eSB0byB2YWx1ZSBwcm9m
aWxlcywgYXJyYXkgcHJvZmlsZXMsIGFuZAorICAgICAgICBhcnJheSBhbGxvY2F0aW9uIHByb2Zp
bGVzLgorICAgICAgICAKKyAgICAgICAgV2UgYWxyZWFkeSBoYXZlIHRocmVlIHNlcGFyYXRlIG9w
ZXJhdGlvbnMgdGhhdCBoYXBwZW4gb24gcHJvZmlsZXM6CisgICAgICAgICgxKSB3cml0aW5nLCB3
aGljaCB0aGUgSklULCBMTEludCwgYW5kIE9TUiBleGl0IGRvOyAoMikgdXBkYXRpbmcsCisgICAg
ICAgIHdoaWNoIGhhcHBlbnMgZHVyaW5nIEdDLCBmcm9tIE9TUiBlbnRyeSBzbG93LXBhdGhzLCBh
bmQgaW4gdGhlIERGRzsKKyAgICAgICAgYW5kICgzKSByZWFkaW5nLCB3aGljaCBoYXBwZW5zIGlu
IHRoZSBERkcuIEZvciBleGFtcGxlLCB0aGUgSklUL0xMSW50CisgICAgICAgIGFuZCBPU1IgZXhp
dCB3cml0ZSB0byBWYWx1ZVByb2ZpbGU6Om1fYnVja2V0cywgd2hpY2ggZ2V0cyBzeW50aGVzaXpl
ZAorICAgICAgICBpbnRvIFZhbHVlUHJvZmlsZTo6bV9wcmVkaWN0aW9uIChhbmQgb3RoZXIgZmll
bGRzKSBkdXJpbmcgdXBkYXRlLCBhbmQKKyAgICAgICAgdGhlIGxhdHRlciBnZXRzIHJlYWQgYnkg
dGhlIERGRy4gTm90ZSB0aGF0ICgyKSBtdXN0IGFsc28gaGFwcGVuIGluCisgICAgICAgIHRoZSBE
Rkcgc2luY2Ugb25seSB0aGUgREZHIGtub3dzIHdoaWNoIGNvZGUgYmxvY2tzIGl0IHdpbGwgaW5s
aW5lLAorICAgICAgICBhbmQgdGhvc2UgYmxvY2tzJyBwcm9maWxlcyBtYXkgbm90IGhhdmUgb3Ro
ZXJ3aXNlIGJlZW4gdXBkYXRlZCB2aWEKKyAgICAgICAgYW55IG90aGVyIG1lY2hhbmlzbS4KKyAg
ICAgICAgCisgICAgICAgIEkgcmVmZXIgdG8gdGhlc2UgdGhyZWUgb3BlcmF0aW9ucyBhcyB3cml0
aW5nLCB1cGRhdGluZywgYW5kIHJlYWRpbmcuCisgICAgICAgIAorICAgICAgICBDb25zZXF1ZW50
bHksIGJvdGggcHJvZmlsZSB1cGRhdGluZyBhbmQgcHJvZmlsZSByZWFkaW5nIG1heSBoYXBwZW4K
KyAgICAgICAgYXN5bmNocm9ub3VzbHksIGlmIHRoZSBKSVQgaXMgYXN5bmNocm9ub3VzLgorICAg
ICAgICAKKyAgICAgICAgVGhlIGxvY2tpbmcgcHJvdG9jb2wgZm9yIHByb2ZpbGVzIHdvcmtzIGFz
IGZvbGxvd3M6CisgICAgICAgIAorICAgICAgICAtIFdyaXRpbmcgZG9lcyBub3QgcmVxdWlyZSBs
b2NraW5nLCBidXQgaXMgb25seSBhbGxvd2VkIG9uIHRoZSBtYWluCisgICAgICAgICAgdGhyZWFk
LiBXZSByZXF1aXJlIHRoYXQgdGhlc2UgZmllbGRzIGNhbiBiZSBzdG9yZWQgYXRvbWljYWxseSBi
eQorICAgICAgICAgIHRoZSBwcm9maWxpbmcgY29kZSwgZXZlbiB3aXRob3V0IGxvY2tzLiBGb3Ig
dmFsdWUgcHJvZmlsZXMsIHRoaXMKKyAgICAgICAgICBvbmx5IHdvcmtzIG9uIDY0LWJpdCBwbGF0
Zm9ybXMsIGN1cnJlbnRseS4gRm9yIGFycmF5IHByb2ZpbGVzLAorICAgICAgICAgIHdoaWNoIGNv
bnNpc3Qgb2YgbXVsdGlwbGUgc2VwYXJhdGUgZmllbGRzLCB0aGlzIG1lYW5zIHRoYXQgYW4KKyAg
ICAgICAgICBhc3luY2hyb25vdXMgdXBkYXRlIG9mIHRoZSBwcm9maWxlIG1heSBzZWUgc2xpZ2h0
IGluY29uc2lzdGVuY2llcworICAgICAgICAgIChsaWtlIGEgc3RydWN0dXJlIHRoYXQgZG9lc24n
dCBxdWl0ZSBtYXRjaCB0aGUgYXJyYXkgbW9kZXMgYml0cyksCisgICAgICAgICAgYnV0IHRoZXNl
IHNob3VsZCBiZSBoYXJtbGVzczogYXQgd29yc3QsIHRoZSBERkcgd2lsbCBzcGVjaWFsaXplCisg
ICAgICAgICAgdG9vIG11Y2ggYW5kIHdlJ2xsIGhhdmUgT1NSIGV4aXRzLiBOb3RlIHRoYXQgd3Jp
dGluZyB0byBhIHZhbHVlCisgICAgICAgICAgcHJvZmlsZSBvbmx5IGgKKyAgICAgICAgCisgICAg
ICAgIC0gVXBkYXRpbmcgYSB2YWx1ZSBwcm9maWxlIHJlcXVpcmVzIGhvbGRpbmcgYSBsb2NrLCBi
dXQgbXVzdCBhc3N1bWUKKyAgICAgICAgICB0aGF0IHRoZSBmaWVsZHMgd3JpdHRlbiBieSB0aGUg
cHJvZmlsaW5nIGNvZGUgaW4gSklUL0xMSW50IG1heQorICAgICAgICAgIGJlIHdyaXR0ZW4gdG8g
d2l0aG91dCBsb2NraW5nLgorICAgICAgICAKKyAgICAgICAgLSBSZWFkaW5nIGEgdmFsdWUgcHJv
ZmlsZSByZXF1aXJlcyBob2xkaW5nIGEgbG9jay4KKyAgICAgICAgCisgICAgICAgIFRoZSBvbmUg
bWFqb3IgZXhjZXB0aW9uIHRvIHRoZXNlIHJ1bGVzIGlzIHRoZSBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlLAorICAgICAgICB3aGljaCByZXF1aXJlcyBubyBsb2NraW5nLiBXZSBkbyB0aGlzIGJlY2F1
c2UgaXQncyB1c2VkIHNvIG9mdGVuIGFuZAorICAgICAgICBpbiBwbGFjZXMgd2hlcmUgd2UgZG9u
J3QgbmVjZXNzYXJpbHkgaGF2ZSBhY2Nlc3MgdG8gdGhlIG93bmluZworICAgICAgICBDb2RlQmxv
Y2ssIHNvIGlmIHdlIGRpZCB3YW50IGl0IHRvIGJlIGxvY2tlZCBpdCB3b3VsZCBoYXZlIHRvIGhh
dmUKKyAgICAgICAgaXRzIG93biBsb2NrLiBBbHNvLCBJIGJlbGlldmUgdGhhdCBpdCBpcyBzb3Vu
ZCB0byBqdXN0IG1ha2UgdGhpcworICAgICAgICBwcm9maWxlIHJhY3kgYW5kIG5vdCB3b3JyeSBh
Ym91dCBsb2NraW5nIGF0IGFsbC4gQWxsIHRoYXQgd2FzIG5lZWRlZAorICAgICAgICB3ZXJlIHNv
bWUgY2hhbmdlcyB0byBlbnN1cmUgdGhhdCB3ZSBleHBsaWNpdGx5IHJlYWQgc29tZSByYWNlZC1v
dmVyCisgICAgICAgIGZpZWxkcyBvbmx5IG9uY2UuCisKKyAgICAgICAgVHdvIGFkZGl0aW9uYWwg
aW50ZXJlc3RpbmcgdGhpbmdzIGluIHRoaXMgY2hhbmdlOgorICAgICAgICAKKyAgICAgICAgLSBU
byBtYWtlIGl0IGVhc3kgdG8gc2VlIHdoaWNoIHByb2ZpbGUgbWV0aG9kcyByZXF1aXJlIGxvY2tp
bmcsIHRoZXkKKyAgICAgICAgICB0YWtlIGEgY29uc3QgQ29kZUJsb2NrTG9jayYgYXMgYW4gYXJn
dW1lbnQuIEkgc2F3IHRoaXMgaWRpb20gZm9yCisgICAgICAgICAgaWRlbnRpZnlpbmcgd2hpY2gg
bWV0aG9kcyByZXF1aXJlIHdoaWNoIGxvY2tzIHRvIGJlIGhlbGQgYmVpbmcgdXNlZAorICAgICAg
ICAgIGluIExMVk0sIGFuZCBJIHF1aXRlIGxpa2UgaXQuCisgICAgICAgIAorICAgICAgICAtIExh
enkgb3BlcmFuZCB2YWx1ZSBwcm9maWxlcywgd2hpY2ggYXJlIGNyZWF0ZWQgbGF6aWx5IGFuZCBh
dCBhbnkKKyAgICAgICAgICB0aW1lLCByZXF1aXJlIHRoZSBDb2RlQmxvY2tMb2NrIHRvIGJlIGhl
bGQgd2hlbiB0aGV5IGFyZSBiZWluZworICAgICAgICAgIGNyZWF0ZWQuIFdyaXRlcyB0byB0aGVt
IGFyZSBsb2NrbGVzcyBhbmQgbWFpbi10aHJlYWQtb25seSwgYnV0IGFzCisgICAgICAgICAgd2l0
aCBvdGhlciBwcm9maWxlcywgdXBkYXRlcyBhbmQgcmVhZHMgcmVxdWlyZSBsb2NraW5nLgorCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmg6CisgICAgICAgIChBcnJheUFs
bG9jYXRpb25Qcm9maWxlKToKKyAgICAgICAgKEpTQzo6QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6
Y3VycmVudEluZGV4aW5nVHlwZSk6CisgICAgICAgICogYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNw
cDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24p
OgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OmJyaWVmRGVzY3JpcHRpb24pOgorICAgICAg
ICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5oOgorICAgICAgICAoQXJyYXlQcm9maWxlKToKKyAg
ICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpleHBlY3RlZFN0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OkFycmF5UHJvZmlsZTo6c3RydWN0dXJlSXNQb2x5bW9ycGhpYyk6CisgICAgICAgIChKU0M6
OkFycmF5UHJvZmlsZTo6aGFzRGVmaW5pdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpBcnJh
eVByb2ZpbGU6Om9ic2VydmVkQXJyYXlNb2Rlcyk6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmls
ZTo6bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9m
aWxlOjptYXlTdG9yZVRvSG9sZSk6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmlsZTo6b3V0T2ZC
b3VuZHMpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OnVzZXNPcmlnaW5hbEFycmF5U3Ry
dWN0dXJlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAg
ICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxp
bmcpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBBcnJheVByb2ZpbGluZyk6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNz
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENoZWNrSWZT
aG91bGRPcHRpbWl6ZU5vdyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBk
YXRlQWxsUHJlZGljdGlvbnNBbmRDaGVja0lmU2hvdWxkT3B0aW1pemVOb3cpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9ja0xvY2suaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkNvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUhvbGRlcjo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvbXBy
ZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6YWRkKToKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6On5MYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChK
U0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpwcmVkaWN0aW9uKToKKyAgICAgICAg
KiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoQ29tcHJlc3Nl
ZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyKToKKyAgICAgICAgKExhenlPcGVyYW5kVmFs
dWVQcm9maWxlUGFyc2VyKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6Z2V0U3BlY0ZhaWxCdWNrZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAg
KiBieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2
ZUdsb2JhbFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6OmJyaWVmRGVzY3JpcHRpb24p
OgorICAgICAgICAoVmFsdWVQcm9maWxlQmFzZSk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmls
ZUJhc2U6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQpOgor
ICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKEFycmF5TW9kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjp3aXRoUHJvZmlsZSk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6Z2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmZpeHVw
Tm9kZSk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAg
ICAqIGppdC9KSVRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2Rl
KToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1
dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpE
RUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmxhenlMaW5rRm9yKToKKyAgICAg
ICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElO
VF9TTE9XX1BBVEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAg
ICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgIChK
U0M6OlByb2ZpbGVyOjpCeXRlY29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZl
Q29udGFpbmluZ1Njb3BlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZl
UHV0KToKKwogMjAxMy0wNC0xNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIGZvdXJ0aFRpZXI6IGFsbCBpbmxpbmUgY2FjaGVzIHNob3VsZCB0aHJlYWQtc2FmZSBl
bm91Z2ggdG8gYWxsb3cgYSBjb25jdXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZCB0byByZWFkIHRo
ZW0gc2FmZWx5CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTQ4
ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAKIAkJMEYwQjgz
QjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBCODNCODE0
QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBDRDRDMjE1
RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFBNjA0MDAzMkYxQzAgLyog
UHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFs
dWVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovOyB9
OworCQkwRjBEODVCMjE3MjM0NTU0MDAzMzgyMTAgLyogQ29kZUJsb2NrTG9jay5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1QjExNzIzNDU1MTAw
MzM4MjEwIC8qIENvZGVCbG9ja0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODExNTQgLyogTExJbnRDYWxs
TGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTM5MTI5MTY3NzFD
MzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzkxMjQxNjc3MUMzMDAwOUNDQjA3
IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgKi87IH07CiAJCTBGMTM5MTJBMTY3NzFD
MzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5MTI1MTY3NzFDMzAwMDlDQ0IwNyAv
KiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAzMSw2ICsxMDMyLDcgQEAKIAkJMEYwQjgzQjgxNEJD
Rjk1QjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zm
c2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENENEMwMTVGMUE2MDQwMDMy
RjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZhbHVlTWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFycmF5VmFsdWVNYXAuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBEODVCMTE3MjM0NTUxMDAzMzgyMTAg
LyogQ29kZUJsb2NrTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxvY2tMb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTElu
dENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBMTEludENh
bGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzOTEyNDE2Nzcx
QzMwMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA7IHBh
dGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjEzOTEyNTE2NzcxQzMwMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVy
Qnl0ZWNvZGVTZXF1ZW5jZS5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVl
bmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDM0LDYgKzMwMzYsNyBAQAog
CQkJCTk2OUEwNzkxMEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2suaCAqLywKIAkJCQkwRjhG
OTQzRDE2Njc2MzJEMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAgKi8sCiAJCQkJMEY4Rjk0
M0UxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCAqLywKKwkJCQkwRjBEODVCMTE3
MjM0NTUxMDAzMzgyMTAgLyogQ29kZUJsb2NrTG9jay5oICovLAogCQkJCTBGOTZFQkIxMTY2NzZF
RjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovLAogCQkJCTBGOEY5NDQ1MTY2
NzY0RUUwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCAqLywKIAkJCQkwRkJEN0U2NzE0NDc5OThG
MDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovLApAQCAtMzEzMCw2ICszMTMzLDcgQEAKIAkJCQkw
RjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYwMEYxNjdCMiAvKiBBcnJh
eUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBEODVCMjE3MjM0NTU0MDAzMzgy
MTAgLyogQ29kZUJsb2NrTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0NTUxNUQwNzA1
NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcw
RTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFsLmggaW4g
SGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE0ODgwMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzIsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIHZvaWQg
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlSW5kZXhpbmdUeXBlKCkKIHsKLSAgICBpZiAo
IW1fbGFzdEFycmF5KQorICAgIC8vIFRoaXMgaXMgYXdrd2FyZGx5IHJhY3kgYnV0IHRvdGFsbHkg
c291bmQgZXZlbiB3aGVuIGV4ZWN1dGVkIGNvbmN1cnJlbnRseS4gVGhlCisgICAgLy8gd29yc3Qg
Y2FzZXMgZ28gc29tZXRoaW5nIGxpa2UgdGhpczoKKyAgICAvLworICAgIC8vIC0gVHdvIHRocmVh
ZHMgcmFjZSB0byBleGVjdXRlIHRoaXMgY29kZTsgb25lIG9mIHRoZW0gc3VjY2VlZHMgaW4gdXBk
YXRpbmcgdGhlCisgICAgLy8gICBtX2N1cnJlbnRJbmRleGluZ1R5cGUgYW5kIHRoZSBvdGhlciBl
aXRoZXIgdXBkYXRlcyBpdCBhZ2Fpbiwgb3Igc2VlcyBhIG51bGwKKyAgICAvLyAgIG1fbGFzdEFy
cmF5OyBpZiBpdCB1cGRhdGVzIGl0IGFnYWluIHRoZW4gYXQgd29yc3QgaXQgd2lsbCBjYXVzZSB0
aGUgcHJvZmlsZQorICAgIC8vICAgdG8gImZvcmdldCIgc29tZSBhcnJheS4gVGhhdCdzIHN0aWxs
IHNvdW5kLCBzaW5jZSB3ZSBkb24ndCBwcm9taXNlIHRoYXQKKyAgICAvLyAgIHRoaXMgcHJvZmls
ZSBpcyBhIHJlZmxlY3Rpb24gb2YgYW55IGtpbmQgb2YgdHJ1dGguCisgICAgLy8KKyAgICAvLyAt
IEEgY29uY3VycmVudCB0aHJlYWQgcmVhZHMgbV9sYXN0QXJyYXksIGJ1dCB0aGF0IGFycmF5IGlz
IG5vdyBkZWFkLiBXaGlsZQorICAgIC8vICAgaXQncyBwb3NzaWJsZSBmb3IgdGhhdCBhcnJheSB0
byBubyBsb25nZXIgYmUgcmVhY2hhYmxlLCBpdCBjYW5ub3QgYWN0dWFsbHkKKyAgICAvLyAgIGJl
IGZyZWVkLCBzaW5jZSB3ZSByZXF1aXJlIHRoZSBHQyB0byB3YWl0IHVudGlsIGFsbCBjb25jdXJy
ZW50IEpJVGluZworICAgIC8vICAgZmluaXNoZXMuCisgICAgCisgICAgSlNBcnJheSogbGFzdEFy
cmF5ID0gbV9sYXN0QXJyYXk7CisgICAgaWYgKCFsYXN0QXJyYXkpCiAgICAgICAgIHJldHVybjsK
LSAgICBtX2N1cnJlbnRJbmRleGluZ1R5cGUgPSBsZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlw
ZXMobV9jdXJyZW50SW5kZXhpbmdUeXBlLCBtX2xhc3RBcnJheS0+c3RydWN0dXJlKCktPmluZGV4
aW5nVHlwZSgpKTsKKyAgICBtX2N1cnJlbnRJbmRleGluZ1R5cGUgPSBsZWFzdFVwcGVyQm91bmRP
ZkluZGV4aW5nVHlwZXMobV9jdXJyZW50SW5kZXhpbmdUeXBlLCBsYXN0QXJyYXktPnN0cnVjdHVy
ZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgbV9sYXN0QXJyYXkgPSAwOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheUFsbG9jYXRp
b25Qcm9maWxlLmgJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQxLDcgKzQx
LDggQEAgcHVibGljOgogICAgIAogICAgIEluZGV4aW5nVHlwZSBzZWxlY3RJbmRleGluZ1R5cGUo
KQogICAgIHsKLSAgICAgICAgaWYgKG1fbGFzdEFycmF5ICYmIFVOTElLRUxZKG1fbGFzdEFycmF5
LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgIT0gbV9jdXJyZW50SW5kZXhpbmdUeXBlKSkK
KyAgICAgICAgSlNBcnJheSogbGFzdEFycmF5ID0gbV9sYXN0QXJyYXk7CisgICAgICAgIGlmIChs
YXN0QXJyYXkgJiYgVU5MSUtFTFkobGFzdEFycmF5LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBl
KCkgIT0gbV9jdXJyZW50SW5kZXhpbmdUeXBlKSkKICAgICAgICAgICAgIHVwZGF0ZUluZGV4aW5n
VHlwZSgpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50SW5kZXhpbmdUeXBlOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3Bw
CShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJy
YXlQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTQgKzc0LDcgQEAgdm9pZCBkdW1wQXJy
YXlNb2RlcyhQcmludFN0cmVhbSYgb3V0LCBBcgogICAgICAgICBvdXQucHJpbnQoIkFycmF5V2l0
aFNsb3dQdXRBcnJheVN0b3JhZ2UiKTsKIH0KIAotQXJyYXlNb2RlcyBBcnJheVByb2ZpbGU6OnVw
ZGF0ZWRPYnNlcnZlZEFycmF5TW9kZXMoKSBjb25zdAotewotICAgIGlmIChtX2xhc3RTZWVuU3Ry
dWN0dXJlKQotICAgICAgICByZXR1cm4gbV9vYnNlcnZlZEFycmF5TW9kZXMgfCBhcnJheU1vZGVG
cm9tU3RydWN0dXJlKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpOwotICAgIHJldHVybiBtX29ic2VydmVk
QXJyYXlNb2RlczsKLX0KLQotdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24p
Cit2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGNvbnN0IENvZGVC
bG9ja0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3BlcmF0aW9uSW5Qcm9n
cmVzcyBvcGVyYXRpb24pCiB7CiAgICAgaWYgKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpIHsKICAgICAg
ICAgbV9vYnNlcnZlZEFycmF5TW9kZXMgfD0gYXJyYXlNb2RlRnJvbVN0cnVjdHVyZShtX2xhc3RT
ZWVuU3RydWN0dXJlKTsKQEAgLTg5LDcgKzgyLDcgQEAgdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1
dGVVcGRhdGVkUHJlZGljdAogICAgICAgICAgICAgbV9sYXN0U2VlblN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2ZW5XaGVuTGVuZ3RoSXNO
b3RaZXJvKCk7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+aXNPcmln
aW5hbEFycmF5U3RydWN0dXJlKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpKQogICAgICAgICAgICAgbV91
c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMgPSBmYWxzZTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1
cmVJc1BvbHltb3JwaGljKCkpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmVJc1BvbHltb3JwaGlj
KGxvY2tlcikpIHsKICAgICAgICAgICAgIGlmICghbV9leHBlY3RlZFN0cnVjdHVyZSkKICAgICAg
ICAgICAgICAgICBtX2V4cGVjdGVkU3RydWN0dXJlID0gbV9sYXN0U2VlblN0cnVjdHVyZTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKG1fZXhwZWN0ZWRTdHJ1Y3R1cmUgIT0gbV9sYXN0U2VlblN0cnVj
dHVyZSkKQEAgLTEwMiwxNCArOTUsMTQgQEAgdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1dGVVcGRh
dGVkUHJlZGljdAogICAgICAgICBtX2V4cGVjdGVkU3RydWN0dXJlID0gcG9seW1vcnBoaWNTdHJ1
Y3R1cmUoKTsKICAgICAKICAgICBpZiAob3BlcmF0aW9uID09IENvbGxlY3Rpb24KLSAgICAgICAg
JiYgZXhwZWN0ZWRTdHJ1Y3R1cmUoKQorICAgICAgICAmJiBleHBlY3RlZFN0cnVjdHVyZShsb2Nr
ZXIpCiAgICAgICAgICYmICFIZWFwOjppc01hcmtlZChtX2V4cGVjdGVkU3RydWN0dXJlKSkKICAg
ICAgICAgbV9leHBlY3RlZFN0cnVjdHVyZSA9IHBvbHltb3JwaGljU3RydWN0dXJlKCk7CiB9CiAK
LUNTdHJpbmcgQXJyYXlQcm9maWxlOjpicmllZkRlc2NyaXB0aW9uKENvZGVCbG9jayogY29kZUJs
b2NrKQorQ1N0cmluZyBBcnJheVByb2ZpbGU6OmJyaWVmRGVzY3JpcHRpb24oY29uc3QgQ29kZUJs
b2NrTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIGNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihjb2RlQmxvY2spOworICAgIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihsb2NrZXIsIGNvZGVCbG9jayk7CiAgICAgCiAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0Owog
ICAgIApAQCAtMTIyLDcgKzExNSw3IEBAIENTdHJpbmcgQXJyYXlQcm9maWxlOjpicmllZkRlc2Ny
aXB0aW9uKEMKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIAotICAgIGlm
IChzdHJ1Y3R1cmVJc1BvbHltb3JwaGljKCkpIHsKKyAgICBpZiAoc3RydWN0dXJlSXNQb2x5bW9y
cGhpYyhsb2NrZXIpKSB7CiAgICAgICAgIGlmIChoYXNQcmludGVkKQogICAgICAgICAgICAgb3V0
LnByaW50KCIsICIpOwogICAgICAgICBvdXQucHJpbnQoInN0cnVjdCA9IFRPUCIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuaAkocmV2aXNp
b24gMTQ4ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmls
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIEFycmF5UHJvZmlsZV9o
CiAjZGVmaW5lIEFycmF5UHJvZmlsZV9oCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tMb2NrLmgiCiAj
aW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CkBAIC0xNTMsMzIgKzE1NCwzMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGFz
dFNlZW5TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgfQogICAgIAotICAgIHZvaWQgY29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKENvZGVCbG9jayosIE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09w
ZXJhdGlvbik7CisgICAgdm9pZCBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29kZUJs
b2NrTG9ja2VyJiwgQ29kZUJsb2NrKiwgT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9u
KTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlKCkgY29uc3QKKyAgICBT
dHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlKGNvbnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2Vy
KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlzUG9seW1vcnBoaWMoKSkKKyAg
ICAgICAgaWYgKHN0cnVjdHVyZUlzUG9seW1vcnBoaWMobG9ja2VyKSkKICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICByZXR1cm4gbV9leHBlY3RlZFN0cnVjdHVyZTsKICAgICB9Ci0gICAg
Ym9vbCBzdHJ1Y3R1cmVJc1BvbHltb3JwaGljKCkgY29uc3QKKyAgICBib29sIHN0cnVjdHVyZUlz
UG9seW1vcnBoaWMoY29uc3QgQ29kZUJsb2NrTG9ja2VyJikgY29uc3QKICAgICB7CiAgICAgICAg
IHJldHVybiBtX2V4cGVjdGVkU3RydWN0dXJlID09IHBvbHltb3JwaGljU3RydWN0dXJlKCk7CiAg
ICAgfQotICAgIGJvb2wgaGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSBjb25zdAorICAgIGJvb2wgaGFz
RGVmaW5pdGVTdHJ1Y3R1cmUoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIpIGNvbnN0CiAg
ICAgewotICAgICAgICByZXR1cm4gIXN0cnVjdHVyZUlzUG9seW1vcnBoaWMoKSAmJiBtX2V4cGVj
dGVkU3RydWN0dXJlOworICAgICAgICByZXR1cm4gIXN0cnVjdHVyZUlzUG9seW1vcnBoaWMobG9j
a2VyKSAmJiBtX2V4cGVjdGVkU3RydWN0dXJlOwogICAgIH0KLSAgICBBcnJheU1vZGVzIG9ic2Vy
dmVkQXJyYXlNb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2ZWRBcnJheU1vZGVzOyB9Ci0g
ICAgQXJyYXlNb2RlcyB1cGRhdGVkT2JzZXJ2ZWRBcnJheU1vZGVzKCkgY29uc3Q7IC8vIENvbXB1
dGVzIHRoZSBvYnNlcnZlZCBhcnJheSBtb2RlcyB3aXRob3V0IHVwZGF0aW5nIHRoZSBwcm9maWxl
LgotICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QgeyByZXR1cm4g
bV9tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXM7IH0KKyAgICBBcnJheU1vZGVzIG9ic2VydmVk
QXJyYXlNb2Rlcyhjb25zdCBDb2RlQmxvY2tMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX29ic2Vy
dmVkQXJyYXlNb2RlczsgfQorICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGNv
bnN0IENvZGVCbG9ja0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fbWF5SW50ZXJjZXB0SW5kZXhl
ZEFjY2Vzc2VzOyB9CiAgICAgCi0gICAgYm9vbCBtYXlTdG9yZVRvSG9sZSgpIGNvbnN0IHsgcmV0
dXJuIG1fbWF5U3RvcmVUb0hvbGU7IH0KLSAgICBib29sIG91dE9mQm91bmRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9vdXRPZkJvdW5kczsgfQorICAgIGJvb2wgbWF5U3RvcmVUb0hvbGUoY29uc3QgQ29k
ZUJsb2NrTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9tYXlTdG9yZVRvSG9sZTsgfQorICAgIGJv
b2wgb3V0T2ZCb3VuZHMoY29uc3QgQ29kZUJsb2NrTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9v
dXRPZkJvdW5kczsgfQogICAgIAotICAgIGJvb2wgdXNlc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVz
KCkgY29uc3QgeyByZXR1cm4gbV91c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXM7IH0KKyAgICBi
b29sIHVzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlcyhjb25zdCBDb2RlQmxvY2tMb2NrZXImKSBj
b25zdCB7IHJldHVybiBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlczsgfQogICAgIAotICAg
IENTdHJpbmcgYnJpZWZEZXNjcmlwdGlvbihDb2RlQmxvY2sqKTsKKyAgICBDU3RyaW5nIGJyaWVm
RGVzY3JpcHRpb24oY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgQ29kZUJsb2NrKik7CiAgICAgCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJ
KHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgQ2FsbExpbmtT
dGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogCiBDYWxsTGlua1N0YXR1cyBDYWxsTGlu
a1N0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgpCiB7Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxv
Y2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5t
X2xvY2spOwogICAgIAogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVT
RURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2Miw5
ICs2NjIsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmJlZ2luRHVtcFByb2ZpbGluZyhQcmludAogCiB2
b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCiB7CisgICAgQ29k
ZUJsb2NrTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAogICAgICsraXQ7CiAjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQotICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5wcm9maWxl
LT5icmllZkRlc2NyaXB0aW9uKCk7CisgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LnBy
b2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24obG9ja2VyKTsKICAgICBpZiAoIWRlc2NyaXB0aW9uLmxl
bmd0aCgpKQogICAgICAgICByZXR1cm47CiAgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFz
UHJpbnRlZFByb2ZpbGluZyk7CkBAIC02NzcsOSArNjc5LDExIEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wVmFsdWVQcm9maWxpbmcoUHJpbnQKIAogdm9pZCBDb2RlQmxvY2s6OmR1bXBBcnJheVByb2Zp
bGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvbiomIGl0LCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKQogeworICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
KyAgICAKICAgICArK2l0OwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKLSAgICBDU3RyaW5n
IGRlc2NyaXB0aW9uID0gaXQtPnUuYXJyYXlQcm9maWxlLT5icmllZkRlc2NyaXB0aW9uKHRoaXMp
OworICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5hcnJheVByb2ZpbGUtPmJyaWVmRGVz
Y3JpcHRpb24obG9ja2VyLCB0aGlzKTsKICAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQog
ICAgICAgICByZXR1cm47CiAgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91dCwgaGFzUHJpbnRlZFBy
b2ZpbGluZyk7CkBAIC0zMTY4LDYgKzMxNzIsOCBAQCBBcnJheVByb2ZpbGUqIENvZGVCbG9jazo6
Z2V0T3JBZGRBcnJheVByCiB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNBbmRD
b3VudExpdmVuZXNzKAogICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uLCB1bnNpZ25l
ZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1bnNpZ25lZCYgbnVtYmVy
T2ZTYW1wbGVzSW5Qcm9maWxlcykKIHsKKyAgICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2xvY2sp
OworICAgIAogICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcyA9IDA7CiAg
ICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRoaXMgZGl2aWRlZCBieSBW
YWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVz
KCkgdGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7CkBAIC0zMTc3LDE2ICsz
MTgzLDE2IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZEMKICAgICAg
ICAgICAgIG51bVNhbXBsZXMgPSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0czsgLy8gV2Ug
ZG9uJ3Qgd2FudCBwcm9maWxlcyB0aGF0IGFyZSBleHRyZW1lbHkgaG90IHRvIGJlIGdpdmVuIG1v
cmUgd2VpZ2h0LgogICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2ZpbGVzICs9IG51bVNhbXBs
ZXM7CiAgICAgICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0IDwgMCkgewotICAgICAg
ICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9wZXJhdGlvbik7CisgICAg
ICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBvcGVyYXRp
b24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByb2Zp
bGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGljdGlvbiAhPSBTcGVjTm9u
ZSkKICAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQcm9maWxlcysrOwot
ICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24ob3BlcmF0aW9uKTsKKyAg
ICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgb3BlcmF0aW9u
KTsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgbV9sYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhvcGVyYXRpb24pOworICAgIG1f
bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMobG9ja2Vy
LCBvcGVyYXRpb24pOwogI2VuZGlmCiB9CiAKQEAgLTMxOTgsOCArMzIwNCwxMCBAQCB2b2lkIENv
ZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlCiAKIHZvaWQgQ29kZUJsb2NrOjp1cGRh
dGVBbGxBcnJheVByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0aW9uKQogewor
ICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1fbG9jayk7CisgICAgCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgbV9hcnJheVByb2Zp
bGVzW2ldLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbih0aGlzLCBvcGVyYXRpb24pOworICAgICAg
ICBtX2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgdGhp
cywgb3BlcmF0aW9uKTsKICAgICAKICAgICAvLyBEb24ndCBjb3VudCB0aGVzZSBlaXRoZXIsIGZv
ciBzaW1pbGFyIHJlYXNvbnMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheUFsbG9jYXRp
b25Qcm9maWxlcy5zaXplKCk7IGktLTspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcg
QEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJDYWxsUmV0dXJuT2Zmc2V0
VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKKyNpbmNsdWRl
ICJDb2RlQmxvY2tMb2NrLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkNv
ZGVUeXBlLmgiCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKQEAgLTY5LDcgKzcwLDYg
QEAKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAjaW5jbHVkZSAiVmFsdWVQ
cm9maWxlLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3Bp
bkxvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpAQCAtNDc5LDkg
KzQ3OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJ5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIC0gMV0udS5wcm9maWxlID09IHJlc3VsdCk7CiAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVP
ZmZzZXQpCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JC
eXRlY29kZU9mZnNldChjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2Rl
T2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9yQnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKTsK
KyAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFsdWVQcm9maWxlcygpCkBA
IC04ODksNyArODg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgdXBkYXRlQWxs
QXJyYXlQcmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb24pOwogICAg
ICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09w
ZXJhdGlvbik7CiAjZWxzZQotICAgICAgICBib29sIHNob3VsZE9wdGltaXplTm93KCkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgYm9vbCB1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENoZWNrSWZT
aG91bGRPcHRpbWl6ZU5vdygpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZvaWQgdXBkYXRl
QWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0
aW9uKSB7IH0KICAgICAgICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKE9wZXJhdGlv
bkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbikgeyB9CiAgICAgICAgIHZvaWQgdXBkYXRlQWxsUHJl
ZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uKSB7IH0KQEAgLTkyNSw5
ICs5MjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQW5vdGhlciBleGNlcHRpb24g
dG8gdGhlIHJ1bGVzIGlzIHRoYXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZlciBpdCB3YW50cwogICAg
ICAgICAvLyB3aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBiZWNhdXNlIHRoZSBHQyBpcyBndWFy
YW50ZWVkIHRvIHdhaXQgdW50aWwgYW55CiAgICAgICAgIC8vIGNvbmN1cnJlbnQgY29tcGlsYXRp
b24gdGhyZWFkcyBmaW5pc2ggd2hhdCB0aGV5J3JlIGRvaW5nLgotICAgICAgICB0eXBlZGVmIEJ5
dGVTcGluTG9jayBMb2NrOwotICAgICAgICB0eXBlZGVmIEJ5dGVTcGluTG9ja2VyIExvY2tlcjsK
LSAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIENvZGVCbG9ja0xvY2sgbV9sb2NrOwogCiAg
ICAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tMb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBDb2RlQmxvY2tMb2NrX2gKKyNkZWZpbmUgQ29kZUJsb2NrTG9ja19oCisK
KyNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vTG9jay5oPgor
CituYW1lc3BhY2UgSlNDIHsKKworI2lmIEVOQUJMRShDT05DVVJSRU5UX0pJVCkKK3R5cGVkZWYg
Qnl0ZVNwaW5Mb2NrIENvZGVCbG9ja0xvY2s7Cit0eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvZGVC
bG9ja0xvY2tlcjsKKyNlbHNlCit0eXBlZGVmIE5vTG9jayBDb2RlQmxvY2tMb2NrOwordHlwZWRl
ZiBOb0xvY2tMb2NrZXIgQ29kZUJsb2NrTG9ja2VyOworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gQ29kZUJsb2NrTG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE0ODgw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgR2V0QnlJZFN0YXR1czo6Y29tcHV0
ZUZvckNoYWluKEdldEIKIAogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
KENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRp
ZmllciYgaWRlbnQpCiB7Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxv
Y2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5t
X2xvY2spOwogICAgIAogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVT
RURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAJKHJldmlz
aW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDE3ICszNSwxNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6Q29tcHJl
c3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyKCkgeyB9CiBDb21wcmVzc2VkTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXI6On5Db21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVIb2xkZXIoKSB7IH0KIAotdm9pZCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVI
b2xkZXI6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVy
YXRpb24pCit2b2lkIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxvY2tlciwgT3Bl
cmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7CiAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAg
IHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9kYXRhLT5zaXpl
KCk7ICsraSkKLSAgICAgICAgbV9kYXRhLT5hdChpKS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
b3BlcmF0aW9uKTsKKyAgICAgICAgbV9kYXRhLT5hdChpKS5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyLCBvcGVyYXRpb24pOwogfQogCiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogQ29t
cHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjphZGQoCi0gICAgY29uc3QgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIGtleSkKKyAgICBjb25zdCBDb2RlQmxvY2tMb2NrZXIm
LCBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KQogewogICAgIGlmICghbV9k
YXRhKQogICAgICAgICBtX2RhdGEgPSBhZG9wdFB0cihuZXcgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGU6Okxpc3QoKSk7CkBAIC02MCwyMCArNjAsMjIgQEAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUq
IENvbXByZXNzZWRMYXp5TwogICAgIHJldHVybiAmbV9kYXRhLT5sYXN0KCk7CiB9CiAKLUxhenlP
cGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigK
LSAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXImIGhvbGRlcikKLSAg
ICA6IG1faG9sZGVyKGhvbGRlcikKK0xhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigpIHsgfQorTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQ
YXJzZXI6On5MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigpIHsgfQorCit2b2lkIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjppbml0aWFsaXplKAorICAgIGNvbnN0IENvZGVCbG9j
a0xvY2tlciYsIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciYgaG9sZGVy
KQogewotICAgIGlmICghbV9ob2xkZXIubV9kYXRhKQorICAgIEFTU0VSVChtX21hcC5pc0VtcHR5
KCkpOworICAgIAorICAgIGlmICghaG9sZGVyLm1fZGF0YSkKICAgICAgICAgcmV0dXJuOwogICAg
IAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlOjpMaXN0JiBkYXRhID0gKm1faG9sZGVyLm1f
ZGF0YTsKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZTo6TGlzdCYgZGF0YSA9ICpob2xkZXIu
bV9kYXRhOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRhLnNpemUoKTsgKytpKQog
ICAgICAgICBtX21hcC5hZGQoZGF0YVtpXS5rZXkoKSwgJmRhdGFbaV0pOwogfQogCi1MYXp5T3Bl
cmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6fkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKCkg
eyB9Ci0KIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBh
cnNlcjo6Z2V0SWZQcmVzZW50KAogICAgIGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5
JiBrZXkpIGNvbnN0CiB7CkBAIC05Myw3ICs5NSw3IEBAIFNwZWN1bGF0ZWRUeXBlIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlUGEKICAgICBpZiAoIXByb2ZpbGUpCiAgICAgICAgIHJldHVybiBTcGVj
Tm9uZTsKICAgICAKLSAgICByZXR1cm4gcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KCk7CisgICAgcmV0dXJuIHByb2ZpbGUtPm1fcHJlZGljdGlvbjsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKIAor
I2luY2x1ZGUgIkNvZGVCbG9ja0xvY2suaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgpAQCAt
MTU1LDkgKzE1NiwxMCBAQCBwdWJsaWM6CiAgICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQ
cm9maWxlSG9sZGVyKCk7CiAgICAgfkNvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhv
bGRlcigpOwogICAgIAotICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhPcGVyYXRp
b25JblByb2dyZXNzKTsKKyAgICB2b2lkIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMoY29uc3Qg
Q29kZUJsb2NrTG9ja2VyJiwgT3BlcmF0aW9uSW5Qcm9ncmVzcyk7CiAgICAgCi0gICAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUqIGFkZChjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYg
a2V5KTsKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogYWRkKAorICAgICAgICBjb25zdCBD
b2RlQmxvY2tMb2NrZXImLCBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KTsK
ICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
UGFyc2VyOwpAQCAtMTY3LDE2ICsxNjksMTcgQEAgcHJpdmF0ZToKIGNsYXNzIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlUGFyc2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZVBhcnNlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVQYXJzZXIoCi0gICAgICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUhvbGRlciYgaG9sZGVyKTsKKyAgICBleHBsaWNpdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZVBhcnNlcigpOwogICAgIH5MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigpOwogICAgIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZSgKKyAgICAgICAgY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgQ29t
cHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBob2xkZXIpOworICAgIAogICAg
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBnZXRJZlByZXNlbnQoCiAgICAgICAgIGNvbnN0IExh
enlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpIGNvbnN0OwogICAgIAogICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24oY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIGtleSkg
Y29uc3Q7CiBwcml2YXRlOgotICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhv
bGRlciYgbV9ob2xkZXI7CiAgICAgSGFzaE1hcDxMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSwg
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqPiBtX21hcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNTIsMTAgKzUyLDE0IEBAIEVuY29kZWRKU1ZhbHVlKiBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm8KICAgICBjYXNlIFJlYWR5OgogICAgICAgICByZXR1cm4gdS5wcm9maWxlLT5zcGVjRmFp
bEJ1Y2tldChpbmRleCk7CiAgICAgICAgIAotICAgIGNhc2UgTGF6eU9wZXJhbmQ6Ci0gICAgICAg
IHJldHVybiB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVz
KCkuYWRkKAotICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0gICAgICAg
ICAgICAgICAgdS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFuZC5vcGVy
YW5kKSktPnNwZWNGYWlsQnVja2V0KGluZGV4KTsKKyAgICBjYXNlIExhenlPcGVyYW5kOiB7Cisg
ICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5kLmJ5dGVj
b2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgQ29k
ZUJsb2NrTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQorICAgICAgICAgICAgdS5s
YXp5T3BlcmFuZC5jb2RlQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygpLmFkZChsb2Nr
ZXIsIGtleSk7CisgICAgICAgIHJldHVybiBwcm9maWxlLT5zcGVjRmFpbEJ1Y2tldChpbmRleCk7
CisgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5
SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MCw3ICs4
MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KIAogUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9j
aywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYgaWRlbnQpCiB7Ci0gICAgQ29k
ZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJs
b2NrTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIFVOVVNF
RF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Jlc29s
dmVHbG9iYWxTdGF0dXMuY3BwCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ4
LDcgKzQ4LDcgQEAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0ZUZvclN0cgogCiBS
ZXNvbHZlR2xvYmFsU3RhdHVzIFJlc29sdmVHbG9iYWxTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIGludCwgUmVzb2x2ZU9wZXJhdGlvbiogb3BlcmF0aW9uLCBJZGVudGlm
aWVyJiBpZGVudGlmaWVyKQogewotICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxv
Y2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CiAgICAgCiAgICAgQVNTRVJUKG9wZXJhdGlvbi0+bV9vcGVyYXRpb24gPT0gUmVzb2x2ZU9w
ZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHkpOwogICAgIGlmICghb3BlcmF0aW9u
LT5tX3N0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1
ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzMs
NiArMzMsNyBAQAogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogCisjaW5jbHVkZSAiQ29k
ZUJsb2NrTG9jay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAj
aW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKQEAgLTExMSw5ICsxMTIsOSBAQCBzdHJ1Y3QgVmFs
dWVQcm9maWxlQmFzZSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAg
Q1N0cmluZyBicmllZkRlc2NyaXB0aW9uKCkKKyAgICBDU3RyaW5nIGJyaWVmRGVzY3JpcHRpb24o
Y29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIpCiAgICAgewotICAgICAgICBjb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tl
cik7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAgICAgIApA
QCAtMTQ3LDggKzE0OCw5IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1cm5zIHRo
ZSBuZXcgb25lLgotICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihP
cGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiA9IE5vT3BlcmF0aW9uKQorICAgIC8vIFVwZGF0
ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNhbGwgdGhp
cyBmcm9tIGFueSB0aHJlYWQKKyAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUgY29kZS4K
KyAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29kZUJs
b2NrTG9ja2VyJiwgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24gPSBOb09wZXJhdGlvbikK
ICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJlck9mQnVj
a2V0czsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KG1fYnVja2V0c1tpXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5
TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJh
eU1vZGUuY3BwCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDE0ICszNCwxNCBAQAogCiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUFycmF5TW9kZSBBcnJheU1vZGU6OmZyb21P
YnNlcnZlZChBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBib29s
IG1ha2VTYWZlKQorQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGNvbnN0IENvZGVC
bG9ja0xvY2tlciYgbG9ja2VyLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24g
YWN0aW9uLCBib29sIG1ha2VTYWZlKQogewotICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWQgPSBwcm9m
aWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKTsKKyAgICBBcnJheU1vZGVzIG9ic2VydmVkID0gcHJv
ZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7CiAgICAgc3dpdGNoIChvYnNlcnZlZCkg
ewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6VW5wcm9maWxl
ZCk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgotICAgICAgICBpZiAoYWN0aW9u
ID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2Vz
KCkpCisgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJ
bnRlcmNlcHRJbmRleGVkQWNjZXNzZXMobG9ja2VyKSkKICAgICAgICAgICAgIHJldHVybiBBcnJh
eU1vZGUoQXJyYXk6OlVuZGVjaWRlZCwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0T2ZCb3Vu
ZHMsIEFycmF5OjpDb252ZXJ0KTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2Vs
ZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAKQEAgLTUxLDQ5ICs1MSw0OSBAQCBBcnJheU1vZGUgQXJy
YXlNb2RlOjpmcm9tT2JzZXJ2ZWQoQXJyYXlQCiAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJy
YXk6OkdlbmVyaWMpOwogICAgICAgICAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheSkg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoVW5kZWNpZGVkKToKLSAgICAgICAgaWYgKGFjdGlvbiA9
PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcygp
KQorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGxvY2tlcikpCiAgICAgICAgICAgICByZXR1cm4gQXJyYXlN
b2RlKEFycmF5OjpVbmRlY2lkZWQsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6T3V0T2ZC
b3VuZHMsIEFycmF5OjpDb252ZXJ0KTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6
U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJh
eVdpdGhJbnQzMik6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkludDMyLCBBcnJh
eTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7
CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkludDMyLCBBcnJheTo6Tm9uQXJyYXks
IEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhJbnQzMik6Ci0gICAgICAgIHJldHVybiBBcnJh
eU1vZGUoQXJyYXk6OkludDMyLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmls
ZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6Oklu
dDMyLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2Zp
bGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhJbnQzMikg
fCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoSW50MzIpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpJbnQzMiwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJv
ZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6
OkludDMyLCBBcnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxv
Y2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogCiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJy
YXlXaXRoRG91YmxlKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6RG91YmxlLCBB
cnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2Fm
ZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkRvdWJsZSwgQXJyYXk6Ok5vbkFy
cmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7
CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoRG91YmxlKToKLSAgICAgICAgcmV0dXJu
IEFycmF5TW9kZShBcnJheTo6RG91YmxlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRo
UHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJy
YXk6OkRvdWJsZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2Vy
LCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
RG91YmxlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhEb3VibGUpOgotICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpEb3VibGUsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJ
cykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlN
b2RlKEFycmF5OjpEb3VibGUsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0
aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAKICAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShB
cnJheTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2Zp
bGUocHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpD
b250aWd1b3VzLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2Nr
ZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhD
b250aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywg
QXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUp
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6QXJy
YXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsK
ICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFzQXJyYXlN
b2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6Q29udGlndW91cywgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJv
ZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6
OkNvbnRpZ3VvdXMsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2Zp
bGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5
OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxl
KHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6QXJy
YXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2Nr
ZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdp
dGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0
b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJyYXlTdG9y
YWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBt
YWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0
b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwg
cHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5
U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwg
QXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUp
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpB
cnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUp
OwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgog
ICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9k
ZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5OjpBcnJheSwgQXJyYXk6OkFzSXMp
LndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9k
ZShBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcyku
d2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhB
cnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3Jh
Z2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmls
ZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3Jh
Z2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2Vy
LCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRo
U2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5
U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdl
KSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNs
b3dQdXRBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93
UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQ
cm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lz
KS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKIAogICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGlmICgob2JzZXJ2ZWQgJiBhc0FycmF5TW9kZXMoTm9uQXJyYXkpKSAmJiBwcm9m
aWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgaWYgKChvYnNlcnZl
ZCAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkpICYmIHByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3Nlcyhsb2NrZXIpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6
U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgICAgIAogICAgICAgICBBcnJheTo6VHlwZSB0
eXBlOwpAQCAtMTE5LDcgKzExOSw3IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OmZyb21PYnNlcnZl
ZChBcnJheVAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXJyYXlDbGFzcyA9IEFycmF5OjpQ
b3NzaWJseUFycmF5OwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0eXBlLCBh
cnJheUNsYXNzLCBBcnJheTo6Q29udmVydCkud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUp
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHR5cGUsIGFycmF5Q2xhc3MsIEFycmF5OjpDb252
ZXJ0KS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICB9CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2aXNpb24g
MTQ4ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTUwLDI3ICsxNTAsMjcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gQXJy
YXlNb2RlKHdvcmQpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgQXJyYXlNb2RlIGZyb21PYnNl
cnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKKyAgICBz
dGF0aWMgQXJyYXlNb2RlIGZyb21PYnNlcnZlZChjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBBcnJh
eVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKICAgICAKICAgICBBcnJh
eU1vZGUgd2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlvbikgY29u
c3QKICAgICB7CiAgICAgICAgIHJldHVybiBBcnJheU1vZGUodHlwZSgpLCBhcnJheUNsYXNzKCks
IHNwZWN1bGF0aW9uLCBjb252ZXJzaW9uKCkpOwogICAgIH0KICAgICAKLSAgICBBcnJheU1vZGUg
d2l0aFByb2ZpbGUoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBib29sIG1ha2VTYWZlKSBjb25zdAor
ICAgIEFycmF5TW9kZSB3aXRoUHJvZmlsZShjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxvY2tlciwg
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBib29sIG1ha2VTYWZlKSBjb25zdAogICAgIHsKICAgICAg
ICAgQXJyYXk6OlNwZWN1bGF0aW9uIG15U3BlY3VsYXRpb247CiAgICAgICAgIEFycmF5OjpDbGFz
cyBteUFycmF5Q2xhc3M7CiAgICAgICAgIAogICAgICAgICBpZiAobWFrZVNhZmUpCiAgICAgICAg
ICAgICBteVNwZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9mQm91bmRzOwotICAgICAgICBlbHNlIGlm
IChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICBlbHNlIGlmIChwcm9maWxlLT5t
YXlTdG9yZVRvSG9sZShsb2NrZXIpKQogICAgICAgICAgICAgbXlTcGVjdWxhdGlvbiA9IEFycmF5
OjpUb0hvbGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG15U3BlY3VsYXRpb24gPSBBcnJh
eTo6SW5Cb3VuZHM7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNKU0FycmF5KCkpIHsKLSAgICAg
ICAgICAgIGlmIChwcm9maWxlLT51c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMoKSAmJiBiZW5l
Zml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICBpZiAocHJvZmlsZS0+dXNlc09y
aWdpbmFsQXJyYXlTdHJ1Y3R1cmVzKGxvY2tlcikgJiYgYmVuZWZpdHNGcm9tT3JpZ2luYWxBcnJh
eSgpKQogICAgICAgICAgICAgICAgIG15QXJyYXlDbGFzcyA9IEFycmF5OjpPcmlnaW5hbEFycmF5
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG15QXJyYXlDbGFzcyA9IEFycmF5
OjpBcnJheTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEwLDcgKzgxMCw4
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhv
dXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4g
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9u
Rm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIENvZGVCbG9ja0xvY2tl
ciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAg
ICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2Zp
bGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKICAg
ICB9CiAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKHVuc2lnbmVkIGJ5dGVjb2Rl
SW5kZXgpCkBAIC04MzgsOCArODM5LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICBBcnJheU1vZGUg
Z2V0QXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24p
CiAgICAgewotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2spOwotICAgICAgICByZXR1cm4gQXJyYXlNb2RlOjpmcm9t
T2JzZXJ2ZWQocHJvZmlsZSwgYWN0aW9uLCBmYWxzZSk7CisgICAgICAgIENvZGVCbG9ja0xvY2sg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAg
ICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbU9i
c2VydmVkKGxvY2tlciwgcHJvZmlsZSwgYWN0aW9uLCBmYWxzZSk7CiAgICAgfQogICAgIAogICAg
IEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQpAQCAtODQ5LDI0
ICs4NTEsMjYgQEAgcHJpdmF0ZToKICAgICAKICAgICBBcnJheU1vZGUgZ2V0QXJyYXlNb2RlQW5k
RW1pdENoZWNrcyhBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uLCBO
b2RlKiBiYXNlKQogICAgIHsKLSAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9j
ayBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAg
ICAgICAKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrKTsKICAgICAgICAgCiAjaWYgREZHX0VO
QUJMRShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQogICAgICAgICBpZiAobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5udW1iZXJPZlJhcmVDYXNlUHJvZmlsZXMoKSkKICAgICAg
ICAgICAgIGRhdGFMb2dGKCJTbG93IGNhc2UgcHJvZmlsZSBmb3IgYmMjJXU6ICV1XG4iLCBtX2N1
cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVBy
b2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7Ci0gICAg
ICAgIGRhdGFMb2dGKCJBcnJheSBwcm9maWxlIGZvciBiYyMldTogJXAlcyVzLCAldVxuIiwgbV9j
dXJyZW50SW5kZXgsIHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCksIHByb2ZpbGUtPnN0cnVj
dHVyZUlzUG9seW1vcnBoaWMoKSA/ICIgKHBvbHltb3JwaGljKSIgOiAiIiwgcHJvZmlsZS0+bWF5
SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgPyAiIChtYXkgaW50ZXJjZXB0KSIgOiAiIiwgcHJv
ZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCkpOworICAgICAgICBkYXRhTG9nRigiQXJyYXkgcHJv
ZmlsZSBmb3IgYmMjJXU6ICVwJXMlcywgJXVcbiIsIG1fY3VycmVudEluZGV4LCBwcm9maWxlLT5l
eHBlY3RlZFN0cnVjdHVyZSgpLCBwcm9maWxlLT5zdHJ1Y3R1cmVJc1BvbHltb3JwaGljKGxvY2tl
cikgPyAiIChwb2x5bW9ycGhpYykiIDogIiIsIHByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3Nlcyhsb2NrZXIpID8gIiAobWF5IGludGVyY2VwdCkiIDogIiIsIHByb2ZpbGUtPm9ic2Vy
dmVkQXJyYXlNb2Rlcyhsb2NrZXIpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgYm9vbCBt
YWtlU2FmZSA9CiAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQotICAgICAgICAgICAgfHwgcHJv
ZmlsZS0+b3V0T2ZCb3VuZHMoKTsKKyAgICAgICAgICAgIHx8IHByb2ZpbGUtPm91dE9mQm91bmRz
KGxvY2tlcik7CiAgICAgICAgIAotICAgICAgICBBcnJheU1vZGUgcmVzdWx0ID0gQXJyYXlNb2Rl
Ojpmcm9tT2JzZXJ2ZWQocHJvZmlsZSwgYWN0aW9uLCBtYWtlU2FmZSk7CisgICAgICAgIEFycmF5
TW9kZSByZXN1bHQgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIsIHByb2ZpbGUsIGFj
dGlvbiwgbWFrZVNhZmUpOwogICAgICAgICAKLSAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmlu
aXRlU3RydWN0dXJlKCkKKyAgICAgICAgaWYgKHByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJl
KGxvY2tlcikKICAgICAgICAgICAgICYmIHJlc3VsdC5iZW5lZml0c0Zyb21TdHJ1Y3R1cmVDaGVj
aygpCiAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKQotICAgICAgICAgICAgYWRkVG9HcmFw
aChDaGVja1N0cnVjdHVyZSwgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUt
PmV4cGVjdGVkU3RydWN0dXJlKCkpKSwgYmFzZSk7CisgICAgICAgICAgICBhZGRUb0dyYXBoKENo
ZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQocHJvZmlsZS0+ZXhw
ZWN0ZWRTdHJ1Y3R1cmUobG9ja2VyKSkpLCBiYXNlKTsKICAgICAgICAgCiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQpAQCAtMTc3OSw3ICsxNzgzLDcgQEAgTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmdldFNjb3BlKGJvb2wgc2tpcAogYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VSZXNvbHZl
T3BlcmF0aW9ucyhTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCB1bnNpZ25lZCBpZGVudGlmaWVy
LCBSZXNvbHZlT3BlcmF0aW9ucyogcmVzb2x2ZU9wZXJhdGlvbnMsIFB1dFRvQmFzZU9wZXJhdGlv
biogcHV0VG9CYXNlT3BlcmF0aW9uLCBOb2RlKiogYmFzZSwgTm9kZSoqIHZhbHVlKQogewogICAg
IHsKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlciht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgIAogICAgICAg
ICBpZiAoIXJlc29sdmVPcGVyYXRpb25zLT5tX3JlYWR5KSB7CiAgICAgICAgICAgICBhZGRUb0dy
YXBoKEZvcmNlT1NSRXhpdCk7CkBAIC0yMDE1LDkgKzIwMTksMTAgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX2NvbnZlcnRfdGhpczog
ewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VGhpcygpOwogICAgICAgICAgICAgaWYgKG9w
MS0+b3AoKSAhPSBDb252ZXJ0VGhpcykgeworICAgICAgICAgICAgICAgIENvZGVCbG9ja0xvY2tl
ciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAg
ICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9CiAgICAgICAgICAgICAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQobV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwotICAgICAgICAgICAgICAgIHByb2Zp
bGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAgICAgICAgICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiW2JjIyV1XTogcHJvZmlsZSAlcDog
IiwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUpOwogICAgICAgICAgICAgICAgIHBy
b2ZpbGUtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKQEAgLTIxMTMsOCArMjExOCw5IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZTogeworICAgICAgICAgICAgQ29kZUJsb2Nr
TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7
CiAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5wcm9maWxlOwotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKCk7CisgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9j
a2VyKTsKICAgICAgICAgICAgIGlmIChwcm9maWxlLT5tX3NpbmdsZXRvblZhbHVlSXNUb3AKICAg
ICAgICAgICAgICAgICB8fCAhcHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZQogICAgICAgICAgICAg
ICAgIHx8ICFwcm9maWxlLT5tX3NpbmdsZXRvblZhbHVlLmlzQ2VsbCgpKQpAQCAtMzE3Nyw3ICsz
MTgzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgUHV0VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NF0udS5wdXRUb0Jhc2VPcGVyYXRpb247CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvZGVCbG9ja0xvY2tl
ciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghcHV0VG9CYXNlLT5tX3JlYWR5KSB7
CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKQEAgLTM0OTMs
MTEgKzM0OTksMTUgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQog
ICAgICwgbV9leGl0UHJvZmlsZShwcm9maWxlZEJsb2NrLT5leGl0UHJvZmlsZSgpKQogICAgICwg
bV9jYWxsc2l0ZUJsb2NrSGVhZChjYWxsc2l0ZUJsb2NrSGVhZCkKICAgICAsIG1fcmV0dXJuVmFs
dWUocmV0dXJuVmFsdWVWUikKLSAgICAsIG1fbGF6eU9wZXJhbmRzKHByb2ZpbGVkQmxvY2stPmxh
enlPcGVyYW5kVmFsdWVQcm9maWxlcygpKQogICAgICwgbV9kaWRSZXR1cm4oZmFsc2UpCiAgICAg
LCBtX2RpZEVhcmx5UmV0dXJuKGZhbHNlKQogICAgICwgbV9jYWxsZXIoYnl0ZUNvZGVQYXJzZXIt
Pm1faW5saW5lU3RhY2tUb3ApCiB7CisgICAgeworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9j
a2VyKG1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgbV9sYXp5T3BlcmFuZHMuaW5p
dGlhbGl6ZShsb2NrZXIsIG1fcHJvZmlsZWRCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVz
KCkpOworICAgIH0KKyAgICAKICAgICBtX2FyZ3VtZW50UG9zaXRpb25zLnJlc2l6ZShhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpczsgKytpKSB7CiAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBo
Lm1fYXJndW1lbnRQb3NpdGlvbnMuYXBwZW5kKEFyZ3VtZW50UG9zaXRpb24oKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0
ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxMywxOSArNzEzLDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoY29kZUJsb2NrKCktPmlkZW50aWZpZXIobm9kZS0+
aWRlbnRpZmllck51bWJlcigpKSAhPSB2bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkKICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9
IG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbik7CiAgICAgICAg
ICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IAotICAgICAgICAgICAgICAgIG1fZ3Jh
cGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29kZU9yaWdpbiktPmdldEFycmF5UHJvZmls
ZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsK
KyAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrLT5nZXRBcnJheVByb2ZpbGUobm9kZS0+Y29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKICAgICAgICAgICAgIEFycmF5TW9kZSBhcnJheU1vZGUg
PSBBcnJheU1vZGUoQXJyYXk6OlNlbGVjdFVzaW5nUHJlZGljdGlvbnMpOwogICAgICAgICAgICAg
aWYgKGFycmF5UHJvZmlsZSkgewotICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fZ3JhcGguYmFzZWxpbmVDb2RlQmxvY2tGb3Iobm9kZS0+Y29k
ZU9yaWdpbikpOwotICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9i
c2VydmVkKGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKLSAgICAgICAgICAgICAg
ICBhcnJheU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKAotICAgICAgICAgICAgICAgICAgICBub2Rl
LT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAg
ICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJheVByb2ZpbGUtPmhh
c0RlZmluaXRlU3RydWN0dXJlKCkpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIg
bG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgYXJyYXlQcm9m
aWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBwcm9maWxlZEJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIs
IGFycmF5UHJvZmlsZSwgQXJyYXk6OlJlYWQsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBhcnJh
eU1vZGUgPSBhcnJheU1vZGUucmVmaW5lKG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5v
ZGUtPnByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0
c0xlbmd0aCgpICYmIGFycmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUobG9ja2VyKSkg
ewogICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNOb25lLCBDaGVja1N0cnVjdHVy
ZSwgbm9kZS0+Y29kZU9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dy
YXBoLmFkZFN0cnVjdHVyZVNldChhcnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCkpKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChh
cnJheVByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKGxvY2tlcikpKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9IGVsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBh
cmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRQcmVwYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsOSArMzcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogdm9pZCBwcmVw
YXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoRXhlY1N0YXRlKiBleGVjLCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4pCiB7CiAgICAgZm9yICg7IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAgICAgICBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
ZXhlY3V0YWJsZS5nZXQoKSkKLSAgICAgICAgICAgIC0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNv
bnN0cnVjdCkKLSAgICAgICAgICAgIC0+aml0Q29tcGlsZShleGVjKTsKKyAgICAgICAgRnVuY3Rp
b25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0KKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdl
dCgpKTsKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5iYXNlbGlu
ZUNvZGVCbG9ja0ZvcigKKyAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5p
c0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICAKKyAgICAg
ICAgY29kZUJsb2NrLT5qaXRDb21waWxlKGV4ZWMpOwogICAgIH0KIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCwx
OCArNDgsMjQgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQobV9ncmFwaC5tX3VuaWZpY2F0aW9u
U3RhdGUgPT0gR2xvYmFsbHlVbmlmaWVkKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChjb2Rl
QmxvY2soKS0+bnVtUGFyYW1ldGVycygpID49IDEpOwotICAgICAgICBmb3IgKHNpemVfdCBhcmcg
PSAwOyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJz
KCkpOyArK2FyZykgewotICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmls
ZWRCbG9jaygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChhcmcpOwotICAgICAgICAgICAgaWYg
KCFwcm9maWxlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB7CisgICAgICAg
ICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2soKS0+bV9sb2NrKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKKyAg
ICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSBwcm9maWxlZEJsb2NrKCktPnZh
bHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7CisgICAgICAgICAgICAgICAgaWYgKCFwcm9maWxl
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dChwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICAgICAg
bV9ncmFwaC5tX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdCgK
KyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxv
Y2tlcikpOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
ICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0g
cHJlZGljdGlvbjogIiwKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAobV9ncmFwaC5t
X2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygKKyAgICAgICAgICAgICAgICAgICAgIkFyZ3Vt
ZW50IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCisgICAgICAgICAgICAgICAgICAgIFNwZWN1
bGF0aW9uRHVtcChtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0aW9uKCkpLAorICAgICAgICAgICAgICAgICAgICAiXG4iKTsKICNlbmRpZgorICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAko
cmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDA4LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzMyw5ICs0MzMsMTAgQEAgc3RhdGljIGlu
bGluZSBib29sIGFycmF5UHJvZmlsZVNhdyhBcnJheQogCiBpbmxpbmUgSklUQXJyYXlNb2RlIEpJ
VDo6Y2hvb3NlQXJyYXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKIHsKLSNpZiBFTkFCTEUo
VkFMVUVfUFJPRklMRVIpICAgICAgICAKLSAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obV9jb2RlQmxvY2spOwotICAgIEFycmF5TW9kZXMgYXJyYXlNb2RlcyA9IHByb2ZpbGUt
Pm9ic2VydmVkQXJyYXlNb2RlcygpOworI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBD
b2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1fY29kZUJsb2NrLT5tX2xvY2spOworICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1fY29kZUJsb2NrKTsKKyAgICBBcnJh
eU1vZGVzIGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMobG9ja2VyKTsK
ICAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMsIERvdWJsZVNoYXBlKSkKICAgICAg
ICAgcmV0dXJuIEpJVERvdWJsZTsKICAgICBpZiAoYXJyYXlQcm9maWxlU2F3KGFycmF5TW9kZXMs
IEludDMyU2hhcGUpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJ
KHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDQsNyArODQ0LDcgQEAgdm9pZCBwZXJmb3JtUGxhdGZv
cm1TcGVjaWZpY0pJVEFzc2VydGlvbgogCiBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2Fj
aGVQdXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgUHV0
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIGJvb2wgZGly
ZWN0KQogewotICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgCiAg
ICAgLy8gVGhlIGludGVycHJldGVyIGNoZWNrcyBmb3IgcmVjdXJzaW9uIGhlcmU7IEkgZG8gbm90
IGJlbGlldmUgdGhpcyBjYW4gb2NjdXIgaW4gQ1RJLgogCkBAIC05MDAsNyArOTAwLDcgQEAgTkVW
RVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlUHV0QnlJRAogCiBORVZFUl9JTkxJTkUgc3Rh
dGljIHZvaWQgdHJ5Q2FjaGVHZXRCeUlEKENhbGxGcmFtZSogY2FsbEZyYW1lLCBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBKU1ZhbHVlIGJhc2VW
YWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3Qm
IHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbykKIHsKLSAgICBDb2RlQmxvY2s6Okxv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgIENvZGVCbG9ja0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIC8vIEZJWE1FOiBXcml0ZSBhIHRlc3Qg
dGhhdCBwcm92ZXMgd2UgbmVlZCB0byBjaGVjayBmb3IgcmVjdXJzaW9uIGhlcmUganVzdAogICAg
IC8vIGxpa2UgdGhlIGludGVycHJldGVyIGRvZXMsIHRoZW4gYWRkIGEgY2hlY2sgZm9yIHJlY3Vy
c2lvbi4KQEAgLTE1OTAsNyArMTU5MCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KIAogICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKIAotICAgIENvZGVCbG9j
azo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgaWYgKGJhc2VWYWx1ZS5pc0Nl
bGwoKQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlKCkKQEAgLTE3MDksNyArMTcwOSw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIENvZGVCbG9jazo6TG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNl
VmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpOwogCkBAIC0yMTcyLDcgKzIxNzIsNyBAQCBpbmxp
bmUgdm9pZCogbGF6eUxpbmtGb3IoQ2FsbEZyYW1lKiBjYWxsCiAgICAgICAgICAgICBjb2RlUHRy
ID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5nZW5lcmF0ZWRKSVRDb2RlRm9yKGtpbmQpLT5hZGRyZXNz
Rm9yQ2FsbCgpOwogICAgIH0KIAotICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjYWxsRnJh
bWUtPmNhbGxlckZyYW1lKCktPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgIENvZGVCbG9ja0xv
Y2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgpLT5jb2RlQmxvY2soKS0+bV9sb2Nr
KTsKICAgICBpZiAoIWNhbGxMaW5rSW5mby0+c2Vlbk9uY2UoKSkKICAgICAgICAgY2FsbExpbmtJ
bmZvLT5zZXRTZWVuKCk7CiAgICAgZWxzZQpAQCAtMjI0OCw3ICsyMjQ4LDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04odm9pZCosIHZtX2xhenlMaW5rQwogICAgIAogICAgIGlmIChzaG91bGRMaW5r
KSB7CiAgICAgICAgIEFTU0VSVChjb2RlUHRyKTsKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIg
bG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2Vy
IGxvY2tlcihjYWxsZXJDb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgIEpJVDo6Y29tcGlsZUNs
b3N1cmVDYWxsKHZtLCBjYWxsTGlua0luZm8sIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlQ29kZUJs
b2NrLCBzdHJ1Y3R1cmUsIGV4ZWN1dGFibGUsIGNvZGVQdHIpOwogICAgICAgICBjYWxsTGlua0lu
Zm8tPmhhc1NlZW5DbG9zdXJlID0gdHJ1ZTsKICAgICB9IGVsc2UKQEAgLTIzOTUsNyArMjM5NSw3
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVl
IHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0u
aWRlbnRpZmllcigpLCBvcGVyYXRpb25zKTsKICAgICAKICAgICBpZiAod2lsbFJlaWZ5KSB7Ci0g
ICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5t
X2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAg
IH0KICAgICAKQEAgLTI0MTUsNyArMjQxNSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQs
IG9wX3B1dF90b19iYXMKICAgICBKU1Njb3BlOjpyZXNvbHZlUHV0KGNhbGxGcmFtZSwgYmFzZSwg
c3RhY2tGcmFtZS5hcmdzWzFdLmlkZW50aWZpZXIoKSwgdmFsdWUsIG9wZXJhdGlvbik7CiAgICAg
CiAgICAgaWYgKGZpcnN0VGltZSkgewotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIo
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2Vy
IGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICBvcGVyYXRp
b24tPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KIApAQCAtMjc1Miw3ICsyNzUyLDcgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNTY29wZTo6cmVzb2x2ZUJhc2Uoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJn
c1swXS5pZGVudGlmaWVyKCksIGZhbHNlLCBvcGVyYXRpb25zLCBzdGFja0ZyYW1lLmFyZ3NbMl0u
cHV0VG9CYXNlT3BlcmF0aW9uKCkpOwogICAgIAogICAgIGlmICh3aWxsUmVpZnkpIHsKLSAgICAg
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbnMtPm1f
cmVhZHkgPSB0cnVlOwogICAgIH0KICAgICAKQEAgLTI3NjksNyArMjc2OSw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBpZiAoSlNWYWx1ZSByZXN1bHQg
PSBKU1Njb3BlOjpyZXNvbHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5h
cmdzWzBdLmlkZW50aWZpZXIoKSwgdHJ1ZSwgb3BlcmF0aW9ucywgc3RhY2tGcmFtZS5hcmdzWzJd
LnB1dFRvQmFzZU9wZXJhdGlvbigpKSkgewogICAgICAgICAKICAgICAgICAgaWYgKHdpbGxSZWlm
eSkgewotICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvZGVCbG9ja0xvY2tl
ciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAg
ICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC0zMDc2LDcgKzMwNzYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfCiAgICAgYm9vbCB3aWxsUmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CiAgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aEJhc2UoY2FsbEZyYW1lLCBzdGFj
a0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCAmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFj
a0ZyYW1lLmFyZ3NbMV0uaW50MzIoKV0sIG9wZXJhdGlvbnMsIHN0YWNrRnJhbWUuYXJnc1szXS5w
dXRUb0Jhc2VPcGVyYXRpb24oKSk7CiAgICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBDb2Rl
QmxvY2s6OkxvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5t
X2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2FsbEZy
YW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9
IHRydWU7CiAgICAgfQogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CkBAIC0zMDky
LDcgKzMwOTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAg
ICAgYm9vbCB3aWxsUmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CiAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aFRoaXMoY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFy
Z3NbMF0uaWRlbnRpZmllcigpLCAmY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFy
Z3NbMV0uaW50MzIoKV0sIG9wZXJhdGlvbnMpOwogICAgIGlmICh3aWxsUmVpZnkpIHsKLSAgICAg
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihzdGFja0ZyYW1l
LmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbnMtPm1f
cmVhZHkgPSB0cnVlOwogICAgIH0KICAgICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRT
bG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTUsNyArODE1LDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmUpCiAgICAgfQogICAgIAogICAgIHsKLSAgICAg
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwor
ICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2sp
OwogICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC04
MzcsNyArODM3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19iYQog
ICAgIH0KIAogICAgIHsKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGV4ZWMtPmNv
ZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGV4ZWMt
PmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICBvcGVyYXRpb24tPm1fcmVhZHkgPSB0cnVl
OwogICAgIH0KICAgICAKQEAgLTg3NSw3ICs4NzUsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfcmVzb2x2ZV9iCiAgICAgfQogICAgIAogICAgIHsKLSAgICAgICAgQ29kZUJsb2Nr
OjpMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2Rl
QmxvY2tMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICBv
cGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC05MDEsNyArOTAxLDcg
QEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVfdwogICAgIGJvb2wgd2ls
bFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNT
Y29wZTo6cmVzb2x2ZVdpdGhCYXNlKGV4ZWMsIGV4ZWMtPmNvZGVCbG9jaygpLT5pZGVudGlmaWVy
KHBjWzNdLnUub3BlcmFuZCksICZMTElOVF9PUCgxKSwgb3BlcmF0aW9ucywgcGNbNV0udS5wdXRU
b0Jhc2VPcGVyYXRpb24pOwogICAgIGlmICh3aWxsUmVpZnkpIHsKLSAgICAgICAgQ29kZUJsb2Nr
OjpMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2Rl
QmxvY2tMb2NrZXIgbG9ja2VyKGV4ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICBv
cGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICB9CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBU
SU9OKCk7CkBAIC05MTcsNyArOTE3LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3Jlc29sdmVfdwogICAgIGJvb2wgd2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwog
ICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZVdpdGhUaGlzKGV4ZWMsIGV4ZWMt
PmNvZGVCbG9jaygpLT5pZGVudGlmaWVyKHBjWzNdLnUub3BlcmFuZCksICZMTElOVF9PUCgxKSwg
b3BlcmF0aW9ucyk7CiAgICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBDb2RlQmxvY2s6Okxv
Y2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9j
a0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJh
dGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KICAgICBMTElOVF9DSEVDS19FWENFUFRJT04o
KTsKQEAgLTk1Nyw3ICs5NTcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0
X2J5X2lkCiAgICAgICAgIAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5wcm9oaWJp
dHNQcm9wZXJ0eUNhY2hpbmcoKSkgewotICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9j
a2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBwY1s0XS51
LnN0cnVjdHVyZS5zZXQoCiAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0cnVjdHVyZSk7CkBAIC0xMDI0LDcgKzEwMjQsNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAmJiBiYXNlQ2VsbCA9PSBz
bG90LmJhc2UoKSkgewogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc2xvdC50eXBlKCkg
PT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgewotICAgICAgICAgICAgICAgIENvZGVC
bG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgc3RydWN0
dXJlLT5wcmV2aW91c0lEKCktPm91dE9mTGluZUNhcGFjaXR5KCkgPT0gc3RydWN0dXJlLT5vdXRP
ZkxpbmVDYXBhY2l0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXRIYXNCZWVuSW52YWxpZGF0ZWQo
KSk7CkBAIC0xNDY1LDcgKzE0NjUsNyBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBlIHNldFVw
Q2FsbChFeGVjCiAgICAgaWYgKCFMTElOVF9BTFdBWVNfQUNDRVNTX1NMT1cgJiYgY2FsbExpbmtJ
bmZvKSB7CiAgICAgICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxlciA9IGV4ZWNDYWxsZWUtPmNhbGxl
ckZyYW1lKCk7CiAKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGV4ZWNDYWxsZXIt
PmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGV4
ZWNDYWxsZXItPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKGNh
bGxMaW5rSW5mby0+aXNPbkxpc3QoKSkKICAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+cmVtb3Zl
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29k
ZVNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcAkocmV2aXNpb24gMTQ4ODAxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQwLDcgKzQwLDggQEAgQnl0ZWNvZGVTZXF1ZW5jZTo6Qnl0ZWNvZGVT
ZXF1ZW5jZShDb2RlQgogICAgIAogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkFyZ3VtZW50VmFsdWVQcm9m
aWxlcygpOyArK2kpIHsKLSAgICAgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGNvZGVCbG9jay0+
dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoaSktPmJyaWVmRGVzY3JpcHRpb24oKTsKKyAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgIENTdHJp
bmcgZGVzY3JpcHRpb24gPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGkpLT5i
cmllZkRlc2NyaXB0aW9uKGxvY2tlcik7CiAgICAgICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3Ro
KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnJlc2V0KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTQ4ODAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTMwMSw3ICszMDEsNyBAQCB0ZW1wbGF0ZSA8SlNTY29wZTo6TG9va3VwTW9kZSBtb2Rl
LCBKU1NjCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy0+YXBwZW5kKFJl
c29sdmVPcGVyYXRpb246OmNoZWNrRm9yRHluYW1pY0VudHJpZXNCZWZvcmVHbG9iYWxTY29wZSgp
KTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHB1dFRvQmFzZU9wZXJhdGlvbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1faXNEeW5hbWljID0gcmVxdWlyZXNEeW5hbWljQ2hlY2tz
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5k
ID0gUHV0VG9CYXNlT3BlcmF0aW9uOjpHbG9iYWxQcm9wZXJ0eVB1dDsKQEAgLTM0Nyw3ICszNDcs
NyBAQCB0ZW1wbGF0ZSA8SlNTY29wZTo6TG9va3VwTW9kZSBtb2RlLCBKU1NjCiAgICAgICAgICAg
ICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAKICAgICAgICAgICAgICAgICAgICAgaWYgKHB1dFRv
QmFzZU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2Nr
ZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9raW5kID0gZW50cnkuaXNSZWFkT25seSgpID8gUHV0
VG9CYXNlT3BlcmF0aW9uOjpSZWFkb25seSA6IFB1dFRvQmFzZU9wZXJhdGlvbjo6VmFyaWFibGVQ
dXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fc3RydWN0
dXJlLnNldChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+YWN0aXZhdGlvblN0
cnVjdHVyZSgpKTsKQEAgLTYxMSw3ICs2MTEsNyBAQCB2b2lkIEpTU2NvcGU6OnJlc29sdmVQdXQo
Q2FsbEZyYW1lKiBjYWxsCiAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VPYmplY3QpCiAgICAg
ICAgIHJldHVybjsKICAgICBBU1NFUlQoIWJhc2VPYmplY3QtPmhhc0lubGluZVN0b3JhZ2UoKSk7
Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1f
bG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygp
LT5tX2xvY2spOwogICAgIAogICAgIG9wZXJhdGlvbi0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFt
ZS0+dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGJhc2VP
YmplY3QtPnN0cnVjdHVyZSgpKTsKICAgICBzZXRQdXRQcm9wZXJ0eUFjY2Vzc09mZnNldChvcGVy
YXRpb24sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0ODgwMSkKKysr
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MTMtMDQtMjAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBmb3Vy
dGhUaWVyOiB2YWx1ZSBwcm9maWxlcyBhbmQgYXJyYXkgcHJvZmlsZXMgc2hvdWxkIGJlIHRocmVh
ZC1zYWZlIGVub3VnaCB0byBiZSBhY2Nlc3NpYmxlIGluIGEgY29uY3VycmVudCBjb21waWxhdGlv
biB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExNDkwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgQWRkIGFiaWxpdHkgdG8gYWJzdHJhY3Qgd2hldGhlciBvciBub3QgdGhlIENvZGVC
bG9jayByZXF1aXJlcyBsb2NraW5nIGF0IGFsbCwKKyAgICAgICAgc2luY2Ugc29tZSBwbGF0Zm9y
bXMgbWF5IG5vdCBzdXBwb3J0IHRoZSBieXRlIHNwaW4tbG9ja2luZyBhbmQvb3IgbWF5IG5vdCB3
YW50CisgICAgICAgIHRvLCBpZiB0aGV5IHR1cm4gb2ZmIGNvbmN1cnJlbnQgSklULgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0J5dGVT
cGluTG9jay5oOgorICAgICAgICAqIHd0Zi9Ob0xvY2suaDogQWRkZWQuCisgICAgICAgIChXVEYp
OgorICAgICAgICAoTm9Mb2NrKToKKyAgICAgICAgKFdURjo6Tm9Mb2NrOjpsb2NrKToKKyAgICAg
ICAgKFdURjo6Tm9Mb2NrOjp1bmxvY2spOgorICAgICAgICAoV1RGOjpOb0xvY2s6OmlzSGVsZCk6
CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTMtMDQtMTcgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3VydGhUaWVyOiBhbGwgaW5saW5lIGNhY2hl
cyBzaG91bGQgdGhyZWFkLXNhZmUgZW5vdWdoIHRvIGFsbG93IGEgY29uY3VycmVudCBjb21waWxh
dGlvbiB0aHJlYWQgdG8gcmVhZCB0aGVtIHNhZmVseQpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw2ICsyMSw3
IEBACiAvKiBFbmQgUEJYQWdncmVnYXRlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJY
QnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5
MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAq
LzsgfTsKIAkJMEY5RDMzNjAxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1QjE2
NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNwcCAqLzsgfTsKIAkJMEY5RDMzNjEx
NjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZp
bGVQcmludFN0cmVhbS5oICovOyB9OwpAQCAtMzMxLDYgKzMzMiw3IEBACiAvKiBFbmQgUEJYQ29u
dGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBz
ZWN0aW9uICovCisJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTm9Mb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODcxMDU5
MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFJhd1BvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5
RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjlEMzM1QzE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50
U3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZpbGVQcmludFN0cmVh
bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODAyLDYgKzgwNCw3IEBACiAJCQkJ
QThBNDcyQ0QxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAogCQkJCUE4
QTQ3MkNFMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCiAJCQkJQThBNDcy
Q0YxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLywKKwkJCQkwRjBE
ODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8sCiAJCQkJQThBNDcyRDAxNTFBODI1
QjAwNDEyM0ZGIC8qIE5vbmNvcHlhYmxlLmggKi8sCiAJCQkJQThBNDcyRDExNTFBODI1QjAwNDEy
M0ZGIC8qIE5vbkNvcHlpbmdTb3J0LmggKi8sCiAJCQkJQThBNDcyRDIxNTFBODI1QjAwNDEyM0ZG
IC8qIE5vdEZvdW5kLmggKi8sCkBAIC0xMTczLDYgKzExNzYsNyBAQAogCQkJCTRGQ0YyN0UxMTYx
NzJFODYwMENCRjAzNyAvKiBNZW1vcnlJbnN0cnVtZW50YXRpb25TdHJpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTRGQ0I3MTBBMTYwQTFBMDcwMDg0MjVFQyAvKiBNZW1vcnlJbnN0cnVtZW50YXRp
b25WZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzMjJDQ0UxMTY1NjlBMTAwMDQ4NTJERCAv
KiBNZW1vcnlPYmplY3RJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBEODVCNDE3MjM0Q0Mx
MDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFQjE1MUE4MjVC
MDA0MTIzRkYgLyogTWVzc2FnZVF1ZXVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzNFRDE1
MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDczRUUxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJj
ZS9XVEYvd3RmL0J5dGVTcGluTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgog
I2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgogCiBuYW1lc3BhY2UgV1RGIHsKIApJbmRleDogU291cmNlL1dURi93dGYvTm9Mb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTm9Mb2NrLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV1RGL3d0Zi9Ob0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgTm9M
b2NrX2gKKyNkZWZpbmUgTm9Mb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIE5vTG9jayB7CitwdWJsaWM6CisgICAgdm9pZCBsb2NrKCkg
eyB9CisgICAgdm9pZCB1bmxvY2soKSB7IH0KKyAgICBib29sIGlzSGVsZCgpIHsgcmV0dXJuIGZh
bHNlOyB9Cit9OworCit0eXBlZGVmIExvY2tlcjxOb0xvY2s+IE5vTG9ja0xvY2tlcjsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Tm9Mb2NrOwordXNpbmcgV1RGOjpOb0xvY2tM
b2NrZXI7CisKKyNlbmRpZiAvLyBOb0xvY2tfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9u
IDE0ODgwMSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTgwOCw3ICs4MDgsMTUgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZiBDUFUoWDg2XzY0KSAmJiBQ
TEFURk9STShNQUMpCisvKiBDb25jdXJyZW50IEpJVCBvbmx5IHdvcmtzIG9uIDY0LWJpdCBwbGF0
Zm9ybXMgYmVjYXVzZSBpdCByZXF1aXJlcyB0aGF0CisgICB2YWx1ZXMgZ2V0IHN0b3JlZCB0byBh
dG9taWNhbGx5LiBUaGlzIGlzIHRyaXZpYWxseSB0cnVlIG9uIDY0LWJpdCBwbGF0Zm9ybXMsCisg
ICBidXQgbm90IHRydWUgYXQgYWxsIG9uIDMyLWJpdCBwbGF0Zm9ybXMgd2hlcmUgdmFsdWVzIGFy
ZSBjb21wb3NlZCBvZiB0d28KKyAgIHNlcGFyYXRlIHN1Yi12YWx1ZXMuICovCisjaWYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoREZHX0pJVCkgJiYgVVNFKEpTVkFMVUU2NCkKKyNkZWZpbmUgRU5B
QkxFX0NPTkNVUlJFTlRfSklUIDEKKyNlbmRpZgorCisjaWYgQ1BVKFg4Nl82NCkgJiYgUExBVEZP
Uk0oTUFDKSAmJiBFTkFCTEUoREZHX0pJVCkKICNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMQogI2Vu
ZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198954</attachid>
            <date>2013-04-20 20:51:15 -0700</date>
            <delta_ts>2013-04-20 21:38:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80701</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4ODAyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1OCBA
QAorMjAxMy0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IHZhbHVlIHByb2ZpbGVzIGFuZCBhcnJheSBwcm9maWxlcyBzaG91bGQgYmUg
dGhyZWFkLXNhZmUgZW5vdWdoIHRvIGJlIGFjY2Vzc2libGUgaW4gYSBjb25jdXJyZW50IGNvbXBp
bGF0aW9uIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE0OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBUaGlzIGludHJvZHVjZXMgdGhyZWFkIHNhZmV0eSB0byB2YWx1ZSBwcm9m
aWxlcywgYXJyYXkgcHJvZmlsZXMsIGFuZAorICAgICAgICBhcnJheSBhbGxvY2F0aW9uIHByb2Zp
bGVzLgorICAgICAgICAKKyAgICAgICAgV2UgYWxyZWFkeSBoYXZlIHRocmVlIHNlcGFyYXRlIG9w
ZXJhdGlvbnMgdGhhdCBoYXBwZW4gb24gcHJvZmlsZXM6CisgICAgICAgICgxKSB3cml0aW5nLCB3
aGljaCB0aGUgSklULCBMTEludCwgYW5kIE9TUiBleGl0IGRvOyAoMikgdXBkYXRpbmcsCisgICAg
ICAgIHdoaWNoIGhhcHBlbnMgZHVyaW5nIEdDLCBmcm9tIE9TUiBlbnRyeSBzbG93LXBhdGhzLCBh
bmQgaW4gdGhlIERGRzsKKyAgICAgICAgYW5kICgzKSByZWFkaW5nLCB3aGljaCBoYXBwZW5zIGlu
IHRoZSBERkcuIEZvciBleGFtcGxlLCB0aGUgSklUL0xMSW50CisgICAgICAgIGFuZCBPU1IgZXhp
dCB3cml0ZSB0byBWYWx1ZVByb2ZpbGU6Om1fYnVja2V0cywgd2hpY2ggZ2V0cyBzeW50aGVzaXpl
ZAorICAgICAgICBpbnRvIFZhbHVlUHJvZmlsZTo6bV9wcmVkaWN0aW9uIChhbmQgb3RoZXIgZmll
bGRzKSBkdXJpbmcgdXBkYXRlLCBhbmQKKyAgICAgICAgdGhlIGxhdHRlciBnZXRzIHJlYWQgYnkg
dGhlIERGRy4gTm90ZSB0aGF0ICgyKSBtdXN0IGFsc28gaGFwcGVuIGluCisgICAgICAgIHRoZSBE
Rkcgc2luY2Ugb25seSB0aGUgREZHIGtub3dzIHdoaWNoIGNvZGUgYmxvY2tzIGl0IHdpbGwgaW5s
aW5lLAorICAgICAgICBhbmQgdGhvc2UgYmxvY2tzJyBwcm9maWxlcyBtYXkgbm90IGhhdmUgb3Ro
ZXJ3aXNlIGJlZW4gdXBkYXRlZCB2aWEKKyAgICAgICAgYW55IG90aGVyIG1lY2hhbmlzbS4KKyAg
ICAgICAgCisgICAgICAgIEkgcmVmZXIgdG8gdGhlc2UgdGhyZWUgb3BlcmF0aW9ucyBhcyB3cml0
aW5nLCB1cGRhdGluZywgYW5kIHJlYWRpbmcuCisgICAgICAgIAorICAgICAgICBDb25zZXF1ZW50
bHksIGJvdGggcHJvZmlsZSB1cGRhdGluZyBhbmQgcHJvZmlsZSByZWFkaW5nIG1heSBoYXBwZW4K
KyAgICAgICAgYXN5bmNocm9ub3VzbHksIGlmIHRoZSBKSVQgaXMgYXN5bmNocm9ub3VzLgorICAg
ICAgICAKKyAgICAgICAgVGhlIGxvY2tpbmcgcHJvdG9jb2wgZm9yIHByb2ZpbGVzIHdvcmtzIGFz
IGZvbGxvd3M6CisgICAgICAgIAorICAgICAgICAtIFdyaXRpbmcgZG9lcyBub3QgcmVxdWlyZSBs
b2NraW5nLCBidXQgaXMgb25seSBhbGxvd2VkIG9uIHRoZSBtYWluCisgICAgICAgICAgdGhyZWFk
LiBXZSByZXF1aXJlIHRoYXQgdGhlc2UgZmllbGRzIGNhbiBiZSBzdG9yZWQgYXRvbWljYWxseSBi
eQorICAgICAgICAgIHRoZSBwcm9maWxpbmcgY29kZSwgZXZlbiB3aXRob3V0IGxvY2tzLiBGb3Ig
dmFsdWUgcHJvZmlsZXMsIHRoaXMKKyAgICAgICAgICBvbmx5IHdvcmtzIG9uIDY0LWJpdCBwbGF0
Zm9ybXMsIGN1cnJlbnRseS4gRm9yIGFycmF5IHByb2ZpbGVzLAorICAgICAgICAgIHdoaWNoIGNv
bnNpc3Qgb2YgbXVsdGlwbGUgc2VwYXJhdGUgZmllbGRzLCB0aGlzIG1lYW5zIHRoYXQgYW4KKyAg
ICAgICAgICBhc3luY2hyb25vdXMgdXBkYXRlIG9mIHRoZSBwcm9maWxlIG1heSBzZWUgc2xpZ2h0
IGluY29uc2lzdGVuY2llcworICAgICAgICAgIChsaWtlIGEgc3RydWN0dXJlIHRoYXQgZG9lc24n
dCBxdWl0ZSBtYXRjaCB0aGUgYXJyYXkgbW9kZXMgYml0cyksCisgICAgICAgICAgYnV0IHRoZXNl
IHNob3VsZCBiZSBoYXJtbGVzczogYXQgd29yc3QsIHRoZSBERkcgd2lsbCBzcGVjaWFsaXplCisg
ICAgICAgICAgdG9vIG11Y2ggYW5kIHdlJ2xsIGhhdmUgT1NSIGV4aXRzLiBOb3RlIHRoYXQgd3Jp
dGluZyB0byBhIHZhbHVlCisgICAgICAgICAgcHJvZmlsZSBvbmx5IGgKKyAgICAgICAgCisgICAg
ICAgIC0gVXBkYXRpbmcgYSB2YWx1ZSBwcm9maWxlIHJlcXVpcmVzIGhvbGRpbmcgYSBsb2NrLCBi
dXQgbXVzdCBhc3N1bWUKKyAgICAgICAgICB0aGF0IHRoZSBmaWVsZHMgd3JpdHRlbiBieSB0aGUg
cHJvZmlsaW5nIGNvZGUgaW4gSklUL0xMSW50IG1heQorICAgICAgICAgIGJlIHdyaXR0ZW4gdG8g
d2l0aG91dCBsb2NraW5nLgorICAgICAgICAKKyAgICAgICAgLSBSZWFkaW5nIGEgdmFsdWUgcHJv
ZmlsZSByZXF1aXJlcyBob2xkaW5nIGEgbG9jay4KKyAgICAgICAgCisgICAgICAgIFRoZSBvbmUg
bWFqb3IgZXhjZXB0aW9uIHRvIHRoZXNlIHJ1bGVzIGlzIHRoZSBBcnJheUFsbG9jYXRpb25Qcm9m
aWxlLAorICAgICAgICB3aGljaCByZXF1aXJlcyBubyBsb2NraW5nLiBXZSBkbyB0aGlzIGJlY2F1
c2UgaXQncyB1c2VkIHNvIG9mdGVuIGFuZAorICAgICAgICBpbiBwbGFjZXMgd2hlcmUgd2UgZG9u
J3QgbmVjZXNzYXJpbHkgaGF2ZSBhY2Nlc3MgdG8gdGhlIG93bmluZworICAgICAgICBDb2RlQmxv
Y2ssIHNvIGlmIHdlIGRpZCB3YW50IGl0IHRvIGJlIGxvY2tlZCBpdCB3b3VsZCBoYXZlIHRvIGhh
dmUKKyAgICAgICAgaXRzIG93biBsb2NrLiBBbHNvLCBJIGJlbGlldmUgdGhhdCBpdCBpcyBzb3Vu
ZCB0byBqdXN0IG1ha2UgdGhpcworICAgICAgICBwcm9maWxlIHJhY3kgYW5kIG5vdCB3b3JyeSBh
Ym91dCBsb2NraW5nIGF0IGFsbC4gQWxsIHRoYXQgd2FzIG5lZWRlZAorICAgICAgICB3ZXJlIHNv
bWUgY2hhbmdlcyB0byBlbnN1cmUgdGhhdCB3ZSBleHBsaWNpdGx5IHJlYWQgc29tZSByYWNlZC1v
dmVyCisgICAgICAgIGZpZWxkcyBvbmx5IG9uY2UuCisKKyAgICAgICAgVHdvIGFkZGl0aW9uYWwg
aW50ZXJlc3RpbmcgdGhpbmdzIGluIHRoaXMgY2hhbmdlOgorICAgICAgICAKKyAgICAgICAgLSBU
byBtYWtlIGl0IGVhc3kgdG8gc2VlIHdoaWNoIHByb2ZpbGUgbWV0aG9kcyByZXF1aXJlIGxvY2tp
bmcsIHRoZXkKKyAgICAgICAgICB0YWtlIGEgY29uc3QgQ29kZUJsb2NrTG9jayYgYXMgYW4gYXJn
dW1lbnQuIEkgc2F3IHRoaXMgaWRpb20gZm9yCisgICAgICAgICAgaWRlbnRpZnlpbmcgd2hpY2gg
bWV0aG9kcyByZXF1aXJlIHdoaWNoIGxvY2tzIHRvIGJlIGhlbGQgYmVpbmcgdXNlZAorICAgICAg
ICAgIGluIExMVk0sIGFuZCBJIHF1aXRlIGxpa2UgaXQuCisgICAgICAgIAorICAgICAgICAtIExh
enkgb3BlcmFuZCB2YWx1ZSBwcm9maWxlcywgd2hpY2ggYXJlIGNyZWF0ZWQgbGF6aWx5IGFuZCBh
dCBhbnkKKyAgICAgICAgICB0aW1lLCByZXF1aXJlIHRoZSBDb2RlQmxvY2tMb2NrIHRvIGJlIGhl
bGQgd2hlbiB0aGV5IGFyZSBiZWluZworICAgICAgICAgIGNyZWF0ZWQuIFdyaXRlcyB0byB0aGVt
IGFyZSBsb2NrbGVzcyBhbmQgbWFpbi10aHJlYWQtb25seSwgYnV0IGFzCisgICAgICAgICAgd2l0
aCBvdGhlciBwcm9maWxlcywgdXBkYXRlcyBhbmQgcmVhZHMgcmVxdWlyZSBsb2NraW5nLgorCisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBieXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlSW5kZXhpbmdUeXBlKToKKyAgICAgICAgKiBi
eXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmg6CisgICAgICAgIChKU0M6OkFycmF5QWxs
b2NhdGlvblByb2ZpbGU6OnNlbGVjdEluZGV4aW5nVHlwZSk6CisgICAgICAgICogYnl0ZWNvZGUv
QXJyYXlQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpjb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24pOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OmJyaWVmRGVzY3Jp
cHRpb24pOgorICAgICAgICAqIGJ5dGVjb2RlL0FycmF5UHJvZmlsZS5oOgorICAgICAgICAoQXJy
YXlQcm9maWxlKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpleHBlY3RlZFN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmlsZTo6c3RydWN0dXJlSXNQb2x5bW9ycGhpYyk6
CisgICAgICAgIChKU0M6OkFycmF5UHJvZmlsZTo6aGFzRGVmaW5pdGVTdHJ1Y3R1cmUpOgorICAg
ICAgICAoSlNDOjpBcnJheVByb2ZpbGU6Om9ic2VydmVkQXJyYXlNb2Rlcyk6CisgICAgICAgIChK
U0M6OkFycmF5UHJvZmlsZTo6bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKToKKyAgICAgICAg
KEpTQzo6QXJyYXlQcm9maWxlOjptYXlTdG9yZVRvSG9sZSk6CisgICAgICAgIChKU0M6OkFycmF5
UHJvZmlsZTo6b3V0T2ZCb3VuZHMpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OnVzZXNP
cmlnaW5hbEFycmF5U3RydWN0dXJlcyk6CisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcik6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpk
dW1wVmFsdWVQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXBBcnJheVBy
b2ZpbGluZyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxsUHJlZGljdGlvbnNB
bmRDb3VudExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJh
eVByZWRpY3Rpb25zKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ2hlY2tJ
ZlNob3VsZE9wdGltaXplTm93KToKKyAgICAgICAgKENvZGVCbG9jayk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrTG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQyk6CisgICAgICAgICog
Ynl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmNwcDoKKyAgICAgICAgKEpTQzo6Q29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9s
ZGVyOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6Q29tcHJlc3Nl
ZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjphZGQpOgorICAgICAgICAoSlNDOjpMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXIp
OgorICAgICAgICAoSlNDOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6fkxhenlPcGVy
YW5kVmFsdWVQcm9maWxlUGFyc2VyKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Okxh
enlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OnByZWRpY3Rpb24pOgorICAgICAgICAqIGJ5
dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmg6CisgICAgICAgIChDb21wcmVzc2VkTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIpOgorICAgICAgICAoTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVQYXJzZXIpOgorICAgICAgICAqIGJ5dGVjb2RlL01ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuY3BwOgorICAgICAgICAoSlNDOjpNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlOjpn
ZXRTcGVjRmFpbEJ1Y2tldCk6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6
CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5
dGVjb2RlL1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpSZXNvbHZlR2xv
YmFsU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9WYWx1ZVByb2ZpbGUu
aDoKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFzZTo6YnJpZWZEZXNjcmlwdGlvbik6Cisg
ICAgICAgIChWYWx1ZVByb2ZpbGVCYXNlKToKKyAgICAgICAgKEpTQzo6VmFsdWVQcm9maWxlQmFz
ZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHQXJyYXlNb2Rl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBcnJheU1vZGU6OmZyb21PYnNlcnZlZCk6CisgICAg
ICAgICogZGZnL0RGR0FycmF5TW9kZS5oOgorICAgICAgICAoQXJyYXlNb2RlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBcnJheU1vZGU6OndpdGhQcm9maWxlKToKKyAgICAgICAgKiBkZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmpl
Y3RMYXp5T3BlcmFuZFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Z2V0QXJyYXlNb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6Z2V0QXJyYXlNb2RlQW5kRW1pdENoZWNrcyk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAg
ICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6
OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2U6OnJ1bik6CisgICAgICAgICogaml0L0pJVElubGlu
ZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjaG9vc2VBcnJheU1vZGUpOgorICAgICAgICAqIGpp
dC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAg
IChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNU
SU9OKToKKyAgICAgICAgKEpTQzo6bGF6eUxpbmtGb3IpOgorICAgICAgICAqIGxsaW50L0xMSW50
U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNM
KToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnNldFVwQ2FsbCk6CisgICAgICAgICogcHJvZmlsZXIv
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OkJ5
dGVjb2RlU2VxdWVuY2U6OkJ5dGVjb2RlU2VxdWVuY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNT
Y29wZS5jcHA6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVDb250YWluaW5nU2NvcGVJ
bnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTU2NvcGU6OnJlc29sdmVQdXQpOgorCiAyMDEzLTA0
LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGll
cjogYWxsIGlubGluZSBjYWNoZXMgc2hvdWxkIHRocmVhZC1zYWZlIGVub3VnaCB0byBhbGxvdyBh
IGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkIHRvIHJlYWQgdGhlbSBzYWZlbHkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQAogCQkwRjBCODNCOTE0QkNGOTVGMDA4ODVC
NEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEI4M0I4MTRCQ0Y5NUIwMDg4NUI0RiAv
KiBDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMENENEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjBDRDRDNDE1RjZCNkJCMDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMzE1RjZCNkI1
MDAzMkYxQzAgLyogU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHAgKi87IH07CisJCTBGMEQ4NUIyMTcy
MzQ1NTQwMDMzODIxMCAvKiBDb2RlQmxvY2tMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMTE3MjM0NTUxMDAzMzgyMTAgLyogQ29kZUJs
b2NrTG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMEZDNDVBMTRCRDE1RjUwMEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRkM0NTgxNEJEMTVG
MTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFBy
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjEzOTEyNDE2NzcxQzMwMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmNwcCAqLzsgfTsKIAkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFBy
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxMzkxMjUxNjc3MUMzMDAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNv
ZGVTZXF1ZW5jZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC0xMDMxLDYgKzEwMzIsNyBAQAogCQkwRjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyog
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzAxNUYxQTYwNDAwMzJGMUMwIC8qIFB1dERpcmVj
dEluZGV4TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQdXREaXJlY3RJ
bmRleE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYwQ0Q0QzMxNUY2QjZC
NTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU3BhcnNlQXJyYXlWYWx1ZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMEQ4NUIxMTcyMzQ1NTEwMDMzODIxMCAvKiBDb2RlQmxvY2tMb2Nr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVCbG9ja0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEYwRkM0NTgxNEJEMTVGMTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExMSW50Q2FsbExpbmtJbmZvLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTM5MTI0MTY3NzFDMzAwMDlDQ0IwNyAvKiBQ
cm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcDsgcGF0aCA9IHByb2ZpbGVyL1By
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTM5MTI1MTY3NzFDMzAwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNl
Lmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwMzQsNiArMzAzNiw3IEBACiAJCQkJOTY5QTA3OTEwRUQx
RDNBRTAwRjFGNjgxIC8qIENvZGVCbG9jay5oICovLAogCQkJCTBGOEY5NDNEMTY2NzYzMkQwMEQ2
MTk3MSAvKiBDb2RlQmxvY2tIYXNoLmNwcCAqLywKIAkJCQkwRjhGOTQzRTE2Njc2MzJEMDBENjE5
NzEgLyogQ29kZUJsb2NrSGFzaC5oICovLAorCQkJCTBGMEQ4NUIxMTcyMzQ1NTEwMDMzODIxMCAv
KiBDb2RlQmxvY2tMb2NrLmggKi8sCiAJCQkJMEY5NkVCQjExNjY3NkVGNDAwOEJBREUzIC8qIENv
ZGVCbG9ja1dpdGhKSVRUeXBlLmggKi8sCiAJCQkJMEY4Rjk0NDUxNjY3NjRFRTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwICovLAogCQkJCTBGQkQ3RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2Rl
T3JpZ2luLmggKi8sCkBAIC0zMTMwLDYgKzMxMzMsNyBAQAogCQkJCTBGODMzNUI4MTYzOUMxRUEw
MDE0NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCN0YzOTUxNUVEOEU0NjAwRjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGMEQ4NUIyMTcyMzQ1NTQwMDMzODIxMCAvKiBDb2RlQmxvY2tM
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ1NTE1RDA3MDU3MDA2QTU5N0MgLyogQXJy
YXlQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZGNUNEMDBCMzQ0NjAg
LyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjFEMTY3QkFCRUUw
MDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5QWxsb2NhdGlvblByb2ZpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheUFs
bG9jYXRpb25Qcm9maWxlLmNwcAkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0FycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMiw5ICszMiwyNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogdm9pZCBBcnJheUFsbG9jYXRpb25Q
cm9maWxlOjp1cGRhdGVJbmRleGluZ1R5cGUoKQogewotICAgIGlmICghbV9sYXN0QXJyYXkpCisg
ICAgLy8gVGhpcyBpcyBhd2t3YXJkbHkgcmFjeSBidXQgdG90YWxseSBzb3VuZCBldmVuIHdoZW4g
ZXhlY3V0ZWQgY29uY3VycmVudGx5LiBUaGUKKyAgICAvLyB3b3JzdCBjYXNlcyBnbyBzb21ldGhp
bmcgbGlrZSB0aGlzOgorICAgIC8vCisgICAgLy8gLSBUd28gdGhyZWFkcyByYWNlIHRvIGV4ZWN1
dGUgdGhpcyBjb2RlOyBvbmUgb2YgdGhlbSBzdWNjZWVkcyBpbiB1cGRhdGluZyB0aGUKKyAgICAv
LyAgIG1fY3VycmVudEluZGV4aW5nVHlwZSBhbmQgdGhlIG90aGVyIGVpdGhlciB1cGRhdGVzIGl0
IGFnYWluLCBvciBzZWVzIGEgbnVsbAorICAgIC8vICAgbV9sYXN0QXJyYXk7IGlmIGl0IHVwZGF0
ZXMgaXQgYWdhaW4gdGhlbiBhdCB3b3JzdCBpdCB3aWxsIGNhdXNlIHRoZSBwcm9maWxlCisgICAg
Ly8gICB0byAiZm9yZ2V0IiBzb21lIGFycmF5LiBUaGF0J3Mgc3RpbGwgc291bmQsIHNpbmNlIHdl
IGRvbid0IHByb21pc2UgdGhhdAorICAgIC8vICAgdGhpcyBwcm9maWxlIGlzIGEgcmVmbGVjdGlv
biBvZiBhbnkga2luZCBvZiB0cnV0aC4KKyAgICAvLworICAgIC8vIC0gQSBjb25jdXJyZW50IHRo
cmVhZCByZWFkcyBtX2xhc3RBcnJheSwgYnV0IHRoYXQgYXJyYXkgaXMgbm93IGRlYWQuIFdoaWxl
CisgICAgLy8gICBpdCdzIHBvc3NpYmxlIGZvciB0aGF0IGFycmF5IHRvIG5vIGxvbmdlciBiZSBy
ZWFjaGFibGUsIGl0IGNhbm5vdCBhY3R1YWxseQorICAgIC8vICAgYmUgZnJlZWQsIHNpbmNlIHdl
IHJlcXVpcmUgdGhlIEdDIHRvIHdhaXQgdW50aWwgYWxsIGNvbmN1cnJlbnQgSklUaW5nCisgICAg
Ly8gICBmaW5pc2hlcy4KKyAgICAKKyAgICBKU0FycmF5KiBsYXN0QXJyYXkgPSBtX2xhc3RBcnJh
eTsKKyAgICBpZiAoIWxhc3RBcnJheSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fY3VycmVudElu
ZGV4aW5nVHlwZSA9IGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlcyhtX2N1cnJlbnRJbmRl
eGluZ1R5cGUsIG1fbGFzdEFycmF5LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkpOworICAg
IG1fY3VycmVudEluZGV4aW5nVHlwZSA9IGxlYXN0VXBwZXJCb3VuZE9mSW5kZXhpbmdUeXBlcyht
X2N1cnJlbnRJbmRleGluZ1R5cGUsIGxhc3RBcnJheS0+c3RydWN0dXJlKCktPmluZGV4aW5nVHlw
ZSgpKTsKICAgICBtX2xhc3RBcnJheSA9IDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5QWxsb2NhdGlvblByb2ZpbGUuaAkocmV2
aXNpb24gMTQ4ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5QWxs
b2NhdGlvblByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDEsNyArNDEsOCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgSW5kZXhpbmdUeXBlIHNlbGVjdEluZGV4aW5nVHlwZSgpCiAgICAgewotICAgICAg
ICBpZiAobV9sYXN0QXJyYXkgJiYgVU5MSUtFTFkobV9sYXN0QXJyYXktPnN0cnVjdHVyZSgpLT5p
bmRleGluZ1R5cGUoKSAhPSBtX2N1cnJlbnRJbmRleGluZ1R5cGUpKQorICAgICAgICBKU0FycmF5
KiBsYXN0QXJyYXkgPSBtX2xhc3RBcnJheTsKKyAgICAgICAgaWYgKGxhc3RBcnJheSAmJiBVTkxJ
S0VMWShsYXN0QXJyYXktPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSAhPSBtX2N1cnJlbnRJ
bmRleGluZ1R5cGUpKQogICAgICAgICAgICAgdXBkYXRlSW5kZXhpbmdUeXBlKCk7CiAgICAgICAg
IHJldHVybiBtX2N1cnJlbnRJbmRleGluZ1R5cGU7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5jcHAJKHJldmlzaW9uIDE0ODgw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVByb2ZpbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC03NCwxNCArNzQsNyBAQCB2b2lkIGR1bXBBcnJheU1vZGVzKFByaW50U3Ry
ZWFtJiBvdXQsIEFyCiAgICAgICAgIG91dC5wcmludCgiQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZSIpOwogfQogCi1BcnJheU1vZGVzIEFycmF5UHJvZmlsZTo6dXBkYXRlZE9ic2VydmVkQXJy
YXlNb2RlcygpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpCi0gICAgICAg
IHJldHVybiBtX29ic2VydmVkQXJyYXlNb2RlcyB8IGFycmF5TW9kZUZyb21TdHJ1Y3R1cmUobV9s
YXN0U2VlblN0cnVjdHVyZSk7Ci0gICAgcmV0dXJuIG1fb2JzZXJ2ZWRBcnJheU1vZGVzOwotfQot
Ci12b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKENvZGVCbG9jayog
Y29kZUJsb2NrLCBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbikKK3ZvaWQgQXJyYXlQcm9m
aWxlOjpjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2Nr
ZXIsIENvZGVCbG9jayogY29kZUJsb2NrLCBPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbikK
IHsKICAgICBpZiAobV9sYXN0U2VlblN0cnVjdHVyZSkgewogICAgICAgICBtX29ic2VydmVkQXJy
YXlNb2RlcyB8PSBhcnJheU1vZGVGcm9tU3RydWN0dXJlKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpOwpA
QCAtODksNyArODIsNyBAQCB2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
CiAgICAgICAgICAgICBtX2xhc3RTZWVuU3RydWN0dXJlLT50eXBlSW5mbygpLmludGVyY2VwdHNH
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4RXZlbldoZW5MZW5ndGhJc05vdFplcm8oKTsKICAgICAg
ICAgaWYgKCFjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5pc09yaWdpbmFsQXJyYXlTdHJ1Y3R1
cmUobV9sYXN0U2VlblN0cnVjdHVyZSkpCiAgICAgICAgICAgICBtX3VzZXNPcmlnaW5hbEFycmF5
U3RydWN0dXJlcyA9IGZhbHNlOwotICAgICAgICBpZiAoIXN0cnVjdHVyZUlzUG9seW1vcnBoaWMo
KSkgeworICAgICAgICBpZiAoIXN0cnVjdHVyZUlzUG9seW1vcnBoaWMobG9ja2VyKSkgewogICAg
ICAgICAgICAgaWYgKCFtX2V4cGVjdGVkU3RydWN0dXJlKQogICAgICAgICAgICAgICAgIG1fZXhw
ZWN0ZWRTdHJ1Y3R1cmUgPSBtX2xhc3RTZWVuU3RydWN0dXJlOwogICAgICAgICAgICAgZWxzZSBp
ZiAobV9leHBlY3RlZFN0cnVjdHVyZSAhPSBtX2xhc3RTZWVuU3RydWN0dXJlKQpAQCAtMTAyLDE0
ICs5NSwxNCBAQCB2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0CiAgICAg
ICAgIG1fZXhwZWN0ZWRTdHJ1Y3R1cmUgPSBwb2x5bW9ycGhpY1N0cnVjdHVyZSgpOwogICAgIAog
ICAgIGlmIChvcGVyYXRpb24gPT0gQ29sbGVjdGlvbgotICAgICAgICAmJiBleHBlY3RlZFN0cnVj
dHVyZSgpCisgICAgICAgICYmIGV4cGVjdGVkU3RydWN0dXJlKGxvY2tlcikKICAgICAgICAgJiYg
IUhlYXA6OmlzTWFya2VkKG1fZXhwZWN0ZWRTdHJ1Y3R1cmUpKQogICAgICAgICBtX2V4cGVjdGVk
U3RydWN0dXJlID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmUoKTsKIH0KIAotQ1N0cmluZyBBcnJheVBy
b2ZpbGU6OmJyaWVmRGVzY3JpcHRpb24oQ29kZUJsb2NrKiBjb2RlQmxvY2spCitDU3RyaW5nIEFy
cmF5UHJvZmlsZTo6YnJpZWZEZXNjcmlwdGlvbihjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxvY2tl
ciwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0gICAgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGNvZGVCbG9jayk7CisgICAgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgY29kZUJs
b2NrKTsKICAgICAKICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAgCkBAIC0xMjIsNyAr
MTE1LDcgQEAgQ1N0cmluZyBBcnJheVByb2ZpbGU6OmJyaWVmRGVzY3JpcHRpb24oQwogICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgaWYgKHN0cnVjdHVyZUlzUG9s
eW1vcnBoaWMoKSkgeworICAgIGlmIChzdHJ1Y3R1cmVJc1BvbHltb3JwaGljKGxvY2tlcikpIHsK
ICAgICAgICAgaWYgKGhhc1ByaW50ZWQpCiAgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CiAg
ICAgICAgIG91dC5wcmludCgic3RydWN0ID0gVE9QIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmlsZS5oCShyZXZpc2lvbiAxNDg4MDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQXJyYXlQcm9maWxlX2gKICNkZWZpbmUgQXJyYXlQ
cm9maWxlX2gKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0xvY2suaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTE1MywzMiArMTU0LDMxIEBAIHB1YmxpYzoKICAgICAgICAgbV9sYXN0U2VlblN0cnVjdHVyZSA9
IHN0cnVjdHVyZTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBjb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oQ29kZUJsb2NrKiwgT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uKTsKKyAgICB2
b2lkIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBDb2Rl
QmxvY2sqLCBPcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb24pOwogICAgIAotICAgIFN0
cnVjdHVyZSogZXhwZWN0ZWRTdHJ1Y3R1cmUoKSBjb25zdAorICAgIFN0cnVjdHVyZSogZXhwZWN0
ZWRTdHJ1Y3R1cmUoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIpIGNvbnN0CiAgICAgewot
ICAgICAgICBpZiAoc3RydWN0dXJlSXNQb2x5bW9ycGhpYygpKQorICAgICAgICBpZiAoc3RydWN0
dXJlSXNQb2x5bW9ycGhpYyhsb2NrZXIpKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IHJldHVybiBtX2V4cGVjdGVkU3RydWN0dXJlOwogICAgIH0KLSAgICBib29sIHN0cnVjdHVyZUlz
UG9seW1vcnBoaWMoKSBjb25zdAorICAgIGJvb2wgc3RydWN0dXJlSXNQb2x5bW9ycGhpYyhjb25z
dCBDb2RlQmxvY2tMb2NrZXImKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fZXhwZWN0
ZWRTdHJ1Y3R1cmUgPT0gcG9seW1vcnBoaWNTdHJ1Y3R1cmUoKTsKICAgICB9Ci0gICAgYm9vbCBo
YXNEZWZpbml0ZVN0cnVjdHVyZSgpIGNvbnN0CisgICAgYm9vbCBoYXNEZWZpbml0ZVN0cnVjdHVy
ZShjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxvY2tlcikgY29uc3QKICAgICB7Ci0gICAgICAgIHJl
dHVybiAhc3RydWN0dXJlSXNQb2x5bW9ycGhpYygpICYmIG1fZXhwZWN0ZWRTdHJ1Y3R1cmU7Cisg
ICAgICAgIHJldHVybiAhc3RydWN0dXJlSXNQb2x5bW9ycGhpYyhsb2NrZXIpICYmIG1fZXhwZWN0
ZWRTdHJ1Y3R1cmU7CiAgICAgfQotICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWRBcnJheU1vZGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9vYnNlcnZlZEFycmF5TW9kZXM7IH0KLSAgICBBcnJheU1vZGVzIHVw
ZGF0ZWRPYnNlcnZlZEFycmF5TW9kZXMoKSBjb25zdDsgLy8gQ29tcHV0ZXMgdGhlIG9ic2VydmVk
IGFycmF5IG1vZGVzIHdpdGhvdXQgdXBkYXRpbmcgdGhlIHByb2ZpbGUuCi0gICAgYm9vbCBtYXlJ
bnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdCB7IHJldHVybiBtX21heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3NlczsgfQorICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWRBcnJheU1vZGVzKGNvbnN0
IENvZGVCbG9ja0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2ZWRBcnJheU1vZGVzOyB9
CisgICAgYm9vbCBtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoY29uc3QgQ29kZUJsb2NrTG9j
a2VyJikgY29uc3QgeyByZXR1cm4gbV9tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXM7IH0KICAg
ICAKLSAgICBib29sIG1heVN0b3JlVG9Ib2xlKCkgY29uc3QgeyByZXR1cm4gbV9tYXlTdG9yZVRv
SG9sZTsgfQotICAgIGJvb2wgb3V0T2ZCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX291dE9mQm91
bmRzOyB9CisgICAgYm9vbCBtYXlTdG9yZVRvSG9sZShjb25zdCBDb2RlQmxvY2tMb2NrZXImKSBj
b25zdCB7IHJldHVybiBtX21heVN0b3JlVG9Ib2xlOyB9CisgICAgYm9vbCBvdXRPZkJvdW5kcyhj
b25zdCBDb2RlQmxvY2tMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX291dE9mQm91bmRzOyB9CiAg
ICAgCi0gICAgYm9vbCB1c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMoKSBjb25zdCB7IHJldHVy
biBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlczsgfQorICAgIGJvb2wgdXNlc09yaWdpbmFs
QXJyYXlTdHJ1Y3R1cmVzKGNvbnN0IENvZGVCbG9ja0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVzOyB9CiAgICAgCi0gICAgQ1N0cmluZyBicmllZkRl
c2NyaXB0aW9uKENvZGVCbG9jayopOworICAgIENTdHJpbmcgYnJpZWZEZXNjcmlwdGlvbihjb25z
dCBDb2RlQmxvY2tMb2NrZXImLCBDb2RlQmxvY2sqKTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4ODAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxMaW5rU3RhdHVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBDYWxsTGlua1N0YXR1cyBDYWxsTGlua1N0
YXR1czo6Y29tcHV0ZUZyCiAKIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRl
Rm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKIHsK
LSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAg
ICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgCiAg
ICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYyLDkgKzY2MiwxMSBAQCB2b2lk
IENvZGVCbG9jazo6YmVnaW5EdW1wUHJvZmlsaW5nKFByaW50CiAKIHZvaWQgQ29kZUJsb2NrOjpk
dW1wVmFsdWVQcm9maWxpbmcoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBp
dCwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZykKIHsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgCiAgICAgKytpdDsKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIp
Ci0gICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LnByb2ZpbGUtPmJyaWVmRGVzY3JpcHRp
b24oKTsKKyAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gaXQtPnUucHJvZmlsZS0+YnJpZWZEZXNj
cmlwdGlvbihsb2NrZXIpOwogICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCiAgICAgICAg
IHJldHVybjsKICAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5n
KTsKQEAgLTY3Nyw5ICs2NzksMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGlu
ZyhQcmludAogCiB2b2lkIENvZGVCbG9jazo6ZHVtcEFycmF5UHJvZmlsaW5nKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcp
CiB7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAogICAgICsraXQ7
CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBp
dC0+dS5hcnJheVByb2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24odGhpcyk7CisgICAgQ1N0cmluZyBk
ZXNjcmlwdGlvbiA9IGl0LT51LmFycmF5UHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIs
IHRoaXMpOwogICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsK
ICAgICBiZWdpbkR1bXBQcm9maWxpbmcob3V0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKQEAgLTMx
NjgsNiArMzE3Miw4IEBAIEFycmF5UHJvZmlsZSogQ29kZUJsb2NrOjpnZXRPckFkZEFycmF5UHIK
IHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENvdW50TGl2ZW5lc3MoCiAg
ICAgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24sIHVuc2lnbmVkJiBudW1iZXJPZkxpdmVO
b25Bcmd1bWVudFZhbHVlUHJvZmlsZXMsIHVuc2lnbmVkJiBudW1iZXJPZlNhbXBsZXNJblByb2Zp
bGVzKQogeworICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1fbG9jayk7CisgICAgCiAgICAgbnVt
YmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzID0gMDsKICAgICBudW1iZXJPZlNhbXBs
ZXNJblByb2ZpbGVzID0gMDsgLy8gSWYgdGhpcyBkaXZpZGVkIGJ5IFZhbHVlUHJvZmlsZTo6bnVt
YmVyT2ZCdWNrZXRzIGVxdWFscyBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB0aGVuIHZhbHVlIHBy
b2ZpbGVzIGFyZSBmdWxsLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJl
ck9mVmFsdWVQcm9maWxlcygpOyArK2kpIHsKQEAgLTMxNzcsMTYgKzMxODMsMTYgQEAgdm9pZCBD
b2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQwogICAgICAgICAgICAgbnVtU2FtcGxl
cyA9IFZhbHVlUHJvZmlsZTo6bnVtYmVyT2ZCdWNrZXRzOyAvLyBXZSBkb24ndCB3YW50IHByb2Zp
bGVzIHRoYXQgYXJlIGV4dHJlbWVseSBob3QgdG8gYmUgZ2l2ZW4gbW9yZSB3ZWlnaHQuCiAgICAg
ICAgIG51bWJlck9mU2FtcGxlc0luUHJvZmlsZXMgKz0gbnVtU2FtcGxlczsKICAgICAgICAgaWYg
KHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPCAwKSB7Ci0gICAgICAgICAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24ob3BlcmF0aW9uKTsKKyAgICAgICAgICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG9wZXJhdGlvbik7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAocHJvZmlsZS0+bnVtYmVyT2ZTYW1w
bGVzKCkgfHwgcHJvZmlsZS0+bV9wcmVkaWN0aW9uICE9IFNwZWNOb25lKQogICAgICAgICAgICAg
bnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzKys7Ci0gICAgICAgIHByb2ZpbGUt
PmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihvcGVyYXRpb24pOworICAgICAgICBwcm9maWxlLT5j
b21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBvcGVyYXRpb24pOwogICAgIH0KICAgICAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICBtX2xhenlPcGVyYW5kVmFsdWVQcm9maWxlcy5jb21w
dXRlVXBkYXRlZFByZWRpY3Rpb25zKG9wZXJhdGlvbik7CisgICAgbV9sYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhsb2NrZXIsIG9wZXJhdGlvbik7CiAj
ZW5kaWYKIH0KIApAQCAtMzE5OCw4ICszMjA0LDEwIEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVB
bGxWYWx1ZVByb2ZpbGVQcmUKIAogdm9pZCBDb2RlQmxvY2s6OnVwZGF0ZUFsbEFycmF5UHJlZGlj
dGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7CisgICAgQ29kZUJsb2NrTG9j
ayBsb2NrZXIobV9sb2NrKTsKKyAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2FycmF5UHJv
ZmlsZXMuc2l6ZSgpOyBpLS07KQotICAgICAgICBtX2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKHRoaXMsIG9wZXJhdGlvbik7CisgICAgICAgIG1fYXJyYXlQcm9maWxl
c1tpXS5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCB0aGlzLCBvcGVyYXRpb24pOwog
ICAgIAogICAgIC8vIERvbid0IGNvdW50IHRoZXNlIGVpdGhlciwgZm9yIHNpbWlsYXIgcmVhc29u
cy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2FycmF5QWxsb2NhdGlvblByb2ZpbGVzLnNpemUo
KTsgaS0tOykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNh
bGxMaW5rSW5mby5oIgogI2luY2x1ZGUgIkNhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlT2Zmc2V0
LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja0xvY2su
aCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIKICNpbmNs
dWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgpAQCAtNjksNyArNzAsNiBAQAogI2luY2x1ZGUgIlVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKICNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCi0jaW5jbHVkZSA8d3RmL0J5dGVTcGluTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC00NzksOSArNDc5LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVPZmZzZXRd
LnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgICAgIH0KLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxl
UHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNv
bnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyLCBpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAgICAgICAgcmV0
dXJuIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IHVuc2lnbmVkIHRvdGFsTnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkKQEAgLTg4OSw3ICs4ODksNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25z
KE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbik7CiAgICAgICAgIHZvaWQgdXBkYXRl
QWxsUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uKTsKICNlbHNl
Ci0gICAgICAgIGJvb2wgc2hvdWxkT3B0aW1pemVOb3coKSB7IHJldHVybiBmYWxzZTsgfQorICAg
ICAgICBib29sIHVwZGF0ZUFsbFByZWRpY3Rpb25zQW5kQ2hlY2tJZlNob3VsZE9wdGltaXplTm93
KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdm9pZCB1cGRhdGVBbGxWYWx1ZVByb2ZpbGVQ
cmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzID0gTm9PcGVyYXRpb24pIHsgfQogICAgICAg
ICB2b2lkIHVwZGF0ZUFsbEFycmF5UHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5v
T3BlcmF0aW9uKSB7IH0KICAgICAgICAgdm9pZCB1cGRhdGVBbGxQcmVkaWN0aW9ucyhPcGVyYXRp
b25JblByb2dyZXNzID0gTm9PcGVyYXRpb24pIHsgfQpAQCAtOTI1LDkgKzkyNSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAvLyBBbm90aGVyIGV4Y2VwdGlvbiB0byB0aGUgcnVsZXMgaXMg
dGhhdCB0aGUgR0MgY2FuIGRvIHdoYXRldmVyIGl0IHdhbnRzCiAgICAgICAgIC8vIHdpdGhvdXQg
aG9sZGluZyBhbnkgbG9ja3MsIGJlY2F1c2UgdGhlIEdDIGlzIGd1YXJhbnRlZWQgdG8gd2FpdCB1
bnRpbCBhbnkKICAgICAgICAgLy8gY29uY3VycmVudCBjb21waWxhdGlvbiB0aHJlYWRzIGZpbmlz
aCB3aGF0IHRoZXkncmUgZG9pbmcuCi0gICAgICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrIExvY2s7
Ci0gICAgICAgIHR5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgTG9ja2VyOwotICAgICAgICBMb2NrIG1f
bG9jazsKKyAgICAgICAgQ29kZUJsb2NrTG9jayBtX2xvY2s7CiAKICAgICBwcm90ZWN0ZWQ6CiAj
aWYgRU5BQkxFKEpJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2tMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9ja0xvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2tMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIENv
ZGVCbG9ja0xvY2tfaAorI2RlZmluZSBDb2RlQmxvY2tMb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9C
eXRlU3BpbkxvY2suaD4KKyNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCisjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQordHlwZWRlZiBCeXRlU3BpbkxvY2sgQ29k
ZUJsb2NrTG9jazsKK3R5cGVkZWYgQnl0ZVNwaW5Mb2NrZXIgQ29kZUJsb2NrTG9ja2VyOworI2Vs
c2UKK3R5cGVkZWYgTm9Mb2NrIENvZGVCbG9ja0xvY2s7Cit0eXBlZGVmIE5vTG9ja0xvY2tlciBD
b2RlQmxvY2tMb2NrZXI7CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBDb2RlQmxvY2tMb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0x
MTIsNyArMTEyLDcgQEAgdm9pZCBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yQ2hhaW4oR2V0Qgog
CiBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBJZGVudGlmaWVyJiBpZGVudCkKIHsK
LSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAg
ICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgCiAg
ICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwogICAgIFVOVVNFRF9QQVJBTShieXRlY29k
ZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcAkocmV2aXNpb24gMTQ4ODAxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzUsMTcgKzM1LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogQ29tcHJl
c3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjpDb21wcmVzc2VkTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVIb2xkZXIoKSB7IH0KIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUhvbGRlcjo6fkNvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcigpIHsgfQog
Ci12b2lkIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbikKK3ZvaWQgQ29t
cHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjpjb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb25zKGNvbnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyLCBPcGVyYXRpb25JblByb2dyZXNz
IG9wZXJhdGlvbikKIHsKICAgICBpZiAoIW1fZGF0YSkKICAgICAgICAgcmV0dXJuOwogICAgIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RhdGEtPnNpemUoKTsgKytpKQotICAgICAg
ICBtX2RhdGEtPmF0KGkpLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihvcGVyYXRpb24pOworICAg
ICAgICBtX2RhdGEtPmF0KGkpLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG9wZXJh
dGlvbik7CiB9CiAKIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBDb21wcmVzc2VkTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVIb2xkZXI6OmFkZCgKLSAgICBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSYga2V5KQorICAgIGNvbnN0IENvZGVCbG9ja0xvY2tlciYsIGNvbnN0IExhenlPcGVy
YW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpCiB7CiAgICAgaWYgKCFtX2RhdGEpCiAgICAgICAgIG1f
ZGF0YSA9IGFkb3B0UHRyKG5ldyBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZTo6TGlzdCgpKTsKQEAg
LTYwLDIwICs2MCwyMiBAQCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogQ29tcHJlc3NlZExhenlP
CiAgICAgcmV0dXJuICZtX2RhdGEtPmxhc3QoKTsKIH0KIAotTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVQYXJzZXI6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKAotICAgIENvbXByZXNzZWRM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlciYgaG9sZGVyKQotICAgIDogbV9ob2xkZXIoaG9s
ZGVyKQorTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OkxhenlPcGVyYW5kVmFsdWVQcm9m
aWxlUGFyc2VyKCkgeyB9CitMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6fkxhenlPcGVy
YW5kVmFsdWVQcm9maWxlUGFyc2VyKCkgeyB9CisKK3ZvaWQgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGVQYXJzZXI6OmluaXRpYWxpemUoCisgICAgY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgQ29tcHJl
c3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBob2xkZXIpCiB7Ci0gICAgaWYgKCFt
X2hvbGRlci5tX2RhdGEpCisgICAgQVNTRVJUKG1fbWFwLmlzRW1wdHkoKSk7CisgICAgCisgICAg
aWYgKCFob2xkZXIubV9kYXRhKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGU6Okxpc3QmIGRhdGEgPSAqbV9ob2xkZXIubV9kYXRhOworICAgIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlOjpMaXN0JiBkYXRhID0gKmhvbGRlci5tX2RhdGE7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRhdGEuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fbWFwLmFk
ZChkYXRhW2ldLmtleSgpLCAmZGF0YVtpXSk7CiB9CiAKLUxhenlPcGVyYW5kVmFsdWVQcm9maWxl
UGFyc2VyOjp+TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXIoKSB7IH0KLQogTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUqIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpnZXRJZlByZXNl
bnQoCiAgICAgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIGtleSkgY29uc3QKIHsK
QEAgLTg3LDEzICs4OSwxMyBAQCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogTGF6eU9wZXJhbmRW
YWx1CiB9CiAKIFNwZWN1bGF0ZWRUeXBlIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpw
cmVkaWN0aW9uKAotICAgIGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpIGNv
bnN0CisgICAgY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIsIGNvbnN0IExhenlPcGVyYW5k
VmFsdWVQcm9maWxlS2V5JiBrZXkpIGNvbnN0CiB7CiAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUqIHByb2ZpbGUgPSBnZXRJZlByZXNlbnQoa2V5KTsKICAgICBpZiAoIXByb2ZpbGUpCiAgICAg
ICAgIHJldHVybiBTcGVjTm9uZTsKICAgICAKLSAgICByZXR1cm4gcHJvZmlsZS0+Y29tcHV0ZVVw
ZGF0ZWRQcmVkaWN0aW9uKCk7CisgICAgcmV0dXJuIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihsb2NrZXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5oCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogCisjaW5jbHVkZSAiQ29kZUJsb2NrTG9j
ay5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC0xNTUsOSArMTU2LDEwIEBAIHB1Ymxp
YzoKICAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIoKTsKICAgICB+
Q29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyKCk7CiAgICAgCi0gICAgdm9p
ZCBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MpOworICAgIHZv
aWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBPcGVy
YXRpb25JblByb2dyZXNzKTsKICAgICAKLSAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogYWRk
KGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpOworICAgIExhenlPcGVyYW5k
VmFsdWVQcm9maWxlKiBhZGQoCisgICAgICAgIGNvbnN0IENvZGVCbG9ja0xvY2tlciYsIGNvbnN0
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpOwogICAgIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI7CkBAIC0xNjcsMTYgKzE2
OSwxOCBAQCBwcml2YXRlOgogY2xhc3MgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXIgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKTsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigKLSAg
ICAgICAgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBob2xkZXIpOwor
ICAgIGV4cGxpY2l0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKCk7CiAgICAgfkxhenlP
cGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyKCk7CiAgICAgCisgICAgdm9pZCBpbml0aWFsaXplKAor
ICAgICAgICBjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGVIb2xkZXImIGhvbGRlcik7CisgICAgCiAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUqIGdldElmUHJlc2VudCgKICAgICAgICAgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkmIGtleSkgY29uc3Q7CiAgICAgCi0gICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbihjb25z
dCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KSBjb25zdDsKKyAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uKAorICAgICAgICBjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBjb25zdCBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KSBjb25zdDsKIHByaXZhdGU6Ci0gICAgQ29t
cHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBtX2hvbGRlcjsKICAgICBIYXNo
TWFwPExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5LCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSo+
IG1fbWFwOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhv
ZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAkocmV2aXNp
b24gMTQ4ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MiwxMCArNTIsMTQgQEAgRW5j
b2RlZEpTVmFsdWUqIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBybwogICAgIGNhc2UgUmVhZHk6CiAg
ICAgICAgIHJldHVybiB1LnByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KGluZGV4KTsKICAgICAgICAg
Ci0gICAgY2FzZSBMYXp5T3BlcmFuZDoKLSAgICAgICAgcmV0dXJuIHUubGF6eU9wZXJhbmQuY29k
ZUJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMoKS5hZGQoCi0gICAgICAgICAgICBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSgKLSAgICAgICAgICAgICAgICB1LmxhenlPcGVyYW5kLmJ5
dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpKS0+c3BlY0ZhaWxCdWNrZXQoaW5k
ZXgpOworICAgIGNhc2UgTGF6eU9wZXJhbmQ6IHsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVLZXkga2V5KHUubGF6eU9wZXJhbmQuYnl0ZWNvZGVPZmZzZXQsIHUubGF6eU9wZXJhbmQu
b3BlcmFuZCk7CisgICAgICAgIAorICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHUubGF6
eU9wZXJhbmQuY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZSogcHJvZmlsZSA9CisgICAgICAgICAgICB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkuYWRkKGxvY2tlciwga2V5KTsKKyAgICAgICAgcmV0dXJu
IHByb2ZpbGUtPnNwZWNGYWlsQnVja2V0KGluZGV4KTsKKyAgICB9CiAgICAgICAgIAogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwLDcgKzgwLDcgQEAgUHV0QnlJZFN0YXR1cyBQdXRC
eUlkU3RhdHVzOjpjb21wdXRlRnJvbQogCiBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBJZGVudGlmaWVyJiBpZGVudCkKIHsKLSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIocHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHByb2ZpbGVk
QmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgVU5VU0VEX1BBUkFNKHByb2ZpbGVkQmxvY2spOwog
ICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHJldmlz
aW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9SZXNvbHZlR2xv
YmFsU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDgsNyArNDgsNyBAQCBzdGF0aWMgUmVzb2x2
ZUdsb2JhbFN0YXR1cyBjb21wdXRlRm9yU3RyCiAKIFJlc29sdmVHbG9iYWxTdGF0dXMgUmVzb2x2
ZUdsb2JhbFN0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIGNvZGVCbG9jaywgaW50LCBSZXNv
bHZlT3BlcmF0aW9uKiBvcGVyYXRpb24sIElkZW50aWZpZXImIGlkZW50aWZpZXIpCiB7Ci0gICAg
Q29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBDb2RlQmxv
Y2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAKICAgICBBU1NFUlQob3Bl
cmF0aW9uLT5tX29wZXJhdGlvbiA9PSBSZXNvbHZlT3BlcmF0aW9uOjpHZXRBbmRSZXR1cm5HbG9i
YWxQcm9wZXJ0eSk7CiAgICAgaWYgKCFvcGVyYXRpb24tPm1fc3RydWN0dXJlKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24g
MTQ4ODAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUHJvZmlsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUo
VkFMVUVfUFJPRklMRVIpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2tMb2NrLmgiCiAjaW5jbHVkZSAi
SGVhcC5oIgogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJTcGVjdWxhdGVkVHlwZS5o
IgpAQCAtMTExLDkgKzExMiw5IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBDU3RyaW5nIGJyaWVmRGVzY3JpcHRpb24o
KQorICAgIENTdHJpbmcgYnJpZWZEZXNjcmlwdGlvbihjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxv
Y2tlcikKICAgICB7Ci0gICAgICAgIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAg
ICBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKICAgICAgICAgCiAgICAgICAgIFN0
cmluZ1ByaW50U3RyZWFtIG91dDsKICAgICAgICAgCkBAIC0xNDcsOCArMTQ4LDkgQEAgc3RydWN0
IFZhbHVlUHJvZmlsZUJhc2UgewogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIC8vIFVwZGF0
ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuCi0gICAgU3BlY3VsYXRl
ZFR5cGUgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3BlcmF0
aW9uID0gTm9PcGVyYXRpb24pCisgICAgLy8gVXBkYXRlcyB0aGUgcHJlZGljdGlvbiBhbmQgcmV0
dXJucyB0aGUgbmV3IG9uZS4gTmV2ZXIgY2FsbCB0aGlzIGZyb20gYW55IHRocmVhZAorICAgIC8v
IHRoYXQgaXNuJ3QgZXhlY3V0aW5nIHRoZSBjb2RlLgorICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBPcGVyYXRpb25JblBy
b2dyZXNzIG9wZXJhdGlvbiA9IE5vT3BlcmF0aW9uKQogICAgIHsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHRvdGFsTnVtYmVyT2ZCdWNrZXRzOyArK2kpIHsKICAgICAgICAgICAg
IEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUobV9idWNrZXRzW2ldKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHJldmlzaW9uIDE0ODgw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzQsMTQgKzM0LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAotQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSogcHJv
ZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIGJvb2wgbWFrZVNhZmUpCitBcnJheU1vZGUgQXJy
YXlNb2RlOjpmcm9tT2JzZXJ2ZWQoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIsIEFycmF5
UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFjdGlvbiBhY3Rpb24sIGJvb2wgbWFrZVNhZmUpCiB7
Ci0gICAgQXJyYXlNb2RlcyBvYnNlcnZlZCA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlNb2Rlcygp
OworICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWQgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMo
bG9ja2VyKTsKICAgICBzd2l0Y2ggKG9ic2VydmVkKSB7CiAgICAgY2FzZSAwOgogICAgICAgICBy
ZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpVbnByb2ZpbGVkKTsKICAgICBjYXNlIGFzQXJyYXlNb2Rl
cyhOb25BcnJheSk6Ci0gICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9m
aWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgaWYgKGFjdGlvbiA9
PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyhs
b2NrZXIpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6VW5kZWNpZGVkLCBB
cnJheTo6Tm9uQXJyYXksIEFycmF5OjpPdXRPZkJvdW5kcywgQXJyYXk6OkNvbnZlcnQpOwogICAg
ICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKIApA
QCAtNTEsNDkgKzUxLDQ5IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChBcnJh
eVAKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6R2VuZXJpYyk7CiAgICAgICAgIAog
ICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5KSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhV
bmRlY2lkZWQpOgotICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmls
ZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkpCisgICAgICAgIGlmIChhY3Rpb24gPT0g
QXJyYXk6OldyaXRlICYmICFwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMobG9j
a2VyKSkKICAgICAgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlVuZGVjaWRlZCwgQXJy
YXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpPdXRPZkJvdW5kcywgQXJyYXk6OkNvbnZlcnQpOwog
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsK
IAogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEludDMyKToKLSAgICAgICAgcmV0
dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMp
LndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9k
ZShBcnJheTo6SW50MzIsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxl
KGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5
V2l0aEludDMyKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFycmF5
OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAg
ICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFycmF5OjpBcnJheSwgQXJyYXk6
OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2Ug
YXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEludDMyKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhJ
bnQzMik6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkludDMyLCBBcnJheTo6UG9z
c2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsK
KyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6SW50MzIsIEFycmF5OjpQb3NzaWJseUFy
cmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7
CiAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhEb3VibGUpOgotICAgICAgICBy
ZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpEb3VibGUsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFz
SXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6RG91YmxlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJv
ZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhB
cnJheVdpdGhEb3VibGUpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpEb3VibGUs
IEFycmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZl
KTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6RG91YmxlLCBBcnJheTo6QXJyYXks
IEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhEb3VibGUpIHwgYXNBcnJheU1vZGVzKEFy
cmF5V2l0aERvdWJsZSk6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkRvdWJsZSwg
QXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBt
YWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkRvdWJsZSwgQXJyYXk6
OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUs
IG1ha2VTYWZlKTsKIAogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aENvbnRpZ3Vv
dXMpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6
Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7Cisg
ICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpOb25BcnJh
eSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwog
ICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMpOgotICAgICAgICByZXR1
cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lz
KS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9m
aWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5v
bkFycmF5V2l0aENvbnRpZ3VvdXMpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aENvbnRpZ3VvdXMp
OgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJheTo6UG9z
c2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsK
KyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6OlBvc3Np
Ymx5QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VT
YWZlKTsKIAogICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSk6
Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6Ok5v
bkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUpOworICAg
ICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJh
eSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwog
ICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgog
ICAgIGNhc2UgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5
TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJy
YXk6OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJu
IEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6Ok5vbkFycmF5LCBB
cnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAg
Y2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoQXJyYXlTdG9yYWdlKToKLSAgICAgICAgcmV0dXJu
IEFycmF5TW9kZShBcnJheTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lz
KS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFBy
b2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMo
QXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJy
YXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlT
dG9yYWdlKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5U3Rv
cmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFr
ZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJyYXlTdG9y
YWdlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2Zp
bGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0
b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJl
dHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXks
IEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJl
dHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXks
IEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAg
ICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJy
YXlNb2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoU2xvd1B1dEFycmF5U3Rv
cmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAg
ICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5OjpQ
b3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUp
OworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBB
cnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJv
ZmlsZSwgbWFrZVNhZmUpOwogCiAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKChvYnNlcnZlZCAm
IGFzQXJyYXlNb2RlcyhOb25BcnJheSkpICYmIHByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpKQorICAgICAgICBpZiAoKG9ic2VydmVkICYgYXNBcnJheU1vZGVzKE5vbkFycmF5
KSkgJiYgcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGxvY2tlcikpCiAgICAg
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsK
ICAgICAgICAgCiAgICAgICAgIEFycmF5OjpUeXBlIHR5cGU7CkBAIC0xMTksNyArMTE5LDcgQEAg
QXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKEFycmF5UAogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICBhcnJheUNsYXNzID0gQXJyYXk6OlBvc3NpYmx5QXJyYXk7CiAgICAgICAgIAot
ICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHR5cGUsIGFycmF5Q2xhc3MsIEFycmF5OjpDb252ZXJ0
KS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1v
ZGUodHlwZSwgYXJyYXlDbGFzcywgQXJyYXk6OkNvbnZlcnQpLndpdGhQcm9maWxlKGxvY2tlciwg
cHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBcnJheU1vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5oCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FycmF5TW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNTAsMjcgKzE1MCwy
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBBcnJheU1vZGUod29yZCk7CiAgICAgfQogICAg
IAotICAgIHN0YXRpYyBBcnJheU1vZGUgZnJvbU9ic2VydmVkKEFycmF5UHJvZmlsZSosIEFycmF5
OjpBY3Rpb24sIGJvb2wgbWFrZVNhZmUpOworICAgIHN0YXRpYyBBcnJheU1vZGUgZnJvbU9ic2Vy
dmVkKGNvbnN0IENvZGVCbG9ja0xvY2tlciYsIEFycmF5UHJvZmlsZSosIEFycmF5OjpBY3Rpb24s
IGJvb2wgbWFrZVNhZmUpOwogICAgIAogICAgIEFycmF5TW9kZSB3aXRoU3BlY3VsYXRpb24oQXJy
YXk6OlNwZWN1bGF0aW9uIHNwZWN1bGF0aW9uKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IEFycmF5TW9kZSh0eXBlKCksIGFycmF5Q2xhc3MoKSwgc3BlY3VsYXRpb24sIGNvbnZlcnNpb24o
KSk7CiAgICAgfQogICAgIAotICAgIEFycmF5TW9kZSB3aXRoUHJvZmlsZShBcnJheVByb2ZpbGUq
IHByb2ZpbGUsIGJvb2wgbWFrZVNhZmUpIGNvbnN0CisgICAgQXJyYXlNb2RlIHdpdGhQcm9maWxl
KGNvbnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIGJv
b2wgbWFrZVNhZmUpIGNvbnN0CiAgICAgewogICAgICAgICBBcnJheTo6U3BlY3VsYXRpb24gbXlT
cGVjdWxhdGlvbjsKICAgICAgICAgQXJyYXk6OkNsYXNzIG15QXJyYXlDbGFzczsKICAgICAgICAg
CiAgICAgICAgIGlmIChtYWtlU2FmZSkKICAgICAgICAgICAgIG15U3BlY3VsYXRpb24gPSBBcnJh
eTo6T3V0T2ZCb3VuZHM7Ci0gICAgICAgIGVsc2UgaWYgKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xl
KCkpCisgICAgICAgIGVsc2UgaWYgKHByb2ZpbGUtPm1heVN0b3JlVG9Ib2xlKGxvY2tlcikpCiAg
ICAgICAgICAgICBteVNwZWN1bGF0aW9uID0gQXJyYXk6OlRvSG9sZTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbXlTcGVjdWxhdGlvbiA9IEFycmF5OjpJbkJvdW5kczsKICAgICAgICAgCiAg
ICAgICAgIGlmIChpc0pTQXJyYXkoKSkgewotICAgICAgICAgICAgaWYgKHByb2ZpbGUtPnVzZXNP
cmlnaW5hbEFycmF5U3RydWN0dXJlcygpICYmIGJlbmVmaXRzRnJvbU9yaWdpbmFsQXJyYXkoKSkK
KyAgICAgICAgICAgIGlmIChwcm9maWxlLT51c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMobG9j
a2VyKSAmJiBiZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCiAgICAgICAgICAgICAgICAgbXlB
cnJheUNsYXNzID0gQXJyYXk6Ok9yaWdpbmFsQXJyYXk7CiAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgbXlBcnJheUNsYXNzID0gQXJyYXk6OkFycmF5OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE0
ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzEsOSArMjcxLDkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IEdldExvY2FsKTsKICAgICAgICAgQVNTRVJUKG5vZGUt
PmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCA9PSBtX2N1cnJlbnRJbmRleCk7Ci0gICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSAKLSAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3At
Pm1fbGF6eU9wZXJhbmRzLnByZWRpY3Rpb24oCi0gICAgICAgICAgICAgICAgTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGVLZXkobV9jdXJyZW50SW5kZXgsIG5vZGUtPmxvY2FsKCkpKTsKKyAgICAgICAg
Q29kZUJsb2NrTG9jayBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOworICAgICAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSBrZXkobV9jdXJyZW50
SW5kZXgsIG5vZGUtPmxvY2FsKCkpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gbV9pbmxpbmVTdGFja1RvcC0+bV9sYXp5T3BlcmFuZHMucHJlZGljdGlvbihsb2NrZXIsIGtl
eSk7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBkYXRhTG9nKCJMYXp5
IG9wZXJhbmQgW0AiLCBub2RlLT5pbmRleCgpLCAiLCBiYyMiLCBtX2N1cnJlbnRJbmRleCwgIiwg
ciIsIG5vZGUtPmxvY2FsKCksICJdIHByZWRpY3Rpb246ICIsIFNwZWN1bGF0aW9uRHVtcChwcmVk
aWN0aW9uKSwgIlxuIik7CiAjZW5kaWYKQEAgLTgxMCw3ICs4MTAsOCBAQCBwcml2YXRlOgogICAg
IAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0
KGJ5dGVjb2RlSW5kZXgpOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgcmV0dXJuIG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5
dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CiAgICAgfQogCiAgICAgU3BlY3Vs
YXRlZFR5cGUgZ2V0UHJlZGljdGlvbih1bnNpZ25lZCBieXRlY29kZUluZGV4KQpAQCAtODM4LDgg
KzgzOSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJh
eVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQogICAgIHsKLSAgICAgICAg
cHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrKTsKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKHByb2ZpbGUs
IGFjdGlvbiwgZmFsc2UpOworICAgICAgICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgIHByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jayk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChsb2NrZXIsIHBy
b2ZpbGUsIGFjdGlvbiwgZmFsc2UpOwogICAgIH0KICAgICAKICAgICBBcnJheU1vZGUgZ2V0QXJy
YXlNb2RlKEFycmF5UHJvZmlsZSogcHJvZmlsZSkKQEAgLTg0OSwyNCArODUxLDI2IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MoQXJyYXlQ
cm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbiwgTm9kZSogYmFzZSkKICAgICB7
Ci0gICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihtX2lubGluZVN0YWNr
VG9wLT5tX2NvZGVCbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgCisgICAgICAgIHBy
b2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jayk7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bnVtYmVyT2ZSYXJlQ2FzZVByb2ZpbGVzKCkpCiAgICAgICAgICAgICBkYXRhTG9nRigi
U2xvdyBjYXNlIHByb2ZpbGUgZm9yIGJjIyV1OiAldVxuIiwgbV9jdXJyZW50SW5kZXgsIG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIpOwotICAgICAgICBkYXRhTG9nRigiQXJy
YXkgcHJvZmlsZSBmb3IgYmMjJXU6ICVwJXMlcywgJXVcbiIsIG1fY3VycmVudEluZGV4LCBwcm9m
aWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpLCBwcm9maWxlLT5zdHJ1Y3R1cmVJc1BvbHltb3JwaGlj
KCkgPyAiIChwb2x5bW9ycGhpYykiIDogIiIsIHByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRB
Y2Nlc3NlcygpID8gIiAobWF5IGludGVyY2VwdCkiIDogIiIsIHByb2ZpbGUtPm9ic2VydmVkQXJy
YXlNb2RlcygpKTsKKyAgICAgICAgZGF0YUxvZ0YoIkFycmF5IHByb2ZpbGUgZm9yIGJjIyV1OiAl
cCVzJXMsICV1XG4iLCBtX2N1cnJlbnRJbmRleCwgcHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUo
KSwgcHJvZmlsZS0+c3RydWN0dXJlSXNQb2x5bW9ycGhpYyhsb2NrZXIpID8gIiAocG9seW1vcnBo
aWMpIiA6ICIiLCBwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMobG9ja2VyKSA/
ICIgKG1heSBpbnRlcmNlcHQpIiA6ICIiLCBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMobG9j
a2VyKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGJvb2wgbWFrZVNhZmUgPQogICAgICAg
ICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93
Q2FzZShtX2N1cnJlbnRJbmRleCkKLSAgICAgICAgICAgIHx8IHByb2ZpbGUtPm91dE9mQm91bmRz
KCk7CisgICAgICAgICAgICB8fCBwcm9maWxlLT5vdXRPZkJvdW5kcyhsb2NrZXIpOwogICAgICAg
ICAKLSAgICAgICAgQXJyYXlNb2RlIHJlc3VsdCA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKHBy
b2ZpbGUsIGFjdGlvbiwgbWFrZVNhZmUpOworICAgICAgICBBcnJheU1vZGUgcmVzdWx0ID0gQXJy
YXlNb2RlOjpmcm9tT2JzZXJ2ZWQobG9ja2VyLCBwcm9maWxlLCBhY3Rpb24sIG1ha2VTYWZlKTsK
ICAgICAgICAgCi0gICAgICAgIGlmIChwcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZSgpCisg
ICAgICAgIGlmIChwcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVyZShsb2NrZXIpCiAgICAgICAg
ICAgICAmJiByZXN1bHQuYmVuZWZpdHNGcm9tU3RydWN0dXJlQ2hlY2soKQogICAgICAgICAgICAg
JiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZENhY2hlKSkKLSAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUs
IE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNldChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVy
ZSgpKSksIGJhc2UpOworICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja1N0cnVjdHVyZSwgT3BJ
bmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKGxv
Y2tlcikpKSwgYmFzZSk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0K
QEAgLTE3NzksNyArMTc4Myw3IEBAIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShib29s
IHNraXAKIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlUmVzb2x2ZU9wZXJhdGlvbnMoU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiwgdW5zaWduZWQgaWRlbnRpZmllciwgUmVzb2x2ZU9wZXJhdGlv
bnMqIHJlc29sdmVPcGVyYXRpb25zLCBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZU9wZXJh
dGlvbiwgTm9kZSoqIGJhc2UsIE5vZGUqKiB2YWx1ZSkKIHsKICAgICB7Ci0gICAgICAgIENvZGVC
bG9jazo6TG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1f
bG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAKICAgICAgICAgaWYgKCFyZXNvbHZlT3Bl
cmF0aW9ucy0+bV9yZWFkeSkgewogICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQp
OwpAQCAtMjAxNSw5ICsyMDE5LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgY2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKICAgICAgICAgICAgIE5v
ZGUqIG9wMSA9IGdldFRoaXMoKTsKICAgICAgICAgICAgIGlmIChvcDEtPm9wKCkgIT0gQ29udmVy
dFRoaXMpIHsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBWYWx1
ZVByb2ZpbGUqIHByb2ZpbGUgPQogICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVu
dFByb2ZpbGluZ0luZGV4KTsKLSAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIltiYyMldV06IHByb2ZpbGUgJXA6ICIsIG1fY3VycmVudFByb2Zp
bGluZ0luZGV4LCBwcm9maWxlKTsKICAgICAgICAgICAgICAgICBwcm9maWxlLT5kdW1wKFdURjo6
ZGF0YUZpbGUoKSk7CkBAIC0yMTEzLDggKzIxMTgsOSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX2dldF9jYWxsZWU6IHsKKyAgICAgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUucHJvZmlsZTsKLSAg
ICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgICAgICAg
ICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAgICAgICAgICAg
ICBpZiAocHJvZmlsZS0+bV9zaW5nbGV0b25WYWx1ZUlzVG9wCiAgICAgICAgICAgICAgICAgfHwg
IXByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUKICAgICAgICAgICAgICAgICB8fCAhcHJvZmlsZS0+
bV9zaW5nbGV0b25WYWx1ZS5pc0NlbGwoKSkKQEAgLTMxNzcsNyArMzE4Myw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFB1dFRvQmFzZU9w
ZXJhdGlvbiogcHV0VG9CYXNlID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUucHV0VG9CYXNlT3Bl
cmF0aW9uOwogICAgICAgICAgICAgCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQ29k
ZUJsb2NrOjpMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoIXB1dFRvQmFzZS0+bV9yZWFkeSkgewogICAgICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7CkBAIC0zNDkzLDExICszNDk5LDE1IEBAIEJ5
dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAsIG1fZXhpdFByb2Zp
bGUocHJvZmlsZWRCbG9jay0+ZXhpdFByb2ZpbGUoKSkKICAgICAsIG1fY2FsbHNpdGVCbG9ja0hl
YWQoY2FsbHNpdGVCbG9ja0hlYWQpCiAgICAgLCBtX3JldHVyblZhbHVlKHJldHVyblZhbHVlVlIp
Ci0gICAgLCBtX2xhenlPcGVyYW5kcyhwcm9maWxlZEJsb2NrLT5sYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZXMoKSkKICAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQogICAgICwgbV9kaWRFYXJseVJldHVy
bihmYWxzZSkKICAgICAsIG1fY2FsbGVyKGJ5dGVDb2RlUGFyc2VyLT5tX2lubGluZVN0YWNrVG9w
KQogeworICAgIHsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX3Byb2ZpbGVkQmxv
Y2stPm1fbG9jayk7CisgICAgICAgIG1fbGF6eU9wZXJhbmRzLmluaXRpYWxpemUobG9ja2VyLCBt
X3Byb2ZpbGVkQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygpKTsKKyAgICB9CisgICAg
CiAgICAgbV9hcmd1bWVudFBvc2l0aW9ucy5yZXNpemUoYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOwogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7
ICsraSkgewogICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRp
b25zLmFwcGVuZChBcmd1bWVudFBvc2l0aW9uKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MTMsMTkgKzcxMywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgaWYgKGNvZGVCbG9jaygpLT5pZGVudGlmaWVyKG5vZGUtPmlkZW50aWZpZXJOdW1iZXIo
KSkgIT0gdm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBtX2dyYXBoLmJhc2VsaW5l
Q29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pOwogICAgICAgICAgICAgQXJyYXlQcm9maWxl
KiBhcnJheVByb2ZpbGUgPSAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLmJhc2VsaW5lQ29kZUJs
b2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pLT5nZXRBcnJheVByb2ZpbGUoCi0gICAgICAgICAgICAg
ICAgICAgIG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAg
cHJvZmlsZWRCbG9jay0+Z2V0QXJyYXlQcm9maWxlKG5vZGUtPmNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CiAgICAgICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gQXJyYXlNb2RlKEFycmF5
OjpTZWxlY3RVc2luZ1ByZWRpY3Rpb25zKTsKICAgICAgICAgICAgIGlmIChhcnJheVByb2ZpbGUp
IHsKLSAgICAgICAgICAgICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bihtX2dyYXBoLmJhc2VsaW5lQ29kZUJsb2NrRm9yKG5vZGUtPmNvZGVPcmlnaW4pKTsKLSAgICAg
ICAgICAgICAgICBhcnJheU1vZGUgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChhcnJheVByb2Zp
bGUsIEFycmF5OjpSZWFkLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJy
YXlNb2RlLnJlZmluZSgKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCktPnByZWRp
Y3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgICAgICBpZiAoYXJyYXlN
b2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVjdHVy
ZSgpKSB7CisgICAgICAgICAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihwcm9maWxlZEJs
b2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIGFycmF5UHJvZmlsZS0+Y29tcHV0ZVVwZGF0
ZWRQcmVkaWN0aW9uKGxvY2tlciwgcHJvZmlsZWRCbG9jayk7CisgICAgICAgICAgICAgICAgYXJy
YXlNb2RlID0gQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQobG9ja2VyLCBhcnJheVByb2ZpbGUsIEFy
cmF5OjpSZWFkLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gYXJyYXlNb2Rl
LnJlZmluZShub2RlLT5jaGlsZDEoKS0+cHJlZGljdGlvbigpLCBub2RlLT5wcmVkaWN0aW9uKCkp
OworICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuc3VwcG9ydHNMZW5ndGgoKSAmJiBhcnJh
eVByb2ZpbGUtPmhhc0RlZmluaXRlU3RydWN0dXJlKGxvY2tlcikpIHsKICAgICAgICAgICAgICAg
ICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgICAg
IG1faW5kZXhJbkJsb2NrLCBTcGVjTm9uZSwgQ2hlY2tTdHJ1Y3R1cmUsIG5vZGUtPmNvZGVPcmln
aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVT
ZXQoYXJyYXlQcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZSgpKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1cmVTZXQoYXJyYXlQcm9maWxlLT5leHBl
Y3RlZFN0cnVjdHVyZShsb2NrZXIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24u
Y3BwCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRQcmVwYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDkgKzM3LDEyIEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIHZvaWQgcHJlcGFyZUNvZGVPcmlnaW5Gb3JP
U1JFeGl0KEV4ZWNTdGF0ZSogZXhlYywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewogICAgIGZv
ciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkp
Ci0gICAgICAgICAgICAtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAgICAg
ICAgICAtPmppdENvbXBpbGUoZXhlYyk7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CisgICAgICAgIENv
ZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoCisg
ICAgICAgICAgICBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNh
bGwgOiBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgCisgICAgICAgIGNvZGVCbG9jay0+aml0
Q29tcGlsZShleGVjKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvbklu
amVjdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTggKzQ4LDI0IEBAIHB1Ymxp
YzoKICAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV91bmlmaWNhdGlvblN0YXRlID09IEdsb2JhbGx5
VW5pZmllZCk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCktPm51bVBhcmFt
ZXRlcnMoKSA+PSAxKTsKLSAgICAgICAgZm9yIChzaXplX3QgYXJnID0gMDsgYXJnIDwgc3RhdGlj
X2Nhc3Q8c2l6ZV90Pihjb2RlQmxvY2soKS0+bnVtUGFyYW1ldGVycygpKTsgKythcmcpIHsKLSAg
ICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IHByb2ZpbGVkQmxvY2soKS0+dmFsdWVQ
cm9maWxlRm9yQXJndW1lbnQoYXJnKTsKLSAgICAgICAgICAgIGlmICghcHJvZmlsZSkKLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgeworICAgICAgICAgICAgQ29kZUJsb2NrTG9j
a2VyIGxvY2tlcihwcm9maWxlZEJsb2NrKCktPm1fbG9jayk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7CisgICAgICAgICAgICAgICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gcHJvZmlsZWRCbG9jaygpLT52YWx1ZVByb2ZpbGVGb3JBcmd1
bWVudChhcmcpOworICAgICAgICAgICAgICAgIGlmICghcHJvZmlsZSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1
bWVudHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QocHJvZmlsZS0+Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKCkpOworICAgICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVu
dHNbYXJnXS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3QoCisgICAgICAgICAgICAgICAg
ICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpKTsKICAgICAgICAg
ICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgIGRhdGFMb2co
Ci0gICAgICAgICAgICAgICAgIkFyZ3VtZW50IFsiLCBhcmcsICJdIHByZWRpY3Rpb246ICIsCi0g
ICAgICAgICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fZ3JhcGgubV9hcmd1bWVudHNbYXJnXS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksICJcbiIpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2coCisgICAgICAgICAgICAgICAgICAgICJBcmd1bWVudCBbIiwgYXJnLCAiXSBw
cmVkaWN0aW9uOiAiLAorICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGlvbkR1bXAobV9ncmFw
aC5tX2FyZ3VtZW50c1thcmddLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSwK
KyAgICAgICAgICAgICAgICAgICAgIlxuIik7CiAjZW5kaWYKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBi
bG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmgJKHJldmlzaW9uIDE0ODgwMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC00MzMsOSArNDMzLDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBhcnJheVBy
b2ZpbGVTYXcoQXJyYXkKIAogaW5saW5lIEpJVEFycmF5TW9kZSBKSVQ6OmNob29zZUFycmF5TW9k
ZShBcnJheVByb2ZpbGUqIHByb2ZpbGUpCiB7Ci0jaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKSAg
ICAgICAgCi0gICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG1fY29kZUJsb2Nr
KTsKLSAgICBBcnJheU1vZGVzIGFycmF5TW9kZXMgPSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9k
ZXMoKTsKKyNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCisgICAgQ29kZUJsb2NrTG9ja2VyIGxv
Y2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyLCBtX2NvZGVCbG9jayk7CisgICAgQXJyYXlNb2RlcyBhcnJheU1vZGVz
ID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7CiAgICAgaWYgKGFycmF5UHJv
ZmlsZVNhdyhhcnJheU1vZGVzLCBEb3VibGVTaGFwZSkpCiAgICAgICAgIHJldHVybiBKSVREb3Vi
bGU7CiAgICAgaWYgKGFycmF5UHJvZmlsZVNhdyhhcnJheU1vZGVzLCBJbnQzMlNoYXBlKSkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxNDg4MDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODQ0LDcgKzg0NCw3IEBAIHZvaWQgcGVyZm9ybVBsYXRmb3JtU3BlY2lmaWNKSVRBc3Nl
cnRpb24KIAogTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hlUHV0QnlJRChDYWxsRnJh
bWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IFB1dFByb3BlcnR5U2xvdCYgc2xv
dCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBib29sIGRpcmVjdCkKIHsKLSAgICBDb2Rl
QmxvY2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgIENvZGVCbG9ja0xv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIC8vIFRoZSBpbnRlcnBy
ZXRlciBjaGVja3MgZm9yIHJlY3Vyc2lvbiBoZXJlOyBJIGRvIG5vdCBiZWxpZXZlIHRoaXMgY2Fu
IG9jY3VyIGluIENUSS4KIApAQCAtOTAwLDcgKzkwMCw3IEBAIE5FVkVSX0lOTElORSBzdGF0aWMg
dm9pZCB0cnlDYWNoZVB1dEJ5SUQKIAogTkVWRVJfSU5MSU5FIHN0YXRpYyB2b2lkIHRyeUNhY2hl
R2V0QnlJRChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8pCiB7Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKICAgICAKICAgICAvLyBGSVhNRTogV3JpdGUgYSB0ZXN0IHRoYXQgcHJvdmVzIHdlIG5l
ZWQgdG8gY2hlY2sgZm9yIHJlY3Vyc2lvbiBoZXJlIGp1c3QKICAgICAvLyBsaWtlIHRoZSBpbnRl
cnByZXRlciBkb2VzLCB0aGVuIGFkZCBhIGNoZWNrIGZvciByZWN1cnNpb24uCkBAIC0xNTkwLDcg
KzE1OTAsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7CiAKLSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIo
Y29kZUJsb2NrLT5tX2xvY2spOworICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwogICAgIAogICAgIGlmIChiYXNlVmFsdWUuaXNDZWxsKCkKICAgICAgICAgJiYg
c2xvdC5pc0NhY2hlYWJsZSgpCkBAIC0xNzA5LDcgKzE3MDksNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
cmVzdWx0KTsKICAgICB9CiAKLSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOworICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2sp
OwogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZVZhbHVlLmFzQ2VsbCgpLT5z
dHJ1Y3R1cmUoKTsKIApAQCAtMjE3Miw3ICsyMTcyLDcgQEAgaW5saW5lIHZvaWQqIGxhenlMaW5r
Rm9yKENhbGxGcmFtZSogY2FsbAogICAgICAgICAgICAgY29kZVB0ciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+Z2VuZXJhdGVkSklUQ29kZUZvcihraW5kKS0+YWRkcmVzc0ZvckNhbGwoKTsKICAgICB9
CiAKLSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jYWxsZXJGcmFtZSgp
LT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgaWYgKCFjYWxs
TGlua0luZm8tPnNlZW5PbmNlKCkpCiAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0U2VlbigpOwog
ICAgIGVsc2UKQEAgLTIyNDgsNyArMjI0OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQq
LCB2bV9sYXp5TGlua0MKICAgICAKICAgICBpZiAoc2hvdWxkTGluaykgewogICAgICAgICBBU1NF
UlQoY29kZVB0cik7Ci0gICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjYWxsZXJDb2Rl
QmxvY2stPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY2FsbGVyQ29k
ZUJsb2NrLT5tX2xvY2spOwogICAgICAgICBKSVQ6OmNvbXBpbGVDbG9zdXJlQ2FsbCh2bSwgY2Fs
bExpbmtJbmZvLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZUNvZGVCbG9jaywgc3RydWN0dXJlLCBl
eGVjdXRhYmxlLCBjb2RlUHRyKTsKICAgICAgICAgY2FsbExpbmtJbmZvLT5oYXNTZWVuQ2xvc3Vy
ZSA9IHRydWU7CiAgICAgfSBlbHNlCkBAIC0yMzk1LDcgKzIzOTUsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3Bl
OjpyZXNvbHZlKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgb3Bl
cmF0aW9ucyk7CiAgICAgCiAgICAgaWYgKHdpbGxSZWlmeSkgewotICAgICAgICBDb2RlQmxvY2s6
OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwog
ICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0yNDE1
LDcgKzI0MTUsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRfdG9fYmFzCiAg
ICAgSlNTY29wZTo6cmVzb2x2ZVB1dChjYWxsRnJhbWUsIGJhc2UsIHN0YWNrRnJhbWUuYXJnc1sx
XS5pZGVudGlmaWVyKCksIHZhbHVlLCBvcGVyYXRpb24pOwogICAgIAogICAgIGlmIChmaXJzdFRp
bWUpIHsKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJs
b2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9uLT5tX3JlYWR5ID0gdHJ1
ZTsKICAgICB9CiAKQEAgLTI3NTIsNyArMjc1Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVu
Y29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVC
YXNlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigp
LCBmYWxzZSwgb3BlcmF0aW9ucywgc3RhY2tGcmFtZS5hcmdzWzJdLnB1dFRvQmFzZU9wZXJhdGlv
bigpKTsKICAgICAKICAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9j
a2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7Cisg
ICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5tX2xvY2spOwogICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAg
ICB9CiAgICAgCkBAIC0yNzY5LDcgKzI3NjksNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfCiAgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2
ZUJhc2Uoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVy
KCksIHRydWUsIG9wZXJhdGlvbnMsIHN0YWNrRnJhbWUuYXJnc1syXS5wdXRUb0Jhc2VPcGVyYXRp
b24oKSkpIHsKICAgICAgICAgCiAgICAgICAgIGlmICh3aWxsUmVpZnkpIHsKLSAgICAgICAgICAg
IENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2Nr
KCktPm1fbG9jayk7CisgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKHN0YWNrRnJh
bWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgICAgIG9wZXJhdGlv
bnMtPm1fcmVhZHkgPSB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMzA3Niw3ICszMDc2
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIGJvb2wg
d2lsbFJlaWZ5ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0g
SlNTY29wZTo6cmVzb2x2ZVdpdGhCYXNlKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlk
ZW50aWZpZXIoKSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFdLmlu
dDMyKCldLCBvcGVyYXRpb25zLCBzdGFja0ZyYW1lLmFyZ3NbM10ucHV0VG9CYXNlT3BlcmF0aW9u
KCkpOwogICAgIGlmICh3aWxsUmVpZnkpIHsKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9j
a2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KICAg
ICBDSEVDS19GT1JfRVhDRVBUSU9OX0FUX0VORCgpOwpAQCAtMzA5Miw3ICszMDkyLDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIGJvb2wgd2lsbFJlaWZ5
ID0gb3BlcmF0aW9ucy0+aXNFbXB0eSgpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6
cmVzb2x2ZVdpdGhUaGlzKGNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIo
KSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldLCBv
cGVyYXRpb25zKTsKICAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9j
a2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7Cisg
ICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVC
bG9jaygpLT5tX2xvY2spOwogICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAg
ICB9CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTQ4ODAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODE1LDcgKzgxNSw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9yZXNvbHZlKQogICAgIH0KICAgICAKICAgICB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9j
a2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2Nr
TG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0
aW9ucy0+bV9yZWFkeSA9IHRydWU7CiAgICAgfQogICAgIApAQCAtODM3LDcgKzgzNyw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fYmEKICAgICB9CiAKICAgICB7Ci0g
ICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2Nr
KTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9s
b2NrKTsKICAgICAgICAgb3BlcmF0aW9uLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICB9CiAgICAgCkBA
IC04NzUsNyArODc1LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3Jlc29sdmVf
YgogICAgIH0KICAgICAKICAgICB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihl
eGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tl
cihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFk
eSA9IHRydWU7CiAgICAgfQogICAgIApAQCAtOTAxLDcgKzkwMSw3IEBAIExMSU5UX1NMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3cKICAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlv
bnMtPmlzRW1wdHkoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRo
QmFzZShleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRlbnRpZmllcihwY1szXS51Lm9wZXJhbmQp
LCAmTExJTlRfT1AoMSksIG9wZXJhdGlvbnMsIHBjWzVdLnUucHV0VG9CYXNlT3BlcmF0aW9uKTsK
ICAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihl
eGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tl
cihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFk
eSA9IHRydWU7CiAgICAgfQogICAgIExMSU5UX0NIRUNLX0VYQ0VQVElPTigpOwpAQCAtOTE3LDcg
KzkxNyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX3cKICAgICBi
b29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsKICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyhleGVjLCBleGVjLT5jb2RlQmxvY2soKS0+aWRl
bnRpZmllcihwY1szXS51Lm9wZXJhbmQpLCAmTExJTlRfT1AoMSksIG9wZXJhdGlvbnMpOwogICAg
IGlmICh3aWxsUmVpZnkpIHsKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGV4ZWMt
PmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGV4
ZWMtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0g
dHJ1ZTsKICAgICB9CiAgICAgTExJTlRfQ0hFQ0tfRVhDRVBUSU9OKCk7CkBAIC05NTcsNyArOTU3
LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICAK
ICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkKICAgICAg
ICAgICAgICYmICFzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkucHJvaGliaXRzUHJvcGVydHlDYWNoaW5n
KCkpIHsKLSAgICAgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7CisgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcGNbNF0udS5zdHJ1Y3R1cmUuc2V0KAog
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1
cmUpOwpAQCAtMTAyNCw3ICsxMDI0LDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV9pZAogICAgICAgICAgICAgJiYgYmFzZUNlbGwgPT0gc2xvdC5iYXNlKCkpIHsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xv
dDo6TmV3UHJvcGVydHkpIHsKLSAgICAgICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIENvZGVCbG9ja0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIHN0cnVjdHVyZS0+cHJldmlvdXNJRCgp
LT5vdXRPZkxpbmVDYXBhY2l0eSgpID09IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkg
ewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5wcmV2aW91c0lEKCktPnRy
YW5zaXRpb25XYXRjaHBvaW50U2V0SGFzQmVlbkludmFsaWRhdGVkKCkpOwpAQCAtMTQ2NSw3ICsx
NDY1LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgIGlm
ICghTExJTlRfQUxXQVlTX0FDQ0VTU19TTE9XICYmIGNhbGxMaW5rSW5mbykgewogICAgICAgICBF
eGVjU3RhdGUqIGV4ZWNDYWxsZXIgPSBleGVjQ2FsbGVlLT5jYWxsZXJGcmFtZSgpOwogCi0gICAg
ICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihleGVjQ2FsbGVyLT5jb2RlQmxvY2soKS0+bV9s
b2NrKTsKKyAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihleGVjQ2FsbGVyLT5jb2RlQmxv
Y2soKS0+bV9sb2NrKTsKICAgICAgICAgCiAgICAgICAgIGlmIChjYWxsTGlua0luZm8tPmlzT25M
aXN0KCkpCiAgICAgICAgICAgICBjYWxsTGlua0luZm8tPnJlbW92ZSgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNv
ZGVTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
MCw3ICs0MCw4IEBAIEJ5dGVjb2RlU2VxdWVuY2U6OkJ5dGVjb2RlU2VxdWVuY2UoQ29kZUIKICAg
ICAKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZBcmd1bWVudFZhbHVlUHJvZmlsZXMoKTsgKytpKSB7Ci0g
ICAgICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBjb2RlQmxvY2stPnZhbHVlUHJvZmlsZUZvckFy
Z3VtZW50KGkpLT5icmllZkRlc2NyaXB0aW9uKCk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0g
Y29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpKS0+YnJpZWZEZXNjcmlwdGlvbihs
b2NrZXIpOwogICAgICAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIG91dC5yZXNldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDE0ODgwMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgUmlnaHRz
IFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMDEsNyArMzAx
LDcgQEAgdGVtcGxhdGUgPEpTU2NvcGU6Okxvb2t1cE1vZGUgbW9kZSwgSlNTYwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtPmFwcGVuZChSZXNvbHZlT3BlcmF0aW9uOjpj
aGVja0ZvckR5bmFtaWNFbnRyaWVzQmVmb3JlR2xvYmFsU2NvcGUoKSk7CiAKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwdXRUb0Jhc2VPcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2so
KS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIg
bG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0
aW9uLT5tX2lzRHluYW1pYyA9IHJlcXVpcmVzRHluYW1pY0NoZWNrczsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVyYXRpb24tPm1fa2luZCA9IFB1dFRvQmFzZU9wZXJh
dGlvbjo6R2xvYmFsUHJvcGVydHlQdXQ7CkBAIC0zNDcsNyArMzQ3LDcgQEAgdGVtcGxhdGUgPEpT
U2NvcGU6Okxvb2t1cE1vZGUgbW9kZSwgSlNTYwogICAgICAgICAgICAgICAgICAgICAgICAgZ290
byBmYWlsOwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChwdXRUb0Jhc2VPcGVyYXRpb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjYWxsRnJh
bWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUJs
b2NrTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBwdXRUb0Jhc2VPcGVy
YXRpb24tPm1fa2luZCA9IGVudHJ5LmlzUmVhZE9ubHkoKSA/IFB1dFRvQmFzZU9wZXJhdGlvbjo6
UmVhZG9ubHkgOiBQdXRUb0Jhc2VPcGVyYXRpb246OlZhcmlhYmxlUHV0OwogICAgICAgICAgICAg
ICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX3N0cnVjdHVyZS5zZXQoY2FsbEZyYW1l
LT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbEZy
YW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmFjdGl2YXRpb25TdHJ1Y3R1cmUoKSk7CkBAIC02
MTEsNyArNjExLDcgQEAgdm9pZCBKU1Njb3BlOjpyZXNvbHZlUHV0KENhbGxGcmFtZSogY2FsbAog
ICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlT2JqZWN0KQogICAgICAgICByZXR1cm47CiAgICAg
QVNTRVJUKCFiYXNlT2JqZWN0LT5oYXNJbmxpbmVTdG9yYWdlKCkpOwotICAgIENvZGVCbG9jazo6
TG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgIENvZGVC
bG9ja0xvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAK
ICAgICBvcGVyYXRpb24tPm1fc3RydWN0dXJlLnNldChjYWxsRnJhbWUtPnZtKCksIGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPm93bmVyRXhlY3V0YWJsZSgpLCBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUo
KSk7CiAgICAgc2V0UHV0UHJvcGVydHlBY2Nlc3NPZmZzZXQob3BlcmF0aW9uLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEzLTA0LTIwICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgZm91cnRoVGllcjogdmFsdWUgcHJv
ZmlsZXMgYW5kIGFycmF5IHByb2ZpbGVzIHNob3VsZCBiZSB0aHJlYWQtc2FmZSBlbm91Z2ggdG8g
YmUgYWNjZXNzaWJsZSBpbiBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTQ5MDYKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZCBhYmls
aXR5IHRvIGFic3RyYWN0IHdoZXRoZXIgb3Igbm90IHRoZSBDb2RlQmxvY2sgcmVxdWlyZXMgbG9j
a2luZyBhdCBhbGwsCisgICAgICAgIHNpbmNlIHNvbWUgcGxhdGZvcm1zIG1heSBub3Qgc3VwcG9y
dCB0aGUgYnl0ZSBzcGluLWxvY2tpbmcgYW5kL29yIG1heSBub3Qgd2FudAorICAgICAgICB0bywg
aWYgdGhleSB0dXJuIG9mZiBjb25jdXJyZW50IEpJVC4KKworICAgICAgICAqIFdURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9CeXRlU3BpbkxvY2suaDoKKyAgICAg
ICAgKiB3dGYvTm9Mb2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKE5vTG9j
ayk6CisgICAgICAgIChXVEY6Ok5vTG9jazo6bG9jayk6CisgICAgICAgIChXVEY6Ok5vTG9jazo6
dW5sb2NrKToKKyAgICAgICAgKFdURjo6Tm9Mb2NrOjppc0hlbGQpOgorICAgICAgICAqIHd0Zi9Q
bGF0Zm9ybS5oOgorCiAyMDEzLTA0LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgZm91cnRoVGllcjogYWxsIGlubGluZSBjYWNoZXMgc2hvdWxkIHRocmVhZC1z
YWZlIGVub3VnaCB0byBhbGxvdyBhIGNvbmN1cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkIHRvIHJl
YWQgdGhlbSBzYWZlbHkKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTQ4ODAxKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjEsNiArMjEsNyBAQAogLyogRW5kIFBCWEFn
Z3JlZ2F0ZVRhcmdldCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9u
ICovCisJCTBGMEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMEQ4NUIzMTcyMzRDQjEwMDMzODIx
MCAvKiBOb0xvY2suaCAqLzsgfTsKIAkJMEY4NzEwNUExNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1Bv
aW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
ODcxMDU5MTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggKi87IH07CiAJCTBGOUQzMzYw
MTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5RDMzNUIxNjVEQkE3MzAwNUFEMzg3IC8q
IEZpbGVQcmludFN0cmVhbS5jcHAgKi87IH07CiAJCTBGOUQzMzYxMTY1REJBNzMwMDVBRDM4NyAv
KiBGaWxlUHJpbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOUQzMzVDMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCAq
LzsgfTsKQEAgLTMzMSw2ICszMzIsNyBAQAogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwRjBE
ODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5vTG9jay5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQg
LyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQb2lu
dGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzVCMTY1REJBNzMwMDVB
RDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRmlsZVByaW50U3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY5RDMzNUMxNjVEQkE3MzAwNUFEMzg3IC8qIEZpbGVQcmludFN0cmVhbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGaWxlUHJpbnRTdHJlYW0uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTgwMiw2ICs4MDQsNyBAQAogCQkJCUE4QTQ3MkNEMTUxQTgyNUIw
MDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywKIAkJCQlBOEE0NzJDRTE1MUE4MjVCMDA0
MTIzRkYgLyogTWV0YUFsbG9jYXRvci5oICovLAogCQkJCUE4QTQ3MkNGMTUxQTgyNUIwMDQxMjNG
RiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCisJCQkJMEYwRDg1QjMxNzIzNENCMTAwMzM4
MjEwIC8qIE5vTG9jay5oICovLAogCQkJCUE4QTQ3MkQwMTUxQTgyNUIwMDQxMjNGRiAvKiBOb25j
b3B5YWJsZS5oICovLAogCQkJCUE4QTQ3MkQxMTUxQTgyNUIwMDQxMjNGRiAvKiBOb25Db3B5aW5n
U29ydC5oICovLAogCQkJCUE4QTQ3MkQyMTUxQTgyNUIwMDQxMjNGRiAvKiBOb3RGb3VuZC5oICov
LApAQCAtMTE3Myw2ICsxMTc2LDcgQEAKIAkJCQk0RkNGMjdFMTE2MTcyRTg2MDBDQkYwMzcgLyog
TWVtb3J5SW5zdHJ1bWVudGF0aW9uU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk0RkNCNzEw
QTE2MEExQTA3MDA4NDI1RUMgLyogTWVtb3J5SW5zdHJ1bWVudGF0aW9uVmVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGMzIyQ0NFMTE2NTY5QTEwMDA0ODUyREQgLyogTWVtb3J5T2JqZWN0SW5m
by5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRUIxNTFBODI1QjAwNDEyM0ZGIC8qIE1lc3Nh
Z2VRdWV1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDczRUQxNTFBODI1QjAwNDEyM0ZGIC8q
IE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3M0VFMTUxQTgyNUIwMDQx
MjNGRiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0J5dGVTcGluTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0J5
dGVTcGluTG9jay5oCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlU3Bp
bkxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvTG9j
a2VyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KIAogbmFtZXNwYWNl
IFdURiB7CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL05vTG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL05vTG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvTm9M
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIE5vTG9ja19oCisjZGVmaW5lIE5v
TG9ja19oCisKKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBOb0xvY2sgeworcHVibGljOgorICAgIHZvaWQgbG9jaygpIHsgfQorICAgIHZvaWQgdW5s
b2NrKCkgeyB9CisgICAgYm9vbCBpc0hlbGQoKSB7IHJldHVybiBmYWxzZTsgfQorfTsKKwordHlw
ZWRlZiBMb2NrZXI8Tm9Mb2NrPiBOb0xvY2tMb2NrZXI7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
Cit1c2luZyBXVEY6Ok5vTG9jazsKK3VzaW5nIFdURjo6Tm9Mb2NrTG9ja2VyOworCisjZW5kaWYg
Ly8gTm9Mb2NrX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxNDg4MDEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC04MDgsNyArODA4LDE1IEBA
CiAjZW5kaWYKICNlbmRpZgogCi0jaWYgQ1BVKFg4Nl82NCkgJiYgUExBVEZPUk0oTUFDKQorLyog
Q29uY3VycmVudCBKSVQgb25seSB3b3JrcyBvbiA2NC1iaXQgcGxhdGZvcm1zIGJlY2F1c2UgaXQg
cmVxdWlyZXMgdGhhdAorICAgdmFsdWVzIGdldCBzdG9yZWQgdG8gYXRvbWljYWxseS4gVGhpcyBp
cyB0cml2aWFsbHkgdHJ1ZSBvbiA2NC1iaXQgcGxhdGZvcm1zLAorICAgYnV0IG5vdCB0cnVlIGF0
IGFsbCBvbiAzMi1iaXQgcGxhdGZvcm1zIHdoZXJlIHZhbHVlcyBhcmUgY29tcG9zZWQgb2YgdHdv
CisgICBzZXBhcmF0ZSBzdWItdmFsdWVzLiAqLworI2lmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KERGR19KSVQpICYmIFVTRShKU1ZBTFVFNjQpCisjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJ
VCAxCisjZW5kaWYKKworI2lmIENQVShYODZfNjQpICYmIFBMQVRGT1JNKE1BQykgJiYgRU5BQkxF
KERGR19KSVQpCiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDEKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>198955</attachid>
            <date>2013-04-20 21:38:23 -0700</date>
            <delta_ts>2013-04-20 22:01:25 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80561</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NyBA
QAorMjAxMy0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IHZhbHVlIHByb2ZpbGVzIGFuZCBhcnJheSBwcm9maWxlcyBzaG91bGQgYmUg
dGhyZWFkLXNhZmUgZW5vdWdoIHRvIGJlIGFjY2Vzc2libGUgaW4gYSBjb25jdXJyZW50IGNvbXBp
bGF0aW9uIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTE0OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAg
ICAgIAorICAgICAgICBUaGlzIGludHJvZHVjZXMgdGhyZWFkIHNhZmV0eSB0byB2YWx1ZSBwcm9m
aWxlcywgYXJyYXkgcHJvZmlsZXMsIGFuZAorICAgICAgICBhcnJheSBhbGxvY2F0aW9uIHByb2Zp
bGVzLgorICAgICAgICAKKyAgICAgICAgV2UgYWxyZWFkeSBoYXZlIHRocmVlIHNlcGFyYXRlIG9w
ZXJhdGlvbnMgdGhhdCBoYXBwZW4gb24gcHJvZmlsZXM6CisgICAgICAgICgxKSB3cml0aW5nLCB3
aGljaCB0aGUgSklULCBMTEludCwgYW5kIE9TUiBleGl0IGRvOyAoMikgdXBkYXRpbmcsCisgICAg
ICAgIHdoaWNoIGhhcHBlbnMgZHVyaW5nIEdDLCBmcm9tIE9TUiBlbnRyeSBzbG93LXBhdGhzLCBh
bmQgaW4gdGhlIERGRzsKKyAgICAgICAgYW5kICgzKSByZWFkaW5nLCB3aGljaCBoYXBwZW5zIGlu
IHRoZSBERkcuIEZvciBleGFtcGxlLCB0aGUgSklUL0xMSW50CisgICAgICAgIGFuZCBPU1IgZXhp
dCB3cml0ZSB0byBWYWx1ZVByb2ZpbGU6Om1fYnVja2V0cywgd2hpY2ggZ2V0cyBzeW50aGVzaXpl
ZAorICAgICAgICBpbnRvIFZhbHVlUHJvZmlsZTo6bV9wcmVkaWN0aW9uIChhbmQgb3RoZXIgZmll
bGRzKSBkdXJpbmcgdXBkYXRlLCBhbmQKKyAgICAgICAgdGhlIGxhdHRlciBnZXRzIHJlYWQgYnkg
dGhlIERGRy4gTm90ZSB0aGF0ICgyKSBtdXN0IGFsc28gaGFwcGVuIGluCisgICAgICAgIHRoZSBE
Rkcgc2luY2Ugb25seSB0aGUgREZHIGtub3dzIHdoaWNoIGNvZGUgYmxvY2tzIGl0IHdpbGwgaW5s
aW5lLAorICAgICAgICBhbmQgdGhvc2UgYmxvY2tzJyBwcm9maWxlcyBtYXkgbm90IGhhdmUgb3Ro
ZXJ3aXNlIGJlZW4gdXBkYXRlZCB2aWEKKyAgICAgICAgYW55IG90aGVyIG1lY2hhbmlzbS4KKyAg
ICAgICAgCisgICAgICAgIEkgcmVmZXIgdG8gdGhlc2UgdGhyZWUgb3BlcmF0aW9ucyBhcyB3cml0
aW5nLCB1cGRhdGluZywgYW5kIHJlYWRpbmcuCisgICAgICAgIAorICAgICAgICBDb25zZXF1ZW50
bHksIGJvdGggcHJvZmlsZSB1cGRhdGluZyBhbmQgcHJvZmlsZSByZWFkaW5nIG1heSBoYXBwZW4K
KyAgICAgICAgYXN5bmNocm9ub3VzbHksIGlmIHRoZSBKSVQgaXMgYXN5bmNocm9ub3VzLgorICAg
ICAgICAKKyAgICAgICAgVGhlIGxvY2tpbmcgcHJvdG9jb2wgZm9yIHByb2ZpbGVzIHdvcmtzIGFz
IGZvbGxvd3M6CisgICAgICAgIAorICAgICAgICAtIFdyaXRpbmcgZG9lcyBub3QgcmVxdWlyZSBs
b2NraW5nLCBidXQgaXMgb25seSBhbGxvd2VkIG9uIHRoZSBtYWluCisgICAgICAgICAgdGhyZWFk
LiBXZSByZXF1aXJlIHRoYXQgdGhlc2UgZmllbGRzIGNhbiBiZSBzdG9yZWQgYXRvbWljYWxseSBi
eQorICAgICAgICAgIHRoZSBwcm9maWxpbmcgY29kZSwgZXZlbiB3aXRob3V0IGxvY2tzLiBGb3Ig
dmFsdWUgcHJvZmlsZXMsIHRoaXMKKyAgICAgICAgICBvbmx5IHdvcmtzIG9uIDY0LWJpdCBwbGF0
Zm9ybXMsIGN1cnJlbnRseS4gRm9yIGFycmF5IHByb2ZpbGVzLAorICAgICAgICAgIHdoaWNoIGNv
bnNpc3Qgb2YgbXVsdGlwbGUgc2VwYXJhdGUgZmllbGRzLCB0aGlzIG1lYW5zIHRoYXQgYW4KKyAg
ICAgICAgICBhc3luY2hyb25vdXMgdXBkYXRlIG9mIHRoZSBwcm9maWxlIG1heSBzZWUgc2xpZ2h0
IGluY29uc2lzdGVuY2llcworICAgICAgICAgIChsaWtlIGEgc3RydWN0dXJlIHRoYXQgZG9lc24n
dCBxdWl0ZSBtYXRjaCB0aGUgYXJyYXkgbW9kZXMgYml0cyksCisgICAgICAgICAgYnV0IHRoZXNl
IHNob3VsZCBiZSBoYXJtbGVzczogYXQgd29yc3QsIHRoZSBERkcgd2lsbCBzcGVjaWFsaXplCisg
ICAgICAgICAgdG9vIG11Y2ggYW5kIHdlJ2xsIGhhdmUgT1NSIGV4aXRzLgorICAgICAgICAKKyAg
ICAgICAgLSBVcGRhdGluZyBhIHZhbHVlIHByb2ZpbGUgcmVxdWlyZXMgaG9sZGluZyBhIGxvY2ss
IGJ1dCBtdXN0IGFzc3VtZQorICAgICAgICAgIHRoYXQgdGhlIGZpZWxkcyB3cml0dGVuIGJ5IHRo
ZSBwcm9maWxpbmcgY29kZSBpbiBKSVQvTExJbnQgbWF5CisgICAgICAgICAgYmUgd3JpdHRlbiB0
byB3aXRob3V0IGxvY2tpbmcuCisgICAgICAgIAorICAgICAgICAtIFJlYWRpbmcgYSB2YWx1ZSBw
cm9maWxlIHJlcXVpcmVzIGhvbGRpbmcgYSBsb2NrLgorICAgICAgICAKKyAgICAgICAgVGhlIG9u
ZSBtYWpvciBleGNlcHRpb24gdG8gdGhlc2UgcnVsZXMgaXMgdGhlIEFycmF5QWxsb2NhdGlvblBy
b2ZpbGUsCisgICAgICAgIHdoaWNoIHJlcXVpcmVzIG5vIGxvY2tpbmcuIFdlIGRvIHRoaXMgYmVj
YXVzZSBpdCdzIHVzZWQgc28gb2Z0ZW4gYW5kCisgICAgICAgIGluIHBsYWNlcyB3aGVyZSB3ZSBk
b24ndCBuZWNlc3NhcmlseSBoYXZlIGFjY2VzcyB0byB0aGUgb3duaW5nCisgICAgICAgIENvZGVC
bG9jaywgc28gaWYgd2UgZGlkIHdhbnQgaXQgdG8gYmUgbG9ja2VkIGl0IHdvdWxkIGhhdmUgdG8g
aGF2ZQorICAgICAgICBpdHMgb3duIGxvY2suIEFsc28sIEkgYmVsaWV2ZSB0aGF0IGl0IGlzIHNv
dW5kIHRvIGp1c3QgbWFrZSB0aGlzCisgICAgICAgIHByb2ZpbGUgcmFjeSBhbmQgbm90IHdvcnJ5
IGFib3V0IGxvY2tpbmcgYXQgYWxsLiBBbGwgdGhhdCB3YXMgbmVlZGVkCisgICAgICAgIHdlcmUg
c29tZSBjaGFuZ2VzIHRvIGVuc3VyZSB0aGF0IHdlIGV4cGxpY2l0bHkgcmVhZCBzb21lIHJhY2Vk
LW92ZXIKKyAgICAgICAgZmllbGRzIG9ubHkgb25jZS4KKworICAgICAgICBUd28gYWRkaXRpb25h
bCBpbnRlcmVzdGluZyB0aGluZ3MgaW4gdGhpcyBjaGFuZ2U6CisgICAgICAgIAorICAgICAgICAt
IFRvIG1ha2UgaXQgZWFzeSB0byBzZWUgd2hpY2ggcHJvZmlsZSBtZXRob2RzIHJlcXVpcmUgbG9j
a2luZywgdGhleQorICAgICAgICAgIHRha2UgYSBjb25zdCBDb2RlQmxvY2tMb2NrZXImIGFzIGFu
IGFyZ3VtZW50LiBJIHNhdyB0aGlzIGlkaW9tIGZvcgorICAgICAgICAgIGlkZW50aWZ5aW5nIHdo
aWNoIG1ldGhvZHMgcmVxdWlyZSB3aGljaCBsb2NrcyB0byBiZSBoZWxkIGJlaW5nIHVzZWQKKyAg
ICAgICAgICBpbiBMTFZNLCBhbmQgSSBxdWl0ZSBsaWtlIGl0LgorICAgICAgICAKKyAgICAgICAg
LSBMYXp5IG9wZXJhbmQgdmFsdWUgcHJvZmlsZXMsIHdoaWNoIGFyZSBjcmVhdGVkIGxhemlseSBh
bmQgYXQgYW55CisgICAgICAgICAgdGltZSwgcmVxdWlyZSB0aGUgQ29kZUJsb2NrTG9jayB0byBi
ZSBoZWxkIHdoZW4gdGhleSBhcmUgYmVpbmcKKyAgICAgICAgICBjcmVhdGVkLiBXcml0ZXMgdG8g
dGhlbSBhcmUgbG9ja2xlc3MgYW5kIG1haW4tdGhyZWFkLW9ubHksIGJ1dCBhcworICAgICAgICAg
IHdpdGggb3RoZXIgcHJvZmlsZXMsIHVwZGF0ZXMgYW5kIHJlYWRzIHJlcXVpcmUgbG9ja2luZy4K
KworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogYnl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHA6CisgICAgICAgIChK
U0M6OkFycmF5QWxsb2NhdGlvblByb2ZpbGU6OnVwZGF0ZUluZGV4aW5nVHlwZSk6CisgICAgICAg
ICogYnl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oOgorICAgICAgICAoSlNDOjpBcnJh
eUFsbG9jYXRpb25Qcm9maWxlOjpzZWxlY3RJbmRleGluZ1R5cGUpOgorICAgICAgICAqIGJ5dGVj
b2RlL0FycmF5UHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmlsZTo6Y29tcHV0
ZVVwZGF0ZWRQcmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpicmllZkRl
c2NyaXB0aW9uKToKKyAgICAgICAgKiBieXRlY29kZS9BcnJheVByb2ZpbGUuaDoKKyAgICAgICAg
KEFycmF5UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkFycmF5UHJvZmlsZTo6ZXhwZWN0ZWRTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6OnN0cnVjdHVyZUlzUG9seW1vcnBo
aWMpOgorICAgICAgICAoSlNDOjpBcnJheVByb2ZpbGU6Omhhc0RlZmluaXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjpvYnNlcnZlZEFycmF5TW9kZXMpOgorICAgICAg
ICAoSlNDOjpBcnJheVByb2ZpbGU6Om1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyk6CisgICAg
ICAgIChKU0M6OkFycmF5UHJvZmlsZTo6bWF5U3RvcmVUb0hvbGUpOgorICAgICAgICAoSlNDOjpB
cnJheVByb2ZpbGU6Om91dE9mQm91bmRzKToKKyAgICAgICAgKEpTQzo6QXJyYXlQcm9maWxlOjp1
c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NhbGxMaW5r
U3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6ZHVtcFZhbHVlUHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQXJy
YXlQcm9maWxpbmcpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVwZGF0ZUFsbFByZWRpY3Rp
b25zQW5kQ291bnRMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dXBkYXRlQWxs
QXJyYXlQcmVkaWN0aW9ucyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0aW9uc0FuZENo
ZWNrSWZTaG91bGRPcHRpbWl6ZU5vdyk6CisgICAgICAgIChDb2RlQmxvY2spOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9ja0xvY2suaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHA6CisgICAgICAgIChKU0M6OkNvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUhvbGRlcjo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkNvbXBy
ZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUhvbGRlcjo6YWRkKToKKyAgICAgICAgKEpTQzo6
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFy
c2VyKToKKyAgICAgICAgKEpTQzo6TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXI6On5MYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcik6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlND
OjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChK
U0M6OkxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpwcmVkaWN0aW9uKToKKyAgICAgICAg
KiBieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oOgorICAgICAgICAoQ29tcHJlc3Nl
ZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyKToKKyAgICAgICAgKExhenlPcGVyYW5kVmFs
dWVQcm9maWxlUGFyc2VyKToKKyAgICAgICAgKiBieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZTo6Z2V0U3BlY0ZhaWxCdWNrZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMu
Y3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAg
KiBieXRlY29kZS9SZXNvbHZlR2xvYmFsU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UmVzb2x2
ZUdsb2JhbFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvVmFsdWVQcm9m
aWxlLmg6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmlsZUJhc2U6OmJyaWVmRGVzY3JpcHRpb24p
OgorICAgICAgICAoVmFsdWVQcm9maWxlQmFzZSk6CisgICAgICAgIChKU0M6OlZhbHVlUHJvZmls
ZUJhc2U6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbik6CisgICAgICAgICogZGZnL0RGR0FycmF5
TW9kZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQpOgor
ICAgICAgICAqIGRmZy9ERkdBcnJheU1vZGUuaDoKKyAgICAgICAgKEFycmF5TW9kZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6QXJyYXlNb2RlOjp3aXRoUHJvZmlsZSk6CisgICAgICAgICogZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aW5qZWN0TGF6eU9wZXJhbmRTcGVjdWxhdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNv
ZGVQYXJzZXI6OmdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmdldEFycmF5TW9kZUFuZEVtaXRDaGVja3MpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAg
ICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBo
YXNlOjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdCk6CisgICAg
ICAgICogZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvbkluamVjdGlvblBoYXNlOjpydW4pOgorICAgICAgICAqIGppdC9KSVRJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y2hvb3NlQXJyYXlNb2RlKToKKyAgICAgICAg
KiBqaXQvSklUU3R1YnMuY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAg
ICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9G
VU5DVElPTik6CisgICAgICAgIChKU0M6OmxhenlMaW5rRm9yKToKKyAgICAgICAgKiBsbGludC9M
TEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhf
REVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIHByb2Zp
bGVyL1Byb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHA6CisgICAgICAgIChKU0M6OlByb2ZpbGVy
OjpCeXRlY29kZVNlcXVlbmNlOjpCeXRlY29kZVNlcXVlbmNlKToKKyAgICAgICAgKiBydW50aW1l
L0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlQ29udGFpbmluZ1Nj
b3BlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU1Njb3BlOjpyZXNvbHZlUHV0KToKKwogMjAx
My0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIDMyLWJpdCBidWlsZCBmaXguCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzcz
LDcgQEAKIAkJMEYwQjgzQjkxNEJDRjk1RjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5
dGVjb2RlT2Zmc2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjBCODNCODE0QkNGOTVCMDA4ODVCNEYgLyogQ2FsbFJldHVybk9mZnNldFRvQnl0ZWNv
ZGVPZmZzZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBDRDRDMDE1RjFB
NjA0MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYwQ0Q0QzQxNUY2QjZCQjAwMzJGMUMwIC8q
IFNwYXJzZUFycmF5VmFsdWVNYXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYwQ0Q0QzMxNUY2QjZCNTAwMzJGMUMwIC8qIFNwYXJzZUFycmF5VmFs
dWVNYXAuY3BwICovOyB9OworCQkwRjBEODVCMjE3MjM0NTU0MDAzMzgyMTAgLyogQ29kZUJsb2Nr
TG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYw
RDg1QjExNzIzNDU1MTAwMzM4MjEwIC8qIENvZGVCbG9ja0xvY2suaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjBGQzQ1QTE0QkQxNUY1MDBCODEx
NTQgLyogTExJbnRDYWxsTGlua0luZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMEZDNDU4MTRCRDE1RjEwMEI4MTE1NCAvKiBMTEludENhbGxMaW5r
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGMTM5MTI5MTY3NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMzkxMjQx
Njc3MUMzMDAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgKi87IH07CiAJ
CTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5MTI1MTY3
NzFDMzAwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTAzMSw2ICsxMDMyLDcgQEAK
IAkJMEYwQjgzQjgxNEJDRjk1QjAwODg1QjRGIC8qIENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
T2Zmc2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxSZXR1cm5PZmZz
ZXRUb0J5dGVjb2RlT2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMENE
NEMwMTVGMUE2MDQwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHV0RGlyZWN0SW5kZXhNb2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGMENENEMzMTVGNkI2QjUwMDMyRjFDMCAvKiBTcGFyc2VBcnJheVZh
bHVlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNwYXJzZUFy
cmF5VmFsdWVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjBEODVCMTE3
MjM0NTUxMDAzMzgyMTAgLyogQ29kZUJsb2NrTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlQmxv
Y2tMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMEZDNDU4MTRCRDE1RjEw
MEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBMTEludENhbGxMaW5rSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjEzOTEyNDE2NzcxQzMwMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyQnl0ZWNvZGVT
ZXF1ZW5jZS5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzOTEyNTE2NzcxQzMwMDA5Q0NCMDcg
LyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmls
ZXJCeXRlY29kZVNlcXVlbmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zMDM0
LDYgKzMwMzYsNyBAQAogCQkJCTk2OUEwNzkxMEVEMUQzQUUwMEYxRjY4MSAvKiBDb2RlQmxvY2su
aCAqLywKIAkJCQkwRjhGOTQzRDE2Njc2MzJEMDBENjE5NzEgLyogQ29kZUJsb2NrSGFzaC5jcHAg
Ki8sCiAJCQkJMEY4Rjk0M0UxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVCbG9ja0hhc2guaCAqLywK
KwkJCQkwRjBEODVCMTE3MjM0NTUxMDAzMzgyMTAgLyogQ29kZUJsb2NrTG9jay5oICovLAogCQkJ
CTBGOTZFQkIxMTY2NzZFRjQwMDhCQURFMyAvKiBDb2RlQmxvY2tXaXRoSklUVHlwZS5oICovLAog
CQkJCTBGOEY5NDQ1MTY2NzY0RUUwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCAqLywKIAkJCQkw
RkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovLApAQCAtMzEzMCw2ICsz
MTMzLDcgQEAKIAkJCQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8q
IEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk1MTVFRDhFNDYw
MEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjBEODVC
MjE3MjM0NTU0MDAzMzgyMTAgLyogQ29kZUJsb2NrTG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2Mzk0NTUxNUQwNzA1NzAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAJKHJldmlz
aW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheUFsbG9j
YXRpb25Qcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzIsMjQgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKIHZvaWQgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTo6dXBkYXRlSW5kZXhpbmdUeXBl
KCkKIHsKLSAgICBpZiAoIW1fbGFzdEFycmF5KQorICAgIC8vIFRoaXMgaXMgYXdrd2FyZGx5IHJh
Y3kgYnV0IHRvdGFsbHkgc291bmQgZXZlbiB3aGVuIGV4ZWN1dGVkIGNvbmN1cnJlbnRseS4gVGhl
CisgICAgLy8gd29yc3QgY2FzZXMgZ28gc29tZXRoaW5nIGxpa2UgdGhpczoKKyAgICAvLworICAg
IC8vIC0gVHdvIHRocmVhZHMgcmFjZSB0byBleGVjdXRlIHRoaXMgY29kZTsgb25lIG9mIHRoZW0g
c3VjY2VlZHMgaW4gdXBkYXRpbmcgdGhlCisgICAgLy8gICBtX2N1cnJlbnRJbmRleGluZ1R5cGUg
YW5kIHRoZSBvdGhlciBlaXRoZXIgdXBkYXRlcyBpdCBhZ2Fpbiwgb3Igc2VlcyBhIG51bGwKKyAg
ICAvLyAgIG1fbGFzdEFycmF5OyBpZiBpdCB1cGRhdGVzIGl0IGFnYWluIHRoZW4gYXQgd29yc3Qg
aXQgd2lsbCBjYXVzZSB0aGUgcHJvZmlsZQorICAgIC8vICAgdG8gImZvcmdldCIgc29tZSBhcnJh
eS4gVGhhdCdzIHN0aWxsIHNvdW5kLCBzaW5jZSB3ZSBkb24ndCBwcm9taXNlIHRoYXQKKyAgICAv
LyAgIHRoaXMgcHJvZmlsZSBpcyBhIHJlZmxlY3Rpb24gb2YgYW55IGtpbmQgb2YgdHJ1dGguCisg
ICAgLy8KKyAgICAvLyAtIEEgY29uY3VycmVudCB0aHJlYWQgcmVhZHMgbV9sYXN0QXJyYXksIGJ1
dCB0aGF0IGFycmF5IGlzIG5vdyBkZWFkLiBXaGlsZQorICAgIC8vICAgaXQncyBwb3NzaWJsZSBm
b3IgdGhhdCBhcnJheSB0byBubyBsb25nZXIgYmUgcmVhY2hhYmxlLCBpdCBjYW5ub3QgYWN0dWFs
bHkKKyAgICAvLyAgIGJlIGZyZWVkLCBzaW5jZSB3ZSByZXF1aXJlIHRoZSBHQyB0byB3YWl0IHVu
dGlsIGFsbCBjb25jdXJyZW50IEpJVGluZworICAgIC8vICAgZmluaXNoZXMuCisgICAgCisgICAg
SlNBcnJheSogbGFzdEFycmF5ID0gbV9sYXN0QXJyYXk7CisgICAgaWYgKCFsYXN0QXJyYXkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBtX2N1cnJlbnRJbmRleGluZ1R5cGUgPSBsZWFzdFVwcGVyQm91
bmRPZkluZGV4aW5nVHlwZXMobV9jdXJyZW50SW5kZXhpbmdUeXBlLCBtX2xhc3RBcnJheS0+c3Ry
dWN0dXJlKCktPmluZGV4aW5nVHlwZSgpKTsKKyAgICBtX2N1cnJlbnRJbmRleGluZ1R5cGUgPSBs
ZWFzdFVwcGVyQm91bmRPZkluZGV4aW5nVHlwZXMobV9jdXJyZW50SW5kZXhpbmdUeXBlLCBsYXN0
QXJyYXktPnN0cnVjdHVyZSgpLT5pbmRleGluZ1R5cGUoKSk7CiAgICAgbV9sYXN0QXJyYXkgPSAw
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheUFsbG9jYXRpb25Qcm9maWxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTQxLDcgKzQxLDggQEAgcHVibGljOgogICAgIAogICAgIEluZGV4aW5nVHlwZSBzZWxl
Y3RJbmRleGluZ1R5cGUoKQogICAgIHsKLSAgICAgICAgaWYgKG1fbGFzdEFycmF5ICYmIFVOTElL
RUxZKG1fbGFzdEFycmF5LT5zdHJ1Y3R1cmUoKS0+aW5kZXhpbmdUeXBlKCkgIT0gbV9jdXJyZW50
SW5kZXhpbmdUeXBlKSkKKyAgICAgICAgSlNBcnJheSogbGFzdEFycmF5ID0gbV9sYXN0QXJyYXk7
CisgICAgICAgIGlmIChsYXN0QXJyYXkgJiYgVU5MSUtFTFkobGFzdEFycmF5LT5zdHJ1Y3R1cmUo
KS0+aW5kZXhpbmdUeXBlKCkgIT0gbV9jdXJyZW50SW5kZXhpbmdUeXBlKSkKICAgICAgICAgICAg
IHVwZGF0ZUluZGV4aW5nVHlwZSgpOwogICAgICAgICByZXR1cm4gbV9jdXJyZW50SW5kZXhpbmdU
eXBlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9B
cnJheVByb2ZpbGUuY3BwCShyZXZpc2lvbiAxNDg4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQXJyYXlQcm9maWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNzQsMTQgKzc0LDcg
QEAgdm9pZCBkdW1wQXJyYXlNb2RlcyhQcmludFN0cmVhbSYgb3V0LCBBcgogICAgICAgICBvdXQu
cHJpbnQoIkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UiKTsKIH0KIAotQXJyYXlNb2RlcyBB
cnJheVByb2ZpbGU6OnVwZGF0ZWRPYnNlcnZlZEFycmF5TW9kZXMoKSBjb25zdAotewotICAgIGlm
IChtX2xhc3RTZWVuU3RydWN0dXJlKQotICAgICAgICByZXR1cm4gbV9vYnNlcnZlZEFycmF5TW9k
ZXMgfCBhcnJheU1vZGVGcm9tU3RydWN0dXJlKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpOwotICAgIHJl
dHVybiBtX29ic2VydmVkQXJyYXlNb2RlczsKLX0KLQotdm9pZCBBcnJheVByb2ZpbGU6OmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihDb2RlQmxvY2sqIGNvZGVCbG9jaywgT3BlcmF0aW9uSW5Qcm9n
cmVzcyBvcGVyYXRpb24pCit2b2lkIEFycmF5UHJvZmlsZTo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGNvbnN0IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywg
T3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7CiAgICAgaWYgKG1fbGFzdFNlZW5TdHJ1
Y3R1cmUpIHsKICAgICAgICAgbV9vYnNlcnZlZEFycmF5TW9kZXMgfD0gYXJyYXlNb2RlRnJvbVN0
cnVjdHVyZShtX2xhc3RTZWVuU3RydWN0dXJlKTsKQEAgLTg5LDcgKzgyLDcgQEAgdm9pZCBBcnJh
eVByb2ZpbGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdAogICAgICAgICAgICAgbV9sYXN0U2VlblN0
cnVjdHVyZS0+dHlwZUluZm8oKS5pbnRlcmNlcHRzR2V0T3duUHJvcGVydHlTbG90QnlJbmRleEV2
ZW5XaGVuTGVuZ3RoSXNOb3RaZXJvKCk7CiAgICAgICAgIGlmICghY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+aXNPcmlnaW5hbEFycmF5U3RydWN0dXJlKG1fbGFzdFNlZW5TdHJ1Y3R1cmUpKQog
ICAgICAgICAgICAgbV91c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMgPSBmYWxzZTsKLSAgICAg
ICAgaWYgKCFzdHJ1Y3R1cmVJc1BvbHltb3JwaGljKCkpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1
cmVJc1BvbHltb3JwaGljKGxvY2tlcikpIHsKICAgICAgICAgICAgIGlmICghbV9leHBlY3RlZFN0
cnVjdHVyZSkKICAgICAgICAgICAgICAgICBtX2V4cGVjdGVkU3RydWN0dXJlID0gbV9sYXN0U2Vl
blN0cnVjdHVyZTsKICAgICAgICAgICAgIGVsc2UgaWYgKG1fZXhwZWN0ZWRTdHJ1Y3R1cmUgIT0g
bV9sYXN0U2VlblN0cnVjdHVyZSkKQEAgLTEwMiwxNCArOTUsMTQgQEAgdm9pZCBBcnJheVByb2Zp
bGU6OmNvbXB1dGVVcGRhdGVkUHJlZGljdAogICAgICAgICBtX2V4cGVjdGVkU3RydWN0dXJlID0g
cG9seW1vcnBoaWNTdHJ1Y3R1cmUoKTsKICAgICAKICAgICBpZiAob3BlcmF0aW9uID09IENvbGxl
Y3Rpb24KLSAgICAgICAgJiYgZXhwZWN0ZWRTdHJ1Y3R1cmUoKQorICAgICAgICAmJiBleHBlY3Rl
ZFN0cnVjdHVyZShsb2NrZXIpCiAgICAgICAgICYmICFIZWFwOjppc01hcmtlZChtX2V4cGVjdGVk
U3RydWN0dXJlKSkKICAgICAgICAgbV9leHBlY3RlZFN0cnVjdHVyZSA9IHBvbHltb3JwaGljU3Ry
dWN0dXJlKCk7CiB9CiAKLUNTdHJpbmcgQXJyYXlQcm9maWxlOjpicmllZkRlc2NyaXB0aW9uKENv
ZGVCbG9jayogY29kZUJsb2NrKQorQ1N0cmluZyBBcnJheVByb2ZpbGU6OmJyaWVmRGVzY3JpcHRp
b24oY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogY29kZUJsb2NrKQog
ewotICAgIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihjb2RlQmxvY2spOworICAgIGNvbXB1dGVV
cGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIGNvZGVCbG9jayk7CiAgICAgCiAgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OwogICAgIApAQCAtMTIyLDcgKzExNSw3IEBAIENTdHJpbmcgQXJyYXlQcm9m
aWxlOjpicmllZkRlc2NyaXB0aW9uKEMKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAg
fQogICAgIAotICAgIGlmIChzdHJ1Y3R1cmVJc1BvbHltb3JwaGljKCkpIHsKKyAgICBpZiAoc3Ry
dWN0dXJlSXNQb2x5bW9ycGhpYyhsb2NrZXIpKSB7CiAgICAgICAgIGlmIChoYXNQcmludGVkKQog
ICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOwogICAgICAgICBvdXQucHJpbnQoInN0cnVjdCA9
IFRPUCIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FycmF5UHJvZmls
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BcnJheVBy
b2ZpbGUuaAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0FycmF5UHJvZmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVm
IEFycmF5UHJvZmlsZV9oCiAjZGVmaW5lIEFycmF5UHJvZmlsZV9oCiAKKyNpbmNsdWRlICJDb2Rl
QmxvY2tMb2NrLmgiCiAjaW5jbHVkZSAiSlNBcnJheS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5o
IgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xNTMsMzIgKzE1NCwzMSBAQCBwdWJsaWM6
CiAgICAgICAgIG1fbGFzdFNlZW5TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKENvZGVCbG9jayosIE9wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBOb09wZXJhdGlvbik7CisgICAgdm9pZCBjb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24oY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgQ29kZUJsb2NrKiwgT3BlcmF0aW9uSW5Qcm9ncmVz
cyA9IE5vT3BlcmF0aW9uKTsKICAgICAKLSAgICBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJl
KCkgY29uc3QKKyAgICBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlKGNvbnN0IENvZGVCbG9j
a0xvY2tlciYgbG9ja2VyKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKHN0cnVjdHVyZUlzUG9s
eW1vcnBoaWMoKSkKKyAgICAgICAgaWYgKHN0cnVjdHVyZUlzUG9seW1vcnBoaWMobG9ja2VyKSkK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gbV9leHBlY3RlZFN0cnVjdHVy
ZTsKICAgICB9Ci0gICAgYm9vbCBzdHJ1Y3R1cmVJc1BvbHltb3JwaGljKCkgY29uc3QKKyAgICBi
b29sIHN0cnVjdHVyZUlzUG9seW1vcnBoaWMoY29uc3QgQ29kZUJsb2NrTG9ja2VyJikgY29uc3QK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2V4cGVjdGVkU3RydWN0dXJlID09IHBvbHltb3JwaGlj
U3RydWN0dXJlKCk7CiAgICAgfQotICAgIGJvb2wgaGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSBjb25z
dAorICAgIGJvb2wgaGFzRGVmaW5pdGVTdHJ1Y3R1cmUoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBs
b2NrZXIpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gIXN0cnVjdHVyZUlzUG9seW1vcnBo
aWMoKSAmJiBtX2V4cGVjdGVkU3RydWN0dXJlOworICAgICAgICByZXR1cm4gIXN0cnVjdHVyZUlz
UG9seW1vcnBoaWMobG9ja2VyKSAmJiBtX2V4cGVjdGVkU3RydWN0dXJlOwogICAgIH0KLSAgICBB
cnJheU1vZGVzIG9ic2VydmVkQXJyYXlNb2RlcygpIGNvbnN0IHsgcmV0dXJuIG1fb2JzZXJ2ZWRB
cnJheU1vZGVzOyB9Ci0gICAgQXJyYXlNb2RlcyB1cGRhdGVkT2JzZXJ2ZWRBcnJheU1vZGVzKCkg
Y29uc3Q7IC8vIENvbXB1dGVzIHRoZSBvYnNlcnZlZCBhcnJheSBtb2RlcyB3aXRob3V0IHVwZGF0
aW5nIHRoZSBwcm9maWxlLgotICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXM7IH0KKyAgICBBcnJh
eU1vZGVzIG9ic2VydmVkQXJyYXlNb2Rlcyhjb25zdCBDb2RlQmxvY2tMb2NrZXImKSBjb25zdCB7
IHJldHVybiBtX29ic2VydmVkQXJyYXlNb2RlczsgfQorICAgIGJvb2wgbWF5SW50ZXJjZXB0SW5k
ZXhlZEFjY2Vzc2VzKGNvbnN0IENvZGVCbG9ja0xvY2tlciYpIGNvbnN0IHsgcmV0dXJuIG1fbWF5
SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzOyB9CiAgICAgCi0gICAgYm9vbCBtYXlTdG9yZVRvSG9s
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF5U3RvcmVUb0hvbGU7IH0KLSAgICBib29sIG91dE9mQm91
bmRzKCkgY29uc3QgeyByZXR1cm4gbV9vdXRPZkJvdW5kczsgfQorICAgIGJvb2wgbWF5U3RvcmVU
b0hvbGUoY29uc3QgQ29kZUJsb2NrTG9ja2VyJikgY29uc3QgeyByZXR1cm4gbV9tYXlTdG9yZVRv
SG9sZTsgfQorICAgIGJvb2wgb3V0T2ZCb3VuZHMoY29uc3QgQ29kZUJsb2NrTG9ja2VyJikgY29u
c3QgeyByZXR1cm4gbV9vdXRPZkJvdW5kczsgfQogICAgIAotICAgIGJvb2wgdXNlc09yaWdpbmFs
QXJyYXlTdHJ1Y3R1cmVzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzT3JpZ2luYWxBcnJheVN0cnVj
dHVyZXM7IH0KKyAgICBib29sIHVzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJlcyhjb25zdCBDb2Rl
QmxvY2tMb2NrZXImKSBjb25zdCB7IHJldHVybiBtX3VzZXNPcmlnaW5hbEFycmF5U3RydWN0dXJl
czsgfQogICAgIAotICAgIENTdHJpbmcgYnJpZWZEZXNjcmlwdGlvbihDb2RlQmxvY2sqKTsKKyAg
ICBDU3RyaW5nIGJyaWVmRGVzY3JpcHRpb24oY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgQ29kZUJs
b2NrKik7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRy
YWN0b3I7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3
LDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogCiBDYWxsTGlu
a1N0YXR1cyBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxv
Y2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiB7Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9j
a2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihw
cm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJs
b2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTQ4ODAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY2Miw5ICs2NjIsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmJlZ2luRHVtcFByb2Zp
bGluZyhQcmludAogCiB2b2lkIENvZGVCbG9jazo6ZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxp
bmcpCiB7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIAogICAgICsr
aXQ7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQotICAgIENTdHJpbmcgZGVzY3JpcHRpb24g
PSBpdC0+dS5wcm9maWxlLT5icmllZkRlc2NyaXB0aW9uKCk7CisgICAgQ1N0cmluZyBkZXNjcmlw
dGlvbiA9IGl0LT51LnByb2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24obG9ja2VyKTsKICAgICBpZiAo
IWRlc2NyaXB0aW9uLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAgICAgYmVnaW5EdW1wUHJv
ZmlsaW5nKG91dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CkBAIC02NzcsOSArNjc5LDExIEBAIHZv
aWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxpbmcoUHJpbnQKIAogdm9pZCBDb2RlQmxvY2s6
OmR1bXBBcnJheVByb2ZpbGluZyhQcmludFN0cmVhbSYgb3V0LCBjb25zdCBJbnN0cnVjdGlvbiom
IGl0LCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQogeworICAgIENvZGVCbG9ja0xvY2tlciBs
b2NrZXIobV9sb2NrKTsKKyAgICAKICAgICArK2l0OwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxF
UikKLSAgICBDU3RyaW5nIGRlc2NyaXB0aW9uID0gaXQtPnUuYXJyYXlQcm9maWxlLT5icmllZkRl
c2NyaXB0aW9uKHRoaXMpOworICAgIENTdHJpbmcgZGVzY3JpcHRpb24gPSBpdC0+dS5hcnJheVBy
b2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24obG9ja2VyLCB0aGlzKTsKICAgICBpZiAoIWRlc2NyaXB0
aW9uLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CiAgICAgYmVnaW5EdW1wUHJvZmlsaW5nKG91
dCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CkBAIC0zMTY4LDYgKzMxNzIsOCBAQCBBcnJheVByb2Zp
bGUqIENvZGVCbG9jazo6Z2V0T3JBZGRBcnJheVByCiB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxs
UHJlZGljdGlvbnNBbmRDb3VudExpdmVuZXNzKAogICAgIE9wZXJhdGlvbkluUHJvZ3Jlc3Mgb3Bl
cmF0aW9uLCB1bnNpZ25lZCYgbnVtYmVyT2ZMaXZlTm9uQXJndW1lbnRWYWx1ZVByb2ZpbGVzLCB1
bnNpZ25lZCYgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcykKIHsKKyAgICBDb2RlQmxvY2tMb2Nr
IGxvY2tlcihtX2xvY2spOworICAgIAogICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFsdWVQ
cm9maWxlcyA9IDA7CiAgICAgbnVtYmVyT2ZTYW1wbGVzSW5Qcm9maWxlcyA9IDA7IC8vIElmIHRo
aXMgZGl2aWRlZCBieSBWYWx1ZVByb2ZpbGU6Om51bWJlck9mQnVja2V0cyBlcXVhbHMgbnVtYmVy
T2ZWYWx1ZVByb2ZpbGVzKCkgdGhlbiB2YWx1ZSBwcm9maWxlcyBhcmUgZnVsbC4KICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdG90YWxOdW1iZXJPZlZhbHVlUHJvZmlsZXMoKTsgKytpKSB7
CkBAIC0zMTc3LDE2ICszMTgzLDE2IEBAIHZvaWQgQ29kZUJsb2NrOjp1cGRhdGVBbGxQcmVkaWN0
aW9uc0FuZEMKICAgICAgICAgICAgIG51bVNhbXBsZXMgPSBWYWx1ZVByb2ZpbGU6Om51bWJlck9m
QnVja2V0czsgLy8gV2UgZG9uJ3Qgd2FudCBwcm9maWxlcyB0aGF0IGFyZSBleHRyZW1lbHkgaG90
IHRvIGJlIGdpdmVuIG1vcmUgd2VpZ2h0LgogICAgICAgICBudW1iZXJPZlNhbXBsZXNJblByb2Zp
bGVzICs9IG51bVNhbXBsZXM7CiAgICAgICAgIGlmIChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0
IDwgMCkgewotICAgICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKG9w
ZXJhdGlvbik7CisgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyLCBvcGVyYXRpb24pOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKHByb2ZpbGUtPm51bWJlck9mU2FtcGxlcygpIHx8IHByb2ZpbGUtPm1fcHJlZGlj
dGlvbiAhPSBTcGVjTm9uZSkKICAgICAgICAgICAgIG51bWJlck9mTGl2ZU5vbkFyZ3VtZW50VmFs
dWVQcm9maWxlcysrOwotICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
b3BlcmF0aW9uKTsKKyAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxv
Y2tlciwgb3BlcmF0aW9uKTsKICAgICB9CiAgICAgCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAg
bV9sYXp5T3BlcmFuZFZhbHVlUHJvZmlsZXMuY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhvcGVy
YXRpb24pOworICAgIG1fbGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzLmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbnMobG9ja2VyLCBvcGVyYXRpb24pOwogI2VuZGlmCiB9CiAKQEAgLTMxOTgsOCArMzIw
NCwxMCBAQCB2b2lkIENvZGVCbG9jazo6dXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlCiAKIHZvaWQg
Q29kZUJsb2NrOjp1cGRhdGVBbGxBcnJheVByZWRpY3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3Mg
b3BlcmF0aW9uKQogeworICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1fbG9jayk7CisgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9hcnJheVByb2ZpbGVzLnNpemUoKTsgaS0tOykKLSAgICAg
ICAgbV9hcnJheVByb2ZpbGVzW2ldLmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbih0aGlzLCBvcGVy
YXRpb24pOworICAgICAgICBtX2FycmF5UHJvZmlsZXNbaV0uY29tcHV0ZVVwZGF0ZWRQcmVkaWN0
aW9uKGxvY2tlciwgdGhpcywgb3BlcmF0aW9uKTsKICAgICAKICAgICAvLyBEb24ndCBjb3VudCB0
aGVzZSBlaXRoZXIsIGZvciBzaW1pbGFyIHJlYXNvbnMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9hcnJheUFsbG9jYXRpb25Qcm9maWxlcy5zaXplKCk7IGktLTspCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNDg4MDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJD
YWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hh
c2guaCIKKyNpbmNsdWRlICJDb2RlQmxvY2tMb2NrLmgiCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkNvZGVUeXBlLmgiCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIK
QEAgLTY5LDcgKzcwLDYgQEAKICNpbmNsdWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCiAj
aW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1
ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZEFycmF5Lmg+
CiAjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgpAQCAtNDc5LDkgKzQ3OSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIC0gMV0udS5wcm9maWxl
ID09IHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9Ci0gICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNl
dChpbnQgYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmls
ZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxvY2tl
ciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gdmFs
dWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChieXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCB0b3RhbE51bWJlck9mVmFs
dWVQcm9maWxlcygpCkBAIC04ODksNyArODg5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgdXBkYXRlQWxsQXJyYXlQcmVkaWN0aW9ucyhPcGVyYXRpb25JblByb2dyZXNzID0gTm9P
cGVyYXRpb24pOwogICAgICAgICB2b2lkIHVwZGF0ZUFsbFByZWRpY3Rpb25zKE9wZXJhdGlvbklu
UHJvZ3Jlc3MgPSBOb09wZXJhdGlvbik7CiAjZWxzZQotICAgICAgICBib29sIHNob3VsZE9wdGlt
aXplTm93KCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgYm9vbCB1cGRhdGVBbGxQcmVkaWN0
aW9uc0FuZENoZWNrSWZTaG91bGRPcHRpbWl6ZU5vdygpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
ICAgIHZvaWQgdXBkYXRlQWxsVmFsdWVQcm9maWxlUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9n
cmVzcyA9IE5vT3BlcmF0aW9uKSB7IH0KICAgICAgICAgdm9pZCB1cGRhdGVBbGxBcnJheVByZWRp
Y3Rpb25zKE9wZXJhdGlvbkluUHJvZ3Jlc3MgPSBOb09wZXJhdGlvbikgeyB9CiAgICAgICAgIHZv
aWQgdXBkYXRlQWxsUHJlZGljdGlvbnMoT3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9u
KSB7IH0KQEAgLTkyNSw5ICs5MjUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gQW5v
dGhlciBleGNlcHRpb24gdG8gdGhlIHJ1bGVzIGlzIHRoYXQgdGhlIEdDIGNhbiBkbyB3aGF0ZXZl
ciBpdCB3YW50cwogICAgICAgICAvLyB3aXRob3V0IGhvbGRpbmcgYW55IGxvY2tzLCBiZWNhdXNl
IHRoZSBHQyBpcyBndWFyYW50ZWVkIHRvIHdhaXQgdW50aWwgYW55CiAgICAgICAgIC8vIGNvbmN1
cnJlbnQgY29tcGlsYXRpb24gdGhyZWFkcyBmaW5pc2ggd2hhdCB0aGV5J3JlIGRvaW5nLgotICAg
ICAgICB0eXBlZGVmIEJ5dGVTcGluTG9jayBMb2NrOwotICAgICAgICB0eXBlZGVmIEJ5dGVTcGlu
TG9ja2VyIExvY2tlcjsKLSAgICAgICAgTG9jayBtX2xvY2s7CisgICAgICAgIENvZGVCbG9ja0xv
Y2sgbV9sb2NrOwogCiAgICAgcHJvdGVjdGVkOgogI2lmIEVOQUJMRShKSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2tMb2NrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrTG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBDb2RlQmxvY2tMb2NrX2gKKyNkZWZpbmUgQ29k
ZUJsb2NrTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8
d3RmL05vTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2lmIEVOQUJMRShDT05DVVJSRU5U
X0pJVCkKK3R5cGVkZWYgQnl0ZVNwaW5Mb2NrIENvZGVCbG9ja0xvY2s7Cit0eXBlZGVmIEJ5dGVT
cGluTG9ja2VyIENvZGVCbG9ja0xvY2tlcjsKKyNlbHNlCit0eXBlZGVmIE5vTG9jayBDb2RlQmxv
Y2tMb2NrOwordHlwZWRlZiBOb0xvY2tMb2NrZXIgQ29kZUJsb2NrTG9ja2VyOworI2VuZGlmCisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gQ29kZUJsb2NrTG9ja19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJ
KHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgR2V0QnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvckNoYWluKEdldEIKIAogR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNv
ZGVJbmRleCwgSWRlbnRpZmllciYgaWRlbnQpCiB7Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9j
a2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihw
cm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIAogICAgIFVOVVNFRF9QQVJBTShwcm9maWxlZEJs
b2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9MYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZS5jcHAJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDE3ICsz
NSwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUhvbGRlcjo6Q29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyKCkgeyB9CiBD
b21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXI6On5Db21wcmVzc2VkTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGVIb2xkZXIoKSB7IH0KIAotdm9pZCBDb21wcmVzc2VkTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVIb2xkZXI6OmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbnMoT3BlcmF0aW9u
SW5Qcm9ncmVzcyBvcGVyYXRpb24pCit2b2lkIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUhvbGRlcjo6Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9ucyhjb25zdCBDb2RlQmxvY2tMb2Nr
ZXImIGxvY2tlciwgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24pCiB7CiAgICAgaWYgKCFt
X2RhdGEpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9kYXRhLT5zaXplKCk7ICsraSkKLSAgICAgICAgbV9kYXRhLT5hdChpKS5jb21wdXRlVXBk
YXRlZFByZWRpY3Rpb24ob3BlcmF0aW9uKTsKKyAgICAgICAgbV9kYXRhLT5hdChpKS5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obG9ja2VyLCBvcGVyYXRpb24pOwogfQogCiBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZSogQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyOjphZGQo
Ci0gICAgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkmIGtleSkKKyAgICBjb25zdCBD
b2RlQmxvY2tMb2NrZXImLCBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KQog
ewogICAgIGlmICghbV9kYXRhKQogICAgICAgICBtX2RhdGEgPSBhZG9wdFB0cihuZXcgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGU6Okxpc3QoKSk7CkBAIC02MCwyMCArNjAsMjIgQEAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGUqIENvbXByZXNzZWRMYXp5TwogICAgIHJldHVybiAmbV9kYXRhLT5sYXN0
KCk7CiB9CiAKLUxhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjpMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZVBhcnNlcigKLSAgICBDb21wcmVzc2VkTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVIb2xk
ZXImIGhvbGRlcikKLSAgICA6IG1faG9sZGVyKGhvbGRlcikKK0xhenlPcGVyYW5kVmFsdWVQcm9m
aWxlUGFyc2VyOjpMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigpIHsgfQorTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVQYXJzZXI6On5MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigpIHsg
fQorCit2b2lkIExhenlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyOjppbml0aWFsaXplKAorICAg
IGNvbnN0IENvZGVCbG9ja0xvY2tlciYsIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUhvbGRlciYgaG9sZGVyKQogewotICAgIGlmICghbV9ob2xkZXIubV9kYXRhKQorICAgIEFTU0VS
VChtX21hcC5pc0VtcHR5KCkpOworICAgIAorICAgIGlmICghaG9sZGVyLm1fZGF0YSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlOjpMaXN0JiBkYXRh
ID0gKm1faG9sZGVyLm1fZGF0YTsKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZTo6TGlzdCYg
ZGF0YSA9ICpob2xkZXIubV9kYXRhOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkYXRh
LnNpemUoKTsgKytpKQogICAgICAgICBtX21hcC5hZGQoZGF0YVtpXS5rZXkoKSwgJmRhdGFbaV0p
OwogfQogCi1MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6fkxhenlPcGVyYW5kVmFsdWVQ
cm9maWxlUGFyc2VyKCkgeyB9Ci0KIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZVBhcnNlcjo6Z2V0SWZQcmVzZW50KAogICAgIGNvbnN0IExhenlPcGVyYW5k
VmFsdWVQcm9maWxlS2V5JiBrZXkpIGNvbnN0CiB7CkBAIC04NywxMyArODksMTMgQEAgTGF6eU9w
ZXJhbmRWYWx1ZVByb2ZpbGUqIExhenlPcGVyYW5kVmFsdQogfQogCiBTcGVjdWxhdGVkVHlwZSBM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcjo6cHJlZGljdGlvbigKLSAgICBjb25zdCBMYXp5
T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KSBjb25zdAorICAgIGNvbnN0IENvZGVCbG9ja0xv
Y2tlciYgbG9ja2VyLCBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtleSYga2V5KSBjb25z
dAogewogICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBwcm9maWxlID0gZ2V0SWZQcmVzZW50
KGtleSk7CiAgICAgaWYgKCFwcm9maWxlKQogICAgICAgICByZXR1cm4gU3BlY05vbmU7CiAgICAg
Ci0gICAgcmV0dXJuIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpOworICAgIHJl
dHVybiBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2VyKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaAkocmV2aXNpb24gMTQ4ODAzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0xhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShWQUxVRV9QUk9G
SUxFUikKIAorI2luY2x1ZGUgIkNvZGVCbG9ja0xvY2suaCIKICNpbmNsdWRlICJWYWx1ZVByb2Zp
bGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgpAQCAtMTU1LDkgKzE1NiwxMCBAQCBwdWJsaWM6CiAgICAgQ29tcHJlc3NlZExhenlPcGVy
YW5kVmFsdWVQcm9maWxlSG9sZGVyKCk7CiAgICAgfkNvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVl
UHJvZmlsZUhvbGRlcigpOwogICAgIAotICAgIHZvaWQgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
cyhPcGVyYXRpb25JblByb2dyZXNzKTsKKyAgICB2b2lkIGNvbXB1dGVVcGRhdGVkUHJlZGljdGlv
bnMoY29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgT3BlcmF0aW9uSW5Qcm9ncmVzcyk7CiAgICAgCi0g
ICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIGFkZChjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUtleSYga2V5KTsKKyAgICBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZSogYWRkKAorICAgICAg
ICBjb25zdCBDb2RlQmxvY2tMb2NrZXImLCBjb25zdCBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZUtl
eSYga2V5KTsKICAgICAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExhenlPcGVyYW5kVmFs
dWVQcm9maWxlUGFyc2VyOwpAQCAtMTY3LDE2ICsxNjksMTggQEAgcHJpdmF0ZToKIGNsYXNzIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlUGFyc2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShM
YXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTGF6
eU9wZXJhbmRWYWx1ZVByb2ZpbGVQYXJzZXIoCi0gICAgICAgIENvbXByZXNzZWRMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZUhvbGRlciYgaG9sZGVyKTsKKyAgICBleHBsaWNpdCBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZVBhcnNlcigpOwogICAgIH5MYXp5T3BlcmFuZFZhbHVlUHJvZmlsZVBhcnNlcigp
OwogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZSgKKyAgICAgICAgY29uc3QgQ29kZUJsb2NrTG9j
a2VyJiwgQ29tcHJlc3NlZExhenlPcGVyYW5kVmFsdWVQcm9maWxlSG9sZGVyJiBob2xkZXIpOwor
ICAgIAogICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlKiBnZXRJZlByZXNlbnQoCiAgICAgICAg
IGNvbnN0IExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5JiBrZXkpIGNvbnN0OwogICAgIAotICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24oY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVL
ZXkmIGtleSkgY29uc3Q7CisgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbigKKyAgICAgICAg
Y29uc3QgQ29kZUJsb2NrTG9ja2VyJiwgY29uc3QgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkm
IGtleSkgY29uc3Q7CiBwcml2YXRlOgotICAgIENvbXByZXNzZWRMYXp5T3BlcmFuZFZhbHVlUHJv
ZmlsZUhvbGRlciYgbV9ob2xkZXI7CiAgICAgSGFzaE1hcDxMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZUtleSwgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqPiBtX21hcDsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5jcHAJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9NZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtNTIsMTAgKzUyLDE0IEBAIEVuY29kZWRKU1ZhbHVlKiBNZXRob2RPZkdldHRp
bmdBVmFsdWVQcm8KICAgICBjYXNlIFJlYWR5OgogICAgICAgICByZXR1cm4gdS5wcm9maWxlLT5z
cGVjRmFpbEJ1Y2tldChpbmRleCk7CiAgICAgICAgIAotICAgIGNhc2UgTGF6eU9wZXJhbmQ6Ci0g
ICAgICAgIHJldHVybiB1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVBy
b2ZpbGVzKCkuYWRkKAotICAgICAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVLZXkoCi0g
ICAgICAgICAgICAgICAgdS5sYXp5T3BlcmFuZC5ieXRlY29kZU9mZnNldCwgdS5sYXp5T3BlcmFu
ZC5vcGVyYW5kKSktPnNwZWNGYWlsQnVja2V0KGluZGV4KTsKKyAgICBjYXNlIExhenlPcGVyYW5k
OiB7CisgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5IGtleSh1LmxhenlPcGVyYW5k
LmJ5dGVjb2RlT2Zmc2V0LCB1LmxhenlPcGVyYW5kLm9wZXJhbmQpOworICAgICAgICAKKyAgICAg
ICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcih1LmxhenlPcGVyYW5kLmNvZGVCbG9jay0+bV9sb2Nr
KTsKKyAgICAgICAgTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPQorICAgICAgICAg
ICAgdS5sYXp5T3BlcmFuZC5jb2RlQmxvY2stPmxhenlPcGVyYW5kVmFsdWVQcm9maWxlcygpLmFk
ZChsb2NrZXIsIGtleSk7CisgICAgICAgIHJldHVybiBwcm9maWxlLT5zcGVjRmFpbEJ1Y2tldChp
bmRleCk7CisgICAgfQogICAgICAgICAKICAgICBkZWZhdWx0OgogICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
MCw3ICs4MCw3IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb20KIAog
UHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmls
ZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgSWRlbnRpZmllciYgaWRlbnQpCiB7Ci0g
ICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgIAogICAg
IFVOVVNFRF9QQVJBTShwcm9maWxlZEJsb2NrKTsKICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJ
bmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2Jh
bFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1Jlc29sdmVHbG9iYWxTdGF0dXMuY3BwCShyZXZpc2lvbiAxNDg4MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUmVzb2x2ZUdsb2JhbFN0YXR1cy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQ4LDcgKzQ4LDcgQEAgc3RhdGljIFJlc29sdmVHbG9iYWxTdGF0dXMgY29tcHV0ZUZvclN0
cgogCiBSZXNvbHZlR2xvYmFsU3RhdHVzIFJlc29sdmVHbG9iYWxTdGF0dXM6OmNvbXB1dGVGb3Io
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIGludCwgUmVzb2x2ZU9wZXJhdGlvbiogb3BlcmF0aW9uLCBJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyKQogewotICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7CiAgICAgCiAgICAgQVNTRVJUKG9wZXJhdGlvbi0+bV9vcGVyYXRpb24gPT0gUmVz
b2x2ZU9wZXJhdGlvbjo6R2V0QW5kUmV0dXJuR2xvYmFsUHJvcGVydHkpOwogICAgIGlmICghb3Bl
cmF0aW9uLT5tX3N0cnVjdHVyZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFsdWVQcm9maWxlLmgJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYWx1ZVByb2ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzMsNiArMzMsNyBAQAogCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogCisjaW5jbHVk
ZSAiQ29kZUJsb2NrTG9jay5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJKU0FycmF5
LmgiCiAjaW5jbHVkZSAiU3BlY3VsYXRlZFR5cGUuaCIKQEAgLTExMSw5ICsxMTIsOSBAQCBzdHJ1
Y3QgVmFsdWVQcm9maWxlQmFzZSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
Ci0gICAgQ1N0cmluZyBicmllZkRlc2NyaXB0aW9uKCkKKyAgICBDU3RyaW5nIGJyaWVmRGVzY3Jp
cHRpb24oY29uc3QgQ29kZUJsb2NrTG9ja2VyJiBsb2NrZXIpCiAgICAgewotICAgICAgICBjb21w
dXRlVXBkYXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgY29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9u
KGxvY2tlcik7CiAgICAgICAgIAogICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CiAgICAg
ICAgIApAQCAtMTQ3LDggKzE0OCw5IEBAIHN0cnVjdCBWYWx1ZVByb2ZpbGVCYXNlIHsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICAvLyBVcGRhdGVzIHRoZSBwcmVkaWN0aW9uIGFuZCByZXR1
cm5zIHRoZSBuZXcgb25lLgotICAgIFNwZWN1bGF0ZWRUeXBlIGNvbXB1dGVVcGRhdGVkUHJlZGlj
dGlvbihPcGVyYXRpb25JblByb2dyZXNzIG9wZXJhdGlvbiA9IE5vT3BlcmF0aW9uKQorICAgIC8v
IFVwZGF0ZXMgdGhlIHByZWRpY3Rpb24gYW5kIHJldHVybnMgdGhlIG5ldyBvbmUuIE5ldmVyIGNh
bGwgdGhpcyBmcm9tIGFueSB0aHJlYWQKKyAgICAvLyB0aGF0IGlzbid0IGV4ZWN1dGluZyB0aGUg
Y29kZS4KKyAgICBTcGVjdWxhdGVkVHlwZSBjb21wdXRlVXBkYXRlZFByZWRpY3Rpb24oY29uc3Qg
Q29kZUJsb2NrTG9ja2VyJiwgT3BlcmF0aW9uSW5Qcm9ncmVzcyBvcGVyYXRpb24gPSBOb09wZXJh
dGlvbikKICAgICB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE51bWJl
ck9mQnVja2V0czsgKytpKSB7CiAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6
ZGVjb2RlKG1fYnVja2V0c1tpXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0FycmF5TW9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBcnJheU1vZGUuY3BwCShyZXZpc2lvbiAxNDg4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FycmF5TW9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDE0ICszNCwxNCBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLUFycmF5TW9kZSBBcnJheU1vZGU6
OmZyb21PYnNlcnZlZChBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9u
LCBib29sIG1ha2VTYWZlKQorQXJyYXlNb2RlIEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGNvbnN0
IENvZGVCbG9ja0xvY2tlciYgbG9ja2VyLCBBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpB
Y3Rpb24gYWN0aW9uLCBib29sIG1ha2VTYWZlKQogewotICAgIEFycmF5TW9kZXMgb2JzZXJ2ZWQg
PSBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKTsKKyAgICBBcnJheU1vZGVzIG9ic2VydmVk
ID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcik7CiAgICAgc3dpdGNoIChvYnNl
cnZlZCkgewogICAgIGNhc2UgMDoKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6VW5w
cm9maWxlZCk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXkpOgotICAgICAgICBpZiAo
YWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+bWF5SW50ZXJjZXB0SW5kZXhlZEFj
Y2Vzc2VzKCkpCisgICAgICAgIGlmIChhY3Rpb24gPT0gQXJyYXk6OldyaXRlICYmICFwcm9maWxl
LT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMobG9ja2VyKSkKICAgICAgICAgICAgIHJldHVy
biBBcnJheU1vZGUoQXJyYXk6OlVuZGVjaWRlZCwgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6T3V0
T2ZCb3VuZHMsIEFycmF5OjpDb252ZXJ0KTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAKQEAgLTUxLDQ5ICs1MSw0OSBAQCBBcnJheU1v
ZGUgQXJyYXlNb2RlOjpmcm9tT2JzZXJ2ZWQoQXJyYXlQCiAgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkdlbmVyaWMpOwogICAgICAgICAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25B
cnJheSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoVW5kZWNpZGVkKToKLSAgICAgICAgaWYgKGFj
dGlvbiA9PSBBcnJheTo6V3JpdGUgJiYgIXByb2ZpbGUtPm1heUludGVyY2VwdEluZGV4ZWRBY2Nl
c3NlcygpKQorICAgICAgICBpZiAoYWN0aW9uID09IEFycmF5OjpXcml0ZSAmJiAhcHJvZmlsZS0+
bWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGxvY2tlcikpCiAgICAgICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpVbmRlY2lkZWQsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6
T3V0T2ZCb3VuZHMsIEFycmF5OjpDb252ZXJ0KTsKICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhO
b25BcnJheVdpdGhJbnQzMik6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkludDMy
LCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtl
U2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkludDMyLCBBcnJheTo6Tm9u
QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZl
KTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJheVdpdGhJbnQzMik6Ci0gICAgICAgIHJldHVy
biBBcnJheU1vZGUoQXJyYXk6OkludDMyLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRo
UHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJy
YXk6OkludDMyLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIs
IHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhJ
bnQzMikgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoSW50MzIpOgotICAgICAgICByZXR1cm4gQXJy
YXlNb2RlKEFycmF5OjpJbnQzMiwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53
aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUo
QXJyYXk6OkludDMyLCBBcnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9m
aWxlKGxvY2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogCiAgICAgY2FzZSBhc0FycmF5TW9kZXMo
Tm9uQXJyYXlXaXRoRG91YmxlKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6RG91
YmxlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9maWxlLCBt
YWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkRvdWJsZSwgQXJyYXk6
Ok5vbkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtl
U2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoQXJyYXlXaXRoRG91YmxlKToKLSAgICAgICAg
cmV0dXJuIEFycmF5TW9kZShBcnJheTo6RG91YmxlLCBBcnJheTo6QXJyYXksIEFycmF5OjpBc0lz
KS53aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1v
ZGUoQXJyYXk6OkRvdWJsZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUo
bG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJy
YXlXaXRoRG91YmxlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhEb3VibGUpOgotICAgICAgICBy
ZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpEb3VibGUsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJh
eTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4g
QXJyYXlNb2RlKEFycmF5OjpEb3VibGUsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJ
cykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAKICAgICBjYXNlIGFz
QXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIEFycmF5
TW9kZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6Ok5vbkFycmF5LCBBcnJheTo6QXNJcykud2l0
aFByb2ZpbGUocHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFy
cmF5OjpDb250aWd1b3VzLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmls
ZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhDb250aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJheTo6Q29udGln
dW91cywgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFr
ZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpDb250aWd1b3VzLCBBcnJh
eTo6QXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VT
YWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25BcnJheVdpdGhDb250aWd1b3VzKSB8IGFz
QXJyYXlNb2RlcyhBcnJheVdpdGhDb250aWd1b3VzKToKLSAgICAgICAgcmV0dXJuIEFycmF5TW9k
ZShBcnJheTo6Q29udGlndW91cywgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5OjpBc0lzKS53
aXRoUHJvZmlsZShwcm9maWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUo
QXJyYXk6OkNvbnRpZ3VvdXMsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0
aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAKICAgICBjYXNlIGFzQXJyYXlN
b2RlcyhOb25BcnJheVdpdGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2Rl
KEFycmF5OjpBcnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQ
cm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9kZShBcnJh
eTo6QXJyYXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmls
ZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhTbG93UHV0QXJyYXlTdG9yYWdlKToKICAgICBjYXNlIGFzQXJyYXlNb2RlcyhOb25B
cnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRB
cnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpTbG93UHV0QXJy
YXlTdG9yYWdlLCBBcnJheTo6Tm9uQXJyYXksIEFycmF5OjpBc0lzKS53aXRoUHJvZmlsZShwcm9m
aWxlLCBtYWtlU2FmZSk7CisgICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OlNsb3dQdXRB
cnJheVN0b3JhZ2UsIEFycmF5OjpOb25BcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxv
Y2tlciwgcHJvZmlsZSwgbWFrZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0
aEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBBcnJheU1vZGUoQXJyYXk6OkFycmF5U3Rv
cmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFr
ZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJheVN0b3JhZ2UsIEFy
cmF5OjpBcnJheSwgQXJyYXk6OkFzSXMpLndpdGhQcm9maWxlKGxvY2tlciwgcHJvZmlsZSwgbWFr
ZVNhZmUpOwogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3Jh
Z2UpOgogICAgIGNhc2UgYXNBcnJheU1vZGVzKEFycmF5V2l0aEFycmF5U3RvcmFnZSkgfCBhc0Fy
cmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSk6Ci0gICAgICAgIHJldHVybiBB
cnJheU1vZGUoQXJyYXk6OlNsb3dQdXRBcnJheVN0b3JhZ2UsIEFycmF5OjpBcnJheSwgQXJyYXk6
OkFzSXMpLndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFy
cmF5TW9kZShBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6OkFycmF5LCBBcnJheTo6
QXNJcykud2l0aFByb2ZpbGUobG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBh
c0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlTdG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJh
eVdpdGhBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJh
eVN0b3JhZ2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUo
cHJvZmlsZSwgbWFrZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5OjpBcnJh
eVN0b3JhZ2UsIEFycmF5OjpQb3NzaWJseUFycmF5LCBBcnJheTo6QXNJcykud2l0aFByb2ZpbGUo
bG9ja2VyLCBwcm9maWxlLCBtYWtlU2FmZSk7CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJy
YXlXaXRoU2xvd1B1dEFycmF5U3RvcmFnZSkgfCBhc0FycmF5TW9kZXMoQXJyYXlXaXRoU2xvd1B1
dEFycmF5U3RvcmFnZSk6CiAgICAgY2FzZSBhc0FycmF5TW9kZXMoTm9uQXJyYXlXaXRoQXJyYXlT
dG9yYWdlKSB8IGFzQXJyYXlNb2RlcyhBcnJheVdpdGhBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1v
ZGVzKE5vbkFycmF5V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpIHwgYXNBcnJheU1vZGVzKEFycmF5
V2l0aFNsb3dQdXRBcnJheVN0b3JhZ2UpOgotICAgICAgICByZXR1cm4gQXJyYXlNb2RlKEFycmF5
OjpTbG93UHV0QXJyYXlTdG9yYWdlLCBBcnJheTo6UG9zc2libHlBcnJheSwgQXJyYXk6OkFzSXMp
LndpdGhQcm9maWxlKHByb2ZpbGUsIG1ha2VTYWZlKTsKKyAgICAgICAgcmV0dXJuIEFycmF5TW9k
ZShBcnJheTo6U2xvd1B1dEFycmF5U3RvcmFnZSwgQXJyYXk6OlBvc3NpYmx5QXJyYXksIEFycmF5
OjpBc0lzKS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKIAogICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGlmICgob2JzZXJ2ZWQgJiBhc0FycmF5TW9kZXMoTm9uQXJyYXkpKSAm
JiBwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSkKKyAgICAgICAgaWYgKChv
YnNlcnZlZCAmIGFzQXJyYXlNb2RlcyhOb25BcnJheSkpICYmIHByb2ZpbGUtPm1heUludGVyY2Vw
dEluZGV4ZWRBY2Nlc3Nlcyhsb2NrZXIpKQogICAgICAgICAgICAgcmV0dXJuIEFycmF5TW9kZShB
cnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7CiAgICAgICAgIAogICAgICAgICBBcnJheTo6
VHlwZSB0eXBlOwpAQCAtMTE5LDcgKzExOSw3IEBAIEFycmF5TW9kZSBBcnJheU1vZGU6OmZyb21P
YnNlcnZlZChBcnJheVAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgYXJyYXlDbGFzcyA9IEFy
cmF5OjpQb3NzaWJseUFycmF5OwogICAgICAgICAKLSAgICAgICAgcmV0dXJuIEFycmF5TW9kZSh0
eXBlLCBhcnJheUNsYXNzLCBBcnJheTo6Q29udmVydCkud2l0aFByb2ZpbGUocHJvZmlsZSwgbWFr
ZVNhZmUpOworICAgICAgICByZXR1cm4gQXJyYXlNb2RlKHR5cGUsIGFycmF5Q2xhc3MsIEFycmF5
OjpDb252ZXJ0KS53aXRoUHJvZmlsZShsb2NrZXIsIHByb2ZpbGUsIG1ha2VTYWZlKTsKICAgICB9
CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJyYXlNb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUuaAkocmV2
aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcnJheU1vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMTUwLDI3ICsxNTAsMjcgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gQXJyYXlNb2RlKHdvcmQpOwogICAgIH0KICAgICAKLSAgICBzdGF0aWMgQXJyYXlNb2RlIGZy
b21PYnNlcnZlZChBcnJheVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VTYWZlKTsK
KyAgICBzdGF0aWMgQXJyYXlNb2RlIGZyb21PYnNlcnZlZChjb25zdCBDb2RlQmxvY2tMb2NrZXIm
LCBBcnJheVByb2ZpbGUqLCBBcnJheTo6QWN0aW9uLCBib29sIG1ha2VTYWZlKTsKICAgICAKICAg
ICBBcnJheU1vZGUgd2l0aFNwZWN1bGF0aW9uKEFycmF5OjpTcGVjdWxhdGlvbiBzcGVjdWxhdGlv
bikgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBBcnJheU1vZGUodHlwZSgpLCBhcnJheUNs
YXNzKCksIHNwZWN1bGF0aW9uLCBjb252ZXJzaW9uKCkpOwogICAgIH0KICAgICAKLSAgICBBcnJh
eU1vZGUgd2l0aFByb2ZpbGUoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBib29sIG1ha2VTYWZlKSBj
b25zdAorICAgIEFycmF5TW9kZSB3aXRoUHJvZmlsZShjb25zdCBDb2RlQmxvY2tMb2NrZXImIGxv
Y2tlciwgQXJyYXlQcm9maWxlKiBwcm9maWxlLCBib29sIG1ha2VTYWZlKSBjb25zdAogICAgIHsK
ICAgICAgICAgQXJyYXk6OlNwZWN1bGF0aW9uIG15U3BlY3VsYXRpb247CiAgICAgICAgIEFycmF5
OjpDbGFzcyBteUFycmF5Q2xhc3M7CiAgICAgICAgIAogICAgICAgICBpZiAobWFrZVNhZmUpCiAg
ICAgICAgICAgICBteVNwZWN1bGF0aW9uID0gQXJyYXk6Ok91dE9mQm91bmRzOwotICAgICAgICBl
bHNlIGlmIChwcm9maWxlLT5tYXlTdG9yZVRvSG9sZSgpKQorICAgICAgICBlbHNlIGlmIChwcm9m
aWxlLT5tYXlTdG9yZVRvSG9sZShsb2NrZXIpKQogICAgICAgICAgICAgbXlTcGVjdWxhdGlvbiA9
IEFycmF5OjpUb0hvbGU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG15U3BlY3VsYXRpb24g
PSBBcnJheTo6SW5Cb3VuZHM7CiAgICAgICAgIAogICAgICAgICBpZiAoaXNKU0FycmF5KCkpIHsK
LSAgICAgICAgICAgIGlmIChwcm9maWxlLT51c2VzT3JpZ2luYWxBcnJheVN0cnVjdHVyZXMoKSAm
JiBiZW5lZml0c0Zyb21PcmlnaW5hbEFycmF5KCkpCisgICAgICAgICAgICBpZiAocHJvZmlsZS0+
dXNlc09yaWdpbmFsQXJyYXlTdHJ1Y3R1cmVzKGxvY2tlcikgJiYgYmVuZWZpdHNGcm9tT3JpZ2lu
YWxBcnJheSgpKQogICAgICAgICAgICAgICAgIG15QXJyYXlDbGFzcyA9IEFycmF5OjpPcmlnaW5h
bEFycmF5OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG15QXJyYXlDbGFzcyA9
IEFycmF5OjpBcnJheTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDg4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcxLDkg
KzI3MSw5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBH
ZXRMb2NhbCk7CiAgICAgICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgg
PT0gbV9jdXJyZW50SW5kZXgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
Ci0gICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2xhenlPcGVyYW5kcy5wcmVkaWN0aW9u
KAotICAgICAgICAgICAgICAgIExhenlPcGVyYW5kVmFsdWVQcm9maWxlS2V5KG1fY3VycmVudElu
ZGV4LCBub2RlLT5sb2NhbCgpKSk7CisgICAgICAgIENvZGVCbG9ja0xvY2sgbG9ja2VyKG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgTGF6eU9wZXJh
bmRWYWx1ZVByb2ZpbGVLZXkga2V5KG1fY3VycmVudEluZGV4LCBub2RlLT5sb2NhbCgpKTsKKyAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fbGF6
eU9wZXJhbmRzLnByZWRpY3Rpb24obG9ja2VyLCBrZXkpOwogI2lmIERGR19FTkFCTEUoREVCVUdf
VkVSQk9TRSkKICAgICAgICAgZGF0YUxvZygiTGF6eSBvcGVyYW5kIFtAIiwgbm9kZS0+aW5kZXgo
KSwgIiwgYmMjIiwgbV9jdXJyZW50SW5kZXgsICIsIHIiLCBub2RlLT5sb2NhbCgpLCAiXSBwcmVk
aWN0aW9uOiAiLCBTcGVjdWxhdGlvbkR1bXAocHJlZGljdGlvbiksICJcbiIpOwogI2VuZGlmCkBA
IC04MTAsNyArODEwLDggQEAgcHJpdmF0ZToKICAgICAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQ
cmVkaWN0aW9uV2l0aG91dE9TUkV4aXQodW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChieXRlY29kZUluZGV4KTsKKyAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CisgICAgICAgIHJldHVybiBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5dGVj
b2RlSW5kZXgpOwogICAgIH0KIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb24odW5z
aWduZWQgYnl0ZWNvZGVJbmRleCkKQEAgLTgzOCw4ICs4MzksOSBAQCBwcml2YXRlOgogICAgIAog
ICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6
QWN0aW9uIGFjdGlvbikKICAgICB7Ci0gICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJl
ZGljdGlvbihtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jayk7Ci0gICAgICAgIHJldHVybiBB
cnJheU1vZGU6OmZyb21PYnNlcnZlZChwcm9maWxlLCBhY3Rpb24sIGZhbHNlKTsKKyAgICAgICAg
Q29kZUJsb2NrTG9jayBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOworICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obG9ja2Vy
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2spOworICAgICAgICByZXR1cm4gQXJy
YXlNb2RlOjpmcm9tT2JzZXJ2ZWQobG9ja2VyLCBwcm9maWxlLCBhY3Rpb24sIGZhbHNlKTsKICAg
ICB9CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2Zp
bGUpCkBAIC04NDksMjQgKzg1MSwyNiBAQCBwcml2YXRlOgogICAgIAogICAgIEFycmF5TW9kZSBn
ZXRBcnJheU1vZGVBbmRFbWl0Q2hlY2tzKEFycmF5UHJvZmlsZSogcHJvZmlsZSwgQXJyYXk6OkFj
dGlvbiBhY3Rpb24sIE5vZGUqIGJhc2UpCiAgICAgewotICAgICAgICBwcm9maWxlLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24obV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2spOworICAgICAg
ICBDb2RlQmxvY2tMb2NrIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CisgICAgICAgIAorICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRp
Y3Rpb24obG9ja2VyLCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2spOwogICAgICAg
ICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCiAgICAgICAgIGlm
IChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm51bWJlck9mUmFyZUNhc2VQcm9m
aWxlcygpKQogICAgICAgICAgICAgZGF0YUxvZ0YoIlNsb3cgY2FzZSBwcm9maWxlIGZvciBiYyMl
dTogJXVcbiIsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9j
b3VudGVyKTsKLSAgICAgICAgZGF0YUxvZ0YoIkFycmF5IHByb2ZpbGUgZm9yIGJjIyV1OiAlcCVz
JXMsICV1XG4iLCBtX2N1cnJlbnRJbmRleCwgcHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSwg
cHJvZmlsZS0+c3RydWN0dXJlSXNQb2x5bW9ycGhpYygpID8gIiAocG9seW1vcnBoaWMpIiA6ICIi
LCBwcm9maWxlLT5tYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSA/ICIgKG1heSBpbnRlcmNl
cHQpIiA6ICIiLCBwcm9maWxlLT5vYnNlcnZlZEFycmF5TW9kZXMoKSk7CisgICAgICAgIGRhdGFM
b2dGKCJBcnJheSBwcm9maWxlIGZvciBiYyMldTogJXAlcyVzLCAldVxuIiwgbV9jdXJyZW50SW5k
ZXgsIHByb2ZpbGUtPmV4cGVjdGVkU3RydWN0dXJlKCksIHByb2ZpbGUtPnN0cnVjdHVyZUlzUG9s
eW1vcnBoaWMobG9ja2VyKSA/ICIgKHBvbHltb3JwaGljKSIgOiAiIiwgcHJvZmlsZS0+bWF5SW50
ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKGxvY2tlcikgPyAiIChtYXkgaW50ZXJjZXB0KSIgOiAiIiwg
cHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKGxvY2tlcikpOwogI2VuZGlmCiAgICAgICAgIAog
ICAgICAgICBib29sIG1ha2VTYWZlID0KICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCi0gICAg
ICAgICAgICB8fCBwcm9maWxlLT5vdXRPZkJvdW5kcygpOworICAgICAgICAgICAgfHwgcHJvZmls
ZS0+b3V0T2ZCb3VuZHMobG9ja2VyKTsKICAgICAgICAgCi0gICAgICAgIEFycmF5TW9kZSByZXN1
bHQgPSBBcnJheU1vZGU6OmZyb21PYnNlcnZlZChwcm9maWxlLCBhY3Rpb24sIG1ha2VTYWZlKTsK
KyAgICAgICAgQXJyYXlNb2RlIHJlc3VsdCA9IEFycmF5TW9kZTo6ZnJvbU9ic2VydmVkKGxvY2tl
ciwgcHJvZmlsZSwgYWN0aW9uLCBtYWtlU2FmZSk7CiAgICAgICAgIAotICAgICAgICBpZiAocHJv
ZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKQorICAgICAgICBpZiAocHJvZmlsZS0+aGFzRGVm
aW5pdGVTdHJ1Y3R1cmUobG9ja2VyKQogICAgICAgICAgICAgJiYgcmVzdWx0LmJlbmVmaXRzRnJv
bVN0cnVjdHVyZUNoZWNrKCkKICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpCi0gICAgICAg
ICAgICBhZGRUb0dyYXBoKENoZWNrU3RydWN0dXJlLCBPcEluZm8obV9ncmFwaC5hZGRTdHJ1Y3R1
cmVTZXQocHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUoKSkpLCBiYXNlKTsKKyAgICAgICAgICAg
IGFkZFRvR3JhcGgoQ2hlY2tTdHJ1Y3R1cmUsIE9wSW5mbyhtX2dyYXBoLmFkZFN0cnVjdHVyZVNl
dChwcm9maWxlLT5leHBlY3RlZFN0cnVjdHVyZShsb2NrZXIpKSksIGJhc2UpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC0xNzc5LDcgKzE3ODMsNyBAQCBOb2Rl
KiBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoYm9vbCBza2lwCiBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZVJlc29sdmVPcGVyYXRpb25zKFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIHVuc2ln
bmVkIGlkZW50aWZpZXIsIFJlc29sdmVPcGVyYXRpb25zKiByZXNvbHZlT3BlcmF0aW9ucywgUHV0
VG9CYXNlT3BlcmF0aW9uKiBwdXRUb0Jhc2VPcGVyYXRpb24sIE5vZGUqKiBiYXNlLCBOb2RlKiog
dmFsdWUpCiB7CiAgICAgewotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIobV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tM
b2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsK
ICAgICAgCiAgICAgICAgIGlmICghcmVzb2x2ZU9wZXJhdGlvbnMtPm1fcmVhZHkpIHsKICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKQEAgLTIwMTUsOSArMjAxOSwxMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNhc2Ugb3Bf
Y29udmVydF90aGlzOiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUaGlzKCk7CiAgICAg
ICAgICAgICBpZiAob3AxLT5vcCgpICE9IENvbnZlcnRUaGlzKSB7CisgICAgICAgICAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0KICAgICAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVBy
b2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7Ci0gICAgICAg
ICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAjaWYgREZH
X0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJbYmMjJXVd
OiBwcm9maWxlICVwOiAiLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCwgcHJvZmlsZSk7CiAgICAg
ICAgICAgICAgICAgcHJvZmlsZS0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwpAQCAtMjExMyw4ICsy
MTE4LDkgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9nZXRfY2FsbGVlOiB7CisgICAgICAg
ICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51LnByb2ZpbGU7Ci0gICAgICAgICAgICBwcm9maWxlLT5jb21wdXRl
VXBkYXRlZFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIpOwogICAgICAgICAgICAgaWYgKHByb2ZpbGUtPm1fc2luZ2xldG9u
VmFsdWVJc1RvcAogICAgICAgICAgICAgICAgIHx8ICFwcm9maWxlLT5tX3NpbmdsZXRvblZhbHVl
CiAgICAgICAgICAgICAgICAgfHwgIXByb2ZpbGUtPm1fc2luZ2xldG9uVmFsdWUuaXNDZWxsKCkp
CkBAIC0zMTc3LDcgKzMxODMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBQdXRUb0Jhc2VPcGVyYXRpb24qIHB1dFRvQmFzZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51LnB1dFRvQmFzZU9wZXJhdGlvbjsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFwdXRUb0Jh
c2UtPm1fcmVhZHkpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4
aXQpOwpAQCAtMzQ5MywxMSArMzQ5OSwxNSBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lCiAgICAgLCBtX2V4aXRQcm9maWxlKHByb2ZpbGVkQmxvY2stPmV4aXRQcm9m
aWxlKCkpCiAgICAgLCBtX2NhbGxzaXRlQmxvY2tIZWFkKGNhbGxzaXRlQmxvY2tIZWFkKQogICAg
ICwgbV9yZXR1cm5WYWx1ZShyZXR1cm5WYWx1ZVZSKQotICAgICwgbV9sYXp5T3BlcmFuZHMocHJv
ZmlsZWRCbG9jay0+bGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGVzKCkpCiAgICAgLCBtX2RpZFJldHVy
bihmYWxzZSkKICAgICAsIG1fZGlkRWFybHlSZXR1cm4oZmFsc2UpCiAgICAgLCBtX2NhbGxlcihi
eXRlQ29kZVBhcnNlci0+bV9pbmxpbmVTdGFja1RvcCkKIHsKKyAgICB7CisgICAgICAgIENvZGVC
bG9ja0xvY2tlciBsb2NrZXIobV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICBtX2xh
enlPcGVyYW5kcy5pbml0aWFsaXplKGxvY2tlciwgbV9wcm9maWxlZEJsb2NrLT5sYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZXMoKSk7CisgICAgfQorICAgIAogICAgIG1fYXJndW1lbnRQb3NpdGlvbnMu
cmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzOyArK2kpIHsKICAgICAgICAgYnl0ZUNvZGVQ
YXJzZXItPm1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5hcHBlbmQoQXJndW1lbnRQb3NpdGlv
bigpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEzLDE5ICs3MTMsMTkgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChjb2RlQmxvY2soKS0+aWRl
bnRpZmllcihub2RlLT5pZGVudGlmaWVyTnVtYmVyKCkpICE9IHZtKCkucHJvcGVydHlOYW1lcy0+
bGVuZ3RoKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQ29kZUJsb2NrKiBw
cm9maWxlZEJsb2NrID0gbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3Jp
Z2luKTsKICAgICAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlID0gCi0gICAgICAg
ICAgICAgICAgbV9ncmFwaC5iYXNlbGluZUNvZGVCbG9ja0Zvcihub2RlLT5jb2RlT3JpZ2luKS0+
Z2V0QXJyYXlQcm9maWxlKAotICAgICAgICAgICAgICAgICAgICBub2RlLT5jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2stPmdldEFycmF5UHJv
ZmlsZShub2RlLT5jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgQXJyYXlN
b2RlIGFycmF5TW9kZSA9IEFycmF5TW9kZShBcnJheTo6U2VsZWN0VXNpbmdQcmVkaWN0aW9ucyk7
CiAgICAgICAgICAgICBpZiAoYXJyYXlQcm9maWxlKSB7Ci0gICAgICAgICAgICAgICAgYXJyYXlQ
cm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24obV9ncmFwaC5iYXNlbGluZUNvZGVCbG9j
a0Zvcihub2RlLT5jb2RlT3JpZ2luKSk7Ci0gICAgICAgICAgICAgICAgYXJyYXlNb2RlID0gQXJy
YXlNb2RlOjpmcm9tT2JzZXJ2ZWQoYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOwot
ICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUoCi0gICAgICAgICAg
ICAgICAgICAgIG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCksIG5vZGUtPnByZWRpY3Rpb24o
KSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5zdXBwb3J0c0xlbmd0aCgpICYmIGFy
cmF5UHJvZmlsZS0+aGFzRGVmaW5pdGVTdHJ1Y3R1cmUoKSkgeworICAgICAgICAgICAgICAgIENv
ZGVCbG9ja0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAg
ICAgICBhcnJheVByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIsIHByb2Zp
bGVkQmxvY2spOworICAgICAgICAgICAgICAgIGFycmF5TW9kZSA9IEFycmF5TW9kZTo6ZnJvbU9i
c2VydmVkKGxvY2tlciwgYXJyYXlQcm9maWxlLCBBcnJheTo6UmVhZCwgZmFsc2UpOworICAgICAg
ICAgICAgICAgIGFycmF5TW9kZSA9IGFycmF5TW9kZS5yZWZpbmUobm9kZS0+Y2hpbGQxKCktPnBy
ZWRpY3Rpb24oKSwgbm9kZS0+cHJlZGljdGlvbigpKTsKKyAgICAgICAgICAgICAgICBpZiAoYXJy
YXlNb2RlLnN1cHBvcnRzTGVuZ3RoKCkgJiYgYXJyYXlQcm9maWxlLT5oYXNEZWZpbml0ZVN0cnVj
dHVyZShsb2NrZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2Vy
dE5vZGUoCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY05vbmUs
IENoZWNrU3RydWN0dXJlLCBub2RlLT5jb2RlT3JpZ2luLAotICAgICAgICAgICAgICAgICAgICAg
ICAgT3BJbmZvKG1fZ3JhcGguYWRkU3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRT
dHJ1Y3R1cmUoKSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgT3BJbmZvKG1fZ3JhcGguYWRk
U3RydWN0dXJlU2V0KGFycmF5UHJvZmlsZS0+ZXhwZWN0ZWRTdHJ1Y3R1cmUobG9ja2VyKSkpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAkocmV2aXNpb24gMTQ4ODAzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw5ICszNywxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiB2b2lkIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKICAgICBmb3IgKDsgY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7
Ci0gICAgICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKQotICAgICAgICAgICAgLT5iYXNlbGluZUNv
ZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNh
bGwgOiBDb2RlRm9yQ29uc3RydWN0KQotICAgICAgICAgICAgLT5qaXRDb21waWxlKGV4ZWMpOwor
ICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPQorICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmV4ZWN1dGFibGUuZ2V0KCkpOworICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1
dGFibGUtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKAorICAgICAgICAgICAgY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCk7Cisg
ICAgICAgIAorICAgICAgICBjb2RlQmxvY2stPmppdENvbXBpbGUoZXhlYyk7CiAgICAgfQogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNDg4MDMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ4LDE4ICs0OCwyNCBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVChtX2dyYXBo
Lm1fdW5pZmljYXRpb25TdGF0ZSA9PSBHbG9iYWxseVVuaWZpZWQpOwogICAgICAgICAKICAgICAg
ICAgQVNTRVJUKGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkgPj0gMSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGFyZyA9IDA7IGFyZyA8IHN0YXRpY19jYXN0PHNpemVfdD4oY29kZUJsb2NrKCkt
Pm51bVBhcmFtZXRlcnMoKSk7ICsrYXJnKSB7Ci0gICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHBy
b2ZpbGUgPSBwcm9maWxlZEJsb2NrKCktPnZhbHVlUHJvZmlsZUZvckFyZ3VtZW50KGFyZyk7Ci0g
ICAgICAgICAgICBpZiAoIXByb2ZpbGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jaygp
LT5tX2xvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBhcmcgPSAw
OyBhcmcgPCBzdGF0aWNfY2FzdDxzaXplX3Q+KGNvZGVCbG9jaygpLT5udW1QYXJhbWV0ZXJzKCkp
OyArK2FyZykgeworICAgICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9IHByb2Zp
bGVkQmxvY2soKS0+dmFsdWVQcm9maWxlRm9yQXJndW1lbnQoYXJnKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIXByb2ZpbGUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0KHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbigpKTsKKyAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0KAorICAgICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRl
ZFByZWRpY3Rpb24obG9ja2VyKSk7CiAgICAgICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCi0gICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICJBcmd1bWVu
dCBbIiwgYXJnLCAiXSBwcmVkaWN0aW9uOiAiLAotICAgICAgICAgICAgICAgIFNwZWN1bGF0aW9u
RHVtcChtX2dyYXBoLm1fYXJndW1lbnRzW2FyZ10tPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCkpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKAorICAgICAgICAgICAg
ICAgICAgICAiQXJndW1lbnQgWyIsIGFyZywgIl0gcHJlZGljdGlvbjogIiwKKyAgICAgICAgICAg
ICAgICAgICAgU3BlY3VsYXRpb25EdW1wKG1fZ3JhcGgubV9hcmd1bWVudHNbYXJnXS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSksCisgICAgICAgICAgICAgICAgICAgICJcbiIp
OwogI2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZv
ciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCShyZXZpc2lvbiAxNDg4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDMzLDkgKzQzMywx
MCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJyYXlQcm9maWxlU2F3KEFycmF5CiAKIGlubGluZSBK
SVRBcnJheU1vZGUgSklUOjpjaG9vc2VBcnJheU1vZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlKQog
ewotI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikgICAgICAgIAotICAgIHByb2ZpbGUtPmNvbXB1
dGVVcGRhdGVkUHJlZGljdGlvbihtX2NvZGVCbG9jayk7Ci0gICAgQXJyYXlNb2RlcyBhcnJheU1v
ZGVzID0gcHJvZmlsZS0+b2JzZXJ2ZWRBcnJheU1vZGVzKCk7CisjaWYgRU5BQkxFKFZBTFVFX1BS
T0ZJTEVSKQorICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIobV9jb2RlQmxvY2stPm1fbG9jayk7
CisgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlciwgbV9jb2RlQmxv
Y2spOworICAgIEFycmF5TW9kZXMgYXJyYXlNb2RlcyA9IHByb2ZpbGUtPm9ic2VydmVkQXJyYXlN
b2Rlcyhsb2NrZXIpOwogICAgIGlmIChhcnJheVByb2ZpbGVTYXcoYXJyYXlNb2RlcywgRG91Ymxl
U2hhcGUpKQogICAgICAgICByZXR1cm4gSklURG91YmxlOwogICAgIGlmIChhcnJheVByb2ZpbGVT
YXcoYXJyYXlNb2RlcywgSW50MzJTaGFwZSkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0NCw3ICs4NDQsNyBAQCB2b2lk
IHBlcmZvcm1QbGF0Zm9ybVNwZWNpZmljSklUQXNzZXJ0aW9uCiAKIE5FVkVSX0lOTElORSBzdGF0
aWMgdm9pZCB0cnlDYWNoZVB1dEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIENvZGVCbG9jayog
Y29kZUJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpTVmFsdWUgYmFzZVZh
bHVlLCBjb25zdCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgYm9vbCBkaXJlY3QpCiB7Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9s
b2NrKTsKICAgICAKICAgICAvLyBUaGUgaW50ZXJwcmV0ZXIgY2hlY2tzIGZvciByZWN1cnNpb24g
aGVyZTsgSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGNhbiBvY2N1ciBpbiBDVEkuCiAKQEAgLTkwMCw3
ICs5MDAsNyBAQCBORVZFUl9JTkxJTkUgc3RhdGljIHZvaWQgdHJ5Q2FjaGVQdXRCeUlECiAKIE5F
VkVSX0lOTElORSBzdGF0aWMgdm9pZCB0cnlDYWNoZUdldEJ5SUQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIENvZGVCbG9jayogY29kZUJsb2NrLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Ms
IEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvKQogewotICAg
IENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgQ29kZUJs
b2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgCiAgICAgLy8gRklYTUU6
IFdyaXRlIGEgdGVzdCB0aGF0IHByb3ZlcyB3ZSBuZWVkIHRvIGNoZWNrIGZvciByZWN1cnNpb24g
aGVyZSBqdXN0CiAgICAgLy8gbGlrZSB0aGUgaW50ZXJwcmV0ZXIgZG9lcywgdGhlbiBhZGQgYSBj
aGVjayBmb3IgcmVjdXJzaW9uLgpAQCAtMTU5MCw3ICsxNTkwLDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwog
Ci0gICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBD
b2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAKICAgICBpZiAo
YmFzZVZhbHVlLmlzQ2VsbCgpCiAgICAgICAgICYmIHNsb3QuaXNDYWNoZWFibGUoKQpAQCAtMTcw
OSw3ICsxNzA5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgQ29k
ZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBDb2RlQmxvY2tM
b2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCk7CiAKQEAgLTIxNzIsNyAr
MjE3Miw3IEBAIGlubGluZSB2b2lkKiBsYXp5TGlua0ZvcihDYWxsRnJhbWUqIGNhbGwKICAgICAg
ICAgICAgIGNvZGVQdHIgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmdlbmVyYXRlZEpJVENvZGVGb3Io
a2luZCktPmFkZHJlc3NGb3JDYWxsKCk7CiAgICAgfQogCi0gICAgQ29kZUJsb2NrOjpMb2NrZXIg
bG9ja2VyKGNhbGxGcmFtZS0+Y2FsbGVyRnJhbWUoKS0+Y29kZUJsb2NrKCktPm1fbG9jayk7Cisg
ICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNhbGxlckZyYW1lKCktPmNvZGVC
bG9jaygpLT5tX2xvY2spOwogICAgIGlmICghY2FsbExpbmtJbmZvLT5zZWVuT25jZSgpKQogICAg
ICAgICBjYWxsTGlua0luZm8tPnNldFNlZW4oKTsKICAgICBlbHNlCkBAIC0yMjQ4LDcgKzIyNDgs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgdm1fbGF6eUxpbmtDCiAgICAgCiAgICAg
aWYgKHNob3VsZExpbmspIHsKICAgICAgICAgQVNTRVJUKGNvZGVQdHIpOwotICAgICAgICBDb2Rl
QmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbGVyQ29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICBD
b2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNhbGxlckNvZGVCbG9jay0+bV9sb2NrKTsKICAgICAgICAg
SklUOjpjb21waWxlQ2xvc3VyZUNhbGwodm0sIGNhbGxMaW5rSW5mbywgY2FsbGVyQ29kZUJsb2Nr
LCBjYWxsZWVDb2RlQmxvY2ssIHN0cnVjdHVyZSwgZXhlY3V0YWJsZSwgY29kZVB0cik7CiAgICAg
ICAgIGNhbGxMaW5rSW5mby0+aGFzU2VlbkNsb3N1cmUgPSB0cnVlOwogICAgIH0gZWxzZQpAQCAt
MjM5NSw3ICsyMzk1LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNTY29wZTo6cmVzb2x2ZShjYWxsRnJhbWUsIHN0YWNr
RnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksIG9wZXJhdGlvbnMpOwogICAgIAogICAgIGlmICh3
aWxsUmVpZnkpIHsKLSAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY2Fs
bEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFk
eSA9IHRydWU7CiAgICAgfQogICAgIApAQCAtMjQxNSw3ICsyNDE1LDcgQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfcHV0X3RvX2JhcwogICAgIEpTU2NvcGU6OnJlc29sdmVQdXQoY2Fs
bEZyYW1lLCBiYXNlLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaWRlbnRpZmllcigpLCB2YWx1ZSwgb3Bl
cmF0aW9uKTsKICAgICAKICAgICBpZiAoZmlyc3RUaW1lKSB7Ci0gICAgICAgIENvZGVCbG9jazo6
TG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBD
b2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAg
ICAgICAgIG9wZXJhdGlvbi0+bV9yZWFkeSA9IHRydWU7CiAgICAgfQogCkBAIC0yNzUyLDcgKzI3
NTIsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNW
YWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlQmFzZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwg
c3RhY2tGcmFtZS5hcmdzWzBdLmlkZW50aWZpZXIoKSwgZmFsc2UsIG9wZXJhdGlvbnMsIHN0YWNr
RnJhbWUuYXJnc1syXS5wdXRUb0Jhc2VPcGVyYXRpb24oKSk7CiAgICAgCiAgICAgaWYgKHdpbGxS
ZWlmeSkgewotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9j
a2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAg
b3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7CiAgICAgfQogICAgIApAQCAtMjc2OSw3ICsyNzY5
LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIGlmIChK
U1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVCYXNlKHN0YWNrRnJhbWUuY2FsbEZyYW1l
LCBzdGFja0ZyYW1lLmFyZ3NbMF0uaWRlbnRpZmllcigpLCB0cnVlLCBvcGVyYXRpb25zLCBzdGFj
a0ZyYW1lLmFyZ3NbMl0ucHV0VG9CYXNlT3BlcmF0aW9uKCkpKSB7CiAgICAgICAgIAogICAgICAg
ICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIo
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICAgICAg
Q29kZUJsb2NrTG9ja2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+Y29kZUJsb2NrKCkt
Pm1fbG9jayk7CiAgICAgICAgICAgICBvcGVyYXRpb25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgICAgICAKQEAgLTMwNzYsNyArMzA3Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlz
RW1wdHkoKTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoQmFzZShj
YWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksICZjYWxsRnJhbWUtPnJl
Z2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSwgb3BlcmF0aW9ucywgc3RhY2tG
cmFtZS5hcmdzWzNdLnB1dFRvQmFzZU9wZXJhdGlvbigpKTsKICAgICBpZiAod2lsbFJlaWZ5KSB7
Ci0gICAgICAgIENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihzdGFja0ZyYW1lLmNhbGxGcmFtZS0+
Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOwogICAgICAgICBvcGVyYXRp
b25zLT5tX3JlYWR5ID0gdHJ1ZTsKICAgICB9CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9F
TkQoKTsKQEAgLTMwOTIsNyArMzA5Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KICAgICBib29sIHdpbGxSZWlmeSA9IG9wZXJhdGlvbnMtPmlzRW1wdHkoKTsK
ICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTU2NvcGU6OnJlc29sdmVXaXRoVGhpcyhjYWxsRnJhbWUs
IHN0YWNrRnJhbWUuYXJnc1swXS5pZGVudGlmaWVyKCksICZjYWxsRnJhbWUtPnJlZ2lzdGVycygp
W3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSwgb3BlcmF0aW9ucyk7CiAgICAgaWYgKHdpbGxS
ZWlmeSkgewotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoc3RhY2tGcmFtZS5jYWxs
RnJhbWUtPmNvZGVCbG9jaygpLT5tX2xvY2spOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9j
a2VyKHN0YWNrRnJhbWUuY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAg
b3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7CiAgICAgfQogICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE0ODgwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxNSw3ICs4MTUs
NyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZSkKICAgICB9CiAgICAg
CiAgICAgewotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2Nr
KCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJs
b2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAg
IH0KICAgICAKQEAgLTgzNyw3ICs4MzcsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3Bh
dGhfcHV0X3RvX2JhCiAgICAgfQogCiAgICAgewotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBs
b2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xvY2tl
ciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIG9wZXJhdGlvbi0+
bV9yZWFkeSA9IHRydWU7CiAgICAgfQogICAgIApAQCAtODc1LDcgKzg3NSw3IEBAIExMSU5UX1NM
T1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9yZXNvbHZlX2IKICAgICB9CiAgICAgCiAgICAgewotICAg
ICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7
CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9j
ayk7CiAgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KICAgICAKQEAg
LTkwMSw3ICs5MDEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcmVzb2x2ZV93
CiAgICAgYm9vbCB3aWxsUmVpZnkgPSBvcGVyYXRpb25zLT5pc0VtcHR5KCk7CiAgICAgSlNWYWx1
ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aEJhc2UoZXhlYywgZXhlYy0+Y29kZUJsb2Nr
KCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKSwgJkxMSU5UX09QKDEpLCBvcGVyYXRpb25z
LCBwY1s1XS51LnB1dFRvQmFzZU9wZXJhdGlvbik7CiAgICAgaWYgKHdpbGxSZWlmeSkgewotICAg
ICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9jayk7
CisgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoZXhlYy0+Y29kZUJsb2NrKCktPm1fbG9j
ayk7CiAgICAgICAgIG9wZXJhdGlvbnMtPm1fcmVhZHkgPSB0cnVlOwogICAgIH0KICAgICBMTElO
VF9DSEVDS19FWENFUFRJT04oKTsKQEAgLTkxNyw3ICs5MTcsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcmVzb2x2ZV93CiAgICAgYm9vbCB3aWxsUmVpZnkgPSBvcGVyYXRpb25z
LT5pc0VtcHR5KCk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Njb3BlOjpyZXNvbHZlV2l0aFRo
aXMoZXhlYywgZXhlYy0+Y29kZUJsb2NrKCktPmlkZW50aWZpZXIocGNbM10udS5vcGVyYW5kKSwg
JkxMSU5UX09QKDEpLCBvcGVyYXRpb25zKTsKICAgICBpZiAod2lsbFJlaWZ5KSB7Ci0gICAgICAg
IENvZGVCbG9jazo6TG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKKyAg
ICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihleGVjLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsK
ICAgICAgICAgb3BlcmF0aW9ucy0+bV9yZWFkeSA9IHRydWU7CiAgICAgfQogICAgIExMSU5UX0NI
RUNLX0VYQ0VQVElPTigpOwpAQCAtOTU3LDcgKzk1Nyw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9nZXRfYnlfaWQKICAgICAgICAgCiAgICAgICAgIGlmICghc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT50eXBl
SW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpKSB7Ci0gICAgICAgICAgICBDb2RlQmxv
Y2s6OkxvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgQ29kZUJs
b2NrTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIHBjWzRdLnUuc3RydWN0dXJlLnNldCgKICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKQEAgLTEwMjQsNyArMTAyNCw3IEBA
IExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICYm
IGJhc2VDZWxsID09IHNsb3QuYmFzZSgpKSB7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
IChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7Ci0gICAgICAg
ICAgICAgICAgQ29kZUJsb2NrOjpMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSAmJiBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSA9PSBz
dHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpLT50cmFuc2l0aW9uV2F0Y2hwb2ludFNldEhhc0Jl
ZW5JbnZhbGlkYXRlZCgpKTsKQEAgLTE0NjUsNyArMTQ2NSw3IEBAIGlubGluZSBTbG93UGF0aFJl
dHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAgICBpZiAoIUxMSU5UX0FMV0FZU19BQ0NFU1NfU0xP
VyAmJiBjYWxsTGlua0luZm8pIHsKICAgICAgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVyID0gZXhl
Y0NhbGxlZS0+Y2FsbGVyRnJhbWUoKTsKIAotICAgICAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2Nr
ZXIoZXhlY0NhbGxlci0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgIENvZGVCbG9ja0xv
Y2tlciBsb2NrZXIoZXhlY0NhbGxlci0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgICAgIAog
ICAgICAgICBpZiAoY2FsbExpbmtJbmZvLT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExp
bmtJbmZvLT5yZW1vdmUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwCShyZXZpc2lvbiAx
NDg4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29k
ZVNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDAsNyArNDAsOCBAQCBCeXRlY29kZVNlcXVl
bmNlOjpCeXRlY29kZVNlcXVlbmNlKENvZGVCCiAgICAgCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJ
TEVSKQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQXJn
dW1lbnRWYWx1ZVByb2ZpbGVzKCk7ICsraSkgewotICAgICAgICBDU3RyaW5nIGRlc2NyaXB0aW9u
ID0gY29kZUJsb2NrLT52YWx1ZVByb2ZpbGVGb3JBcmd1bWVudChpKS0+YnJpZWZEZXNjcmlwdGlv
bigpOworICAgICAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsK
KyAgICAgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGNvZGVCbG9jay0+dmFsdWVQcm9maWxlRm9y
QXJndW1lbnQoaSktPmJyaWVmRGVzY3JpcHRpb24obG9ja2VyKTsKICAgICAgICAgaWYgKCFkZXNj
cmlwdGlvbi5sZW5ndGgoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucmVz
ZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShy
ZXZpc2lvbiAxNDg4MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMzAxLDcgKzMwMSw3IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpM
b29rdXBNb2RlIG1vZGUsIEpTU2MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLT5hcHBlbmQoUmVzb2x2ZU9wZXJhdGlvbjo6Y2hlY2tGb3JEeW5hbWljRW50cmllc0JlZm9y
ZUdsb2JhbFNjb3BlKCkpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHV0VG9CYXNl
T3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29kZUJsb2NrOjpMb2Nr
ZXIgbG9ja2VyKGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ29kZUJsb2NrTG9ja2VyIGxvY2tlcihjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJhdGlvbi0+bV9pc0R5bmFtaWMgPSByZXF1aXJl
c0R5bmFtaWNDaGVja3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3Bl
cmF0aW9uLT5tX2tpbmQgPSBQdXRUb0Jhc2VPcGVyYXRpb246Okdsb2JhbFByb3BlcnR5UHV0OwpA
QCAtMzQ3LDcgKzM0Nyw3IEBAIHRlbXBsYXRlIDxKU1Njb3BlOjpMb29rdXBNb2RlIG1vZGUsIEpT
U2MKICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKIAogICAgICAgICAgICAgICAg
ICAgICBpZiAocHV0VG9CYXNlT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBD
b2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+bV9sb2NrKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIENvZGVCbG9ja0xvY2tlciBsb2NrZXIoY2FsbEZyYW1l
LT5jb2RlQmxvY2soKS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgICAgICAgICAgcHV0VG9CYXNlT3BlcmF0aW9uLT5tX2tpbmQgPSBlbnRyeS5pc1Jl
YWRPbmx5KCkgPyBQdXRUb0Jhc2VPcGVyYXRpb246OlJlYWRvbmx5IDogUHV0VG9CYXNlT3BlcmF0
aW9uOjpWYXJpYWJsZVB1dDsKICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFRvQmFzZU9wZXJh
dGlvbi0+bV9zdHJ1Y3R1cmUuc2V0KGNhbGxGcmFtZS0+dm0oKSwgY2FsbEZyYW1lLT5jb2RlQmxv
Y2soKS0+b3duZXJFeGVjdXRhYmxlKCksIGNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5hY3RpdmF0aW9uU3RydWN0dXJlKCkpOwpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgSlNTY29w
ZTo6cmVzb2x2ZVB1dChDYWxsRnJhbWUqIGNhbGwKICAgICBpZiAoc2xvdC5iYXNlKCkgIT0gYmFz
ZU9iamVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghYmFzZU9iamVjdC0+aGFzSW5s
aW5lU3RvcmFnZSgpKTsKLSAgICBDb2RlQmxvY2s6OkxvY2tlciBsb2NrZXIoY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+bV9sb2NrKTsKKyAgICBDb2RlQmxvY2tMb2NrZXIgbG9ja2VyKGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCktPm1fbG9jayk7CiAgICAgCiAgICAgb3BlcmF0aW9uLT5tX3N0cnVjdHVy
ZS5zZXQoY2FsbEZyYW1lLT52bSgpLCBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1
dGFibGUoKSwgYmFzZU9iamVjdC0+c3RydWN0dXJlKCkpOwogICAgIHNldFB1dFByb3BlcnR5QWNj
ZXNzT2Zmc2V0KG9wZXJhdGlvbiwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMTQ4ODAzKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyNCBAQAorMjAxMy0wNC0yMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIGZvdXJ0aFRpZXI6IHZhbHVlIHByb2ZpbGVzIGFuZCBhcnJheSBwcm9maWxlcyBz
aG91bGQgYmUgdGhyZWFkLXNhZmUgZW5vdWdoIHRvIGJlIGFjY2Vzc2libGUgaW4gYSBjb25jdXJy
ZW50IGNvbXBpbGF0aW9uIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTE0OTA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBBZGQgYWJpbGl0eSB0byBhYnN0cmFjdCB3aGV0aGVyIG9y
IG5vdCB0aGUgQ29kZUJsb2NrIHJlcXVpcmVzIGxvY2tpbmcgYXQgYWxsLAorICAgICAgICBzaW5j
ZSBzb21lIHBsYXRmb3JtcyBtYXkgbm90IHN1cHBvcnQgdGhlIGJ5dGUgc3Bpbi1sb2NraW5nIGFu
ZC9vciBtYXkgbm90IHdhbnQKKyAgICAgICAgdG8sIGlmIHRoZXkgdHVybiBvZmYgY29uY3VycmVu
dCBKSVQuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiB3dGYvQnl0ZVNwaW5Mb2NrLmg6CisgICAgICAgICogd3RmL05vTG9jay5oOiBBZGRlZC4K
KyAgICAgICAgKFdURik6CisgICAgICAgIChOb0xvY2spOgorICAgICAgICAoV1RGOjpOb0xvY2s6
OmxvY2spOgorICAgICAgICAoV1RGOjpOb0xvY2s6OnVubG9jayk6CisgICAgICAgIChXVEY6Ok5v
TG9jazo6aXNIZWxkKToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAxMy0wNC0xNyAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IGFs
bCBpbmxpbmUgY2FjaGVzIHNob3VsZCB0aHJlYWQtc2FmZSBlbm91Z2ggdG8gYWxsb3cgYSBjb25j
dXJyZW50IGNvbXBpbGF0aW9uIHRocmVhZCB0byByZWFkIHRoZW0gc2FmZWx5CkluZGV4OiBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0ODgwMykKKysr
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTIxLDYgKzIxLDcgQEAKIC8qIEVuZCBQQlhBZ2dyZWdhdGVUYXJnZXQgc2VjdGlvbiAqLwog
CiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkwRjBEODVCNDE3MjM0Q0MxMDAz
MzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgyMTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBG
ODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyog
UmF3UG9pbnRlci5oICovOyB9OwogCQkwRjlEMzM2MDE2NURCQTczMDA1QUQzODcgLyogRmlsZVBy
aW50U3RyZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOUQzMzVCMTY1REJBNzMwMDVBRDM4NyAvKiBGaWxlUHJpbnRTdHJlYW0uY3BwICovOyB9
OwogCQkwRjlEMzM2MTE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjlEMzM1QzE2NURCQTcz
MDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmggKi87IH07CkBAIC0zMzEsNiArMzMyLDcgQEAK
IC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhG
aWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5v
TG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBOb0xvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjlEMzM1QjE2NURCQTczMDA1QUQzODcgLyogRmlsZVByaW50U3RyZWFtLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbGVQcmludFN0cmVhbS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOUQzMzVDMTY1REJBNzMwMDVBRDM4
NyAvKiBGaWxlUHJpbnRTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RmlsZVByaW50U3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MDIsNiAr
ODA0LDcgQEAKIAkJCQlBOEE0NzJDRDE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvci5j
cHAgKi8sCiAJCQkJQThBNDcyQ0UxNTFBODI1QjAwNDEyM0ZGIC8qIE1ldGFBbGxvY2F0b3IuaCAq
LywKIAkJCQlBOEE0NzJDRjE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovLAorCQkJCTBGMEQ4NUIzMTcyMzRDQjEwMDMzODIxMCAvKiBOb0xvY2suaCAqLywKIAkJCQlB
OEE0NzJEMDE1MUE4MjVCMDA0MTIzRkYgLyogTm9uY29weWFibGUuaCAqLywKIAkJCQlBOEE0NzJE
MTE1MUE4MjVCMDA0MTIzRkYgLyogTm9uQ29weWluZ1NvcnQuaCAqLywKIAkJCQlBOEE0NzJEMjE1
MUE4MjVCMDA0MTIzRkYgLyogTm90Rm91bmQuaCAqLywKQEAgLTExNzMsNiArMTE3Niw3IEBACiAJ
CQkJNEZDRjI3RTExNjE3MkU4NjAwQ0JGMDM3IC8qIE1lbW9yeUluc3RydW1lbnRhdGlvblN0cmlu
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEZDQjcxMEExNjBBMUEwNzAwODQyNUVDIC8qIE1lbW9y
eUluc3RydW1lbnRhdGlvblZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjMyMkNDRTExNjU2
OUExMDAwNDg1MkREIC8qIE1lbW9yeU9iamVjdEluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MEQ4NUI0MTcyMzRDQzEwMDMzODIxMCAvKiBOb0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3M0VCMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXNzYWdlUXVldWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3M0VEMTUxQTgyNUIwMDQxMjNGRiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBOEE0NzNFRTE1MUE4MjVCMDA0MTIzRkYgLyogTWV0YUFsbG9jYXRvckhhbmRs
ZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlU3BpbkxvY2suaAkocmV2aXNpb24gMTQ4
ODAzKQorKysgU291cmNlL1dURi93dGYvQnl0ZVNwaW5Mb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9Ob0xvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Ob0xvY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL05vTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBOb0xvY2tfaAorI2RlZmluZSBOb0xvY2tfaAorCisjaW5jbHVkZSA8d3RmL0xv
Y2tlci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTm9Mb2NrIHsKK3B1YmxpYzoKKyAg
ICB2b2lkIGxvY2soKSB7IH0KKyAgICB2b2lkIHVubG9jaygpIHsgfQorICAgIGJvb2wgaXNIZWxk
KCkgeyByZXR1cm4gZmFsc2U7IH0KK307CisKK3R5cGVkZWYgTG9ja2VyPE5vTG9jaz4gTm9Mb2Nr
TG9ja2VyOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpOb0xvY2s7Cit1c2lu
ZyBXVEY6Ok5vTG9ja0xvY2tlcjsKKworI2VuZGlmIC8vIE5vTG9ja19oCisKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZv
cm0uaAkocmV2aXNpb24gMTQ4ODAzKQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29y
a2luZyBjb3B5KQpAQCAtODA4LDcgKzgwOCwxNSBAQAogI2VuZGlmCiAjZW5kaWYKIAotI2lmIENQ
VShYODZfNjQpICYmIFBMQVRGT1JNKE1BQykKKy8qIENvbmN1cnJlbnQgSklUIG9ubHkgd29ya3Mg
b24gNjQtYml0IHBsYXRmb3JtcyBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoYXQKKyAgIHZhbHVlcyBn
ZXQgc3RvcmVkIHRvIGF0b21pY2FsbHkuIFRoaXMgaXMgdHJpdmlhbGx5IHRydWUgb24gNjQtYml0
IHBsYXRmb3JtcywKKyAgIGJ1dCBub3QgdHJ1ZSBhdCBhbGwgb24gMzItYml0IHBsYXRmb3JtcyB3
aGVyZSB2YWx1ZXMgYXJlIGNvbXBvc2VkIG9mIHR3bworICAgc2VwYXJhdGUgc3ViLXZhbHVlcy4g
Ki8KKyNpZiBQTEFURk9STShNQUMpICYmIEVOQUJMRShERkdfSklUKSAmJiBVU0UoSlNWQUxVRTY0
KQorI2RlZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KSVQgMQorI2VuZGlmCisKKyNpZiBDUFUoWDg2
XzY0KSAmJiBQTEFURk9STShNQUMpICYmIEVOQUJMRShERkdfSklUKQogI2RlZmluZSBFTkFCTEVf
RlRMX0pJVCAxCiAjZW5kaWYKIAo=
</data>
<flag name="review"
          id="220633"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>