<?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>149727</bug_id>
          
          <creation_ts>2015-10-01 15:20:47 -0700</creation_ts>
          <short_desc>CodeBlock should be a GC object</short_desc>
          <delta_ts>2015-10-19 07:21:49 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>149787</dependson>
    
    <dependson>149833</dependson>
    
    <dependson>150330</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1130053</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-01 15:20:47 -0700</bug_when>
    <thetext>CodeBlock should be a GC object</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130072</commentid>
    <comment_count>1</comment_count>
      <attachid>262294</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-01 16:04:10 -0700</bug_when>
    <thetext>Created attachment 262294
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130090</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-01 16:48:55 -0700</bug_when>
    <thetext>Benchmarks look OK:

run-jsc-benchmarks Baseline:/Volumes/Big/ggaren/OpenSource/WebKitBuild/Release/jsc Patch:/Volumes/Big/ggaren/OpenSource/WebKitBuildPatch/Release/jsc 
Warning: could not identify checkout location for Patch
Warning: refusing to run JSBench because not all VMs are DumpRenderTree or WebKitTestRunner.
Warning: refusing to run DSPJS because not all VMs are DumpRenderTree or WebKitTestRunner.
3948/3948                                                                                          
Generating benchmark report at /Volumes/Big/ggaren/Internal/Baseline_Patch_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_Geoffrey-Garens-Mac-Pro_20151001_1640_report.txt
And raw data at /Volumes/Big/ggaren/Internal/Baseline_Patch_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_Geoffrey-Garens-Mac-Pro_20151001_1640.json

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on Geoffrey-Garens-Mac-Pro (MacPro6,1).

VMs tested:
&quot;Baseline&quot; at /Volumes/Big/ggaren/OpenSource/WebKitBuild/Release/jsc (r190434)
&quot;Patch&quot; at /Volumes/Big/ggaren/OpenSource/WebKitBuildPatch/Release/jsc

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

                                                         Baseline                   Patch                                       
SunSpider:
   3d-cube                                            6.2775+-0.6658     ?      6.6718+-0.3185        ? might be 1.0628x slower
   3d-morph                                           6.2292+-0.1433     ?      6.4460+-0.3614        ? might be 1.0348x slower
   3d-raytrace                                        7.2800+-0.4161            7.2350+-0.2133        
   access-binary-trees                                2.5983+-0.1434     ?      2.6292+-0.1733        ? might be 1.0119x slower
   access-fannkuch                                    6.6703+-0.1317            6.6089+-0.0412        
   access-nbody                                       3.3793+-0.1078            3.3207+-0.0091          might be 1.0176x faster
   access-nsieve                                      3.9557+-0.3044     ?      3.9872+-0.3769        ?
   bitops-3bit-bits-in-byte                           1.5576+-0.0900            1.5324+-0.0744          might be 1.0164x faster
   bitops-bits-in-byte                                3.9058+-0.0811            3.8419+-0.0802          might be 1.0166x faster
   bitops-bitwise-and                                 2.3977+-0.0774            2.3818+-0.0857        
   bitops-nsieve-bits                                 3.6783+-0.1034            3.5031+-0.1396          might be 1.0500x faster
   controlflow-recursive                              2.8870+-0.1098     ?      2.9120+-0.1326        ?
   crypto-aes                                         5.4173+-1.0386            5.1162+-0.1883          might be 1.0588x faster
   crypto-md5                                         3.1253+-0.0389     ?      3.2016+-0.3115        ? might be 1.0244x slower
   crypto-sha1                                        3.0265+-0.1650            3.0228+-0.0416        
   date-format-tofte                                 10.5389+-0.6195           10.4158+-0.7515          might be 1.0118x faster
   date-format-xparb                                  6.0970+-0.4158            5.8134+-0.1323          might be 1.0488x faster
   math-cordic                                        3.5930+-0.3153            3.5089+-0.1404          might be 1.0240x faster
   math-partial-sums                                  6.1198+-0.1500     ?      6.2035+-0.2915        ? might be 1.0137x slower
   math-spectral-norm                                 2.4244+-0.0473            2.3832+-0.0182          might be 1.0173x faster
   regexp-dna                                         7.4500+-0.3044     ?      7.6661+-0.2346        ? might be 1.0290x slower
   string-base64                                      5.1160+-0.1801            5.1045+-0.0293        
   string-fasta                                       6.9515+-0.0521            6.8380+-0.1036          might be 1.0166x faster
   string-tagcloud                                    9.4554+-0.0829     ?      9.5539+-0.3251        ? might be 1.0104x slower
   string-unpack-code                                21.2407+-0.2838     ?     22.1588+-1.3699        ? might be 1.0432x slower
   string-validate-input                              5.3421+-0.1343     ?      5.3810+-0.1155        ?

   &lt;arithmetic&gt;                                       5.6429+-0.0453     ?      5.6707+-0.0584        ? might be 1.0049x slower

                                                         Baseline                   Patch                                       
LongSpider:
   3d-cube                                          948.3625+-13.8982         944.1458+-10.2508       
   3d-morph                                        1628.0513+-7.4887         1623.2674+-3.8745        
   3d-raytrace                                      773.3165+-71.8734         719.7407+-1.4449          might be 1.0744x faster
   access-binary-trees                              988.1111+-7.6847          983.3155+-0.5521        
   access-fannkuch                                  348.3901+-12.1349    ?    350.0629+-4.2421        ?
   access-nbody                                     632.0286+-6.1687          629.1475+-1.3202        
   access-nsieve                                    460.5578+-12.2511         460.3912+-3.8565        
   bitops-3bit-bits-in-byte                          41.9998+-0.7420           41.4489+-0.5389          might be 1.0133x faster
   bitops-bits-in-byte                               92.6965+-2.0083     ?     93.2070+-0.8472        ?
   bitops-nsieve-bits                               460.9541+-5.6460     ?    461.7214+-5.9042        ?
   controlflow-recursive                            486.7307+-3.6640     ?    487.6119+-2.2240        ?
   crypto-aes                                       680.4395+-13.9022    ^    650.7342+-4.6876        ^ definitely 1.0456x faster
   crypto-md5                                       551.8985+-8.6245          550.4079+-8.8076        
   crypto-sha1                                      756.5427+-3.5392          752.5689+-6.1289        
   date-format-tofte                                782.6442+-55.9452         768.5128+-7.2915          might be 1.0184x faster
   date-format-xparb                                840.6130+-27.2268         829.2029+-35.0939         might be 1.0138x faster
   hash-map                                         169.8828+-2.7372     ?    170.4758+-1.6566        ?
   math-cordic                                      566.3165+-0.4820     ?    569.5576+-4.9034        ?
   math-partial-sums                                639.4128+-2.0071     ?    641.3423+-7.7284        ?
   math-spectral-norm                               598.8356+-3.4151          598.8104+-5.2283        
   string-base64                                    427.4105+-6.1631     ?    430.2979+-1.8262        ?
   string-fasta                                     424.4388+-1.9554     ?    427.7232+-9.2031        ?
   string-tagcloud                                  207.6817+-1.4614     ?    208.2306+-1.7075        ?

   &lt;geometric&gt;                                      468.7643+-1.8698     ^    465.8888+-0.9803        ^ definitely 1.0062x faster

                                                         Baseline                   Patch                                       
V8Spider:
   crypto                                            57.0146+-0.4686     ?     57.8770+-0.5577        ? might be 1.0151x slower
   deltablue                                         71.4997+-2.9909           70.4665+-3.5836          might be 1.0147x faster
   earley-boyer                                      50.0605+-1.5916           50.0333+-0.9189        
   raytrace                                          34.0609+-0.9655     ?     34.2090+-0.1717        ?
   regexp                                            77.6383+-0.7919           77.6210+-0.7429        
   richards                                          61.2618+-1.0464           60.3810+-0.8346          might be 1.0146x faster
   splay                                             40.7216+-1.2915           40.5608+-0.4406        

   &lt;geometric&gt;                                       54.0368+-0.3378           53.9279+-0.5044          might be 1.0020x faster

                                                         Baseline                   Patch                                       
Octane:
   encrypt                                           0.22037+-0.00439    ?     0.22400+-0.00852       ? might be 1.0165x slower
   decrypt                                           4.33034+-0.47076          4.15242+-0.01362         might be 1.0428x faster
   deltablue                                x2       0.16550+-0.00305          0.16437+-0.00274       
   earley                                            0.37378+-0.00546    ^     0.36613+-0.00171       ^ definitely 1.0209x faster
   boyer                                             5.56604+-0.04213    ^     5.45847+-0.02093       ^ definitely 1.0197x faster
   navier-stokes                            x2       5.46657+-0.02092          5.45423+-0.00835       
   raytrace                                 x2       1.08186+-0.01591          1.06843+-0.01098         might be 1.0126x faster
   richards                                 x2       0.10801+-0.00174    ?     0.10938+-0.00248       ? might be 1.0127x slower
   splay                                    x2       0.38683+-0.00443    ?     0.38724+-0.00285       ?
   regexp                                   x2      28.57546+-0.20305    ?    28.92783+-1.11953       ? might be 1.0123x slower
   pdfjs                                    x2      46.03756+-2.45630         44.63738+-0.07623         might be 1.0314x faster
   mandreel                                 x2      51.10060+-0.35287         51.01117+-0.23256       
   gbemu                                    x2      43.73183+-7.05689    ?    46.40739+-6.42973       ? might be 1.0612x slower
   closure                                           0.77541+-0.00204          0.77453+-0.00585       
   jquery                                            9.75749+-0.07167    ?     9.79004+-0.08582       ?
   box2d                                    x2      12.48350+-0.34167         12.44566+-0.21394       
   zlib                                     x2     428.84007+-31.77498   ?   439.66968+-2.31609       ? might be 1.0253x slower
   typescript                               x2     900.32397+-6.10328    ?   903.39825+-8.27794       ?

   &lt;geometric&gt;                                       6.65671+-0.08755    ?     6.66876+-0.07193       ? might be 1.0018x slower

                                                         Baseline                   Patch                                       
Kraken:
   ai-astar                                          159.984+-3.475      ?     160.918+-1.575         ?
   audio-beat-detection                               60.006+-0.794             59.168+-0.504           might be 1.0142x faster
   audio-dft                                         112.328+-1.745      ?     112.353+-1.104         ?
   audio-fft                                          43.607+-1.899      ?      44.047+-2.077         ? might be 1.0101x slower
   audio-oscillator                                   71.248+-0.285             71.244+-0.543         
   imaging-darkroom                                   74.616+-2.073             74.014+-0.848         
   imaging-desaturate                                 64.239+-1.285      ?      64.284+-1.136         ?
   imaging-gaussian-blur                             111.102+-1.615      ?     111.947+-3.814         ?
   json-parse-financial                               49.308+-1.124             49.159+-0.891         
   json-stringify-tinderbox                           29.447+-0.739      ?      29.709+-1.528         ?
   stanford-crypto-aes                                49.333+-1.887             48.796+-0.585           might be 1.0110x faster
   stanford-crypto-ccm                                46.722+-3.919             45.874+-2.260           might be 1.0185x faster
   stanford-crypto-pbkdf2                            109.380+-1.701      ?     109.404+-1.647         ?
   stanford-crypto-sha256-iterative                   43.696+-0.738      ?      44.004+-0.888         ?

   &lt;arithmetic&gt;                                       73.215+-0.437             73.209+-0.219           might be 1.0001x faster

                                                         Baseline                   Patch                                       
JSRegress:
   abc-forward-loop-equal                            48.1733+-0.4926     ?     48.7878+-1.5210        ? might be 1.0128x slower
   abc-postfix-backward-loop                         47.9703+-0.4161     ?     48.3788+-1.3465        ?
   abc-simple-backward-loop                          47.8145+-0.8021           47.6791+-0.5479        
   abc-simple-forward-loop                           48.0798+-0.4844     ?     48.0970+-0.5836        ?
   abc-skippy-loop                                   32.6957+-0.2193           32.5074+-0.1606        
   abs-boolean                                        2.9739+-0.0573     ?      2.9952+-0.1551        ?
   adapt-to-double-divide                            17.3635+-1.1897           17.0334+-0.7849          might be 1.0194x faster
   aliased-arguments-getbyval                         1.7083+-0.2548            1.5604+-0.2320          might be 1.0948x faster
   allocate-big-object                                2.6533+-0.1656     ?      2.7122+-0.1985        ? might be 1.0222x slower
   arguments-named-and-reflective                    10.9133+-0.3780           10.6337+-0.1584          might be 1.0263x faster
   arguments-out-of-bounds                           12.4462+-1.2316           12.3610+-0.5051        
   arguments-strict-mode                             10.0086+-0.5863            9.5724+-0.4820          might be 1.0456x faster
   arguments                                          8.8206+-0.3116            8.7220+-0.1344          might be 1.0113x faster
   arity-mismatch-inlining                            1.1892+-0.1243     ?      1.2205+-0.0488        ? might be 1.0263x slower
   array-access-polymorphic-structure                 7.9275+-0.1478     ?      8.3730+-0.9020        ? might be 1.0562x slower
   array-nonarray-polymorhpic-access                 30.6650+-1.3383     ?     31.1246+-2.1783        ? might be 1.0150x slower
   array-prototype-every                             87.2010+-0.8399     ?     93.4383+-7.6904        ? might be 1.0715x slower
   array-prototype-forEach                           86.4586+-0.8569           85.6453+-0.3606        
   array-prototype-map                               93.1442+-2.3679     ?     94.6332+-0.4690        ? might be 1.0160x slower
   array-prototype-reduce                            83.7321+-1.9393     ?     84.4662+-0.6559        ?
   array-prototype-reduceRight                       85.0991+-3.1277     ?     85.2499+-0.5081        ?
   array-prototype-some                              88.1509+-1.9254     ?     90.6353+-1.0435        ? might be 1.0282x slower
   array-splice-contiguous                           27.2108+-0.3130     ?     27.7177+-0.7004        ? might be 1.0186x slower
   array-with-double-add                              4.5692+-0.2973            4.5274+-0.1875        
   array-with-double-increment                        3.6255+-0.0507     ?      3.7270+-0.0947        ? might be 1.0280x slower
   array-with-double-mul-add                          5.5490+-0.2544            5.5093+-0.1212        
   array-with-double-sum                              3.5972+-0.0184            3.5707+-0.0152        
   array-with-int32-add-sub                           7.6524+-0.4104            7.4103+-0.0870          might be 1.0327x faster
   array-with-int32-or-double-sum                     3.8345+-0.1366            3.7272+-0.0571          might be 1.0288x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     32.0910+-0.2078     ?     32.3872+-0.4593        ?
   ArrayBuffer-DataView-alloc-long-lived             14.5005+-3.4044           13.8412+-0.4817          might be 1.0476x faster
   ArrayBuffer-Int32Array-byteOffset                  4.1541+-0.0608     ?      4.3722+-0.2773        ? might be 1.0525x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     33.4500+-0.5850     ?     33.5640+-0.6694        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     23.7939+-1.7872           22.4623+-0.9132          might be 1.0593x faster
   ArrayBuffer-Int8Array-alloc-long-lived            12.8217+-0.3537           12.6960+-0.2193        
   ArrayBuffer-Int8Array-alloc                       10.7596+-0.6363           10.7522+-0.2174        
   arrowfunction-call                                12.0214+-0.1199           11.9208+-0.2906        
   asmjs_bool_bug                                     8.6949+-0.3553            8.4747+-0.2221          might be 1.0260x faster
   assign-custom-setter-polymorphic                   3.4813+-0.2698     ?      3.5767+-0.5957        ? might be 1.0274x slower
   assign-custom-setter                               4.6575+-0.1976            4.5845+-0.0379          might be 1.0159x faster
   basic-set                                          9.1254+-0.3331            8.8819+-0.0677          might be 1.0274x faster
   big-int-mul                                        4.3792+-0.2199     ?      4.3819+-0.0596        ?
   boolean-test                                       3.4435+-0.0177     ?      3.5067+-0.1037        ? might be 1.0184x slower
   branch-fold                                        4.3670+-0.1344            4.1900+-0.1472          might be 1.0422x faster
   branch-on-string-as-boolean                       19.1403+-1.7936           18.4481+-0.3871          might be 1.0375x faster
   by-val-generic                                     2.9229+-0.1270            2.8683+-0.0889          might be 1.0190x faster
   call-spread-apply                                 32.6611+-0.6974     ?     32.9019+-1.2012        ?
   call-spread-call                                  25.4805+-0.5182     ?     25.6363+-0.3659        ?
   captured-assignments                               0.6873+-0.0474     ?      0.7053+-0.0064        ? might be 1.0261x slower
   cast-int-to-double                                 5.8935+-0.1194            5.8691+-0.0474        
   cell-argument                                      5.9977+-0.3833     ?      6.1124+-0.1758        ? might be 1.0191x slower
   cfg-simplify                                       3.1687+-0.0804            3.1218+-0.1131          might be 1.0150x faster
   chain-getter-access                                8.4382+-0.2739     ?      8.4410+-0.3506        ?
   cmpeq-obj-to-obj-other                            11.1719+-0.3460           11.0258+-0.0964          might be 1.0133x faster
   constant-test                                      5.5448+-0.1586            5.5101+-0.1361        
   create-lots-of-functions                          11.4666+-0.4398           11.0992+-0.2015          might be 1.0331x faster
   cse-new-array-buffer                               2.6579+-0.0796     ?      2.7902+-0.2243        ? might be 1.0498x slower
   cse-new-array                                      2.8026+-0.1279            2.7898+-0.1531        
   DataView-custom-properties                        40.6091+-1.3160     ^     38.1100+-0.5163        ^ definitely 1.0656x faster
   delay-tear-off-arguments-strictmode               14.6218+-0.4614           14.5753+-0.2446        
   deltablue-varargs                                231.1998+-7.0987          226.8958+-1.5291          might be 1.0190x faster
   destructuring-arguments                          189.0722+-1.8193     ?    192.9101+-9.8065        ? might be 1.0203x slower
   destructuring-parameters-overridden-by-function   
                                                      0.7294+-0.0354            0.7258+-0.0474        
   destructuring-swap                                 5.5851+-0.0975     ?      5.6238+-0.1012        ?
   direct-arguments-getbyval                          1.7508+-0.3019            1.4681+-0.0560          might be 1.1925x faster
   div-boolean-double                                 5.6905+-0.1159            5.6456+-0.0850        
   div-boolean                                        8.3577+-0.1022     ?      8.4834+-0.2970        ? might be 1.0150x slower
   double-get-by-val-out-of-bounds                    4.9658+-0.0867            4.9378+-0.3427        
   double-pollution-getbyval                          9.4207+-0.0747            9.4014+-0.1012        
   double-pollution-putbyoffset                       4.4037+-0.0208     ^      4.2715+-0.0572        ^ definitely 1.0309x faster
   double-real-use                                   30.8337+-0.5315           30.6395+-1.6630        
   double-to-int32-typed-array-no-inline              2.8370+-0.0428            2.8033+-0.0946          might be 1.0120x faster
   double-to-int32-typed-array                        2.6077+-0.1664            2.5234+-0.0382          might be 1.0334x faster
   double-to-uint32-typed-array-no-inline             2.8784+-0.0729            2.8043+-0.0216          might be 1.0264x faster
   double-to-uint32-typed-array                       2.5862+-0.0695            2.5485+-0.0677          might be 1.0148x faster
   elidable-new-object-dag                           39.8198+-1.0480           38.9198+-0.4754          might be 1.0231x faster
   elidable-new-object-roflcopter                    41.0151+-1.5438           39.9480+-0.2980          might be 1.0267x faster
   elidable-new-object-then-call                     33.5905+-3.4938           33.3638+-4.0954        
   elidable-new-object-tree                          43.0714+-1.3020     ?     43.6625+-1.9087        ? might be 1.0137x slower
   empty-string-plus-int                              5.6854+-0.2432            5.5699+-0.1672          might be 1.0207x faster
   emscripten-cube2hash                              40.8975+-1.3796     ?     40.9839+-0.6547        ?
   exit-length-on-plain-object                       17.4870+-0.9204     ?     17.5261+-0.6574        ?
   external-arguments-getbyval                        1.6404+-0.1453            1.6008+-0.1066          might be 1.0248x faster
   external-arguments-putbyval                        2.6304+-0.1110     ?      2.6577+-0.0898        ? might be 1.0104x slower
   fixed-typed-array-storage-var-index                1.5897+-0.0173     ?      1.6036+-0.0533        ?
   fixed-typed-array-storage                          1.2556+-0.1097            1.2228+-0.0407          might be 1.0268x faster
   Float32Array-matrix-mult                           5.0836+-0.0346     ?      5.1345+-0.0482        ? might be 1.0100x slower
   Float32Array-to-Float64Array-set                  57.3684+-0.6058     !     60.5980+-0.7180        ! definitely 1.0563x slower
   Float64Array-alloc-long-lived                     70.6350+-0.6985     ?     71.1781+-0.8354        ?
   Float64Array-to-Int16Array-set                    71.8549+-0.2512     ?     72.6398+-1.7540        ? might be 1.0109x slower
   fold-double-to-int                                15.0590+-0.5880           14.9340+-0.3413        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     10.7706+-0.5512     ?     10.8872+-0.5820        ? might be 1.0108x slower
   fold-get-by-id-to-multi-get-by-offset              9.4288+-0.3968     ?      9.5638+-0.5277        ? might be 1.0143x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.6718+-0.8182            7.5687+-0.6005          might be 1.0136x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.5100+-0.6571     ?      8.6046+-0.5643        ? might be 1.0111x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      9.8730+-0.6451     ?     10.1043+-0.6111        ? might be 1.0234x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      9.1805+-0.5109     ?      9.5077+-0.4611        ? might be 1.0356x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     13.4647+-0.1585     ?     13.8892+-0.3579        ? might be 1.0315x slower
   fold-put-by-id-to-multi-put-by-offset             11.2620+-1.0325     ?     11.5337+-1.2385        ? might be 1.0241x slower
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     11.1223+-1.0524     ?     11.4032+-1.1020        ? might be 1.0253x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     10.8582+-0.1088     ?     11.4390+-0.8248        ? might be 1.0535x slower
   fold-put-structure                                 7.8221+-0.4016     ?      7.8715+-0.1544        ?
   for-of-iterate-array-entries                      13.1499+-0.9729           12.9807+-1.0764          might be 1.0130x faster
   for-of-iterate-array-keys                          4.3878+-0.3332     ?      4.4071+-0.1268        ?
   for-of-iterate-array-values                        4.3165+-0.0875     ?      4.3667+-0.4943        ? might be 1.0116x slower
   fround                                            17.6073+-1.8887           16.9951+-0.3310          might be 1.0360x faster
   ftl-library-inlining-dataview                     74.0976+-18.6857          68.9834+-1.3709          might be 1.0741x faster
   ftl-library-inlining                             101.0350+-25.1238          88.8249+-19.9473         might be 1.1375x faster
   function-call                                     12.2509+-0.5516           12.1013+-0.3341          might be 1.0124x faster
   function-dot-apply                                 2.6177+-0.0380            2.6068+-0.0182        
   function-test                                      3.2160+-0.0971     ?      3.2610+-0.1941        ? might be 1.0140x slower
   function-with-eval                               113.0654+-4.7362     ?    113.3085+-1.1645        ?
   gcse-poly-get-less-obvious                        23.1465+-1.6000           22.6228+-0.7624          might be 1.0232x faster
   gcse-poly-get                                     27.8394+-4.3654     ?     29.0240+-1.0284        ? might be 1.0426x slower
   gcse                                               4.4309+-0.0281     ?      4.4918+-0.1193        ? might be 1.0137x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.0710+-0.2262            3.0101+-0.0826          might be 1.0202x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      5.7551+-0.1910     ?      5.7927+-0.1764        ?
   get-by-id-chain-from-try-block                     2.8081+-0.0456            2.7988+-0.1075        
   get-by-id-check-structure-elimination              4.9641+-0.0840     ?      5.0078+-0.0852        ?
   get-by-id-proto-or-self                           16.3629+-1.0311     ?     17.6642+-3.0419        ? might be 1.0795x slower
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.3820+-0.1570            3.2900+-0.0607          might be 1.0280x faster
   get-by-id-self-or-proto                           16.8414+-0.4407     ?     18.3796+-4.4423        ? might be 1.0913x slower
   get-by-val-out-of-bounds                           4.6690+-0.0618     ?      4.7620+-0.1044        ? might be 1.0199x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.9868+-0.0800     ?      3.0220+-0.1174        ? might be 1.0118x slower
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      7.3748+-0.1818     ?      7.5499+-0.3200        ? might be 1.0237x slower
   get-by-val-with-string-chain-from-try-block   
                                                      2.8719+-0.0624     ?      2.8907+-0.1205        ?
   get-by-val-with-string-check-structure-elimination   
                                                      6.5715+-0.1745     ?      6.5869+-0.2268        ?
   get-by-val-with-string-proto-or-self              19.3578+-3.2927           18.6616+-2.7892          might be 1.0373x faster
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.9891+-0.2579     ?      4.1105+-0.1186        ? might be 1.0304x slower
   get-by-val-with-string-self-or-proto              18.6765+-2.8683     ?     18.7079+-2.4331        ?
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      3.5598+-0.2169            3.4992+-0.1665          might be 1.0173x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     14.5895+-0.3105     ?     14.6263+-0.2543        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.8580+-0.0468     ?      2.8813+-0.1028        ?
   get-by-val-with-symbol-check-structure-elimination   
                                                     14.0130+-0.1706           13.8557+-0.3917          might be 1.0114x faster
   get-by-val-with-symbol-proto-or-self              17.9388+-0.4404     ?     18.3973+-3.4096        ? might be 1.0256x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      4.9681+-0.3309            4.8842+-0.0808          might be 1.0172x faster
   get-by-val-with-symbol-self-or-proto              17.3745+-0.9643     ?     19.0208+-5.0599        ? might be 1.0948x slower
   get_callee_monomorphic                             2.7202+-0.2092            2.6450+-0.1386          might be 1.0284x faster
   get_callee_polymorphic                             3.9697+-0.4307            3.7609+-0.1784          might be 1.0555x faster
   getter-no-activation                               5.5602+-0.0631            5.5165+-0.0829        
   getter-prototype                                  10.0860+-0.5865            9.8423+-0.2959          might be 1.0248x faster
   getter-richards-try-catch                       1420.2113+-140.5817   ?   1433.8635+-113.4307      ?
   getter-richards                                  102.8771+-1.6570     ?    104.5715+-1.6591        ? might be 1.0165x slower
   getter                                             5.9479+-0.2688            5.8848+-0.1876          might be 1.0107x faster
   global-object-access-with-mutating-structure   
                                                      6.3317+-0.8154            5.9788+-0.3103          might be 1.0590x faster
   global-var-const-infer-fire-from-opt               1.1012+-0.0845            1.0978+-0.1270        
   global-var-const-infer                             0.9508+-0.0409            0.9379+-0.0319          might be 1.0137x faster
   hard-overflow-check-equal                         39.3887+-1.0199     ?     39.5241+-1.5366        ?
   hard-overflow-check                               38.9210+-0.8184     ?     40.0735+-2.4994        ? might be 1.0296x slower
   HashMap-put-get-iterate-keys                      27.4227+-0.5085     ?     27.5373+-0.5172        ?
   HashMap-put-get-iterate                           27.1481+-0.4710     ?     27.5204+-0.2400        ? might be 1.0137x slower
   HashMap-string-put-get-iterate                    28.1971+-1.0168     ?     28.5444+-0.8563        ? might be 1.0123x slower
   hoist-make-rope                                    9.4725+-1.2084     ?      9.6578+-0.1961        ? might be 1.0196x slower
   hoist-poly-check-structure-effectful-loop   
                                                      4.7891+-0.1600     ?      4.8118+-0.2829        ?
   hoist-poly-check-structure                         3.6920+-0.1596            3.6724+-0.0623        
   imul-double-only                                   6.4787+-0.2838     ?      6.7125+-0.3011        ? might be 1.0361x slower
   imul-int-only                                      7.4832+-0.1425     ?      7.5290+-0.1488        ?
   imul-mixed                                         6.4537+-0.7148     ?      6.7351+-0.1916        ? might be 1.0436x slower
   in-four-cases                                     22.0339+-0.2935           21.7369+-0.5022          might be 1.0137x faster
   in-one-case-false                                 12.3439+-0.4061           11.9678+-0.1330          might be 1.0314x faster
   in-one-case-true                                  12.1947+-0.4155           12.1324+-0.3282        
   in-two-cases                                      13.0428+-0.3823           12.9090+-0.1107          might be 1.0104x faster
   indexed-properties-in-objects                      3.3034+-0.1726            3.2601+-0.0902          might be 1.0133x faster
   infer-closure-const-then-mov-no-inline             4.3718+-0.0822     ?      4.3849+-0.0703        ?
   infer-closure-const-then-mov                      18.1365+-0.5030           18.1300+-0.4558        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     14.0488+-0.7051           13.9247+-0.3924        
   infer-closure-const-then-put-to-scope             23.6790+-0.9061     ?     24.2090+-0.7551        ? might be 1.0224x slower
   infer-closure-const-then-reenter-no-inline   
                                                     59.8206+-0.9234     ?     60.5299+-0.7635        ? might be 1.0119x slower
   infer-closure-const-then-reenter                  24.7228+-0.9482           24.5040+-1.1792        
   infer-constant-global-property                     3.9000+-0.0829     ?      3.9718+-0.1826        ? might be 1.0184x slower
   infer-constant-property                            3.0505+-0.1302     ?      3.0654+-0.1384        ?
   infer-one-time-closure-ten-vars                   10.0125+-0.6495            9.7241+-0.1060          might be 1.0297x faster
   infer-one-time-closure-two-vars                    9.2574+-0.4412            9.0445+-0.4466          might be 1.0235x faster
   infer-one-time-closure                             9.3733+-0.7991            9.2332+-0.3218          might be 1.0152x faster
   infer-one-time-deep-closure                       15.5809+-0.7410           15.5396+-0.2505        
   inline-arguments-access                            4.2664+-0.2417     ?      4.2964+-0.1481        ?
   inline-arguments-aliased-access                    4.1955+-0.0324     ?      4.4154+-0.2295        ? might be 1.0524x slower
   inline-arguments-local-escape                      4.2670+-0.1303            4.2104+-0.0300          might be 1.0134x faster
   inline-get-scoped-var                              5.5340+-0.0734            5.4921+-0.0521        
   inlined-put-by-id-transition                      11.3721+-0.3493           11.1802+-0.3768          might be 1.0172x faster
   inlined-put-by-val-with-string-transition   
                                                     49.7865+-2.0319           49.4579+-0.7860        
   inlined-put-by-val-with-symbol-transition   
                                                     51.8088+-2.1815           49.9350+-1.2345          might be 1.0375x faster
   int-or-other-abs-then-get-by-val                   5.2753+-0.1442     ?      5.2773+-0.1477        ?
   int-or-other-abs-zero-then-get-by-val             18.0059+-0.7014           17.7626+-0.4369          might be 1.0137x faster
   int-or-other-add-then-get-by-val                   4.8860+-0.0581            4.8213+-0.0656          might be 1.0134x faster
   int-or-other-add                                   5.8468+-0.0453     ?      5.9508+-0.3031        ? might be 1.0178x slower
   int-or-other-div-then-get-by-val                   4.7253+-0.3506            4.5945+-0.2934          might be 1.0285x faster
   int-or-other-max-then-get-by-val                   4.7632+-0.0523     ?      4.7838+-0.1696        ?
   int-or-other-min-then-get-by-val                   4.6495+-0.0999     ?      4.6849+-0.2136        ?
   int-or-other-mod-then-get-by-val                   4.1353+-0.1535     ?      4.1578+-0.1290        ?
   int-or-other-mul-then-get-by-val                   4.4589+-0.2212            4.4196+-0.1332        
   int-or-other-neg-then-get-by-val                   4.9431+-0.2930            4.8677+-0.0795          might be 1.0155x faster
   int-or-other-neg-zero-then-get-by-val             17.8174+-0.4325     ?     18.0362+-1.4307        ? might be 1.0123x slower
   int-or-other-sub-then-get-by-val                   4.9561+-0.0361     ?      4.9623+-0.1127        ?
   int-or-other-sub                                   4.1461+-0.1934            4.1170+-0.1812        
   int-overflow-local                                 5.0000+-0.1112            4.9640+-0.1121        
   Int16Array-alloc-long-lived                       50.1111+-0.5536     !     51.6487+-0.9231        ! definitely 1.0307x slower
   Int16Array-bubble-sort-with-byteLength            20.6451+-0.2010     ?     20.8942+-0.9133        ? might be 1.0121x slower
   Int16Array-bubble-sort                            20.6320+-0.3848     ?     20.7742+-0.6504        ?
   Int16Array-load-int-mul                            1.8305+-0.0202            1.8006+-0.0396          might be 1.0166x faster
   Int16Array-to-Int32Array-set                      59.7250+-1.9581     ^     54.8234+-0.2546        ^ definitely 1.0894x faster
   Int32Array-alloc-large                            20.6547+-1.0765           20.2289+-0.4359          might be 1.0211x faster
   Int32Array-alloc-long-lived                       57.2497+-1.6250           57.0623+-1.0278        
   Int32Array-alloc                                   2.8663+-0.0683            2.7822+-0.1214          might be 1.0302x faster
   Int32Array-Int8Array-view-alloc                    6.8538+-0.0579            6.8428+-0.2171        
   int52-spill                                        7.0753+-0.2298     ^      5.9633+-0.2364        ^ definitely 1.1865x faster
   Int8Array-alloc-long-lived                        44.5156+-0.7862     ?     44.7911+-1.3912        ?
   Int8Array-load-with-byteLength                     3.7548+-0.1915            3.7448+-0.1218        
   Int8Array-load                                     3.7415+-0.0854            3.7092+-0.0957        
   integer-divide                                    12.4214+-0.3322           12.3060+-0.2410        
   integer-modulo                                     2.4464+-0.1152            2.4164+-0.0643          might be 1.0124x faster
   is-boolean-fold-tricky                             4.5685+-0.1002            4.5348+-0.1208        
   is-boolean-fold                                    3.1818+-0.1174            3.1062+-0.0972          might be 1.0243x faster
   is-function-fold-tricky-internal-function   
                                                     12.5412+-0.1729     ?     12.7519+-0.1307        ? might be 1.0168x slower
   is-function-fold-tricky                            4.7045+-0.0866     ?      4.7490+-0.2708        ?
   is-function-fold                                   3.1379+-0.1166     ?      3.1688+-0.0732        ?
   is-number-fold-tricky                              4.5408+-0.1934     ?      4.6791+-0.4842        ? might be 1.0304x slower
   is-number-fold                                     3.2087+-0.2268            3.1493+-0.0800          might be 1.0189x faster
   is-object-or-null-fold-functions                   3.2827+-0.0424            3.1939+-0.0741          might be 1.0278x faster
   is-object-or-null-fold-less-tricky                 4.7145+-0.2216            4.6673+-0.1208          might be 1.0101x faster
   is-object-or-null-fold-tricky                      6.3561+-0.0769     ?      6.3878+-0.1057        ?
   is-object-or-null-fold                             3.1882+-0.0938            3.1843+-0.1009        
   is-object-or-null-trickier-function                4.8642+-0.3407            4.7642+-0.1777          might be 1.0210x faster
   is-object-or-null-trickier-internal-function   
                                                     12.6933+-0.1382     ?     12.8799+-0.2060        ? might be 1.0147x slower
   is-object-or-null-tricky-function                  4.7595+-0.1521            4.6639+-0.0257          might be 1.0205x faster
   is-object-or-null-tricky-internal-function   
                                                      9.5062+-0.0999     ?      9.6992+-0.2547        ? might be 1.0203x slower
   is-string-fold-tricky                              4.6970+-0.2824            4.5242+-0.0561          might be 1.0382x faster
   is-string-fold                                     3.2393+-0.1817            3.1158+-0.1037          might be 1.0396x faster
   is-undefined-fold-tricky                           3.8386+-0.1164            3.7880+-0.0770          might be 1.0133x faster
   is-undefined-fold                                  3.1922+-0.0854            3.1275+-0.1002          might be 1.0207x faster
   JSONP-negative-0                                   0.4273+-0.0479            0.4203+-0.0304          might be 1.0167x faster
   large-int-captured                                 4.6448+-0.0578     ?      4.6573+-0.1162        ?
   large-int-neg                                     16.3593+-0.5660           16.1483+-0.2342          might be 1.0131x faster
   large-int                                         14.5238+-0.4180           14.3864+-0.7203        
   load-varargs-elimination                          24.6701+-0.9041           24.6332+-0.5119        
   logical-not-weird-types                            3.8260+-0.1758     ?      3.8467+-0.1324        ?
   logical-not                                        4.9866+-0.1480     ?      5.0423+-0.1159        ? might be 1.0112x slower
   lots-of-fields                                    13.1637+-0.6287           13.0478+-0.3534        
   make-indexed-storage                               3.4822+-0.1861            3.2277+-0.4082          might be 1.0789x faster
   make-rope-cse                                      3.9441+-0.3848            3.8337+-0.1134          might be 1.0288x faster
   marsaglia-larger-ints                             40.7216+-1.7238           40.1223+-1.7715          might be 1.0149x faster
   marsaglia-osr-entry                               22.4923+-0.9995     ?     22.5483+-0.6529        ?
   math-with-out-of-bounds-array-values              25.6999+-0.8259           25.2957+-0.2334          might be 1.0160x faster
   max-boolean                                        2.7995+-0.0563            2.7517+-0.0546          might be 1.0174x faster
   method-on-number                                  19.9904+-1.7007           18.0443+-0.3664          might be 1.1078x faster
   min-boolean                                        2.7819+-0.0497     ?      2.7956+-0.0467        ?
   minus-boolean-double                               3.5607+-0.0946            3.4743+-0.0446          might be 1.0249x faster
   minus-boolean                                      2.6591+-0.1325            2.6483+-0.0839        
   misc-strict-eq                                    32.4924+-3.5796           32.0159+-3.0028          might be 1.0149x faster
   mod-boolean-double                                11.6357+-0.2837     ?     11.7997+-0.3179        ? might be 1.0141x slower
   mod-boolean                                        8.4194+-0.2472     ?      8.4606+-0.1771        ?
   mul-boolean-double                                 4.2252+-0.2698            3.9756+-0.0251          might be 1.0628x faster
   mul-boolean                                        3.2581+-0.2272            3.2392+-0.1732        
   neg-boolean                                        3.5462+-0.0820            3.4638+-0.0220          might be 1.0238x faster
   negative-zero-divide                               0.5679+-0.0178            0.5613+-0.0152          might be 1.0117x faster
   negative-zero-modulo                               0.5367+-0.0395     ?      0.5542+-0.0144        ? might be 1.0326x slower
   negative-zero-negate                               0.5461+-0.0243            0.5348+-0.0197          might be 1.0212x faster
   nested-function-parsing                           53.4825+-0.5895     ?     55.4915+-2.2486        ? might be 1.0376x slower
   new-array-buffer-dead                            105.4115+-1.4486     ?    105.4910+-1.3665        ?
   new-array-buffer-push                              7.0153+-0.3693            7.0029+-0.4126        
   new-array-dead                                    16.0037+-2.9048           15.7688+-2.3425          might be 1.0149x faster
   new-array-push                                     4.6483+-0.6560            4.0933+-0.0889          might be 1.1356x faster
   no-inline-constructor                             37.0369+-0.7957     ?     37.3873+-1.0544        ?
   number-test                                        3.4504+-0.0406     ?      3.5832+-0.3153        ? might be 1.0385x slower
   object-closure-call                                5.7893+-0.1657     ?      5.8970+-0.2378        ? might be 1.0186x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.1937+-0.6400            4.1613+-0.1499        
   object-test                                        3.3323+-0.2390            3.2637+-0.1260          might be 1.0210x faster
   obvious-sink-pathology-taken                     120.8185+-1.5840          120.3417+-1.0710        
   obvious-sink-pathology                           114.6345+-0.7475     ?    115.4232+-1.4713        ?
   obviously-elidable-new-object                     28.4069+-0.4826           28.3270+-0.4860        
   plus-boolean-arith                                 2.8033+-0.0787            2.7778+-0.0578        
   plus-boolean-double                                3.5870+-0.2088            3.4578+-0.0284          might be 1.0374x faster
   plus-boolean                                       2.7230+-0.1541            2.7138+-0.1143        
   poly-chain-access-different-prototypes-simple   
                                                      3.0156+-0.1310     ?      3.1214+-0.1683        ? might be 1.0351x slower
   poly-chain-access-different-prototypes             3.0392+-0.1047            2.9994+-0.1151          might be 1.0133x faster
   poly-chain-access-simpler                          2.9808+-0.1751     ?      3.0050+-0.0628        ?
   poly-chain-access                                  3.0626+-0.2359            2.9369+-0.0809          might be 1.0428x faster
   poly-stricteq                                     64.2900+-1.2964     ?     64.9150+-1.0965        ?
   polymorphic-array-call                             1.7390+-0.1261            1.6689+-0.1363          might be 1.0420x faster
   polymorphic-get-by-id                              3.6646+-0.0424     ?      3.7247+-0.2357        ? might be 1.0164x slower
   polymorphic-put-by-id                             34.2473+-0.1883     ?     34.4905+-0.4849        ?
   polymorphic-put-by-val-with-string                37.6884+-0.4289     ^     36.8400+-0.1783        ^ definitely 1.0230x faster
   polymorphic-put-by-val-with-symbol                37.6736+-0.7501           37.1259+-0.7687          might be 1.0148x faster
   polymorphic-structure                             14.3831+-0.2862           14.2723+-0.1975        
   polyvariant-monomorphic-get-by-id                  9.3508+-1.0271            9.2292+-0.2551          might be 1.0132x faster
   proto-getter-access                                8.4172+-0.2583            8.2905+-0.1788          might be 1.0153x faster
   prototype-access-with-mutating-prototype           5.8538+-0.4388            5.6856+-0.1247          might be 1.0296x faster
   put-by-id-replace-and-transition                   9.9443+-0.6133     ?     10.0425+-0.1277        ?
   put-by-id-slightly-polymorphic                     3.1880+-0.0698     ?      3.2445+-0.1065        ? might be 1.0177x slower
   put-by-id                                         12.7754+-0.5653           12.7548+-0.5233        
   put-by-val-direct                                  0.5440+-0.0434     ?      0.5465+-0.0342        ?
   put-by-val-large-index-blank-indexing-type   
                                                      6.0854+-0.5725            5.7242+-0.3031          might be 1.0631x faster
   put-by-val-machine-int                             2.8513+-0.1096     ?      2.9722+-0.0487        ? might be 1.0424x slower
   put-by-val-with-string-replace-and-transition   
                                                     14.0892+-0.3870     ?     14.1378+-0.4285        ?
   put-by-val-with-string-slightly-polymorphic   
                                                      4.1172+-0.1526     ?      4.1243+-0.1353        ?
   put-by-val-with-string                            13.2828+-0.7961           13.1887+-0.1068        
   put-by-val-with-symbol-replace-and-transition   
                                                     15.1232+-0.3965     ?     15.3246+-0.8333        ? might be 1.0133x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      4.5042+-0.1592            4.4055+-0.0971          might be 1.0224x faster
   put-by-val-with-symbol                            13.3079+-0.5399     ?     13.5485+-0.6781        ? might be 1.0181x slower
   rare-osr-exit-on-local                            15.2162+-0.8194     ?     15.6694+-0.3934        ? might be 1.0298x slower
   raytrace-with-empty-try-catch                      7.4126+-0.3963            7.2865+-0.4548          might be 1.0173x faster
   raytrace-with-try-catch                           12.9380+-0.3191           12.7415+-0.0996          might be 1.0154x faster
   register-pressure-from-osr                        21.1192+-0.3398           20.9576+-0.2707        
   repeat-multi-get-by-offset                        24.4703+-0.7645           24.4166+-0.5603        
   richards-empty-try-catch                          86.6653+-0.6254     ?     87.2175+-0.5402        ?
   richards-try-catch                               293.5030+-8.3243          289.2365+-2.8052          might be 1.0148x faster
   setter-prototype                                   7.8227+-0.8423            7.5460+-0.1657          might be 1.0367x faster
   setter                                             6.0943+-0.2381            6.0706+-0.1270        
   simple-activation-demo                            26.9800+-0.7865           26.5283+-0.2217          might be 1.0170x faster
   simple-getter-access                              11.1135+-0.3158           10.9407+-0.7576          might be 1.0158x faster
   simple-poly-call-nested                            8.3320+-0.0845            8.2342+-0.2041          might be 1.0119x faster
   simple-poly-call                                   1.7044+-0.0139            1.6911+-0.0267        
   sin-boolean                                       18.3570+-1.1458           18.1685+-1.4489          might be 1.0104x faster
   singleton-scope                                   71.4401+-1.0655           71.3187+-0.8791        
   sink-function                                     10.0893+-0.4238     ?     10.2069+-0.4823        ? might be 1.0117x slower
   sink-huge-activation                              16.5709+-0.2681           16.4665+-0.5565        
   sinkable-new-object-dag                           66.4741+-1.5499     ?     67.0104+-2.0323        ?
   sinkable-new-object-taken                         49.1165+-1.8383           48.8795+-1.3117        
   sinkable-new-object                               37.7815+-1.3263           37.5649+-0.9259        
   slow-array-profile-convergence                     3.2386+-0.0447            3.2117+-0.0909        
   slow-convergence                                   3.0211+-0.0439     ?      3.0322+-0.0178        ?
   slow-ternaries                                    19.2089+-0.6929           19.1749+-0.3642        
   sorting-benchmark                                 20.3919+-0.9630           20.3031+-0.7275        
   sparse-conditional                                 1.5666+-0.0997            1.5638+-0.0454        
   splice-to-remove                                  15.6326+-0.3584           15.4330+-0.4030          might be 1.0129x faster
   string-char-code-at                               17.3076+-0.2936     !     17.7476+-0.1043        ! definitely 1.0254x slower
   string-concat-object                               2.2463+-0.1535     ?      2.2699+-0.0954        ? might be 1.0105x slower
   string-concat-pair-object                          2.1340+-0.0757     ?      2.2959+-0.2539        ? might be 1.0758x slower
   string-concat-pair-simple                         11.4960+-0.1870     ?     11.6417+-0.4701        ? might be 1.0127x slower
   string-concat-simple                              12.5779+-1.6763           12.1675+-0.3080          might be 1.0337x faster
   string-cons-repeat                                 7.8746+-0.2173     ?      7.9310+-0.3336        ?
   string-cons-tower                                  7.7935+-0.1068     ?      8.5202+-0.9858        ? might be 1.0933x slower
   string-equality                                   18.4501+-0.3802     ?     18.5565+-0.1951        ?
   string-get-by-val-big-char                         7.5883+-0.9454            7.3967+-0.3728          might be 1.0259x faster
   string-get-by-val-out-of-bounds-insane             3.9261+-0.0573            3.8402+-0.1725          might be 1.0224x faster
   string-get-by-val-out-of-bounds                    5.5496+-0.0292            5.5259+-0.1037        
   string-get-by-val                                  3.7103+-0.2189            3.5330+-0.0611          might be 1.0502x faster
   string-hash                                        2.4297+-0.0568            2.4252+-0.0583        
   string-long-ident-equality                        15.8350+-0.7400           15.3549+-0.4231          might be 1.0313x faster
   string-out-of-bounds                              12.7220+-0.2615           12.5563+-0.1715          might be 1.0132x faster
   string-repeat-arith                               34.7700+-2.4969           33.6559+-0.2574          might be 1.0331x faster
   string-sub                                        67.7055+-1.0242           67.3192+-0.9278        
   string-test                                        3.4236+-0.1179            3.3077+-0.0498          might be 1.0350x faster
   string-var-equality                               35.0185+-1.4395           34.6046+-0.5842          might be 1.0120x faster
   structure-hoist-over-transitions                   2.7006+-0.1134     ?      2.7698+-0.1446        ? might be 1.0256x slower
   substring-concat-weird                            43.3233+-1.5255     ?     43.5641+-0.5669        ?
   substring-concat                                  47.9615+-2.0260           47.3721+-1.1287          might be 1.0124x faster
   substring                                         53.2199+-0.7079           52.3007+-0.6165          might be 1.0176x faster
   switch-char-constant                               3.0599+-0.0565     ?      3.0928+-0.0947        ? might be 1.0107x slower
   switch-char                                        6.7961+-0.2081     ?      6.8708+-0.1205        ? might be 1.0110x slower
   switch-constant                                   11.2695+-0.5790           10.9592+-1.3659          might be 1.0283x faster
   switch-string-basic-big-var                       21.6559+-0.7608     ?     21.9258+-0.8322        ? might be 1.0125x slower
   switch-string-basic-big                           19.5056+-0.1955     ?     19.5961+-0.1398        ?
   switch-string-basic-var                           15.8621+-0.3491           15.8612+-0.1784        
   switch-string-basic                               15.5749+-0.7710           15.1874+-0.2280          might be 1.0255x faster
   switch-string-big-length-tower-var                21.2307+-0.6032           21.2057+-1.0033        
   switch-string-length-tower-var                    16.4585+-0.2983           16.4043+-0.4979        
   switch-string-length-tower                        13.3847+-0.2803     ?     13.8068+-0.6943        ? might be 1.0315x slower
   switch-string-short                               13.3708+-0.2638           13.2650+-0.3052        
   switch                                            14.8984+-0.3345           14.5317+-1.4540          might be 1.0252x faster
   tear-off-arguments-simple                          3.5200+-0.2066     ?      3.5240+-0.1396        ?
   tear-off-arguments                                 4.6174+-0.0824     ?      4.7900+-0.4052        ? might be 1.0374x slower
   temporal-structure                                14.4860+-0.5101           14.3664+-0.4420        
   to-int32-boolean                                  14.5845+-0.5558           14.2489+-0.2298          might be 1.0236x faster
   try-catch-get-by-val-cloned-arguments             10.9355+-0.2868           10.8063+-0.0591          might be 1.0120x faster
   try-catch-get-by-val-direct-arguments              2.3252+-0.1122            2.3073+-0.0533        
   try-catch-get-by-val-scoped-arguments              5.1660+-0.5220            4.9234+-0.0993          might be 1.0493x faster
   typed-array-get-set-by-val-profiling              30.6602+-0.6639           30.4034+-0.3972        
   undefined-property-access                        368.8419+-2.1077     ?    371.6929+-10.3460       ?
   undefined-test                                     3.4765+-0.0971     ?      3.5131+-0.2126        ? might be 1.0105x slower
   unprofiled-licm                                   13.1023+-0.5436           12.8304+-0.3969          might be 1.0212x faster
   v8-raytrace-with-empty-try-catch                  39.1846+-1.9104           39.1163+-1.3263        
   v8-raytrace-with-try-catch                        84.7640+-1.5016           84.1979+-2.3367        
   varargs-call                                      14.8485+-0.5551           14.8160+-0.3080        
   varargs-construct-inline                          25.7678+-1.1928     ?     26.3218+-1.4887        ? might be 1.0215x slower
   varargs-construct                                 23.4676+-0.4067     ?     23.5732+-0.6478        ?
   varargs-inline                                    10.0778+-0.4194            9.9113+-0.2884          might be 1.0168x faster
   varargs-strict-mode                               11.5723+-0.5768           11.3988+-0.2890          might be 1.0152x faster
   varargs                                           11.2032+-0.3292     ?     11.2336+-0.2345        ?
   weird-inlining-const-prop                          2.7123+-0.1138            2.6500+-0.0744          might be 1.0235x faster

   &lt;geometric&gt;                                        9.6258+-0.0370            9.5817+-0.0193          might be 1.0046x faster

                                                         Baseline                   Patch                                       
AsmBench:
   bigfib.cpp                                       528.6077+-5.8512          526.9321+-1.9781        
   cray.c                                           454.7429+-2.3169          453.7889+-1.3524        
   dry.c                                            533.5659+-25.8945         524.8246+-1.5525          might be 1.0167x faster
   FloatMM.c                                        766.2415+-2.4583     ?    767.6397+-1.7699        ?
   gcc-loops.cpp                                   4195.3959+-8.0506         4194.5600+-23.7647       
   n-body.c                                        1042.6345+-2.5563     ?   1046.1790+-5.5749        ?
   Quicksort.c                                      447.5541+-4.0928     ?    449.4483+-11.1856       ?
   stepanov_container.cpp                          3898.8187+-12.1724        3896.7000+-36.1758       
   Towers.c                                         268.0255+-1.4031     ?    268.6580+-0.8113        ?

   &lt;geometric&gt;                                      836.7112+-6.4739          835.7311+-1.5542          might be 1.0012x faster

                                                         Baseline                   Patch                                       
CompressionBench:
   huffman                                           66.0045+-0.1760           65.5847+-2.3409        
   arithmetic-simple                                357.6401+-4.5760          355.4332+-2.5011        
   arithmetic-precise                               288.3695+-2.0667     ?    290.6862+-1.7567        ?
   arithmetic-complex-precise                       289.5615+-3.2158     ?    289.7255+-2.5608        ?
   arithmetic-precise-order-0                       365.7117+-2.3008          365.3111+-3.5598        
   arithmetic-precise-order-1                       344.3091+-5.9616          342.2772+-4.6974        
   arithmetic-precise-order-2                       400.9247+-0.9573     ?    411.2380+-10.1286       ? might be 1.0257x slower
   arithmetic-simple-order-1                        410.2511+-3.1299     ?    411.2682+-3.2862        ?
   arithmetic-simple-order-2                        469.1277+-3.9170          468.9515+-3.1960        
   lz-string                                        319.1978+-3.5258     ^    309.2590+-5.6073        ^ definitely 1.0321x faster

   &lt;geometric&gt;                                      301.0373+-0.5769          300.5755+-2.1723          might be 1.0015x faster

                                                         Baseline                   Patch                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                                   60.0415+-0.1598           59.9754+-0.2026          might be 1.0011x faster

=====
~/Internal&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130091</commentid>
    <comment_count>3</comment_count>
      <attachid>262299</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-01 16:50:28 -0700</bug_when>
    <thetext>Created attachment 262299
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130092</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-01 16:52:43 -0700</bug_when>
    <thetext>Attachment 262299 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:143:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:146:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1720:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1720:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1721:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1729:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1733:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1146:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1188:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1233:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1278:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 12 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130119</commentid>
    <comment_count>5</comment_count>
      <attachid>262306</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-01 17:59:23 -0700</bug_when>
    <thetext>Created attachment 262306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130121</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-01 18:01:11 -0700</bug_when>
    <thetext>Attachment 262306 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:143:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:145:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/dfg/DFGPlan.cpp:146:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1720:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1720:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1721:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1729:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.cpp:1733:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1146:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1188:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1233:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/bytecode/CodeBlock.h:1278:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 12 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130136</commentid>
    <comment_count>7</comment_count>
      <attachid>262306</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-01 18:51:11 -0700</bug_when>
    <thetext>Comment on attachment 262306
Patch

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130146</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-01 20:46:17 -0700</bug_when>
    <thetext>Committed r190450: &lt;http://trac.webkit.org/changeset/190450&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130158</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-01 22:13:11 -0700</bug_when>
    <thetext>Rolled out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130298</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-02 14:16:44 -0700</bug_when>
    <thetext>Committed r190522: &lt;http://trac.webkit.org/changeset/190522&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130459</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-03 18:39:05 -0700</bug_when>
    <thetext>This caused a lot of leaks on the leaks bot. Will see if I can easily roll out.

Oct 02 14:46	190522	failure	#66	Failed 30774 total leaks found for a total of 6,394,560 bytes. 298 unique leaks found. 4 failures 2 new passes
Oct 02 14:30	190521	failure	#65	Failed 3823 total leaks found for a total of 503,120 bytes. 139 unique leaks found. 3 failures 2 new passes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130461</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-03 18:41:32 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 149787</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130465</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-03 18:46:38 -0700</bug_when>
    <thetext>Rolled out in r190546.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130795</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-05 16:32:20 -0700</bug_when>
    <thetext>Committed r190589: &lt;http://trac.webkit.org/changeset/190589&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130872</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-05 22:45:12 -0700</bug_when>
    <thetext>This did address some leaks, but we are still getting an order of magnitude more than without the patch. There are also very frequent crashes that look related, and that I didn&apos;t see before.

Oct 05 16:56	190589	failure	#107	Failed 6495 total leaks found for a total of 2,603,376 bytes. 189 unique leaks found. 2 new passes
Oct 05 16:40	190587	failure	#106	Failed 3367 total leaks found for a total of 424,896 bytes. 146 unique leaks found. 2 new passes


https://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK1%20(Tests)/r190604%20(16063)/fast/selectors/nth-last-child-of-selector-list-ending-with-never-matching-selectors-crash-log.txt

https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK2%20(Tests)/r190602%20(7400)/js/dom/string-split-conformance-crash-log.txt

https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK2%20(Tests)/r190604%20(7401)/imported/w3c/indexeddb/idbobjectstore_openCursor-crash-log.txt

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x0000000117e20827 WTFCrash + 39
1   com.apple.JavaScriptCore      	0x00000001179e815a JSC::JITToDFGDeferredCompilationCallback::compilationDidComplete(JSC::CodeBlock*, JSC::CodeBlock*, JSC::CompilationResult) + 154
2   com.apple.JavaScriptCore      	0x0000000117699f05 JSC::DFG::Plan::finalizeAndNotifyCallback() + 101
3   com.apple.JavaScriptCore      	0x000000011779a361 JSC::DFG::Worklist::completeAllReadyPlansForVM(JSC::VM&amp;, JSC::DFG::CompilationKey) + 305
4   com.apple.JavaScriptCore      	0x00000001179cb292 operationOptimize + 1058</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130874</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-05 22:48:23 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 149833</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130883</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-05 23:01:28 -0700</bug_when>
    <thetext>Seems even more certain to have caused crashes on perf testers:

Thread 10 Crashed:: WTF Parallel Helper Thread
0   com.apple.JavaScriptCore      	0x000000010e601e6a JSC::speculationFromCell(JSC::JSCell*) + 58 (SpeculatedType.cpp:363)
1   com.apple.JavaScriptCore      	0x000000010e0554c4 JSC::CodeBlock::updateAllPredictionsAndCountLiveness(unsigned int&amp;, unsigned int&amp;) + 276 (CodeBlock.cpp:3746)
2   com.apple.JavaScriptCore      	0x000000010e052127 JSC::CodeBlock::stronglyVisitStrongReferences(JSC::SlotVisitor&amp;) + 567 (CodeBlock.cpp:2883)
3   com.apple.JavaScriptCore      	0x000000010e051ea6 JSC::CodeBlock::visitChildren(JSC::SlotVisitor&amp;) + 342 (CodeBlock.cpp:2379)
4   com.apple.JavaScriptCore      	0x000000010e5fe045 JSC::SlotVisitor::drain() + 277 (SlotVisitor.cpp:182)
5   com.apple.JavaScriptCore      	0x000000010e5fe248 JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode) + 104 (SlotVisitor.cpp:237)
6   com.apple.JavaScriptCore      	0x000000010e30eb4e WTF::SharedTaskFunctor&lt;JSC::Heap::markRoots(double, void*, void*, int (&amp;) [37])::$_0&gt;::run() + 286 (Heap.cpp:564)
7   com.apple.JavaScriptCore      	0x000000010e69d67c WTF::ParallelHelperClient::runTask(WTF::RefPtr&lt;WTF::SharedTask&gt;) + 44 (ParallelHelperPool.cpp:114)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1130886</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-05 23:06:29 -0700</bug_when>
    <thetext>Actually no, I think that this stack trace is from bug 149821. These landed a bit too close together to confidently tell which is to blame, but it seems likely that  Dromaeo/cssquery-jquery.html and Dromaeo/cssquery-dojo.html started to fail (not crash) after this patch.

https://build.webkit.org/builders/Apple%20Mavericks%20Release%20WK2%20(Perf)?numbuilds=50

Oct 05 17:23	190589	failure	#5937	Failed 2 perf tests failed
Oct 05 15:04	190579	success	#5936	Build successful

https://build.webkit.org/builders/Apple%20Yosemite%20Release%20WK2%20(Perf)?numbuilds=50

Oct 05 19:13	190597	failure	#3075	Failed 1 perf tests failed
Oct 05 17:01	190587	success	#3074	Build successful

https://build.webkit.org/builders/Apple%20El%20Capitan%20Release%20WK2%20(Perf)?numbuilds=50

Oct 05 19:15	190597	failure	#46	Failed 1 perf tests failed
Oct 05 17:08	190591	failure	#45	Failed 1 perf tests failed
Oct 05 14:58	190579	success	#44	Build successful</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131045</commentid>
    <comment_count>19</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-06 11:22:01 -0700</bug_when>
    <thetext>&gt; This did address some leaks, but we are still getting an order of magnitude more than without the patch.

Crazy. The leaks bot clearly shows CodeBlock-related leaks, even though I saw none locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131148</commentid>
    <comment_count>20</comment_count>
      <attachid>262306</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-10-06 15:59:20 -0700</bug_when>
    <thetext>Comment on attachment 262306
Patch

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

&gt; Source/JavaScriptCore/bytecode/CodeBlock.cpp:3107
&gt; +        return nullptr

Missing semicolon (for when this relands).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131458</commentid>
    <comment_count>21</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-07 16:10:51 -0700</bug_when>
    <thetext>Committed r190694: &lt;http://trac.webkit.org/changeset/190694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131954</commentid>
    <comment_count>22</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-09 10:55:01 -0700</bug_when>
    <thetext>Reverted in &lt;http://trac.webkit.org/changeset/190809&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132034</commentid>
    <comment_count>23</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-09 16:11:49 -0700</bug_when>
    <thetext>Committed r190827: &lt;http://trac.webkit.org/changeset/190827&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262294</attachid>
            <date>2015-10-01 16:04:10 -0700</date>
            <delta_ts>2015-10-01 16:50:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149727-20151001160344.patch</filename>
            <type>text/plain</type>
            <size>165554</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNDMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxNiBA
QAorMjAxNS0xMC0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIENvZGVCbG9jayBzaG91bGQgYmUgYSBHQyBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTcyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHdhbnQgQ29kZUJsb2NrIHRvIGJlIGEgR0Mg
b2JqZWN0OgorCisgICAgICAgICgxKSBTYW5lIHdyaXRlIGJhcnJpZXJzLiBCZWNhdXNlIENvZGVC
bG9jayB3YXNuJ3QgYSBHQyBvYmplY3QsIHdlIGNvdWxkbid0CisgICAgICAgIGV4ZWN1dGUgYSB3
cml0ZSBiYXJyaWVyIG9uIGl0LiBUaGlzIGNhdXNlZCB1cyB0byBkbyB3ZWlyZCB0aGluZ3MgdGhh
dAorICAgICAgICB3ZXJlIGhhcmQgdG8gcmVhc29uIGFib3V0LCBsaWtlIGV4ZWN1dGluZyBhIGJh
cnJpZXIgb24gYSByZWxhdGVkIGV4ZWN1dGFibGUKKyAgICAgICAgKGV2ZW4gdGhvdWdoIHRoZSBl
eGVjdXRhYmxlIG1pZ2h0IHN0b3AgcG9pbnRpbmcgdG8gdGhlIENvZGVCbG9jayBiZWZvcmUKKyAg
ICAgICAgdGhlIG5leHQgR0MpLCBvciBwcmV0ZW5kaW5nIHRoYXQgYW4gb2JqZWN0IGhhZCB3cml0
dGVuIHRvIGl0c2VsZi4gTm93LAorICAgICAgICB3aGVuIHdlIHdyaXRlIHRvIGEgQ29kZUJsb2Nr
LCB3ZSBiYXJyaWVyIHRoZSBDb2RlQmxvY2ssIGFuZCB0aGF0J3MgdGhhdC4KKworICAgICAgICAo
MikgU2ltcGxlciBtYXJraW5nIGFuZCBkZXN0cnVjdGlvbiBsb2dpYy4gVGhlcmUncyBubyBuZWVk
IHRvIGhhdmUgYQorICAgICAgICBjdXN0b20gcmVtZW1iZXJlZCBzZXQgb3IgYSBkZXN0cnVjdGlv
biBmaXhwb2ludCBpZiB3ZSBqdXN0IG9iZXkgbm9ybWFsCisgICAgICAgIEdDIHJ1bGVzLgorCisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
b2RlQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3kpOgorICAg
ICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6ZGVzdHJveSk6IEFkZCBDbGFzc0luZm8gYW5kIGRlc3Ryb3kgZnVu
Y3Rpb25zCisgICAgICAgIGJlY2F1c2Ugb3VyIEdDIG9iamVjdCBtb2RlbCByZXF1aXJlcyB0aGVt
LgorCisgICAgICAgIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc2V0IHRoZSBuZWVkc0Rlc3RydWN0aW9u
IGZsYWcuIFNpbmNlIENvZGVCbG9jayBuZWVkcworICAgICAgICBlYWdlciBkZXN0cnVjdGlvbiwg
aXQgcnVucyBpdHMgZGVzdHJ1Y3RvcnMgdGhyb3VnaCBDb2RlQmxvY2tTZXQsCisgICAgICAgIGFu
ZCBub3QgdGhyb3VnaCBub3JtYWwgb2JqZWN0IHN3ZWVwaW5nLgorCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOiBGYWN0b3Igb3V0IGZpbmlzaENyZWF0aW9uIGZyb20g
dGhlCisgICAgICAgIGNvbnN0cnVjdG9yIGJlY2F1c2Ugb3VyIEdDIG9iamVjdCBtb2RlbCByZXF1
aXJlcyBpdC4gQ2hhbmdlIHdyaXRlCisgICAgICAgIGJhcnJpZXJzIHRvIG5vdGUgdGhlIENvZGVC
bG9jayBhcyB0aGUgb3duZXIuCisKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2Nr
KTogUmVmYWN0b3IgdG8gdXNlIHRoZSBzaGFyZWQKKyAgICAgICAgdW5saW5rSW5jb21pbmdDYWxs
cygpIGZ1bmN0aW9uIGluc3RlYWQgb2Ygcm9sbGluZyBhIGNvcHkgYnkgaGFuZC4KKworICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KTogTmV3IGhlbHBlciBmdW5jdGlvbiBmb3Ig
b3duZXIgZXhlY3V0YWJsZXMKKyAgICAgICAgdG8gZG8gd2VhayBtYXJraW5nIHRoYXQgbWlnaHQg
amV0dGlzb24gYSBDb2RlQmxvY2suIE91ciBuZXcgR0MgbG9naWMKKyAgICAgICAgc2F5cyB0aGF0
IGEgQ29kZUJsb2NrIHBvaW50ZXIgaXMgYSBzdHJvbmcgcmVmZXJlbmNlIGJ5IGRlZmF1bHQsIGFu
ZAorICAgICAgICBjbGllbnRzIG5lZWQgdG8gb3B0IGluIGlmIHRoZXkgd2FudCB0byBhbGxvdyBh
IENvZGVCbG9jayB0byBqZXR0aXNvbi4KKyAgICAgICAgVGhpcyBpcyBlYXNpZXIgdG8gZ2V0IHJp
Z2h0IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBvbmx5IHRob3NlCisgICAgICAgIHNwZWNpZmljIG93
bmVycyB0aGF0IHdhbnQgamV0dGlzb24gYmVoYXZpb3IgbmVlZCB0byB3b3JyeSBhYm91dCBpdCwK
KyAgICAgICAgd2hpbGUgYWxsIG90aGVyIHBvaW50ZXJzIGFyZSB2YWxpZCBieSBkZWZhdWx0Lgor
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6IFRoZSBkZWZhdWx0IHZp
c2l0IGZ1bmN0aW9uIGtlZXBzCisgICAgICAgIGV2ZXJ5dGhpbmcgYWxpdmUuCisKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6IE5vIG5lZWQgdG8ga2VlcCBzcGVjaWFs
IHN0YXRlCisgICAgICAgIGFueW1vcmUuIElmIHdlJ3JlIG1hcmtlZCwgd2UncmUgbGl2ZSAtLSBq
dXN0IGxpa2UgYW55IG90aGVyIG9iamVjdC4KKworICAgICAgICAoSlNDOjp0aW1lVG9MaXZlKTog
TW92ZSB0aGlzIGNvZGUgaW50byBDb2RlQmxvY2suY3BwIHNvIHlvdSBjYW4gbWVzcworICAgICAg
ICB3aXRoIGl0IHdpdGhvdXQgcmVjb21waWxpbmcsIGFuZCBhbHNvIGJlY2F1c2UgaXQncyByZWFs
bHkgYSBDb2RlQmxvY2sKKyAgICAgICAgcG9saWN5LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkpOiBVc2UKKyAgICAgICAgaW50ZXJuYWwgb2JqZWN0cyBmb3IgdmlydHVhbCBjYWxs
YmFja3MgYmVjYXVzZSBHQyBvYmplY3RzIGNhbid0IGhhdmUKKyAgICAgICAgdnRhYmxlcy4KKwor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOiBSZW1vdmUgYSBm
YXN0IHBhdGggY2hlY2sgdGhhdCBkb2VzCisgICAgICAgIG5vdCBleGlzdCBpbiB0aGUgY29weSBv
ZiB0aGlzIGNvZGUgaW4gfkNvZGVCbG9jayBiZWNhdXNlIGl0IGlzIG5vdAorICAgICAgICBhY3R1
YWxseSBhbiBvcHRpbWl6YXRpb24uCisKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNl
bWVudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlMZXZlbCk6
IE1ha2UgdGhlc2UgZnVuY3Rpb25zIGdlbmVyaWMKKyAgICAgICAgaW5zdGVhZCBvZiB2aXJ0dWFs
IGJlY2F1c2UgR0Mgb2JqZWN0cyBjYW4ndCBoYXZlIHZ0YWJsZXMuCisKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2aXNpdFN0cm9uZ2x5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrUmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpyZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJu
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0
eUxldmVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVC
bG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOiBEZWxldGVkLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rZWRD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRl
cnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzcGVjaWFsaXphdGlvbktpbmQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0
aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Omhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxTdGF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFwcGVuZEV4Y2Vw
dGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNlQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OlByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OlBy
b2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6dmFyaWFibGUpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpudW1WYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFsQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6dW5saW5rZWRFdmFsQ29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJs
b2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dW5j
aGVja2VkUik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUhhc0Jl
ZW5DYWxsZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6Om1hcmspOgorICAgICAgICAo
SlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y2xlYXJNYXJrcyk6IERlbGV0ZWQuIExvdHMgb2YgbWVjaGFuaWNhbCBjaGFuZ2VzIHRv
CisgICAgICAgIG1hdGNoIHRoZSBsb2dpYyBjaGFuZ2VzIGFib3ZlLgorCisgICAgICAgICogYnl0
ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oOiBQcm92aWRlIGEgcHJvZmlsZWRERkdDb2RlQmxvY2sKKyAg
ICAgICAgdG8gYWxsIGNvbXBpbGF0aW9uIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0
aGUgY2FsbGJhY2sgdG8KKyAgICAgICAgc3RvcmUgdGhlIHByb2ZpbGVkREZHQ29kZUJsb2NrLiBU
aGlzIGlzIGhvdyB0aGUgcmVzdCBvZiBjb21waWxhdGlvbgorICAgICAgICBhcm91bmQgdGhlIGNh
bGxiYWNrIHdvcmtzIGFueXdheSwgYW5kIGl0IGlzIGVhc2llciB0byBkbyB0aGluZ3MgdGhpcwor
ICAgICAgICB3YXkgdGhhbiB0byB0aGluayBhYm91dCBob3cgYSBub24tR0MgbWFsbG9jJ2Qgb2Jq
ZWN0IHNob3VsZCBrZWVwIGl0cworICAgICAgICBDb2RlQmxvY2sgYWxpdmUuCisKKyAgICAgICAg
KiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6
OnRyeUdldCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OmdldFNsb3cpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5l
cmF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSk6IENoYW5nZSB0aGUgb3du
ZXIgZm9yIHdyaXRlCisgICAgICAgIGJhcnJpZXIgcHVycG9zZXMgdG8gQ29kZUJsb2NrLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQp
OgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKToKKyAgICAgICAgKiBk
ZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6IERp
dHRvLgorCisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlOjpvc3JFbnRyeUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpzZXRP
U1JFbnRyeUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpjbGVhck9TUkVudHJ5
QmxvY2spOiBVc2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgCisgICAgICAgIGFjY2Vzc2luZyBvc3JF
bnRyeUJsb2NrIHRvIGhlbHAgd2l0aCB3cml0ZSBiYXJyaWVyIHN0dWZmLgorCisgICAgICAgICog
ZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVy
OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9u
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOiBVc2UgQ29kZUJsb2NrIGFzIG93bmVy
IGluc3RlYWQgb2YKKyAgICAgICAgZXhlY3V0YWJsZS4KKworICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVhbGx5QWRkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQbGFuOjpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmtleSk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYXJDb2RlQmxvY2tNYXJrcyk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR1BsYW4uaDogVXNlIG5vcm1hbCBHQyB3cml0ZSBiYXJyaWVy
IGNvbmNlcHRzIHRvIG1vZGVsIHRoZSBmYWN0CisgICAgICAgIHRoYXQgdGhlIGNvbXBpbGVyIHdy
aXRlcyB0byBDb2RlQmxvY2tzLgorCisgICAgICAgICogZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5
QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZH
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBkZmcvREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6
OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6flRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlJlZjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPlRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6
REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOiBXZSBhbHdheXMgaGF2ZQorICAgICAgICBhIHByb2Zp
bGVkREZHQ29kZUJsb2NrIHBhc3NlZCB0byB1c2UgLS0gc2VlIGFib3ZlLgorCisgICAgICAgICog
ZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGxl
dGVBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtZW1iZXJD
b2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpERkc6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6V29ya2xpc3Q6OmNsZWFyQ29kZUJsb2NrTWFya3MpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OmNsZWFyQ29kZUJsb2NrTWFya3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdX
b3JrbGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwpOiBS
ZW5hbWVkIHRvIHVzZSByZW1lbWJlcmVkIHNldCB0ZXJtaW5vbG9neS4KKworICAgICAgICAqIGZ0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbik6CisKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6YWRkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1h
cmtzRm9yRnVsbENvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OmRlbGV0
ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKTogTm8gbmVlZCBmb3IgYSBmaXhwb2ludAorICAgICAg
ICBhbnltb3JlIHNpbmNlIHRoZSBHQyBjYW4gdGVsbCB1cyBpZiB3ZSBhcmUgbGl2ZS4KKworICAg
ICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
a1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVh
ck1hcmtzRm9yRWRlbkNvbGxlY3Rpb24pOiBEZWxldGVkLiBObyBuZWVkIGZvcgorICAgICAgICB0
aGlzIGxvZ2ljIGFueW1vcmUgc2luY2UgdGhlIEdDIHdpbGwgY2xlYXIgb3VyIG1hcmsgYml0Lgor
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOiBEZWxldGVkLiBObyBu
ZWVkIGZvciB0aGlzIG1hcmtpbmcKKyAgICAgICAgZml4cG9pbnQgYW55bW9yZSBlaXRoZXIuCisK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorCisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKTogTW92ZWQgc29tZSBvZiB0aGlzIGxv
Z2ljIGFyb3VuZCB0byBtYWtlIHRoZQorICAgICAgICBhbGdvcml0aG0gY2xlYXJlci4gCisKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2Nrcyk6IERlbGV0aW5nIENvZGVCbG9j
a3MgY2FuIG9ubHkgY2xlYXIKKyAgICAgICAgcG9pbnRlcnMgaW1tZWRpYXRlbHk7IHRoZXkgd29u
J3QgZnVsbHkgZGVsZXRlIHVudGlsIHRoZSBuZXh0IEdDIGFuZCBzd2VlcC4KKworICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAg
ICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oOiBDb2RlQmxvY2sgaXMgb3duZXIgbm93
LgorCisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6aXNK
SVQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjppc0xvd2VyVGllcik6CisgICAgICAgIChKU0M6
OkpJVENvZGU6OnRpbWVUb0xpdmUpOiBEZWxldGVkLgorCisgICAgICAgICogaml0L0pJVE9wY29k
ZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOiBDb2RlQmxvY2sgaXMg
b3duZXIgbm93LgorCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChK
U0M6OkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25E
aWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6SklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAg
ICAqIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOgorCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlSZXBhdGNoSW4p
OgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGlj
Q2FsbCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OlNMT1dfUEFUSF9ERUNMKTogCisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0
aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVH
bG9iYWwpOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlR2V0RnJvbVNj
b3BlR2xvYmFsKTogQ29kZUJsb2NrIGlzIG93bmVyIG5vdy4KKworICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUp
OiBQcm92aWRlIGEgZ2VuZXJpYyBjbGVhckNvZGUoKSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBi
ZSB1c2VkIG9uIGFueSBFeGVjdXRhYmxlLiBUaGlzIGZpeGVzIGEgdmVyeSBzdWJ0bGUgYnVnIHdo
ZXJlCisgICAgICAgIGRlbGV0ZUFsbENvZGUoKSBkb2VzIG5vdCByZW1vdmUgQ29kZUJsb2NrcyBm
cm9tIG5vbi1mdW5jdGlvbiBleGVjdXRhYmxlcworICAgICAgICB0aGF0IGhhdmUgYmVlbiBzYXZl
ZCBpbiBzdGFjayB0cmFjZXMuCisKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5z
dGFsbENvZGUpOiBXcml0ZUJhcnJpZXIgcmVxdWlyZXMgc3BlY2lhbAorICAgICAgICBoYW5kbGlu
ZyBmb3IgcG9pbnRlcnMgdGhhdCBtYXkgYmUgbnVsbC4KKworICAgICAgICAoSlNDOjpTY3JpcHRF
eGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKTogVXBkYXRlIGZvciBpbnRlcmZhY2UK
KyAgICAgICAgY2hhbmdlcy4KKworICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBWaXNpdCB3
ZWFrbHkgYmVjYXVzZSB3ZSB3YW50CisgICAgICAgIHRvIHBhcnRpY2lwYXRlIGluIGpldHRpc29u
aW5nLgorCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4
ZWN1dGlvbik6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUpOiBE
ZWxldGVkLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24pOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6IFByb3ZpZGUgc3RydWN0dXJlcyBiZWNhdXNlIG91ciBHQyByZXF1aXJlcyBpdC4KKwog
MjAxNS0xMC0wMSAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbRVM2XSBBZGQgVHlwZWRBcnJheS5wcm90b3R5cGUgZnVuY3Rpb25hbGl0eS4KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsNzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
K2NvbnN0IENsYXNzSW5mbyBDb2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiQ29kZUJsb2NrIiwg
MCwgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKENvZGVCbG9jaykKK307CisKK2NvbnN0IENs
YXNzSW5mbyBGdW5jdGlvbkNvZGVCbG9jazo6c19pbmZvID0geworICAgICJGdW5jdGlvbkNvZGVC
bG9jayIsICZCYXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlv
bkNvZGVCbG9jaykKK307CisKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCitjb25zdCBDbGFzc0lu
Zm8gV2ViQXNzZW1ibHlDb2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiV2ViQXNzZW1ibHlDb2Rl
QmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoV2ViQXNz
ZW1ibHlDb2RlQmxvY2spCit9OworI2VuZGlmCisKK2NvbnN0IENsYXNzSW5mbyBHbG9iYWxDb2Rl
QmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiR2xvYmFsQ29kZUJsb2NrIiwgJkJhc2U6OnNfaW5mbywg
MCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEdsb2JhbENvZGVCbG9jaykKK307CisKK2NvbnN0
IENsYXNzSW5mbyBQcm9ncmFtQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIlByb2dyYW1Db2Rl
QmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvZ3Jh
bUNvZGVCbG9jaykKK307CisKK2NvbnN0IENsYXNzSW5mbyBNb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
OjpzX2luZm8gPSB7CisgICAgIk1vZHVsZVByb2dyYW1Db2RlQmxvY2siLCAmQmFzZTo6c19pbmZv
LCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoTW9kdWxlUHJvZ3JhbUNvZGVCbG9jaykKK307
CisKK2NvbnN0IENsYXNzSW5mbyBFdmFsQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIkV2YWxD
b2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENSRUFURV9NRVRIT0RfVEFCTEUoRXZh
bENvZGVCbG9jaykKK307CisKK3ZvaWQgRnVuY3Rpb25Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQoreworICAgIGpzQ2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KGNlbGwpLT5+RnVuY3Rp
b25Db2RlQmxvY2soKTsKK30KKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK3ZvaWQgV2ViQXNz
ZW1ibHlDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIGpzQ2FzdDxXZWJB
c3NlbWJseUNvZGVCbG9jayo+KGNlbGwpLT5+V2ViQXNzZW1ibHlDb2RlQmxvY2soKTsKK30KKyNl
bmRpZgorCit2b2lkIFByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQorewor
ICAgIGpzQ2FzdDxQcm9ncmFtQ29kZUJsb2NrKj4oY2VsbCktPn5Qcm9ncmFtQ29kZUJsb2NrKCk7
Cit9CisKK3ZvaWQgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwp
Cit7CisgICAganNDYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+fk1vZHVsZVBy
b2dyYW1Db2RlQmxvY2soKTsKK30KKwordm9pZCBFdmFsQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBqc0Nhc3Q8RXZhbENvZGVCbG9jayo+KGNlbGwpLT5+RXZhbENvZGVC
bG9jaygpOworfQorCiBDU3RyaW5nIENvZGVCbG9jazo6aW5mZXJyZWROYW1lKCkgY29uc3QKIHsK
ICAgICBzd2l0Y2ggKGNvZGVUeXBlKCkpIHsKQEAgLTE1Myw3ICsyMTcsNyBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEFzc3VtaW5nSklUVHlwZShQcmluCiAgICAgb3V0LnByaW50KGluZmVycmVkTmFt
ZSgpLCAiIyIsIGhhc2hBc1N0cmluZ0lmUG9zc2libGUoKSk7CiAgICAgb3V0LnByaW50KCI6WyIs
IFJhd1BvaW50ZXIodGhpcyksICItPiIpOwogICAgIGlmICghIW1fYWx0ZXJuYXRpdmUpCi0gICAg
ICAgIG91dC5wcmludChSYXdQb2ludGVyKG1fYWx0ZXJuYXRpdmUuZ2V0KCkpLCAiLT4iKTsKKyAg
ICAgICAgb3V0LnByaW50KFJhd1BvaW50ZXIoYWx0ZXJuYXRpdmUoKSksICItPiIpOwogICAgIG91
dC5wcmludChSYXdQb2ludGVyKG93bmVyRXhlY3V0YWJsZSgpKSwgIiwgIiwgaml0VHlwZSwgY29k
ZVR5cGUoKSk7CiAKICAgICBpZiAoY29kZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUpCkBAIC0xNTg1
LDggKzE2NDksOSBAQCBwcml2YXRlOgogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKIAotQ29k
ZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQot
ICAgIDogbV9nbG9iYWxPYmplY3Qob3RoZXIubV9nbG9iYWxPYmplY3QpCitDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IENvZGVCbG9jayYgb3RoZXIpCisgICAgOiBKU0NlbGwoKnZtLCBzdHJ1Y3R1cmUpCisgICAgLCBt
X2dsb2JhbE9iamVjdChvdGhlci5tX2dsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcChvdGhlci5t
X2hlYXApCiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycyhvdGhlci5tX251bUNhbGxlZVJlZ2lz
dGVycykKICAgICAsIG1fbnVtVmFycyhvdGhlci5tX251bVZhcnMpCkBAIC0xNTk0LDExICsxNjU5
LDExIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywKICAgICAsIG1f
c2hvdWxkQWx3YXlzQmVJbmxpbmVkKHRydWUpCiAgICAgLCBtX2RpZEZhaWxGVExDb21waWxhdGlv
bihmYWxzZSkKICAgICAsIG1faGFzQmVlbkNvbXBpbGVkV2l0aEZUTChmYWxzZSkKLSAgICAsIG1f
dW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwg
b3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCisgICAgLCBtX3VubGlua2VkQ29kZSgqb3RoZXIu
bV92bSwgdGhpcywgb3RoZXIubV91bmxpbmtlZENvZGUuZ2V0KCkpCiAgICAgLCBtX2hhc0RlYnVn
Z2VyU3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlz
YWJsZWQpCiAgICAgLCBtX251bUJyZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJs
ZSgqb3RoZXIubV92bSwgb3RoZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIG90aGVyLm1fb3du
ZXJFeGVjdXRhYmxlLmdldCgpKQorICAgICwgbV9vd25lckV4ZWN1dGFibGUoKm90aGVyLm1fdm0s
IHRoaXMsIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpKQogICAgICwgbV92bShvdGhlci5t
X3ZtKQogICAgICwgbV9pbnN0cnVjdGlvbnMob3RoZXIubV9pbnN0cnVjdGlvbnMpCiAgICAgLCBt
X3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNSZWdpc3RlcikKQEAgLTE2MjMsMTMgKzE2ODgsMTgg
QEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9jYXBh
YmlsaXR5TGV2ZWxTdGF0ZShERkc6OkNhcGFiaWxpdHlMZXZlbE5vdFNldCkKICNlbmRpZgogewot
ICAgIG1fdmlzaXRTdHJvbmdseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5
X29yZGVyX3JlbGF4ZWQpOwotICAgIG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkLnN0b3Jl
KGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICBtX3Zpc2l0V2Vha2x5SGFz
QmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAKICAg
ICBBU1NFUlQobV9oZWFwLT5pc0RlZmVycmVkKCkpOwogICAgIEFTU0VSVChtX3Njb3BlUmVnaXN0
ZXIuaXNMb2NhbCgpKTsKIAogICAgIHNldE51bVBhcmFtZXRlcnMob3RoZXIubnVtUGFyYW1ldGVy
cygpKTsKK30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgQ29weVBh
cnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKHZtKTsKKwogICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKICAgICBqaXRBZnRlcldhcm1V
cCgpOwogCkBAIC0xNjQzLDExICsxNzEzLDEyIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKENvcHlQ
YXJzZWRCbG9ja1RhZywKICAgICB9CiAgICAgCiAgICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRk
KHRoaXMpOwotICAgIG1faGVhcC0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZW9mKENv
ZGVCbG9jaykpOwogfQogCi1Db2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNT
Y29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1
bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAg
ICA6IG1fZ2xvYmFsT2JqZWN0KHNjb3BlLT5nbG9iYWxPYmplY3QoKS0+dm0oKSwgb3duZXJFeGVj
dXRhYmxlLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICBKU1Njb3BlKiBz
Y29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVk
IHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIDogSlND
ZWxsKCp2bSwgc3RydWN0dXJlKQorICAgICwgbV9nbG9iYWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9i
amVjdCgpLT52bSgpLCB0aGlzLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCkpCiAgICAgLCBtX2hlYXAo
Jm1fZ2xvYmFsT2JqZWN0LT52bSgpLmhlYXApCiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycyh1
bmxpbmtlZENvZGVCbG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMpCiAgICAgLCBtX251bVZhcnMo
dW5saW5rZWRDb2RlQmxvY2stPm1fbnVtVmFycykKQEAgLTE2NTUsMTEgKzE3MjYsMTEgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICwgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQodHJ1ZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV91bmxpbmtlZENv
ZGUobV9nbG9iYWxPYmplY3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxv
Y2spCisgICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdW5s
aW5rZWRDb2RlQmxvY2spCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQogICAg
ICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCiAgICAgLCBtX251bUJyZWFr
cG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwg
b3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX293bmVyRXhlY3V0YWJs
ZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQogICAgICwgbV92
bSh1bmxpbmtlZENvZGVCbG9jay0+dm0oKSkKICAgICAsIG1fdGhpc1JlZ2lzdGVyKHVubGlua2Vk
Q29kZUJsb2NrLT50aGlzUmVnaXN0ZXIoKSkKICAgICAsIG1fc2NvcGVSZWdpc3Rlcih1bmxpbmtl
ZENvZGVCbG9jay0+c2NvcGVSZWdpc3RlcigpKQpAQCAtMTY3OCwyNiArMTc0OSwzMSBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX2NhcGFiaWxpdHlM
ZXZlbFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCiB7Ci0gICAgbV92
aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJf
cmVsYXhlZCk7Ci0gICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2Us
IHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2Fs
bGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAogICAgIEFTU0VS
VChtX2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xv
Y2FsKCkpOwogCiAgICAgQVNTRVJUKG1fc291cmNlKTsKICAgICBzZXROdW1QYXJhbWV0ZXJzKHVu
bGlua2VkQ29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCkpOworfQogCi0gICAgaWYgKHZtKCktPnR5
cGVQcm9maWxlcigpIHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKLSAgICAgICAgdm0o
KS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShvd25l
ckV4ZWN1dGFibGUtPnNvdXJjZUlEKCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0
YXJ0T2Zmc2V0KCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsK
K3ZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAor
ICAgIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKwor
ICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCisg
ICAgICAgIHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5yZW1vdmVVbmV4ZWN1dGVkUmFu
Z2Uob3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdTdGFydE9mZnNldCgpLCBvd25lckV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZz
ZXQoKSk7CiAKICAgICBzZXRDb25zdGFudFJlZ2lzdGVycyh1bmxpbmtlZENvZGVCbG9jay0+Y29u
c3RhbnRSZWdpc3RlcnMoKSwgdW5saW5rZWRDb2RlQmxvY2stPmNvbnN0YW50c1NvdXJjZUNvZGVS
ZXByZXNlbnRhdGlvbigpKTsKICAgICBpZiAodW5saW5rZWRDb2RlQmxvY2stPnVzZXNHbG9iYWxP
YmplY3QoKSkKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+
Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0YW50SW5kZXgoKV0uc2V0KCptX3ZtLCBvd25l
ckV4ZWN1dGFibGUsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKKyAgICAgICAgbV9jb25zdGFudFJl
Z2lzdGVyc1t1bmxpbmtlZENvZGVCbG9jay0+Z2xvYmFsT2JqZWN0UmVnaXN0ZXIoKS50b0NvbnN0
YW50SW5kZXgoKV0uc2V0KCptX3ZtLCB0aGlzLCBtX2dsb2JhbE9iamVjdC5nZXQoKSk7CiAKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgTGlua1RpbWVDb25zdGFudENvdW50OyBpKyspIHsK
ICAgICAgICAgTGlua1RpbWVDb25zdGFudCB0eXBlID0gc3RhdGljX2Nhc3Q8TGlua1RpbWVDb25z
dGFudD4oaSk7CiAgICAgICAgIGlmICh1bnNpZ25lZCByZWdpc3RlckluZGV4ID0gdW5saW5rZWRD
b2RlQmxvY2stPnJlZ2lzdGVySW5kZXhGb3JMaW5rVGltZUNvbnN0YW50KHR5cGUpKQotICAgICAg
ICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWdpc3RlckluZGV4XS5zZXQoKm1fdm0sIG93bmVy
RXhlY3V0YWJsZSwgbV9nbG9iYWxPYmplY3QtPmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlw
ZSkpOworICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tyZWdpc3RlckluZGV4XS5zZXQo
Km1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LT5qc0NlbGxGb3JMaW5rVGltZUNvbnN0YW50KHR5
cGUpKTsKICAgICB9CiAKICAgICBIYXNoU2V0PGludCwgV1RGOjpJbnRIYXNoPGludD4sIFdURjo6
VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8aW50Pj4gY2xvbmVkQ29uc3RhbnRTeW1ib2xU
YWJsZXM7CkBAIC0xNzEyLDcgKzE3ODgsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBzeW1ib2xUYWJs
ZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhl
Y3V0YWJsZSwgc3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3ZtKSk7CisgICAgICAgICAg
ICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIHRoaXMsIHN5bWJvbFRhYmxl
LT5jbG9uZVNjb3BlUGFydCgqbV92bSkpOwogICAgICAgICAgICAgICAgIGNsb25lZENvbnN0YW50
U3ltYm9sVGFibGVzLmFkZChpICsgRmlyc3RDb25zdGFudFJlZ2lzdGVySW5kZXgpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CkBAIC0xNzMyLDE3ICsxODA4LDE3IEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICBtX2Z1bmN0aW9uRGVjbHMucmVzaXplVG9G
aXQodW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpKTsKICAgICBmb3Ig
KHNpemVfdCBjb3VudCA9IHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMo
KSwgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAgICAgIFVubGlua2VkRnVuY3Rpb25FeGVj
dXRhYmxlKiB1bmxpbmtlZEV4ZWN1dGFibGUgPSB1bmxpbmtlZENvZGVCbG9jay0+ZnVuY3Rpb25E
ZWNsKGkpOwotICAgICAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVyKCkgfHwgdm0oKS0+Y29udHJv
bEZsb3dQcm9maWxlcigpKQotICAgICAgICAgICAgdm0oKS0+ZnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJjZUlEKCks
IHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVubGlua2Vk
RXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKLSAgICAgICAgbV9mdW5jdGlv
bkRlY2xzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZEV4ZWN1dGFibGUt
PmxpbmsoKm1fdm0sIG93bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKKyAgICAgICAgaWYgKHZt
LnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgICAg
IHZtLmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uob3du
ZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxp
bmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRPZmZz
ZXQoKSk7CisgICAgICAgIG1fZnVuY3Rpb25EZWNsc1tpXS5zZXQoKm1fdm0sIHRoaXMsIHVubGlu
a2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOwog
ICAgIH0KIAogICAgIG1fZnVuY3Rpb25FeHBycy5yZXNpemVUb0ZpdCh1bmxpbmtlZENvZGVCbG9j
ay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCkpOwogICAgIGZvciAoc2l6ZV90IGNvdW50ID0gdW5s
aW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25FeHBycygpLCBpID0gMDsgaSA8IGNvdW50
OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVubGlua2VkRXhl
Y3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkV4cHIoaSk7Ci0gICAgICAgIGlm
ICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCi0g
ICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5zZXJ0VW5leGVj
dXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRFeGVjdXRhYmxl
LT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJv
ZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRXhwcnNbaV0uc2V0KCptX3Zt
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92bSwgb3duZXJF
eGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBpZiAodm0udHlwZVByb2ZpbGVyKCkgfHwg
dm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICAgICAgdm0uZnVuY3Rpb25IYXNFeGVj
dXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFibGUtPnNvdXJj
ZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zmc2V0KCksIHVu
bGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKKyAgICAgICAgbV9m
dW5jdGlvbkV4cHJzW2ldLnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5r
KCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKHVu
bGlua2VkQ29kZUJsb2NrLT5oYXNSYXJlRGF0YSgpKSB7CkBAIC0xODIxLDcgKzE4OTcsNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAKICAgICAgICAgdW5zaWdu
ZWQgb3BMZW5ndGggPSBvcGNvZGVMZW5ndGgocGNbMF0udS5vcGNvZGUpOwogCi0gICAgICAgIGlu
c3RydWN0aW9uc1tpXSA9IHZtKCktPmludGVycHJldGVyLT5nZXRPcGNvZGUocGNbMF0udS5vcGNv
ZGUpOworICAgICAgICBpbnN0cnVjdGlvbnNbaV0gPSB2bS5pbnRlcnByZXRlci0+Z2V0T3Bjb2Rl
KHBjWzBdLnUub3Bjb2RlKTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IDE7IGogPCBvcExlbmd0
aDsgKytqKSB7CiAgICAgICAgICAgICBpZiAoc2l6ZW9mKGludDMyX3QpICE9IHNpemVvZihpbnRw
dHJfdCkpCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBqXS51LnBvaW50ZXIgPSAw
OwpAQCAtMTg4MCw3ICsxOTU2LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0
YWJsZSogbwogICAgICAgICAgICAgaW50IGluZmVycmVkSW5saW5lQ2FwYWNpdHkgPSBwY1tvcExl
bmd0aCAtIDJdLnUub3BlcmFuZDsKIAogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExl
bmd0aCAtIDFdID0gb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgICAgICAgICBvYmplY3RB
bGxvY2F0aW9uUHJvZmlsZS0+aW5pdGlhbGl6ZSgqdm0oKSwKKyAgICAgICAgICAgIG9iamVjdEFs
bG9jYXRpb25Qcm9maWxlLT5pbml0aWFsaXplKHZtLAogICAgICAgICAgICAgICAgIG93bmVyRXhl
Y3V0YWJsZSwgbV9nbG9iYWxPYmplY3QtPm9iamVjdFByb3RvdHlwZSgpLCBpbmZlcnJlZElubGlu
ZUNhcGFjaXR5KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0xOTI5LDExICsy
MDA1LDExIEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAg
ICAgICAgICAgICAgICAgLy8gS2VlcCB0aGUgbGlua2VkIG1vZHVsZSBlbnZpcm9ubWVudCBzdHJv
bmdseSByZWZlcmVuY2VkLgogICAgICAgICAgICAgICAgICAgICBpZiAoc3Ryb25nbHlSZWZlcmVu
Y2VkTW9kdWxlRW52aXJvbm1lbnRzLmFkZChqc0Nhc3Q8SlNNb2R1bGVFbnZpcm9ubWVudCo+KG9w
LmxleGljYWxFbnZpcm9ubWVudCkpLmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBhZGRDb25zdGFudChvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwotICAgICAgICAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxl
LCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOworICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywgb3AubGV4aWNhbEVudmlyb25tZW50KTsK
ICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA2XS51LnN5bWJvbFRhYmxlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhp
Y2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDZdLnUuc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52
aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChKU1Njb3Bl
KiBjb25zdGFudFNjb3BlID0gSlNTY29wZTo6Y29uc3RhbnRTY29wZUZvckNvZGVCbG9jayhvcC50
eXBlLCB0aGlzKSkKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxs
LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBjb25zdGFudFNjb3BlKTsKKyAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUuanNDZWxsLnNldCh2bSwgdGhpcywgY29uc3RhbnRT
Y29wZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA2XS51LnBvaW50ZXIgPSBudWxscHRyOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xOTY2LDcg
KzIwNDIsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAg
ICAgICAgICBpZiAob3AudHlwZSA9PSBHbG9iYWxWYXIgfHwgb3AudHlwZSA9PSBHbG9iYWxWYXJX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzIHx8IG9wLnR5cGUgPT0gR2xvYmFsTGV4aWNhbFZhciB8fCBv
cC50eXBlID09IEdsb2JhbExleGljYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQogICAgICAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gb3Aud2F0Y2hw
b2ludFNldDsKICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKLSAgICAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVj
dXRhYmxlLCBvcC5zdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NV0udS5zdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihv
cC5vcGVyYW5kKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDAzLDE0ICsy
MDc5LDE0IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAg
ICAgICAgICAgICBpZiAob3Aud2F0Y2hwb2ludFNldCkKICAgICAgICAgICAgICAgICAgICAgb3Au
d2F0Y2hwb2ludFNldC0+aW52YWxpZGF0ZShQdXRUb1Njb3BlRmlyZURldGFpbCh0aGlzLCBpZGVu
dCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChvcC5zdHJ1Y3R1cmUpCi0gICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVjdHVyZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0
YWJsZSwgb3Auc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVd
LnUuc3RydWN0dXJlLnNldCh2bSwgdGhpcywgb3Auc3RydWN0dXJlKTsKICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNl0udS5wb2ludGVyID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3Au
b3BlcmFuZCk7CiAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9wcm9maWxlX3R5cGU6IHsKLSAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtKCktPnR5
cGVQcm9maWxlcigpKTsKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHZtLnR5cGVQcm9maWxl
cigpKTsKICAgICAgICAgICAgIC8vIFRoZSBmb3JtYXQgb2YgdGhpcyBpbnN0cnVjdGlvbiBpczog
b3BfcHJvZmlsZV90eXBlIHJlZ1RvUHJvZmlsZSwgVHlwZUxvY2F0aW9uKiwgZmxhZywgaWRlbnRp
Zmllcj8sIHJlc29sdmVUeXBlPwogICAgICAgICAgICAgc2l6ZV90IGluc3RydWN0aW9uT2Zmc2V0
ID0gaSArIG9wTGVuZ3RoIC0gMTsKICAgICAgICAgICAgIHVuc2lnbmVkIGRpdm90U3RhcnQsIGRp
dm90RW5kOwpAQCAtMjA0MCw4ICsyMTE2LDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0
RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgb3Vy
IHBhcmVudCBzY29wZSB3YXMgY3JlYXRlZCB3aGlsZSBwcm9maWxpbmcgd2FzIGRpc2FibGVkLCBp
dCB3aWxsIG5vdCBoYXZlIHByZXBhcmVkIGZvciBwcm9maWxpbmcgeWV0LgogICAgICAgICAgICAg
ICAgICAgICBzeW1ib2xUYWJsZS0+cHJlcGFyZUZvclR5cGVQcm9maWxpbmcobG9ja2VyKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJ
REZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgKnZtKCkpOwotICAgICAgICAgICAgICAgICAgICBn
bG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2Nr
ZXIsIGltcGwsICp2bSgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9
IHN5bWJvbFRhYmxlLT51bmlxdWVJREZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwgdm0pOworICAg
ICAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVT
ZXRGb3JWYXJpYWJsZShsb2NrZXIsIGltcGwsIHZtKTsKICAgICAgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IFR5cGVQcm9maWxlck5vR2xv
YmFsSURFeGlzdHM7CiAKQEAgLTIwNTQsOCArMjEzMCw4IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCA9IGlkZW50aWZpZXIocGNbNF0udS5vcGVyYW5kKTsKICAgICAgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAg
ICAgICAvLyBJZiBvdXIgcGFyZW50IHNjb3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3
YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQu
Ci0gICAgICAgICAgICAgICAgZ2xvYmFsVmFyaWFibGVJRCA9IHN5bWJvbFRhYmxlLT51bmlxdWVJ
REZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCAqdm0oKSk7Ci0gICAgICAgICAgICAg
ICAgZ2xvYmFsVHlwZVNldCA9IHN5bWJvbFRhYmxlLT5nbG9iYWxUeXBlU2V0Rm9yVmFyaWFibGUo
bG9ja2VyLCBpZGVudC5pbXBsKCksICp2bSgpKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxWYXJp
YWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpZGVudC5p
bXBsKCksIHZtKTsKKyAgICAgICAgICAgICAgICBnbG9iYWxUeXBlU2V0ID0gc3ltYm9sVGFibGUt
Pmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgdm0pOwogCiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0yMDgxLDggKzIxNTcsOCBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBi
b29sPiBsb2NhdGlvblBhaXIgPSB2bSgpLT50eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2Fj
aGUoKS0+Z2V0VHlwZUxvY2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsCi0gICAgICAgICAgICAgICAg
b3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFs
VHlwZVNldCwgdm0oKSk7CisgICAgICAgICAgICBzdGQ6OnBhaXI8VHlwZUxvY2F0aW9uKiwgYm9v
bD4gbG9jYXRpb25QYWlyID0gdm0udHlwZVByb2ZpbGVyKCktPnR5cGVMb2NhdGlvbkNhY2hlKCkt
PmdldFR5cGVMb2NhdGlvbihnbG9iYWxWYXJpYWJsZUlELAorICAgICAgICAgICAgICAgIG93bmVy
RXhlY3V0YWJsZS0+c291cmNlSUQoKSwgZGl2b3RTdGFydCwgZGl2b3RFbmQsIGdsb2JhbFR5cGVT
ZXQsICZ2bSk7CiAgICAgICAgICAgICBUeXBlTG9jYXRpb24qIGxvY2F0aW9uID0gbG9jYXRpb25Q
YWlyLmZpcnN0OwogICAgICAgICAgICAgYm9vbCBpc05ld0xvY2F0aW9uID0gbG9jYXRpb25QYWly
LnNlY29uZDsKIApAQCAtMjA5MCw3ICsyMTY2LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGxvY2F0aW9uLT5tX2Rpdm90Rm9yRnVu
Y3Rpb25PZmZzZXRJZlJldHVyblN0YXRlbWVudCA9IG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ1N0YXJ0T2Zmc2V0KCk7CiAKICAgICAgICAgICAgIGlmIChzaG91bGRBbmFseXplICYmIGlz
TmV3TG9jYXRpb24pCi0gICAgICAgICAgICAgICAgdm0oKS0+dHlwZVByb2ZpbGVyKCktPmluc2Vy
dE5ld0xvY2F0aW9uKGxvY2F0aW9uKTsKKyAgICAgICAgICAgICAgICB2bS50eXBlUHJvZmlsZXIo
KS0+aW5zZXJ0TmV3TG9jYXRpb24obG9jYXRpb24pOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDJdLnUubG9jYXRpb24gPSBsb2NhdGlvbjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjEwOCw3ICsyMTg0LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICBpICs9IG9wTGVuZ3RoOwogICAgIH0KIAotICAgIGlmICh2bSgpLT5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpCisgICAgaWYgKHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKICAgICAg
ICAgaW5zZXJ0QmFzaWNCbG9ja0JvdW5kYXJpZXNGb3JDb250cm9sRmxvd1Byb2ZpbGVyKGluc3Ry
dWN0aW9ucyk7CiAKICAgICBtX2luc3RydWN0aW9ucyA9IFdURjo6UmVmQ291bnRlZEFycmF5PElu
c3RydWN0aW9uPihpbnN0cnVjdGlvbnMpOwpAQCAtMjEyOCwxMiArMjIwNCwxMyBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIGR1bXBCeXRlY29kZSgp
OwogICAgIAogICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKLSAgICBtX2hlYXAt
PnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spICsgbV9pbnN0cnVj
dGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSk7CisgICAgbV9oZWFwLT5yZXBvcnRF
eHRyYU1lbW9yeUFsbG9jYXRlZChtX2luc3RydWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1
Y3Rpb24pKTsKIH0KIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLUNvZGVCbG9jazo6Q29kZUJs
b2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCi0gICAgOiBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmpl
Y3QtPnZtKCksIG93bmVyRXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0KQorQ29kZUJsb2NrOjpDb2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxl
KiBvd25lckV4ZWN1dGFibGUsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkK
KyAgICA6IEpTQ2VsbCh2bSwgc3RydWN0dXJlKQorICAgICwgbV9nbG9iYWxPYmplY3QoZ2xvYmFs
T2JqZWN0LT52bSgpLCB0aGlzLCBnbG9iYWxPYmplY3QpCiAgICAgLCBtX2hlYXAoJm1fZ2xvYmFs
T2JqZWN0LT52bSgpLmhlYXApCiAgICAgLCBtX251bUNhbGxlZVJlZ2lzdGVycygwKQogICAgICwg
bV9udW1WYXJzKDApCkBAIC0yMTQ0LDcgKzIyMjEsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhX
ZWJBc3NlbWJseUV4ZWN1dGFiCiAgICAgLCBtX2hhc0RlYnVnZ2VyU3RhdGVtZW50KGZhbHNlKQog
ICAgICwgbV9zdGVwcGluZ01vZGUoU3RlcHBpbmdNb2RlRGlzYWJsZWQpCiAgICAgLCBtX251bUJy
ZWFrcG9pbnRzKDApCi0gICAgLCBtX293bmVyRXhlY3V0YWJsZShtX2dsb2JhbE9iamVjdC0+dm0o
KSwgb3duZXJFeGVjdXRhYmxlLCBvd25lckV4ZWN1dGFibGUpCisgICAgLCBtX293bmVyRXhlY3V0
YWJsZShtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgb3duZXJFeGVjdXRhYmxlKQogICAgICwg
bV92bSgmdm0pCiAgICAgLCBtX2lzU3RyaWN0TW9kZShmYWxzZSkKICAgICAsIG1fbmVlZHNBY3Rp
dmF0aW9uKGZhbHNlKQpAQCAtMjE1OCw5ICsyMjM1LDEzIEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFdlYkFzc2VtYmx5RXhlY3V0YWIKICNlbmRpZgogewogICAgIEFTU0VSVChtX2hlYXAtPmlzRGVm
ZXJyZWQoKSk7Cit9CisKK3ZvaWQgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0KikKK3sKKyAgICBCYXNlOjpmaW5p
c2hDcmVhdGlvbih2bSk7CiAKICAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7Ci0g
ICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSk7
CiB9CiAjZW5kaWYKIApAQCAtMjE3MiwyOSArMjI1MywzMCBAQCBDb2RlQmxvY2s6On5Db2RlQmxv
Y2soKQogI2lmIEVOQUJMRShWRVJCT1NFX1ZBTFVFX1BST0ZJTEUpCiAgICAgZHVtcFZhbHVlUHJv
ZmlsZXMoKTsKICNlbmRpZgotICAgIHdoaWxlIChtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigp
ICE9IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nTExJbnRD
YWxscy5iZWdpbigpLT5yZW1vdmUoKTsKLSNpZiBFTkFCTEUoSklUKQorCiAgICAgLy8gV2UgbWF5
IGJlIGRlc3Ryb3llZCBiZWZvcmUgYW55IENvZGVCbG9ja3MgdGhhdCByZWZlciB0byB1cyBhcmUg
ZGVzdHJveWVkLgogICAgIC8vIENvbnNpZGVyIHRoYXQgdHdvIENvZGVCbG9ja3MgYmVjb21lIHVu
cmVhY2hhYmxlIGF0IHRoZSBzYW1lIHRpbWUuIFRoZXJlCiAgICAgLy8gaXMgbm8gZ3VhcmFudGVl
IGFib3V0IHRoZSBvcmRlciBpbiB3aGljaCB0aGUgQ29kZUJsb2NrcyBhcmUgZGVzdHJveWVkLgog
ICAgIC8vIFNvLCBpZiB3ZSBkb24ndCByZW1vdmUgaW5jb21pbmcgY2FsbHMsIGFuZCBnZXQgZGVz
dHJveWVkIGJlZm9yZSB0aGUKICAgICAvLyBDb2RlQmxvY2socykgdGhhdCBoYXZlIGNhbGxzIGlu
dG8gdXMsIHRoZW4gdGhlIENhbGxMaW5rSW5mbyB2ZWN0b3IncwogICAgIC8vIGRlc3RydWN0b3Ig
d2lsbCB0cnkgdG8gcmVtb3ZlIG5vZGVzIGZyb20gb3VyIChubyBsb25nZXIgdmFsaWQpIGxpbmtl
ZCBsaXN0LgotICAgIHdoaWxlIChtX2luY29taW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5n
Q2FsbHMuZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdDYWxscy5iZWdpbigpLT5yZW1vdmUoKTsK
LSAgICB3aGlsZSAobV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29t
aW5nUG9seW1vcnBoaWNDYWxscy5lbmQoKSkKLSAgICAgICAgbV9pbmNvbWluZ1BvbHltb3JwaGlj
Q2FsbHMuYmVnaW4oKS0+cmVtb3ZlKCk7CisgICAgdW5saW5rSW5jb21pbmdDYWxscygpOwogICAg
IAogICAgIC8vIE5vdGUgdGhhdCBvdXIgb3V0Z29pbmcgY2FsbHMgd2lsbCBiZSByZW1vdmVkIGZy
b20gb3RoZXIgQ29kZUJsb2NrcycKICAgICAvLyBtX2luY29taW5nQ2FsbHMgbGlua2VkIGxpc3Rz
IHRocm91Z2ggdGhlIGV4ZWN1dGlvbiBvZiB0aGUgfkNhbGxMaW5rSW5mbwogICAgIC8vIGRlc3Ry
dWN0b3JzLgogCisjaWYgRU5BQkxFKEpJVCkKICAgICBmb3IgKEJhZzxTdHJ1Y3R1cmVTdHViSW5m
bz46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0dWJJbmZvcy5iZWdpbigpOyAhIWl0ZXI7ICsraXRlcikK
ICAgICAgICAgKCppdGVyKS0+ZGVyZWYoKTsKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogfQogCit2
b2lkIENvZGVCbG9jazo6c2V0QWx0ZXJuYXRpdmUoVk0mIHZtLCBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlKQoreworICAgIG1fYWx0ZXJuYXRpdmUuc2V0KHZtLCB0aGlzLCBhbHRlcm5hdGl2ZSk7Cit9
CisKIHZvaWQgQ29kZUJsb2NrOjpzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSkKIHsKICAg
ICBtX251bVBhcmFtZXRlcnMgPSBuZXdWYWx1ZTsKQEAgLTIyMTUsNzMgKzIyOTcsNDMgQEAgQ29k
ZUJsb2NrKiBDb2RlQmxvY2s6OnNwZWNpYWxPU1JFbnRyeUJsbwogICAgIGlmIChqaXRUeXBlKCkg
IT0gSklUQ29kZTo6REZHSklUKQogICAgICAgICByZXR1cm4gMDsKICAgICBERkc6OkpJVENvZGUq
IGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOwotICAgIHJldHVybiBqaXRDb2RlLT5vc3JFbnRy
eUJsb2NrLmdldCgpOworICAgIHJldHVybiBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCk7CiAjZWxz
ZSAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICByZXR1cm4gMDsKICNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0U3Ryb25nbHkoU2xvdFZpc2l0b3ImIHZp
c2l0b3IpCit2b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiB7Ci0gICAgYm9vbCBzZXRCeU1lID0gbV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5jb21w
YXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUpOworICAgIGJvb2wgc2V0QnlNZSA9IG1fdmlz
aXRXZWFrbHlIYXNCZWVuQ2FsbGVkLmNvbXBhcmVFeGNoYW5nZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7
CiAgICAgaWYgKCFzZXRCeU1lKQogICAgICAgICByZXR1cm47CiAKLSAgICB2aXNpdEFnZ3JlZ2F0
ZSh2aXNpdG9yKTsKLQotICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3Ip
OwotICAgIHN0cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKLSAgICBwcm9wYWdh
dGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKLX0KLQotdm9pZCBDb2RlQmxvY2s6OnZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIC8vIEkgbWF5IGJlIGFza2VkIHRvIHNj
YW4gbXlzZWxmIG1vcmUgdGhhbiBvbmNlLCBhbmQgaXQgbWF5IGV2ZW4gaGFwcGVuIGNvbmN1cnJl
bnRseS4KLSAgICAvLyBUbyB0aGlzIGVuZCwgdXNlIGFuIGF0b21pYyBvcGVyYXRpb24gdG8gY2hl
Y2sgKGFuZCBzZXQpIGlmIEkndmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4KLSAgICAvLyBPbmx5IG9u
ZSB0aHJlYWQgbWF5IHByb2NlZWQgcGFzdCB0aGlzIHBvaW50IC0gd2hpY2hldmVyIG9uZSB3aW5z
IHRoZSBhdG9taWMgc2V0IHJhY2UuCi0gICAgYm9vbCBzZXRCeU1lID0gbV92aXNpdEFnZ3JlZ2F0
ZUhhc0JlZW5DYWxsZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKLSAgICBp
ZiAoIXNldEJ5TWUpCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKHRoaXMpKQogICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKLSAgICAgICAgbV9hbHRlcm5hdGl2
ZS0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci0gICAgCi0gICAgaWYgKENvZGVCbG9jayogb3Ro
ZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCi0gICAgICAgIG90aGVyQmxv
Y2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogCi0gICAgdmlzaXRvci5yZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQob3duZXJFeGVjdXRhYmxlKCksIHNpemVvZihDb2RlQmxvY2spKTsKLSAgICBp
ZiAobV9qaXRDb2RlKQotICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChv
d25lckV4ZWN1dGFibGUoKSwgbV9qaXRDb2RlLT5zaXplKCkpOwotICAgIGlmIChtX2luc3RydWN0
aW9ucy5zaXplKCkpIHsKLSAgICAgICAgLy8gRGl2aWRlIGJ5IHJlZkNvdW50KCkgYmVjYXVzZSBt
X2luc3RydWN0aW9ucyBwb2ludHMgdG8gc29tZXRoaW5nIHRoYXQgaXMgc2hhcmVkCi0gICAgICAg
IC8vIGJ5IG11bHRpcGxlIENvZGVCbG9ja3MsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gY291bnQgaXQg
dG93YXJkcyB0aGUgaGVhcCBzaXplIG9uY2UuCi0gICAgICAgIC8vIEhhdmluZyBlYWNoIENvZGVC
bG9jayByZXBvcnQgb25seSBpdHMgcHJvcG9ydGlvbmFsIHNoYXJlIG9mIHRoZSBzaXplIGlzIG9u
ZSB3YXkKLSAgICAgICAgLy8gb2YgYWNjb21wbGlzaGluZyB0aGlzLgotICAgICAgICB2aXNpdG9y
LnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZChvd25lckV4ZWN1dGFibGUoKSwgbV9pbnN0cnVjdGlv
bnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1Y3Rpb25zLnJlZkNvdW50
KCkpOworICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KCkpIHsKKyAgICAgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKKyAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHZpc2l0b3IuYXBwZW5kKCZtX3VubGlua2VkQ29kZSk7Ci0KICAgICAvLyBU
aGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25hbCBmaW5hbGl6ZXJz
OiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKICAgICAvLyBhbmQgamV0dGlzb25pbmcuIFRoZSBwcm9i
YWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSB0aGluZ3MK
ICAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBhZGQgb25lIG5vIG1h
dHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CiAgICAgLy8gZmlndXJlcyBvdXQgd2hldGhl
ciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyKHRoaXMpOwotICAgIAotICAgIG1fYWxsVHJhbnNpdGlvbnNIYXZlQmVlbk1hcmtlZCA9
IGZhbHNlOwotICAgIAotICAgIGlmIChzaG91bGRWaXNpdFN0cm9uZ2x5KCkpIHsKLSAgICAgICAg
dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKKyAg
ICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFs
aXplcik7CisKICAgICBpZiAoIUpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICAvLyBJZiB3ZSBqZXR0aXNvbiBvdXJzZWx2ZXMgd2UnbGwg
aW5zdGFsbCBvdXIgYWx0ZXJuYXRpdmUsIHNvIG1ha2Ugc3VyZSB0aGF0IGl0CisgICAgLy8gc3Vy
dml2ZXMgR0MgZXZlbiBpZiB3ZSBkb24ndC4KKyAgICB2aXNpdG9yLmFwcGVuZCgmbV9hbHRlcm5h
dGl2ZSk7CisgICAgCiAgICAgLy8gVGhlcmUgYXJlIHR3byB0aGluZ3MgdGhhdCB3ZSB1c2Ugd2Vh
ayByZWZlcmVuY2UgaGFydmVzdGVycyBmb3I6IERGRyBmaXhwb2ludCBmb3IKICAgICAvLyBqZXR0
aXNvbmluZywgYW5kIHRyeWluZyB0byBmaW5kIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCBiZSBsaXZl
IGJhc2VkIG9uIHNvbWUKICAgICAvLyBpbmxpbmUgY2FjaGUuIFNvIGl0IG1ha2VzIHNlbnNlIHRv
IHJlZ2lzdGVyIHRoZW0gcmVnYXJkbGVzcy4KLSAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIodGhpcyk7CisgICAgdmlzaXRvci5hZGRXZWFrUmVmZXJlbmNlSGFydmVzdGVyKCZt
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAgICAgLy8g
V2UgZ2V0IGhlcmUgaWYgd2UncmUgbGl2ZSBpbiB0aGUgc2Vuc2UgdGhhdCBvdXIgb3duZXIgZXhl
Y3V0YWJsZSBpcyBsaXZlLApAQCAtMjI5MiwxNCArMjM0NCw0OCBAQCB2b2lkIENvZGVCbG9jazo6
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0CiAgICAgLy8gZWl0aGVyIHVzIG1hcmtpbmcgYWRkaXRp
b25hbCBvYmplY3RzLCBvciBieSBvdGhlciBvYmplY3RzIGJlaW5nIG1hcmtlZCBmb3IKICAgICAv
LyBvdGhlciByZWFzb25zLCB0aGF0IHRoaXMgaXRlcmF0aW9uIHNob3VsZCBydW4gYWdhaW47IGl0
IHdpbGwgbm90aWZ5IHVzIG9mIHRoaXMKICAgICAvLyBkZWNpc2lvbiBieSBjYWxsaW5nIGhhcnZl
c3RXZWFrUmVmZXJlbmNlcygpLgotICAgIAotICAgIG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxp
dmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOwotICAgIAorCisgICAgbV9hbGxUcmFuc2l0aW9u
c0hhdmVCZWVuTWFya2VkID0gZmFsc2U7CiAgICAgcHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRv
cik7CisKKyAgICBtX2ppdENvZGUtPmRmZ0NvbW1vbigpLT5saXZlbmVzc0hhc0JlZW5Qcm92ZWQg
PSBmYWxzZTsKICAgICBkZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKIH0KIAordm9pZCBDb2RlQmxvY2s6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBDb2RlQmxvY2sqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8Q29kZUJsb2NrKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklU
Uyh0aGlzT2JqZWN0LCBpbmZvKCkpOworICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKKyAgICB0aGlzT2JqZWN0LT52aXNpdENoaWxkcmVuKHZpc2l0b3IpOwor
fQorCit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikK
K3sKKyAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IG1heSB1c2UgdW5jb25kaXRpb25h
bCBmaW5hbGl6ZXJzOiBpbmxpbmUgY2FjaGUgY2xlYXJpbmcKKyAgICAvLyBhbmQgamV0dGlzb25p
bmcuIFRoZSBwcm9iYWJpbGl0eSBvZiB1cyB3YW50aW5nIHRvIGRvIGF0IGxlYXN0IG9uZSBvZiB0
aG9zZSB0aGluZ3MKKyAgICAvLyBpcyBwcm9iYWJseSBxdWl0ZSBjbG9zZSB0byAxLiBTbyB3ZSBh
ZGQgb25lIG5vIG1hdHRlciB3aGF0IGFuZCB3aGVuIGl0IHJ1bnMsIGl0CisgICAgLy8gZmlndXJl
cyBvdXQgd2hldGhlciBpdCBoYXMgYW55IHdvcmsgdG8gZG8uCisgICAgdmlzaXRvci5hZGRVbmNv
bmRpdGlvbmFsRmluYWxpemVyKCZtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXIpOworCisgICAgaWYg
KENvZGVCbG9jayogb3RoZXJCbG9jayA9IHNwZWNpYWxPU1JFbnRyeUJsb2NrT3JOdWxsKCkpCisg
ICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIob3RoZXJCbG9j
ayk7CisKKyAgICBpZiAobV9qaXRDb2RlKQorICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVt
b3J5VmlzaXRlZCh0aGlzLCBtX2ppdENvZGUtPnNpemUoKSk7CisgICAgaWYgKG1faW5zdHJ1Y3Rp
b25zLnNpemUoKSkKKyAgICAgICAgdmlzaXRvci5yZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQodGhp
cywgbV9pbnN0cnVjdGlvbnMuc2l6ZSgpICogc2l6ZW9mKEluc3RydWN0aW9uKSAvIG1faW5zdHJ1
Y3Rpb25zLnJlZkNvdW50KCkpOworCisgICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2Rl
KTsKKworICAgIHN0cm9uZ2x5VmlzaXRTdHJvbmdSZWZlcmVuY2VzKHZpc2l0b3IpOworICAgIHN0
cm9uZ2x5VmlzaXRXZWFrUmVmZXJlbmNlcyh2aXNpdG9yKTsKKworICAgIG1fYWxsVHJhbnNpdGlv
bnNIYXZlQmVlbk1hcmtlZCA9IGZhbHNlOworICAgIHByb3BhZ2F0ZVRyYW5zaXRpb25zKHZpc2l0
b3IpOworfQorCiBib29sIENvZGVCbG9jazo6c2hvdWxkVmlzaXRTdHJvbmdseSgpCiB7CiAgICAg
aWYgKE9wdGlvbnM6OmZvcmNlQ29kZUJsb2NrTGl2ZW5lc3MoKSkKQEAgLTIzMjcsMTcgKzI0MTMs
NyBAQCBib29sIENvZGVCbG9jazo6aXNLbm93blRvQmVMaXZlRHVyaW5nR0MoCiAgICAgLy8gICBi
ZWNhdXNlIGxpdmVuZXNzSGFzQmVlblByb3ZlZCB3b3VsZCBoYXZlIHN1cnZpdmVkIGFzIHRydWUu
CiAgICAgLy8gLSBDb2RlIGJsb2NrcyB0aGF0IGRvbid0IGhhdmUgYW55IGRlYWQgd2VhayByZWZl
cmVuY2VzLgogCi0gICAgaWYgKG1fdmlzaXRTdHJvbmdseUhhc0JlZW5DYWxsZWQubG9hZChzdGQ6
Om1lbW9yeV9vcmRlcl9yZWxheGVkKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBpZiAoSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkp
IHsKLSAgICAgICAgaWYgKG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblBy
b3ZlZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSNlbmRpZgotCi0gICAgcmV0
dXJuIGZhbHNlOworICAgIHJldHVybiBIZWFwOjppc01hcmtlZCh0aGlzKTsKIH0KIAogYm9vbCBD
b2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKCkKQEAgLTIzNDcsMTIg
KzI0MjMsMzQgQEAgYm9vbCBDb2RlQmxvY2s6OnNob3VsZEpldHRpc29uRHVlVG9XZWFrUgogICAg
IHJldHVybiAhaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKIH0KIAorc3RhdGljIHN0ZDo6Y2hy
b25vOjptaWxsaXNlY29uZHMgdGltZVRvTGl2ZShKSVRDb2RlOjpKSVRUeXBlIGppdFR5cGUpCit7
CisgICAgc3dpdGNoIChqaXRUeXBlKSB7CisgICAgY2FzZSBKSVRDb2RlOjpJbnRlcnByZXRlclRo
dW5rOgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJv
bm86Om1pbGxpc2Vjb25kcz4oCisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSk7
CisgICAgY2FzZSBKSVRDb2RlOjpCYXNlbGluZUpJVDoKKyAgICAgICAgLy8gRWZmZWN0aXZlbHkg
MTAgYWRkaXRpb25hbCBzZWNvbmRzLCBzaW5jZSBCYXNlbGluZUpJVCBhbmQKKyAgICAgICAgLy8g
SW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KKyAgICAgICAgcmV0dXJuIHN0ZDo6
Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAorICAgICAg
ICAgICAgc3RkOjpjaHJvbm86OnNlY29uZHMoMTUpKTsKKyAgICBjYXNlIEpJVENvZGU6OkRGR0pJ
VDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25v
OjptaWxsaXNlY29uZHM+KAorICAgICAgICAgICAgc3RkOjpjaHJvbm86OnNlY29uZHMoMjApKTsK
KyAgICBjYXNlIEpJVENvZGU6OkZUTEpJVDoKKyAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpk
dXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM+KAorICAgICAgICAgICAgc3Rk
OjpjaHJvbm86OnNlY29uZHMoNjApKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gc3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kczo6bWF4KCk7CisgICAgfQorfQorCiBib29sIENvZGVCbG9j
azo6c2hvdWxkSmV0dGlzb25EdWVUb09sZEFnZSgpCiB7Ci0gICAgaWYgKG1fdmlzaXRTdHJvbmds
eUhhc0JlZW5DYWxsZWQubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKSkKKyAgICBpZiAo
SGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICh0
aW1lU2luY2VDcmVhdGlvbigpIDwgSklUQ29kZTo6dGltZVRvTGl2ZShqaXRUeXBlKCkpKQorICAg
IGlmICh0aW1lU2luY2VDcmVhdGlvbigpIDwgdGltZVRvTGl2ZShqaXRUeXBlKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1MDUsMTQgKzI2MDMsMTgg
QEAgdm9pZCBDb2RlQmxvY2s6OmRldGVybWluZUxpdmVuZXNzKFNsb3RWaQogICAgIC8vIEFsbCB3
ZWFrIHJlZmVyZW5jZXMgYXJlIGxpdmUuIFJlY29yZCB0aGlzIGluZm9ybWF0aW9uIHNvIHdlIGRv
bid0CiAgICAgLy8gY29tZSBiYWNrIGhlcmUgYWdhaW4sIGFuZCBzY2FuIHRoZSBzdHJvbmcgcmVm
ZXJlbmNlcy4KICAgICBkZmdDb21tb24tPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IHRydWU7Ci0g
ICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgdmlzaXRvci5h
cHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcih0aGlzKTsKICNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnZpc2l0V2Vha1JlZmVyZW5jZXMoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCit2b2lkIENvZGVCbG9jazo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6
dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBwcm9wYWdh
dGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKLSAgICBkZXRlcm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsK
KyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9CisgICAgICAgIGJpdHdpc2VfY2FzdDxDb2RlQmxv
Y2sqPigKKyAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIpKTsKKworICAgIGNvZGVC
bG9jay0+cHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7CisgICAgY29kZUJsb2NrLT5kZXRl
cm1pbmVMaXZlbmVzcyh2aXNpdG9yKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplTExJ
bnRJbmxpbmVDYWNoZXMoKQpAQCAtMjYzMiwyNiArMjczNCwyOSBAQCB2b2lkIENvZGVCbG9jazo6
ZmluYWxpemVCYXNlbGluZUpJVElubGluCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3ZvaWQgQ29kZUJsb2NrOjpVbmNvbmRpdGlvbmFsRmlu
YWxpemVyOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCiB7CisgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBiaXR3aXNlX2Nhc3Q8Q29kZUJsb2NrKj4oCisgICAgICAgIGJpdHdpc2VfY2FzdDxj
aGFyKj4odGhpcykgLSBPQkpFQ1RfT0ZGU0VUT0YoQ29kZUJsb2NrLCBtX3VuY29uZGl0aW9uYWxG
aW5hbGl6ZXIpKTsKKwogI2lmIEVOQUJMRShERkdfSklUKQotICAgIGlmIChzaG91bGRKZXR0aXNv
bkR1ZVRvV2Vha1JlZmVyZW5jZSgpKSB7Ci0gICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0
aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7CisgICAgaWYgKGNvZGVCbG9jay0+c2hvdWxkSmV0dGlz
b25EdWVUb1dlYWtSZWZlcmVuY2UoKSkgeworICAgICAgICBjb2RlQmxvY2stPmpldHRpc29uKFBy
b2ZpbGVyOjpKZXR0aXNvbkR1ZVRvV2Vha1JlZmVyZW5jZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCiAKLSAgICBpZiAoc2hvdWxkSmV0dGlzb25E
dWVUb09sZEFnZSgpKSB7Ci0gICAgICAgIGpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRv
T2xkQWdlKTsKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdlKCkp
IHsKKyAgICAgICAgY29kZUJsb2NrLT5qZXR0aXNvbihQcm9maWxlcjo6SmV0dGlzb25EdWVUb09s
ZEFnZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoSklUQ29kZTo6Y291bGRC
ZUludGVycHJldGVkKGppdFR5cGUoKSkpCi0gICAgICAgIGZpbmFsaXplTExJbnRJbmxpbmVDYWNo
ZXMoKTsKKyAgICBpZiAoSklUQ29kZTo6Y291bGRCZUludGVycHJldGVkKGNvZGVCbG9jay0+aml0
VHlwZSgpKSkKKyAgICAgICAgY29kZUJsb2NrLT5maW5hbGl6ZUxMSW50SW5saW5lQ2FjaGVzKCk7
CiAKICNpZiBFTkFCTEUoSklUKQotICAgIGlmICghIWppdENvZGUoKSkKLSAgICAgICAgZmluYWxp
emVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOworICAgIGlmICghIWNvZGVCbG9jay0+aml0Q29k
ZSgpKQorICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplQmFzZWxpbmVKSVRJbmxpbmVDYWNoZXMo
KTsKICNlbmRpZgogfQogCkBAIC0yNzQ2LDE0ICsyODUxLDE0IEBAIHZvaWQgQ29kZUJsb2NrOjp2
aXNpdE9TUkV4aXRUYXJnZXRzKFNsb3QKICAgICAvLyBndWFyYW50ZWVpbmcgdGhhdCBpdCBtYXRj
aGVzIHRoZSBkZXRhaWxzIG9mIHRoZSBDb2RlQmxvY2sgd2UgY29tcGlsZWQKICAgICAvLyB0aGUg
T1NSIGV4aXQgYWdhaW5zdC4KIAotICAgIGFsdGVybmF0aXZlKCktPnZpc2l0U3Ryb25nbHkodmlz
aXRvcik7CisgICAgdmlzaXRvci5hcHBlbmQoJm1fYWx0ZXJuYXRpdmUpOwogCiAjaWYgRU5BQkxF
KERGR19KSVQpCiAgICAgREZHOjpDb21tb25EYXRhKiBkZmdDb21tb24gPSBtX2ppdENvZGUtPmRm
Z0NvbW1vbigpOwogICAgIGlmIChkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsKICAgICAg
ICAgZm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqZGZnQ29tbW9uLT5pbmxpbmVDYWxsRnJh
bWVzKSB7CiAgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVC
bG9jaygpKTsKLSAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2so
KS0+dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKKyAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWRSZWFkT25seVBvaW50ZXIoaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9j
aygpKTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMjk2Miw4ICszMDY3LDYgQEAgdm9p
ZCBDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMoKQogICAgIHdoaWxlIChtX2luY29taW5n
TExJbnRDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdMTEludENhbGxzLmVuZCgpKQogICAgICAg
ICBtX2luY29taW5nTExJbnRDYWxscy5iZWdpbigpLT51bmxpbmsoKTsKICNpZiBFTkFCTEUoSklU
KQotICAgIGlmIChtX2luY29taW5nQ2FsbHMuaXNFbXB0eSgpICYmIG1faW5jb21pbmdQb2x5bW9y
cGhpY0NhbGxzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIHdoaWxlIChtX2luY29t
aW5nQ2FsbHMuYmVnaW4oKSAhPSBtX2luY29taW5nQ2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5j
b21pbmdDYWxscy5iZWdpbigpLT51bmxpbmsoKnZtKCkpOwogICAgIHdoaWxlIChtX2luY29taW5n
UG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9ycGhpY0NhbGxzLmVu
ZCgpKQpAQCAtMjk3Nyw2NiArMzA4MCw2NiBAQCB2b2lkIENvZGVCbG9jazo6bGlua0luY29taW5n
Q2FsbChFeGVjU3RhCiAgICAgbV9pbmNvbWluZ0xMSW50Q2FsbHMucHVzaChpbmNvbWluZyk7CiB9
CiAKLVBhc3NSZWZQdHI8Q29kZUJsb2NrPiBDb2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKK0Nv
ZGVCbG9jayogQ29kZUJsb2NrOjpuZXdSZXBsYWNlbWVudCgpCiB7CiAgICAgcmV0dXJuIG93bmVy
U2NyaXB0RXhlY3V0YWJsZSgpLT5uZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihzcGVjaWFsaXph
dGlvbktpbmQoKSk7CiB9CiAKICNpZiBFTkFCTEUoSklUKQotQ29kZUJsb2NrKiBQcm9ncmFtQ29k
ZUJsb2NrOjpyZXBsYWNlbWVudCgpCitDb2RlQmxvY2sqIENvZGVCbG9jazo6cmVwbGFjZW1lbnQo
KQogewotICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFi
bGUoKSktPmNvZGVCbG9jaygpOwotfQorICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvID0g
dGhpcy0+Y2xhc3NJbmZvKCk7CiAKLUNvZGVCbG9jayogTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6
cmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotfQorICAgIGlmIChjbGFzc0lu
Zm8gPT0gRnVuY3Rpb25Db2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9ja0ZvcihtX2lz
Q29uc3RydWN0b3IgPyBDb2RlRm9yQ29uc3RydWN0IDogQ29kZUZvckNhbGwpOwogCi1Db2RlQmxv
Y2sqIEV2YWxDb2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKLXsKLSAgICByZXR1cm4ganNDYXN0PEV2
YWxFeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKLX0KKyAgICBp
ZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIGpz
Q2FzdDxFdmFsRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7CiAK
LUNvZGVCbG9jayogRnVuY3Rpb25Db2RlQmxvY2s6OnJlcGxhY2VtZW50KCkKLXsKLSAgICByZXR1
cm4ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJs
b2NrRm9yKG1faXNDb25zdHJ1Y3RvciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7
Ci19CisgICAgaWYgKGNsYXNzSW5mbyA9PSBQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihvd25lckV4ZWN1dGFibGUoKSkt
PmNvZGVCbG9jaygpOwogCi1ERkc6OkNhcGFiaWxpdHlMZXZlbCBQcm9ncmFtQ29kZUJsb2NrOjpj
YXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCi17Ci0gICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFi
aWxpdHlMZXZlbCh0aGlzKTsKLX0KKyAgICBpZiAoY2xhc3NJbmZvID09IE1vZHVsZVByb2dyYW1D
b2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7CiAKLURGRzo6Q2FwYWJp
bGl0eUxldmVsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFs
KCkKLXsKLSAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwotfQor
I2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBpZiAoY2xhc3NJbmZvID09IFdlYkFzc2VtYmx5
Q29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBudWxscHRyCisjZW5kaWYKIAotREZH
OjpDYXBhYmlsaXR5TGV2ZWwgRXZhbENvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwo
KQotewotICAgIHJldHVybiBERkc6OmV2YWxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotREZH
OjpDYXBhYmlsaXR5TGV2ZWwgRnVuY3Rpb25Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVy
bmFsKCkKK0RGRzo6Q2FwYWJpbGl0eUxldmVsIENvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlM
ZXZlbCgpCiB7Ci0gICAgaWYgKG1faXNDb25zdHJ1Y3RvcikKLSAgICAgICAgcmV0dXJuIERGRzo6
ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci0gICAgcmV0dXJuIERG
Rzo6ZnVuY3Rpb25Gb3JDYWxsQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwotfQorICAgIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvID0gdGhpcy0+Y2xhc3NJbmZvKCk7CisKKyAgICBpZiAoY2xhc3NJ
bmZvID09IEZ1bmN0aW9uQ29kZUJsb2NrOjppbmZvKCkpIHsKKyAgICAgICAgaWYgKG1faXNDb25z
dHJ1Y3RvcikKKyAgICAgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ29uc3RydWN0Q2Fw
YWJpbGl0eUxldmVsKHRoaXMpOworICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZvckNhbGxD
YXBhYmlsaXR5TGV2ZWwodGhpcyk7CisgICAgfQorCisgICAgaWYgKGNsYXNzSW5mbyA9PSBFdmFs
Q29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVybiBERkc6OmV2YWxDYXBhYmlsaXR5TGV2
ZWwodGhpcyk7CisKKyAgICBpZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6OmluZm8o
KSkKKyAgICAgICAgcmV0dXJuIERGRzo6cHJvZ3JhbUNhcGFiaWxpdHlMZXZlbCh0aGlzKTsKKwor
ICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAg
ICAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOwogCiAjaWYgRU5B
QkxFKFdFQkFTU0VNQkxZKQotQ29kZUJsb2NrKiBXZWJBc3NlbWJseUNvZGVCbG9jazo6cmVwbGFj
ZW1lbnQoKQotewotICAgIHJldHVybiBudWxscHRyOwotfQorICAgIGlmIChjbGFzc0luZm8gPT0g
V2ViQXNzZW1ibHlDb2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6Q2Fubm90
Q29tcGlsZTsKKyNlbmRpZgogCi1ERkc6OkNhcGFiaWxpdHlMZXZlbCBXZWJBc3NlbWJseUNvZGVC
bG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQoteworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIERGRzo6Q2Fubm90Q29tcGlsZTsKIH0KLSNlbmRpZgot
I2VuZGlmCisKKyNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiB2b2lkIENvZGVCbG9jazo6amV0dGlz
b24oUHJvZmlsZXI6OkpldHRpc29uUmVhc29uIHJlYXNvbiwgUmVvcHRpbWl6YXRpb25Nb2RlIG1v
ZGUsIGNvbnN0IEZpcmVEZXRhaWwqIGRldGFpbCkKIHsKQEAgLTM5ODAsNyArNDA4Myw3IEBAIHVu
c2lnbmVkIENvZGVCbG9jazo6cmFyZUNhc2VQcm9maWxlQ291bnQKICNpZiBFTkFCTEUoSklUKQog
REZHOjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWwoKQogewotICAg
IERGRzo6Q2FwYWJpbGl0eUxldmVsIHJlc3VsdCA9IGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCk7
CisgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgcmVzdWx0ID0gY29tcHV0ZUNhcGFiaWxpdHlMZXZl
bCgpOwogICAgIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUgPSByZXN1bHQ7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEwIEBACiAjaW5jbHVkZSAi
Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQuaCIKICNpbmNsdWRlICJDb2RlQmxvY2tI
YXNoLmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCi0jaW5jbHVkZSAiQ29uY3VycmVudEpJ
VExvY2suaCIKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiQ29kZVR5cGUuaCIK
ICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRM
b2NrLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUu
aCIKICNpbmNsdWRlICJEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCIKQEAgLTQ5LDE4ICs0
OSwxOSBAQAogI2luY2x1ZGUgIkV4ZWN1dGlvbkNvdW50ZXIuaCIKICNpbmNsdWRlICJFeHByZXNz
aW9uUmFuZ2VJbmZvLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKLSNpbmNsdWRlICJPYmpl
Y3RBbGxvY2F0aW9uUHJvZmlsZS5oIgotI2luY2x1ZGUgIk9wdGlvbnMuaCIKLSNpbmNsdWRlICJQ
dXRQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJJbnN0cnVjdGlvbi5oIgogI2luY2x1ZGUgIkpJ
VENvZGUuaCIKICNpbmNsdWRlICJKSVRXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlICJKU0NlbGwu
aCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkp1bXBUYWJsZS5oIgog
I2luY2x1ZGUgIkxMSW50Q2FsbExpbmtJbmZvLmgiCiAjaW5jbHVkZSAiTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJPYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIgorI2luY2x1
ZGUgIk9wdGlvbnMuaCIKICNpbmNsdWRlICJQcm9maWxlckNvbXBpbGF0aW9uLmgiCiAjaW5jbHVk
ZSAiUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5oIgorI2luY2x1ZGUgIlB1dFByb3BlcnR5U2xvdC5o
IgogI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgpAQCAtODUsMjYgKzg2LDQ1
IEBAIGNsYXNzIEpTTW9kdWxlRW52aXJvbm1lbnQ7CiAKIGVudW0gUmVvcHRpbWl6YXRpb25Nb2Rl
IHsgRG9udENvdW50UmVvcHRpbWl6YXRpb24sIENvdW50UmVvcHRpbWl6YXRpb24gfTsKIAotY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPENvZGVCbG9jaz4sIHB1
YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyLCBwdWJsaWMgV2Vha1JlZmVyZW5jZUhhcnZlc3Rl
ciB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBDb2RlQmxvY2sgOiBwdWJs
aWMgSlNDZWxsIHsKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOwogICAgIGZyaWVuZCBjbGFzcyBC
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiAgICAgZnJpZW5kIGNsYXNzIEpJVDsKICAgICBmcmll
bmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworCisgICAgY2xhc3MgVW5jb25kaXRpb25h
bEZpbmFsaXplciA6IHB1YmxpYyBKU0M6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeyAKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAg
fTsKKworICAgIGNsYXNzIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgOiBwdWJsaWMgSlNDOjpXZWFr
UmVmZXJlbmNlSGFydmVzdGVyIHsKKyAgICAgICAgdmlydHVhbCB2b2lkIHZpc2l0V2Vha1JlZmVy
ZW5jZXMoU2xvdFZpc2l0b3ImKSBvdmVycmlkZTsKKyAgICB9OworCiBwdWJsaWM6CiAgICAgZW51
bSBDb3B5UGFyc2VkQmxvY2tUYWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3Ry
dWN0dXJlSXNJbW1vcnRhbDsKKworICAgIERFQ0xBUkVfSU5GTzsKKwogcHJvdGVjdGVkOgotICAg
IENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOwotICAgICAg
ICAKLSAgICBDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxp
bmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5z
aWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOworICAg
IENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2Nr
JiBvdGhlcik7CisgICAgQ29kZUJsb2NrKFZNKiwgU3RydWN0dXJlKiwgU2NyaXB0RXhlY3V0YWJs
ZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqLCBQYXNzUmVm
UHRyPFNvdXJjZVByb3ZpZGVyPiwgdW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJz
dExpbmVDb2x1bW5PZmZzZXQpOworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKKyAgICBDb2RlQmxv
Y2soVk0qLCBTdHJ1Y3R1cmUqLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVk0mLCBKU0dsb2JhbE9iamVjdCopOworI2VuZGlmCisKKyAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJiwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJiwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBV
bmxpbmtlZENvZGVCbG9jayosIEpTU2NvcGUqKTsKICNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCi0g
ICAgQ29kZUJsb2NrKFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYs
IEpTR2xvYmFsT2JqZWN0Kik7CisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCopOwogI2VuZGlm
CiAKICAgICBXcml0ZUJhcnJpZXI8SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogICAg
IEhlYXAqIG1faGVhcDsKIAogcHVibGljOgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZpcnR1YWwg
fkNvZGVCbG9jaygpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db2RlQmxvY2soKTsKIAogICAg
IFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1f
dW5saW5rZWRDb2RlLmdldCgpOyB9CiAKQEAgLTEyNCw4ICsxNDQsOCBAQCBwdWJsaWM6CiAgICAg
aW50KiBhZGRyZXNzT2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4gJm1fbnVtUGFyYW1ldGVyczsg
fQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZOdW1QYXJhbWV0ZXJzKCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKENvZGVCbG9jaywgbV9udW1QYXJhbWV0ZXJzKTsgfQogCi0gICAgQ29k
ZUJsb2NrKiBhbHRlcm5hdGl2ZSgpIHsgcmV0dXJuIG1fYWx0ZXJuYXRpdmUuZ2V0KCk7IH0KLSAg
ICB2b2lkIHNldEFsdGVybmF0aXZlKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBhbHRlcm5hdGl2ZSkg
eyBtX2FsdGVybmF0aXZlID0gYWx0ZXJuYXRpdmU7IH0KKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9hbHRlcm5hdGl2
ZS5nZXQoKSk7IH0KKyAgICB2b2lkIHNldEFsdGVybmF0aXZlKFZNJiwgQ29kZUJsb2NrKik7CiAK
ICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoUmVsYXRlZENvZGVC
bG9jayhGdW5jdG9yJiYgZnVuY3RvcikKICAgICB7CkBAIC0xNDgsMTYgKzE2OCwxOCBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gc3BlY2lhbGl6YXRpb25Gcm9tSXNDb25zdHJ1Y3Qo
bV9pc0NvbnN0cnVjdG9yKTsKICAgICB9Ci0gICAgCisKKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlRm9ySmV0dGlzb24oKTsgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZl
KCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CiAgICAgQ29kZUJsb2NrKiBi
YXNlbGluZVZlcnNpb24oKTsKIAotICAgIHZvaWQgY2xlYXJNYXJrcygpOwotICAgIHZvaWQgdmlz
aXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKLSAgICB2b2lkIHZpc2l0U3Ryb25nbHkoU2xvdFZp
c2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CisgICAgdm9pZCB2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCB2
aXNpdFdlYWtseShTbG90VmlzaXRvciYpOworICAgIHZvaWQgY2xlYXJWaXNpdFdlYWtseUhhc0Jl
ZW5DYWxsZWQoKTsKIAogICAgIHZvaWQgZHVtcFNvdXJjZSgpOwogICAgIHZvaWQgZHVtcFNvdXJj
ZShQcmludFN0cmVhbSYpOwpAQCAtMjY1LDcgKzI4Nyw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBpbnN0cnVjdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cnVjdGlvbnMuc2l6ZSgp
OyB9CiAKICAgICAvLyBFeGFjdGx5IGVxdWl2YWxlbnQgdG8gY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKS0+bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoY29kZUJsb2NrLT5zcGVjaWFsaXph
dGlvbktpbmQoKSkKLSAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnQoKTsK
KyAgICBDb2RlQmxvY2sqIG5ld1JlcGxhY2VtZW50KCk7CiAgICAgCiAgICAgdm9pZCBzZXRKSVRD
b2RlKFBhc3NSZWZQdHI8SklUQ29kZT4gY29kZSkKICAgICB7CkBAIC0yOTEsOSArMzEzLDkgQEAg
cHVibGljOgogICAgIH0KICAgICAKICNpZiBFTkFCTEUoSklUKQotICAgIHZpcnR1YWwgQ29kZUJs
b2NrKiByZXBsYWNlbWVudCgpID0gMDsKKyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCk7CiAK
LSAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFs
KCkgPSAwOworICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIGNvbXB1dGVDYXBhYmlsaXR5TGV2ZWwo
KTsKICAgICBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoKTsKICAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxTdGF0ZSgpIHsgcmV0dXJuIG1fY2FwYWJp
bGl0eUxldmVsU3RhdGU7IH0KIApAQCAtNTU0LDcgKzU3Niw3IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHVuc2lnbmVkIHJlc3VsdCA9IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6ZSgpOwogICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzLmFwcGVuZChXcml0ZUJhcnJpZXI8VW5rbm93bj4oKSk7
Ci0gICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFzdCgpLnNldChtX2dsb2JhbE9iamVjdC0+
dm0oKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHYpOworICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzLmxhc3QoKS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHYpOwogICAgICAg
ICBtX2NvbnN0YW50c1NvdXJjZUNvZGVSZXByZXNlbnRhdGlvbi5hcHBlbmQoU291cmNlQ29kZVJl
cHJlc2VudGF0aW9uOjpPdGhlcik7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQpAQCAt
OTA2LDggKzkyOCw2IEBAIHB1YmxpYzoKICAgICB9CiAKIHByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOwogICAgIHZvaWQg
ZmluYWxpemVMTEludElubGluZUNhY2hlcygpOwogICAgIHZvaWQgZmluYWxpemVCYXNlbGluZUpJ
VElubGluZUNhY2hlcygpOwogCkBAIC05MzQsMTQgKzk1NCwxNCBAQCBwcml2YXRlOgogICAgICAg
ICBzaXplX3QgY291bnQgPSBjb25zdGFudHMuc2l6ZSgpOwogICAgICAgICBtX2NvbnN0YW50UmVn
aXN0ZXJzLnJlc2l6ZVRvRml0KGNvdW50KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjb3VudDsgaSsrKQotICAgICAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1f
dm0sIG93bmVyRXhlY3V0YWJsZSgpLCBjb25zdGFudHNbaV0uZ2V0KCkpOworICAgICAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVyc1tpXS5zZXQoKm1fdm0sIHRoaXMsIGNvbnN0YW50c1tpXS5nZXQo
KSk7CiAgICAgICAgIG1fY29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uID0gY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uOwogICAgIH0KIAogICAgIHZvaWQgcmVwbGFjZUNv
bnN0YW50KGludCBpbmRleCwgSlNWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChp
c0NvbnN0YW50UmVnaXN0ZXJJbmRleChpbmRleCkgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihpbmRl
eCAtIEZpcnN0Q29uc3RhbnRSZWdpc3RlckluZGV4KSA8IG1fY29uc3RhbnRSZWdpc3RlcnMuc2l6
ZSgpKTsKLSAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIG1fb3duZXJFeGVjdXRhYmxl
LmdldCgpLCB2YWx1ZSk7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnNbaW5kZXggLSBGaXJz
dENvbnN0YW50UmVnaXN0ZXJJbmRleF0uc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB2
YWx1ZSk7CiAgICAgfQogCiAgICAgdm9pZCBkdW1wQnl0ZWNvZGUoCkBAIC0xMDEzLDggKzEwMzMs
NyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc1N0cmljdE1vZGU7CiAgICAgYm9vbCBtX25lZWRz
QWN0aXZhdGlvbjsKIAotICAgIEF0b21pYzxib29sPiBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZDsKLSAgICBBdG9taWM8Ym9vbD4gbV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZDsKKyAg
ICBBdG9taWM8Ym9vbD4gbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQ7CiAKICAgICBSZWZQdHI8
U291cmNlUHJvdmlkZXI+IG1fc291cmNlOwogICAgIHVuc2lnbmVkIG1fc291cmNlT2Zmc2V0OwpA
QCAtMTA1Niw3ICsxMDc1LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8V3JpdGVCYXJyaWVyPEZ1
bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25EZWNsczsKICAgICBWZWN0b3I8V3JpdGVCYXJy
aWVyPEZ1bmN0aW9uRXhlY3V0YWJsZT4+IG1fZnVuY3Rpb25FeHByczsKIAotICAgIFJlZlB0cjxD
b2RlQmxvY2s+IG1fYWx0ZXJuYXRpdmU7CisgICAgV3JpdGVCYXJyaWVyPENvZGVCbG9jaz4gbV9h
bHRlcm5hdGl2ZTsKICAgICAKICAgICBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXIgbV9sbGludEV4
ZWN1dGVDb3VudGVyOwogCkBAIC0xMDc2LDEyNCArMTA5NSwyNDIgQEAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoSklUKQogICAgIERGRzo6Q2FwYWJpbGl0eUxldmVsIG1fY2FwYWJpbGl0eUxldmVsU3Rh
dGU7CiAjZW5kaWYKKworICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFs
RmluYWxpemVyOworICAgIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIgbV93ZWFrUmVmZXJlbmNlSGFy
dmVzdGVyOwogfTsKIAogLy8gUHJvZ3JhbSBjb2RlIGlzIG5vdCBtYXJrZWQgYnkgYW55IGZ1bmN0
aW9uLCBzbyB3ZSBtYWtlIHRoZSBnbG9iYWwgb2JqZWN0CiAvLyByZXNwb25zaWJsZSBmb3IgbWFy
a2luZyBpdC4KIAogY2xhc3MgR2xvYmFsQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7Cisg
ICAgdHlwZWRlZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKIHByb3RlY3Rl
ZDoKLSAgICBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBHbG9iYWxDb2RlQmxv
Y2smIG90aGVyKQotICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAg
R2xvYmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgR2xvYmFsQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0s
IHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKICAgICB7CiAgICAgfQotICAgICAg
ICAKLSAgICBHbG9iYWxDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3BlLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNl
T2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogQ29kZUJs
b2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92
aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisKKyAgICBHbG9iYWxD
b2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpT
U2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwg
dW5zaWduZWQgc291cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisg
ICAgICAgIDogQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExp
bmVDb2x1bW5PZmZzZXQpCiAgICAgewogICAgIH0KIH07CiAKIGNsYXNzIFByb2dyYW1Db2RlQmxv
Y2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICBQcm9ncmFtQ29kZUJs
b2NrKENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCi0gICAgOiBH
bG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB0eXBlZGVmIEdsb2Jh
bENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBQcm9ncmFt
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2Rl
QmxvY2smIG90aGVyKQogICAgIHsKKyAgICAgICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkp
CisgICAgICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0
cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNl
LT5maW5pc2hDcmVhdGlvbigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgUHJvZ3JhbUNvZGVCbG9jayhQcm9ncmFtRXhl
Y3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIHVubGlu
a2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4g
c291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAg
OiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2Nv
cGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgc3RhdGlj
IFByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIFByb2dyYW1FeGVjdXRhYmxlKiBvd25l
ckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ss
CisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3Vy
Y2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQogICAgIHsKKyAgICAg
ICAgUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBQcm9ncmFtQ29kZUJs
b2NrKHZtLCB2bS0+cHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRh
YmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVD
b2x1bW5PZmZzZXQpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25l
ckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBp
bnN0YW5jZTsKICAgICB9CiAKLSNpZiBFTkFCTEUoSklUKQotcHJvdGVjdGVkOgotICAgIHZpcnR1
YWwgQ29kZUJsb2NrKiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgREZHOjpD
YXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKLSNlbmRp
ZgorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlw
ZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBD
b3B5UGFyc2VkQmxvY2tUYWcsIFByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEds
b2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3Jh
bUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQ
YXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RM
aW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJl
LCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlk
ZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIH07CiAKIGNsYXNzIE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisg
ICAgdHlwZWRlZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAg
ICBzdGF0aWMgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNl
ZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKICAgICB7CisgICAgICAg
IE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwgdm0tPm1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1
cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+Zmlu
aXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwogICAgIH0KIAotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soTW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291
cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZz
ZXQpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQorICAgIHN0YXRpYyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dy
YW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwg
UGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0
TGluZUNvbHVtbk9mZnNldCkKICAgICB7CisgICAgICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sq
IGluc3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8TW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayh2bSwg
dm0tPm1vZHVsZVByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIG93bmVyRXhlY3V0YWJs
ZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgZmlyc3RMaW5lQ29s
dW1uT2Zmc2V0KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICByZXR1cm4gaW5z
dGFuY2U7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpJVCkKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFs
IENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIERGRzo6Q2Fw
YWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7Ci0jZW5kaWYK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2YXRl
OgorICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKKyAg
ICAgICAgOiBHbG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcikKKyAgICB7CisgICAgfQorCisgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291
cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBH
bG9iYWxDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENv
ZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiB9Owog
CiBjbGFzcyBFdmFsQ29kZUJsb2NrIDogcHVibGljIEdsb2JhbENvZGVCbG9jayB7CiBwdWJsaWM6
Ci0gICAgRXZhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90
aGVyKQotICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQor
ICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisg
ICAgc3RhdGljIEV2YWxDb2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1Rh
ZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCiAgICAgeworICAgICAgICBFdmFsQ29kZUJsb2NrKiBp
bnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5o
ZWFwKSkKKyAgICAgICAgICAgIEV2YWxDb2RlQmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3Ry
dWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2Ut
PmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9Ci0gICAgICAgIAotICAgIEV2YWxDb2RlQmxvY2soRXZhbEV4
ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtl
ZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyKQotICAgICAgICA6IEdsb2JhbENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUs
IHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIDEpCisKKyAgICBz
dGF0aWMgRXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRXZhbEV4ZWN1dGFibGUqIG93bmVy
RXhlY3V0YWJsZSwgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAg
ICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVBy
b3ZpZGVyKQogICAgIHsKKyAgICAgICAgRXZhbENvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxFdmFsQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAg
ICBFdmFsQ29kZUJsb2NrKHZtLCB2bS0+ZXZhbENvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3du
ZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyKTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAg
fQotICAgIAorCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgewor
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0K
KwogICAgIGNvbnN0IElkZW50aWZpZXImIHZhcmlhYmxlKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+dmFyaWFibGUoaW5kZXgpOyB9CiAgICAgdW5zaWdu
ZWQgbnVtVmFyaWFibGVzKCkgeyByZXR1cm4gdW5saW5rZWRFdmFsQ29kZUJsb2NrKCktPm51bVZh
cmlhYmxlcygpOyB9CiAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7Ci0jZW5k
aWYKK3ByaXZhdGU6CisgICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIEV2YWxDb2RlQmxvY2smIG90aGVyKQorICAgICAgICA6
IEdsb2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQor
ICAgIHsKKyAgICB9CisgICAgICAgIAorICAgIEV2YWxDb2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgRXZhbEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRF
dmFsQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUs
IFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyKQorICAgICAgICA6IEds
b2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIDAsIDEpCisgICAgeworICAgIH0KICAgICAK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCiBwcml2YXRlOgogICAgIFVubGlu
a2VkRXZhbENvZGVCbG9jayogdW5saW5rZWRFdmFsQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4g
anNDYXN0PFVubGlua2VkRXZhbENvZGVCbG9jayo+KHVubGlua2VkQ29kZUJsb2NrKCkpOyB9CiB9
OwogCiBjbGFzcyBGdW5jdGlvbkNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sgewogcHVibGlj
OgotICAgIEZ1bmN0aW9uQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rpb25Db2Rl
QmxvY2smIG90aGVyKQotICAgICAgICA6IENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KQorICAgIHR5cGVkZWYgQ29kZUJsb2NrIEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAg
c3RhdGljIEZ1bmN0aW9uQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICB7CisgICAgICAgIEZ1bmN0aW9uQ29k
ZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29k
ZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0t
PmZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVy
KTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2Nr
LCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKKyAgICB9CisKKyAgICBzdGF0aWMg
RnVuY3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9j
aywgSlNTY29wZSogc2NvcGUsCisgICAgICAgIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNv
dXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNv
bHVtbk9mZnNldCkKICAgICB7CisgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEZ1bmN0aW9uQ29kZUJsb2NrPih2bS0+aGVhcCkp
CisgICAgICAgICAgICBGdW5jdGlvbkNvZGVCbG9jayh2bSwgdm0tPmZ1bmN0aW9uQ29kZUJsb2Nr
U3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29w
ZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KTsK
KyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSwgb3duZXJFeGVjdXRhYmxlLCB1
bmxpbmtlZENvZGVCbG9jaywgc2NvcGUpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAg
fQogCi0gICAgRnVuY3Rpb25Db2RlQmxvY2soRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Nj
b3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVu
c2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAg
ICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29w
ZSwgc291cmNlUHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUlu
Zm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgRnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29w
eVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogQ29k
ZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAg
IH0KKworICAgIEZ1bmN0aW9uQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IEZ1bmN0aW9uRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsCisgICAgICAgIFBhc3NS
ZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZz
ZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBDb2RlQmxvY2so
dm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUs
IHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKICAg
ICB7CiAgICAgfQogICAgIAotI2lmIEVOQUJMRShKSVQpCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVh
bCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBERkc6OkNh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRlOwotI2VuZGlm
CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIH07CiAKICNpZiBFTkFCTEUoV0VC
QVNTRU1CTFkpCiBjbGFzcyBXZWJBc3NlbWJseUNvZGVCbG9jayA6IHB1YmxpYyBDb2RlQmxvY2sg
ewogcHVibGljOgotICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywg
V2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQotICAgICAgICA6IENvZGVCbG9jayhDb3B5UGFy
c2VkQmxvY2ssIG90aGVyKQorICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBXZWJBc3Nl
bWJseUNvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3Nl
bWJseUNvZGVCbG9jayYgb3RoZXIpCiAgICAgeworICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9j
ayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvZGVC
bG9jaz4odm0tPmhlYXApKQorICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIHZt
LT53ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgQ29weVBhcnNlZEJsb2NrLCBv
dGhlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICBy
ZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLSAgICAgICAgOiBDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB2bSwg
Z2xvYmFsT2JqZWN0KQorICAgIHN0YXRpYyBXZWJBc3NlbWJseUNvZGVCbG9jayogY3JlYXRlKFZN
KiB2bSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgeworICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayog
aW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxXZWJBc3NlbWJseUNvZGVCbG9j
az4odm0tPmhlYXApKQorICAgICAgICAgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2sodm0sIHZtLT53
ZWJBc3NlbWJseUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCBnbG9i
YWxPYmplY3QpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtKTsKKyAgICAg
ICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotI2lmIEVOQUJMRShKSVQpCi1wcm90ZWN0ZWQ6
Ci0gICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBERkc6OkNhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJy
aWRlOwotI2VuZGlmCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAg
eworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJv
dG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJsb2NrJiBv
dGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2Nr
LCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCisgICAgICAgIDogQ29kZUJsb2Nr
KHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdm0sIGdsb2JhbE9iamVjdCkKKyAgICB7
CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIH07CiAjZW5kaWYK
IApAQCAtMTIyMSwxMCArMTM1OCw5IEBAIGlubGluZSBSZWdpc3RlciYgRXhlY1N0YXRlOjp1bmNo
ZWNrZWRSKFYKICAgICByZXR1cm4gdW5jaGVja2VkUihyZWcub2Zmc2V0KCkpOwogfQogCi1pbmxp
bmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyTWFya3MoKQoraW5saW5lIHZvaWQgQ29kZUJsb2NrOjpj
bGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgpCiB7Ci0gICAgbV92aXNpdFN0cm9uZ2x5SGFz
QmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7Ci0gICAg
bV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpOworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNl
LCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIH0KIAogaW5saW5lIHZvaWQgQ29kZUJsb2Nr
U2V0OjptYXJrKHZvaWQqIGNhbmRpZGF0ZUNvZGVCbG9jaykKQEAgLTEyNDksMTIgKzEzODUsMTEg
QEAgaW5saW5lIHZvaWQgQ29kZUJsb2NrU2V0OjptYXJrKENvZGVCbG9jawogewogICAgIGlmICgh
Y29kZUJsb2NrKQogICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRm9yY2UgR0MgdG8gdmlz
aXQgYWxsIENvZGVCbG9ja3Mgb24gdGhlIHN0YWNrLCBpbmNsdWRpbmcgb2xkIENvZGVCbG9ja3MK
LSAgICAvLyB0aGF0IGhhdmUgbm90IGV4ZWN1dGVkIGEgYmFycmllci4gVGhpcyBpcyBvdmVya2ls
bCwgYnV0IHdlIGhhdmUgYWx3YXlzCi0gICAgLy8gZG9uZSB0aGlzLCBhbmQgaXQgbWlnaHQgaGVs
cCB1cyByZWNvdmVyIGdyYWNlZnVsbHkgaWYgd2UgZm9yZ2V0IHRvIGV4ZWN1dGUKLSAgICAvLyBh
IGJhcnJpZXIgd2hlbiBhIENvZGVCbG9jayBuZWVkcyBpdC4KLSAgICBjb2RlQmxvY2stPmNsZWFy
TWFya3MoKTsKKworICAgIC8vIFRyeSB0byByZWNvdmVyIGdyYWNlZnVsbHkgaWYgd2UgZm9yZ2V0
IHRvIGV4ZWN1dGUgYSBiYXJyaWVyIGZvciBhCisgICAgLy8gQ29kZUJsb2NrIHRoYXQgZG9lcyB2
YWx1ZSBwcm9maWxpbmcuIFRoaXMgaXMgcHJvYmFibHkgb3ZlcmtpbGwsIGJ1dCB3ZQorICAgIC8v
IGhhdmUgYWx3YXlzIGRvbmUgaXQuCisgICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJh
cnJpZXIoY29kZUJsb2NrKTsKIAogICAgIG1fY3VycmVudGx5RXhlY3V0aW5nLmFkZChjb2RlQmxv
Y2spOwogfQpAQCAtMTI2MywxMyArMTM5OCwxMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rv
cj4gaW5saW5lIHZvaWQgCiB7CiAgICAgc3dpdGNoICh0eXBlKCkpIHsKICAgICBjYXNlIFByb2dy
YW1FeGVjdXRhYmxlVHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBq
c0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9wcm9ncmFtQ29kZUJsb2NrLmdldCgp
KQorICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxv
Y2sqPihqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9wcm9ncmFtQ29kZUJsb2Nr
LmdldCgpKSkKICAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2so
c3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgY2FzZSBFdmFsRXhlY3V0YWJsZVR5cGU6IHsKLSAgICAgICAgaWYgKENvZGVCbG9jayog
Y29kZUJsb2NrID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1fZXZhbENvZGVCbG9j
ay5nZXQoKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
Q29kZUJsb2NrKj4oanNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyktPm1fZXZhbENvZGVCbG9j
ay5nZXQoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2Nr
KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
QEAgLTEyNzcsMTUgKzE0MTIsMTUgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGlu
ZSB2b2lkIAogICAgIGNhc2UgRnVuY3Rpb25FeGVjdXRhYmxlVHlwZTogewogICAgICAgICBGdW5j
dG9yIGYoc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMp
OwotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVC
bG9ja0ZvckNhbGwuZ2V0KCkpCisgICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0
YXRpY19jYXN0PENvZGVCbG9jayo+KGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2FsbC5nZXQo
KSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOwot
ICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC5nZXQoKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0g
c3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QuZ2V0KCkpKQogICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9j
ayhmKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZVR5cGU6IHsKLSAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0ganNDYXN0
PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ay5nZXQoKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
Q29kZUJsb2NrKj4oanNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyktPm1fbW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSkpCiAgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVh
Y2hSZWxhdGVkQ29kZUJsb2NrKHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9E
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCShyZXZp
c2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrKCkgeyB9CiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KIAotdm9pZCBEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKK3ZvaWQgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
Ojpjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sq
LCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAgZHVtcENvbXBpbGVkU291cmNlc0lm
TmVlZGVkKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDE5MDI0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBwcm90ZWN0ZWQ6CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENv
ZGVCbG9jayopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShD
b2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0
aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkREZHQ29kZUJsb2NrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlk
Q29tcGxldGUoQ29kZUJsb2NrKiwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29t
cGlsYXRpb25SZXN1bHQpOwogCiAgICAgVmVjdG9yPERlZmVycmVkU291cmNlRHVtcD4mIGVuc3Vy
ZURlZmVycmVkU291cmNlRHVtcCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRXZhbENvZGVDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGdldFNsb3coRXhlY1N0
YXRlKiBleGVjLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciwgYm9vbCBpblN0cmljdENvbnRleHQs
IFRoaXNURFpNb2RlIHRoaXNURFpNb2RlLCBjb25zdCBTdHJpbmcmIGV2YWxTb3VyY2UsIEpTU2Nv
cGUqIHNjb3BlKQorICAgICAgICBFdmFsRXhlY3V0YWJsZSogZ2V0U2xvdyhFeGVjU3RhdGUqIGV4
ZWMsIEpTQ2VsbCogb3duZXIsIGJvb2wgaW5TdHJpY3RDb250ZXh0LCBUaGlzVERaTW9kZSB0aGlz
VERaTW9kZSwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBKU1Njb3BlKiBzY29wZSkKICAgICAg
ICAgewogICAgICAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNVbmRlclREWjsK
ICAgICAgICAgICAgIEpTU2NvcGU6OmNvbGxlY3RWYXJpYWJsZXNVbmRlclREWihzY29wZSwgdmFy
aWFibGVzVW5kZXJURFopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Bv
bHltb3JwaGljQWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCShyZXZpc2lvbiAxOTAyNDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNBY2Nlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTEsNyArNDExLDcgQEAgdm9pZCBBY2Nlc3NDYXNlOjpnZW5lcmF0ZShBY2Nl
c3NHZW5lcmF0aQogICAgICAgICB9CiAKICAgICAgICAgLy8gV2Ugd2lsbCBlbWl0IGNvZGUgdGhh
dCBoYXMgYSB3ZWFrIHJlZmVyZW5jZSB0aGF0IGlzbid0IG90aGVyd2lzZSBsaXN0ZWQgYW55d2hl
cmUuCi0gICAgICAgIHN0YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlND
ZWxsPih2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKSk7CisgICAg
ICAgIHN0YXRlLndlYWtSZWZlcmVuY2VzLmFwcGVuZChXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUpKTsKICAgICAgICAgCiAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihjb25kaXRpb24ub2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgc3RhdGUuZmFpbEFuZFJlcGF0Y2guYXBwZW5kKApAQCAtMTE3MCw3ICsxMTcwLDcg
QEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIFBvbHltb3JwaGljQWNjZXNzOgogICAgIGZvciAoYXV0
byYgZW50cnkgOiBjYXNlcykKICAgICAgICAgZG9lc0NhbGxzIHw9IGVudHJ5LT5kb2VzQ2FsbHMo
KTsKICAgICAKLSAgICBtX3N0dWJSb3V0aW5lID0gY3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwg
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGRvZXNDYWxscyk7CisgICAgbV9zdHVi
Um91dGluZSA9IGNyZWF0ZUpJVFN0dWJSb3V0aW5lKGNvZGUsIHZtLCBjb2RlQmxvY2ssIGRvZXND
YWxscyk7CiAgICAgbV93YXRjaHBvaW50cyA9IFdURjo6bW92ZShzdGF0ZS53YXRjaHBvaW50cyk7
CiAgICAgaWYgKCFzdGF0ZS53ZWFrUmVmZXJlbmNlcy5pc0VtcHR5KCkpCiAgICAgICAgIG1fd2Vh
a1JlZmVyZW5jZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3RvcjxXcml0ZUJhcnJpZXI8SlNDZWxs
Pj4+KFdURjo6bW92ZShzdGF0ZS53ZWFrUmVmZXJlbmNlcykpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCShyZXZp
c2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBTdHJ1Y3R1cmVTdHViSW5mbzoKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEFjY2Vzc0Nhc2U+PiBhY2Nlc3NDYXNlczsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNj
ZXNzQ2FzZT4gcHJldmlvdXNDYXNlID0KLSAgICAgICAgQWNjZXNzQ2FzZTo6ZnJvbVN0cnVjdHVy
ZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCAqdGhpcyk7CisgICAg
ICAgIEFjY2Vzc0Nhc2U6OmZyb21TdHJ1Y3R1cmVTdHViSW5mbyh2bSwgY29kZUJsb2NrLCAqdGhp
cyk7CiAgICAgaWYgKHByZXZpb3VzQ2FzZSkKICAgICAgICAgYWNjZXNzQ2FzZXMuYXBwZW5kKFdU
Rjo6bW92ZShwcmV2aW91c0Nhc2UpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00ODIwLDcgKzQ4MjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgZGF0YUxv
ZygiUGFyc2luZyAiLCAqbV9jb2RlQmxvY2ssICJcbiIpOwogICAgIAotICAgIG1fZGZnQ29kZUJs
b2NrID0gbV9ncmFwaC5tX3BsYW4ucHJvZmlsZWRERkdDb2RlQmxvY2suZ2V0KCk7CisgICAgbV9k
ZmdDb2RlQmxvY2sgPSBtX2dyYXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVCbG9jazsKICAgICBp
ZiAoaXNGVEwobV9ncmFwaC5tX3BsYW4ubW9kZSkgJiYgbV9kZmdDb2RlQmxvY2sKICAgICAgICAg
JiYgT3B0aW9uczo6ZW5hYmxlUG9seXZhcmlhbnREZXZpcnR1YWxpemF0aW9uKCkpIHsKICAgICAg
ICAgaWYgKE9wdGlvbnM6OmVuYWJsZVBvbHl2YXJpYW50Q2FsbElubGluaW5nKCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkVHJhbnNpdGlvbnMu
Y3BwCShyZXZpc2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRUcmFuc2l0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgdm9p
ZCBEZXNpcmVkVHJhbnNpdGlvbjo6cmVhbGx5QWRkKFZNJiB2bQogewogICAgIGNvbW1vbi0+dHJh
bnNpdGlvbnMuYXBwZW5kKAogICAgICAgICBXZWFrUmVmZXJlbmNlVHJhbnNpdGlvbigKLSAgICAg
ICAgICAgIHZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksCisgICAgICAgICAgICB2
bSwgbV9jb2RlQmxvY2ssCiAgICAgICAgICAgICBtX2NvZGVPcmlnaW5Pd25lciwKICAgICAgICAg
ICAgIG1fb2xkU3RydWN0dXJlLCBtX25ld1N0cnVjdHVyZSkpOwogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNw
cAkocmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2Vha1JlZmVyZW5jZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMCArNzAsMTAgQEAg
dm9pZCBEZXNpcmVkV2Vha1JlZmVyZW5jZXM6OnJlYWxseUFkZChWTQogICAgIGZvciAoSlNDZWxs
KiB0YXJnZXQgOiBtX3JlZmVyZW5jZXMpIHsKICAgICAgICAgaWYgKFN0cnVjdHVyZSogc3RydWN0
dXJlID0ganNEeW5hbWljQ2FzdDxTdHJ1Y3R1cmUqPih0YXJnZXQpKSB7CiAgICAgICAgICAgICBj
b21tb24tPndlYWtTdHJ1Y3R1cmVSZWZlcmVuY2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBX
cml0ZUJhcnJpZXI8U3RydWN0dXJlPih2bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPih2
bSwgbV9jb2RlQmxvY2ssIHN0cnVjdHVyZSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgY29tbW9uLT53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgV3JpdGVC
YXJyaWVyPEpTQ2VsbD4odm0sIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgdGFyZ2V0
KSk7CisgICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4odm0sIG1fY29kZUJsb2Nr
LCB0YXJnZXQpKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0RyaXZlci5jcHAJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3
IEBAIENvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoCiAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHBy
b2ZpbGVkREZHQ29kZUJsb2NrLCBtb2RlLCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsIG11c3RIYW5k
bGVWYWx1ZXMsCiAgICAgICAgIGNhbGxiYWNrKTsKICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0
aW9uRGVmZXJyZWQpCi0gICAgICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNv
ZGVCbG9jaywgcmVzdWx0KTsKKyAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGRm
Z09wTmFtZXNbXSA9IHsKIEdyYXBoOjpHcmFwaChWTSYgdm0sIFBsYW4mIHBsYW4sIExvbmdMaXZl
ZFN0YXRlJiBsb25nTGl2ZWRTdGF0ZSkKICAgICA6IG1fdm0odm0pCiAgICAgLCBtX3BsYW4ocGxh
bikKLSAgICAsIG1fY29kZUJsb2NrKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCkpCisgICAgLCBtX2Nv
ZGVCbG9jayhtX3BsYW4uY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJsb2NrKG1fY29kZUJs
b2NrLT5hbHRlcm5hdGl2ZSgpKQogICAgICwgbV9hbGxvY2F0b3IobG9uZ0xpdmVkU3RhdGUubV9h
bGxvY2F0b3IpCiAgICAgLCBtX25leHRNYWNoaW5lTG9jYWwoMCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZS5oCShyZXZpc2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNp
bmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIK
ICNpbmNsdWRlICJERkdNaW5pZmllZEdyYXBoLmgiCkBAIC0xMTQsNiArMTE1LDEwIEBAIHB1Ymxp
YzoKICAgICB2b2lkIHZhbGlkYXRlUmVmZXJlbmNlcyhjb25zdCBUcmFja2VkUmVmZXJlbmNlcyYp
IG92ZXJyaWRlOwogICAgIAogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKKworICAgIENvZGVCbG9j
ayogb3NyRW50cnlCbG9jaygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PENvZGVCbG9jayo+KG1fb3Ny
RW50cnlCbG9jay5nZXQoKSk7IH0KKyAgICB2b2lkIHNldE9TUkVudHJ5QmxvY2soVk0mIHZtLCBj
b25zdCBKU0NlbGwqIG93bmVyLCBDb2RlQmxvY2sqIG9zckVudHJ5QmxvY2spIHsgbV9vc3JFbnRy
eUJsb2NrLnNldCh2bSwgb3duZXIsIHN0YXRpY19jYXN0PEpTQ2VsbCo+KG9zckVudHJ5QmxvY2sp
KTsgfQorICAgIHZvaWQgY2xlYXJPU1JFbnRyeUJsb2NrKCkgeyBtX29zckVudHJ5QmxvY2suY2xl
YXIoKTsgfQogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgSklUQ29tcGlsZXI7IC8v
IEFsbG93IEpJVENvbXBpbGVyIHRvIGNhbGwgc2V0Q29kZVJlZigpLgpAQCAtMTI4LDcgKzEzMyw3
IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoRlRMX0pJVCkKICAgICB1aW50OF90IG5lc3RlZFRyaWdn
ZXJJc1NldCB7IDAgfTsKICAgICBVcHBlclRpZXJFeGVjdXRpb25Db3VudGVyIHRpZXJVcENvdW50
ZXI7Ci0gICAgUmVmUHRyPENvZGVCbG9jaz4gb3NyRW50cnlCbG9jazsKKyAgICBXcml0ZUJhcnJp
ZXI8SlNDZWxsPiBtX29zckVudHJ5QmxvY2s7CiAgICAgdW5zaWduZWQgb3NyRW50cnlSZXRyeTsK
ICAgICBib29sIGFiYW5kb25PU1JFbnRyeTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVEZpbmFsaXplci5jcHAJKHJl
dmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxp
emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBzaXplX3QgSklURmluYWxp
emVyOjpjb2RlU2l6ZSgpCiBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemUoKQogewogICAgIG1f
aml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCi0gICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKCpt
X2xpbmtCdWZmZXIsICgiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tX
aXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpERkdKSVQpKS5kYXRh
KCkpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgKCJERkcgSklU
IGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2Rl
QmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpLAogICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIoKSk7CiAgICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0SklUQ29kZShtX2pp
dENvZGUpOwpAQCAtNzEsNyArNzEsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5j
dGlvbigpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIW1fd2l0aEFyaXR5Q2hlY2suaXNFbXB0eVZh
bHVlKCkpOwogICAgIG1faml0Q29kZS0+aW5pdGlhbGl6ZUNvZGVSZWYoCi0gICAgICAgIEZJTkFM
SVpFX0RGR19DT0RFKCptX2xpbmtCdWZmZXIsICgiREZHIEpJVCBjb2RlIGZvciAlcyIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2Rl
OjpERkdKSVQpKS5kYXRhKCkpKSwKKyAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1
ZmZlciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpLAogICAgICAg
ICBtX3dpdGhBcml0eUNoZWNrKTsKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1f
aml0Q29kZSk7CiAgICAgCkBAIC04Myw3ICs4Myw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5h
bGl6ZUZ1bmN0aW9uKCkKIHZvaWQgSklURmluYWxpemVyOjpmaW5hbGl6ZUNvbW1vbigpCiB7CiAj
aWYgRU5BQkxFKEZUTF9KSVQpCi0gICAgbV9qaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKG1f
cGxhbi5jb2RlQmxvY2suZ2V0KCkpOworICAgIG1faml0Q29kZS0+b3B0aW1pemVBZnRlcldhcm1V
cChtX3BsYW4uY29kZUJsb2NrKTsKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKICAgICAKICAg
ICBpZiAobV9wbGFuLmNvbXBpbGF0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTkw
MjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjgsMTMgKzI2OCwxNCBAQCBzdGF0aWMgdm9pZCBv
c3JXcml0ZUJhcnJpZXIoQ0NhbGxIZWxwZXJzCiAKIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0
KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCwgYm9vbCBpc0V4aXRp
bmdUb09wQ2F0Y2gpCiB7Ci0gICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGppdC5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCkpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpOworICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBqaXQuYmFzZWxpbmVD
b2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOworICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CiAgICAgb3NyV3JpdGVCYXJyaWVyKGppdCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKICAgICBJbmxpbmVDYWxsRnJhbWVTZXQqIGlubGluZUNhbGxG
cmFtZXMgPSBqaXQuY29kZUJsb2NrKCktPmppdENvZGUoKS0+ZGZnQ29tbW9uKCktPmlubGluZUNh
bGxGcmFtZXMuZ2V0KCk7CiAgICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAgZm9y
IChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA6ICppbmxpbmVDYWxsRnJhbWVzKSB7
Ci0gICAgICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUgPSBpbmxpbmVD
YWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7Ci0gICAgICAgICAgICBqaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIob3duZXJFeGVjdXRhYmxlKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxKTsKKyAgICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBpbmxp
bmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCk7CisgICAgICAgICAgICBqaXQubW92ZShB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoYmFzZWxpbmVDb2RlQmxvY2spLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjEpOwogICAgICAgICAgICAgb3NyV3JpdGVCYXJyaWVyKGppdCwgR1BSSW5m
bzo6YXJndW1lbnRHUFIxLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTI4Miw3ICsyODMsNiBAQCB2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBl
cnMmCiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
aml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihleGl0Lm1fY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSks
IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVD
b2RlQmxvY2sgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoZXhpdC5tX2NvZGVPcmlnaW4pOwog
ICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29kZU1hcCA9IGpp
dC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9jayk7CiAgICAgCiAgICAgQnl0ZWNv
ZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1hcC5zaXpl
KCksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9m
ZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNzcsOCAr
MTM3Nyw4IEBAIHN0YXRpYyB2b2lkIHRyaWdnZXJGVExSZXBsYWNlbWVudENvbXBpbGUKIAogICAg
IC8vIFdlIG5lZWQgdG8gY29tcGlsZSB0aGUgY29kZS4KICAgICBjb21waWxlKAotICAgICAgICAq
dm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKS5nZXQoKSwgY29kZUJsb2NrLCBGVExNb2Rl
LCBVSU5UX01BWCwKLSAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4oKSwgVG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKKyAgICAgICAgKnZtLCBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KCksIGNvZGVCbG9jaywgRlRMTW9kZSwgVUlOVF9NQVgsCisg
ICAgICAgIE9wZXJhbmRzPEpTVmFsdWU+KCksIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjcmVhdGUoKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRyaWdnZXJUaWVyVXBOb3dDb21tb24o
RXhlY1N0YXRlKiBleGVjLCBib29sIGluTG9vcCkKQEAgLTE0NjMsNyArMTQ2Myw3IEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgIGlmICh3b3JrbGlzdFN0YXRl
ID09IFdvcmtsaXN0OjpDb21waWxpbmcpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGlm
IChDb2RlQmxvY2sqIGVudHJ5QmxvY2sgPSBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrLmdldCgpKSB7
CisgICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2so
KSkgewogICAgICAgICB2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnkoCiAgICAg
ICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGVudHJ5QmxvY2ssIGJ5dGVjb2RlSW5kZXgsIHN0cmVh
bUluZGV4KTsKICAgICAgICAgaWYgKGFkZHJlc3MpCkBAIC0xNDc3LDcgKzE0NzcsNyBAQCBjaGFy
KiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygKICAgICAgICAgCiAgICAgICAgIC8v
IE9TUiBlbnRyeSBmYWlsZWQuIE9oIG5vISBUaGlzIGltcGxpZXMgdGhhdCB3ZSBuZWVkIHRvIHJl
dHJ5LiBXZSByZXRyeQogICAgICAgICAvLyB3aXRob3V0IGV4cG9uZW50aWFsIGJhY2tvZmYgYW5k
IHdlIG9ubHkgZG8gdGhpcyBmb3IgdGhlIGVudHJ5IGNvZGUgYmxvY2suCi0gICAgICAgIGppdENv
ZGUtPm9zckVudHJ5QmxvY2sgPSBudWxscHRyOworICAgICAgICBqaXRDb2RlLT5jbGVhck9TUkVu
dHJ5QmxvY2soKTsKICAgICAgICAgaml0Q29kZS0+b3NyRW50cnlSZXRyeSA9IDA7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KQEAgLTE0OTQsMjEgKzE0OTQsMTkgQEAgY2hhciogSklUX09QRVJB
VElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCiAgICAgT3BlcmFuZHM8SlNWYWx1ZT4gbXVzdEhhbmRs
ZVZhbHVlczsKICAgICBqaXRDb2RlLT5yZWNvbnN0cnVjdCgKICAgICAgICAgZXhlYywgY29kZUJs
b2NrLCBDb2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpLCBzdHJlYW1JbmRleCwgbXVzdEhhbmRsZVZh
bHVlcyk7Ci0gICAgUmVmUHRyPENvZGVCbG9jaz4gcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgQ29kZUJsb2NrKiByZXBsYWNlbWVudENvZGVC
bG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsKICAgICBDb21waWxhdGlvblJlc3Vs
dCBmb3JFbnRyeVJlc3VsdCA9IGNvbXBpbGUoCi0gICAgICAgICp2bSwgcmVwbGFjZW1lbnRDb2Rl
QmxvY2suZ2V0KCksIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4
LAotICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoY29kZUJsb2NrKSk7CisgICAgICAgICp2bSwgcmVwbGFj
ZW1lbnRDb2RlQmxvY2ssIGNvZGVCbG9jaywgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUlu
ZGV4LAorICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKSk7CiAgICAgCi0gICAgaWYgKGZvckVudHJ5UmVz
dWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgewotICAgICAgICBBU1NFUlQoZm9yRW50cnlS
ZXN1bHQgPT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCByZXBsYWNlbWVudENvZGVCbG9jay0+aGFz
T25lUmVmKCkpOworICAgIGlmIChmb3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3Nm
dWwpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAogICAgIC8vIEl0J3MgcG9zc2libGUgdGhh
dCB0aGUgZm9yLWVudHJ5IGNvbXBpbGUgYWxyZWFkeSBzdWNjZWVkZWQuIEluIHRoYXQgY2FzZSBP
U1IKICAgICAvLyBlbnRyeSB3aWxsIHN1Y2NlZWQgdW5sZXNzIHdlIHJhbiBvdXQgb2Ygc3RhY2su
IEl0J3Mgbm90IGNsZWFyIHdoYXQgd2Ugc2hvdWxkIGRvLgogICAgIC8vIFdlIHNpZ25hbCB0byB0
cnkgYWdhaW4gYWZ0ZXIgYSB3aGlsZSBpZiB0aGF0IGhhcHBlbnMuCiAgICAgdm9pZCogYWRkcmVz
cyA9IEZUTDo6cHJlcGFyZU9TUkVudHJ5KAotICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGppdENv
ZGUtPm9zckVudHJ5QmxvY2suZ2V0KCksIGJ5dGVjb2RlSW5kZXgsIHN0cmVhbUluZGV4KTsKKyAg
ICAgICAgZXhlYywgY29kZUJsb2NrLCBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrKCksIGJ5dGVjb2Rl
SW5kZXgsIHN0cmVhbUluZGV4KTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGFkZHJl
c3MpOwogfQogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAg
UHJvZmlsZXI6OkNvbXBpbGF0aW9uS2luZCBwcm9maWxlckNvbXBpbAogCiB9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKIAotUGxhbjo6UGxhbihQYXNzUmVmUHRyPENvZGVCbG9jaz4gcGFzc2VkQ29k
ZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAorUGxhbjo6UGxhbihDb2Rl
QmxvY2sqIHBhc3NlZENvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywK
ICAgICBDb21waWxhdGlvbk1vZGUgbW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4
LAogICAgIGNvbnN0IE9wZXJhbmRzPEpTVmFsdWU+JiBtdXN0SGFuZGxlVmFsdWVzKQogICAgIDog
dm0oKnBhc3NlZENvZGVCbG9jay0+dm0oKSkKQEAgLTE0MCwxMCArMTQwLDEwIEBAIFBsYW46OlBs
YW4oUGFzc1JlZlB0cjxDb2RlQmxvY2s+IHBhc3NlZEMKICAgICAsIG1vZGUobW9kZSkKICAgICAs
IG9zckVudHJ5Qnl0ZWNvZGVJbmRleChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpCiAgICAgLCBtdXN0
SGFuZGxlVmFsdWVzKG11c3RIYW5kbGVWYWx1ZXMpCi0gICAgLCBjb21waWxhdGlvbihjb2RlQmxv
Y2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlciA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6
Q29tcGlsYXRpb24oY29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3Vy
ZUJ5dGVjb2Rlc0Zvcihjb2RlQmxvY2suZ2V0KCkpLCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZv
ck1vZGUobW9kZSkpKSA6IDApCisgICAgLCBjb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1f
cGVyQnl0ZWNvZGVQcm9maWxlciA/IGFkb3B0UmVmKG5ldyBQcm9maWxlcjo6Q29tcGlsYXRpb24o
Y29kZUJsb2NrLT52bSgpLT5tX3BlckJ5dGVjb2RlUHJvZmlsZXItPmVuc3VyZUJ5dGVjb2Rlc0Zv
cihjb2RlQmxvY2spLCBwcm9maWxlckNvbXBpbGF0aW9uS2luZEZvck1vZGUobW9kZSkpKSA6IDAp
CiAgICAgLCBpbmxpbmVDYWxsRnJhbWVzKGFkb3B0UmVmKG5ldyBJbmxpbmVDYWxsRnJhbWVTZXQo
KSkpCi0gICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2suZ2V0KCkpCi0gICAgLCB3ZWFrUmVmZXJl
bmNlcyhjb2RlQmxvY2suZ2V0KCkpCisgICAgLCBpZGVudGlmaWVycyhjb2RlQmxvY2spCisgICAg
LCB3ZWFrUmVmZXJlbmNlcyhjb2RlQmxvY2spCiAgICAgLCB3aWxsVHJ5VG9UaWVyVXAoZmFsc2Up
CiAgICAgLCBzdGFnZShQcmVwYXJpbmcpCiB7CkBAIC01MzUsNyArNTM1LDcgQEAgYm9vbCBQbGFu
Ojppc1N0aWxsVmFsaWQoKQogCiB2b2lkIFBsYW46OnJlYWxseUFkZChDb21tb25EYXRhKiBjb21t
b25EYXRhKQogewotICAgIHdhdGNocG9pbnRzLnJlYWxseUFkZChjb2RlQmxvY2suZ2V0KCksICpj
b21tb25EYXRhKTsKKyAgICB3YXRjaHBvaW50cy5yZWFsbHlBZGQoY29kZUJsb2NrLCAqY29tbW9u
RGF0YSk7CiAgICAgaWRlbnRpZmllcnMucmVhbGx5QWRkKHZtLCBjb21tb25EYXRhKTsKICAgICB3
ZWFrUmVmZXJlbmNlcy5yZWFsbHlBZGQodm0sIGNvbW1vbkRhdGEpOwogICAgIHRyYW5zaXRpb25z
LnJlYWxseUFkZCh2bSwgY29tbW9uRGF0YSk7CkBAIC01NTMsMTQgKzU1MywxNCBAQCB2b2lkIFBs
YW46Om5vdGlmeUNvbXBpbGVkKCkKIAogdm9pZCBQbGFuOjpub3RpZnlSZWFkeSgpCiB7Ci0gICAg
Y2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShjb2RlQmxv
Y2suZ2V0KCkpOworICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNo
cm9ub3VzbHkoY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jayk7CiAgICAgc3RhZ2UgPSBS
ZWFkeTsKIH0KIAogQ29tcGlsYXRpb25SZXN1bHQgUGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5
aW5nQ2FsbGJhY2soKQogewogICAgIC8vIFdlIHdpbGwgZXN0YWJsaXNoIG5ldyByZWZlcmVuY2Vz
IGZyb20gdGhlIGNvZGUgYmxvY2sgdG8gdGhpbmdzLiBTbywgd2UgbmVlZCBhIGJhcnJpZXIuCi0g
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Cisg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICAKICAgICBpZiAoIWlzU3Rp
bGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gQ29tcGlsYXRpb25JbnZhbGlkYXRlZDsKQEAgLTU5
Niw3ICs1OTYsNyBAQCBDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROCiAK
IHZvaWQgUGxhbjo6ZmluYWxpemVBbmROb3RpZnlDYWxsYmFjaygpCiB7Ci0gICAgY2FsbGJhY2st
PmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLmdldCgpLCBmaW5hbGl6ZVdpdGhvdXRO
b3RpZnlpbmdDYWxsYmFjaygpKTsKKyAgICBjYWxsYmFjay0+Y29tcGlsYXRpb25EaWRDb21wbGV0
ZShjb2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBmaW5hbGl6ZVdpdGhvdXROb3RpZnlp
bmdDYWxsYmFjaygpKTsKIH0KIAogQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKQEAgLTYwNCwx
NiArNjA0LDE1IEBAIENvbXBpbGF0aW9uS2V5IFBsYW46OmtleSgpCiAgICAgcmV0dXJuIENvbXBp
bGF0aW9uS2V5KGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKSwgbW9kZSk7CiB9CiAKLXZvaWQgUGxh
bjo6Y2xlYXJDb2RlQmxvY2tNYXJrcygpCit2b2lkIFBsYW46OnJlbWVtYmVyQ29kZUJsb2Nrcygp
CiB7CiAgICAgLy8gQ29tcGlsYXRpb24gd3JpdGVzIGxvdHMgb2YgdmFsdWVzIHRvIGEgQ29kZUJs
b2NrIHdpdGhvdXQgcGVyZm9ybWluZwogICAgIC8vIGFuIGV4cGxpY2l0IGJhcnJpZXIuIFNvLCB3
ZSBuZWVkIHRvIGJlIHBlc3NpbWlzdGljIGFuZCBhc3N1bWUgdGhhdAogICAgIC8vIGFsbCBvdXIg
Q29kZUJsb2NrcyBtdXN0IGJlIHZpc2l0ZWQgZHVyaW5nIEdDLgogCi0gICAgY29kZUJsb2NrLT5j
bGVhck1hcmtzKCk7Ci0gICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5jbGVhck1hcmtzKCk7
CisgICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAg
ICBpZiAocHJvZmlsZWRERkdDb2RlQmxvY2spCi0gICAgICAgIHByb2ZpbGVkREZHQ29kZUJsb2Nr
LT5jbGVhck1hcmtzKCk7CisgICAgICAgIEhlYXA6OmhlYXAocHJvZmlsZWRERkdDb2RlQmxvY2sp
LT53cml0ZUJhcnJpZXIocHJvZmlsZWRERkdDb2RlQmxvY2spOwogfQogCiB2b2lkIFBsYW46OmNo
ZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQpAQCAtNjI0
LDE1ICs2MjMsMTMgQEAgdm9pZCBQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbgog
ICAgIGZvciAodW5zaWduZWQgaSA9IG11c3RIYW5kbGVWYWx1ZXMuc2l6ZSgpOyBpLS07KQogICAg
ICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkVmFsdWUoJm11c3RIYW5kbGVWYWx1ZXNbaV0p
OwogCi0gICAgY29kZUJsb2NrLT52aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOwotICAgIGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKLSAgICBpZiAocHJvZmls
ZWRERkdDb2RlQmxvY2spCi0gICAgICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrLT52aXNpdFN0cm9u
Z2x5KHZpc2l0b3IpOworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50
ZXIoY29kZUJsb2NrKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2lu
dGVyKHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKIAogICAgIGlmIChpbmxpbmVDYWxsRnJhbWVzKSB7
CiAgICAgICAgIGZvciAoYXV0byogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMp
IHsKICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2Nr
KCkpOwotICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpLT52
aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJp
ZXJlZFJlYWRPbmx5UG9pbnRlcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCkp
OwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1BsYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
aAkocmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgY2xhc3MgVGhyZWFkRGF0YTsKIAog
c3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UGxhbj4gewogICAgIFBs
YW4oCi0gICAgICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2tUb0NvbXBpbGUsIENv
ZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssCisgICAgICAgIENvZGVCbG9jayogY29kZUJs
b2NrVG9Db21waWxlLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAogICAgICAgICBD
b21waWxhdGlvbk1vZGUsIHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwKICAgICAgICAg
Y29uc3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpOwogICAgIH5QbGFuKCk7
CkBAIC03MSwxNCArNzEsMTcgQEAgc3RydWN0IFBsYW4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZQogICAgIAogICAgIENvbXBpbGF0aW9uS2V5IGtleSgpOwogICAgIAotICAgIHZvaWQgY2xl
YXJDb2RlQmxvY2tNYXJrcygpOworICAgIHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKCk7CiAgICAg
dm9pZCBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYpOwogICAgIGJv
b2wgaXNLbm93blRvQmVMaXZlRHVyaW5nR0MoKTsKICAgICB2b2lkIGNhbmNlbCgpOwogICAgIAog
ICAgIFZNJiB2bTsKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2s7Ci0gICAgUmVmUHRy
PENvZGVCbG9jaz4gcHJvZmlsZWRERkdDb2RlQmxvY2s7CisKKyAgICAvLyBUaGVzZSBjYW4gYmUg
cmF3IHBvaW50ZXJzIGJlY2F1c2Ugd2UgdmlzaXQgdGhlbSBkdXJpbmcgZXZlcnkgR0MgaW4gY2hl
Y2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRyZW4uCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2s7Cisg
ICAgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jazsKKwogICAgIENvbXBpbGF0aW9uTW9k
ZSBtb2RlOwogICAgIGNvbnN0IHVuc2lnbmVkIG9zckVudHJ5Qnl0ZWNvZGVJbmRleDsKICAgICBP
cGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw0NiArMzUsNDQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCi1Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2soCi0gICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9j
aykKLSAgICA6IG1fZGZnQ29kZUJsb2NrKGRmZ0NvZGVCbG9jaykKK1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpCiB7CiB9
CiAKIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2soKSB7IH0KIAotUmVmPFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrPiBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKFBhc3NSZWZQdHI8
Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCitSZWY8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s+IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKGRm
Z0NvZGVCbG9jaykpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrKCkpOwogfQogCiB2b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCi0gICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRERkdDb2RlQmxvY2spCiB7CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkg
ewogICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAg
ICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqcHJv
ZmlsZWRERkdDb2RlQmxvY2ssCiAgICAgICAgICAgICAiKSBkaWQgYmVjb21lIHJlYWR5LlxuIik7
CiAgICAgfQogICAgIAotICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5mb3Jj
ZU9wdGltaXphdGlvblNsb3dQYXRoQ29uY3VycmVudGx5KAotICAgICAgICBtX2RmZ0NvZGVCbG9j
ay5nZXQoKSk7CisgICAgcHJvZmlsZWRERkdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZv
cmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCisgICAgICAgIHByb2ZpbGVkREZH
Q29kZUJsb2NrKTsKIH0KIAogdm9pZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGls
YXRpb25SZXN1bHQgcmVzdWx0KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sq
IHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CiAgICAg
aWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICpt
X2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIs
ICpjb2RlQmxvY2ssICIgKGZvciAiLCAqcHJvZmlsZWRERkdDb2RlQmxvY2ssCiAgICAgICAgICAg
ICAiKSByZXN1bHQ6ICIsIHJlc3VsdCwgIlxuIik7CiAgICAgfQogICAgIAotICAgIGlmIChtX2Rm
Z0NvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSAhPSBtX2RmZ0NvZGVCbG9jaykgeworICAgIGlmIChw
cm9maWxlZERGR0NvZGVCbG9jay0+cmVwbGFjZW1lbnQoKSAhPSBwcm9maWxlZERGR0NvZGVCbG9j
aykgewogICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgICAgICBk
YXRhTG9nKAogICAgICAgICAgICAgICAgICJEcm9wcGluZyBGVEwgY29kZSBibG9jayAiLCAqY29k
ZUJsb2NrLCAiIG9uIHRoZSBmbG9vciBiZWNhdXNlIHRoZSAiCi0gICAgICAgICAgICAgICAgIkRG
RyBjb2RlIGJsb2NrICIsICptX2RmZ0NvZGVCbG9jaywgIiB3YXMgamV0dGlzb25lZC5cbiIpOwor
ICAgICAgICAgICAgICAgICJERkcgY29kZSBibG9jayAiLCAqcHJvZmlsZWRERkdDb2RlQmxvY2ss
ICIgd2FzIGpldHRpc29uZWQuXG4iKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtODIsMTAgKzgwLDEwIEBAIHZvaWQgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmMKICAgICBpZiAocmVzdWx0ID09IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAg
Y29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKS0+aW5zdGFsbENvZGUoY29kZUJsb2Nr
KTsKICAgICAKLSAgICBtX2RmZ0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+c2V0T3B0aW1p
emF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVzdWx0KAotICAgICAgICBtX2RmZ0Nv
ZGVCbG9jay5nZXQoKSwgcmVzdWx0KTsKKyAgICBwcm9maWxlZERGR0NvZGVCbG9jay0+aml0Q29k
ZSgpLT5kZmcoKS0+c2V0T3B0aW1pemF0aW9uVGhyZXNob2xkQmFzZWRPbkNvbXBpbGF0aW9uUmVz
dWx0KAorICAgICAgICBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsKIAotICAgIERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ss
IHJlc3VsdCk7CisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRp
ZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CiB9CiAK
IH0gfSAvLyBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2
aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOCArNDAsMTUg
QEAgbmFtZXNwYWNlIERGRyB7CiAKIGNsYXNzIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrIDogcHVibGljIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayB7CiBwcm90ZWN0ZWQ6Ci0g
ICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+
IGRmZ0NvZGVCbG9jayk7CisgICAgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsK
IAogcHVibGljOgogICAgIHZpcnR1YWwgflRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
KCk7CiAKLSAgICBzdGF0aWMgUmVmPFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBj
cmVhdGUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jayk7CisgICAgc3RhdGljIFJl
ZjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKCk7CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2Rl
QmxvY2sqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxv
Y2sqLCBDb21waWxhdGlvblJlc3VsdCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPENvZGVCbG9j
az4gbV9kZmdDb2RlQmxvY2s7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21l
UmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29k
ZUJsb2NrKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxv
Y2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCk7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JP
U1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDE5MDI0OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1Ub0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrKAotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spCi0g
ICAgOiBtX2RmZ0NvZGVCbG9jayhkZmdDb2RlQmxvY2spCitUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrKCkKIHsKIH0KIApAQCAtNDUsMzkgKzQzLDM4IEBAIFRvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGIKIHsKIH0KIAotUmVmPFRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y3JlYXRlKAotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxv
Y2spCitSZWY8VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz5Ub0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpKTsKIH0KIAogdm9pZCBUb0ZU
TEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJl
Y29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7
CiAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkgewogICAgICAgICBkYXRhTG9nKAotICAg
ICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9y
ICIsICptX2RmZ0NvZGVCbG9jaywKKyAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9u
IG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqcHJvZmlsZWRERkdDb2RlQmxvY2ssCiAgICAg
ICAgICAgICAiKSBkaWQgYmVjb21lIHJlYWR5LlxuIik7CiAgICAgfQogICAgIAotICAgIG1fZGZn
Q29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5mb3JjZU9wdGltaXphdGlvblNsb3dQYXRoQ29u
Y3VycmVudGx5KAotICAgICAgICBtX2RmZ0NvZGVCbG9jay5nZXQoKSk7CisgICAgcHJvZmlsZWRE
RkdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhD
b25jdXJyZW50bHkoCisgICAgICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKIH0KIAogdm9pZCBU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRp
ZENvbXBsZXRlKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCBy
ZXN1bHQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdD
b2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemlu
ZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2Nr
LAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywg
IiAoZm9yICIsICpwcm9maWxlZERGR0NvZGVCbG9jaywKICAgICAgICAgICAgICIpIHJlc3VsdDog
IiwgcmVzdWx0LCAiXG4iKTsKICAgICB9CiAgICAgCi0gICAgSklUQ29kZSogaml0Q29kZSA9IG1f
ZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOworICAgIEpJVENvZGUqIGppdENvZGUgPSBw
cm9maWxlZERGR0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKTsKICAgICAgICAgCiAgICAgc3dp
dGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0aW9uU3VjY2Vzc2Z1bDoKLSAgICAgICAg
aml0Q29kZS0+b3NyRW50cnlCbG9jayA9IGNvZGVCbG9jazsKKyAgICAgICAgaml0Q29kZS0+c2V0
T1NSRW50cnlCbG9jaygqY29kZUJsb2NrLT52bSgpLCBwcm9maWxlZERGR0NvZGVCbG9jaywgY29k
ZUJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb21waWxhdGlvbkZhaWxlZDoKICAg
ICAgICAgaml0Q29kZS0+b3NyRW50cnlSZXRyeSA9IDA7CkBAIC05MCw3ICs4Nyw3IEBAIHZvaWQg
VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb24KICAgICAgICAgYnJlYWs7CiAgICAg
fQogICAgIAotICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRD
b21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2RlQmxv
Y2ssIHJlc3VsdCk7CiB9CiAKIH0gfSAvLyBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlzaW9uIDE5MDI0OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxOCArNDAsMTUgQEAgbmFt
ZXNwYWNlIERGRyB7CiAKIGNsYXNzIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIHsKIHByb3RlY3Rl
ZDoKLSAgICBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworICAgIFRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAogcHVibGljOgogICAgIHZpcnR1YWwgflRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAotICAgIHN0YXRpYyBS
ZWY8VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKFBh
c3NSZWZQdHI8Q29kZUJsb2NrPiBkZmdDb2RlQmxvY2spOworICAgIHN0YXRpYyBSZWY8VG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKCk7CiAgICAgCi0g
ICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShD
b2RlQmxvY2sqKTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2Rl
QmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCk7Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPENvZGVC
bG9jaz4gbV9kZmdDb2RlQmxvY2s7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVj
b21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZH
Q29kZUJsb2NrKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2Rl
QmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3Vs
dCk7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkocmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIw
NywxNCArMjA3LDE0IEBAIHZvaWQgV29ya2xpc3Q6OmNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYK
ICAgICBjb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiB9CiAKLXZvaWQgV29ya2xpc3Q6
OmNsZWFyQ29kZUJsb2NrTWFya3MoVk0mIHZtKQordm9pZCBXb3JrbGlzdDo6cmVtZW1iZXJDb2Rl
QmxvY2tzKFZNJiB2bSkKIHsKICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgIGZv
ciAoUGxhbk1hcDo6aXRlcmF0b3IgaXRlciA9IG1fcGxhbnMuYmVnaW4oKTsgaXRlciAhPSBtX3Bs
YW5zLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUGxhbiogcGxhbiA9IGl0ZXItPnZhbHVlLmdl
dCgpOwogICAgICAgICBpZiAoJnBsYW4tPnZtICE9ICZ2bSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBwbGFuLT5jbGVhckNvZGVCbG9ja01hcmtzKCk7CisgICAgICAgIHBsYW4tPnJl
bWVtYmVyQ29kZUJsb2NrcygpOwogICAgIH0KIH0KIApAQCAtNDY3LDExICs0NjcsMTEgQEAgdm9p
ZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0oVk0mIHZtKQogICAgIH0KIH0KIAotdm9pZCBjbGVhckNv
ZGVCbG9ja01hcmtzKFZNJiB2bSkKK3ZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJiB2bSkKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBERkc6Om51bWJlck9mV29ya2xpc3RzKCk7IGktLTspIHsK
ICAgICAgICAgaWYgKERGRzo6V29ya2xpc3QqIHdvcmtsaXN0ID0gREZHOjp3b3JrbGlzdEZvcklu
ZGV4T3JOdWxsKGkpKQotICAgICAgICAgICAgd29ya2xpc3QtPmNsZWFyQ29kZUJsb2NrTWFya3Mo
dm0pOworICAgICAgICAgICAgd29ya2xpc3QtPnJlbWVtYmVyQ29kZUJsb2Nrcyh2bSk7CiAgICAg
fQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXb3JrbGlzdC5oCShyZXZp
c2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIC8vIHdvcmtsaXN0
LT5jb21wbGV0ZUFsbFJlYWR5UGxhbnNGb3JWTSh2bSk7CiAgICAgdm9pZCBjb21wbGV0ZUFsbFBs
YW5zRm9yVk0oVk0mKTsKIAotICAgIHZvaWQgY2xlYXJDb2RlQmxvY2tNYXJrcyhWTSYpOworICAg
IHZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKICAgICB2b2lkIHdhaXRVbnRpbEFsbFBs
YW5zRm9yVk1BcmVSZWFkeShWTSYpOwogICAgIFN0YXRlIGNvbXBsZXRlQWxsUmVhZHlQbGFuc0Zv
clZNKFZNJiwgQ29tcGlsYXRpb25LZXkgPSBDb21waWxhdGlvbktleSgpKTsKQEAgLTE0MSw3ICsx
NDEsNyBAQCBpbmxpbmUgV29ya2xpc3QqIHdvcmtsaXN0Rm9ySW5kZXhPck51bGwoCiB9CiAKIHZv
aWQgY29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJik7Ci12b2lkIGNsZWFyQ29kZUJsb2NrTWFya3Mo
Vk0mKTsKK3ZvaWQgcmVtZW1iZXJDb2RlQmxvY2tzKFZNJik7CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmlu
YWxpemVyLmNwcAkocmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OSw3ICs5OSw3IEBAIGJv
b2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgaml0Q29kZS0+aW5p
dGlhbGl6ZUV4aXRUaHVua3MoCiAgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAgICAg
ICAgICAgICAgICAqZXhpdFRodW5rc0xpbmtCdWZmZXIsCi0gICAgICAgICAgICAgICAgKCJGVEwg
ZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxh
bi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKKyAgICAgICAg
ICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOwog
ICAgIH0gLy8gZWxzZSB0aGlzIGZ1bmN0aW9uIGhhZCBubyBPU1IgZXhpdHMsIHNvIG5vIGV4aXQg
dGh1bmtzLgogICAgIAogICAgIGlmIChzaWRlQ29kZUxpbmtCdWZmZXIpIHsKQEAgLTExNiw3ICsx
MTYsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgICAgIGpp
dENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09ERSgKICAgICAgICAgICAgICpzaWRlQ29k
ZUxpbmtCdWZmZXIsCiAgICAgICAgICAgICAoIkZUTCBzaWRlIGNvZGUgZm9yICVzIiwKLSAgICAg
ICAgICAgICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
ay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkKKyAgICAgICAgICAgICAgICB0b0NT
dHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRM
SklUKSkuZGF0YSgpKSkKICAgICAgICAgICAgIC5leGVjdXRhYmxlTWVtb3J5KCkpOwogICAgIH0K
ICAgICAKQEAgLTEyNCw3ICsxMjQsNyBAQCBib29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5j
dGlvbigpCiAgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09ERSgKICAg
ICAgICAgICAgICpoYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlciwKICAgICAgICAgICAgICgiRlRM
IGV4Y2VwdGlvbiBoYW5kbGVyIGZvciAlcyIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKENv
ZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJ
VCkpLmRhdGEoKSkpCisgICAgICAgICAgICAgICAgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRU
eXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpCiAgICAgICAg
ICAgICAuZXhlY3V0YWJsZU1lbW9yeSgpKTsKICAgICB9CiAKQEAgLTEzNyw3ICsxMzcsNyBAQCBi
b29sIEpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbigpCiAgICAgaml0Q29kZS0+aW5pdGlh
bGl6ZUFyaXR5Q2hlY2tFbnRyeXBvaW50KAogICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgKICAg
ICAgICAgICAgICplbnRyeXBvaW50TGlua0J1ZmZlciwKLSAgICAgICAgICAgICgiRlRMIGVudHJ5
cG9pbnQgdGh1bmsgZm9yICVzIHdpdGggTExWTSBnZW5lcmF0ZWQgY29kZSBhdCAlcCIsIHRvQ1N0
cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2Rl
OjpGVExKSVQpKS5kYXRhKCksIGZ1bmN0aW9uKSkpOworICAgICAgICAgICAgKCJGVEwgZW50cnlw
b2ludCB0aHVuayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3Ry
aW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2ssIEpJVENvZGU6OkZUTEpJ
VCkpLmRhdGEoKSwgZnVuY3Rpb24pKSk7CiAgICAgCiAgICAgbV9wbGFuLmNvZGVCbG9jay0+c2V0
SklUQ29kZShqaXRDb2RlKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29k
ZUJsb2NrU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9D
b2RlQmxvY2tTZXQuY3BwCShyZXZpc2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxNyArNDEsMTEg
QEAgQ29kZUJsb2NrU2V0OjpDb2RlQmxvY2tTZXQoKQogCiBDb2RlQmxvY2tTZXQ6On5Db2RlQmxv
Y2tTZXQoKQogewotICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBtX29sZENvZGVCbG9j
a3MpCi0gICAgICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsKLQotICAgIGZvciAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgOiBtX25ld0NvZGVCbG9ja3MpCi0gICAgICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsK
IH0KIAotdm9pZCBDb2RlQmxvY2tTZXQ6OmFkZChQYXNzUmVmUHRyPENvZGVCbG9jaz4gY29kZUJs
b2NrKQordm9pZCBDb2RlQmxvY2tTZXQ6OmFkZChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAg
ICBDb2RlQmxvY2sqIGJsb2NrID0gY29kZUJsb2NrLmxlYWtSZWYoKTsKLSAgICBib29sIGlzTmV3
RW50cnkgPSBtX25ld0NvZGVCbG9ja3MuYWRkKGJsb2NrKS5pc05ld0VudHJ5OworICAgIGJvb2wg
aXNOZXdFbnRyeSA9IG1fbmV3Q29kZUJsb2Nrcy5hZGQoY29kZUJsb2NrKS5pc05ld0VudHJ5Owog
ICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdFbnRyeSwgaXNOZXdFbnRyeSk7CiB9CiAKQEAgLTY0LDUy
ICs1OCwyNiBAQCB2b2lkIENvZGVCbG9ja1NldDo6cHJvbW90ZVlvdW5nQ29kZUJsb2NrCiB2b2lk
IENvZGVCbG9ja1NldDo6Y2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCkKIHsKICAgICBmb3Ig
KENvZGVCbG9jayogY29kZUJsb2NrIDogbV9vbGRDb2RlQmxvY2tzKQotICAgICAgICBjb2RlQmxv
Y2stPmNsZWFyTWFya3MoKTsKKyAgICAgICAgY29kZUJsb2NrLT5jbGVhclZpc2l0V2Vha2x5SGFz
QmVlbkNhbGxlZCgpOwogCiAgICAgLy8gV2UgcHJvbW90ZSBhZnRlciB3ZSBjbGVhciBtYXJrcyBv
biB0aGUgb2xkIGdlbmVyYXRpb24gQ29kZUJsb2NrcyBiZWNhdXNlCiAgICAgLy8gbm9uZSBvZiB0
aGUgeW91bmcgZ2VuZXJhdGlvbnMgQ29kZUJsb2NrcyBuZWVkIHRvIGJlIGNsZWFyZWQuCiAgICAg
cHJvbW90ZVlvdW5nQ29kZUJsb2NrcygpOwogfQogCi12b2lkIENvZGVCbG9ja1NldDo6Y2xlYXJN
YXJrc0ZvckVkZW5Db2xsZWN0aW9uKGNvbnN0IFZlY3Rvcjxjb25zdCBKU0NlbGwqPiYgcmVtZW1i
ZXJlZFNldCkKLXsKLSAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCB3ZSB3aWxsIHJldmlzaXQgQ29k
ZUJsb2NrcyBpbiByZW1lbWJlcmVkIEV4ZWN1dGFibGVzIGV2ZW4gaWYgdGhleSB3ZXJlIHByZXZp
b3VzbHkgbWFya2VkLgotICAgIGZvciAoY29uc3QgSlNDZWxsKiBjZWxsIDogcmVtZW1iZXJlZFNl
dCkgewotICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gY29uc3RfY2FzdDxT
Y3JpcHRFeGVjdXRhYmxlKj4oanNEeW5hbWljQ2FzdDxjb25zdCBTY3JpcHRFeGVjdXRhYmxlKj4o
Y2VsbCkpOwotICAgICAgICBpZiAoIWV4ZWN1dGFibGUpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZXhlY3V0YWJsZS0+Zm9yRWFjaENvZGVCbG9jayhbdGhpc10oQ29kZUJsb2NrKiBj
b2RlQmxvY2spIHsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+Y2xlYXJNYXJrcygpOwotICAgICAg
ICAgICAgbV9yZW1lbWJlcmVkLmFkZChjb2RlQmxvY2spOwotICAgICAgICB9KTsKLSAgICB9Ci19
Ci0KIHZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmVmZXJlbmNlZChIZWFw
T3BlcmF0aW9uIGNvbGxlY3Rpb25UeXBlKQogewogICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4mIHNl
dCA9IGNvbGxlY3Rpb25UeXBlID09IEVkZW5Db2xsZWN0aW9uID8gbV9uZXdDb2RlQmxvY2tzIDog
bV9vbGRDb2RlQmxvY2tzOworICAgIFZlY3RvcjxDb2RlQmxvY2sqPiB1bm1hcmtlZDsKKyAgICBm
b3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogc2V0KSB7CisgICAgICAgIGlmIChIZWFwOjppc01h
cmtlZChjb2RlQmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVubWFya2Vk
LmFwcGVuZChjb2RlQmxvY2spOworICAgIH0KIAotICAgIC8vIFRoaXMgbmVlZHMgdG8gYmUgYSBm
aXhwb2ludCBiZWNhdXNlIGNvZGUgYmxvY2tzIHRoYXQgYXJlIHVubWFya2VkIG1heQotICAgIC8v
IHJlZmVyIHRvIGVhY2ggb3RoZXIuIEZvciBleGFtcGxlLCBhIERGRyBjb2RlIGJsb2NrIHRoYXQg
aXMgb3duZWQgYnkKLSAgICAvLyB0aGUgR0MgbWF5IHJlZmVyIHRvIGFuIEZUTCBmb3ItZW50cnkg
Y29kZSBibG9jayB0aGF0IGlzIGFsc28gb3duZWQgYnkKLSAgICAvLyB0aGUgR0MuCi0gICAgVmVj
dG9yPENvZGVCbG9jayosIDE2PiB0b1JlbW92ZTsKLSAgICBpZiAodmVyYm9zZSkKLSAgICAgICAg
ZGF0YUxvZygiRml4cG9pbnRpbmcgb3ZlciB1bm1hcmtlZCwgc2V0IHNpemUgPSAiLCBzZXQuc2l6
ZSgpLCAiLi4uXG4iKTsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGZvciAoQ29kZUJsb2NrKiBj
b2RlQmxvY2sgOiBzZXQpIHsKLSAgICAgICAgICAgIGlmICghY29kZUJsb2NrLT5oYXNPbmVSZWYo
KSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNvZGVCbG9jay0+ZGVy
ZWYoKTsKLSAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChjb2RlQmxvY2spOwotICAgICAgICB9
Ci0gICAgICAgIGlmICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIFJlbW92aW5n
ICIsIHRvUmVtb3ZlLnNpemUoKSwgIiBibG9ja3MuXG4iKTsKLSAgICAgICAgaWYgKHRvUmVtb3Zl
LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBmb3IgKENvZGVCbG9jayog
Y29kZUJsb2NrIDogdG9SZW1vdmUpCi0gICAgICAgICAgICBzZXQucmVtb3ZlKGNvZGVCbG9jayk7
Ci0gICAgICAgIHRvUmVtb3ZlLnJlc2l6ZSgwKTsKKyAgICBmb3IgKENvZGVCbG9jayogY29kZUJs
b2NrIDogdW5tYXJrZWQpIHsKKyAgICAgICAgY29kZUJsb2NrLT5jbGFzc0luZm8oKS0+bWV0aG9k
VGFibGUuZGVzdHJveShjb2RlQmxvY2spOworICAgICAgICBzZXQucmVtb3ZlKGNvZGVCbG9jayk7
CiAgICAgfQogCiAgICAgLy8gQW55IHJlbWFpbmluZyB5b3VuZyBDb2RlQmxvY2tzIGFyZSBsaXZl
IGFuZCBuZWVkIHRvIGJlIHByb21vdGVkIHRvIHRoZSBzZXQgb2Ygb2xkIENvZGVCbG9ja3MuCkBA
IC0xMTksNyArODcsNiBAQCB2b2lkIENvZGVCbG9ja1NldDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJl
CiAKIHZvaWQgQ29kZUJsb2NrU2V0OjpyZW1vdmUoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgY29kZUJsb2NrLT5kZXJlZigpOwogICAgIGlmIChtX29sZENvZGVCbG9ja3MuY29udGFpbnMo
Y29kZUJsb2NrKSkgewogICAgICAgICBtX29sZENvZGVCbG9ja3MucmVtb3ZlKGNvZGVCbG9jayk7
CiAgICAgICAgIHJldHVybjsKQEAgLTEyOCwzNSArOTUsMTMgQEAgdm9pZCBDb2RlQmxvY2tTZXQ6
OnJlbW92ZShDb2RlQmxvY2sqIGNvZAogICAgIG1fbmV3Q29kZUJsb2Nrcy5yZW1vdmUoY29kZUJs
b2NrKTsKIH0KIAotdm9pZCBDb2RlQmxvY2tTZXQ6OnRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQotewotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJUcmFjaW5nICIs
IG1fY3VycmVudGx5RXhlY3V0aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwotCi0gICAg
Ly8gV2Ugc3Ryb25nbHkgdmlzaXQgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgc2V0IGJlY2F1c2Ug
amV0dGlzb25pbmcgY29kZQotICAgIC8vIGlzIG5vdCB2YWx1YWJsZSBvbmNlIGl0J3Mgb24gdGhl
IHN0YWNrLiBXZSdyZSBwYXN0IHRoZSBwb2ludCB3aGVyZQotICAgIC8vIGpldHRpc29uaW5nIHdv
dWxkIGF2b2lkIHRoZSBjb3N0IG9mIE9TUiBleGl0LgotICAgIGZvciAoY29uc3QgUmVmUHRyPENv
ZGVCbG9jaz4mIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBjb2Rl
QmxvY2stPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7Ci0KLSAgICAvLyBXZSBzdHJvbmdseSB2aXNp
dCB0aGUgcmVtZW1iZXJlZCBzZXQgYmVjYXVzZSBqZXR0aXNvbmluZyBvbGQgY29kZSBkdXJpbmcK
LSAgICAvLyBFZGVuIEdDIGlzIHVuc291bmQuIFRoZXJlIG1pZ2h0IGJlIGFuIG9sZCBvYmplY3Qg
d2l0aCBhIHN0cm9uZyByZWZlcmVuY2UKLSAgICAvLyB0byB0aGUgY29kZS4KLSAgICBmb3IgKGNv
bnN0IFJlZlB0cjxDb2RlQmxvY2s+JiBjb2RlQmxvY2sgOiBtX3JlbWVtYmVyZWQpCi0gICAgICAg
IGNvZGVCbG9jay0+dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKLX0KLQogdm9pZCBDb2RlQmxvY2tT
ZXQ6OnJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcyhIZWFwKiBoZWFwKQogewog
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJSZW1lbWJlcmluZyAiLCBtX2N1cnJl
bnRseUV4ZWN1dGluZy5zaXplKCksICIgY29kZSBibG9ja3MuXG4iKTsKLSAgICBmb3IgKGNvbnN0
IFJlZlB0cjxDb2RlQmxvY2s+JiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKLSAg
ICAgICAgaGVhcC0+YWRkVG9SZW1lbWJlcmVkU2V0KGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCkpOwotCi0gICAgLy8gSXQncyBzYWZlIHRvIGNsZWFyIHRoZXNlIFJlZlB0ciBzZXRzIGJlY2F1
c2Ugd2Ugd29uJ3QgZGVsZXRlIHRoZSBDb2RlQmxvY2tzCi0gICAgLy8gaW4gdGhlbSB1bnRpbCB0
aGUgbmV4dCBHQywgYW5kIHdlJ2xsIHJlY29tcHV0ZSB0aGVtIGF0IHRoYXQgdGltZS4KKyAgICBm
b3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCisgICAgICAg
IGhlYXAtPmFkZFRvUmVtZW1iZXJlZFNldChjb2RlQmxvY2spOwogICAgIG1fY3VycmVudGx5RXhl
Y3V0aW5nLmNsZWFyKCk7Ci0gICAgbV9yZW1lbWJlcmVkLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ29k
ZUJsb2NrU2V0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC0xNzEsOCArMTE2LDgg
QEAgdm9pZCBDb2RlQmxvY2tTZXQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dAogICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNvZGVCbG9jaykpOwogICAgIG91dC5wcmludCgiXSwg
Y3VycmVudGx5RXhlY3V0aW5nID0gWyIpOwogICAgIGNvbW1hID0gQ29tbWFQcmludGVyKCk7Ci0g
ICAgZm9yIChjb25zdCBSZWZQdHI8Q29kZUJsb2NrPiYgY29kZUJsb2NrIDogbV9jdXJyZW50bHlF
eGVjdXRpbmcpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY29kZUJsb2Nr
LmdldCgpKSk7CisgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhl
Y3V0aW5nKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNvZGVCbG9jaykp
OwogICAgIG91dC5wcmludCgiXX0iKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywxMSArNTMs
OCBAQCBwdWJsaWM6CiAgICAgfkNvZGVCbG9ja1NldCgpOwogICAgIAogICAgIC8vIEFkZCBhIENv
ZGVCbG9jay4gVGhpcyBpcyBvbmx5IGNhbGxlZCBieSBDb2RlQmxvY2sgY29uc3RydWN0b3JzLgot
ICAgIHZvaWQgYWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPik7CisgICAgdm9pZCBhZGQoQ29kZUJs
b2NrKik7CiAgICAgCi0gICAgLy8gQ2xlYXIgbWFyayBiaXRzIGZvciBjZXJ0YWluIENvZGVCbG9j
a3MgZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGNvbGxlY3Rpb24uCi0gICAgdm9pZCBjbGVhck1h
cmtzRm9yRWRlbkNvbGxlY3Rpb24oY29uc3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7Ci0KICAg
ICAvLyBDbGVhciBhbGwgbWFyayBiaXRzIGZvciBhbGwgQ29kZUJsb2Nrcy4KICAgICB2b2lkIGNs
ZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpOwogCkBAIC03MiwxMCArNjksNiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCByZW1vdmUoQ29kZUJsb2NrKik7CiAgICAgCi0gICAgLy8gVHJhY2Ug
YWxsIG1hcmtlZCBjb2RlIGJsb2Nrcy4gVGhlIENvZGVCbG9jayBpcyBmcmVlIHRvIG1ha2UgdXNl
IG9mCi0gICAgLy8gbWF5QmVFeGVjdXRpbmcuCi0gICAgdm9pZCB0cmFjZU1hcmtlZChTbG90Vmlz
aXRvciYpOwotCiAgICAgLy8gQWRkIGFsbCBjdXJyZW50bHkgZXhlY3V0aW5nIENvZGVCbG9ja3Mg
dG8gdGhlIHJlbWVtYmVyZWQgc2V0IHRvIGJlIAogICAgIC8vIHJlLXNjYW5uZWQgZHVyaW5nIHRo
ZSBuZXh0IGNvbGxlY3Rpb24uCiAgICAgdm9pZCByZW1lbWJlckN1cnJlbnRseUV4ZWN1dGluZ0Nv
ZGVCbG9ja3MoSGVhcCopOwpAQCAtMTA0LDEzICs5Nyw5IEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
bGVhck1hcmtzRm9yQ29kZUJsb2Nrc0luUmVtZW1iZXJlZEV4ZWN1dGFibGVzKGNvbnN0IFZlY3Rv
cjxjb25zdCBKU0NlbGwqPiYpOwogICAgIHZvaWQgcHJvbW90ZVlvdW5nQ29kZUJsb2NrcygpOwog
Ci0gICAgLy8gVGhpcyBpcyBub3QgYSBzZXQgb2YgUmVmUHRyPENvZGVCbG9jaz4gYmVjYXVzZSB3
ZSBuZWVkIHRvIGJlIGFibGUgdG8gZmluZAotICAgIC8vIGFyYml0cmFyeSBib2d1cyBwb2ludGVy
cy4gSSBjb3VsZCBoYXZlIHdyaXR0ZW4gYSB0aGluZ3kgdGhhdCBoYWQgcGVlayB0eXBlcwotICAg
IC8vIGFuZCBhbGwsIGJ1dCB0aGF0IHNlZW1lZCBsaWtlIG92ZXJraWxsLgogICAgIEhhc2hTZXQ8
Q29kZUJsb2NrKj4gbV9vbGRDb2RlQmxvY2tzOwogICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4gbV9u
ZXdDb2RlQmxvY2tzOwotICAgIEhhc2hTZXQ8UmVmUHRyPENvZGVCbG9jaz4+IG1fY3VycmVudGx5
RXhlY3V0aW5nOwotICAgIEhhc2hTZXQ8UmVmUHRyPENvZGVCbG9jaz4+IG1fcmVtZW1iZXJlZDsK
KyAgICBIYXNoU2V0PENvZGVCbG9jayo+IG1fY3VycmVudGx5RXhlY3V0aW5nOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2
aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0OCwxNyArNTQ4LDYgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoZG91
YmxlIGdjU3RhcnRUaW1lLAogICAgIEdDUEhBU0UoTWFya1Jvb3RzKTsKICAgICBBU1NFUlQoaXNW
YWxpZFRocmVhZFN0YXRlKG1fdm0pKTsKIAotICAgIFZlY3Rvcjxjb25zdCBKU0NlbGwqPiByZW1l
bWJlcmVkU2V0KG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuc2l6ZSgpKTsKLSAgICBtX3Nsb3RW
aXNpdG9yLm1hcmtTdGFjaygpLmZpbGxWZWN0b3IocmVtZW1iZXJlZFNldCk7Ci0KLSNpZiBFTkFC
TEUoREZHX0pJVCkKLSAgICBERkc6OmNsZWFyQ29kZUJsb2NrTWFya3MoKm1fdm0pOwotI2VuZGlm
Ci0gICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBFZGVuQ29sbGVjdGlvbikKLSAgICAg
ICAgbV9jb2RlQmxvY2tzLmNsZWFyTWFya3NGb3JFZGVuQ29sbGVjdGlvbihyZW1lbWJlcmVkU2V0
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtzRm9yRnVsbENvbGxl
Y3Rpb24oKTsKLQogICAgIC8vIFdlIGdhdGhlciBjb25zZXJ2YXRpdmUgcm9vdHMgYmVmb3JlIGNs
ZWFyaW5nIG1hcmsgYml0cyBiZWNhdXNlIGNvbnNlcnZhdGl2ZQogICAgIC8vIGdhdGhlcmluZyB1
c2VzIHRoZSBtYXJrIGJpdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSByZWZlcmVuY2UgaXMgdmFs
aWQuCiAgICAgQ29uc2VydmF0aXZlUm9vdHMgY29uc2VydmF0aXZlUm9vdHMoJm1fb2JqZWN0U3Bh
Y2UuYmxvY2tzKCksICZtX3N0b3JhZ2VTcGFjZSk7CkBAIC01NjYsMTAgKzU1NSwyMCBAQCB2b2lk
IEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAgICAgZ2F0aGVySlNTdGFja1Jv
b3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKICAgICBnYXRoZXJTY3JhdGNoQnVmZmVyUm9vdHMoY29u
c2VydmF0aXZlUm9vdHMpOwogCi0gICAgY2xlYXJMaXZlbmVzc0RhdGEoKTsKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICBERkc6OnJlbWVtYmVyQ29kZUJsb2NrcygqbV92bSk7CisjZW5kaWYKIAot
ICAgIGlmIChtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gRnVsbENvbGxlY3Rpb24pCisgICAgaWYg
KG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikgewogICAgICAgICBtX29w
YXF1ZVJvb3RzLmNsZWFyKCk7CisgICAgICAgIG1fc2xvdFZpc2l0b3IuY2xlYXJNYXJrU3RhY2so
KTsKKyAgICB9CisKKyAgICBWZWN0b3I8Y29uc3QgSlNDZWxsKj4gcmVtZW1iZXJlZFNldChtX3Ns
b3RWaXNpdG9yLm1hcmtTdGFjaygpLnNpemUoKSk7CisgICAgbV9zbG90VmlzaXRvci5tYXJrU3Rh
Y2soKS5maWxsVmVjdG9yKHJlbWVtYmVyZWRTZXQpOworCisgICAgY2xlYXJMaXZlbmVzc0RhdGEo
KTsKKwogICAgIHsKICAgICAgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9tYXJraW5n
TXV0ZXgpOwogICAgICAgICBtX3BhcmFsbGVsTWFya2Vyc1Nob3VsZEV4aXQgPSBmYWxzZTsKQEAg
LTU4MSw2ICs1ODAsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUs
CiAgICAgewogICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRv
cik7CiAKKyAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogICAgICAgICB2
aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwogICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygp
OwogICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKQEAg
LTY3Nyw2ICs2NzcsOSBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25z
CiB2b2lkIEhlYXA6OmNsZWFyTGl2ZW5lc3NEYXRhKCkKIHsKICAgICBHQ1BIQVNFKENsZWFyTGl2
ZW5lc3NEYXRhKTsKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0
aW9uKQorICAgICAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7
CisKICAgICBtX29iamVjdFNwYWNlLmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAgICBtX29iamVj
dFNwYWNlLmNsZWFyTWFya3MoKTsKIH0KQEAgLTc5OCw3ICs4MDEsNiBAQCB2b2lkIEhlYXA6OnZp
c2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpCiB2b2lkIEhlYXA6OnRyYWNlQ29kZUJsb2Nrc0Fu
ZEpJVFN0dWJSb3V0aW5lcygpCiB7CiAgICAgR0NQSEFTRShUcmFjZUNvZGVCbG9ja3NBbmRKSVRT
dHViUm91dGluZXMpOwotICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZChtX3Nsb3RWaXNpdG9y
KTsKICAgICBtX2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhtX3Nsb3RW
aXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9z
ZSkKQEAgLTk0MywxOCArOTQ1LDEyIEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2Nrcygp
CiAgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIGRlbGV0
ZSBhbGwgSmF2YVNjcmlwdCBjb2RlLCBzaW5jZQogICAgIC8vIHdlJ2xsIGVuZCB1cCByZXR1cm5p
bmcgdG8gZGVsZXRlZCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZtLT5lbnRyeVNjb3Bl
KTsKKyAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKIAog
ICAgIGNvbXBsZXRlQWxsREZHUGxhbnMoKTsKIAotICAgIGZvciAoRXhlY3V0YWJsZUJhc2UqIGN1
cnJlbnQgOiBtX2V4ZWN1dGFibGVzKSB7Ci0gICAgICAgIGlmICghY3VycmVudC0+aXNGdW5jdGlv
bkV4ZWN1dGFibGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlKCk7Ci0gICAgfQotCi0g
ICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29w
ZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwotICAgIG1fY29kZUJsb2Nrcy5jbGVh
ck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKLSAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJr
ZWRBbmRVbnJlZmVyZW5jZWQoRnVsbENvbGxlY3Rpb24pOworICAgIGZvciAoRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUgOiBtX2V4ZWN1dGFibGVzKQorICAgICAgICBleGVjdXRhYmxlLT5jbGVh
ckNvZGUoKTsKIH0KIAogdm9pZCBIZWFwOjpkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoKQpA
QCAtOTc0LDkgKzk3MCw5IEBAIHZvaWQgSGVhcDo6Y2xlYXJVbm1hcmtlZEV4ZWN1dGFibGVzKCkK
ICAgICAgICAgaWYgKGlzTWFya2VkKGN1cnJlbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIGV4ZWN1dGFibGUgbWVtb3J5IGlzIGxpbWl0
ZWQgb24gc29tZSBwbGF0Zm9ybXMgYW5kIGJlY2F1c2UKLSAgICAgICAgLy8gQ29kZUJsb2NrIHJl
cXVpcmVzIGVhZ2VyIGZpbmFsaXphdGlvbi4KLSAgICAgICAgRXhlY3V0YWJsZUJhc2U6OmNsZWFy
Q29kZVZpcnR1YWwoY3VycmVudCk7CisgICAgICAgIC8vIEVhZ2VybHkgZGVyZWZlcmVuY2UgdGhl
IEV4ZWN1dGFibGUncyBKSVRDb2RlIGluIG9yZGVyIHRvIHJ1biB3YXRjaHBvaW50CisgICAgICAg
IC8vIGRlc3RydWN0b3JzLiBPdGhlcndpc2UsIHdhdGNocG9pbnRzIG1pZ2h0IGZpcmUgZm9yIGRl
bGV0ZWQgQ29kZUJsb2Nrcy4KKyAgICAgICAgY3VycmVudC0+Y2xlYXJDb2RlKCk7CiAgICAgICAg
IHN0ZDo6c3dhcChtX2V4ZWN1dGFibGVzW2ldLCBtX2V4ZWN1dGFibGVzLmxhc3QoKSk7CiAgICAg
ICAgIG1fZXhlY3V0YWJsZXMucmVtb3ZlTGFzdCgpOwogICAgIH0KQEAgLTExMzAsNyArMTEyNiw2
IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmEKICAgICBHQ1BIQVNF
KFN0YXJ0aW5nQ29sbGVjdGlvbik7CiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24oY29s
bGVjdGlvblR5cGUpKSB7CiAgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEZ1bGxDb2xs
ZWN0aW9uOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7CiAgICAgICAg
IG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbiA9IGZhbHNlOwogICAgICAgICBpZiAoT3B0aW9uczo6
bG9nR0MoKSkKICAgICAgICAgICAgIGRhdGFMb2coIkZ1bGxDb2xsZWN0aW9uLCAiKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIEpTVmFs
dWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUt
PnZtKCkuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIFRoaXNURFpNb2RlIHRoaXNURFpNb2RlID0g
Y2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdHJ1Y3RvcktpbmQoKSA9
PSBDb25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQgPyBUaGlzVERaTW9kZTo6QWx3YXlzQ2hlY2sgOiBU
aGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRlZDsKLSAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVCbG9j
ay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyU2NyaXB0RXhlY3V0YWJsZSgpLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCB0
aGlzVERaTW9kZSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CisgICAgICAgIGV2
YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwg
Y2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCB0aGlzVERa
TW9kZSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CiAgICAgICAgIGlmICghZXZh
bCkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2
aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1
YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIFBhc3NSZWZQdHI8
SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWIKIC8vIEhlbHBlciBmb3IgdGhlIGNyZWF0aW9u
IG9mIHNpbXBsZSBzdHViIHJvdXRpbmVzIHRoYXQgbmVlZCBubyBoZWxwIGZyb20gdGhlIEdDLiBO
b3RlCiAvLyB0aGF0IGNvZGVCbG9jayBnZXRzICJleGVjdXRlZCIgbW9yZSB0aGFuIG9uY2UuCiAj
ZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SX0dDX0FXQVJFX1NUVUIoY29kZUJsb2NrLCBwYXRjaEJ1
ZmZlciwgbWFrZXNDYWxscywgY2VsbCwgZGF0YUxvZ0ZBcmd1bWVudHMpIFwKLSAgICAoY3JlYXRl
SklUU3R1YlJvdXRpbmUoRklOQUxJWkVfQ09ERV9GT1IoKGNvZGVCbG9jayksIChwYXRjaEJ1ZmZl
ciksIGRhdGFMb2dGQXJndW1lbnRzKSwgKihjb2RlQmxvY2spLT52bSgpLCAoY29kZUJsb2NrKS0+
b3duZXJFeGVjdXRhYmxlKCksIChtYWtlc0NhbGxzKSwgKGNlbGwpKSkKKyAgICAoY3JlYXRlSklU
U3R1YlJvdXRpbmUoRklOQUxJWkVfQ09ERV9GT1IoKGNvZGVCbG9jayksIChwYXRjaEJ1ZmZlciks
IGRhdGFMb2dGQXJndW1lbnRzKSwgKihjb2RlQmxvY2spLT52bSgpLCAoY29kZUJsb2NrKSwgKG1h
a2VzQ2FsbHMpLCAoY2VsbCkpKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMjggKzEyMSw2
IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAg
c3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSW50ZXJwcmV0ZXJUaHVuazoKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWls
bGlzZWNvbmRzPigKLSAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSk7Ci0g
ICAgICAgIGNhc2UgQmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBh
ZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAotICAgICAgICAgICAgLy8g
SW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KLSAgICAgICAgICAgIHJldHVybiBz
dGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKLSAg
ICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygxNSkpOwotICAgICAgICBjYXNlIERG
R0pJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKLSAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vj
b25kcygyMCkpOwotICAgICAgICBjYXNlIEZUTEpJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKLSAgICAg
ICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOwotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOwotICAg
ICAgICB9Ci0gICAgfQotCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBl
Y3RlZExvd2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFT
RV9BU1NFUlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTkwMjQ4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjY2LDcgKzY2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikK
ICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNw
YWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5p
dFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKIAotICAgIGVt
aXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICBlbWl0
V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNo
ZWNrKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsMTUgKzEyNzMsMTMgQEAgU2xv
d1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgbXVzdEhh
bmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAg
ICAgICB9CiAKLSAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gcmVwbGFjZW1lbnRDb2RlQmxvY2sg
PSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIENvZGVCbG9jayogcmVwbGFj
ZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CiAgICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAgICAgICAgIHZtLCBy
ZXBsYWNlbWVudENvZGVCbG9jay5nZXQoKSwgMCwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4
LAorICAgICAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBudWxscHRyLCBERkc6OkRG
R01vZGUsIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKLSAgICAgICAgICAg
IEFTU0VSVChyZXN1bHQgPT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCByZXBsYWNlbWVudENvZGVC
bG9jay0+aGFzT25lUmVmKCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3Vj
Y2Vzc2Z1bCkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoMCwgMCk7Ci0gICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPnJlcGxhY2VtZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcAkocmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQz
LDggKzQzLDkgQEAgUmVmPEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPgogfQog
CiB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRp
ZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2sp
CiB7CisgICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZH
Q29kZUJsb2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBl
KCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJi
b3NlT1NSKCkpCkBAIC01NCw4ICs1NSw5IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2sKIH0KIAogdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29t
cGlsYXRpb25SZXN1bHQgcmVzdWx0KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7Cisg
ICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAK
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpAQCAtNjYsNyArNjgsNyBAQCB2b2lkIEpJ
VFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgCiAgICAgY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQocmVzdWx0KTsKIAotICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGls
YXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRE
RkdDb2RlQmxvY2ssIHJlc3VsdCk7CiB9CiAKIH0gLy8gSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlZjxKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKCk7CiAgICAgCi0gICAgdmlydHVhbCB2
b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKSBv
dmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxv
Y2sqLCBDb21waWxhdGlvblJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbXBp
bGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sq
IHByb2ZpbGVkREZHQ29kZUJsb2NrKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGls
YXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJs
b2NrLCBDb21waWxhdGlvblJlc3VsdCkgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTkw
MjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjI3LDE1ICsyMjcsMTQgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNh
Y2hlR2V0QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgU2NyaXB0RXhlY3V0YWJsZSog
b3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsK
IAogICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKLSAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6Omdl
dExlbmd0aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKKyAgICAgICAgbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpB
cnJheUxlbmd0aCk7CiAgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHByb3Bl
cnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQotICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U3RyaW5nTGVu
Z3RoKTsKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJs
b2NrLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOwogICAgIGVsc2UgewogICAgICAgICBpZiAo
IXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCiAgICAgICAgICAgICByZXR1
cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94
eSkgewogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBs
YWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmVwYXRjaEJ5
SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB0cnVlKTsKLSAgICAgICAgICAgIHN0
dWJJbmZvLmluaXRHZXRCeUlkU2VsZih2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkU2VsZih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCkBA
IC0yNzksMTAgKzI3OCwxMCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRC
eUlECiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgewogICAg
ICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5
TWlzcygKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwo
KSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJl
LCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4
ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAogICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzAzLDcg
KzMwMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAg
ICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0ZXI7CiAKICAgICAgICAgbmV3Q2Fz
ZSA9IEFjY2Vzc0Nhc2U6OmdldCgKLSAgICAgICAgICAgIHZtLCBvd25lciwgdHlwZSwgb2Zmc2V0
LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwKKyAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQs
IGxvYWRUYXJnZXRGcm9tUHJveHksCiAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwg
c2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIs
CiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNsb3RCYXNlKCkg
OiBudWxscHRyKTsKICAgICB9CkBAIC0zNTcsNyArMzU2LDYgQEAgc3RhdGljIElubGluZUNhY2hl
QWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAg
ICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFNj
cmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUo
KTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxs
KCkpCkBAIC0zODUsMTEgKzM4MywxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2Fj
aGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlh
dGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CiAgICAg
ICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKAotICAgICAgICAgICAgICAg
ICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlD
YWNoZUxhdGVyOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNz
Q2FzZTo6cmVwbGFjZSh2bSwgb3duZXIsIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwgY29kZUJsb2Nr
LCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVy
dHkpOwogCkBAIC00MTEsMTIgKzQwOSwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKICAg
ICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0
ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAg
ICB2bSwgb3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQu
aW1wbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgb3duZXIs
IHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJs
ZVNldHRlcigpKSB7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKQEAg
LTQyNSwxMyArNDIzLDEzIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5
SUQKICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBvd25lciwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVy
ZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb25k
aXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6
OnNldHRlcigKLSAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkN1c3RvbVNl
dHRlciwgc3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCisgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyLCBzdHJ1Y3R1cmUs
IGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBzbG90LmN1c3Rv
bVNldHRlcigpLCBzbG90LmJhc2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBP
YmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC00NDAsNyArNDM4LDcg
QEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAg
aWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlw
ZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQu
aW1wbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgICAg
IG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwpAQCAt
NDQ4LDcgKzQ0Niw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQK
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogCiAgICAgICAg
ICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAgICAgICAgICAgICAgIHZtLCBv
d25lciwgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0
KTsKKyAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIHN0
cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00
OTEsNyArNDg5LDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAg
ICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
LSAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVj
dXRhYmxlKCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CiAgICAgCkBAIC00OTksMTcgKzQ5NiwxNyBAQCBz
dGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIGlmICh3YXNGb3VuZCkg
ewogICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKICAgICAgICAgICAgIGNv
bmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAot
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBz
dHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQu
aW1wbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9
IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7
CisgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwo
KSk7CiAgICAgfQogICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3
Q2FzZSA9IEFjY2Vzc0Nhc2U6OmluKAotICAgICAgICB2bSwgb3duZXIsIHdhc0ZvdW5kID8gQWNj
ZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVjdHVyZSwgY29uZGl0aW9u
U2V0KTsKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhp
dCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwogCiAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKHZt
LCBjb2RlQmxvY2ssIGlkZW50LCBXVEY6Om1vdmUobmV3Q2FzZSkpOwogICAgIGlmICghY29kZVB0
cikKQEAgLTU1OCw4ICs1NTUsOCBAQCB2b2lkIGxpbmtGb3IoCiAgICAgVk0qIHZtID0gY2FsbGVy
Q29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2Vk
KCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0o
KSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZShl
eGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJh
bWUoKS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2ss
IGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLnNldExhc3RTZWVuQ2FsbGVlKGV4ZWMtPmNhbGxl
ckZyYW1lKCktPnZtKCksIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKICAgICBpZiAoc2hvdWxk
U2hvd0Rpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxp
bmtpbmcgY2FsbCBpbiAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiIGF0ICIsIGNhbGxMaW5rSW5mby5j
b2RlT3JpZ2luKCksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50
cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRj
aE5lYXJDYWxsKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWwo
Y29kZVB0cikpOwpAQCAtODc2LDcgKzg3Myw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgK
ICAgICAgICAgICAgICgiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50
ICVwLCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVC
bG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9m
ZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhs
aXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpKSwKLSAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8s
IGNhbGxDYXNlcywKKyAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2ssIGV4ZWMtPmNhbGxlckZy
YW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAogICAgICAgICBXVEY6Om1vdmUoZmFzdENv
dW50cykpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShy
ZXZpc2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93
UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDcgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUlu
Zm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkgewotICAg
ICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSk7CisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7CiAKQEAgLTY0MSw3ICs2NDEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT50eXBlSW5mbygpLnBy
b2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCiAgICAgICAgICAgICAmJiBiYXNlQ2VsbCA9PSBzbG90
LmJhc2UoKSkgewogCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNv
ZGVCbG9jayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQ
dXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgR0NTYWZlQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtLmhlYXApOwpAQCAt
NjU4LDcgKzY1OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1
Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNbN10udS5zdHJ1
Y3R1cmVDaGFpbi5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGlj
X2Nhc3Q8UHV0QnlJZEZsYWdzPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51
LnB1dEJ5SWRGbGFncyB8CkBAIC0xMTkwLDggKzExOTAsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1
cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgIAogICAgICAgICBpZiAoY2FsbExpbmtJbmZv
LT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUoKTsKLSAgICAg
ICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBjYWxsZWUpOwotICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVl
LnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAg
ICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxl
ZSk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KHZtLCBjYWxsZXJD
b2RlQmxvY2ssIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJn
ZXQgPSBjb2RlUHRyOwogICAgICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICAgICAgY29kZUJs
b2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMsIGNhbGxMaW5rSW5mbyk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY3JlYXRlX3RoaXMpCiAKICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9
IHBjWzRdLnUuanNDZWxsOwogICAgIGlmICghY2FjaGVXcml0ZUJhcnJpZXIpCi0gICAgICAgIGNh
Y2hlV3JpdGVCYXJyaWVyLnNldChleGVjLT52bSgpLCBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJF
eGVjdXRhYmxlKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0
KGV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CiAgICAgZWxzZSBp
ZiAoY2FjaGVXcml0ZUJhcnJpZXIudW52YWxpZGF0ZWRHZXQoKSAhPSBKU0NlbGw6OnNlZW5NdWx0
aXBsZUNhbGxlZU9iamVjdHMoKSAmJiBjYWNoZVdyaXRlQmFycmllci5nZXQoKSAhPSBjb25zdHJ1
Y3RvcikKICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0V2l0aG91dFdyaXRlQmFycmllcihK
U0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSk7CiAKQEAgLTI1MCw3ICsyNTAsNyBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKICAgICAgICAgaWYgKG15U3RydWN0
dXJlICE9IG90aGVyU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBpZiAob3RoZXJTdHJ1Y3R1cmUp
CiAgICAgICAgICAgICAgICAgcGNbM10udS50b1RoaXNTdGF0dXMgPSBUb1RoaXNDb25mbGljdGVk
OwotICAgICAgICAgICAgcGNbMl0udS5zdHJ1Y3R1cmUuc2V0KHZtLCBleGVjLT5jb2RlQmxvY2so
KS0+b3duZXJFeGVjdXRhYmxlKCksIG15U3RydWN0dXJlKTsKKyAgICAgICAgICAgIHBjWzJdLnUu
c3RydWN0dXJlLnNldCh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG15U3RydWN0dXJlKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHBjWzNdLnUudG9UaGlzU3RhdHVzID0gVG9UaGlz
Q29uZmxpY3RlZDsKQEAgLTUyNiw4ICs1MjYsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dG9fcHJpbWl0aXZlKQogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVyKQogewogICAgIEJF
R0lOKCk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhlY3V0YWJsZSA9IGV4ZWMtPmNvZGVC
bG9jaygpLT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICBIZWFwOjpoZWFwKG93bmVyRXhlY3V0YWJs
ZSktPndyaXRlQmFycmllcihvd25lckV4ZWN1dGFibGUpOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0
ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICBFTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE5MDI0
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVQdXRU
b1Njb3BlR2xvYmFsKAogICAgICAgICBzY29wZS0+c3RydWN0dXJlKCktPmRpZENhY2hlUHJvcGVy
dHlSZXBsYWNlbWVudChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKIAogICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
IHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOworICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5z
ZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBzY29wZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBw
Y1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgIH0KIH0KQEAgLTE2Miw3
ICsxNjIsNyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZUdldEZyb21TY29wZUdsb2JhbCgKICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2bSk7CiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29k
ZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAg
ICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNo
ZWRPZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRX
YXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShy
ZXZpc2lvbiAxOTAyNDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNDUgQEAgdm9pZCBFeGVjdXRhYmxl
QmFzZTo6Y2xlYXJDb2RlKCkKICNlbmRpZgogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBO
VU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3Ry
dWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOworCisgICAgaWYgKGNsYXNzSW5mbygp
ID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAg
ICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIGV4
ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8o
KSkgeworICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhl
Y3V0YWJsZSo+KHRoaXMpOworICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2suY2xl
YXIoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2suY2xlYXIo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0g
UHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgeworICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBl
eGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgZXhlY3V0YWJs
ZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChjbGFzc0luZm8oKSA9PSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6
aW5mbygpKSB7CisgICAgICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
anNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIGV4ZWN1dGFi
bGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAgICBleGVjdXRhYmxl
LT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAgICBleGVj
dXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuY2xlYXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKGNs
YXNzSW5mbygpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIFdl
YkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1
dGFibGUqPih0aGlzKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmNs
ZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEFTU0VSVChjbGFz
c0luZm8oKSA9PSBOYXRpdmVFeGVjdXRhYmxlOjppbmZvKCkpOwogfQogCiAjaWYgRU5BQkxFKERG
R19KSVQpCkBAIC0xMjMsNyArMTYyLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxs
Q29kZShWTSYgdgogewogICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgCi0g
ICAgUmVmUHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOworICAgIENvZGVCbG9jayogb2xkQ29k
ZUJsb2NrID0gbnVsbHB0cjsKICAgICAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7CiAgICAgY2Fz
ZSBHbG9iYWxDb2RlOiB7CkBAIC0xMzIsOCArMTcxLDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxl
OjppbnN0YWxsQ29kZShWTSYgdgogICAgICAgICAKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNhbGwpOwogICAgICAgICAKLSAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+
bV9wcm9ncmFtQ29kZUJsb2NrOwotICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxv
Y2sgPSBjb2RlQmxvY2s7CisgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fcHJv
Z3JhbUNvZGVCbG9jay5nZXQoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJs
b2NrLnNldE1heUJlTnVsbCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCkBAIC0xNDMsOCArMTgyLDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxs
Q29kZShWTSYgdgogCiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKIAotICAg
ICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7
Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA9IGNvZGVCbG9j
azsKKyAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrLmdldCgpOworICAgICAgICBleGVjdXRhYmxlLT5tX21vZHVsZVByb2dyYW1Db2RlQmxv
Y2suc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKQEAgLTE1NCw4ICsxOTMsOCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKFZNJiB2CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7
CiAgICAgICAgIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2V2YWxDb2Rl
QmxvY2s7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayA9IGNvZGVCbG9jazsK
KyAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLmdldCgp
OworICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2suc2V0TWF5QmVOdWxsKHZtLCB0
aGlzLCBjb2RlQmxvY2spOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTY1
LDEyICsyMDQsMTIgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdgog
ICAgICAgICAKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgQ29kZUZvckNh
bGw6Ci0gICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0Zv
ckNhbGw7Ci0gICAgICAgICAgICBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwgPSBjb2Rl
QmxvY2s7CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9j
a0ZvckNhbGwuZ2V0KCk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNh
bGwuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgIG9sZENvZGVCbG9j
ayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwotICAgICAgICAgICAgZXhl
Y3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBjb2RlQmxvY2s7CisgICAgICAgICAg
ICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQo
KTsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnNldE1h
eUJlTnVsbCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjEwLDcgKzI0OSw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0
YWJsZTo6aW5zdGFsbENvZGUoVk0mIHYKICAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzKTsK
IH0KIAotUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9y
KAorQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSog
c2NvcGUsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIFZNKiB2bSA9IHNjb3BlLT52bSgp
OwpAQCAtMjI0LDkgKzI2Myw5IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6
Om5ld0MKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spOwogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghZnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEV2YWxDb2RlQmxvY2soCisgICAgICAgIHJldHVybiBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0s
CiAgICAgICAgICAgICBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXZhbENvZGVC
bG9jay5nZXQoKSwgc2NvcGUsCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92
aWRlcigpKSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpKTsK
ICAgICB9CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mbygpID09IFByb2dyYW1FeGVjdXRhYmxlOjpp
bmZvKCkpIHsKQEAgLTIzNCw5ICsyNzMsOSBAQCBSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVj
dXRhYmxlOjpuZXdDCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2Nr
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICByZXR1cm4gUHJvZ3JhbUNvZGVC
bG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAgICAgICAgZXhlY3V0
YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1
bW4oKSkpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhl
Y3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSk7CiAgICAgfQogCiAgICAgaWYgKGNsYXNz
SW5mbygpID09IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKQEAgLTI0NCw5ICsy
ODMsOSBAQCBSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDCiAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNFX0FT
U0VSVCghZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICByZXR1cm4gTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
azo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAgICAgICAgZXhl
Y3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRD
b2x1bW4oKSkpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwg
ZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSk7CiAgICAgfQogCiAgICAgUkVMRUFT
RV9BU1NFUlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOwpAQCAt
Mjc2LDExICszMTUsMTEgQEAgUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3
QwogICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0
T2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zb3VyY2Uo
KS5zdGFydENvbHVtbigpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVC
bG9jaygKLSAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92
aWRlciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOworICAgIHJldHVybiBGdW5jdGlvbkNv
ZGVCbG9jazo6Y3JlYXRlKHZtLAorICAgICAgICBleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKTsKIH0KIAotUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJs
b2NrRm9yKAorQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVC
bG9ja0ZvcigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgaWYgKGNs
YXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKQEAgLTI4OCw5ICszMjcsOSBA
QCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgICAgIEV2YWxF
eGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CiAg
ICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9j
ayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5iYXNlbGluZVZl
cnNpb24oKSk7Ci0gICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJl
ZihuZXcgRXZhbENvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJs
b2NrLCAqYmFzZWxpbmUpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGlu
ZSk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIHJlc3VsdCA9IEV2YWxDb2RlQmxvY2s6OmNyZWF0
ZSh2bSgpLAorICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGlu
ZSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoKnZtKCksIGJhc2VsaW5lKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yOTksOSArMzM4LDkgQEAgUGFz
c1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICBQcm9ncmFtRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwog
ICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PFByb2dyYW1D
b2RlQmxvY2sqPigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gcmVz
dWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAgICBDb2RlQmxv
Y2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0
ZXJuYXRpdmUoYmFzZWxpbmUpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBQ
cm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0oKSwKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29w
eVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZl
KCp2bSgpLCBiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0z
MTAsOSArMzQ5LDkgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Ogog
ICAgICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPigKICAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCkpOwotICAgICAgICBSZWZQdHI8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0
ID0gYWRvcHRSZWYobmV3IE1vZHVsZVByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAgICBDb2Rl
QmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0
QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBy
ZXN1bHQgPSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0oKSwKKyAgICAgICAgICAg
IENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgICAgICByZXN1bHQt
PnNldEFsdGVybmF0aXZlKCp2bSgpLCBiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAgICAgfQogCkBAIC0zMjAsOSArMzU5LDkgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlw
dEV4ZWN1dGFibGU6OgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFz
ZWxpbmUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KAogICAgICAgICBleGVjdXRh
YmxlLT5jb2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICBSZWZQdHI8
RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9j
aygKLSAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSkpOwotICAg
IHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOworICAgIEZ1bmN0aW9uQ29kZUJsb2Nr
KiByZXN1bHQgPSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtKCksCisgICAgICAgIENvZGVC
bG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgIHJlc3VsdC0+c2V0QWx0ZXJu
YXRpdmUoKnZtKCksIGJhc2VsaW5lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zNTAs
NyArMzg5LDcgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeAogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBKU09iamVjdCogZXhjZXB0aW9u
ID0gMDsKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2tGb3Io
a2luZCwgZnVuY3Rpb24sIHNjb3BlLCBleGNlcHRpb24pOworICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gbmV3Q29kZUJsb2NrRm9yKGtpbmQsIGZ1bmN0aW9uLCBzY29wZSwgZXhjZXB0aW9uKTsK
ICAgICBpZiAoIWNvZGVCbG9jaykgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24p
OwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwpAQCAtMzYwLDExICszOTksMTEgQEAgSlNPYmpl
Y3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeAogICAgICAgICBjb2RlQmxvY2stPnZh
bGlkYXRlKCk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0gICAgICAgIHNl
dHVwTExJbnQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIHNldHVwTExJbnQodm0sIGNv
ZGVCbG9jayk7CiAgICAgZWxzZQotICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrLmdldCgp
KTsKKyAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CiAgICAgCi0gICAgaW5zdGFsbENv
ZGUoKmNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLmdldCgpLCBjb2RlQmxvY2stPmNvZGVUeXBl
KCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIGluc3RhbGxDb2RlKCpj
b2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxv
Y2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTAyLDE2
ICs1NDEsOSBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAg
RXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxs
KTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAg
ICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsK
LSAgICBpZiAodGhpc09iamVjdC0+bV9ldmFsQ29kZUJsb2NrKQotICAgICAgICB0aGlzT2JqZWN0
LT5tX2V2YWxDb2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3VubGlua2VkRXZhbENvZGVCbG9jayk7Ci19Ci0KLXZvaWQg
RXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gbnVs
bHB0cjsKLSAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5jbGVhcigpOwotICAgIEJhc2U6OmNs
ZWFyQ29kZSgpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spCisgICAgICAg
IHRoaXNPYmplY3QtPm1fZXZhbENvZGVCbG9jay0+dmlzaXRXZWFrbHkodmlzaXRvcik7CiB9CiAK
IEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVj
KQpAQCAtNjE4LDE0ICs2NTAsNyBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTCiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2spCi0g
ICAgICAgIHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlz
aXRvcik7Ci19Ci0KLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAg
bV9wcm9ncmFtQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX3VubGlua2VkUHJvZ3JhbUNvZGVC
bG9jay5jbGVhcigpOwotICAgIEJhc2U6OmNsZWFyQ29kZSgpOworICAgICAgICB0aGlzT2JqZWN0
LT5tX3Byb2dyYW1Db2RlQmxvY2stPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogfQogCiB2b2lkIE1v
ZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCkBAIC02MzYsMTUgKzY2MSw3IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91
bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUpOwogICAgIGlmICh0aGlzT2Jq
ZWN0LT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2spCi0gICAgICAgIHRoaXNPYmplY3QtPm1fbW9k
dWxlUHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci19Ci0KLXZvaWQg
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAgbV9tb2R1bGVQcm9n
cmFtQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVC
bG9jay5jbGVhcigpOwotICAgIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5jbGVhcigp
OwotICAgIEJhc2U6OmNsZWFyQ29kZSgpOworICAgICAgICB0aGlzT2JqZWN0LT5tX21vZHVsZVBy
b2dyYW1Db2RlQmxvY2stPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogfQogCiBGdW5jdGlvbkNvZGVC
bG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCkBAIC02NjcsMjAgKzY4NCwxMyBAQCB2b2lkIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0
aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9y
Q2FsbCkKLSAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52
aXNpdFdlYWtseSh2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JD
b25zdHJ1Y3QpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX3VubGlua2VkRXhlY3V0YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fc2luZ2xldG9uRnVuY3Rpb24pOwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6Y2xlYXJDb2RlKCkKLXsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOwot
ICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gbnVsbHB0cjsKLSAgICBCYXNlOjpjbGVhckNv
ZGUoKTsKLX0KLQogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21H
bG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4ZWNTdGF0ZSYgZXhlYywg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50
IG92ZXJyaWRlTGluZU51bWJlcikKQEAgLTcxNiwxNiArNzI2LDEwIEBAIHZvaWQgV2ViQXNzZW1i
bHlFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmUKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgRXhlY3V0YWJsZUJhc2U6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9y
Q2FsbCkKLSAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3Jl
Z2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52
aXNpdFdlYWtseSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9t
b2R1bGUpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKLXsK
LSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOwotICAgIEJhc2U6OmNsZWFyQ29kZSgp
OwotfQotCiB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbihF
eGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGhhc0pJVENvZGVGb3JDYWxsKCkpCkBAIC03MzQs
MTYgKzczOCwxNiBAQCB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAK
LSAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVmKG5l
dyBXZWJBc3NlbWJseUNvZGVCbG9jaygKLSAgICAgICAgdGhpcywgdm0sIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKSkpOworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBX
ZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLAorICAgICAgICB0aGlzLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpKTsKIAotICAgIFdBU01GdW5jdGlvblBhcnNlcjo6Y29tcGlsZSh2
bSwgY29kZUJsb2NrLmdldCgpLCBtX21vZHVsZS5nZXQoKSwgbV9zb3VyY2UsIG1fZnVuY3Rpb25J
bmRleCk7CisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIG1f
bW9kdWxlLmdldCgpLCBtX3NvdXJjZSwgbV9mdW5jdGlvbkluZGV4KTsKIAogICAgIG1faml0Q29k
ZUZvckNhbGwgPSBjb2RlQmxvY2stPmppdENvZGUoKTsKICAgICBtX2ppdENvZGVGb3JDYWxsV2l0
aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICBtX251bVBhcmFtZXRl
cnNGb3JDYWxsID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAKLSAgICBtX2NvZGVCbG9j
a0ZvckNhbGwgPSBjb2RlQmxvY2s7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsLnNldCh2bSwgdGhp
cywgY29kZUJsb2NrKTsKIAogICAgIEhlYXA6OmhlYXAodGhpcyktPndyaXRlQmFycmllcih0aGlz
KTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJ
KHJldmlzaW9uIDE5MDI0OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDggKzEzOSw2IEBAIHByb3RlY3RlZDoKICAg
ICBpbnQgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0OwogCiBwdWJsaWM6Ci0gICAgc3RhdGlj
IHZvaWQgY2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSopOwotCiAgICAgUGFzc1JlZlB0
cjxKSVRDb2RlPiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpCiAgICAgewogICAgICAgICBBU1NF
UlQobV9qaXRDb2RlRm9yQ2FsbCk7CkBAIC0zMDYsNiArMzA0LDggQEAgcHJvdGVjdGVkOgogICAg
IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CisKICAgICBO
YXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1
bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKHZtLCB2bS5uYXRp
dmVFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBOVU1fUEFSQU1FVEVSU19JU19IT1NUKQogICAg
ICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCkBAIC0zNzYsOCArMzc2LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBpbnN0YWxsQ29kZShDb2RlQmxvY2sqKTsKICAgICB2b2lkIGluc3RhbGxDb2Rl
KFZNJiwgQ29kZUJsb2NrKiwgQ29kZVR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAg
IFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKLSAgICBQYXNz
UmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCk7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxp
emF0aW9uS2luZCwgSlNGdW5jdGlvbiosIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2VwdGlvbik7
CisgICAgQ29kZUJsb2NrKiBuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kKTsKICAgICAKICAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVj
U3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgIHsKQEAgLTM4OSw2ICszODksNyBAQCBwdWJsaWM6
CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9jayhG
dW5jdG9yJiYpOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsK
ICAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRlKiwgSlNGdW5j
dGlvbiosIEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAogcHJvdGVjdGVkOgpA
QCAtNDQ3LDIwICs0NDgsMTkgQEAgcHVibGljOgogICAgICAgICAKICAgICBERUNMQVJFX0lORk87
CiAKLSAgICB2b2lkIGNsZWFyQ29kZSgpOwotCiAgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJs
ZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwg
dXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5k
OjpOb25lLCBmYWxzZSk7IH0KIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJu
IG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQogICAgIHVuc2lnbmVk
IG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2Nr
LT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBFeGVjdXRhYmxlQmFzZTsKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKICAg
ICBFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCk7CiAK
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
LSAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOworICAgIFdyaXRlQmFy
cmllcjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFVu
bGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2s7CiB9OwogCkBAIC01
MDEsMTEgKzUwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIAot
ICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0KICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5m
bygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2Vz
RXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5v
bmUsIGZhbHNlKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFz
ZTsKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIAogICAgIFByb2dyYW1FeGVj
dXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKQEAgLTUxMyw3ICs1MTIsNyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1f
dW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwotICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiBt
X3Byb2dyYW1Db2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPFByb2dyYW1Db2RlQmxvY2s+IG1f
cHJvZ3JhbUNvZGVCbG9jazsKIH07CiAKIGNsYXNzIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlIGZp
bmFsIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpAQCAtNTQzLDE0ICs1NDIsMTMgQEAgcHVi
bGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgdm9pZCBjbGVhckNvZGUoKTsKLQogICAg
IEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJs
ZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxz
ZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgZmFsc2UpOyB9CiAgICAgVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soKSB7
IHJldHVybiBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5nZXQoKTsgfQogCiAgICAg
U3ltYm9sVGFibGUqIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUoKSB7IHJldHVybiBtX21v
ZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFi
bGU7CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3Vy
Y2VDb2RlJik7CkBAIC01NTksNyArNTU3LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmll
cjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9u
bWVudFN5bWJvbFRhYmxlOwotICAgIFJlZlB0cjxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX21v
ZHVsZVByb2dyYW1Db2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2s+IG1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKIH07CiAKIGNsYXNzIEZ1bmN0aW9uRXhl
Y3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTYwMCw3ICs1OTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29u
c3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgICAgIHJl
dHVybiAhIW1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICB9CiAKICAgICBGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrRm9yQ2FsbCgpCkBAIC02MTAsNyArNjA4LDcgQEAgcHVibGljOgogCiAgICAg
Ym9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1
cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC5nZXQoKTsKICAgICB9CiAKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJs
b2NrRm9yQ29uc3RydWN0KCkKQEAgLTY3NiwxMSArNjc0LDEwIEBAIHB1YmxpYzoKIAogICAgIERF
Q0xBUkVfSU5GTzsKIAotICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0gICAgCiAgICAgSW5mZXJyZWRW
YWx1ZSogc2luZ2xldG9uRnVuY3Rpb24oKSB7IHJldHVybiBtX3NpbmdsZXRvbkZ1bmN0aW9uLmdl
dCgpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSgKICAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIAogICAgICAgICB1
bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVt
bik7CkBAIC02OTAsOCArNjg3LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0
RXhlY3V0YWJsZTsKICAgICAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGU+IG1fdW5saW5rZWRFeGVjdXRhYmxlOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gbV9jb2RlQmxvY2tGb3JDYWxsOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1cm5T
dGF0ZW1lbnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0Owog
ICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFZhbHVlPiBtX3NpbmdsZXRvbkZ1bmN0aW9uOwpAQCAt
NzE5LDggKzcxNiw2IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHZvaWQg
Y2xlYXJDb2RlKCk7Ci0KICAgICB2b2lkIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKik7
CiAKICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yQ2FsbCgpCkBAIC03Mjks
NiArNzI0LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
RXhlY3V0YWJsZUJhc2U7CiAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291
cmNlQ29kZSYsIEpTV0FTTU1vZHVsZSosIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAg
c3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNzM3
LDMwICs3MzMsMTAgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXQVNNTW9kdWxlPiBt
X21vZHVsZTsKICAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXg7CiAKLSAgICBSZWZQdHI8V2Vi
QXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICBXcml0ZUJhcnJpZXI8
V2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKIH07CiAjZW5kaWYKIAot
aW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJh
c2UqIGV4ZWN1dGFibGUpCi17Ci0gICAgc3dpdGNoIChleGVjdXRhYmxlLT50eXBlKCkpIHsKLSAg
ICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxFdmFsRXhl
Y3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKLSAgICBjYXNlIFByb2dyYW1FeGVj
dXRhYmxlVHlwZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGV4
ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKLSAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6
Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSkt
PmNsZWFyQ29kZSgpOwotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBjYXNlIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVj
dXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwotI2VuZGlmCi0gICAgY2FzZSBNb2R1
bGVQcm9ncmFtRXhlY3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGpzQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNs
ZWFyQ29kZSgpOwotICAgIH0KLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgor
I2VuZGlmIC8vIEV4ZWN1dGFibGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcAkocmV2aXNpb24gMTkwMjQ4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDE0IEBAIFZNOjpWTShWTVR5cGUg
dm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGludGVybmFsUHJvbWlz
ZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6
Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb2dyYW1Db2RlQmxv
Y2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgbW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhp
cywgMCwganNOdWxsKCkpKTsKKyAgICBldmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywg
RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAg
IGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25Db2RlQmxvY2s6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCisgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwor
I2VuZGlmCisKICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVj
dDo6Y3JlYXRlKCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpLCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQo
KnRoaXMsIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBq
c051bGwoKSkpOwogICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhp
cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE5MDI0OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwOSw2ICszMDksMTIgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VE
ZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbnRlcm5hbFByb21pc2VE
ZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBuYXRpdmVTdGRGdW5jdGlv
bkNlbGxTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUNvZGVCbG9ja1N0
cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3Ry
dWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7Cisg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgU3Ry
b25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7CisKICAgICBTdHJv
bmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5
UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262299</attachid>
            <date>2015-10-01 16:50:28 -0700</date>
            <delta_ts>2015-10-01 17:59:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149727-20151001165002.patch</filename>
            <type>text/plain</type>
            <size>165506</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxNiBA
QAorMjAxNS0xMC0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIENvZGVCbG9jayBzaG91bGQgYmUgYSBHQyBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTcyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHdhbnQgQ29kZUJsb2NrIHRvIGJlIGEgR0Mg
b2JqZWN0OgorCisgICAgICAgICgxKSBTYW5lIHdyaXRlIGJhcnJpZXJzLiBCZWNhdXNlIENvZGVC
bG9jayB3YXNuJ3QgYSBHQyBvYmplY3QsIHdlIGNvdWxkbid0CisgICAgICAgIGV4ZWN1dGUgYSB3
cml0ZSBiYXJyaWVyIG9uIGl0LiBUaGlzIGNhdXNlZCB1cyB0byBkbyB3ZWlyZCB0aGluZ3MgdGhh
dAorICAgICAgICB3ZXJlIGhhcmQgdG8gcmVhc29uIGFib3V0LCBsaWtlIGV4ZWN1dGluZyBhIGJh
cnJpZXIgb24gYSByZWxhdGVkIGV4ZWN1dGFibGUKKyAgICAgICAgKGV2ZW4gdGhvdWdoIHRoZSBl
eGVjdXRhYmxlIG1pZ2h0IHN0b3AgcG9pbnRpbmcgdG8gdGhlIENvZGVCbG9jayBiZWZvcmUKKyAg
ICAgICAgdGhlIG5leHQgR0MpLCBvciBwcmV0ZW5kaW5nIHRoYXQgYW4gb2JqZWN0IGhhZCB3cml0
dGVuIHRvIGl0c2VsZi4gTm93LAorICAgICAgICB3aGVuIHdlIHdyaXRlIHRvIGEgQ29kZUJsb2Nr
LCB3ZSBiYXJyaWVyIHRoZSBDb2RlQmxvY2ssIGFuZCB0aGF0J3MgdGhhdC4KKworICAgICAgICAo
MikgU2ltcGxlciBtYXJraW5nIGFuZCBkZXN0cnVjdGlvbiBsb2dpYy4gVGhlcmUncyBubyBuZWVk
IHRvIGhhdmUgYQorICAgICAgICBjdXN0b20gcmVtZW1iZXJlZCBzZXQgb3IgYSBkZXN0cnVjdGlv
biBmaXhwb2ludCBpZiB3ZSBqdXN0IG9iZXkgbm9ybWFsCisgICAgICAgIEdDIHJ1bGVzLgorCisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
b2RlQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3kpOgorICAg
ICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6ZGVzdHJveSk6IEFkZCBDbGFzc0luZm8gYW5kIGRlc3Ryb3kgZnVu
Y3Rpb25zCisgICAgICAgIGJlY2F1c2Ugb3VyIEdDIG9iamVjdCBtb2RlbCByZXF1aXJlcyB0aGVt
LgorCisgICAgICAgIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc2V0IHRoZSBuZWVkc0Rlc3RydWN0aW9u
IGZsYWcuIFNpbmNlIENvZGVCbG9jayBuZWVkcworICAgICAgICBlYWdlciBkZXN0cnVjdGlvbiwg
aXQgcnVucyBpdHMgZGVzdHJ1Y3RvcnMgdGhyb3VnaCBDb2RlQmxvY2tTZXQsCisgICAgICAgIGFu
ZCBub3QgdGhyb3VnaCBub3JtYWwgb2JqZWN0IHN3ZWVwaW5nLgorCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOiBGYWN0b3Igb3V0IGZpbmlzaENyZWF0aW9uIGZyb20g
dGhlCisgICAgICAgIGNvbnN0cnVjdG9yIGJlY2F1c2Ugb3VyIEdDIG9iamVjdCBtb2RlbCByZXF1
aXJlcyBpdC4gQ2hhbmdlIHdyaXRlCisgICAgICAgIGJhcnJpZXJzIHRvIG5vdGUgdGhlIENvZGVC
bG9jayBhcyB0aGUgb3duZXIuCisKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2Nr
KTogUmVmYWN0b3IgdG8gdXNlIHRoZSBzaGFyZWQKKyAgICAgICAgdW5saW5rSW5jb21pbmdDYWxs
cygpIGZ1bmN0aW9uIGluc3RlYWQgb2Ygcm9sbGluZyBhIGNvcHkgYnkgaGFuZC4KKworICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KTogTmV3IGhlbHBlciBmdW5jdGlvbiBmb3Ig
b3duZXIgZXhlY3V0YWJsZXMKKyAgICAgICAgdG8gZG8gd2VhayBtYXJraW5nIHRoYXQgbWlnaHQg
amV0dGlzb24gYSBDb2RlQmxvY2suIE91ciBuZXcgR0MgbG9naWMKKyAgICAgICAgc2F5cyB0aGF0
IGEgQ29kZUJsb2NrIHBvaW50ZXIgaXMgYSBzdHJvbmcgcmVmZXJlbmNlIGJ5IGRlZmF1bHQsIGFu
ZAorICAgICAgICBjbGllbnRzIG5lZWQgdG8gb3B0IGluIGlmIHRoZXkgd2FudCB0byBhbGxvdyBh
IENvZGVCbG9jayB0byBqZXR0aXNvbi4KKyAgICAgICAgVGhpcyBpcyBlYXNpZXIgdG8gZ2V0IHJp
Z2h0IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBvbmx5IHRob3NlCisgICAgICAgIHNwZWNpZmljIG93
bmVycyB0aGF0IHdhbnQgamV0dGlzb24gYmVoYXZpb3IgbmVlZCB0byB3b3JyeSBhYm91dCBpdCwK
KyAgICAgICAgd2hpbGUgYWxsIG90aGVyIHBvaW50ZXJzIGFyZSB2YWxpZCBieSBkZWZhdWx0Lgor
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6IFRoZSBkZWZhdWx0IHZp
c2l0IGZ1bmN0aW9uIGtlZXBzCisgICAgICAgIGV2ZXJ5dGhpbmcgYWxpdmUuCisKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6IE5vIG5lZWQgdG8ga2VlcCBzcGVjaWFs
IHN0YXRlCisgICAgICAgIGFueW1vcmUuIElmIHdlJ3JlIG1hcmtlZCwgd2UncmUgbGl2ZSAtLSBq
dXN0IGxpa2UgYW55IG90aGVyIG9iamVjdC4KKworICAgICAgICAoSlNDOjp0aW1lVG9MaXZlKTog
TW92ZSB0aGlzIGNvZGUgaW50byBDb2RlQmxvY2suY3BwIHNvIHlvdSBjYW4gbWVzcworICAgICAg
ICB3aXRoIGl0IHdpdGhvdXQgcmVjb21waWxpbmcsIGFuZCBhbHNvIGJlY2F1c2UgaXQncyByZWFs
bHkgYSBDb2RlQmxvY2sKKyAgICAgICAgcG9saWN5LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkpOiBVc2UKKyAgICAgICAgaW50ZXJuYWwgb2JqZWN0cyBmb3IgdmlydHVhbCBjYWxs
YmFja3MgYmVjYXVzZSBHQyBvYmplY3RzIGNhbid0IGhhdmUKKyAgICAgICAgdnRhYmxlcy4KKwor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOiBSZW1vdmUgYSBm
YXN0IHBhdGggY2hlY2sgdGhhdCBkb2VzCisgICAgICAgIG5vdCBleGlzdCBpbiB0aGUgY29weSBv
ZiB0aGlzIGNvZGUgaW4gfkNvZGVCbG9jayBiZWNhdXNlIGl0IGlzIG5vdAorICAgICAgICBhY3R1
YWxseSBhbiBvcHRpbWl6YXRpb24uCisKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNl
bWVudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlMZXZlbCk6
IE1ha2UgdGhlc2UgZnVuY3Rpb25zIGdlbmVyaWMKKyAgICAgICAgaW5zdGVhZCBvZiB2aXJ0dWFs
IGJlY2F1c2UgR0Mgb2JqZWN0cyBjYW4ndCBoYXZlIHZ0YWJsZXMuCisKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2aXNpdFN0cm9uZ2x5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrUmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpyZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJu
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0
eUxldmVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVC
bG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOiBEZWxldGVkLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rZWRD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRl
cnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzcGVjaWFsaXphdGlvbktpbmQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0
aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Omhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxTdGF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFwcGVuZEV4Y2Vw
dGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNlQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OlByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OlBy
b2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6dmFyaWFibGUpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpudW1WYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFsQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6dW5saW5rZWRFdmFsQ29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJs
b2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dW5j
aGVja2VkUik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUhhc0Jl
ZW5DYWxsZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6Om1hcmspOgorICAgICAgICAo
SlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y2xlYXJNYXJrcyk6IERlbGV0ZWQuIExvdHMgb2YgbWVjaGFuaWNhbCBjaGFuZ2VzIHRv
CisgICAgICAgIG1hdGNoIHRoZSBsb2dpYyBjaGFuZ2VzIGFib3ZlLgorCisgICAgICAgICogYnl0
ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oOiBQcm92aWRlIGEgcHJvZmlsZWRERkdDb2RlQmxvY2sKKyAg
ICAgICAgdG8gYWxsIGNvbXBpbGF0aW9uIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0
aGUgY2FsbGJhY2sgdG8KKyAgICAgICAgc3RvcmUgdGhlIHByb2ZpbGVkREZHQ29kZUJsb2NrLiBU
aGlzIGlzIGhvdyB0aGUgcmVzdCBvZiBjb21waWxhdGlvbgorICAgICAgICBhcm91bmQgdGhlIGNh
bGxiYWNrIHdvcmtzIGFueXdheSwgYW5kIGl0IGlzIGVhc2llciB0byBkbyB0aGluZ3MgdGhpcwor
ICAgICAgICB3YXkgdGhhbiB0byB0aGluayBhYm91dCBob3cgYSBub24tR0MgbWFsbG9jJ2Qgb2Jq
ZWN0IHNob3VsZCBrZWVwIGl0cworICAgICAgICBDb2RlQmxvY2sgYWxpdmUuCisKKyAgICAgICAg
KiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6
OnRyeUdldCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OmdldFNsb3cpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5l
cmF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSk6IENoYW5nZSB0aGUgb3du
ZXIgZm9yIHdyaXRlCisgICAgICAgIGJhcnJpZXIgcHVycG9zZXMgdG8gQ29kZUJsb2NrLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQp
OgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKToKKyAgICAgICAgKiBk
ZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6IERp
dHRvLgorCisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlOjpvc3JFbnRyeUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpzZXRP
U1JFbnRyeUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpjbGVhck9TUkVudHJ5
QmxvY2spOiBVc2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgCisgICAgICAgIGFjY2Vzc2luZyBvc3JF
bnRyeUJsb2NrIHRvIGhlbHAgd2l0aCB3cml0ZSBiYXJyaWVyIHN0dWZmLgorCisgICAgICAgICog
ZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVy
OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9u
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOiBVc2UgQ29kZUJsb2NrIGFzIG93bmVy
IGluc3RlYWQgb2YKKyAgICAgICAgZXhlY3V0YWJsZS4KKworICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVhbGx5QWRkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQbGFuOjpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmtleSk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYXJDb2RlQmxvY2tNYXJrcyk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR1BsYW4uaDogVXNlIG5vcm1hbCBHQyB3cml0ZSBiYXJyaWVy
IGNvbmNlcHRzIHRvIG1vZGVsIHRoZSBmYWN0CisgICAgICAgIHRoYXQgdGhlIGNvbXBpbGVyIHdy
aXRlcyB0byBDb2RlQmxvY2tzLgorCisgICAgICAgICogZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5
QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZH
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBkZmcvREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6
OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6flRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlJlZjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPlRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6
REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOiBXZSBhbHdheXMgaGF2ZQorICAgICAgICBhIHByb2Zp
bGVkREZHQ29kZUJsb2NrIHBhc3NlZCB0byB1c2UgLS0gc2VlIGFib3ZlLgorCisgICAgICAgICog
ZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGxl
dGVBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtZW1iZXJD
b2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpERkc6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6V29ya2xpc3Q6OmNsZWFyQ29kZUJsb2NrTWFya3MpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OmNsZWFyQ29kZUJsb2NrTWFya3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdX
b3JrbGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwpOiBS
ZW5hbWVkIHRvIHVzZSByZW1lbWJlcmVkIHNldCB0ZXJtaW5vbG9neS4KKworICAgICAgICAqIGZ0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbik6CisKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6YWRkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1h
cmtzRm9yRnVsbENvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OmRlbGV0
ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKTogTm8gbmVlZCBmb3IgYSBmaXhwb2ludAorICAgICAg
ICBhbnltb3JlIHNpbmNlIHRoZSBHQyBjYW4gdGVsbCB1cyBpZiB3ZSBhcmUgbGl2ZS4KKworICAg
ICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
a1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVh
ck1hcmtzRm9yRWRlbkNvbGxlY3Rpb24pOiBEZWxldGVkLiBObyBuZWVkIGZvcgorICAgICAgICB0
aGlzIGxvZ2ljIGFueW1vcmUgc2luY2UgdGhlIEdDIHdpbGwgY2xlYXIgb3VyIG1hcmsgYml0Lgor
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOiBEZWxldGVkLiBObyBu
ZWVkIGZvciB0aGlzIG1hcmtpbmcKKyAgICAgICAgZml4cG9pbnQgYW55bW9yZSBlaXRoZXIuCisK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorCisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKTogTW92ZWQgc29tZSBvZiB0aGlzIGxv
Z2ljIGFyb3VuZCB0byBtYWtlIHRoZQorICAgICAgICBhbGdvcml0aG0gY2xlYXJlci4gCisKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2Nrcyk6IERlbGV0aW5nIENvZGVCbG9j
a3MgY2FuIG9ubHkgY2xlYXIKKyAgICAgICAgcG9pbnRlcnMgaW1tZWRpYXRlbHk7IHRoZXkgd29u
J3QgZnVsbHkgZGVsZXRlIHVudGlsIHRoZSBuZXh0IEdDIGFuZCBzd2VlcC4KKworICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAg
ICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oOiBDb2RlQmxvY2sgaXMgb3duZXIgbm93
LgorCisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6aXNK
SVQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjppc0xvd2VyVGllcik6CisgICAgICAgIChKU0M6
OkpJVENvZGU6OnRpbWVUb0xpdmUpOiBEZWxldGVkLgorCisgICAgICAgICogaml0L0pJVE9wY29k
ZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOiBDb2RlQmxvY2sgaXMg
b3duZXIgbm93LgorCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChK
U0M6OkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25E
aWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6SklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAg
ICAqIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOgorCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlSZXBhdGNoSW4p
OgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGlj
Q2FsbCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OlNMT1dfUEFUSF9ERUNMKTogCisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0
aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVH
bG9iYWwpOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlR2V0RnJvbVNj
b3BlR2xvYmFsKTogQ29kZUJsb2NrIGlzIG93bmVyIG5vdy4KKworICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUp
OiBQcm92aWRlIGEgZ2VuZXJpYyBjbGVhckNvZGUoKSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBi
ZSB1c2VkIG9uIGFueSBFeGVjdXRhYmxlLiBUaGlzIGZpeGVzIGEgdmVyeSBzdWJ0bGUgYnVnIHdo
ZXJlCisgICAgICAgIGRlbGV0ZUFsbENvZGUoKSBkb2VzIG5vdCByZW1vdmUgQ29kZUJsb2NrcyBm
cm9tIG5vbi1mdW5jdGlvbiBleGVjdXRhYmxlcworICAgICAgICB0aGF0IGhhdmUgYmVlbiBzYXZl
ZCBpbiBzdGFjayB0cmFjZXMuCisKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5z
dGFsbENvZGUpOiBXcml0ZUJhcnJpZXIgcmVxdWlyZXMgc3BlY2lhbAorICAgICAgICBoYW5kbGlu
ZyBmb3IgcG9pbnRlcnMgdGhhdCBtYXkgYmUgbnVsbC4KKworICAgICAgICAoSlNDOjpTY3JpcHRF
eGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKTogVXBkYXRlIGZvciBpbnRlcmZhY2UK
KyAgICAgICAgY2hhbmdlcy4KKworICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBWaXNpdCB3
ZWFrbHkgYmVjYXVzZSB3ZSB3YW50CisgICAgICAgIHRvIHBhcnRpY2lwYXRlIGluIGpldHRpc29u
aW5nLgorCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4
ZWN1dGlvbik6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUpOiBE
ZWxldGVkLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24pOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6IFByb3ZpZGUgc3RydWN0dXJlcyBiZWNhdXNlIG91ciBHQyByZXF1aXJlcyBpdC4KKwog
MjAxNS0xMC0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHVubmVjZXNzYXJ5IFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE5MDQzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw2ICs4Miw3MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xh
c3NJbmZvIENvZGVCbG9jazo6c19pbmZvID0geworICAgICJDb2RlQmxvY2siLCAwLCAwLAorICAg
IENSRUFURV9NRVRIT0RfVEFCTEUoQ29kZUJsb2NrKQorfTsKKworY29uc3QgQ2xhc3NJbmZvIEZ1
bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIkZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJh
c2U6OnNfaW5mbywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uQ29kZUJsb2Nr
KQorfTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseUNvZGVCbG9jazo6c19pbmZvID0geworICAgICJXZWJBc3NlbWJseUNvZGVCbG9jayIsICZC
YXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUNvZGVC
bG9jaykKK307CisjZW5kaWYKKworY29uc3QgQ2xhc3NJbmZvIEdsb2JhbENvZGVCbG9jazo6c19p
bmZvID0geworICAgICJHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoR2xvYmFsQ29kZUJsb2NrKQorfTsKKworY29uc3QgQ2xhc3NJbmZv
IFByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiUHJvZ3JhbUNvZGVCbG9jayIsICZC
YXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9ncmFtQ29kZUJsb2Nr
KQorfTsKKworY29uc3QgQ2xhc3NJbmZvIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9
IHsKKyAgICAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCisgICAg
Q1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKQorfTsKKworY29uc3Qg
Q2xhc3NJbmZvIEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiRXZhbENvZGVCbG9jayIs
ICZCYXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsQ29kZUJsb2Nr
KQorfTsKKwordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5GdW5jdGlvbkNvZGVCbG9j
aygpOworfQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQordm9pZCBXZWJBc3NlbWJseUNvZGVC
bG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFdlYkFzc2VtYmx5Q29k
ZUJsb2NrKj4oY2VsbCktPn5XZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorI2VuZGlmCisKK3Zv
aWQgUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0
PFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+flByb2dyYW1Db2RlQmxvY2soKTsKK30KKwordm9p
ZCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+TW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaygpOworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQor
eworICAgIGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5FdmFsQ29kZUJsb2NrKCk7Cit9
CisKIENTdHJpbmcgQ29kZUJsb2NrOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewogICAgIHN3aXRj
aCAoY29kZVR5cGUoKSkgewpAQCAtMTUzLDcgKzIxNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
QXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBvdXQucHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwg
aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpKTsKICAgICBvdXQucHJpbnQoIjpbIiwgUmF3UG9pbnRl
cih0aGlzKSwgIi0+Iik7CiAgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKLSAgICAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIobV9hbHRlcm5hdGl2ZS5nZXQoKSksICItPiIpOworICAgICAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcihhbHRlcm5hdGl2ZSgpKSwgIi0+Iik7CiAgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIob3duZXJFeGVjdXRhYmxlKCkpLCAiLCAiLCBqaXRUeXBlLCBjb2RlVHlwZSgpKTsK
IAogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKQEAgLTE1ODUsOCArMTY0OSw5
IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1Db2RlQmxvY2s6OkNv
ZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCi0gICAgOiBtX2ds
b2JhbE9iamVjdChvdGhlci5tX2dsb2JhbE9iamVjdCkKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2Nr
JiBvdGhlcikKKyAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFwKG90aGVyLm1faGVhcCkKICAg
ICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKG90aGVyLm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAg
ICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKQEAgLTE1OTQsMTEgKzE2NTksMTEgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQodHJ1ZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV91bmxpbmtlZENv
ZGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX3Vu
bGlua2VkQ29kZS5nZXQoKSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlz
LCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1l
bnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAg
ICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5t
X3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCkpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgdGhpcywgb3Ro
ZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAg
LCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAgICAsIG1fdGhpc1JlZ2lz
dGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQpAQCAtMTYyMywxMyArMTY4OCwxOCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgLCBtX2NhcGFiaWxpdHlMZXZl
bFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCiB7Ci0gICAgbV92aXNp
dFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7Ci0gICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
LnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAogICAgIEFTU0VSVCht
X2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2Fs
KCkpOwogCiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworfQor
Cit2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIENvZGVCbG9jayYgb3RoZXIpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
CiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIGppdEFmdGVyV2FybVVwKCk7CiAKQEAg
LTE2NDMsMTEgKzE3MTMsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2Nr
VGFnLAogICAgIH0KICAgICAKICAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7Ci0g
ICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSk7
CiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNv
dXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIDogbV9nbG9i
YWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9iamVjdCgpLT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHNj
b3BlLT5nbG9iYWxPYmplY3QoKSkKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zm
c2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgOiBKU0NlbGwoKnZtLCBz
dHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVjdChzY29wZS0+Z2xvYmFsT2JqZWN0KCktPnZt
KCksIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmplY3QoKSkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxP
YmplY3QtPnZtKCkuaGVhcCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENv
ZGVCbG9jay0+bV9udW1WYXJzKQpAQCAtMTY1NSwxMSArMTcyNiwxMSBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCh0cnVlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hh
c0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKKyAgICAs
IG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB1bmxpbmtlZENvZGVC
bG9jaykKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBw
aW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkK
LSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1
dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFs
T2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBtX3ZtKHVubGlua2Vk
Q29kZUJsb2NrLT52bSgpKQogICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2st
PnRoaXNSZWdpc3RlcigpKQogICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpCkBAIC0xNjc4LDI2ICsxNzQ5LDMxIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUo
REZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYKIHsKLSAgICBtX3Zpc2l0U3Ryb25n
bHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsK
LSAgICBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZCk7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUo
ZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogCiAgICAgQVNTRVJUKG1faGVhcC0+
aXNEZWZlcnJlZCgpKTsKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAK
ICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Cit9CiAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVy
KCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpKQotICAgICAgICB2bSgpLT5mdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJs
ZS0+c291cmNlSUQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
KSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwordm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgSlNTY29w
ZSogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgaWYgKHZt
LnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgdm0u
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShvd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0
T2Zmc2V0KCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKIAog
ICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVycygpLCB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKCkpOwogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQot
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJs
ZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Vu
bGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgp
XS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGkrKykgewogICAgICAgICBM
aW5rVGltZUNvbnN0YW50IHR5cGUgPSBzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50PihpKTsK
ICAgICAgICAgaWYgKHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSB1bmxpbmtlZENvZGVCbG9jay0+
cmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpCi0gICAgICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxl
LCBtX2dsb2JhbE9iamVjdC0+anNDZWxsRm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSk7CisgICAg
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhp
cywgbV9nbG9iYWxPYmplY3QtPmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpOwogICAg
IH0KIAogICAgIEhhc2hTZXQ8aW50LCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBjbG9uZWRDb25zdGFudFN5bWJvbFRhYmxlczsKQEAg
LTE3MTIsNyArMTc4OCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG8KICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJl
Rm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBz
eW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKKyAgICAgICAgICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgc3ltYm9sVGFibGUtPmNsb25lU2Nv
cGVQYXJ0KCptX3ZtKSk7CiAgICAgICAgICAgICAgICAgY2xvbmVkQ29uc3RhbnRTeW1ib2xUYWJs
ZXMuYWRkKGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE3MzIsMTcgKzE4MDgsMTcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogbwogICAgIG1fZnVuY3Rpb25EZWNscy5yZXNpemVUb0ZpdCh1bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwogICAgIGZvciAoc2l6ZV90IGNv
dW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVu
bGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7Ci0g
ICAgICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2Zp
bGVyKCkpCi0gICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5z
ZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRF
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxl
LT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0u
c2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92
bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBpZiAodm0udHlwZVByb2Zp
bGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICAgICAgdm0uZnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFi
bGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zm
c2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKKyAg
ICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRFeGVjdXRh
YmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CiAgICAgfQogCiAg
ICAgbV9mdW5jdGlvbkV4cHJzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZkZ1bmN0aW9uRXhwcnMoKSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewog
ICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0g
dW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKLSAgICAgICAgaWYgKHZtKCktPnR5
cGVQcm9maWxlcigpIHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKLSAgICAgICAgICAg
IHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uo
b3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRP
ZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUt
PnNvdXJjZSgpKSk7CisgICAgICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpCisgICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUo
KS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5s
aW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93
bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKICAgICBpZiAodW5saW5rZWRDb2Rl
QmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKQEAgLTE4MjEsNyArMTg5Nyw3IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICB1bnNpZ25lZCBvcExlbmd0
aCA9IG9wY29kZUxlbmd0aChwY1swXS51Lm9wY29kZSk7CiAKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
W2ldID0gdm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShwY1swXS51Lm9wY29kZSk7CisgICAg
ICAgIGluc3RydWN0aW9uc1tpXSA9IHZtLmludGVycHJldGVyLT5nZXRPcGNvZGUocGNbMF0udS5v
cGNvZGUpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsgaiA8IG9wTGVuZ3RoOyArK2opIHsK
ICAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0gc2l6ZW9mKGludHB0cl90KSkKICAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUucG9pbnRlciA9IDA7CkBAIC0xODgw
LDcgKzE5NTYsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAg
ICAgICAgICAgICBpbnQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA9IHBjW29wTGVuZ3RoIC0gMl0u
dS5vcGVyYW5kOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0g
PSBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgICAgIG9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLT5pbml0aWFsaXplKCp2bSgpLAorICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUtPmluaXRpYWxpemUodm0sCiAgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLCBt
X2dsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE5MjksMTEgKzIwMDUsMTEgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAg
ICAgICAvLyBLZWVwIHRoZSBsaW5rZWQgbW9kdWxlIGVudmlyb25tZW50IHN0cm9uZ2x5IHJlZmVy
ZW5jZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVF
bnZpcm9ubWVudHMuYWRkKGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4ob3AubGV4aWNhbEVu
dmlyb25tZW50KSkuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0
YW50KG9wLmxleGljYWxFbnZpcm9ubWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxleGlj
YWxFbnZpcm9ubWVudCk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0u
dS5qc0NlbGwuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUu
c3ltYm9sVGFibGUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxleGljYWxFbnZpcm9u
bWVudC0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNl0udS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVudC0+
c3ltYm9sVGFibGUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG9wLnR5cGUsIHRoaXMp
KQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KCp2bSgp
LCBvd25lckV4ZWN1dGFibGUsIGNvbnN0YW50U2NvcGUpOworICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NjYsNyArMjA0Miw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGlm
IChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0Owog
ICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9w
LnN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVj
dHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwMDMsMTQgKzIwNzksMTQgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAg
IGlmIChvcC53YXRjaHBvaW50U2V0KQogICAgICAgICAgICAgICAgICAgICBvcC53YXRjaHBvaW50
U2V0LT5pbnZhbGlkYXRlKFB1dFRvU2NvcGVGaXJlRGV0YWlsKHRoaXMsIGlkZW50KSk7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5z
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsK
IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Byb2Zp
bGVfdHlwZTogewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+dHlwZVByb2ZpbGVy
KCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwogICAg
ICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBvcF9wcm9maWxl
X3R5cGUgcmVnVG9Qcm9maWxlLCBUeXBlTG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVz
b2x2ZVR5cGU/CiAgICAgICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BM
ZW5ndGggLSAxOwogICAgICAgICAgICAgdW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7CkBA
IC0yMDQwLDggKzIxMTYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNj
b3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90
IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCiAgICAgICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwotICAgICAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBpbXBsLCAqdm0oKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVT
ZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwg
KnZtKCkpOworICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFi
bGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7CisgICAgICAgICAgICAg
ICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlh
YmxlKGxvY2tlciwgaW1wbCwgdm0pOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0
czsKIApAQCAtMjA1NCw4ICsyMTMwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRl
bnRpZmllcihwY1s0XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElm
IG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxl
ZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KLSAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBpZGVudC5pbXBsKCksICp2bSgpKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxU
eXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlk
ZW50LmltcGwoKSwgKnZtKCkpOworICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBz
eW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgdm0p
OworICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlw
ZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2bSk7CiAKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTIwODEsOCArMjE1Nyw4IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0
aW9uUGFpciA9IHZtKCktPnR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRU
eXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwKLSAgICAgICAgICAgICAgICBvd25lckV4ZWN1
dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2
bSgpKTsKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlv
blBhaXIgPSB2bS50eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxv
Y2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsCisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxl
LT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgJnZtKTsK
ICAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7
CiAgICAgICAgICAgICBib29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwog
CkBAIC0yMDkwLDcgKzIxNjYsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNl
dElmUmV0dXJuU3RhdGVtZW50ID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRP
ZmZzZXQoKTsKIAogICAgICAgICAgICAgaWYgKHNob3VsZEFuYWx5emUgJiYgaXNOZXdMb2NhdGlv
bikKLSAgICAgICAgICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRp
b24obG9jYXRpb24pOworICAgICAgICAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpLT5pbnNlcnRO
ZXdMb2NhdGlvbihsb2NhdGlvbik7CiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMl0u
dS5sb2NhdGlvbiA9IGxvY2F0aW9uOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTA4LDcgKzIx
ODQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAg
IGkgKz0gb3BMZW5ndGg7CiAgICAgfQogCi0gICAgaWYgKHZtKCktPmNvbnRyb2xGbG93UHJvZmls
ZXIoKSkKKyAgICBpZiAodm0uY29udHJvbEZsb3dQcm9maWxlcigpKQogICAgICAgICBpbnNlcnRC
YXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoaW5zdHJ1Y3Rpb25zKTsK
IAogICAgIG1faW5zdHJ1Y3Rpb25zID0gV1RGOjpSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+
KGluc3RydWN0aW9ucyk7CkBAIC0yMTI4LDEyICsyMjA0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgZHVtcEJ5dGVjb2RlKCk7CiAgICAgCiAg
ICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRkKHRoaXMpOwotICAgIG1faGVhcC0+cmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXpl
KCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwog
fQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotQ29kZUJsb2NrOjpDb2RlQmxvY2soV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwg
b3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogSlND
ZWxsKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZt
KCksIHRoaXMsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVZhcnMo
MCkKQEAgLTIxNDQsNyArMjIyMSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFdlYkFzc2VtYmx5
RXhlY3V0YWIKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0
ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMo
MCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4
ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xv
YmFsT2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBtX3ZtKCZ2bSkK
ICAgICAsIG1faXNTdHJpY3RNb2RlKGZhbHNlKQogICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFs
c2UpCkBAIC0yMTU4LDkgKzIyMzUsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soV2ViQXNzZW1i
bHlFeGVjdXRhYgogI2VuZGlmCiB7CiAgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsK
K30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKIAogICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKLSAgICBtX2hlYXAt
PnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spKTsKIH0KICNlbmRp
ZgogCkBAIC0yMTcyLDI5ICsyMjUzLDMwIEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjaWYg
RU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwog
I2VuZGlmCi0gICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNv
bWluZ0xMSW50Q2FsbHMuZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJlZ2lu
KCktPnJlbW92ZSgpOwotI2lmIEVOQUJMRShKSVQpCisKICAgICAvLyBXZSBtYXkgYmUgZGVzdHJv
eWVkIGJlZm9yZSBhbnkgQ29kZUJsb2NrcyB0aGF0IHJlZmVyIHRvIHVzIGFyZSBkZXN0cm95ZWQu
CiAgICAgLy8gQ29uc2lkZXIgdGhhdCB0d28gQ29kZUJsb2NrcyBiZWNvbWUgdW5yZWFjaGFibGUg
YXQgdGhlIHNhbWUgdGltZS4gVGhlcmUKICAgICAvLyBpcyBubyBndWFyYW50ZWUgYWJvdXQgdGhl
IG9yZGVyIGluIHdoaWNoIHRoZSBDb2RlQmxvY2tzIGFyZSBkZXN0cm95ZWQuCiAgICAgLy8gU28s
IGlmIHdlIGRvbid0IHJlbW92ZSBpbmNvbWluZyBjYWxscywgYW5kIGdldCBkZXN0cm95ZWQgYmVm
b3JlIHRoZQogICAgIC8vIENvZGVCbG9jayhzKSB0aGF0IGhhdmUgY2FsbHMgaW50byB1cywgdGhl
biB0aGUgQ2FsbExpbmtJbmZvIHZlY3RvcidzCiAgICAgLy8gZGVzdHJ1Y3RvciB3aWxsIHRyeSB0
byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxpZCkgbGlua2VkIGxpc3QuCi0g
ICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQo
KSkKLSAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnJlbW92ZSgpOwotICAgIHdoaWxl
IChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9y
cGhpY0NhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdp
bigpLT5yZW1vdmUoKTsKKyAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAgICAgCiAgICAgLy8g
Tm90ZSB0aGF0IG91ciBvdXRnb2luZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBD
b2RlQmxvY2tzJwogICAgIC8vIG1faW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0
aGUgZXhlY3V0aW9uIG9mIHRoZSB+Q2FsbExpbmtJbmZvCiAgICAgLy8gZGVzdHJ1Y3RvcnMuCiAK
KyNpZiBFTkFCTEUoSklUKQogICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0
b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQogICAgICAgICAo
Kml0ZXIpLT5kZXJlZigpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK3ZvaWQgQ29kZUJs
b2NrOjpzZXRBbHRlcm5hdGl2ZShWTSYgdm0sIENvZGVCbG9jayogYWx0ZXJuYXRpdmUpCit7Cisg
ICAgbV9hbHRlcm5hdGl2ZS5zZXQodm0sIHRoaXMsIGFsdGVybmF0aXZlKTsKK30KKwogdm9pZCBD
b2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKQogewogICAgIG1fbnVtUGFy
YW1ldGVycyA9IG5ld1ZhbHVlOwpAQCAtMjIxNSw3MyArMjI5Nyw0MyBAQCBDb2RlQmxvY2sqIENv
ZGVCbG9jazo6c3BlY2lhbE9TUkVudHJ5QmxvCiAgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2Rl
OjpERkdKSVQpCiAgICAgICAgIHJldHVybiAwOwogICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9
IG1faml0Q29kZS0+ZGZnKCk7Ci0gICAgcmV0dXJuIGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0
KCk7CisgICAgcmV0dXJuIGppdENvZGUtPm9zckVudHJ5QmxvY2soKTsKICNlbHNlIC8vIEVOQUJM
RShGVExfSklUKQogICAgIHJldHVybiAwOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfQog
Ci12b2lkIENvZGVCbG9jazo6dmlzaXRTdHJvbmdseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBi
b29sIHNldEJ5TWUgPSBtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkLmNvbXBhcmVFeGNoYW5n
ZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7CisgICAgYm9vbCBzZXRCeU1lID0gbV92aXNpdFdlYWtseUhh
c0JlZW5DYWxsZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICBpZiAo
IXNldEJ5TWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwotCi0gICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7Ci0gICAgc3Ry
b25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwotICAgIHByb3BhZ2F0ZVRyYW5zaXRp
b25zKHZpc2l0b3IpOwotfQotCi12b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYg
bW9yZSB0aGFuIG9uY2UsIGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgotICAg
IC8vIFRvIHRoaXMgZW5kLCB1c2UgYW4gYXRvbWljIG9wZXJhdGlvbiB0byBjaGVjayAoYW5kIHNl
dCkgaWYgSSd2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LgotICAgIC8vIE9ubHkgb25lIHRocmVhZCBt
YXkgcHJvY2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIGF0b21p
YyBzZXQgcmFjZS4KLSAgICBib29sIHNldEJ5TWUgPSBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUpOwotICAgIGlmICghc2V0QnlN
ZSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBpZiAoISFtX2FsdGVybmF0aXZlKQotICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICAKLSAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2NrID0g
c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKLSAgICAgICAgb3RoZXJCbG9jay0+dmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZChvd25lckV4ZWN1dGFibGUoKSwgc2l6ZW9mKENvZGVCbG9jaykpOwotICAgIGlmIChtX2ppdENv
ZGUpCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG93bmVyRXhlY3V0
YWJsZSgpLCBtX2ppdENvZGUtPnNpemUoKSk7Ci0gICAgaWYgKG1faW5zdHJ1Y3Rpb25zLnNpemUo
KSkgewotICAgICAgICAvLyBEaXZpZGUgYnkgcmVmQ291bnQoKSBiZWNhdXNlIG1faW5zdHJ1Y3Rp
b25zIHBvaW50cyB0byBzb21ldGhpbmcgdGhhdCBpcyBzaGFyZWQKLSAgICAgICAgLy8gYnkgbXVs
dGlwbGUgQ29kZUJsb2NrcywgYW5kIHdlIG9ubHkgd2FudCB0byBjb3VudCBpdCB0b3dhcmRzIHRo
ZSBoZWFwIHNpemUgb25jZS4KLSAgICAgICAgLy8gSGF2aW5nIGVhY2ggQ29kZUJsb2NrIHJlcG9y
dCBvbmx5IGl0cyBwcm9wb3J0aW9uYWwgc2hhcmUgb2YgdGhlIHNpemUgaXMgb25lIHdheQotICAg
ICAgICAvLyBvZiBhY2NvbXBsaXNoaW5nIHRoaXMuCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKG93bmVyRXhlY3V0YWJsZSgpLCBtX2luc3RydWN0aW9ucy5zaXplKCkg
KiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVmQ291bnQoKSk7CisgICAg
aWYgKHNob3VsZFZpc2l0U3Ryb25nbHkoKSkgeworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKLQogICAgIC8vIFRoZXJlIGFyZSB0
d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnM6IGlubGluZSBj
YWNoZSBjbGVhcmluZwogICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9m
IHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwogICAgIC8vIGlz
IHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQg
YW5kIHdoZW4gaXQgcnVucywgaXQKICAgICAvLyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBh
bnkgd29yayB0byBkby4KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhp
cyk7Ci0gICAgCi0gICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkoKSkgewotICAgICAgICB2aXNpdFN0cm9u
Z2x5KHZpc2l0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAorICAgIHZpc2l0b3Iu
YWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKwog
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIC8vIElmIHdlIGpldHRpc29uIG91cnNlbHZlcyB3ZSdsbCBpbnN0YWxsIG91
ciBhbHRlcm5hdGl2ZSwgc28gbWFrZSBzdXJlIHRoYXQgaXQKKyAgICAvLyBzdXJ2aXZlcyBHQyBl
dmVuIGlmIHdlIGRvbid0LgorICAgIHZpc2l0b3IuYXBwZW5kKCZtX2FsdGVybmF0aXZlKTsKKyAg
ICAKICAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IHdlIHVzZSB3ZWFrIHJlZmVyZW5j
ZSBoYXJ2ZXN0ZXJzIGZvcjogREZHIGZpeHBvaW50IGZvcgogICAgIC8vIGpldHRpc29uaW5nLCBh
bmQgdHJ5aW5nIHRvIGZpbmQgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGxpdmUgYmFzZWQgb24g
c29tZQogICAgIC8vIGlubGluZSBjYWNoZS4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gcmVnaXN0ZXIg
dGhlbSByZWdhcmRsZXNzLgotICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcih0
aGlzKTsKKyAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJm1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlcik7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBXZSBnZXQgaGVy
ZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25lciBleGVjdXRhYmxlIGlz
IGxpdmUsCkBAIC0yMjkyLDE0ICsyMzQ0LDQ4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXQKICAgICAvLyBlaXRoZXIgdXMgbWFya2luZyBhZGRpdGlvbmFsIG9iamVj
dHMsIG9yIGJ5IG90aGVyIG9iamVjdHMgYmVpbmcgbWFya2VkIGZvcgogICAgIC8vIG90aGVyIHJl
YXNvbnMsIHRoYXQgdGhpcyBpdGVyYXRpb24gc2hvdWxkIHJ1biBhZ2FpbjsgaXQgd2lsbCBub3Rp
ZnkgdXMgb2YgdGhpcwogICAgIC8vIGRlY2lzaW9uIGJ5IGNhbGxpbmcgaGFydmVzdFdlYWtSZWZl
cmVuY2VzKCkuCi0gICAgCi0gICAgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkID0gZmFsc2U7Ci0gICAgCisKKyAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5N
YXJrZWQgPSBmYWxzZTsKICAgICBwcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKworICAg
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOwog
ICAgIGRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQogfQogCit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxD
b2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHRoaXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKK3ZvaWQg
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIC8v
IFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXpl
cnM6IGlubGluZSBjYWNoZSBjbGVhcmluZworICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHBy
b2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5n
cworICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8g
bWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywgaXQKKyAgICAvLyBmaWd1cmVzIG91dCB3aGV0
aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CisKKyAgICBpZiAoQ29kZUJsb2Nr
KiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKKyAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihvdGhlckJsb2NrKTsKKworICAg
IGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KHRoaXMsIG1faml0Q29kZS0+c2l6ZSgpKTsKKyAgICBpZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgp
KQorICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzLCBtX2luc3Ry
dWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVm
Q291bnQoKSk7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworCisgICAg
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgc3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOworCisgICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVu
TWFya2VkID0gZmFsc2U7CisgICAgcHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Cit9CisK
IGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkKIHsKICAgICBpZiAoT3B0aW9u
czo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQpAQCAtMjMyNywxNyArMjQxMyw3IEBAIGJvb2wg
Q29kZUJsb2NrOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQygKICAgICAvLyAgIGJlY2F1c2UgbGl2
ZW5lc3NIYXNCZWVuUHJvdmVkIHdvdWxkIGhhdmUgc3Vydml2ZWQgYXMgdHJ1ZS4KICAgICAvLyAt
IENvZGUgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVhZCB3ZWFrIHJlZmVyZW5jZXMuCiAK
LSAgICBpZiAobV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewotICAgICAg
ICBpZiAobV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6
c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKQpAQCAtMjM0NywxMiArMjQyMywzNCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSCiAgICAgcmV0dXJuICFp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogfQogCitzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcyB0aW1lVG9MaXZlKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK3sKKyAgICBzd2l0
Y2ggKGppdFR5cGUpIHsKKyAgICBjYXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1bms6CisgICAg
ICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzPigKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUpKTsKKyAgICBjYXNl
IEpJVENvZGU6OkJhc2VsaW5lSklUOgorICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlv
bmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAorICAgICAgICAvLyBJbnRlcnByZXRl
clRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCisgICAgICAgICAgICBzdGQ6
OmNocm9ubzo6c2Vjb25kcygxNSkpOworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgorICAgICAg
ICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcz4oCisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygyMCkpOworICAgIGNhc2Ug
SklUQ29kZTo6RlRMSklUOgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6
c2Vjb25kcyg2MCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzOjptYXgoKTsKKyAgICB9Cit9CisKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkKIHsKLSAgICBpZiAobV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNh
bGxlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpKQorICAgIGlmIChIZWFwOjppc01h
cmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHRpbWVTaW5jZUNy
ZWF0aW9uKCkgPCBKSVRDb2RlOjp0aW1lVG9MaXZlKGppdFR5cGUoKSkpCisgICAgaWYgKHRpbWVT
aW5jZUNyZWF0aW9uKCkgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjUwNSwxNCArMjYwMywxOCBAQCB2b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpCiAgICAgLy8gQWxsIHdlYWsgcmVmZXJl
bmNlcyBhcmUgbGl2ZS4gUmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKICAgICAv
LyBjb21lIGJhY2sgaGVyZSBhZ2FpbiwgYW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgog
ICAgIGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKLSAgICBzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHByb3BhZ2F0ZVRyYW5zaXRp
b25zKHZpc2l0b3IpOwotICAgIGRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOworICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0KKyAgICAgICAgYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAorICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikpOworCisgICAgY29kZUJsb2NrLT5wcm9w
YWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKyAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVu
ZXNzKHZpc2l0b3IpOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpCkBAIC0yNjMyLDI2ICsyNzM0LDI5IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJh
c2VsaW5lSklUSW5saW4KICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoKQordm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKIHsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJp
dHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKKyAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikp
OworCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9XZWFr
UmVmZXJlbmNlKCkpIHsKLSAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9X
ZWFrUmVmZXJlbmNlKTsKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vh
a1JlZmVyZW5jZSgpKSB7CisgICAgICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdl
KCkpIHsKLSAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpOwor
ICAgIGlmIChjb2RlQmxvY2stPnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkgeworICAgICAg
ICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0
ZWQoaml0VHlwZSgpKSkKLSAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAg
IGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQor
ICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVO
QUJMRShKSVQpCi0gICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5l
SklUSW5saW5lQ2FjaGVzKCk7CisgICAgaWYgKCEhY29kZUJsb2NrLT5qaXRDb2RlKCkpCisgICAg
ICAgIGNvZGVCbG9jay0+ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlm
CiB9CiAKQEAgLTI3NDYsMTQgKzI4NTEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhp
dFRhcmdldHMoU2xvdAogICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0IGl0IG1hdGNoZXMgdGhlIGRl
dGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAogICAgIC8vIHRoZSBPU1IgZXhpdCBh
Z2FpbnN0LgogCi0gICAgYWx0ZXJuYXRpdmUoKS0+dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmbV9hbHRlcm5hdGl2ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgaWYgKGRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3IgKGF1
dG8qIGlubGluZUNhbGxGcmFtZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsKICAg
ICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCkpOwot
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpLT52aXNpdFN0
cm9uZ2x5KHZpc2l0b3IpOworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJl
YWRPbmx5UG9pbnRlcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCkpOwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0yOTYyLDggKzMwNjcsNiBAQCB2b2lkIENvZGVCbG9j
azo6dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxz
LmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5jb21p
bmdMTEludENhbGxzLmJlZ2luKCktPnVubGluaygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYg
KG1faW5jb21pbmdDYWxscy5pc0VtcHR5KCkgJiYgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5i
ZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxz
LmJlZ2luKCktPnVubGluaygqdm0oKSk7CiAgICAgd2hpbGUgKG1faW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCkBAIC0y
OTc3LDY2ICszMDgwLDY2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNT
dGEKICAgICBtX2luY29taW5nTExJbnRDYWxscy5wdXNoKGluY29taW5nKTsKIH0KIAotUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQorQ29kZUJsb2NrKiBD
b2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKIHsKICAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVj
dXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgp
KTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1Db2RlQmxvY2sqIFByb2dyYW1Db2RlQmxvY2s6OnJl
cGxhY2VtZW50KCkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCiB7Ci0gICAg
cmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrKCk7Ci19CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFz
c0luZm8oKTsKIAotQ29kZUJsb2NrKiBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVu
dCgpCi17Ci0gICAgcmV0dXJuIGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7Ci19CisgICAgaWYgKGNsYXNzSW5mbyA9PSBGdW5j
dGlvbkNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yKG1faXNDb25zdHJ1Y3Rv
ciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiAKLUNvZGVCbG9jayogRXZhbENv
ZGVCbG9jazo6cmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBqc0Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotfQorICAgIGlmIChjbGFzc0lu
Zm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PEV2YWxF
eGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKIAotQ29kZUJsb2Nr
KiBGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3IobV9p
c0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKLX0KKyAgICBp
ZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJu
IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2Nr
KCk7CiAKLURGRzo6Q2FwYWJpbGl0eUxldmVsIFByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlM
ZXZlbEludGVybmFsKCkKLXsKLSAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVs
KHRoaXMpOwotfQorICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6
aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKIAotREZHOjpDYXBhYmlsaXR5TGV2ZWwg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQotewotICAg
IHJldHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci19CisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHIKKyNlbmRpZgogCi1ERkc6OkNhcGFiaWxp
dHlMZXZlbCBFdmFsQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCi17Ci0gICAg
cmV0dXJuIERGRzo6ZXZhbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1ERkc6OkNhcGFiaWxp
dHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQorREZH
OjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCkKIHsK
LSAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQotICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZv
ckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKLSAgICByZXR1cm4gREZHOjpmdW5jdGlv
bkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci19CisgICAgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8oKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gRnVu
Y3Rpb25Db2RlQmxvY2s6OmluZm8oKSkgeworICAgICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQor
ICAgICAgICAgICAgcmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2
ZWwodGhpcyk7CisgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ2FsbENhcGFiaWxpdHlM
ZXZlbCh0aGlzKTsKKyAgICB9CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6
OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6ZXZhbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsK
KworICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAg
ICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworCisgICAgaWYgKGNs
YXNzSW5mbyA9PSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVy
biBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7CiAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi1Db2RlQmxvY2sqIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCi17
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgaWYgKGNsYXNzSW5mbyA9PSBXZWJBc3NlbWJs
eUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOwor
I2VuZGlmCiAKLURGRzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYXBh
YmlsaXR5TGV2ZWxJbnRlcm5hbCgpCi17CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOwogfQotI2VuZGlmCi0jZW5kaWYKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kZSwgY29uc3Qg
RmlyZURldGFpbCogZGV0YWlsKQogewpAQCAtMzk4MCw3ICs0MDgzLDcgQEAgdW5zaWduZWQgQ29k
ZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudAogI2lmIEVOQUJMRShKSVQpCiBERkc6OkNhcGFi
aWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbCgpCiB7Ci0gICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgcmVzdWx0ID0gY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKTsKKyAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCByZXN1bHQgPSBjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCk7CiAgICAg
bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA9IHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAKICNpbmNsdWRlICJDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNp
bmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKLSNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUg
IkNvbXBhY3RKSVRDb2RlTWFwLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNp
bmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1
ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAtNDksMTggKzQ5LDE5IEBACiAj
aW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUlu
Zm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgotI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlB1dFByb3BlcnR5
U2xvdC5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgog
I2luY2x1ZGUgIkpJVFdyaXRlQmFycmllci5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAjaW5jbHVkZSAi
TExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5o
IgorI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCisjaW5jbHVkZSAiT3B0aW9u
cy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJQcm9maWxl
ckpldHRpc29uUmVhc29uLmgiCisjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCiAjaW5jbHVk
ZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNs
dWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCkBAIC04NSwyNiArODYsNDUgQEAgY2xhc3Mg
SlNNb2R1bGVFbnZpcm9ubWVudDsKIAogZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291
bnRSZW9wdGltaXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OwogCi1jbGFzcyBDb2RlQmxv
Y2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGljIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwg
eworICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CisKKyAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVy
IDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7IAorICAgICAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAg
Y2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgeworICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90
VmlzaXRvciYpIG92ZXJyaWRlOworICAgIH07CisKIHB1YmxpYzoKICAgICBlbnVtIENvcHlQYXJz
ZWRCbG9ja1RhZyB7IENvcHlQYXJzZWRCbG9jayB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOworCisgICAgREVDTEFSRV9JTkZPOworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2Nr
KENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgICAgIAotICAgIENv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7CisgICAgQ29kZUJsb2Nr
KFZNKiwgU3RydWN0dXJlKiwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsK
KyAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVt
bk9mZnNldCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIENvZGVCbG9jayhWTSosIFN0
cnVjdHVyZSosIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYsIEpT
R2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBD
b3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29k
ZUJsb2NrKiwgSlNTY29wZSopOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBDb2RlQmxv
Y2soV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiwgSlNHbG9iYWxP
YmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CiAjZW5kaWYKIAogICAgIFdy
aXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgSGVhcCogbV9o
ZWFwOwogCiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q29kZUJsb2Nr
KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvZGVCbG9jaygpOwogCiAgICAgVW5saW5rZWRD
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUuZ2V0KCk7IH0KIApAQCAtMTI0LDggKzE0NCw4IEBAIHB1YmxpYzoKICAgICBpbnQqIGFkZHJl
c3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKLSAgICBDb2RlQmxvY2sqIGFs
dGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0
QWx0ZXJuYXRpdmUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0ZXJu
YXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQorICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsg
fQorICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKEZ1bmN0
b3ImJiBmdW5jdG9yKQogICAgIHsKQEAgLTE0OCwxNiArMTY4LDE4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBzcGVjaWFsaXphdGlvbkZyb21Jc0NvbnN0cnVjdChtX2lzQ29uc3Ry
dWN0b3IpOwogICAgIH0KLSAgICAKKworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmVGb3JKZXR0
aXNvbigpOyAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAK
ICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVy
c2lvbigpOwogCi0gICAgdm9pZCBjbGVhck1hcmtzKCk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdseShTbG90VmlzaXRvciYpOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha2x5
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgp
OwogCiAgICAgdm9pZCBkdW1wU291cmNlKCk7CiAgICAgdm9pZCBkdW1wU291cmNlKFByaW50U3Ry
ZWFtJik7CkBAIC0yNjUsNyArMjg3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KIAogICAg
IC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5u
ZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgp
KQotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudCgpOworICAgIENvZGVC
bG9jayogbmV3UmVwbGFjZW1lbnQoKTsKICAgICAKICAgICB2b2lkIHNldEpJVENvZGUoUGFzc1Jl
ZlB0cjxKSVRDb2RlPiBjb2RlKQogICAgIHsKQEAgLTI5MSw5ICszMTMsOSBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50KCkgPSAwOworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKIAotICAgIHZpcnR1
YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSA9IDA7Cisg
ICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOwogICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCgpOwogICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gbV9jYXBhYmlsaXR5TGV2ZWxT
dGF0ZTsgfQogCkBAIC01NDMsNyArNTY1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBtX293
bmVyRXhlY3V0YWJsZS5nZXQoKSwgdik7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFz
dCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdik7CiAgICAgICAgIG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246Ok90aGVyKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC04OTUsOCArOTE3
LDYgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5hbGl6ZUxM
SW50SW5saW5lQ2FjaGVzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKCk7CiAKQEAgLTkyMywxNCArOTQzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIHNpemVfdCBj
b3VudCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVz
aXplVG9GaXQoY291bnQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgb3duZXJF
eGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7CisgICAgICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgY29uc3RhbnRzW2ldLmdldCgpKTsKICAgICAg
ICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb247CiAgICAgfQogCiAgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50
IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHZh
bHVlKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHZhbHVlKTsKICAg
ICB9CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZSgKQEAgLTEwMDIsOCArMTAyMiw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZTsKICAgICBib29sIG1fbmVlZHNBY3RpdmF0aW9u
OwogCi0gICAgQXRvbWljPGJvb2w+IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOwotICAg
IEF0b21pYzxib29sPiBtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkOworICAgIEF0b21pYzxi
b29sPiBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKIAogICAgIFJlZlB0cjxTb3VyY2VQcm92
aWRlcj4gbV9zb3VyY2U7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7CkBAIC0xMDQ1LDcg
KzEwNjQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVj
dXRhYmxlPj4gbV9mdW5jdGlvbkRlY2xzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8RnVuY3Rp
b25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOwogCi0gICAgUmVmUHRyPENvZGVCbG9jaz4g
bV9hbHRlcm5hdGl2ZTsKKyAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZl
OwogICAgIAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50
ZXI7CiAKQEAgLTEwNjUsMTI0ICsxMDg0LDI0MiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShKSVQp
CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsKICNlbmRp
ZgorCisgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7
CisgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CiB9
OwogCiAvLyBQcm9ncmFtIGNvZGUgaXMgbm90IG1hcmtlZCBieSBhbnkgZnVuY3Rpb24sIHNvIHdl
IG1ha2UgdGhlIGdsb2JhbCBvYmplY3QKIC8vIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIGl0Lgog
CiBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKKyAgICB0eXBlZGVm
IENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKwogcHJvdGVjdGVkOgotICAgIEds
b2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIEdsb2JhbENvZGVCbG9jayYgb3RoZXIp
Ci0gICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICBHbG9iYWxDb2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBH
bG9iYWxDb2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJl
LCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9Ci0gICAgICAgIAotICAgIEds
b2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2Vk
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVu
c2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBDb2RlQmxvY2sob3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3Vy
Y2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKworICAgIEdsb2JhbENvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2Nv
cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBD
b2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKICAgICB7CiAgICAgfQogfTsKIAogY2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1Ymxp
YyBHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgotICAgIFByb2dyYW1Db2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICA6IEdsb2JhbENvZGVC
bG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2Nr
IEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFByb2dyYW1Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3Ro
ZXIpCiAgICAgeworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0
YW5jZTsKICAgICB9CiAKLSAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92
aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNl
UHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICBzdGF0aWMgUHJvZ3JhbUNv
ZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAg
SlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVy
LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCiAgICAgeworICAgICAgICBQcm9ncmFt
Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1D
b2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZt
LT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJs
ZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KIAotI2lmIEVOQUJMRShKSVQpCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRlOwotI2VuZGlmCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQ
cm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0K
KworICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
Z3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogfTsKIAogY2xhc3MgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA6IHB1Ymxp
YyBHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2so
Q29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB0eXBlZGVm
IEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQogICAgIHsKKyAgICAgICAgTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
Q29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7
CiAgICAgfQogCi0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
c2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgc3Rh
dGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQogICAgIHsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+
aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtl
ZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
OworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUs
IHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAg
ICB9CiAKLSNpZiBFTkFCTEUoSklUKQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgQ29kZUJsb2Nr
KiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKLSNlbmRpZgorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFy
c2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEds
b2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAg
IEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEdsb2JhbENvZGVC
bG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBz
Y29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIH07CiAKIGNsYXNzIEV2
YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICBFdmFs
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCi0gICAg
ICAgIDogR2xvYmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgdHlwZWRl
ZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
RXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29k
ZUJsb2NrJiBvdGhlcikKICAgICB7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQorICAg
ICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwogICAgIH0KLSAgICAgICAgCi0gICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgMSkKKworICAgIHN0YXRpYyBFdmFs
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Nj
b3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCiAg
ICAgeworICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIEV2YWxDb2Rl
QmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFi
bGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9Ci0gICAgCisK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCiAgICAgY29u
c3QgSWRlbnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHVubGlua2Vk
RXZhbENvZGVCbG9jaygpLT52YXJpYWJsZShpbmRleCk7IH0KICAgICB1bnNpZ25lZCBudW1WYXJp
YWJsZXMoKSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+bnVtVmFyaWFibGVzKCk7
IH0KICAgICAKLSNpZiBFTkFCTEUoSklUKQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgQ29kZUJs
b2NrKiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKLSNlbmRpZgorcHJpdmF0
ZToKKyAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAg
IH0KKyAgICAgICAgCisgICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBzb3VyY2VQcm92aWRlciwgMCwgMSkKKyAgICB7CisgICAgfQogICAgIAorICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKIHByaXZhdGU6CiAgICAgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KIH07CiAKIGNsYXNz
IEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CiBwdWJsaWM6Ci0gICAgRnVu
Y3Rpb25Db2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgdHlw
ZWRlZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgRnVu
Y3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rp
b25Db2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGlu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZt
LT5oZWFwKSkKKyAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsK
KyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBGdW5jdGlvbkNv
ZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3Bl
KiBzY29wZSwKKyAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQogICAgIHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAg
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBG
dW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3Bl
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5j
dGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0s
IHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAg
RnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwKKyAgICAgICAgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWdu
ZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0
dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJv
dmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQogICAgIHsKICAgICB9
CiAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogfTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IGNsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CiBwdWJsaWM6
Ci0gICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJs
eUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywg
b3RoZXIpCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJs
b2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJs
b2NrJiBvdGhlcikKICAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+
aGVhcCkpCisgICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAg
ICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBpbnN0
YW5jZTsKICAgICB9CiAKLSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHZtLCBnbG9iYWxPYmpl
Y3QpCisgICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBXZWJB
c3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKICAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+aGVh
cCkpCisgICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2VtYmx5
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpJVCkKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7Ci0jZW5k
aWYKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQorICAg
ICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVj
dHVyZSwgb3duZXJFeGVjdXRhYmxlLCB2bSwgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogfTsKICNlbmRpZgogCkBAIC0xMjEw
LDEwICsxMzQ3LDkgQEAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVgog
ICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CiB9CiAKLWlubGluZSB2b2lkIENv
ZGVCbG9jazo6Y2xlYXJNYXJrcygpCitpbmxpbmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyVmlzaXRX
ZWFrbHlIYXNCZWVuQ2FsbGVkKCkKIHsKLSAgICBtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVk
LnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICBtX3Zpc2l0QWdn
cmVnYXRlSGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOwogfQogCiBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmso
dm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQpAQCAtMTIzOCwxMiArMTM3NCwxMSBAQCBpbmxpbmUg
dm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoQ29kZUJsb2NrCiB7CiAgICAgaWYgKCFjb2RlQmxvY2sp
CiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBGb3JjZSBHQyB0byB2aXNpdCBhbGwgQ29k
ZUJsb2NrcyBvbiB0aGUgc3RhY2ssIGluY2x1ZGluZyBvbGQgQ29kZUJsb2NrcwotICAgIC8vIHRo
YXQgaGF2ZSBub3QgZXhlY3V0ZWQgYSBiYXJyaWVyLiBUaGlzIGlzIG92ZXJraWxsLCBidXQgd2Ug
aGF2ZSBhbHdheXMKLSAgICAvLyBkb25lIHRoaXMsIGFuZCBpdCBtaWdodCBoZWxwIHVzIHJlY292
ZXIgZ3JhY2VmdWxseSBpZiB3ZSBmb3JnZXQgdG8gZXhlY3V0ZQotICAgIC8vIGEgYmFycmllciB3
aGVuIGEgQ29kZUJsb2NrIG5lZWRzIGl0LgotICAgIGNvZGVCbG9jay0+Y2xlYXJNYXJrcygpOwor
CisgICAgLy8gVHJ5IHRvIHJlY292ZXIgZ3JhY2VmdWxseSBpZiB3ZSBmb3JnZXQgdG8gZXhlY3V0
ZSBhIGJhcnJpZXIgZm9yIGEKKyAgICAvLyBDb2RlQmxvY2sgdGhhdCBkb2VzIHZhbHVlIHByb2Zp
bGluZy4gVGhpcyBpcyBwcm9iYWJseSBvdmVya2lsbCwgYnV0IHdlCisgICAgLy8gaGF2ZSBhbHdh
eXMgZG9uZSBpdC4KKyAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2Rl
QmxvY2spOwogCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CkBA
IC0xMjUyLDEzICsxMzg3LDEzIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUg
dm9pZCAKIHsKICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgIGNhc2UgUHJvZ3JhbUV4ZWN1dGFi
bGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpCisgICAgICAg
IGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2Fz
dDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpKQog
ICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndh
cmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNl
IEV2YWxFeGVjdXRhYmxlVHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpKQor
ICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sq
Pihqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpKSkK
ICAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI2Niwx
NSArMTQwMSwxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgCiAg
ICAgY2FzZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOiB7CiAgICAgICAgIEZ1bmN0b3IgZihzdGQ6
OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAg
IGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2Fs
bC5nZXQoKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkKICAgICAg
ICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7Ci0gICAgICAgIGlm
IChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LmdldCgpKQorICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkp
CiAgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlVHlw
ZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0Nhc3Q8TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmdldCgpKQor
ICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sq
Pihqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9tb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmdldCgpKSkKICAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRD
b2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDE5MDQz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soKSB7IH0KIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6fkRlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaygpIHsgfQogCi12b2lkIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0KQordm9pZCBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0
aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayosIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBkdW1wQ29tcGlsZWRTb3VyY2VzSWZOZWVkZWQoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIHByb3RlY3RlZDoKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayos
IENvbXBpbGF0aW9uUmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNv
bWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdD
b2RlQmxvY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShD
b2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJl
c3VsdCk7CiAKICAgICBWZWN0b3I8RGVmZXJyZWRTb3VyY2VEdW1wPiYgZW5zdXJlRGVmZXJyZWRT
b3VyY2VEdW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFs
Q29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V2YWxDb2RlQ2FjaGUuaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBFdmFsRXhlY3V0YWJsZSogZ2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyLCBib29sIGluU3RyaWN0Q29udGV4dCwgVGhpc1REWk1v
ZGUgdGhpc1REWk1vZGUsIGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgSlNTY29wZSogc2NvcGUp
CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBnZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBvd25lciwgYm9vbCBpblN0cmljdENvbnRleHQsIFRoaXNURFpNb2RlIHRoaXNURFpNb2RlLCBj
b25zdCBTdHJpbmcmIGV2YWxTb3VyY2UsIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwogICAgICAgICAg
ICAgSlNTY29wZTo6Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3BlLCB2YXJpYWJsZXNVbmRl
clREWik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxMSw3ICs0MTEsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRp
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdl
YWsgcmVmZXJlbmNlIHRoYXQgaXNuJ3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KLSAgICAg
ICAgc3RhdGUud2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgc3RhdGUu
d2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSkpOwogICAgICAgICAKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBz
dGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCkBAIC0xMTcwLDcgKzExNzAsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGNhc2VzKQogICAgICAgICBkb2VzQ2FsbHMgfD0gZW50cnktPmRvZXNDYWxscygpOwogICAgIAot
ICAgIG1fc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCB2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZG9lc0NhbGxzKTsKKyAgICBtX3N0dWJSb3V0aW5lID0g
Y3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jaywgZG9lc0NhbGxzKTsKICAg
ICBtX3dhdGNocG9pbnRzID0gV1RGOjptb3ZlKHN0YXRlLndhdGNocG9pbnRzKTsKICAgICBpZiAo
IXN0YXRlLndlYWtSZWZlcmVuY2VzLmlzRW1wdHkoKSkKICAgICAgICAgbV93ZWFrUmVmZXJlbmNl
cyA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+Pj4oV1RGOjpt
b3ZlKHN0YXRlLndlYWtSZWZlcmVuY2VzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE5MDQz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IFN0cnVjdHVyZVN0dWJJbmZvOgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4+IGFjY2Vzc0Nhc2VzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBw
cmV2aW91c0Nhc2UgPQotICAgICAgICBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8o
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksICp0aGlzKTsKKyAgICAgICAgQWNjZXNz
Q2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2ssICp0aGlzKTsKICAgICBp
ZiAocHJldmlvdXNDYXNlKQogICAgICAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoV1RGOjptb3ZlKHBy
ZXZpb3VzQ2FzZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Mjgs
NyArNDgyOCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICBkYXRhTG9nKCJQYXJzaW5n
ICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCi0gICAgbV9kZmdDb2RlQmxvY2sgPSBtX2dy
YXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVCbG9jay5nZXQoKTsKKyAgICBtX2RmZ0NvZGVCbG9j
ayA9IG1fZ3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2NrOwogICAgIGlmIChpc0ZUTCht
X2dyYXBoLm1fcGxhbi5tb2RlKSAmJiBtX2RmZ0NvZGVCbG9jawogICAgICAgICAmJiBPcHRpb25z
OjplbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSkgewogICAgICAgICBpZiAoT3B0
aW9uczo6ZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlz
aW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIERlc2lyZWRU
cmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiB7CiAgICAgY29tbW9uLT50cmFuc2l0aW9ucy5h
cHBlbmQoCiAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAotICAgICAgICAgICAgdm0s
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgIHZtLCBtX2NvZGVC
bG9jaywKICAgICAgICAgICAgIG1fY29kZU9yaWdpbk93bmVyLAogICAgICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUsIG1fbmV3U3RydWN0dXJlKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lv
biAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCB2b2lkIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgZm9yIChKU0NlbGwqIHRhcmdldCA6
IG1fcmVmZXJlbmNlcykgewogICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5
bmFtaWNDYXN0PFN0cnVjdHVyZSo+KHRhcmdldCkpIHsKICAgICAgICAgICAgIGNvbW1vbi0+d2Vh
a1N0cnVjdHVyZVJlZmVyZW5jZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+KHZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSkpOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KHZtLCBtX2NvZGVC
bG9jaywgc3RydWN0dXJlKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb21tb24t
PndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8SlND
ZWxsPih2bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0YXJnZXQpKTsKKyAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgbV9jb2RlQmxvY2ssIHRhcmdldCkp
OwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZSgKICAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvZmlsZWRERkdD
b2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcywK
ICAgICAgICAgY2FsbGJhY2spOwogICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJl
ZCkKLSAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBy
ZXN1bHQpOworICAgICAgICBjYWxsYmFjay0+Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxv
Y2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
OTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1td
ID0gewogR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdmVkU3RhdGUmIGxv
bmdMaXZlZFN0YXRlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fcGxhbihwbGFuKQotICAgICwg
bV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jay5nZXQoKSkKKyAgICAsIG1fY29kZUJsb2NrKG1f
cGxhbi5jb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpCiAgICAgLCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0ZS5tX2FsbG9jYXRvcikK
ICAgICAsIG1fbmV4dE1hY2hpbmVMb2NhbCgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
bXBpbGF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUg
IkRGR01pbmlmaWVkR3JhcGguaCIKQEAgLTExNCw2ICsxMTUsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgb3ZlcnJpZGU7
CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworCisgICAgQ29kZUJsb2NrKiBvc3JFbnRy
eUJsb2NrKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29kZUJsb2NrKj4obV9vc3JFbnRyeUJsb2Nr
LmdldCgpKTsgfQorICAgIHZvaWQgc2V0T1NSRW50cnlCbG9jayhWTSYgdm0sIGNvbnN0IEpTQ2Vs
bCogb3duZXIsIENvZGVCbG9jayogb3NyRW50cnlCbG9jaykgeyBtX29zckVudHJ5QmxvY2suc2V0
KHZtLCBvd25lciwgc3RhdGljX2Nhc3Q8SlNDZWxsKj4ob3NyRW50cnlCbG9jaykpOyB9CisgICAg
dm9pZCBjbGVhck9TUkVudHJ5QmxvY2soKSB7IG1fb3NyRW50cnlCbG9jay5jbGVhcigpOyB9CiAg
ICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklU
Q29tcGlsZXIgdG8gY2FsbCBzZXRDb2RlUmVmKCkuCkBAIC0xMjgsNyArMTMzLDcgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShGVExfSklUKQogICAgIHVpbnQ4X3QgbmVzdGVkVHJpZ2dlcklzU2V0IHsg
MCB9OwogICAgIFVwcGVyVGllckV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKLSAgICBS
ZWZQdHI8Q29kZUJsb2NrPiBvc3JFbnRyeUJsb2NrOworICAgIFdyaXRlQmFycmllcjxKU0NlbGw+
IG1fb3NyRW50cnlCbG9jazsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5OwogICAgIGJvb2wg
YWJhbmRvbk9TUkVudHJ5OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTkw
NDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVT
aXplKCkKIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7CiAgICAgbV9qaXRDb2RlLT5p
bml0aWFsaXplQ29kZVJlZigKLSAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZl
ciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpLAorICAg
ICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCAoIkRGRyBKSVQgY29kZSBmb3Ig
JXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklU
Q29kZTo6REZHSklUKSkuZGF0YSgpKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigp
KTsKICAgICAKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSk7CkBA
IC03MSw3ICs3MSw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsK
ICAgICBSRUxFQVNFX0FTU0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7CiAg
ICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJlZigKLSAgICAgICAgRklOQUxJWkVfREZHX0NP
REUoKm1fbGlua0J1ZmZlciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkRGR0pJVCkp
LmRhdGEoKSkpLAorICAgICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCAoIkRG
RyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFu
LmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSkuZGF0YSgpKSksCiAgICAgICAgIG1fd2l0aEFy
aXR5Q2hlY2spOwogICAgIG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlKTsK
ICAgICAKQEAgLTgzLDcgKzgzLDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rp
b24oKQogdm9pZCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKIHsKICNpZiBFTkFCTEUo
RlRMX0pJVCkKLSAgICBtX2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAobV9wbGFuLmNvZGVC
bG9jay5nZXQoKSk7CisgICAgbV9qaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKG1fcGxhbi5j
b2RlQmxvY2spOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAgIAogICAgIGlmIChtX3Bs
YW4uY29tcGlsYXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxOTA0MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2OCwxMyArMjY4LDE0IEBAIHN0YXRpYyB2b2lkIG9zcldyaXRlQmFy
cmllcihDQ2FsbEhlbHBlcnMKIAogdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxw
ZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0LCBib29sIGlzRXhpdGluZ1RvT3BDYXRj
aCkKIHsKLSAgICBqaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNv
ZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7Cisg
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zv
cihleGl0Lm1fY29kZU9yaWdpbik7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKGJhc2VsaW5lQ29kZUJsb2NrKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAg
ICBvc3JXcml0ZUJhcnJpZXIoaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86Om5v
bkFyZ0dQUjApOwogICAgIElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGpp
dC5jb2RlQmxvY2soKS0+aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5n
ZXQoKTsKICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3IgKElubGluZUNh
bGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAg
ICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSA9IGlubGluZUNhbGxGcmFtZS0+
ZXhlY3V0YWJsZS5nZXQoKTsKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6
VHJ1c3RlZEltbVB0cihvd25lckV4ZWN1dGFibGUpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwor
ICAgICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFt
ZS0+YmFzZWxpbmVDb2RlQmxvY2soKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihiYXNlbGluZUNvZGVCbG9jayksIEdQUkluZm86OmFyZ3VtZW50
R1BSMSk7CiAgICAgICAgICAgICBvc3JXcml0ZUJhcnJpZXIoaml0LCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAgICAgICB9CiAgICAgfQpAQCAtMjgyLDcg
KzI4Myw2IEBAIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYKICAgICBp
ZiAoZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBqaXQuYWRkUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpOwogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9
IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9y
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gaml0LmRlY29kZWRD
b2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrKTsKICAgICAKICAgICBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
LCB1bnNpZ25lZD4oZGVjb2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5t
X2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRC
eXRlY29kZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3Nyw4ICsxMzc3LDggQEAg
c3RhdGljIHZvaWQgdHJpZ2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZQogCiAgICAgLy8gV2UgbmVl
ZCB0byBjb21waWxlIHRoZSBjb2RlLgogICAgIGNvbXBpbGUoCi0gICAgICAgICp2bSwgY29kZUJs
b2NrLT5uZXdSZXBsYWNlbWVudCgpLmdldCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIFVJTlRfTUFY
LAotICAgICAgICBPcGVyYW5kczxKU1ZhbHVlPigpLCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jaykpOworICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKSwgY29kZUJsb2NrLCBGVExNb2RlLCBVSU5UX01BWCwKKyAgICAgICAgT3Bl
cmFuZHM8SlNWYWx1ZT4oKSwgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZSgpKTsKIH0KIAogc3RhdGljIHZvaWQgdHJpZ2dlclRpZXJVcE5vd0NvbW1vbihFeGVjU3RhdGUq
IGV4ZWMsIGJvb2wgaW5Mb29wKQpAQCAtMTQ2Myw3ICsxNDYzLDcgQEAgY2hhciogSklUX09QRVJB
VElPTiB0cmlnZ2VyT1NSRW50cnlOb3coCiAgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xp
c3Q6OkNvbXBpbGluZykKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgaWYgKENvZGVCbG9j
ayogZW50cnlCbG9jayA9IGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0KCkpIHsKKyAgICBpZiAo
Q29kZUJsb2NrKiBlbnRyeUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSB7CiAgICAg
ICAgIHZvaWQqIGFkZHJlc3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSgKICAgICAgICAgICAgIGV4
ZWMsIGNvZGVCbG9jaywgZW50cnlCbG9jaywgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOwog
ICAgICAgICBpZiAoYWRkcmVzcykKQEAgLTE0NzcsNyArMTQ3Nyw3IEBAIGNoYXIqIEpJVF9PUEVS
QVRJT04gdHJpZ2dlck9TUkVudHJ5Tm93KAogICAgICAgICAKICAgICAgICAgLy8gT1NSIGVudHJ5
IGZhaWxlZC4gT2ggbm8hIFRoaXMgaW1wbGllcyB0aGF0IHdlIG5lZWQgdG8gcmV0cnkuIFdlIHJl
dHJ5CiAgICAgICAgIC8vIHdpdGhvdXQgZXhwb25lbnRpYWwgYmFja29mZiBhbmQgd2Ugb25seSBk
byB0aGlzIGZvciB0aGUgZW50cnkgY29kZSBibG9jay4KLSAgICAgICAgaml0Q29kZS0+b3NyRW50
cnlCbG9jayA9IG51bGxwdHI7CisgICAgICAgIGppdENvZGUtPmNsZWFyT1NSRW50cnlCbG9jaygp
OwogICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeVJldHJ5ID0gMDsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQpAQCAtMTQ5NCwyMSArMTQ5NCwxOSBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdn
ZXJPU1JFbnRyeU5vdygKICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwog
ICAgIGppdENvZGUtPnJlY29uc3RydWN0KAogICAgICAgICBleGVjLCBjb2RlQmxvY2ssIENvZGVP
cmlnaW4oYnl0ZWNvZGVJbmRleCksIHN0cmVhbUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKTsKLSAg
ICBSZWZQdHI8Q29kZUJsb2NrPiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3
UmVwbGFjZW1lbnQoKTsKKyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29k
ZUJsb2NrLT5uZXdSZXBsYWNlbWVudCgpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5
UmVzdWx0ID0gY29tcGlsZSgKLSAgICAgICAgKnZtLCByZXBsYWNlbWVudENvZGVCbG9jay5nZXQo
KSwgY29kZUJsb2NrLCBGVExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAg
IG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s6OmNyZWF0ZShjb2RlQmxvY2spKTsKKyAgICAgICAgKnZtLCByZXBsYWNlbWVudENvZGVC
bG9jaywgY29kZUJsb2NrLCBGVExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAg
ICAgIG11c3RIYW5kbGVWYWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2s6OmNyZWF0ZSgpKTsKICAgICAKLSAgICBpZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29t
cGlsYXRpb25TdWNjZXNzZnVsKSB7Ci0gICAgICAgIEFTU0VSVChmb3JFbnRyeVJlc3VsdCA9PSBD
b21waWxhdGlvbkRlZmVycmVkIHx8IHJlcGxhY2VtZW50Q29kZUJsb2NrLT5oYXNPbmVSZWYoKSk7
CisgICAgaWYgKGZvckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBmb3It
ZW50cnkgY29tcGlsZSBhbHJlYWR5IHN1Y2NlZWRlZC4gSW4gdGhhdCBjYXNlIE9TUgogICAgIC8v
IGVudHJ5IHdpbGwgc3VjY2VlZCB1bmxlc3Mgd2UgcmFuIG91dCBvZiBzdGFjay4gSXQncyBub3Qg
Y2xlYXIgd2hhdCB3ZSBzaG91bGQgZG8uCiAgICAgLy8gV2Ugc2lnbmFsIHRvIHRyeSBhZ2FpbiBh
ZnRlciBhIHdoaWxlIGlmIHRoYXQgaGFwcGVucy4KICAgICB2b2lkKiBhZGRyZXNzID0gRlRMOjpw
cmVwYXJlT1NSRW50cnkoCi0gICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZS0+b3NyRW50
cnlCbG9jay5nZXQoKSwgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOworICAgICAgICBleGVj
LCBjb2RlQmxvY2ssIGppdENvZGUtPm9zckVudHJ5QmxvY2soKSwgYnl0ZWNvZGVJbmRleCwgc3Ry
ZWFtSW5kZXgpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7CiB9CiAj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UGxhbi5jcHAJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBQcm9maWxlcjo6
Q29tcGlsYXRpb25LaW5kIHByb2ZpbGVyQ29tcGlsCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQogCi1QbGFuOjpQbGFuKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIENv
ZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssCitQbGFuOjpQbGFuKENvZGVCbG9jayogcGFz
c2VkQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAogICAgIENvbXBp
bGF0aW9uTW9kZSBtb2RlLCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgY29u
c3QgT3BlcmFuZHM8SlNWYWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiB2bSgqcGFzc2Vk
Q29kZUJsb2NrLT52bSgpKQpAQCAtMTQwLDEwICsxNDAsMTAgQEAgUGxhbjo6UGxhbihQYXNzUmVm
UHRyPENvZGVCbG9jaz4gcGFzc2VkQwogICAgICwgbW9kZShtb2RlKQogICAgICwgb3NyRW50cnlC
eXRlY29kZUluZGV4KG9zckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG11c3RIYW5kbGVWYWx1
ZXMobXVzdEhhbmRsZVZhbHVlcykKLSAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+
bV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlv
bihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVz
Rm9yKGNvZGVCbG9jay5nZXQoKSksIHByb2ZpbGVyQ29tcGlsYXRpb25LaW5kRm9yTW9kZShtb2Rl
KSkpIDogMCkKKyAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29k
ZVByb2ZpbGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2st
PnZtKCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9j
ayksIHByb2ZpbGVyQ29tcGlsYXRpb25LaW5kRm9yTW9kZShtb2RlKSkpIDogMCkKICAgICAsIGlu
bGluZUNhbGxGcmFtZXMoYWRvcHRSZWYobmV3IElubGluZUNhbGxGcmFtZVNldCgpKSkKLSAgICAs
IGlkZW50aWZpZXJzKGNvZGVCbG9jay5nZXQoKSkKLSAgICAsIHdlYWtSZWZlcmVuY2VzKGNvZGVC
bG9jay5nZXQoKSkKKyAgICAsIGlkZW50aWZpZXJzKGNvZGVCbG9jaykKKyAgICAsIHdlYWtSZWZl
cmVuY2VzKGNvZGVCbG9jaykKICAgICAsIHdpbGxUcnlUb1RpZXJVcChmYWxzZSkKICAgICAsIHN0
YWdlKFByZXBhcmluZykKIHsKQEAgLTUzNSw3ICs1MzUsNyBAQCBib29sIFBsYW46OmlzU3RpbGxW
YWxpZCgpCiAKIHZvaWQgUGxhbjo6cmVhbGx5QWRkKENvbW1vbkRhdGEqIGNvbW1vbkRhdGEpCiB7
Ci0gICAgd2F0Y2hwb2ludHMucmVhbGx5QWRkKGNvZGVCbG9jay5nZXQoKSwgKmNvbW1vbkRhdGEp
OworICAgIHdhdGNocG9pbnRzLnJlYWxseUFkZChjb2RlQmxvY2ssICpjb21tb25EYXRhKTsKICAg
ICBpZGVudGlmaWVycy5yZWFsbHlBZGQodm0sIGNvbW1vbkRhdGEpOwogICAgIHdlYWtSZWZlcmVu
Y2VzLnJlYWxseUFkZCh2bSwgY29tbW9uRGF0YSk7CiAgICAgdHJhbnNpdGlvbnMucmVhbGx5QWRk
KHZtLCBjb21tb25EYXRhKTsKQEAgLTU1MywxNCArNTUzLDE0IEBAIHZvaWQgUGxhbjo6bm90aWZ5
Q29tcGlsZWQoKQogCiB2b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKLSAgICBjYWxsYmFjay0+
Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KGNvZGVCbG9jay5nZXQoKSk7
CisgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShj
b2RlQmxvY2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrKTsKICAgICBzdGFnZSA9IFJlYWR5OwogfQog
CiBDb21waWxhdGlvblJlc3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFj
aygpCiB7CiAgICAgLy8gV2Ugd2lsbCBlc3RhYmxpc2ggbmV3IHJlZmVyZW5jZXMgZnJvbSB0aGUg
Y29kZSBibG9jayB0byB0aGluZ3MuIFNvLCB3ZSBuZWVkIGEgYmFycmllci4KLSAgICB2bS5oZWFw
LndyaXRlQmFycmllcihjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICB2bS5oZWFw
LndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIAogICAgIGlmICghaXNTdGlsbFZhbGlkKCkp
CiAgICAgICAgIHJldHVybiBDb21waWxhdGlvbkludmFsaWRhdGVkOwpAQCAtNTk2LDcgKzU5Niw3
IEBAIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE4KIAogdm9pZCBQbGFu
OjpmaW5hbGl6ZUFuZE5vdGlmeUNhbGxiYWNrKCkKIHsKLSAgICBjYWxsYmFjay0+Y29tcGlsYXRp
b25EaWRDb21wbGV0ZShjb2RlQmxvY2suZ2V0KCksIGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0Nh
bGxiYWNrKCkpOworICAgIGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9j
aywgcHJvZmlsZWRERkdDb2RlQmxvY2ssIGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNr
KCkpOwogfQogCiBDb21waWxhdGlvbktleSBQbGFuOjprZXkoKQpAQCAtNjA0LDE2ICs2MDQsMTUg
QEAgQ29tcGlsYXRpb25LZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXko
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjbGVhckNv
ZGVCbG9ja01hcmtzKCkKK3ZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tzKCkKIHsKICAgICAv
LyBDb21waWxhdGlvbiB3cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91
dCBwZXJmb3JtaW5nCiAgICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8g
YmUgcGVzc2ltaXN0aWMgYW5kIGFzc3VtZSB0aGF0CiAgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tz
IG11c3QgYmUgdmlzaXRlZCBkdXJpbmcgR0MuCiAKLSAgICBjb2RlQmxvY2stPmNsZWFyTWFya3Mo
KTsKLSAgICBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCktPmNsZWFyTWFya3MoKTsKKyAgICBIZWFw
OjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIGlmIChwcm9m
aWxlZERGR0NvZGVCbG9jaykKLSAgICAgICAgcHJvZmlsZWRERkdDb2RlQmxvY2stPmNsZWFyTWFy
a3MoKTsKKyAgICAgICAgSGVhcDo6aGVhcChwcm9maWxlZERGR0NvZGVCbG9jayktPndyaXRlQmFy
cmllcihwcm9maWxlZERGR0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVz
c0FuZFZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC02MjQsMTUgKzYyMywx
MyBAQCB2b2lkIFBsYW46OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgZm9yICh1
bnNpZ25lZCBpID0gbXVzdEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspCiAgICAgICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRWYWx1ZSgmbXVzdEhhbmRsZVZhbHVlc1tpXSk7CiAKLSAgICBj
b2RlQmxvY2stPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7Ci0gICAgY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT52aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOwotICAgIGlmIChwcm9maWxlZERGR0NvZGVC
bG9jaykKLSAgICAgICAgcHJvZmlsZWRERkdDb2RlQmxvY2stPnZpc2l0U3Ryb25nbHkodmlzaXRv
cik7CisgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxv
Y2spOworICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmls
ZWRERkdDb2RlQmxvY2spOwogCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAg
Zm9yIChhdXRvKiBpbmxpbmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAg
ICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKSk7Ci0gICAg
ICAgICAgICBpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCktPnZpc2l0U3Ryb25n
bHkodmlzaXRvcik7CisgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9u
bHlQb2ludGVyKGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKSk7CiAgICAgICAg
IH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lv
biAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCBjbGFzcyBUaHJlYWREYXRhOwogCiBzdHJ1Y3QgUGxh
biA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAgUGxhbigKLSAgICAg
ICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBw
cm9maWxlZERGR0NvZGVCbG9jaywKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tUb0NvbXBp
bGUsIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssCiAgICAgICAgIENvbXBpbGF0aW9u
TW9kZSwgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4LAogICAgICAgICBjb25zdCBPcGVy
YW5kczxKU1ZhbHVlPiYgbXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4oKTsKQEAgLTcxLDE0
ICs3MSwxNyBAQCBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAg
CiAgICAgQ29tcGlsYXRpb25LZXkga2V5KCk7CiAgICAgCi0gICAgdm9pZCBjbGVhckNvZGVCbG9j
a01hcmtzKCk7CisgICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3MoKTsKICAgICB2b2lkIGNoZWNr
TGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3du
VG9CZUxpdmVEdXJpbmdHQygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCiAgICAgVk0mIHZt
OwotICAgIFJlZlB0cjxDb2RlQmxvY2s+IGNvZGVCbG9jazsKLSAgICBSZWZQdHI8Q29kZUJsb2Nr
PiBwcm9maWxlZERGR0NvZGVCbG9jazsKKworICAgIC8vIFRoZXNlIGNhbiBiZSByYXcgcG9pbnRl
cnMgYmVjYXVzZSB3ZSB2aXNpdCB0aGVtIGR1cmluZyBldmVyeSBHQyBpbiBjaGVja0xpdmVuZXNz
QW5kVmlzaXRDaGlsZHJlbi4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICBDb2RlQmxv
Y2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrOworCiAgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGU7CiAg
ICAgY29uc3QgdW5zaWduZWQgb3NyRW50cnlCeXRlY29kZUluZGV4OwogICAgIE9wZXJhbmRzPEpT
VmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDQ2ICszNSw0NCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLVRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjaygKLSAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQotICAgIDog
bV9kZmdDb2RlQmxvY2soZGZnQ29kZUJsb2NrKQorVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2s6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkKIHsKIH0KIAogVG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjaygpIHsgfQogCi1SZWY8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IFRvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+
IGRmZ0NvZGVCbG9jaykKK1JlZjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2Nr
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soKSk7CiB9CiAKIHZvaWQgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNv
bXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseSgKLSAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERG
R0NvZGVCbG9jaykKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAg
IGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29k
ZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIk9wdGltaXpp
bmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICpwcm9maWxlZERGR0Nv
ZGVCbG9jaywKICAgICAgICAgICAgICIpIGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsKICAgICB9CiAg
ICAgCi0gICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNlT3B0aW1pemF0
aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCi0gICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpKTsK
KyAgICBwcm9maWxlZERGR0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6
YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgcHJvZmlsZWRERkdDb2RlQmxvY2sp
OwogfQogCiB2b2lkIFRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlv
bkRpZENvbXBsZXRlKAotICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3Vs
dCByZXN1bHQpCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRE
RkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1p
emluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJs
b2NrLAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9j
aywgIiAoZm9yICIsICpwcm9maWxlZERGR0NvZGVCbG9jaywKICAgICAgICAgICAgICIpIHJlc3Vs
dDogIiwgcmVzdWx0LCAiXG4iKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fZGZnQ29kZUJsb2Nr
LT5yZXBsYWNlbWVudCgpICE9IG1fZGZnQ29kZUJsb2NrKSB7CisgICAgaWYgKHByb2ZpbGVkREZH
Q29kZUJsb2NrLT5yZXBsYWNlbWVudCgpICE9IHByb2ZpbGVkREZHQ29kZUJsb2NrKSB7CiAgICAg
ICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coCiAg
ICAgICAgICAgICAgICAgIkRyb3BwaW5nIEZUTCBjb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIg
b24gdGhlIGZsb29yIGJlY2F1c2UgdGhlICIKLSAgICAgICAgICAgICAgICAiREZHIGNvZGUgYmxv
Y2sgIiwgKm1fZGZnQ29kZUJsb2NrLCAiIHdhcyBqZXR0aXNvbmVkLlxuIik7CisgICAgICAgICAg
ICAgICAgIkRGRyBjb2RlIGJsb2NrICIsICpwcm9maWxlZERGR0NvZGVCbG9jaywgIiB3YXMgamV0
dGlzb25lZC5cbiIpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04Miwx
MCArODAsMTAgQEAgdm9pZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6YwogICAg
IGlmIChyZXN1bHQgPT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAgICBjb2RlQmxvY2st
Pm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOwogICAgIAot
ICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25UaHJl
c2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCi0gICAgICAgIG1fZGZnQ29kZUJsb2NrLmdl
dCgpLCByZXN1bHQpOworICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygp
LT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAg
ICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrLCByZXN1bHQpOwogCi0gICAgRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsK
KyAgICBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUo
Y29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsKIH0KIAogfSB9IC8vIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRD
b21waWxhdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAxOTA0
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE4ICs0MCwxNSBAQCBuYW1lc3Bh
Y2UgREZHIHsKIAogY2xhc3MgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJs
aWMgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrIHsKIHByb3RlY3RlZDoKLSAgICBUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJs
b2NrKTsKKyAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOwogCiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAotICAg
IHN0YXRpYyBSZWY8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZShQYXNz
UmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKyAgICBzdGF0aWMgUmVmPFRvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZv
aWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayopOwot
ICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvbXBp
bGF0aW9uUmVzdWx0KTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2RmZ0Nv
ZGVCbG9jazsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5j
aHJvbm91c2x5KENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvZGVC
bG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0KTsKIH07CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLVRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2soCi0gICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKLSAgICA6IG1fZGZn
Q29kZUJsb2NrKGRmZ0NvZGVCbG9jaykKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2so
KQogewogfQogCkBAIC00NSwzOSArNDMsMzggQEAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29t
cGlsYXRpb25DYWxsYgogewogfQogCi1SZWY8VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaz5Ub0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
OjpjcmVhdGUoCi0gICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKK1JlZjxU
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPlRvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhk
ZmdDb2RlQmxvY2spKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkpOwogfQogCiB2b2lkIFRvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlB
c3luY2hyb25vdXNseSgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAgICBpZiAo
T3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAi
T3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZn
Q29kZUJsb2NrLAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNv
ZGVCbG9jaywgIiAoZm9yICIsICpwcm9maWxlZERGR0NvZGVCbG9jaywKICAgICAgICAgICAgICIp
IGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsKICAgICB9CiAgICAgCi0gICAgbV9kZmdDb2RlQmxvY2st
PmppdENvZGUoKS0+ZGZnKCktPmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHko
Ci0gICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpKTsKKyAgICBwcm9maWxlZERGR0NvZGVCbG9j
ay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRs
eSgKKyAgICAgICAgcHJvZmlsZWRERkdDb2RlQmxvY2spOwogfQogCiB2b2lkIFRvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUo
Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywg
Q29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpIHsKICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0
aW9uIG9mICIsICpjb2RlQmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAg
ICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwg
KnByb2ZpbGVkREZHQ29kZUJsb2NrLAogICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQs
ICJcbiIpOwogICAgIH0KICAgICAKLSAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9kZmdDb2RlQmxv
Y2stPmppdENvZGUoKS0+ZGZnKCk7CisgICAgSklUQ29kZSogaml0Q29kZSA9IHByb2ZpbGVkREZH
Q29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpOwogICAgICAgICAKICAgICBzd2l0Y2ggKHJlc3Vs
dCkgewogICAgIGNhc2UgQ29tcGlsYXRpb25TdWNjZXNzZnVsOgotICAgICAgICBqaXRDb2RlLT5v
c3JFbnRyeUJsb2NrID0gY29kZUJsb2NrOworICAgICAgICBqaXRDb2RlLT5zZXRPU1JFbnRyeUJs
b2NrKCpjb2RlQmxvY2stPnZtKCksIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBjb2RlQmxvY2spOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBqaXRD
b2RlLT5vc3JFbnRyeVJldHJ5ID0gMDsKQEAgLTkwLDcgKzg3LDcgQEAgdm9pZCBUb0ZUTEZvck9T
UkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0g
ICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNv
ZGVCbG9jaywgcmVzdWx0KTsKKyAgICBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBp
bGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0
KTsKIH0KIAogfSB9IC8vIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDE4ICs0MCwxNSBAQCBuYW1lc3BhY2UgREZH
IHsKIAogY2xhc3MgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayA6
IHB1YmxpYyBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgewogcHJvdGVjdGVkOgotICAgIFRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IGRmZ0NvZGVCbG9jayk7CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaygpOwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOwogCi0gICAgc3RhdGljIFJlZjxUb0ZUTEZv
ck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IGRmZ0NvZGVCbG9jayk7CisgICAgc3RhdGljIFJlZjxUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoKTsKICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayop
OwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENv
bXBpbGF0aW9uUmVzdWx0KTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2Rm
Z0NvZGVCbG9jazsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFz
eW5jaHJvbm91c2x5KENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2sp
OworICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENv
ZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0KTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHV29ya2xpc3QuY3BwCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dvcmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDE0ICsyMDcs
MTQgQEAgdm9pZCBXb3JrbGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJgogICAgIGNvbXBs
ZXRlQWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6Y2xlYXJDb2Rl
QmxvY2tNYXJrcyhWTSYgdm0pCit2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0m
IHZtKQogewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgZm9yIChQbGFuTWFw
OjppdGVyYXRvciBpdGVyID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7
ICsraXRlcikgewogICAgICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAg
ICAgIGlmICgmcGxhbi0+dm0gIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IHBsYW4tPmNsZWFyQ29kZUJsb2NrTWFya3MoKTsKKyAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2Rl
QmxvY2tzKCk7CiAgICAgfQogfQogCkBAIC00NjcsMTEgKzQ2NywxMSBAQCB2b2lkIGNvbXBsZXRl
QWxsUGxhbnNGb3JWTShWTSYgdm0pCiAgICAgfQogfQogCi12b2lkIGNsZWFyQ29kZUJsb2NrTWFy
a3MoVk0mIHZtKQordm9pZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIGZvciAo
dW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewogICAgICAgICBp
ZiAoREZHOjpXb3JrbGlzdCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwo
aSkpCi0gICAgICAgICAgICB3b3JrbGlzdC0+Y2xlYXJDb2RlQmxvY2tNYXJrcyh2bSk7CisgICAg
ICAgICAgICB3b3JrbGlzdC0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKICAgICB9CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDE5MDQz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gd29ya2xpc3QtPmNvbXBsZXRl
QWxsUmVhZHlQbGFuc0ZvclZNKHZtKTsKICAgICB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShW
TSYpOwogCi0gICAgdm9pZCBjbGVhckNvZGVCbG9ja01hcmtzKFZNJik7CisgICAgdm9pZCByZW1l
bWJlckNvZGVCbG9ja3MoVk0mKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFy
ZVJlYWR5KFZNJik7CiAgICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBD
b21waWxhdGlvbktleSA9IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIGlu
bGluZSBXb3JrbGlzdCogd29ya2xpc3RGb3JJbmRleE9yTnVsbCgKIH0KIAogdm9pZCBjb21wbGV0
ZUFsbFBsYW5zRm9yVk0oVk0mKTsKLXZvaWQgY2xlYXJDb2RlQmxvY2tNYXJrcyhWTSYpOwordm9p
ZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3Bw
CShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZp
bmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBKSVRGaW5h
bGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICBqaXRDb2RlLT5pbml0aWFsaXplRXhp
dFRodW5rcygKICAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgICAg
ICpleGl0VGh1bmtzTGlua0J1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5r
cyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9j
ay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgICgi
RlRMIGV4aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZSht
X3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CiAgICAgfSAvLyBl
bHNlIHRoaXMgZnVuY3Rpb24gaGFkIG5vIE9TUiBleGl0cywgc28gbm8gZXhpdCB0aHVua3MuCiAg
ICAgCiAgICAgaWYgKHNpZGVDb2RlTGlua0J1ZmZlcikgewpAQCAtMTE2LDcgKzExNiw3IEBAIGJv
b2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgaml0Q29kZS0+YWRk
SGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgKnNpZGVDb2RlTGlua0J1ZmZl
ciwKICAgICAgICAgICAgICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAotICAgICAgICAgICAgICAg
IHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBK
SVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQorICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRh
KCkpKQogICAgICAgICAgICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7CiAgICAgfQogICAgIApAQCAt
MTI0LDcgKzEyNCw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAg
ICAgICAgaml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAg
KmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLAogICAgICAgICAgICAgKCJGVEwgZXhjZXB0aW9u
IGhhbmRsZXIgZm9yICVzIiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0
aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgp
KSkKKyAgICAgICAgICAgICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFu
LmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkKICAgICAgICAgICAgIC5leGVj
dXRhYmxlTWVtb3J5KCkpOwogICAgIH0KIApAQCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wgSklURmlu
YWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlD
aGVja0VudHJ5cG9pbnQoCiAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAg
KmVudHJ5cG9pbnRMaW5rQnVmZmVyLAotICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVu
ayBmb3IgJXMgd2l0aCBMTFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVC
bG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkp
LmRhdGEoKSwgZnVuY3Rpb24pKSk7CisgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5r
IGZvciAlcyB3aXRoIExMVk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJs
b2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgp
LCBmdW5jdGlvbikpKTsKICAgICAKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGpp
dENvZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1Nl
dC5jcHAJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Nv
ZGVCbG9ja1NldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDE3ICs0MSwxMSBAQCBDb2RlQmxv
Y2tTZXQ6OkNvZGVCbG9ja1NldCgpCiAKIENvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCgpCiB7
Ci0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2NrcykKLSAgICAg
ICAgY29kZUJsb2NrLT5kZXJlZigpOwotCi0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6
IG1fbmV3Q29kZUJsb2NrcykKLSAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOwogfQogCi12b2lk
IENvZGVCbG9ja1NldDo6YWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit2b2lk
IENvZGVCbG9ja1NldDo6YWRkKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIENvZGVCbG9j
ayogYmxvY2sgPSBjb2RlQmxvY2subGVha1JlZigpOwotICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1f
bmV3Q29kZUJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3RW50cnk7CisgICAgYm9vbCBpc05ld0VudHJ5
ID0gbV9uZXdDb2RlQmxvY2tzLmFkZChjb2RlQmxvY2spLmlzTmV3RW50cnk7CiAgICAgQVNTRVJU
X1VOVVNFRChpc05ld0VudHJ5LCBpc05ld0VudHJ5KTsKIH0KIApAQCAtNjQsNTIgKzU4LDI2IEBA
IHZvaWQgQ29kZUJsb2NrU2V0Ojpwcm9tb3RlWW91bmdDb2RlQmxvY2sKIHZvaWQgQ29kZUJsb2Nr
U2V0OjpjbGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKQogewogICAgIGZvciAoQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgOiBtX29sZENvZGVCbG9ja3MpCi0gICAgICAgIGNvZGVCbG9jay0+Y2xlYXJN
YXJrcygpOworICAgICAgICBjb2RlQmxvY2stPmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
KCk7CiAKICAgICAvLyBXZSBwcm9tb3RlIGFmdGVyIHdlIGNsZWFyIG1hcmtzIG9uIHRoZSBvbGQg
Z2VuZXJhdGlvbiBDb2RlQmxvY2tzIGJlY2F1c2UKICAgICAvLyBub25lIG9mIHRoZSB5b3VuZyBn
ZW5lcmF0aW9ucyBDb2RlQmxvY2tzIG5lZWQgdG8gYmUgY2xlYXJlZC4KICAgICBwcm9tb3RlWW91
bmdDb2RlQmxvY2tzKCk7CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtzRm9yRWRl
bkNvbGxlY3Rpb24oY29uc3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+JiByZW1lbWJlcmVkU2V0KQot
ewotICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0IHdlIHdpbGwgcmV2aXNpdCBDb2RlQmxvY2tzIGlu
IHJlbWVtYmVyZWQgRXhlY3V0YWJsZXMgZXZlbiBpZiB0aGV5IHdlcmUgcHJldmlvdXNseSBtYXJr
ZWQuCi0gICAgZm9yIChjb25zdCBKU0NlbGwqIGNlbGwgOiByZW1lbWJlcmVkU2V0KSB7Ci0gICAg
ICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBjb25zdF9jYXN0PFNjcmlwdEV4ZWN1
dGFibGUqPihqc0R5bmFtaWNDYXN0PGNvbnN0IFNjcmlwdEV4ZWN1dGFibGUqPihjZWxsKSk7Ci0g
ICAgICAgIGlmICghZXhlY3V0YWJsZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBl
eGVjdXRhYmxlLT5mb3JFYWNoQ29kZUJsb2NrKFt0aGlzXShDb2RlQmxvY2sqIGNvZGVCbG9jaykg
ewotICAgICAgICAgICAgY29kZUJsb2NrLT5jbGVhck1hcmtzKCk7Ci0gICAgICAgICAgICBtX3Jl
bWVtYmVyZWQuYWRkKGNvZGVCbG9jayk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9pZCBD
b2RlQmxvY2tTZXQ6OmRlbGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKEhlYXBPcGVyYXRpb24g
Y29sbGVjdGlvblR5cGUpCiB7CiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiYgc2V0ID0gY29sbGVj
dGlvblR5cGUgPT0gRWRlbkNvbGxlY3Rpb24gPyBtX25ld0NvZGVCbG9ja3MgOiBtX29sZENvZGVC
bG9ja3M7CisgICAgVmVjdG9yPENvZGVCbG9jayo+IHVubWFya2VkOworICAgIGZvciAoQ29kZUJs
b2NrKiBjb2RlQmxvY2sgOiBzZXQpIHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNvZGVC
bG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5tYXJrZWQuYXBwZW5kKGNv
ZGVCbG9jayk7CisgICAgfQogCi0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBhIGZpeHBvaW50IGJl
Y2F1c2UgY29kZSBibG9ja3MgdGhhdCBhcmUgdW5tYXJrZWQgbWF5Ci0gICAgLy8gcmVmZXIgdG8g
ZWFjaCBvdGhlci4gRm9yIGV4YW1wbGUsIGEgREZHIGNvZGUgYmxvY2sgdGhhdCBpcyBvd25lZCBi
eQotICAgIC8vIHRoZSBHQyBtYXkgcmVmZXIgdG8gYW4gRlRMIGZvci1lbnRyeSBjb2RlIGJsb2Nr
IHRoYXQgaXMgYWxzbyBvd25lZCBieQotICAgIC8vIHRoZSBHQy4KLSAgICBWZWN0b3I8Q29kZUJs
b2NrKiwgMTY+IHRvUmVtb3ZlOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJG
aXhwb2ludGluZyBvdmVyIHVubWFya2VkLCBzZXQgc2l6ZSA9ICIsIHNldC5zaXplKCksICIuLi5c
biIpOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6
IHNldCkgewotICAgICAgICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc09uZVJlZigpKQotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOwotICAg
ICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHZlcmJvc2UpCi0gICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVtb3ZpbmcgIiwgdG9SZW1v
dmUuc2l6ZSgpLCAiIGJsb2Nrcy5cbiIpOwotICAgICAgICBpZiAodG9SZW1vdmUuaXNFbXB0eSgp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
OiB0b1JlbW92ZSkKLSAgICAgICAgICAgIHNldC5yZW1vdmUoY29kZUJsb2NrKTsKLSAgICAgICAg
dG9SZW1vdmUucmVzaXplKDApOworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiB1bm1h
cmtlZCkgeworICAgICAgICBjb2RlQmxvY2stPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0
cm95KGNvZGVCbG9jayk7CisgICAgICAgIHNldC5yZW1vdmUoY29kZUJsb2NrKTsKICAgICB9CiAK
ICAgICAvLyBBbnkgcmVtYWluaW5nIHlvdW5nIENvZGVCbG9ja3MgYXJlIGxpdmUgYW5kIG5lZWQg
dG8gYmUgcHJvbW90ZWQgdG8gdGhlIHNldCBvZiBvbGQgQ29kZUJsb2Nrcy4KQEAgLTExOSw3ICs4
Nyw2IEBAIHZvaWQgQ29kZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmUKIAogdm9pZCBD
b2RlQmxvY2tTZXQ6OnJlbW92ZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBjb2RlQmxv
Y2stPmRlcmVmKCk7CiAgICAgaWYgKG1fb2xkQ29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2sp
KSB7CiAgICAgICAgIG1fb2xkQ29kZUJsb2Nrcy5yZW1vdmUoY29kZUJsb2NrKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMTI4LDM1ICs5NSwxMyBAQCB2b2lkIENvZGVCbG9ja1NldDo6cmVtb3ZlKENv
ZGVCbG9jayogY29kCiAgICAgbV9uZXdDb2RlQmxvY2tzLnJlbW92ZShjb2RlQmxvY2spOwogfQog
Ci12b2lkIENvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17
Ci0gICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlRyYWNpbmcgIiwgbV9jdXJyZW50
bHlFeGVjdXRpbmcuc2l6ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0KLSAgICAvLyBXZSBzdHJv
bmdseSB2aXNpdCB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBzZXQgYmVjYXVzZSBqZXR0aXNvbmlu
ZyBjb2RlCi0gICAgLy8gaXMgbm90IHZhbHVhYmxlIG9uY2UgaXQncyBvbiB0aGUgc3RhY2suIFdl
J3JlIHBhc3QgdGhlIHBvaW50IHdoZXJlCi0gICAgLy8gamV0dGlzb25pbmcgd291bGQgYXZvaWQg
dGhlIGNvc3Qgb2YgT1NSIGV4aXQuCi0gICAgZm9yIChjb25zdCBSZWZQdHI8Q29kZUJsb2NrPiYg
Y29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCi0gICAgICAgIGNvZGVCbG9jay0+dmlz
aXRTdHJvbmdseSh2aXNpdG9yKTsKLQotICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IHRoZSByZW1l
bWJlcmVkIHNldCBiZWNhdXNlIGpldHRpc29uaW5nIG9sZCBjb2RlIGR1cmluZwotICAgIC8vIEVk
ZW4gR0MgaXMgdW5zb3VuZC4gVGhlcmUgbWlnaHQgYmUgYW4gb2xkIG9iamVjdCB3aXRoIGEgc3Ry
b25nIHJlZmVyZW5jZQotICAgIC8vIHRvIHRoZSBjb2RlLgotICAgIGZvciAoY29uc3QgUmVmUHRy
PENvZGVCbG9jaz4mIGNvZGVCbG9jayA6IG1fcmVtZW1iZXJlZCkKLSAgICAgICAgY29kZUJsb2Nr
LT52aXNpdFN0cm9uZ2x5KHZpc2l0b3IpOwotfQotCiB2b2lkIENvZGVCbG9ja1NldDo6cmVtZW1i
ZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKEhlYXAqIGhlYXApCiB7CiAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgIGRhdGFMb2coIlJlbWVtYmVyaW5nICIsIG1fY3VycmVudGx5RXhlY3V0
aW5nLnNpemUoKSwgIiBjb2RlIGJsb2Nrcy5cbiIpOwotICAgIGZvciAoY29uc3QgUmVmUHRyPENv
ZGVCbG9jaz4mIGNvZGVCbG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFw
LT5hZGRUb1JlbWVtYmVyZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Ci0KLSAg
ICAvLyBJdCdzIHNhZmUgdG8gY2xlYXIgdGhlc2UgUmVmUHRyIHNldHMgYmVjYXVzZSB3ZSB3b24n
dCBkZWxldGUgdGhlIENvZGVCbG9ja3MKLSAgICAvLyBpbiB0aGVtIHVudGlsIHRoZSBuZXh0IEdD
LCBhbmQgd2UnbGwgcmVjb21wdXRlIHRoZW0gYXQgdGhhdCB0aW1lLgorICAgIGZvciAoQ29kZUJs
b2NrKiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAgaGVhcC0+YWRk
VG9SZW1lbWJlcmVkU2V0KGNvZGVCbG9jayk7CiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xl
YXIoKTsKLSAgICBtX3JlbWVtYmVyZWQuY2xlYXIoKTsKIH0KIAogdm9pZCBDb2RlQmxvY2tTZXQ6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTE3MSw4ICsxMTYsOCBAQCB2b2lkIENv
ZGVCbG9ja1NldDo6ZHVtcChQcmludFN0cmVhbSYgb3V0CiAgICAgICAgIG91dC5wcmludChjb21t
YSwgcG9pbnRlckR1bXAoY29kZUJsb2NrKSk7CiAgICAgb3V0LnByaW50KCJdLCBjdXJyZW50bHlF
eGVjdXRpbmcgPSBbIik7CiAgICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKLSAgICBmb3IgKGNv
bnN0IFJlZlB0cjxDb2RlQmxvY2s+JiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykK
LSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjb2RlQmxvY2suZ2V0KCkpKTsK
KyAgICBmb3IgKENvZGVCbG9jayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY29kZUJsb2NrKSk7CiAgICAgb3V0
LnByaW50KCJdfSIpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2Rl
QmxvY2tTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2Rl
QmxvY2tTZXQuaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQ29kZUJsb2NrU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw4IEBAIHB1Ymxp
YzoKICAgICB+Q29kZUJsb2NrU2V0KCk7CiAgICAgCiAgICAgLy8gQWRkIGEgQ29kZUJsb2NrLiBU
aGlzIGlzIG9ubHkgY2FsbGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCi0gICAgdm9pZCBh
ZGQoUGFzc1JlZlB0cjxDb2RlQmxvY2s+KTsKKyAgICB2b2lkIGFkZChDb2RlQmxvY2sqKTsKICAg
ICAKLSAgICAvLyBDbGVhciBtYXJrIGJpdHMgZm9yIGNlcnRhaW4gQ29kZUJsb2NrcyBkZXBlbmRp
bmcgb24gdGhlIHR5cGUgb2YgY29sbGVjdGlvbi4KLSAgICB2b2lkIGNsZWFyTWFya3NGb3JFZGVu
Q29sbGVjdGlvbihjb25zdCBWZWN0b3I8Y29uc3QgSlNDZWxsKj4mKTsKLQogICAgIC8vIENsZWFy
IGFsbCBtYXJrIGJpdHMgZm9yIGFsbCBDb2RlQmxvY2tzLgogICAgIHZvaWQgY2xlYXJNYXJrc0Zv
ckZ1bGxDb2xsZWN0aW9uKCk7CiAKQEAgLTcyLDEwICs2OSw2IEBAIHB1YmxpYzoKICAgICAKICAg
ICB2b2lkIHJlbW92ZShDb2RlQmxvY2sqKTsKICAgICAKLSAgICAvLyBUcmFjZSBhbGwgbWFya2Vk
IGNvZGUgYmxvY2tzLiBUaGUgQ29kZUJsb2NrIGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YKLSAgICAv
LyBtYXlCZUV4ZWN1dGluZy4KLSAgICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7Ci0K
ICAgICAvLyBBZGQgYWxsIGN1cnJlbnRseSBleGVjdXRpbmcgQ29kZUJsb2NrcyB0byB0aGUgcmVt
ZW1iZXJlZCBzZXQgdG8gYmUgCiAgICAgLy8gcmUtc2Nhbm5lZCBkdXJpbmcgdGhlIG5leHQgY29s
bGVjdGlvbi4KICAgICB2b2lkIHJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcyhI
ZWFwKik7CkBAIC0xMDQsMTMgKzk3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyTWFya3NG
b3JDb2RlQmxvY2tzSW5SZW1lbWJlcmVkRXhlY3V0YWJsZXMoY29uc3QgVmVjdG9yPGNvbnN0IEpT
Q2VsbCo+Jik7CiAgICAgdm9pZCBwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCk7CiAKLSAgICAvLyBU
aGlzIGlzIG5vdCBhIHNldCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNhdXNlIHdlIG5lZWQgdG8g
YmUgYWJsZSB0byBmaW5kCi0gICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBvaW50ZXJzLiBJIGNvdWxk
IGhhdmUgd3JpdHRlbiBhIHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVzCi0gICAgLy8gYW5kIGFs
bCwgYnV0IHRoYXQgc2VlbWVkIGxpa2Ugb3ZlcmtpbGwuCiAgICAgSGFzaFNldDxDb2RlQmxvY2sq
PiBtX29sZENvZGVCbG9ja3M7CiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX25ld0NvZGVCbG9j
a3M7Ci0gICAgSGFzaFNldDxSZWZQdHI8Q29kZUJsb2NrPj4gbV9jdXJyZW50bHlFeGVjdXRpbmc7
Ci0gICAgSGFzaFNldDxSZWZQdHI8Q29kZUJsb2NrPj4gbV9yZW1lbWJlcmVkOworICAgIEhhc2hT
ZXQ8Q29kZUJsb2NrKj4gbV9jdXJyZW50bHlFeGVjdXRpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxOTA0
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIwLDE3ICs1MjAsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFy
dFRpbWUsCiAgICAgR0NQSEFTRShNYXJrUm9vdHMpOwogICAgIEFTU0VSVChpc1ZhbGlkVGhyZWFk
U3RhdGUobV92bSkpOwogCi0gICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQo
bV9zbG90VmlzaXRvci5tYXJrU3RhY2soKS5zaXplKCkpOwotICAgIG1fc2xvdFZpc2l0b3IubWFy
a1N0YWNrKCkuZmlsbFZlY3RvcihyZW1lbWJlcmVkU2V0KTsKLQotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIERGRzo6Y2xlYXJDb2RlQmxvY2tNYXJrcygqbV92bSk7Ci0jZW5kaWYKLSAgICBpZiAo
bV9vcGVyYXRpb25JblByb2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKQotICAgICAgICBtX2NvZGVC
bG9ja3MuY2xlYXJNYXJrc0ZvckVkZW5Db2xsZWN0aW9uKHJlbWVtYmVyZWRTZXQpOwotICAgIGVs
c2UKLSAgICAgICAgbV9jb2RlQmxvY2tzLmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpOwot
CiAgICAgLy8gV2UgZ2F0aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFy
ayBiaXRzIGJlY2F1c2UgY29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1h
cmsgYml0cyB0byBkZXRlcm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBD
b25zZXJ2YXRpdmVSb290cyBjb25zZXJ2YXRpdmVSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3Mo
KSwgJm1fc3RvcmFnZVNwYWNlKTsKQEAgLTUzOCwxMCArNTI3LDIwIEBAIHZvaWQgSGVhcDo6bWFy
a1Jvb3RzKGRvdWJsZSBnY1N0YXJ0VGltZSwKICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2Vy
dmF0aXZlUm9vdHMpOwogICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVS
b290cyk7CiAKLSAgICBjbGVhckxpdmVuZXNzRGF0YSgpOworI2lmIEVOQUJMRShERkdfSklUKQor
ICAgIERGRzo6cmVtZW1iZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyNlbmRpZgogCi0gICAgaWYgKG1f
b3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICBpZiAobV9vcGVyYXRp
b25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKSB7CiAgICAgICAgIG1fb3BhcXVlUm9vdHMu
Y2xlYXIoKTsKKyAgICAgICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOworICAgIH0K
KworICAgIFZlY3Rvcjxjb25zdCBKU0NlbGwqPiByZW1lbWJlcmVkU2V0KG1fc2xvdFZpc2l0b3Iu
bWFya1N0YWNrKCkuc2l6ZSgpKTsKKyAgICBtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLmZpbGxW
ZWN0b3IocmVtZW1iZXJlZFNldCk7CisKKyAgICBjbGVhckxpdmVuZXNzRGF0YSgpOworCiAKICAg
ICBtX3Nob3VsZEhhc2hDb25zID0gbV92bS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25z
KCk7CiAKQEAgLTU4Miw2ICs1ODEsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NT
dGFydFRpbWUsCiAgICAgewogICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9z
bG90VmlzaXRvcik7CiAKKyAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwog
ICAgICAgICB2aXNpdEV4dGVybmFsUmVtZW1iZXJlZFNldCgpOwogICAgICAgICB2aXNpdFNtYWxs
U3RyaW5ncygpOwogICAgICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJv
b3RzKTsKQEAgLTY5Nyw2ICs2OTcsOSBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJS
b290cyhDb25zCiB2b2lkIEhlYXA6OmNsZWFyTGl2ZW5lc3NEYXRhKCkKIHsKICAgICBHQ1BIQVNF
KENsZWFyTGl2ZW5lc3NEYXRhKTsKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1
bGxDb2xsZWN0aW9uKQorICAgICAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrc0ZvckZ1bGxDb2xs
ZWN0aW9uKCk7CisKICAgICBtX29iamVjdFNwYWNlLmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAg
ICBtX29iamVjdFNwYWNlLmNsZWFyTWFya3MoKTsKIH0KQEAgLTgxOCw3ICs4MjEsNiBAQCB2b2lk
IEhlYXA6OnZpc2l0SGFuZGxlU3RhY2soSGVhcFJvb3RWaXNpCiB2b2lkIEhlYXA6OnRyYWNlQ29k
ZUJsb2Nrc0FuZEpJVFN0dWJSb3V0aW5lcygpCiB7CiAgICAgR0NQSEFTRShUcmFjZUNvZGVCbG9j
a3NBbmRKSVRTdHViUm91dGluZXMpOwotICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZChtX3Ns
b3RWaXNpdG9yKTsKICAgICBtX2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5l
cyhtX3Nsb3RWaXNpdG9yKTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2lu
Zzo6VmVyYm9zZSkKQEAgLTk2MywxOCArOTY1LDEyIEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsQ29k
ZUJsb2NrcygpCiAgICAgLy8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZl
IHRvIGRlbGV0ZSBhbGwgSmF2YVNjcmlwdCBjb2RlLCBzaW5jZQogICAgIC8vIHdlJ2xsIGVuZCB1
cCByZXR1cm5pbmcgdG8gZGVsZXRlZCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZtLT5l
bnRyeVNjb3BlKTsKKyAgICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0
aW9uKTsKIAogICAgIGNvbXBsZXRlQWxsREZHUGxhbnMoKTsKIAotICAgIGZvciAoRXhlY3V0YWJs
ZUJhc2UqIGN1cnJlbnQgOiBtX2V4ZWN1dGFibGVzKSB7Ci0gICAgICAgIGlmICghY3VycmVudC0+
aXNGdW5jdGlvbkV4ZWN1dGFibGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBz
dGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlKCk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlv
biB8fCBtX29wZXJhdGlvbkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwotICAgIG1fY29kZUJs
b2Nrcy5jbGVhck1hcmtzRm9yRnVsbENvbGxlY3Rpb24oKTsKLSAgICBtX2NvZGVCbG9ja3MuZGVs
ZXRlVW5tYXJrZWRBbmRVbnJlZmVyZW5jZWQoRnVsbENvbGxlY3Rpb24pOworICAgIGZvciAoRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgOiBtX2V4ZWN1dGFibGVzKQorICAgICAgICBleGVjdXRh
YmxlLT5jbGVhckNvZGUoKTsKIH0KIAogdm9pZCBIZWFwOjpkZWxldGVBbGxVbmxpbmtlZENvZGVC
bG9ja3MoKQpAQCAtOTk0LDkgKzk5MCw5IEBAIHZvaWQgSGVhcDo6Y2xlYXJVbm1hcmtlZEV4ZWN1
dGFibGVzKCkKICAgICAgICAgaWYgKGlzTWFya2VkKGN1cnJlbnQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIGV4ZWN1dGFibGUgbWVtb3J5
IGlzIGxpbWl0ZWQgb24gc29tZSBwbGF0Zm9ybXMgYW5kIGJlY2F1c2UKLSAgICAgICAgLy8gQ29k
ZUJsb2NrIHJlcXVpcmVzIGVhZ2VyIGZpbmFsaXphdGlvbi4KLSAgICAgICAgRXhlY3V0YWJsZUJh
c2U6OmNsZWFyQ29kZVZpcnR1YWwoY3VycmVudCk7CisgICAgICAgIC8vIEVhZ2VybHkgZGVyZWZl
cmVuY2UgdGhlIEV4ZWN1dGFibGUncyBKSVRDb2RlIGluIG9yZGVyIHRvIHJ1biB3YXRjaHBvaW50
CisgICAgICAgIC8vIGRlc3RydWN0b3JzLiBPdGhlcndpc2UsIHdhdGNocG9pbnRzIG1pZ2h0IGZp
cmUgZm9yIGRlbGV0ZWQgQ29kZUJsb2Nrcy4KKyAgICAgICAgY3VycmVudC0+Y2xlYXJDb2RlKCk7
CiAgICAgICAgIHN0ZDo6c3dhcChtX2V4ZWN1dGFibGVzW2ldLCBtX2V4ZWN1dGFibGVzLmxhc3Qo
KSk7CiAgICAgICAgIG1fZXhlY3V0YWJsZXMucmVtb3ZlTGFzdCgpOwogICAgIH0KQEAgLTExNTAs
NyArMTE0Niw2IEBAIHZvaWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmEKICAg
ICBHQ1BIQVNFKFN0YXJ0aW5nQ29sbGVjdGlvbik7CiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxl
Y3Rpb24oY29sbGVjdGlvblR5cGUpKSB7CiAgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9
IEZ1bGxDb2xsZWN0aW9uOwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7
CiAgICAgICAgIG1fc2hvdWxkRG9GdWxsQ29sbGVjdGlvbiA9IGZhbHNlOwogICAgICAgICBpZiAo
T3B0aW9uczo6bG9nR0MoKSkKICAgICAgICAgICAgIGRhdGFMb2coIkZ1bGxDb2xsZWN0aW9uLCAi
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3
IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgQVNTRVJUKCFj
YWxsRnJhbWUtPnZtKCkuZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIFRoaXNURFpNb2RlIHRoaXNU
RFpNb2RlID0gY2FsbGVyQ29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdHJ1Y3Rv
cktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQgPyBUaGlzVERaTW9kZTo6QWx3YXlz
Q2hlY2sgOiBUaGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRlZDsKLSAgICAgICAgZXZhbCA9IGNhbGxl
ckNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2Rl
QmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpLCB0aGlzVERaTW9kZSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7Cisg
ICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNh
bGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgp
LCB0aGlzVERaTW9kZSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CiAgICAgICAg
IGlmICghZXZhbCkKICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3
YXJlSklUU3R1YlJvdXRpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIFBh
c3NSZWZQdHI8SklUU3R1YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWIKIC8vIEhlbHBlciBmb3IgdGhl
IGNyZWF0aW9uIG9mIHNpbXBsZSBzdHViIHJvdXRpbmVzIHRoYXQgbmVlZCBubyBoZWxwIGZyb20g
dGhlIEdDLiBOb3RlCiAvLyB0aGF0IGNvZGVCbG9jayBnZXRzICJleGVjdXRlZCIgbW9yZSB0aGFu
IG9uY2UuCiAjZGVmaW5lIEZJTkFMSVpFX0NPREVfRk9SX0dDX0FXQVJFX1NUVUIoY29kZUJsb2Nr
LCBwYXRjaEJ1ZmZlciwgbWFrZXNDYWxscywgY2VsbCwgZGF0YUxvZ0ZBcmd1bWVudHMpIFwKLSAg
ICAoY3JlYXRlSklUU3R1YlJvdXRpbmUoRklOQUxJWkVfQ09ERV9GT1IoKGNvZGVCbG9jayksIChw
YXRjaEJ1ZmZlciksIGRhdGFMb2dGQXJndW1lbnRzKSwgKihjb2RlQmxvY2spLT52bSgpLCAoY29k
ZUJsb2NrKS0+b3duZXJFeGVjdXRhYmxlKCksIChtYWtlc0NhbGxzKSwgKGNlbGwpKSkKKyAgICAo
Y3JlYXRlSklUU3R1YlJvdXRpbmUoRklOQUxJWkVfQ09ERV9GT1IoKGNvZGVCbG9jayksIChwYXRj
aEJ1ZmZlciksIGRhdGFMb2dGQXJndW1lbnRzKSwgKihjb2RlQmxvY2spLT52bSgpLCAoY29kZUJs
b2NrKSwgKG1ha2VzQ2FsbHMpLCAoY2VsbCkpKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEs
MjggKzEyMSw2IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6
OmNocm9ubzo6bWlsbGlzZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXBlKQotICAgIHsK
LSAgICAgICAgc3dpdGNoIChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSW50ZXJwcmV0ZXJUaHVu
azoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNo
cm9ubzo6bWlsbGlzZWNvbmRzPigKLSAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25k
cyg1KSk7Ci0gICAgICAgIGNhc2UgQmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICAvLyBFZmZlY3Rp
dmVseSAxMCBhZGRpdGlvbmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAotICAgICAg
ICAgICAgLy8gSW50ZXJwcmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KLSAgICAgICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPigKLSAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygxNSkpOwotICAgICAg
ICBjYXNlIERGR0pJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25f
Y2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKLSAgICAgICAgICAgICAgICBzdGQ6OmNo
cm9ubzo6c2Vjb25kcygyMCkpOwotICAgICAgICBjYXNlIEZUTEpJVDoKLSAgICAgICAgICAgIHJl
dHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRz
PigKLSAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOwotICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1h
eCgpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklU
VHlwZSBleHBlY3RlZExvd2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTkw
NDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjY2LDcgKzY2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3Ry
dWN0aW9uKikKICAgICBmb3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2Fs
bGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAg
ICBlbWl0SW5pdFJlZ2lzdGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsK
IAotICAgIGVtaXRXcml0ZUJhcnJpZXIobV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsK
KyAgICBlbWl0V3JpdGVCYXJyaWVyKG1fY29kZUJsb2NrKTsKIAogICAgIGVtaXRFbnRlck9wdGlt
aXphdGlvbkNoZWNrKCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsMTUgKzEyNzMs
MTMgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAg
ICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1
ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gcmVwbGFjZW1lbnRD
b2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIENvZGVCbG9j
ayogcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CiAg
ICAgICAgIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAgICAg
ICAgIHZtLCByZXBsYWNlbWVudENvZGVCbG9jay5nZXQoKSwgMCwgREZHOjpERkdNb2RlLCBieXRl
Y29kZUluZGV4LAorICAgICAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBudWxscHRy
LCBERkc6OkRGR01vZGUsIGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBtdXN0SGFuZGxlVmFs
dWVzLCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKLSAg
ICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCByZXBsYWNl
bWVudENvZGVCbG9jay0+aGFzT25lUmVmKCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBp
bGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoMCwgMCk7
Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxv
Y2sgPSBjb2RlQmxvY2stPnJlcGxhY2VtZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDggKzQzLDkgQEAgUmVmPEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrPgogfQogCiB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21w
aWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoCi0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdD
b2RlQmxvY2spCiB7CisgICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXBy
b2ZpbGVkREZHQ29kZUJsb2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgp
LT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIAogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlT1NSKCkpCkBAIC01NCw4ICs1NSw5IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2sKIH0KIAogdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KQorICAgIENvZGVCbG9jayogY29kZUJsb2Nr
LCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1
bHQpCiB7CisgICAgQVNTRVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNv
ZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKICAgICAKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpAQCAtNjYsNyArNjgsNyBA
QCB2b2lkIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgCiAgICAgY29k
ZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQocmVzdWx0KTsKIAotICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
azo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywg
cHJvZmlsZWRERkdDb2RlQmxvY2ssIHJlc3VsdCk7CiB9CiAKIH0gLy8gSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDggKzQ0LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlZjxK
SVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKCk7CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2Rl
QmxvY2sqKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0
ZShDb2RlQmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2
b2lkIGNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqLCBD
b2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVk
REZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCkgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2
aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjI3LDE1ICsyMjcsMTQgQEAgc3RhdGljIElubGluZUNhY2hlQWN0
aW9uIHRyeUNhY2hlR2V0QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAg
IENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgU2NyaXB0RXhl
Y3V0YWJsZSogb3duZXIgPSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4g
bmV3Q2FzZTsKIAogICAgIGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUg
PT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkKLSAgICAgICAgbmV3Q2FzZSA9IEFjY2Vz
c0Nhc2U6OmdldExlbmd0aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKKyAg
ICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nl
c3NDYXNlOjpBcnJheUxlbmd0aCk7CiAgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUp
ICYmIHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQotICAgICAg
ICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6
U3RyaW5nTGVuZ3RoKTsKKyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2
bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOwogICAgIGVsc2UgewogICAg
ICAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgSW5s
aW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAmJiAhbG9hZFRhcmdl
dEZyb21Qcm94eSkgewogICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAg
cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB0cnVlKTsKLSAgICAg
ICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZih2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHN0
dWJJbmZvLmluaXRHZXRCeUlkU2VsZih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAg
ICAgfQogCkBAIC0yNzksMTAgKzI3OCwxMCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5
Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQo
KSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3BlcnR5TWlzcygKLSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlO
YW1lLmltcGwoKSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAg
ICAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywg
c3RydWN0dXJlLCBzbG90LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2Rl
QmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAogICAgICAgICAgICAgICAg
ICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMzAzLDcgKzMwMiw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5
SUQKICAgICAgICAgICAgIHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0ZXI7CiAKICAgICAg
ICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldCgKLSAgICAgICAgICAgIHZtLCBvd25lciwgdHlw
ZSwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwK
KyAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25k
aXRpb25TZXQsIGxvYWRUYXJnZXRGcm9tUHJveHksCiAgICAgICAgICAgICBzbG90LndhdGNocG9p
bnRTZXQoKSwgc2xvdC5pc0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6
IG51bGxwdHIsCiAgICAgICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNs
b3RCYXNlKCkgOiBudWxscHRyKTsKICAgICB9CkBAIC0zNTcsNyArMzU2LDYgQEAgc3RhdGljIElu
bGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25D
YWNoZTsKICAgICAKICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4
ZWN1dGFibGUoKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgaWYgKCFiYXNlVmFs
dWUuaXNDZWxsKCkpCkBAIC0zODUsMTEgKzM4MywxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rp
b24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1Yklu
Zm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAg
YXBwcm9wcmlhdGVPcHRpbWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKAotICAgICAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJl
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9j
aywgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gUmV0cnlDYWNoZUxhdGVyOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNl
ID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwgb3duZXIsIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwg
Y29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6
TmV3UHJvcGVydHkpOwogCkBAIC00MTEsMTIgKzQwOSwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVB
Y3Rpb24gdHJ5Q2FjaGVQdXRCeUlECiAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBOb3REaXJl
Y3QpIHsKICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0ZUNvbmRpdGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2bSwgb3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIG5ld1N0cnVjdHVy
ZSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2
bSwgb3duZXIsIHN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7
CisgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgY29kZUJs
b2NrLCBzdHJ1Y3R1cmUsIG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAg
ICAgICB9CiAgICAgfSBlbHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5p
c0NhY2hlYWJsZVNldHRlcigpKSB7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9t
KCkpIHsKQEAgLTQyNSwxMyArNDIzLDEzIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlD
YWNoZVB1dEJ5SUQKICAgICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsK
ICAgICAgICAgICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0ZUNvbmRpdGlvbnNGb3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHZtLCBvd25lciwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRl
bnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMs
IHN0cnVjdHVyZSwgc2xvdC5iYXNlKCksIGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAg
aWYgKCFjb25kaXRpb25TZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R2l2ZVVwT25DYWNoZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmV3Q2FzZSA9IEFj
Y2Vzc0Nhc2U6OnNldHRlcigKLSAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6
OkN1c3RvbVNldHRlciwgc3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCisg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyLCBz
dHJ1Y3R1cmUsIGludmFsaWRPZmZzZXQsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBz
bG90LmN1c3RvbVNldHRlcigpLCBzbG90LmJhc2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC00NDAs
NyArNDM4LDcgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAg
ICAgICAgICAgaWYgKHNsb3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICAgICAgICAg
IGNvbmRpdGlvblNldCA9CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0Zv
clByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVy
LCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2Uo
KSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1Zh
bGlkKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAg
ICAgICAgICAgIG9mZnNldCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNl
dCgpOwpAQCAtNDQ4LDcgKzQ0Niw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNo
ZVB1dEJ5SUQKICAgICAgICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwog
CiAgICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAgICAgICAgICAg
ICAgIHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29u
ZGl0aW9uU2V0KTsKKyAgICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpT
ZXR0ZXIsIHN0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC00OTEsNyArNDg5LDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0
Y2hJbigKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJT
Y3JpcHRFeGVjdXRhYmxlKCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGJhc2UtPnN0cnVjdHVyZSh2bSk7CiAgICAgCkBAIC00OTksMTcgKzQ5
NiwxNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIGlmICh3
YXNGb3VuZCkgewogICAgICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0KAotICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAg
ICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2Uo
KSwgaWRlbnQuaW1wbCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbmRp
dGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50
LmltcGwoKSk7CisgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIGlk
ZW50LmltcGwoKSk7CiAgICAgfQogICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAg
ICAgICAgcmV0dXJuIEdpdmVVcE9uQ2FjaGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNz
Q2FzZT4gbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmluKAotICAgICAgICB2bSwgb3duZXIsIHdhc0Zv
dW5kID8gQWNjZXNzQ2FzZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVjdHVyZSwg
Y29uZGl0aW9uU2V0KTsKKyAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3ND
YXNlOjpJbkhpdCA6IEFjY2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQp
OwogCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nl
c3NDYXNlKHZtLCBjb2RlQmxvY2ssIGlkZW50LCBXVEY6Om1vdmUobmV3Q2FzZSkpOwogICAgIGlm
ICghY29kZVB0cikKQEAgLTU1OCw4ICs1NTUsOCBAQCB2b2lkIGxpbmtGb3IoCiAgICAgVk0qIHZt
ID0gY2FsbGVyQ29kZUJsb2NrLT52bSgpOwogICAgIAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZv
LmlzTGlua2VkKCkpOwotICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJh
bWUoKS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2Vl
bkNhbGxlZShleGVjLT5jYWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBjYWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+
Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJD
b2RlQmxvY2ssIGNhbGxlZSk7CisgICAgY2FsbExpbmtJbmZvLnNldExhc3RTZWVuQ2FsbGVlKGV4
ZWMtPmNhbGxlckZyYW1lKCktPnZtKCksIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKICAgICBp
ZiAoc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRh
dGFMb2coIkxpbmtpbmcgY2FsbCBpbiAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiIGF0ICIsIGNhbGxM
aW5rSW5mby5jb2RlT3JpZ2luKCksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2Nr
KSwgIiwgZW50cnlwb2ludCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwYXRjaE5lYXJDYWxsKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0
aW9uTGFiZWwoY29kZVB0cikpOwpAQCAtODc2LDcgKzg3Myw3IEBAIHZvaWQgbGlua1BvbHltb3Jw
aGljQ2FsbCgKICAgICAgICAgICAgICgiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0
dXJuIHBvaW50ICVwLCB0YXJnZXRzICVzIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNh
bGxlckNvZGVCbG9jaykuZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCku
bGFiZWxBdE9mZnNldCgwKS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRv
Q1N0cmluZyhsaXN0RHVtcChjYWxsQ2FzZXMpKS5kYXRhKCkpKSwKLSAgICAgICAgKnZtLCBjYWxs
ZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLT5jYWxsZXJGcmFtZSgpLCBjYWxs
TGlua0luZm8sIGNhbGxDYXNlcywKKyAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2ssIGV4ZWMt
PmNhbGxlckZyYW1lKCksIGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAogICAgICAgICBXVEY6Om1v
dmUoZmFzdENvdW50cykpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhK
dW1wKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDcgQEAgTExJ
TlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICBpZiAoIXN0cnVj
dHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVy
ZS0+dHlwZUluZm8oKS5wcm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQogICAgICAgICAgICAgJiYg
IXN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSkgewotICAgICAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSk7CisgICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2sp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7CiAKQEAgLTY0MSw3ICs2NDEsNyBAQCBMTElOVF9TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT50eXBl
SW5mbygpLnByb2hpYml0c1Byb3BlcnR5Q2FjaGluZygpCiAgICAgICAgICAgICAmJiBiYXNlQ2Vs
bCA9PSBzbG90LmJhc2UoKSkgewogCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVC
YXJyaWVyKGNvZGVCbG9jayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LnR5
cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAg
R0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtLmhl
YXApOwpAQCAtNjU4LDcgKzY1OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4gPSBzdHJ1Y3R1cmUtPnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNb
N10udS5zdHJ1Y3R1cmVDaGFpbi5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGNoYWluKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdz
ID0gc3RhdGljX2Nhc3Q8UHV0QnlJZEZsYWdzPigKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwY1s4XS51LnB1dEJ5SWRGbGFncyB8CkBAIC0xMTkwLDggKzExOTAsOCBAQCBpbmxpbmUgU2xv
d1BhdGhSZXR1cm5UeXBlIHNldFVwQ2FsbChFeGVjCiAgICAgICAgIAogICAgICAgICBpZiAoY2Fs
bExpbmtJbmZvLT5pc09uTGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUo
KTsKLSAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjYWxsZWUpOwotICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RT
ZWVuQ2FsbGVlLnNldCh2bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2Fs
bGVlKTsKKyAgICAgICAgY2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxv
Y2ssIGNhbGxlZSk7CisgICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KHZt
LCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGlu
ZUNvZGVUYXJnZXQgPSBjb2RlUHRyOwogICAgICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICAg
ICAgY29kZUJsb2NrLT5saW5rSW5jb21pbmdDYWxsKGV4ZWMsIGNhbGxMaW5rSW5mbyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRlX3RoaXMpCiAKICAgICBhdXRvJiBjYWNoZVdyaXRl
QmFycmllciA9IHBjWzRdLnUuanNDZWxsOwogICAgIGlmICghY2FjaGVXcml0ZUJhcnJpZXIpCi0g
ICAgICAgIGNhY2hlV3JpdGVCYXJyaWVyLnNldChleGVjLT52bSgpLCBleGVjLT5jb2RlQmxvY2so
KS0+b3duZXJFeGVjdXRhYmxlKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY2FjaGVXcml0ZUJh
cnJpZXIuc2V0KGV4ZWMtPnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CiAg
ICAgZWxzZSBpZiAoY2FjaGVXcml0ZUJhcnJpZXIudW52YWxpZGF0ZWRHZXQoKSAhPSBKU0NlbGw6
OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSAmJiBjYWNoZVdyaXRlQmFycmllci5nZXQoKSAh
PSBjb25zdHJ1Y3RvcikKICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0V2l0aG91dFdyaXRl
QmFycmllcihKU0NlbGw6OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSk7CiAKQEAgLTI1MCw3
ICsyNTAsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKICAgICAgICAgaWYg
KG15U3RydWN0dXJlICE9IG90aGVyU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBpZiAob3RoZXJT
dHJ1Y3R1cmUpCiAgICAgICAgICAgICAgICAgcGNbM10udS50b1RoaXNTdGF0dXMgPSBUb1RoaXND
b25mbGljdGVkOwotICAgICAgICAgICAgcGNbMl0udS5zdHJ1Y3R1cmUuc2V0KHZtLCBleGVjLT5j
b2RlQmxvY2soKS0+b3duZXJFeGVjdXRhYmxlKCksIG15U3RydWN0dXJlKTsKKyAgICAgICAgICAg
IHBjWzJdLnUuc3RydWN0dXJlLnNldCh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG15U3RydWN0dXJl
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIHBjWzNdLnUudG9UaGlzU3RhdHVz
ID0gVG9UaGlzQ29uZmxpY3RlZDsKQEAgLTUyNiw4ICs1MjYsOCBAQCBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfdG9fcHJpbWl0aXZlKQogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVyKQog
ewogICAgIEJFR0lOKCk7Ci0gICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhlY3V0YWJsZSA9IGV4
ZWMtPmNvZGVCbG9jaygpLT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICBIZWFwOjpoZWFwKG93bmVy
RXhlY3V0YWJsZSktPndyaXRlQmFycmllcihvd25lckV4ZWN1dGFibGUpOworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSGVhcDo6aGVhcChjb2RlQmxv
Y2spLT53cml0ZUJhcnJpZXIoY29kZUJsb2NrKTsKICAgICBFTkQoKTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlz
aW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgaW5saW5lIHZvaWQgdHJ5
Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKAogICAgICAgICBzY29wZS0+c3RydWN0dXJlKCktPmRpZENh
Y2hlUHJvcGVydHlSZXBsYWNlbWVudChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
IAogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOworICAgICAgICBwY1s1XS51LnN0
cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLCBzY29wZS0+c3RydWN0dXJlKCkpOwog
ICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgIH0KIH0K
QEAgLTE2Miw3ICsxNjIsNyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZUdldEZyb21TY29wZUdsb2Jh
bCgKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2
bSk7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0
dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBj
b2RlQmxvY2ssIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0g
c2xvdC5jYWNoZWRPZmZzZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdHVy
ZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNDUgQEAgdm9pZCBF
eGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlKCkKICNlbmRpZgogICAgIG1fbnVtUGFyYW1ldGVyc0Zv
ckNhbGwgPSBOVU1fUEFSQU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgbV9udW1QYXJhbWV0ZXJz
Rm9yQ29uc3RydWN0ID0gTlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOworCisgICAgaWYgKGNs
YXNzSW5mbygpID09IEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0
aGlzKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7Cisg
ICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFi
bGU6OmluZm8oKSkgeworICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2Rl
QmxvY2suY2xlYXIoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxv
Y2suY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJ
bmZvKCkgPT0gUHJvZ3JhbUV4ZWN1dGFibGU6OmluZm8oKSkgeworICAgICAgICBQcm9ncmFtRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwor
ICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAg
ZXhlY3V0YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChjbGFzc0luZm8oKSA9PSBNb2R1bGVQcm9ncmFtRXhl
Y3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAg
IGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAgICBl
eGVjdXRhYmxlLT5tX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAg
ICAgICBleGVjdXRhYmxlLT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisg
ICAgaWYgKGNsYXNzSW5mbygpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6aW5mbygpKSB7Cisg
ICAgICAgIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxXZWJBc3Nl
bWJseUV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tG
b3JDYWxsLmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEFT
U0VSVChjbGFzc0luZm8oKSA9PSBOYXRpdmVFeGVjdXRhYmxlOjppbmZvKCkpOwogfQogCiAjaWYg
RU5BQkxFKERGR19KSVQpCkBAIC0xMjMsNyArMTYyLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxl
OjppbnN0YWxsQ29kZShWTSYgdgogewogICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7
CiAgICAgCi0gICAgUmVmUHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOworICAgIENvZGVCbG9j
ayogb2xkQ29kZUJsb2NrID0gbnVsbHB0cjsKICAgICAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7
CiAgICAgY2FzZSBHbG9iYWxDb2RlOiB7CkBAIC0xMzIsOCArMTcxLDggQEAgdm9pZCBTY3JpcHRF
eGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdgogICAgICAgICAKICAgICAgICAgQVNTRVJUKGtp
bmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICAKLSAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhl
Y3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrOwotICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dy
YW1Db2RlQmxvY2sgPSBjb2RlQmxvY2s7CisgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFi
bGUtPm1fcHJvZ3JhbUNvZGVCbG9jay5nZXQoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9wcm9n
cmFtQ29kZUJsb2NrLnNldE1heUJlTnVsbCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCkBAIC0xNDMsOCArMTgyLDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxl
OjppbnN0YWxsQ29kZShWTSYgdgogCiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxs
KTsKIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX21vZHVsZVByb2dyYW1D
b2RlQmxvY2s7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA9
IGNvZGVCbG9jazsKKyAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9tb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrLmdldCgpOworICAgICAgICBleGVjdXRhYmxlLT5tX21vZHVsZVByb2dy
YW1Db2RlQmxvY2suc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKQEAgLTE1NCw4ICsxOTMsOCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6
Omluc3RhbGxDb2RlKFZNJiB2CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2Rl
Rm9yQ2FsbCk7CiAgICAgICAgIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5t
X2V2YWxDb2RlQmxvY2s7Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayA9IGNv
ZGVCbG9jazsKKyAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJs
b2NrLmdldCgpOworICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2suc2V0TWF5QmVO
dWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAg
IApAQCAtMTY1LDEyICsyMDQsMTIgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29k
ZShWTSYgdgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2Ug
Q29kZUZvckNhbGw6Ci0gICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2Nv
ZGVCbG9ja0ZvckNhbGw7Ci0gICAgICAgICAgICBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNh
bGwgPSBjb2RlQmxvY2s7CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5t
X2NvZGVCbG9ja0ZvckNhbGwuZ2V0KCk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5tX2NvZGVC
bG9ja0ZvckNhbGwuc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgIG9s
ZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwotICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBjb2RlQmxvY2s7Cisg
ICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC5nZXQoKTsKKyAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LnNldE1heUJlTnVsbCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjEwLDcgKzI0OSw3IEBAIHZvaWQgU2Ny
aXB0RXhlY3V0YWJsZTo6aW5zdGFsbENvZGUoVk0mIHYKICAgICB2bS5oZWFwLndyaXRlQmFycmll
cih0aGlzKTsKIH0KIAotUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29k
ZUJsb2NrRm9yKAorQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3Io
CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwg
SlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIFZNKiB2bSA9IHNj
b3BlLT52bSgpOwpAQCAtMjI0LDkgKzI2Myw5IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4
ZWN1dGFibGU6Om5ld0MKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2Fs
bCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCFleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2sp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEV2YWxDb2RlQmxvY2soCisgICAgICAgIHJldHVybiBFdmFsQ29kZUJsb2NrOjpj
cmVhdGUodm0sCiAgICAgICAgICAgICBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5tX3VubGlua2Vk
RXZhbENvZGVCbG9jay5nZXQoKSwgc2NvcGUsCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5zb3Vy
Y2UoKS5wcm92aWRlcigpKSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92
aWRlcigpKTsKICAgICB9CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mbygpID09IFByb2dyYW1FeGVj
dXRhYmxlOjppbmZvKCkpIHsKQEAgLTIzNCw5ICsyNzMsOSBAQCBSZWZQdHI8Q29kZUJsb2NrPiBT
Y3JpcHRFeGVjdXRhYmxlOjpuZXdDCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29k
ZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9wcm9ncmFt
Q29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICByZXR1cm4gUHJv
Z3JhbUNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0
YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAgICAg
ICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCku
c3RhcnRDb2x1bW4oKSkpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlk
ZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSk7CiAgICAgfQogCiAgICAg
aWYgKGNsYXNzSW5mbygpID09IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKQEAg
LTI0NCw5ICsyODMsOSBAQCBSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdD
CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBS
RUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICByZXR1cm4gTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jazo6Y3JlYXRlKHZtLAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJs
ZS0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAg
ICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNl
KCkuc3RhcnRDb2x1bW4oKSkpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJv
dmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSk7CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZv
KCkpOwpAQCAtMjc2LDExICszMTUsMTEgQEAgUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0
YWJsZTo6bmV3QwogICAgIHVuc2lnbmVkIHNvdXJjZU9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJj
ZSgpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxl
LT5zb3VyY2UoKS5zdGFydENvbHVtbigpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5j
dGlvbkNvZGVCbG9jaygKLSAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBwcm92aWRlciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOworICAgIHJldHVybiBG
dW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtLAorICAgICAgICBleGVjdXRhYmxlLCB1bmxpbmtl
ZENvZGVCbG9jaywgc2NvcGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKTsK
IH0KIAotUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2Vt
ZW50Q29kZUJsb2NrRm9yKAorQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNl
bWVudENvZGVCbG9ja0ZvcigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAg
ICAgaWYgKGNsYXNzSW5mbygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKQEAgLTI4OCw5
ICszMjcsOSBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAg
ICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4o
dGhpcyk7CiAgICAgICAgIEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZh
bENvZGVCbG9jayo+KAogICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5i
YXNlbGluZVZlcnNpb24oKSk7Ci0gICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQg
PSBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29w
eVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2
ZShiYXNlbGluZSk7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIHJlc3VsdCA9IEV2YWxDb2RlQmxv
Y2s6OmNyZWF0ZSh2bSgpLAorICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ss
ICpiYXNlbGluZSk7CisgICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoKnZtKCksIGJhc2Vs
aW5lKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yOTksOSArMzM4
LDkgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICBQ
cm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+
KHRoaXMpOwogICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0
PFByb2dyYW1Db2RlQmxvY2sqPigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNv
ZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVC
bG9jaz4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAg
ICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7Ci0gICAgICAgIHJlc3Vs
dC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBy
ZXN1bHQgPSBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0oKSwKKyAgICAgICAgICAgIENvZGVC
bG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgICAgICByZXN1bHQtPnNldEFs
dGVybmF0aXZlKCp2bSgpLCBiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCkBAIC0zMTAsOSArMzQ5LDkgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1
dGFibGU6OgogICAgICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpz
Q2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2sqPigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+
YmFzZWxpbmVWZXJzaW9uKCkpOwotICAgICAgICBSZWZQdHI8TW9kdWxlUHJvZ3JhbUNvZGVCbG9j
az4gcmVzdWx0ID0gYWRvcHRSZWYobmV3IE1vZHVsZVByb2dyYW1Db2RlQmxvY2soCi0gICAgICAg
ICAgICBDb2RlQmxvY2s6OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7Ci0gICAgICAgIHJl
c3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOworICAgICAgICBNb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrKiByZXN1bHQgPSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0oKSwKKyAg
ICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgICAg
ICByZXN1bHQtPnNldEFsdGVybmF0aXZlKCp2bSgpLCBiYXNlbGluZSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogCkBAIC0zMjAsOSArMzU5LDkgQEAgUGFzc1JlZlB0cjxDb2RlQmxv
Y2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKICAgICBGdW5jdGlvbkNvZGVC
bG9jayogYmFzZWxpbmUgPSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KAogICAgICAg
ICBleGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAg
ICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBGdW5jdGlv
bkNvZGVCbG9jaygKLSAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGlu
ZSkpOwotICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOworICAgIEZ1bmN0aW9u
Q29kZUJsb2NrKiByZXN1bHQgPSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtKCksCisgICAg
ICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgIHJlc3VsdC0+
c2V0QWx0ZXJuYXRpdmUoKnZtKCksIGJhc2VsaW5lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
CkBAIC0zNTAsNyArMzg5LDcgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVG
b3JFeAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBKU09iamVjdCog
ZXhjZXB0aW9uID0gMDsKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBuZXdDb2Rl
QmxvY2tGb3Ioa2luZCwgZnVuY3Rpb24sIHNjb3BlLCBleGNlcHRpb24pOworICAgIENvZGVCbG9j
ayogY29kZUJsb2NrID0gbmV3Q29kZUJsb2NrRm9yKGtpbmQsIGZ1bmN0aW9uLCBzY29wZSwgZXhj
ZXB0aW9uKTsKICAgICBpZiAoIWNvZGVCbG9jaykgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChl
eGNlcHRpb24pOwogICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwpAQCAtMzYwLDExICszOTksMTEg
QEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeAogICAgICAgICBjb2Rl
QmxvY2stPnZhbGlkYXRlKCk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0g
ICAgICAgIHNldHVwTExJbnQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIHNldHVwTExJ
bnQodm0sIGNvZGVCbG9jayk7CiAgICAgZWxzZQotICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJs
b2NrLmdldCgpKTsKKyAgICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CiAgICAgCi0gICAg
aW5zdGFsbENvZGUoKmNvZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLmdldCgpLCBjb2RlQmxvY2st
PmNvZGVUeXBlKCksIGNvZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIGluc3Rh
bGxDb2RlKCpjb2RlQmxvY2stPnZtKCksIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgp
LCBjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTAyLDE2ICs1NDEsOSBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsCiAgICAgRXZhbEV4ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGlu
Zm8oKSk7CiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9ldmFsQ29kZUJsb2NrKQotICAgICAgICB0
aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAg
IHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3VubGlua2VkRXZhbENvZGVCbG9jayk7Ci19
Ci0KLXZvaWQgRXZhbEV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAgbV9ldmFsQ29kZUJs
b2NrID0gbnVsbHB0cjsKLSAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5jbGVhcigpOwotICAg
IEJhc2U6OmNsZWFyQ29kZSgpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2sp
CisgICAgICAgIHRoaXNPYmplY3QtPm1fZXZhbENvZGVCbG9jay0+dmlzaXRXZWFrbHkodmlzaXRv
cik7CiB9CiAKIEpTT2JqZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgoRXhlY1N0
YXRlKiBleGVjKQpAQCAtNjE4LDE0ICs2NTAsNyBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTCiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxp
bmtlZFByb2dyYW1Db2RlQmxvY2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2Rl
QmxvY2spCi0gICAgICAgIHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dy
ZWdhdGUodmlzaXRvcik7Ci19Ci0KLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgp
Ci17Ci0gICAgbV9wcm9ncmFtQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX3VubGlua2VkUHJv
Z3JhbUNvZGVCbG9jay5jbGVhcigpOwotICAgIEJhc2U6OmNsZWFyQ29kZSgpOworICAgICAgICB0
aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2stPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogfQog
CiB2b2lkIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC02MzYsMTUgKzY2MSw3IEBAIHZvaWQgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV91bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUpOwogICAgIGlm
ICh0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2spCi0gICAgICAgIHRoaXNPYmpl
Y3QtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci19
Ci0KLXZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAgbV9t
b2R1bGVQcm9ncmFtQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX3VubGlua2VkTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jay5jbGVhcigpOwotICAgIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJs
ZS5jbGVhcigpOwotICAgIEJhc2U6OmNsZWFyQ29kZSgpOworICAgICAgICB0aGlzT2JqZWN0LT5t
X21vZHVsZVByb2dyYW1Db2RlQmxvY2stPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogfQogCiBGdW5j
dGlvbkNvZGVCbG9jayogRnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC02NjcsMjAgKzY4NCwxMyBAQCB2b2lkIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgQVNTRVJUX0dDX09CSkVDVF9J
TkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrRm9yQ2FsbCkKLSAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tG
b3JDYWxsLT52aXNpdFdlYWtseSh2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2Rl
QmxvY2tGb3JDb25zdHJ1Y3QpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29u
c3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3VubGlua2VkRXhlY3V0YWJsZSk7CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fc2luZ2xldG9uRnVuY3Rpb24pOwogfQogCi12b2lkIEZ1bmN0
aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKLXsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBu
dWxscHRyOwotICAgIG1fY29kZUJsb2NrRm9yQ29uc3RydWN0ID0gbnVsbHB0cjsKLSAgICBCYXNl
OjpjbGVhckNvZGUoKTsKLX0KLQogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmZyb21HbG9iYWxDb2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4ZWNTdGF0
ZSYgZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2Vw
dGlvbiwgaW50IG92ZXJyaWRlTGluZU51bWJlcikKQEAgLTcxNiwxNiArNzI2LDEwIEBAIHZvaWQg
V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmUKICAgICBBU1NFUlRfR0NfT0JKRUNU
X0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgRXhlY3V0YWJsZUJhc2U6OnZpc2l0
Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29k
ZUJsb2NrRm9yQ2FsbCkKLSAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52
aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tG
b3JDYWxsLT52aXNpdFdlYWtseSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9tb2R1bGUpOwogfQogCi12b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJD
b2RlKCkKLXsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOwotICAgIEJhc2U6OmNs
ZWFyQ29kZSgpOwotfQotCiB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4
ZWN1dGlvbihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaWYgKGhhc0pJVENvZGVGb3JDYWxsKCkp
CkBAIC03MzQsMTYgKzczOCwxNiBAQCB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFy
ZUZvckV4CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAKLSAgICBSZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFk
b3B0UmVmKG5ldyBXZWJBc3NlbWJseUNvZGVCbG9jaygKLSAgICAgICAgdGhpcywgdm0sIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKSkpOworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLAorICAgICAgICB0aGlzLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpKTsKIAotICAgIFdBU01GdW5jdGlvblBhcnNlcjo6
Y29tcGlsZSh2bSwgY29kZUJsb2NrLmdldCgpLCBtX21vZHVsZS5nZXQoKSwgbV9zb3VyY2UsIG1f
ZnVuY3Rpb25JbmRleCk7CisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKHZtLCBjb2Rl
QmxvY2ssIG1fbW9kdWxlLmdldCgpLCBtX3NvdXJjZSwgbV9mdW5jdGlvbkluZGV4KTsKIAogICAg
IG1faml0Q29kZUZvckNhbGwgPSBjb2RlQmxvY2stPmppdENvZGUoKTsKICAgICBtX2ppdENvZGVG
b3JDYWxsV2l0aEFyaXR5Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICBtX251
bVBhcmFtZXRlcnNGb3JDYWxsID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAKLSAgICBt
X2NvZGVCbG9ja0ZvckNhbGwgPSBjb2RlQmxvY2s7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsLnNl
dCh2bSwgdGhpcywgY29kZUJsb2NrKTsKIAogICAgIEhlYXA6OmhlYXAodGhpcyktPndyaXRlQmFy
cmllcih0aGlzKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDggKzEzOSw2IEBAIHByb3Rl
Y3RlZDoKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0OwogCiBwdWJsaWM6Ci0g
ICAgc3RhdGljIHZvaWQgY2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSopOwotCiAgICAg
UGFzc1JlZlB0cjxKSVRDb2RlPiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpCiAgICAgewogICAg
ICAgICBBU1NFUlQobV9qaXRDb2RlRm9yQ2FsbCk7CkBAIC0zMDYsNiArMzA0LDggQEAgcHJvdGVj
dGVkOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7
CisKICAgICBOYXRpdmVFeGVjdXRhYmxlKFZNJiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24s
IE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKHZt
LCB2bS5uYXRpdmVFeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCBOVU1fUEFSQU1FVEVSU19JU19I
T1NUKQogICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCkBAIC0zNzYsOCArMzc2LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBpbnN0YWxsQ29kZShDb2RlQmxvY2sqKTsKICAgICB2b2lkIGlu
c3RhbGxDb2RlKFZNJiwgQ29kZUJsb2NrKiwgQ29kZVR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOwotICAgIFJlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsK
LSAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2tGb3IoQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCwgSlNGdW5jdGlvbiosIEpTU2NvcGUqLCBKU09iamVjdComIGV4
Y2VwdGlvbik7CisgICAgQ29kZUJsb2NrKiBuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAKICAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1
dGlvbihFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29w
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogICAgIHsKQEAgLTM4OSw2ICszODksNyBA
QCBwdWJsaWM6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENv
ZGVCbG9jayhGdW5jdG9yJiYpOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRh
YmxlQmFzZTsKICAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRl
KiwgSlNGdW5jdGlvbiosIEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAogcHJv
dGVjdGVkOgpAQCAtNDQ3LDIwICs0NDgsMTkgQEAgcHVibGljOgogICAgICAgICAKICAgICBERUNM
QVJFX0lORk87CiAKLSAgICB2b2lkIGNsZWFyQ29kZSgpOwotCiAgICAgRXhlY3V0YWJsZUluZm8g
ZXhlY3V0YWJsZUluZm8oKSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2
YXRpb24oKSwgdXNlc0V2YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgQ29uc3Ry
dWN0b3JLaW5kOjpOb25lLCBmYWxzZSk7IH0KIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygp
IHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQogICAg
IHVuc2lnbmVkIG51bWJlck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFs
Q29kZUJsb2NrLT5udW1iZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQogCiBwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0
YWJsZTsKICAgICBFdmFsRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwg
Ym9vbCk7CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7CiAKLSAgICBSZWZQdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOworICAg
IFdyaXRlQmFycmllcjxFdmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CiAgICAgV3JpdGVC
YXJyaWVyPFVubGlua2VkRXZhbENvZGVCbG9jaz4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2s7CiB9
OwogCkBAIC01MDEsMTEgKzUwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVf
SU5GTzsKIAotICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0KICAgICBFeGVjdXRhYmxlSW5mbyBleGVj
dXRhYmxlSW5mbygpIGNvbnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlv
bigpLCB1c2VzRXZhbCgpLCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBDb25zdHJ1Y3Rv
cktpbmQ6Ok5vbmUsIGZhbHNlKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFeGVj
dXRhYmxlQmFzZTsKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIAogICAgIFBy
b2dyYW1FeGVjdXRhYmxlKEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKQEAgLTUxMyw3
ICs1MTIsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s+IG1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOwotICAgIFJlZlB0cjxQcm9ncmFtQ29k
ZUJsb2NrPiBtX3Byb2dyYW1Db2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPFByb2dyYW1Db2Rl
QmxvY2s+IG1fcHJvZ3JhbUNvZGVCbG9jazsKIH07CiAKIGNsYXNzIE1vZHVsZVByb2dyYW1FeGVj
dXRhYmxlIGZpbmFsIDogcHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpAQCAtNTQzLDE0ICs1NDIs
MTMgQEAgcHVibGljOgogCiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgdm9pZCBjbGVhckNvZGUo
KTsKLQogICAgIEV4ZWN1dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4g
RXhlY3V0YWJsZUluZm8obmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9k
ZSgpLCBmYWxzZSwgZmFsc2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgZmFsc2UpOyB9CiAgICAg
VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2soKSB7IHJldHVybiBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5nZXQoKTsg
fQogCiAgICAgU3ltYm9sVGFibGUqIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUoKSB7IHJl
dHVybiBtX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlw
dEV4ZWN1dGFibGU7CiAKICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBj
b25zdCBTb3VyY2VDb2RlJik7CkBAIC01NTksNyArNTU3LDcgQEAgcHJpdmF0ZToKIAogICAgIFdy
aXRlQmFycmllcjxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1
bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlOwotICAgIFJlZlB0cjxNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrPiBtX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPE1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s+IG1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKIH07CiAKIGNsYXNzIEZ1
bmN0aW9uRXhlY3V0YWJsZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTYw
MCw3ICs1OTgsNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JD
YWxsKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7Cisg
ICAgICAgIHJldHVybiAhIW1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICB9CiAKICAgICBGdW5jdGlv
bkNvZGVCbG9jayogY29kZUJsb2NrRm9yQ2FsbCgpCkBAIC02MTAsNyArNjA4LDcgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBpc0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgewotICAg
ICAgICByZXR1cm4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgICAgIHJldHVybiBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKICAgICB9CiAKICAgICBGdW5jdGlvbkNvZGVCbG9j
ayogY29kZUJsb2NrRm9yQ29uc3RydWN0KCkKQEAgLTY3NiwxMSArNjc0LDEwIEBAIHB1YmxpYzoK
IAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0gICAgCiAgICAg
SW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uRnVuY3Rpb24oKSB7IHJldHVybiBtX3NpbmdsZXRvbkZ1
bmN0aW9uLmdldCgpOyB9CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVC
YXNlOwogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSgKICAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VD
b2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIAog
ICAgICAgICB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVk
IGVuZENvbHVtbik7CkBAIC02OTAsOCArNjg3LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgU2NyaXB0RXhlY3V0YWJsZTsKICAgICAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5j
dGlvbkV4ZWN1dGFibGU+IG1fdW5saW5rZWRFeGVjdXRhYmxlOwotICAgIFJlZlB0cjxGdW5jdGlv
bkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVC
bG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8VHlwZVNldD4g
bV9yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0
T2Zmc2V0OwogICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFZhbHVlPiBtX3NpbmdsZXRvbkZ1bmN0
aW9uOwpAQCAtNzE5LDggKzcxNiw2IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAot
ICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0KICAgICB2b2lkIHByZXBhcmVGb3JFeGVjdXRpb24oRXhl
Y1N0YXRlKik7CiAKICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yQ2FsbCgp
CkBAIC03MjksNiArNzI0LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwg
Y29uc3QgU291cmNlQ29kZSYsIEpTV0FTTU1vZHVsZSosIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgp
OwogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwpAQCAtNzM3LDMwICs3MzMsMTAgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXQVNN
TW9kdWxlPiBtX21vZHVsZTsKICAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXg7CiAKLSAgICBS
ZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICBXcml0
ZUJhcnJpZXI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKIH07CiAj
ZW5kaWYKIAotaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCi17Ci0gICAgc3dpdGNoIChleGVjdXRhYmxlLT50eXBl
KCkpIHsKLSAgICBjYXNlIEV2YWxFeGVjdXRhYmxlVHlwZToKLSAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxFdmFsRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKLSAgICBjYXNlIFBy
b2dyYW1FeGVjdXRhYmxlVHlwZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0
YWJsZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKLSAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0
YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhl
Y3V0YWJsZSktPmNsZWFyQ29kZSgpOwotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBjYXNl
IFdlYkFzc2VtYmx5RXhlY3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwotI2VuZGlmCi0gICAg
Y2FzZSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8
TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSktPmNsZWFyQ29kZSgpOwotICAgIH0KLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAK
LSNlbmRpZgorI2VuZGlmIC8vIEV4ZWN1dGFibGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDE0IEBAIFZNOjpW
TShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBleGNlcHRpb25TdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBFeGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGludGVy
bmFsUHJvbWlzZURlZmVycmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNJbnRlcm5hbFByb21pc2VE
ZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgbW9kdWxlUHJvZ3JhbUNvZGVCbG9j
a1N0cnVjdHVyZS5zZXQoKnRoaXMsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyAgICBldmFsQ29kZUJsb2NrU3RydWN0dXJlLnNl
dCgqdGhpcywgRXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIGZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25D
b2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyNpZiBFTkFC
TEUoV0VCQVNTRU1CTFkpCisgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBXZWJBc3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051
bGwoKSkpOworI2VuZGlmCisKICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNG
aW5hbE9iamVjdDo6Y3JlYXRlKCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpLCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVj
dHVyZS5zZXQoKnRoaXMsIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0
aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3Ry
aW5ncygqdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9u
IDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMwOSw2ICszMDksMTIgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbnRlcm5h
bFByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBuYXRpdmVT
dGRGdW5jdGlvbkNlbGxTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7
CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7CisK
ICAgICBTdHJvbmc8SlNDZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0Nl
bGw+IGVtcHR5UHJvcGVydHlOYW1lRW51bWVyYXRvcjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262306</attachid>
            <date>2015-10-01 17:59:23 -0700</date>
            <delta_ts>2015-10-01 18:51:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149727-20151001175857.patch</filename>
            <type>text/plain</type>
            <size>165491</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxNiBA
QAorMjAxNS0xMC0wMSAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAg
ICAgIENvZGVCbG9jayBzaG91bGQgYmUgYSBHQyBvYmplY3QKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTcyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlIHdhbnQgQ29kZUJsb2NrIHRvIGJlIGEgR0Mg
b2JqZWN0OgorCisgICAgICAgICgxKSBTYW5lIHdyaXRlIGJhcnJpZXJzLiBCZWNhdXNlIENvZGVC
bG9jayB3YXNuJ3QgYSBHQyBvYmplY3QsIHdlIGNvdWxkbid0CisgICAgICAgIGV4ZWN1dGUgYSB3
cml0ZSBiYXJyaWVyIG9uIGl0LiBUaGlzIGNhdXNlZCB1cyB0byBkbyB3ZWlyZCB0aGluZ3MgdGhh
dAorICAgICAgICB3ZXJlIGhhcmQgdG8gcmVhc29uIGFib3V0LCBsaWtlIGV4ZWN1dGluZyBhIGJh
cnJpZXIgb24gYSByZWxhdGVkIGV4ZWN1dGFibGUKKyAgICAgICAgKGV2ZW4gdGhvdWdoIHRoZSBl
eGVjdXRhYmxlIG1pZ2h0IHN0b3AgcG9pbnRpbmcgdG8gdGhlIENvZGVCbG9jayBiZWZvcmUKKyAg
ICAgICAgdGhlIG5leHQgR0MpLCBvciBwcmV0ZW5kaW5nIHRoYXQgYW4gb2JqZWN0IGhhZCB3cml0
dGVuIHRvIGl0c2VsZi4gTm93LAorICAgICAgICB3aGVuIHdlIHdyaXRlIHRvIGEgQ29kZUJsb2Nr
LCB3ZSBiYXJyaWVyIHRoZSBDb2RlQmxvY2ssIGFuZCB0aGF0J3MgdGhhdC4KKworICAgICAgICAo
MikgU2ltcGxlciBtYXJraW5nIGFuZCBkZXN0cnVjdGlvbiBsb2dpYy4gVGhlcmUncyBubyBuZWVk
IHRvIGhhdmUgYQorICAgICAgICBjdXN0b20gcmVtZW1iZXJlZCBzZXQgb3IgYSBkZXN0cnVjdGlv
biBmaXhwb2ludCBpZiB3ZSBqdXN0IG9iZXkgbm9ybWFsCisgICAgICAgIEdDIHJ1bGVzLgorCisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
b2RlQmxvY2s6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVCbG9jazo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OmRlc3Ryb3kpOgorICAg
ICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KToKKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6ZGVzdHJveSk6IEFkZCBDbGFzc0luZm8gYW5kIGRlc3Ryb3kgZnVu
Y3Rpb25zCisgICAgICAgIGJlY2F1c2Ugb3VyIEdDIG9iamVjdCBtb2RlbCByZXF1aXJlcyB0aGVt
LgorCisgICAgICAgIE5vdGUgdGhhdCB3ZSBkbyBub3Qgc2V0IHRoZSBuZWVkc0Rlc3RydWN0aW9u
IGZsYWcuIFNpbmNlIENvZGVCbG9jayBuZWVkcworICAgICAgICBlYWdlciBkZXN0cnVjdGlvbiwg
aXQgcnVucyBpdHMgZGVzdHJ1Y3RvcnMgdGhyb3VnaCBDb2RlQmxvY2tTZXQsCisgICAgICAgIGFu
ZCBub3QgdGhyb3VnaCBub3JtYWwgb2JqZWN0IHN3ZWVwaW5nLgorCisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOiBGYWN0b3Igb3V0IGZpbmlzaENyZWF0aW9uIGZyb20g
dGhlCisgICAgICAgIGNvbnN0cnVjdG9yIGJlY2F1c2Ugb3VyIEdDIG9iamVjdCBtb2RlbCByZXF1
aXJlcyBpdC4gQ2hhbmdlIHdyaXRlCisgICAgICAgIGJhcnJpZXJzIHRvIG5vdGUgdGhlIENvZGVC
bG9jayBhcyB0aGUgb3duZXIuCisKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2Nr
KTogUmVmYWN0b3IgdG8gdXNlIHRoZSBzaGFyZWQKKyAgICAgICAgdW5saW5rSW5jb21pbmdDYWxs
cygpIGZ1bmN0aW9uIGluc3RlYWQgb2Ygcm9sbGluZyBhIGNvcHkgYnkgaGFuZC4KKworICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6OnZpc2l0V2Vha2x5KTogTmV3IGhlbHBlciBmdW5jdGlvbiBmb3Ig
b3duZXIgZXhlY3V0YWJsZXMKKyAgICAgICAgdG8gZG8gd2VhayBtYXJraW5nIHRoYXQgbWlnaHQg
amV0dGlzb24gYSBDb2RlQmxvY2suIE91ciBuZXcgR0MgbG9naWMKKyAgICAgICAgc2F5cyB0aGF0
IGEgQ29kZUJsb2NrIHBvaW50ZXIgaXMgYSBzdHJvbmcgcmVmZXJlbmNlIGJ5IGRlZmF1bHQsIGFu
ZAorICAgICAgICBjbGllbnRzIG5lZWQgdG8gb3B0IGluIGlmIHRoZXkgd2FudCB0byBhbGxvdyBh
IENvZGVCbG9jayB0byBqZXR0aXNvbi4KKyAgICAgICAgVGhpcyBpcyBlYXNpZXIgdG8gZ2V0IHJp
Z2h0IGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBvbmx5IHRob3NlCisgICAgICAgIHNwZWNpZmljIG93
bmVycyB0aGF0IHdhbnQgamV0dGlzb24gYmVoYXZpb3IgbmVlZCB0byB3b3JyeSBhYm91dCBpdCwK
KyAgICAgICAgd2hpbGUgYWxsIG90aGVyIHBvaW50ZXJzIGFyZSB2YWxpZCBieSBkZWZhdWx0Lgor
CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dmlzaXRDaGlsZHJlbik6IFRoZSBkZWZhdWx0IHZp
c2l0IGZ1bmN0aW9uIGtlZXBzCisgICAgICAgIGV2ZXJ5dGhpbmcgYWxpdmUuCisKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KToKKyAgICAgICAgKEpTQzo6Q29k
ZUJsb2NrOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQyk6IE5vIG5lZWQgdG8ga2VlcCBzcGVjaWFs
IHN0YXRlCisgICAgICAgIGFueW1vcmUuIElmIHdlJ3JlIG1hcmtlZCwgd2UncmUgbGl2ZSAtLSBq
dXN0IGxpa2UgYW55IG90aGVyIG9iamVjdC4KKworICAgICAgICAoSlNDOjp0aW1lVG9MaXZlKTog
TW92ZSB0aGlzIGNvZGUgaW50byBDb2RlQmxvY2suY3BwIHNvIHlvdSBjYW4gbWVzcworICAgICAg
ICB3aXRoIGl0IHdpdGhvdXQgcmVjb21waWxpbmcsIGFuZCBhbHNvIGJlY2F1c2UgaXQncyByZWFs
bHkgYSBDb2RlQmxvY2sKKyAgICAgICAgcG9saWN5LgorCisgICAgICAgIChKU0M6OkNvZGVCbG9j
azo6V2Vha1JlZmVyZW5jZUhhcnZlc3Rlcjo6dmlzaXRXZWFrUmVmZXJlbmNlcyk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6VW5jb25kaXRpb25hbEZpbmFsaXplcjo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkpOiBVc2UKKyAgICAgICAgaW50ZXJuYWwgb2JqZWN0cyBmb3IgdmlydHVhbCBjYWxs
YmFja3MgYmVjYXVzZSBHQyBvYmplY3RzIGNhbid0IGhhdmUKKyAgICAgICAgdnRhYmxlcy4KKwor
ICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnVubGlua0luY29taW5nQ2FsbHMpOiBSZW1vdmUgYSBm
YXN0IHBhdGggY2hlY2sgdGhhdCBkb2VzCisgICAgICAgIG5vdCBleGlzdCBpbiB0aGUgY29weSBv
ZiB0aGlzIGNvZGUgaW4gfkNvZGVCbG9jayBiZWNhdXNlIGl0IGlzIG5vdAorICAgICAgICBhY3R1
YWxseSBhbiBvcHRpbWl6YXRpb24uCisKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNl
bWVudCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y29tcHV0ZUNhcGFiaWxpdHlMZXZlbCk6
IE1ha2UgdGhlc2UgZnVuY3Rpb25zIGdlbmVyaWMKKyAgICAgICAgaW5zdGVhZCBvZiB2aXJ0dWFs
IGJlY2F1c2UgR0Mgb2JqZWN0cyBjYW4ndCBoYXZlIHZ0YWJsZXMuCisKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp2aXNpdFN0cm9uZ2x5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjp2aXNpdEFnZ3JlZ2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
dmlzaXRXZWFrUmVmZXJlbmNlcyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpyZXBsYWNlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6Ok1vZHVsZVBy
b2dyYW1Db2RlQmxvY2s6OnJlcGxhY2VtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RXZh
bENvZGVCbG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkNvZGVCbG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFt
Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCk6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6Ok1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbEludGVybmFsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJu
YWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0
eUxldmVsSW50ZXJuYWwpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNvZGVC
bG9jazo6cmVwbGFjZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseUNv
ZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwpOiBEZWxldGVkLgorCisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6dW5saW5rZWRD
b2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFkZHJlc3NPZk51bVBhcmFtZXRl
cnMpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om9mZnNldE9mTnVtUGFyYW1ldGVycyk6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWx0ZXJuYXRpdmUpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2Nr
OjpzcGVjaWFsaXphdGlvbktpbmQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omluc3RydWN0
aW9uQ291bnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldEpJVENvZGUpOgorICAgICAg
ICAoSlNDOjpDb2RlQmxvY2s6Omhhc0Jhc2VsaW5lSklUUHJvZmlsaW5nKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxTdGF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6YWRkQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmFwcGVuZEV4Y2Vw
dGlvbkhhbmRsZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldENvbnN0YW50UmVnaXN0
ZXJzKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZXBsYWNlQ29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpHbG9iYWxDb2RlQmxvY2s6Okdsb2JhbENvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OlByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxv
Y2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb2dyYW1Db2RlQmxvY2s6OlBy
b2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpj
cmVhdGUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlKToKKyAg
ICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVCbG9jazo6dmFyaWFibGUpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2Nr
OjpudW1WYXJpYWJsZXMpOgorICAgICAgICAoSlNDOjpFdmFsQ29kZUJsb2NrOjpFdmFsQ29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVCbG9jazo6dW5saW5rZWRFdmFsQ29kZUJsb2Nr
KToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZSk6CisgICAgICAgIChK
U0M6OkZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpG
dW5jdGlvbkNvZGVCbG9jazo6RnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpXZWJB
c3NlbWJseUNvZGVCbG9jazo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlDb2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5Q29kZUJs
b2NrOjpXZWJBc3NlbWJseUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dW5j
aGVja2VkUik6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2xlYXJWaXNpdFdlYWtseUhhc0Jl
ZW5DYWxsZWQpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6Om1hcmspOgorICAgICAgICAo
SlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpmb3JFYWNoQ29kZUJsb2NrKToKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjpzZXRBbHRlcm5hdGl2ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkNvZGVC
bG9jazo6Y2xlYXJNYXJrcyk6IERlbGV0ZWQuIExvdHMgb2YgbWVjaGFuaWNhbCBjaGFuZ2VzIHRv
CisgICAgICAgIG1hdGNoIHRoZSBsb2dpYyBjaGFuZ2VzIGFib3ZlLgorCisgICAgICAgICogYnl0
ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgor
ICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oOiBQcm92aWRlIGEgcHJvZmlsZWRERkdDb2RlQmxvY2sKKyAg
ICAgICAgdG8gYWxsIGNvbXBpbGF0aW9uIGNhbGxiYWNrcyBpbnN0ZWFkIG9mIHJlcXVpcmluZyB0
aGUgY2FsbGJhY2sgdG8KKyAgICAgICAgc3RvcmUgdGhlIHByb2ZpbGVkREZHQ29kZUJsb2NrLiBU
aGlzIGlzIGhvdyB0aGUgcmVzdCBvZiBjb21waWxhdGlvbgorICAgICAgICBhcm91bmQgdGhlIGNh
bGxiYWNrIHdvcmtzIGFueXdheSwgYW5kIGl0IGlzIGVhc2llciB0byBkbyB0aGluZ3MgdGhpcwor
ICAgICAgICB3YXkgdGhhbiB0byB0aGluayBhYm91dCBob3cgYSBub24tR0MgbWFsbG9jJ2Qgb2Jq
ZWN0IHNob3VsZCBrZWVwIGl0cworICAgICAgICBDb2RlQmxvY2sgYWxpdmUuCisKKyAgICAgICAg
KiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6
OnRyeUdldCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OmdldFNsb3cpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1BvbHltb3JwaGljQWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6QWNjZXNz
Q2FzZTo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpQb2x5bW9ycGhpY0FjY2Vzczo6cmVnZW5l
cmF0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmVTdHViSW5mbzo6YWRkQWNjZXNzQ2FzZSk6IENoYW5nZSB0aGUgb3du
ZXIgZm9yIHdyaXRlCisgICAgICAgIGJhcnJpZXIgcHVycG9zZXMgdG8gQ29kZUJsb2NrLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2UpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkVHJhbnNpdGlv
bnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRUcmFuc2l0aW9uOjpyZWFsbHlBZGQp
OgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkRlc2lyZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKToKKyAgICAgICAgKiBk
ZmcvREZHRHJpdmVyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjb21waWxlKToKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpHcmFwaCk6IERp
dHRvLgorCisgICAgICAgICogZGZnL0RGR0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb2RlOjpvc3JFbnRyeUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpzZXRP
U1JFbnRyeUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlOjpjbGVhck9TUkVudHJ5
QmxvY2spOiBVc2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgCisgICAgICAgIGFjY2Vzc2luZyBvc3JF
bnRyeUJsb2NrIHRvIGhlbHAgd2l0aCB3cml0ZSBiYXJyaWVyIHN0dWZmLgorCisgICAgICAgICog
ZGZnL0RGR0pJVEZpbmFsaXplci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVy
OjpmaW5hbGl6ZSk6CisgICAgICAgIChKU0M6OkRGRzo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1
bmN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpKSVRGaW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9u
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOiBVc2UgQ29kZUJsb2NrIGFzIG93bmVy
IGluc3RlYWQgb2YKKyAgICAgICAgZXhlY3V0YWJsZS4KKworICAgICAgICAqIGRmZy9ERkdPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBkZmcvREZHUGxhbi5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6UGxhbjo6UGxhbik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVhbGx5QWRkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQbGFuOjpub3RpZnlSZWFkeSk6CisgICAgICAgIChKU0M6OkRGRzo6
UGxhbjo6ZmluYWxpemVXaXRob3V0Tm90aWZ5aW5nQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlBsYW46OmZpbmFsaXplQW5kTm90aWZ5Q2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmtleSk6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tz
KToKKyAgICAgICAgKEpTQzo6REZHOjpQbGFuOjpjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bik6CisgICAgICAgIChKU0M6OkRGRzo6UGxhbjo6Y2xlYXJDb2RlQmxvY2tNYXJrcyk6IERlbGV0
ZWQuCisgICAgICAgICogZGZnL0RGR1BsYW4uaDogVXNlIG5vcm1hbCBHQyB3cml0ZSBiYXJyaWVy
IGNvbmNlcHRzIHRvIG1vZGVsIHRoZSBmYWN0CisgICAgICAgIHRoYXQgdGhlIGNvbXBpbGVyIHdy
aXRlcyB0byBDb2RlQmxvY2tzLgorCisgICAgICAgICogZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTERlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjazo6VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAg
ICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjp+VG9GVExE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpERkc6OlRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5
QXN5bmNocm9ub3VzbHkpOgorICAgICAgICAoSlNDOjpERkc6OlRvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZH
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaDoKKyAgICAgICAgKiBkZmcvREZHVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6VG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayk6CisgICAgICAgIChKU0M6
OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6flRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OlJlZjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPlRvRlRM
Rm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSk6CisgICAgICAg
IChKU0M6OkRGRzo6VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6
REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBkZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOiBXZSBhbHdheXMgaGF2ZQorICAgICAgICBhIHByb2Zp
bGVkREZHQ29kZUJsb2NrIHBhc3NlZCB0byB1c2UgLS0gc2VlIGFib3ZlLgorCisgICAgICAgICog
ZGZnL0RGR1dvcmtsaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6Y29tcGxl
dGVBbGxQbGFuc0ZvclZNKToKKyAgICAgICAgKEpTQzo6REZHOjpXb3JrbGlzdDo6cmVtZW1iZXJD
b2RlQmxvY2tzKToKKyAgICAgICAgKEpTQzo6REZHOjpjb21wbGV0ZUFsbFBsYW5zRm9yVk0pOgor
ICAgICAgICAoSlNDOjpERkc6OnJlbWVtYmVyQ29kZUJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6V29ya2xpc3Q6OmNsZWFyQ29kZUJsb2NrTWFya3MpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpERkc6OmNsZWFyQ29kZUJsb2NrTWFya3MpOiBEZWxldGVkLgorICAgICAgICAqIGRmZy9ERkdX
b3JrbGlzdC5oOgorICAgICAgICAoSlNDOjpERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwpOiBS
ZW5hbWVkIHRvIHVzZSByZW1lbWJlcmVkIHNldCB0ZXJtaW5vbG9neS4KKworICAgICAgICAqIGZ0
bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVEZpbmFsaXplcjo6
ZmluYWxpemVGdW5jdGlvbik6CisKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6Cisg
ICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCk6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6YWRkKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVhck1h
cmtzRm9yRnVsbENvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OmRlbGV0
ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKTogTm8gbmVlZCBmb3IgYSBmaXhwb2ludAorICAgICAg
ICBhbnltb3JlIHNpbmNlIHRoZSBHQyBjYW4gdGVsbCB1cyBpZiB3ZSBhcmUgbGl2ZS4KKworICAg
ICAgICAoSlNDOjpDb2RlQmxvY2tTZXQ6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9j
a1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKToKKyAgICAgICAgKEpT
Qzo6Q29kZUJsb2NrU2V0OjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrU2V0OjpjbGVh
ck1hcmtzRm9yRWRlbkNvbGxlY3Rpb24pOiBEZWxldGVkLiBObyBuZWVkIGZvcgorICAgICAgICB0
aGlzIGxvZ2ljIGFueW1vcmUgc2luY2UgdGhlIEdDIHdpbGwgY2xlYXIgb3VyIG1hcmsgYml0Lgor
CisgICAgICAgIChKU0M6OkNvZGVCbG9ja1NldDo6dHJhY2VNYXJrZWQpOiBEZWxldGVkLiBObyBu
ZWVkIGZvciB0aGlzIG1hcmtpbmcKKyAgICAgICAgZml4cG9pbnQgYW55bW9yZSBlaXRoZXIuCisK
KyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgorCisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6bWFya1Jvb3RzKTogTW92ZWQgc29tZSBvZiB0aGlzIGxv
Z2ljIGFyb3VuZCB0byBtYWtlIHRoZQorICAgICAgICBhbGdvcml0aG0gY2xlYXJlci4gCisKKyAg
ICAgICAgKEpTQzo6SGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2Nrcyk6IERlbGV0aW5nIENvZGVCbG9j
a3MgY2FuIG9ubHkgY2xlYXIKKyAgICAgICAgcG9pbnRlcnMgaW1tZWRpYXRlbHk7IHRoZXkgd29u
J3QgZnVsbHkgZGVsZXRlIHVudGlsIHRoZSBuZXh0IEdDIGFuZCBzd2VlcC4KKworICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6ZXZhbCk6CisgICAg
ICAgICogaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5oOiBDb2RlQmxvY2sgaXMgb3duZXIgbm93
LgorCisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6aXNK
SVQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjppc0xvd2VyVGllcik6CisgICAgICAgIChKU0M6
OkpJVENvZGU6OnRpbWVUb0xpdmUpOiBEZWxldGVkLgorCisgICAgICAgICogaml0L0pJVE9wY29k
ZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50ZXIpOiBDb2RlQmxvY2sgaXMg
b3duZXIgbm93LgorCisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChK
U0M6OkpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUpOgorICAgICAg
ICAoSlNDOjpKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25E
aWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KToKKyAgICAgICAgKEpTQzo6SklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAg
ICAqIGppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oOgorCisgICAgICAg
ICogaml0L1JlcGF0Y2guY3BwOgorICAgICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAg
ICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlSZXBhdGNoSW4p
OgorICAgICAgICAoSlNDOjpsaW5rRm9yKToKKyAgICAgICAgKEpTQzo6bGlua1BvbHltb3JwaGlj
Q2FsbCk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlND
OjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAoSlNDOjpMTEludDo6c2V0
VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHA6CisgICAgICAg
IChKU0M6OlNMT1dfUEFUSF9ERUNMKTogCisgICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0
aHMuaDoKKyAgICAgICAgKEpTQzo6Q29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVH
bG9iYWwpOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlR2V0RnJvbVNj
b3BlR2xvYmFsKTogQ29kZUJsb2NrIGlzIG93bmVyIG5vdy4KKworICAgICAgICAqIHJ1bnRpbWUv
RXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVCYXNlOjpjbGVhckNvZGUp
OiBQcm92aWRlIGEgZ2VuZXJpYyBjbGVhckNvZGUoKSBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBi
ZSB1c2VkIG9uIGFueSBFeGVjdXRhYmxlLiBUaGlzIGZpeGVzIGEgdmVyeSBzdWJ0bGUgYnVnIHdo
ZXJlCisgICAgICAgIGRlbGV0ZUFsbENvZGUoKSBkb2VzIG5vdCByZW1vdmUgQ29kZUJsb2NrcyBm
cm9tIG5vbi1mdW5jdGlvbiBleGVjdXRhYmxlcworICAgICAgICB0aGF0IGhhdmUgYmVlbiBzYXZl
ZCBpbiBzdGFjayB0cmFjZXMuCisKKyAgICAgICAgKEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6aW5z
dGFsbENvZGUpOiBXcml0ZUJhcnJpZXIgcmVxdWlyZXMgc3BlY2lhbAorICAgICAgICBoYW5kbGlu
ZyBmb3IgcG9pbnRlcnMgdGhhdCBtYXkgYmUgbnVsbC4KKworICAgICAgICAoSlNDOjpTY3JpcHRF
eGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRh
YmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKTogVXBkYXRlIGZvciBpbnRlcmZhY2UK
KyAgICAgICAgY2hhbmdlcy4KKworICAgICAgICAoSlNDOjpFdmFsRXhlY3V0YWJsZTo6dmlzaXRD
aGlsZHJlbik6CisgICAgICAgIChKU0M6OlByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4p
OgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpXZWJBc3NlbWJseUV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4pOiBWaXNpdCB3
ZWFrbHkgYmVjYXVzZSB3ZSB3YW50CisgICAgICAgIHRvIHBhcnRpY2lwYXRlIGluIGpldHRpc29u
aW5nLgorCisgICAgICAgIChKU0M6OldlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4
ZWN1dGlvbik6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxlOjpjbGVhckNvZGUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpQcm9ncmFtRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6Y2xlYXJDb2RlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6V2ViQXNzZW1ibHlFeGVjdXRhYmxlOjpjbGVhckNvZGUpOiBE
ZWxldGVkLgorCisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVCYXNlOjpnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCk6CisgICAgICAgIChKU0M6
OlNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb24pOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1l
L1ZNLmg6IFByb3ZpZGUgc3RydWN0dXJlcyBiZWNhdXNlIG91ciBHQyByZXF1aXJlcyBpdC4KKwog
MjAxNS0xMC0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHVubmVjZXNzYXJ5IFNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVzLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE5MDQzOCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Miw2ICs4Miw3MCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xh
c3NJbmZvIENvZGVCbG9jazo6c19pbmZvID0geworICAgICJDb2RlQmxvY2siLCAwLCAwLAorICAg
IENSRUFURV9NRVRIT0RfVEFCTEUoQ29kZUJsb2NrKQorfTsKKworY29uc3QgQ2xhc3NJbmZvIEZ1
bmN0aW9uQ29kZUJsb2NrOjpzX2luZm8gPSB7CisgICAgIkZ1bmN0aW9uQ29kZUJsb2NrIiwgJkJh
c2U6OnNfaW5mbywgMCwKKyAgICBDUkVBVEVfTUVUSE9EX1RBQkxFKEZ1bmN0aW9uQ29kZUJsb2Nr
KQorfTsKKworI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKK2NvbnN0IENsYXNzSW5mbyBXZWJBc3Nl
bWJseUNvZGVCbG9jazo6c19pbmZvID0geworICAgICJXZWJBc3NlbWJseUNvZGVCbG9jayIsICZC
YXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShXZWJBc3NlbWJseUNvZGVC
bG9jaykKK307CisjZW5kaWYKKworY29uc3QgQ2xhc3NJbmZvIEdsb2JhbENvZGVCbG9jazo6c19p
bmZvID0geworICAgICJHbG9iYWxDb2RlQmxvY2siLCAmQmFzZTo6c19pbmZvLCAwLAorICAgIENS
RUFURV9NRVRIT0RfVEFCTEUoR2xvYmFsQ29kZUJsb2NrKQorfTsKKworY29uc3QgQ2xhc3NJbmZv
IFByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiUHJvZ3JhbUNvZGVCbG9jayIsICZC
YXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9ncmFtQ29kZUJsb2Nr
KQorfTsKKworY29uc3QgQ2xhc3NJbmZvIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OnNfaW5mbyA9
IHsKKyAgICAiTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayIsICZCYXNlOjpzX2luZm8sIDAsCisgICAg
Q1JFQVRFX01FVEhPRF9UQUJMRShNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKQorfTsKKworY29uc3Qg
Q2xhc3NJbmZvIEV2YWxDb2RlQmxvY2s6OnNfaW5mbyA9IHsKKyAgICAiRXZhbENvZGVCbG9jayIs
ICZCYXNlOjpzX2luZm8sIDAsCisgICAgQ1JFQVRFX01FVEhPRF9UQUJMRShFdmFsQ29kZUJsb2Nr
KQorfTsKKwordm9pZCBGdW5jdGlvbkNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAganNDYXN0PEZ1bmN0aW9uQ29kZUJsb2NrKj4oY2VsbCktPn5GdW5jdGlvbkNvZGVCbG9j
aygpOworfQorCisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQordm9pZCBXZWJBc3NlbWJseUNvZGVC
bG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFdlYkFzc2VtYmx5Q29k
ZUJsb2NrKj4oY2VsbCktPn5XZWJBc3NlbWJseUNvZGVCbG9jaygpOworfQorI2VuZGlmCisKK3Zv
aWQgUHJvZ3JhbUNvZGVCbG9jazo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0
PFByb2dyYW1Db2RlQmxvY2sqPihjZWxsKS0+flByb2dyYW1Db2RlQmxvY2soKTsKK30KKwordm9p
ZCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBq
c0Nhc3Q8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jayo+KGNlbGwpLT5+TW9kdWxlUHJvZ3JhbUNvZGVC
bG9jaygpOworfQorCit2b2lkIEV2YWxDb2RlQmxvY2s6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQor
eworICAgIGpzQ2FzdDxFdmFsQ29kZUJsb2NrKj4oY2VsbCktPn5FdmFsQ29kZUJsb2NrKCk7Cit9
CisKIENTdHJpbmcgQ29kZUJsb2NrOjppbmZlcnJlZE5hbWUoKSBjb25zdAogewogICAgIHN3aXRj
aCAoY29kZVR5cGUoKSkgewpAQCAtMTUzLDcgKzIxNyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
QXNzdW1pbmdKSVRUeXBlKFByaW4KICAgICBvdXQucHJpbnQoaW5mZXJyZWROYW1lKCksICIjIiwg
aGFzaEFzU3RyaW5nSWZQb3NzaWJsZSgpKTsKICAgICBvdXQucHJpbnQoIjpbIiwgUmF3UG9pbnRl
cih0aGlzKSwgIi0+Iik7CiAgICAgaWYgKCEhbV9hbHRlcm5hdGl2ZSkKLSAgICAgICAgb3V0LnBy
aW50KFJhd1BvaW50ZXIobV9hbHRlcm5hdGl2ZS5nZXQoKSksICItPiIpOworICAgICAgICBvdXQu
cHJpbnQoUmF3UG9pbnRlcihhbHRlcm5hdGl2ZSgpKSwgIi0+Iik7CiAgICAgb3V0LnByaW50KFJh
d1BvaW50ZXIob3duZXJFeGVjdXRhYmxlKCkpLCAiLCAiLCBqaXRUeXBlLCBjb2RlVHlwZSgpKTsK
IAogICAgIGlmIChjb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKQEAgLTE1ODUsOCArMTY0OSw5
IEBAIHByaXZhdGU6CiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1Db2RlQmxvY2s6OkNv
ZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpCi0gICAgOiBtX2ds
b2JhbE9iamVjdChvdGhlci5tX2dsb2JhbE9iamVjdCkKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFZN
KiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2Nr
JiBvdGhlcikKKyAgICA6IEpTQ2VsbCgqdm0sIHN0cnVjdHVyZSkKKyAgICAsIG1fZ2xvYmFsT2Jq
ZWN0KG90aGVyLm1fZ2xvYmFsT2JqZWN0KQogICAgICwgbV9oZWFwKG90aGVyLm1faGVhcCkKICAg
ICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKG90aGVyLm1fbnVtQ2FsbGVlUmVnaXN0ZXJzKQogICAg
ICwgbV9udW1WYXJzKG90aGVyLm1fbnVtVmFycykKQEAgLTE1OTQsMTEgKzE2NTksMTEgQEAgQ29k
ZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLAogICAgICwgbV9zaG91bGRBbHdh
eXNCZUlubGluZWQodHJ1ZSkKICAgICAsIG1fZGlkRmFpbEZUTENvbXBpbGF0aW9uKGZhbHNlKQog
ICAgICwgbV9oYXNCZWVuQ29tcGlsZWRXaXRoRlRMKGZhbHNlKQotICAgICwgbV91bmxpbmtlZENv
ZGUoKm90aGVyLm1fdm0sIG90aGVyLm1fb3duZXJFeGVjdXRhYmxlLmdldCgpLCBvdGhlci5tX3Vu
bGlua2VkQ29kZS5nZXQoKSkKKyAgICAsIG1fdW5saW5rZWRDb2RlKCpvdGhlci5tX3ZtLCB0aGlz
LCBvdGhlci5tX3VubGlua2VkQ29kZS5nZXQoKSkKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1l
bnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAg
ICAsIG1fbnVtQnJlYWtwb2ludHMoMCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKCpvdGhlci5t
X3ZtLCBvdGhlci5tX293bmVyRXhlY3V0YWJsZS5nZXQoKSwgb3RoZXIubV9vd25lckV4ZWN1dGFi
bGUuZ2V0KCkpCisgICAgLCBtX293bmVyRXhlY3V0YWJsZSgqb3RoZXIubV92bSwgdGhpcywgb3Ro
ZXIubV9vd25lckV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgLCBtX3ZtKG90aGVyLm1fdm0pCiAgICAg
LCBtX2luc3RydWN0aW9ucyhvdGhlci5tX2luc3RydWN0aW9ucykKICAgICAsIG1fdGhpc1JlZ2lz
dGVyKG90aGVyLm1fdGhpc1JlZ2lzdGVyKQpAQCAtMTYyMywxMyArMTY4OCwxOCBAQCBDb2RlQmxv
Y2s6OkNvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgLCBtX2NhcGFiaWxpdHlMZXZl
bFN0YXRlKERGRzo6Q2FwYWJpbGl0eUxldmVsTm90U2V0KQogI2VuZGlmCiB7Ci0gICAgbV92aXNp
dFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVs
YXhlZCk7Ci0gICAgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0
ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIG1fdmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVk
LnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKIAogICAgIEFTU0VSVCht
X2hlYXAtPmlzRGVmZXJyZWQoKSk7CiAgICAgQVNTRVJUKG1fc2NvcGVSZWdpc3Rlci5pc0xvY2Fs
KCkpOwogCiAgICAgc2V0TnVtUGFyYW1ldGVycyhvdGhlci5udW1QYXJhbWV0ZXJzKCkpOworfQor
Cit2b2lkIENvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBDb3B5UGFyc2VkQmxvY2tU
YWcsIENvZGVCbG9jayYgb3RoZXIpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwor
CiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIGppdEFmdGVyV2FybVVwKCk7CiAKQEAg
LTE2NDMsMTEgKzE3MTMsMTIgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soQ29weVBhcnNlZEJsb2Nr
VGFnLAogICAgIH0KICAgICAKICAgICBtX2hlYXAtPm1fY29kZUJsb2Nrcy5hZGQodGhpcyk7Ci0g
ICAgbV9oZWFwLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChzaXplb2YoQ29kZUJsb2NrKSk7
CiB9CiAKLUNvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0
YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29w
ZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNv
dXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgIDogbV9nbG9i
YWxPYmplY3Qoc2NvcGUtPmdsb2JhbE9iamVjdCgpLT52bSgpLCBvd25lckV4ZWN1dGFibGUsIHNj
b3BlLT5nbG9iYWxPYmplY3QoKSkKK0NvZGVCbG9jazo6Q29kZUJsb2NrKFZNKiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5r
ZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNz
UmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291cmNlT2Zm
c2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgOiBKU0NlbGwoKnZtLCBz
dHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVjdChzY29wZS0+Z2xvYmFsT2JqZWN0KCktPnZt
KCksIHRoaXMsIHNjb3BlLT5nbG9iYWxPYmplY3QoKSkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxP
YmplY3QtPnZtKCkuaGVhcCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKHVubGlua2VkQ29k
ZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycykKICAgICAsIG1fbnVtVmFycyh1bmxpbmtlZENv
ZGVCbG9jay0+bV9udW1WYXJzKQpAQCAtMTY1NSwxMSArMTcyNiwxMSBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgLCBtX3Nob3VsZEFsd2F5c0JlSW5saW5l
ZCh0cnVlKQogICAgICwgbV9kaWRGYWlsRlRMQ29tcGlsYXRpb24oZmFsc2UpCiAgICAgLCBtX2hh
c0JlZW5Db21waWxlZFdpdGhGVEwoZmFsc2UpCi0gICAgLCBtX3VubGlua2VkQ29kZShtX2dsb2Jh
bE9iamVjdC0+dm0oKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaykKKyAgICAs
IG1fdW5saW5rZWRDb2RlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCB0aGlzLCB1bmxpbmtlZENvZGVC
bG9jaykKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0ZXBw
aW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMoMCkK
LSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4ZWN1
dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFs
T2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBtX3ZtKHVubGlua2Vk
Q29kZUJsb2NrLT52bSgpKQogICAgICwgbV90aGlzUmVnaXN0ZXIodW5saW5rZWRDb2RlQmxvY2st
PnRoaXNSZWdpc3RlcigpKQogICAgICwgbV9zY29wZVJlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2Nr
LT5zY29wZVJlZ2lzdGVyKCkpCkBAIC0xNjc4LDI2ICsxNzQ5LDMxIEBAIENvZGVCbG9jazo6Q29k
ZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAsIG1fY2FwYWJpbGl0eUxldmVsU3RhdGUo
REZHOjpDYXBhYmlsaXR5TGV2ZWxOb3RTZXQpCiAjZW5kaWYKIHsKLSAgICBtX3Zpc2l0U3Ryb25n
bHlIYXNCZWVuQ2FsbGVkLnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsK
LSAgICBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZCk7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUo
ZmFsc2UsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOwogCiAgICAgQVNTRVJUKG1faGVhcC0+
aXNEZWZlcnJlZCgpKTsKICAgICBBU1NFUlQobV9zY29wZVJlZ2lzdGVyLmlzTG9jYWwoKSk7CiAK
ICAgICBBU1NFUlQobV9zb3VyY2UpOwogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2Rl
QmxvY2stPm51bVBhcmFtZXRlcnMoKSk7Cit9CiAKLSAgICBpZiAodm0oKS0+dHlwZVByb2ZpbGVy
KCkgfHwgdm0oKS0+Y29udHJvbEZsb3dQcm9maWxlcigpKQotICAgICAgICB2bSgpLT5mdW5jdGlv
bkhhc0V4ZWN1dGVkQ2FjaGUoKS0+cmVtb3ZlVW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJs
ZS0+c291cmNlSUQoKSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQo
KSwgb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwordm9pZCBDb2Rl
QmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlLCBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgSlNTY29w
ZSogc2NvcGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworCisgICAgaWYgKHZt
LnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKKyAgICAgICAgdm0u
ZnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlKCktPnJlbW92ZVVuZXhlY3V0ZWRSYW5nZShvd25lckV4
ZWN1dGFibGUtPnNvdXJjZUlEKCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0
T2Zmc2V0KCksIG93bmVyRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKIAog
ICAgIHNldENvbnN0YW50UmVnaXN0ZXJzKHVubGlua2VkQ29kZUJsb2NrLT5jb25zdGFudFJlZ2lz
dGVycygpLCB1bmxpbmtlZENvZGVCbG9jay0+Y29uc3RhbnRzU291cmNlQ29kZVJlcHJlc2VudGF0
aW9uKCkpOwogICAgIGlmICh1bmxpbmtlZENvZGVCbG9jay0+dXNlc0dsb2JhbE9iamVjdCgpKQot
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3VubGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmpl
Y3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgpXS5zZXQoKm1fdm0sIG93bmVyRXhlY3V0YWJs
ZSwgbV9nbG9iYWxPYmplY3QuZ2V0KCkpOworICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3Vu
bGlua2VkQ29kZUJsb2NrLT5nbG9iYWxPYmplY3RSZWdpc3RlcigpLnRvQ29uc3RhbnRJbmRleCgp
XS5zZXQoKm1fdm0sIHRoaXMsIG1fZ2xvYmFsT2JqZWN0LmdldCgpKTsKIAogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBMaW5rVGltZUNvbnN0YW50Q291bnQ7IGkrKykgewogICAgICAgICBM
aW5rVGltZUNvbnN0YW50IHR5cGUgPSBzdGF0aWNfY2FzdDxMaW5rVGltZUNvbnN0YW50PihpKTsK
ICAgICAgICAgaWYgKHVuc2lnbmVkIHJlZ2lzdGVySW5kZXggPSB1bmxpbmtlZENvZGVCbG9jay0+
cmVnaXN0ZXJJbmRleEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpCi0gICAgICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxl
LCBtX2dsb2JhbE9iamVjdC0+anNDZWxsRm9yTGlua1RpbWVDb25zdGFudCh0eXBlKSk7CisgICAg
ICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW3JlZ2lzdGVySW5kZXhdLnNldCgqbV92bSwgdGhp
cywgbV9nbG9iYWxPYmplY3QtPmpzQ2VsbEZvckxpbmtUaW1lQ29uc3RhbnQodHlwZSkpOwogICAg
IH0KIAogICAgIEhhc2hTZXQ8aW50LCBXVEY6OkludEhhc2g8aW50PiwgV1RGOjpVbnNpZ25lZFdp
dGhaZXJvS2V5SGFzaFRyYWl0czxpbnQ+PiBjbG9uZWRDb25zdGFudFN5bWJvbFRhYmxlczsKQEAg
LTE3MTIsNyArMTc4OCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG8KICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9s
VGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIHN5bWJvbFRhYmxlLT5wcmVwYXJl
Rm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgb3duZXJFeGVjdXRhYmxlLCBz
eW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKKyAgICAgICAgICAgICAgICBtX2Nv
bnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgc3ltYm9sVGFibGUtPmNsb25lU2Nv
cGVQYXJ0KCptX3ZtKSk7CiAgICAgICAgICAgICAgICAgY2xvbmVkQ29uc3RhbnRTeW1ib2xUYWJs
ZXMuYWRkKGkgKyBGaXJzdENvbnN0YW50UmVnaXN0ZXJJbmRleCk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KQEAgLTE3MzIsMTcgKzE4MDgsMTcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2Ny
aXB0RXhlY3V0YWJsZSogbwogICAgIG1fZnVuY3Rpb25EZWNscy5yZXNpemVUb0ZpdCh1bmxpbmtl
ZENvZGVCbG9jay0+bnVtYmVyT2ZGdW5jdGlvbkRlY2xzKCkpOwogICAgIGZvciAoc2l6ZV90IGNv
dW50ID0gdW5saW5rZWRDb2RlQmxvY2stPm51bWJlck9mRnVuY3Rpb25EZWNscygpLCBpID0gMDsg
aSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIHVu
bGlua2VkRXhlY3V0YWJsZSA9IHVubGlua2VkQ29kZUJsb2NrLT5mdW5jdGlvbkRlY2woaSk7Ci0g
ICAgICAgIGlmICh2bSgpLT50eXBlUHJvZmlsZXIoKSB8fCB2bSgpLT5jb250cm9sRmxvd1Byb2Zp
bGVyKCkpCi0gICAgICAgICAgICB2bSgpLT5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUoKS0+aW5z
ZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5saW5rZWRF
eGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVjdXRhYmxl
LT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOwotICAgICAgICBtX2Z1bmN0aW9uRGVjbHNbaV0u
c2V0KCptX3ZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkRXhlY3V0YWJsZS0+bGluaygqbV92
bSwgb3duZXJFeGVjdXRhYmxlLT5zb3VyY2UoKSkpOworICAgICAgICBpZiAodm0udHlwZVByb2Zp
bGVyKCkgfHwgdm0uY29udHJvbEZsb3dQcm9maWxlcigpKQorICAgICAgICAgICAgdm0uZnVuY3Rp
b25IYXNFeGVjdXRlZENhY2hlKCktPmluc2VydFVuZXhlY3V0ZWRSYW5nZShvd25lckV4ZWN1dGFi
bGUtPnNvdXJjZUlEKCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ1N0YXJ0T2Zm
c2V0KCksIHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpKTsKKyAg
ICAgICAgbV9mdW5jdGlvbkRlY2xzW2ldLnNldCgqbV92bSwgdGhpcywgdW5saW5rZWRFeGVjdXRh
YmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUtPnNvdXJjZSgpKSk7CiAgICAgfQogCiAg
ICAgbV9mdW5jdGlvbkV4cHJzLnJlc2l6ZVRvRml0KHVubGlua2VkQ29kZUJsb2NrLT5udW1iZXJP
ZkZ1bmN0aW9uRXhwcnMoKSk7CiAgICAgZm9yIChzaXplX3QgY291bnQgPSB1bmxpbmtlZENvZGVC
bG9jay0+bnVtYmVyT2ZGdW5jdGlvbkV4cHJzKCksIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewog
ICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogdW5saW5rZWRFeGVjdXRhYmxlID0g
dW5saW5rZWRDb2RlQmxvY2stPmZ1bmN0aW9uRXhwcihpKTsKLSAgICAgICAgaWYgKHZtKCktPnR5
cGVQcm9maWxlcigpIHx8IHZtKCktPmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKLSAgICAgICAgICAg
IHZtKCktPmZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZSgpLT5pbnNlcnRVbmV4ZWN1dGVkUmFuZ2Uo
b3duZXJFeGVjdXRhYmxlLT5zb3VyY2VJRCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdTdGFydE9mZnNldCgpLCB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9maWxpbmdFbmRP
ZmZzZXQoKSk7Ci0gICAgICAgIG1fZnVuY3Rpb25FeHByc1tpXS5zZXQoKm1fdm0sIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5saW5rKCptX3ZtLCBvd25lckV4ZWN1dGFibGUt
PnNvdXJjZSgpKSk7CisgICAgICAgIGlmICh2bS50eXBlUHJvZmlsZXIoKSB8fCB2bS5jb250cm9s
Rmxvd1Byb2ZpbGVyKCkpCisgICAgICAgICAgICB2bS5mdW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUo
KS0+aW5zZXJ0VW5leGVjdXRlZFJhbmdlKG93bmVyRXhlY3V0YWJsZS0+c291cmNlSUQoKSwgdW5s
aW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRPZmZzZXQoKSwgdW5saW5rZWRFeGVj
dXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCkpOworICAgICAgICBtX2Z1bmN0aW9uRXhw
cnNbaV0uc2V0KCptX3ZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoKm1fdm0sIG93
bmVyRXhlY3V0YWJsZS0+c291cmNlKCkpKTsKICAgICB9CiAKICAgICBpZiAodW5saW5rZWRDb2Rl
QmxvY2stPmhhc1JhcmVEYXRhKCkpIHsKQEAgLTE4MjEsNyArMTg5Nyw3IEBAIENvZGVCbG9jazo6
Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KIAogICAgICAgICB1bnNpZ25lZCBvcExlbmd0
aCA9IG9wY29kZUxlbmd0aChwY1swXS51Lm9wY29kZSk7CiAKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
W2ldID0gdm0oKS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZShwY1swXS51Lm9wY29kZSk7CisgICAg
ICAgIGluc3RydWN0aW9uc1tpXSA9IHZtLmludGVycHJldGVyLT5nZXRPcGNvZGUocGNbMF0udS5v
cGNvZGUpOwogICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsgaiA8IG9wTGVuZ3RoOyArK2opIHsK
ICAgICAgICAgICAgIGlmIChzaXplb2YoaW50MzJfdCkgIT0gc2l6ZW9mKGludHB0cl90KSkKICAg
ICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIGpdLnUucG9pbnRlciA9IDA7CkBAIC0xODgw
LDcgKzE5NTYsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAg
ICAgICAgICAgICBpbnQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSA9IHBjW29wTGVuZ3RoIC0gMl0u
dS5vcGVyYW5kOwogCiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0g
PSBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgICAgIG9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLT5pbml0aWFsaXplKCp2bSgpLAorICAgICAgICAgICAgb2JqZWN0QWxsb2NhdGlvblBy
b2ZpbGUtPmluaXRpYWxpemUodm0sCiAgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxlLCBt
X2dsb2JhbE9iamVjdC0+b2JqZWN0UHJvdG90eXBlKCksIGluZmVycmVkSW5saW5lQ2FwYWNpdHkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE5MjksMTEgKzIwMDUsMTEgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAg
ICAgICAvLyBLZWVwIHRoZSBsaW5rZWQgbW9kdWxlIGVudmlyb25tZW50IHN0cm9uZ2x5IHJlZmVy
ZW5jZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJvbmdseVJlZmVyZW5jZWRNb2R1bGVF
bnZpcm9ubWVudHMuYWRkKGpzQ2FzdDxKU01vZHVsZUVudmlyb25tZW50Kj4ob3AubGV4aWNhbEVu
dmlyb25tZW50KSkuaXNOZXdFbnRyeSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZENvbnN0
YW50KG9wLmxleGljYWxFbnZpcm9ubWVudCk7Ci0gICAgICAgICAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxleGlj
YWxFbnZpcm9ubWVudCk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0u
dS5qc0NlbGwuc2V0KHZtLCB0aGlzLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUu
c3ltYm9sVGFibGUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxleGljYWxFbnZpcm9u
bWVudC0+c3ltYm9sVGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNl0udS5zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIG9wLmxleGljYWxFbnZpcm9ubWVudC0+
c3ltYm9sVGFibGUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEpTU2NvcGUqIGNvbnN0YW50
U2NvcGUgPSBKU1Njb3BlOjpjb25zdGFudFNjb3BlRm9yQ29kZUJsb2NrKG9wLnR5cGUsIHRoaXMp
KQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KCp2bSgp
LCBvd25lckV4ZWN1dGFibGUsIGNvbnN0YW50U2NvcGUpOworICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNl0udS5qc0NlbGwuc2V0KHZtLCB0aGlzLCBjb25zdGFudFNjb3BlKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IG51bGxwdHI7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NjYsNyArMjA0Miw3IEBA
IENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGlm
IChvcC50eXBlID09IEdsb2JhbFZhciB8fCBvcC50eXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MgfHwgb3AudHlwZSA9PSBHbG9iYWxMZXhpY2FsVmFyIHx8IG9wLnR5cGUgPT0g
R2xvYmFsTGV4aWNhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MpCiAgICAgICAgICAgICAgICAg
aW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBvcC53YXRjaHBvaW50U2V0Owog
ICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQotICAgICAgICAgICAgICAgIGluc3Ry
dWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9w
LnN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LnN0cnVj
dHVyZS5zZXQodm0sIHRoaXMsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlv
bnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTIwMDMsMTQgKzIwNzksMTQgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAg
IGlmIChvcC53YXRjaHBvaW50U2V0KQogICAgICAgICAgICAgICAgICAgICBvcC53YXRjaHBvaW50
U2V0LT5pbnZhbGlkYXRlKFB1dFRvU2NvcGVGaXJlRGV0YWlsKHRoaXMsIGlkZW50KSk7CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKLSAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5z
dHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1
cmUuc2V0KHZtLCB0aGlzLCBvcC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25z
W2kgKyA2XS51LnBvaW50ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsK
IAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX3Byb2Zp
bGVfdHlwZTogewotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0oKS0+dHlwZVByb2ZpbGVy
KCkpOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQodm0udHlwZVByb2ZpbGVyKCkpOwogICAg
ICAgICAgICAgLy8gVGhlIGZvcm1hdCBvZiB0aGlzIGluc3RydWN0aW9uIGlzOiBvcF9wcm9maWxl
X3R5cGUgcmVnVG9Qcm9maWxlLCBUeXBlTG9jYXRpb24qLCBmbGFnLCBpZGVudGlmaWVyPywgcmVz
b2x2ZVR5cGU/CiAgICAgICAgICAgICBzaXplX3QgaW5zdHJ1Y3Rpb25PZmZzZXQgPSBpICsgb3BM
ZW5ndGggLSAxOwogICAgICAgICAgICAgdW5zaWduZWQgZGl2b3RTdGFydCwgZGl2b3RFbmQ7CkBA
IC0yMDQwLDggKzIxMTYsOCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICAvLyBJZiBvdXIgcGFyZW50IHNj
b3BlIHdhcyBjcmVhdGVkIHdoaWxlIHByb2ZpbGluZyB3YXMgZGlzYWJsZWQsIGl0IHdpbGwgbm90
IGhhdmUgcHJlcGFyZWQgZm9yIHByb2ZpbGluZyB5ZXQuCiAgICAgICAgICAgICAgICAgICAgIHN5
bWJvbFRhYmxlLT5wcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhsb2NrZXIpOwotICAgICAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBpbXBsLCAqdm0oKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVT
ZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaW1wbCwg
KnZtKCkpOworICAgICAgICAgICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFi
bGUtPnVuaXF1ZUlERm9yVmFyaWFibGUobG9ja2VyLCBpbXBsLCB2bSk7CisgICAgICAgICAgICAg
ICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlwZVNldEZvclZhcmlh
YmxlKGxvY2tlciwgaW1wbCwgdm0pOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gVHlwZVByb2ZpbGVyTm9HbG9iYWxJREV4aXN0
czsKIApAQCAtMjA1NCw4ICsyMTMwLDggQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhl
Y3V0YWJsZSogbwogICAgICAgICAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gaWRl
bnRpZmllcihwY1s0XS51Lm9wZXJhbmQpOwogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIC8vIElm
IG91ciBwYXJlbnQgc2NvcGUgd2FzIGNyZWF0ZWQgd2hpbGUgcHJvZmlsaW5nIHdhcyBkaXNhYmxl
ZCwgaXQgd2lsbCBub3QgaGF2ZSBwcmVwYXJlZCBmb3IgcHJvZmlsaW5nIHlldC4KLSAgICAgICAg
ICAgICAgICBnbG9iYWxWYXJpYWJsZUlEID0gc3ltYm9sVGFibGUtPnVuaXF1ZUlERm9yVmFyaWFi
bGUobG9ja2VyLCBpZGVudC5pbXBsKCksICp2bSgpKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxU
eXBlU2V0ID0gc3ltYm9sVGFibGUtPmdsb2JhbFR5cGVTZXRGb3JWYXJpYWJsZShsb2NrZXIsIGlk
ZW50LmltcGwoKSwgKnZtKCkpOworICAgICAgICAgICAgICAgIGdsb2JhbFZhcmlhYmxlSUQgPSBz
eW1ib2xUYWJsZS0+dW5pcXVlSURGb3JWYXJpYWJsZShsb2NrZXIsIGlkZW50LmltcGwoKSwgdm0p
OworICAgICAgICAgICAgICAgIGdsb2JhbFR5cGVTZXQgPSBzeW1ib2xUYWJsZS0+Z2xvYmFsVHlw
ZVNldEZvclZhcmlhYmxlKGxvY2tlciwgaWRlbnQuaW1wbCgpLCB2bSk7CiAKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTIwODEsOCArMjE1Nyw4IEBAIENvZGVCbG9j
azo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgc3RkOjpwYWlyPFR5cGVMb2NhdGlvbiosIGJvb2w+IGxvY2F0
aW9uUGFpciA9IHZtKCktPnR5cGVQcm9maWxlcigpLT50eXBlTG9jYXRpb25DYWNoZSgpLT5nZXRU
eXBlTG9jYXRpb24oZ2xvYmFsVmFyaWFibGVJRCwKLSAgICAgICAgICAgICAgICBvd25lckV4ZWN1
dGFibGUtPnNvdXJjZUlEKCksIGRpdm90U3RhcnQsIGRpdm90RW5kLCBnbG9iYWxUeXBlU2V0LCB2
bSgpKTsKKyAgICAgICAgICAgIHN0ZDo6cGFpcjxUeXBlTG9jYXRpb24qLCBib29sPiBsb2NhdGlv
blBhaXIgPSB2bS50eXBlUHJvZmlsZXIoKS0+dHlwZUxvY2F0aW9uQ2FjaGUoKS0+Z2V0VHlwZUxv
Y2F0aW9uKGdsb2JhbFZhcmlhYmxlSUQsCisgICAgICAgICAgICAgICAgb3duZXJFeGVjdXRhYmxl
LT5zb3VyY2VJRCgpLCBkaXZvdFN0YXJ0LCBkaXZvdEVuZCwgZ2xvYmFsVHlwZVNldCwgJnZtKTsK
ICAgICAgICAgICAgIFR5cGVMb2NhdGlvbiogbG9jYXRpb24gPSBsb2NhdGlvblBhaXIuZmlyc3Q7
CiAgICAgICAgICAgICBib29sIGlzTmV3TG9jYXRpb24gPSBsb2NhdGlvblBhaXIuc2Vjb25kOwog
CkBAIC0yMDkwLDcgKzIxNjYsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgICAgICAgICAgICAgbG9jYXRpb24tPm1fZGl2b3RGb3JGdW5jdGlvbk9mZnNl
dElmUmV0dXJuU3RhdGVtZW50ID0gb3duZXJFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nU3RhcnRP
ZmZzZXQoKTsKIAogICAgICAgICAgICAgaWYgKHNob3VsZEFuYWx5emUgJiYgaXNOZXdMb2NhdGlv
bikKLSAgICAgICAgICAgICAgICB2bSgpLT50eXBlUHJvZmlsZXIoKS0+aW5zZXJ0TmV3TG9jYXRp
b24obG9jYXRpb24pOworICAgICAgICAgICAgICAgIHZtLnR5cGVQcm9maWxlcigpLT5pbnNlcnRO
ZXdMb2NhdGlvbihsb2NhdGlvbik7CiAKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgMl0u
dS5sb2NhdGlvbiA9IGxvY2F0aW9uOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMTA4LDcgKzIx
ODQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAg
IGkgKz0gb3BMZW5ndGg7CiAgICAgfQogCi0gICAgaWYgKHZtKCktPmNvbnRyb2xGbG93UHJvZmls
ZXIoKSkKKyAgICBpZiAodm0uY29udHJvbEZsb3dQcm9maWxlcigpKQogICAgICAgICBpbnNlcnRC
YXNpY0Jsb2NrQm91bmRhcmllc0ZvckNvbnRyb2xGbG93UHJvZmlsZXIoaW5zdHJ1Y3Rpb25zKTsK
IAogICAgIG1faW5zdHJ1Y3Rpb25zID0gV1RGOjpSZWZDb3VudGVkQXJyYXk8SW5zdHJ1Y3Rpb24+
KGluc3RydWN0aW9ucyk7CkBAIC0yMTI4LDEyICsyMjA0LDEzIEBAIENvZGVCbG9jazo6Q29kZUJs
b2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgZHVtcEJ5dGVjb2RlKCk7CiAgICAgCiAg
ICAgbV9oZWFwLT5tX2NvZGVCbG9ja3MuYWRkKHRoaXMpOwotICAgIG1faGVhcC0+cmVwb3J0RXh0
cmFNZW1vcnlBbGxvY2F0ZWQoc2l6ZW9mKENvZGVCbG9jaykgKyBtX2luc3RydWN0aW9ucy5zaXpl
KCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pKTsKKyAgICBtX2hlYXAtPnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKG1faW5zdHJ1Y3Rpb25zLnNpemUoKSAqIHNpemVvZihJbnN0cnVjdGlvbikpOwog
fQogCiAjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQotQ29kZUJsb2NrOjpDb2RlQmxvY2soV2ViQXNz
ZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiB2bSwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKLSAgICA6IG1fZ2xvYmFsT2JqZWN0KGdsb2JhbE9iamVjdC0+dm0oKSwg
b3duZXJFeGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpCitDb2RlQmxvY2s6OkNvZGVCbG9jayhWTSog
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhl
Y3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQorICAgIDogSlND
ZWxsKHZtLCBzdHJ1Y3R1cmUpCisgICAgLCBtX2dsb2JhbE9iamVjdChnbG9iYWxPYmplY3QtPnZt
KCksIHRoaXMsIGdsb2JhbE9iamVjdCkKICAgICAsIG1faGVhcCgmbV9nbG9iYWxPYmplY3QtPnZt
KCkuaGVhcCkKICAgICAsIG1fbnVtQ2FsbGVlUmVnaXN0ZXJzKDApCiAgICAgLCBtX251bVZhcnMo
MCkKQEAgLTIxNDQsNyArMjIyMSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFdlYkFzc2VtYmx5
RXhlY3V0YWIKICAgICAsIG1faGFzRGVidWdnZXJTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX3N0
ZXBwaW5nTW9kZShTdGVwcGluZ01vZGVEaXNhYmxlZCkKICAgICAsIG1fbnVtQnJlYWtwb2ludHMo
MCkKLSAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBvd25lckV4
ZWN1dGFibGUsIG93bmVyRXhlY3V0YWJsZSkKKyAgICAsIG1fb3duZXJFeGVjdXRhYmxlKG1fZ2xv
YmFsT2JqZWN0LT52bSgpLCB0aGlzLCBvd25lckV4ZWN1dGFibGUpCiAgICAgLCBtX3ZtKCZ2bSkK
ICAgICAsIG1faXNTdHJpY3RNb2RlKGZhbHNlKQogICAgICwgbV9uZWVkc0FjdGl2YXRpb24oZmFs
c2UpCkBAIC0yMTU4LDkgKzIyMzUsMTMgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soV2ViQXNzZW1i
bHlFeGVjdXRhYgogI2VuZGlmCiB7CiAgICAgQVNTRVJUKG1faGVhcC0+aXNEZWZlcnJlZCgpKTsK
K30KKwordm9pZCBDb2RlQmxvY2s6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgV2ViQXNzZW1ibHlF
eGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKIAogICAgIG1faGVhcC0+bV9jb2RlQmxvY2tzLmFkZCh0aGlzKTsKLSAgICBtX2hlYXAt
PnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKHNpemVvZihDb2RlQmxvY2spKTsKIH0KICNlbmRp
ZgogCkBAIC0yMTcyLDI5ICsyMjUzLDMwIEBAIENvZGVCbG9jazo6fkNvZGVCbG9jaygpCiAjaWYg
RU5BQkxFKFZFUkJPU0VfVkFMVUVfUFJPRklMRSkKICAgICBkdW1wVmFsdWVQcm9maWxlcygpOwog
I2VuZGlmCi0gICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxzLmJlZ2luKCkgIT0gbV9pbmNv
bWluZ0xMSW50Q2FsbHMuZW5kKCkpCi0gICAgICAgIG1faW5jb21pbmdMTEludENhbGxzLmJlZ2lu
KCktPnJlbW92ZSgpOwotI2lmIEVOQUJMRShKSVQpCisKICAgICAvLyBXZSBtYXkgYmUgZGVzdHJv
eWVkIGJlZm9yZSBhbnkgQ29kZUJsb2NrcyB0aGF0IHJlZmVyIHRvIHVzIGFyZSBkZXN0cm95ZWQu
CiAgICAgLy8gQ29uc2lkZXIgdGhhdCB0d28gQ29kZUJsb2NrcyBiZWNvbWUgdW5yZWFjaGFibGUg
YXQgdGhlIHNhbWUgdGltZS4gVGhlcmUKICAgICAvLyBpcyBubyBndWFyYW50ZWUgYWJvdXQgdGhl
IG9yZGVyIGluIHdoaWNoIHRoZSBDb2RlQmxvY2tzIGFyZSBkZXN0cm95ZWQuCiAgICAgLy8gU28s
IGlmIHdlIGRvbid0IHJlbW92ZSBpbmNvbWluZyBjYWxscywgYW5kIGdldCBkZXN0cm95ZWQgYmVm
b3JlIHRoZQogICAgIC8vIENvZGVCbG9jayhzKSB0aGF0IGhhdmUgY2FsbHMgaW50byB1cywgdGhl
biB0aGUgQ2FsbExpbmtJbmZvIHZlY3RvcidzCiAgICAgLy8gZGVzdHJ1Y3RvciB3aWxsIHRyeSB0
byByZW1vdmUgbm9kZXMgZnJvbSBvdXIgKG5vIGxvbmdlciB2YWxpZCkgbGlua2VkIGxpc3QuCi0g
ICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQo
KSkKLSAgICAgICAgbV9pbmNvbWluZ0NhbGxzLmJlZ2luKCktPnJlbW92ZSgpOwotICAgIHdoaWxl
IChtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdpbigpICE9IG1faW5jb21pbmdQb2x5bW9y
cGhpY0NhbGxzLmVuZCgpKQotICAgICAgICBtX2luY29taW5nUG9seW1vcnBoaWNDYWxscy5iZWdp
bigpLT5yZW1vdmUoKTsKKyAgICB1bmxpbmtJbmNvbWluZ0NhbGxzKCk7CiAgICAgCiAgICAgLy8g
Tm90ZSB0aGF0IG91ciBvdXRnb2luZyBjYWxscyB3aWxsIGJlIHJlbW92ZWQgZnJvbSBvdGhlciBD
b2RlQmxvY2tzJwogICAgIC8vIG1faW5jb21pbmdDYWxscyBsaW5rZWQgbGlzdHMgdGhyb3VnaCB0
aGUgZXhlY3V0aW9uIG9mIHRoZSB+Q2FsbExpbmtJbmZvCiAgICAgLy8gZGVzdHJ1Y3RvcnMuCiAK
KyNpZiBFTkFCTEUoSklUKQogICAgIGZvciAoQmFnPFN0cnVjdHVyZVN0dWJJbmZvPjo6aXRlcmF0
b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRlcjsgKytpdGVyKQogICAgICAgICAo
Kml0ZXIpLT5kZXJlZigpOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CiAKK3ZvaWQgQ29kZUJs
b2NrOjpzZXRBbHRlcm5hdGl2ZShWTSYgdm0sIENvZGVCbG9jayogYWx0ZXJuYXRpdmUpCit7Cisg
ICAgbV9hbHRlcm5hdGl2ZS5zZXQodm0sIHRoaXMsIGFsdGVybmF0aXZlKTsKK30KKwogdm9pZCBD
b2RlQmxvY2s6OnNldE51bVBhcmFtZXRlcnMoaW50IG5ld1ZhbHVlKQogewogICAgIG1fbnVtUGFy
YW1ldGVycyA9IG5ld1ZhbHVlOwpAQCAtMjIxNSw3MyArMjI5Nyw0MyBAQCBDb2RlQmxvY2sqIENv
ZGVCbG9jazo6c3BlY2lhbE9TUkVudHJ5QmxvCiAgICAgaWYgKGppdFR5cGUoKSAhPSBKSVRDb2Rl
OjpERkdKSVQpCiAgICAgICAgIHJldHVybiAwOwogICAgIERGRzo6SklUQ29kZSogaml0Q29kZSA9
IG1faml0Q29kZS0+ZGZnKCk7Ci0gICAgcmV0dXJuIGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0
KCk7CisgICAgcmV0dXJuIGppdENvZGUtPm9zckVudHJ5QmxvY2soKTsKICNlbHNlIC8vIEVOQUJM
RShGVExfSklUKQogICAgIHJldHVybiAwOwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQogfQog
Ci12b2lkIENvZGVCbG9jazo6dmlzaXRTdHJvbmdseShTbG90VmlzaXRvciYgdmlzaXRvcikKK3Zv
aWQgQ29kZUJsb2NrOjp2aXNpdFdlYWtseShTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKLSAgICBi
b29sIHNldEJ5TWUgPSBtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkLmNvbXBhcmVFeGNoYW5n
ZVN0cm9uZyhmYWxzZSwgdHJ1ZSk7CisgICAgYm9vbCBzZXRCeU1lID0gbV92aXNpdFdlYWtseUhh
c0JlZW5DYWxsZWQuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKGZhbHNlLCB0cnVlKTsKICAgICBpZiAo
IXNldEJ5TWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIHZpc2l0QWdncmVnYXRlKHZpc2l0b3Ip
OwotCi0gICAgc3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7Ci0gICAgc3Ry
b25nbHlWaXNpdFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOwotICAgIHByb3BhZ2F0ZVRyYW5zaXRp
b25zKHZpc2l0b3IpOwotfQotCi12b2lkIENvZGVCbG9jazo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZp
c2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgLy8gSSBtYXkgYmUgYXNrZWQgdG8gc2NhbiBteXNlbGYg
bW9yZSB0aGFuIG9uY2UsIGFuZCBpdCBtYXkgZXZlbiBoYXBwZW4gY29uY3VycmVudGx5LgotICAg
IC8vIFRvIHRoaXMgZW5kLCB1c2UgYW4gYXRvbWljIG9wZXJhdGlvbiB0byBjaGVjayAoYW5kIHNl
dCkgaWYgSSd2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LgotICAgIC8vIE9ubHkgb25lIHRocmVhZCBt
YXkgcHJvY2VlZCBwYXN0IHRoaXMgcG9pbnQgLSB3aGljaGV2ZXIgb25lIHdpbnMgdGhlIGF0b21p
YyBzZXQgcmFjZS4KLSAgICBib29sIHNldEJ5TWUgPSBtX3Zpc2l0QWdncmVnYXRlSGFzQmVlbkNh
bGxlZC5jb21wYXJlRXhjaGFuZ2VTdHJvbmcoZmFsc2UsIHRydWUpOwotICAgIGlmICghc2V0QnlN
ZSkKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQodGhpcykpCiAgICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBpZiAoISFtX2FsdGVybmF0aXZlKQotICAgICAgICBtX2FsdGVybmF0aXZlLT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKLSAgICAKLSAgICBpZiAoQ29kZUJsb2NrKiBvdGhlckJsb2NrID0g
c3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKLSAgICAgICAgb3RoZXJCbG9jay0+dmlzaXRB
Z2dyZWdhdGUodmlzaXRvcik7CiAKLSAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZChvd25lckV4ZWN1dGFibGUoKSwgc2l6ZW9mKENvZGVCbG9jaykpOwotICAgIGlmIChtX2ppdENv
ZGUpCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG93bmVyRXhlY3V0
YWJsZSgpLCBtX2ppdENvZGUtPnNpemUoKSk7Ci0gICAgaWYgKG1faW5zdHJ1Y3Rpb25zLnNpemUo
KSkgewotICAgICAgICAvLyBEaXZpZGUgYnkgcmVmQ291bnQoKSBiZWNhdXNlIG1faW5zdHJ1Y3Rp
b25zIHBvaW50cyB0byBzb21ldGhpbmcgdGhhdCBpcyBzaGFyZWQKLSAgICAgICAgLy8gYnkgbXVs
dGlwbGUgQ29kZUJsb2NrcywgYW5kIHdlIG9ubHkgd2FudCB0byBjb3VudCBpdCB0b3dhcmRzIHRo
ZSBoZWFwIHNpemUgb25jZS4KLSAgICAgICAgLy8gSGF2aW5nIGVhY2ggQ29kZUJsb2NrIHJlcG9y
dCBvbmx5IGl0cyBwcm9wb3J0aW9uYWwgc2hhcmUgb2YgdGhlIHNpemUgaXMgb25lIHdheQotICAg
ICAgICAvLyBvZiBhY2NvbXBsaXNoaW5nIHRoaXMuCi0gICAgICAgIHZpc2l0b3IucmVwb3J0RXh0
cmFNZW1vcnlWaXNpdGVkKG93bmVyRXhlY3V0YWJsZSgpLCBtX2luc3RydWN0aW9ucy5zaXplKCkg
KiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVmQ291bnQoKSk7CisgICAg
aWYgKHNob3VsZFZpc2l0U3Ryb25nbHkoKSkgeworICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOworICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgdmlzaXRvci5hcHBlbmQoJm1fdW5saW5rZWRDb2RlKTsKLQogICAgIC8vIFRoZXJlIGFyZSB0
d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXplcnM6IGlubGluZSBj
YWNoZSBjbGVhcmluZwogICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHByb2JhYmlsaXR5IG9m
IHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5ncwogICAgIC8vIGlz
IHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8gbWF0dGVyIHdoYXQg
YW5kIHdoZW4gaXQgcnVucywgaXQKICAgICAvLyBmaWd1cmVzIG91dCB3aGV0aGVyIGl0IGhhcyBh
bnkgd29yayB0byBkby4KLSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhp
cyk7Ci0gICAgCi0gICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVuTWFya2VkID0gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKHNob3VsZFZpc2l0U3Ryb25nbHkoKSkgewotICAgICAgICB2aXNpdFN0cm9u
Z2x5KHZpc2l0b3IpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAorICAgIHZpc2l0b3Iu
YWRkVW5jb25kaXRpb25hbEZpbmFsaXplcigmbV91bmNvbmRpdGlvbmFsRmluYWxpemVyKTsKKwog
ICAgIGlmICghSklUQ29kZTo6aXNPcHRpbWl6aW5nSklUKGppdFR5cGUoKSkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIC8vIElmIHdlIGpldHRpc29uIG91cnNlbHZlcyB3ZSdsbCBpbnN0YWxsIG91
ciBhbHRlcm5hdGl2ZSwgc28gbWFrZSBzdXJlIHRoYXQgaXQKKyAgICAvLyBzdXJ2aXZlcyBHQyBl
dmVuIGlmIHdlIGRvbid0LgorICAgIHZpc2l0b3IuYXBwZW5kKCZtX2FsdGVybmF0aXZlKTsKKyAg
ICAKICAgICAvLyBUaGVyZSBhcmUgdHdvIHRoaW5ncyB0aGF0IHdlIHVzZSB3ZWFrIHJlZmVyZW5j
ZSBoYXJ2ZXN0ZXJzIGZvcjogREZHIGZpeHBvaW50IGZvcgogICAgIC8vIGpldHRpc29uaW5nLCBh
bmQgdHJ5aW5nIHRvIGZpbmQgc3RydWN0dXJlcyB0aGF0IHdvdWxkIGJlIGxpdmUgYmFzZWQgb24g
c29tZQogICAgIC8vIGlubGluZSBjYWNoZS4gU28gaXQgbWFrZXMgc2Vuc2UgdG8gcmVnaXN0ZXIg
dGhlbSByZWdhcmRsZXNzLgotICAgIHZpc2l0b3IuYWRkV2Vha1JlZmVyZW5jZUhhcnZlc3Rlcih0
aGlzKTsKKyAgICB2aXNpdG9yLmFkZFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIoJm1fd2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlcik7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAvLyBXZSBnZXQgaGVy
ZSBpZiB3ZSdyZSBsaXZlIGluIHRoZSBzZW5zZSB0aGF0IG91ciBvd25lciBleGVjdXRhYmxlIGlz
IGxpdmUsCkBAIC0yMjkyLDE0ICsyMzQ0LDQ4IEBAIHZvaWQgQ29kZUJsb2NrOjp2aXNpdEFnZ3Jl
Z2F0ZShTbG90VmlzaXQKICAgICAvLyBlaXRoZXIgdXMgbWFya2luZyBhZGRpdGlvbmFsIG9iamVj
dHMsIG9yIGJ5IG90aGVyIG9iamVjdHMgYmVpbmcgbWFya2VkIGZvcgogICAgIC8vIG90aGVyIHJl
YXNvbnMsIHRoYXQgdGhpcyBpdGVyYXRpb24gc2hvdWxkIHJ1biBhZ2FpbjsgaXQgd2lsbCBub3Rp
ZnkgdXMgb2YgdGhpcwogICAgIC8vIGRlY2lzaW9uIGJ5IGNhbGxpbmcgaGFydmVzdFdlYWtSZWZl
cmVuY2VzKCkuCi0gICAgCi0gICAgbV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNC
ZWVuUHJvdmVkID0gZmFsc2U7Ci0gICAgCisKKyAgICBtX2FsbFRyYW5zaXRpb25zSGF2ZUJlZW5N
YXJrZWQgPSBmYWxzZTsKICAgICBwcm9wYWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKworICAg
IG1faml0Q29kZS0+ZGZnQ29tbW9uKCktPmxpdmVuZXNzSGFzQmVlblByb3ZlZCA9IGZhbHNlOwog
ICAgIGRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQogfQogCit2b2lkIENvZGVCbG9jazo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQoreworICAgIENvZGVCbG9jayogdGhpc09iamVjdCA9IGpzQ2FzdDxD
b2RlQmxvY2sqPihjZWxsKTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmpl
Y3QsIGluZm8oKSk7CisgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIHRoaXNPYmplY3QtPnZpc2l0Q2hpbGRyZW4odmlzaXRvcik7Cit9CisKK3ZvaWQg
Q29kZUJsb2NrOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIC8v
IFRoZXJlIGFyZSB0d28gdGhpbmdzIHRoYXQgbWF5IHVzZSB1bmNvbmRpdGlvbmFsIGZpbmFsaXpl
cnM6IGlubGluZSBjYWNoZSBjbGVhcmluZworICAgIC8vIGFuZCBqZXR0aXNvbmluZy4gVGhlIHBy
b2JhYmlsaXR5IG9mIHVzIHdhbnRpbmcgdG8gZG8gYXQgbGVhc3Qgb25lIG9mIHRob3NlIHRoaW5n
cworICAgIC8vIGlzIHByb2JhYmx5IHF1aXRlIGNsb3NlIHRvIDEuIFNvIHdlIGFkZCBvbmUgbm8g
bWF0dGVyIHdoYXQgYW5kIHdoZW4gaXQgcnVucywgaXQKKyAgICAvLyBmaWd1cmVzIG91dCB3aGV0
aGVyIGl0IGhhcyBhbnkgd29yayB0byBkby4KKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxG
aW5hbGl6ZXIoJm1fdW5jb25kaXRpb25hbEZpbmFsaXplcik7CisKKyAgICBpZiAoQ29kZUJsb2Nr
KiBvdGhlckJsb2NrID0gc3BlY2lhbE9TUkVudHJ5QmxvY2tPck51bGwoKSkKKyAgICAgICAgdmlz
aXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihvdGhlckJsb2NrKTsKKworICAg
IGlmIChtX2ppdENvZGUpCisgICAgICAgIHZpc2l0b3IucmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVk
KHRoaXMsIG1faml0Q29kZS0+c2l6ZSgpKTsKKyAgICBpZiAobV9pbnN0cnVjdGlvbnMuc2l6ZSgp
KQorICAgICAgICB2aXNpdG9yLnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRlZCh0aGlzLCBtX2luc3Ry
dWN0aW9ucy5zaXplKCkgKiBzaXplb2YoSW5zdHJ1Y3Rpb24pIC8gbV9pbnN0cnVjdGlvbnMucmVm
Q291bnQoKSk7CisKKyAgICB2aXNpdG9yLmFwcGVuZCgmbV91bmxpbmtlZENvZGUpOworCisgICAg
c3Ryb25nbHlWaXNpdFN0cm9uZ1JlZmVyZW5jZXModmlzaXRvcik7CisgICAgc3Ryb25nbHlWaXNp
dFdlYWtSZWZlcmVuY2VzKHZpc2l0b3IpOworCisgICAgbV9hbGxUcmFuc2l0aW9uc0hhdmVCZWVu
TWFya2VkID0gZmFsc2U7CisgICAgcHJvcGFnYXRlVHJhbnNpdGlvbnModmlzaXRvcik7Cit9CisK
IGJvb2wgQ29kZUJsb2NrOjpzaG91bGRWaXNpdFN0cm9uZ2x5KCkKIHsKICAgICBpZiAoT3B0aW9u
czo6Zm9yY2VDb2RlQmxvY2tMaXZlbmVzcygpKQpAQCAtMjMyNywxNyArMjQxMyw3IEBAIGJvb2wg
Q29kZUJsb2NrOjppc0tub3duVG9CZUxpdmVEdXJpbmdHQygKICAgICAvLyAgIGJlY2F1c2UgbGl2
ZW5lc3NIYXNCZWVuUHJvdmVkIHdvdWxkIGhhdmUgc3Vydml2ZWQgYXMgdHJ1ZS4KICAgICAvLyAt
IENvZGUgYmxvY2tzIHRoYXQgZG9uJ3QgaGF2ZSBhbnkgZGVhZCB3ZWFrIHJlZmVyZW5jZXMuCiAK
LSAgICBpZiAobV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNhbGxlZC5sb2FkKHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotI2lmIEVOQUJMRShERkdfSklU
KQotICAgIGlmIChKSVRDb2RlOjppc09wdGltaXppbmdKSVQoaml0VHlwZSgpKSkgewotICAgICAg
ICBpZiAobV9qaXRDb2RlLT5kZmdDb21tb24oKS0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuIEhlYXA6OmlzTWFya2VkKHRoaXMpOwogfQogCiBib29sIENvZGVCbG9jazo6
c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSZWZlcmVuY2UoKQpAQCAtMjM0NywxMiArMjQyMywzNCBA
QCBib29sIENvZGVCbG9jazo6c2hvdWxkSmV0dGlzb25EdWVUb1dlYWtSCiAgICAgcmV0dXJuICFp
c0tub3duVG9CZUxpdmVEdXJpbmdHQygpOwogfQogCitzdGF0aWMgc3RkOjpjaHJvbm86Om1pbGxp
c2Vjb25kcyB0aW1lVG9MaXZlKEpJVENvZGU6OkpJVFR5cGUgaml0VHlwZSkKK3sKKyAgICBzd2l0
Y2ggKGppdFR5cGUpIHsKKyAgICBjYXNlIEpJVENvZGU6OkludGVycHJldGVyVGh1bms6CisgICAg
ICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzPigKKyAgICAgICAgICAgIHN0ZDo6Y2hyb25vOjpzZWNvbmRzKDUpKTsKKyAgICBjYXNl
IEpJVENvZGU6OkJhc2VsaW5lSklUOgorICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlv
bmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAorICAgICAgICAvLyBJbnRlcnByZXRl
clRodW5rIHNoYXJlIGEgQ29kZUJsb2NrLgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1
cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCisgICAgICAgICAgICBzdGQ6
OmNocm9ubzo6c2Vjb25kcygxNSkpOworICAgIGNhc2UgSklUQ29kZTo6REZHSklUOgorICAgICAg
ICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vj
b25kcz4oCisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygyMCkpOworICAgIGNhc2Ug
SklUQ29kZTo6RlRMSklUOgorICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oCisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6
c2Vjb25kcyg2MCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6
bWlsbGlzZWNvbmRzOjptYXgoKTsKKyAgICB9Cit9CisKIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRK
ZXR0aXNvbkR1ZVRvT2xkQWdlKCkKIHsKLSAgICBpZiAobV92aXNpdFN0cm9uZ2x5SGFzQmVlbkNh
bGxlZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpKQorICAgIGlmIChIZWFwOjppc01h
cmtlZCh0aGlzKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHRpbWVTaW5jZUNy
ZWF0aW9uKCkgPCBKSVRDb2RlOjp0aW1lVG9MaXZlKGppdFR5cGUoKSkpCisgICAgaWYgKHRpbWVT
aW5jZUNyZWF0aW9uKCkgPCB0aW1lVG9MaXZlKGppdFR5cGUoKSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMjUwNSwxNCArMjYwMywxOCBAQCB2b2lkIENv
ZGVCbG9jazo6ZGV0ZXJtaW5lTGl2ZW5lc3MoU2xvdFZpCiAgICAgLy8gQWxsIHdlYWsgcmVmZXJl
bmNlcyBhcmUgbGl2ZS4gUmVjb3JkIHRoaXMgaW5mb3JtYXRpb24gc28gd2UgZG9uJ3QKICAgICAv
LyBjb21lIGJhY2sgaGVyZSBhZ2FpbiwgYW5kIHNjYW4gdGhlIHN0cm9uZyByZWZlcmVuY2VzLgog
ICAgIGRmZ0NvbW1vbi0+bGl2ZW5lc3NIYXNCZWVuUHJvdmVkID0gdHJ1ZTsKLSAgICBzdHJvbmds
eVZpc2l0U3Ryb25nUmVmZXJlbmNlcyh2aXNpdG9yKTsKKyAgICB2aXNpdG9yLmFwcGVuZFVuYmFy
cmllcmVkUmVhZE9ubHlQb2ludGVyKHRoaXMpOwogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQog
fQogCi12b2lkIENvZGVCbG9jazo6dmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90VmlzaXRvciYgdmlz
aXRvcikKK3ZvaWQgQ29kZUJsb2NrOjpXZWFrUmVmZXJlbmNlSGFydmVzdGVyOjp2aXNpdFdlYWtS
ZWZlcmVuY2VzKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewotICAgIHByb3BhZ2F0ZVRyYW5zaXRp
b25zKHZpc2l0b3IpOwotICAgIGRldGVybWluZUxpdmVuZXNzKHZpc2l0b3IpOworICAgIENvZGVC
bG9jayogY29kZUJsb2NrID0KKyAgICAgICAgYml0d2lzZV9jYXN0PENvZGVCbG9jayo+KAorICAg
ICAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlzKSAtIE9CSkVDVF9PRkZTRVRPRihDb2Rl
QmxvY2ssIG1fd2Vha1JlZmVyZW5jZUhhcnZlc3RlcikpOworCisgICAgY29kZUJsb2NrLT5wcm9w
YWdhdGVUcmFuc2l0aW9ucyh2aXNpdG9yKTsKKyAgICBjb2RlQmxvY2stPmRldGVybWluZUxpdmVu
ZXNzKHZpc2l0b3IpOwogfQogCiB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVMTEludElubGluZUNh
Y2hlcygpCkBAIC0yNjMyLDI2ICsyNzM0LDI5IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZUJh
c2VsaW5lSklUSW5saW4KICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoKQordm9pZCBDb2RlQmxvY2s6OlVuY29uZGl0aW9uYWxGaW5hbGl6ZXI6OmZp
bmFsaXplVW5jb25kaXRpb25hbGx5KCkKIHsKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGJp
dHdpc2VfY2FzdDxDb2RlQmxvY2sqPigKKyAgICAgICAgYml0d2lzZV9jYXN0PGNoYXIqPih0aGlz
KSAtIE9CSkVDVF9PRkZTRVRPRihDb2RlQmxvY2ssIG1fdW5jb25kaXRpb25hbEZpbmFsaXplcikp
OworCiAjaWYgRU5BQkxFKERGR19KSVQpCi0gICAgaWYgKHNob3VsZEpldHRpc29uRHVlVG9XZWFr
UmVmZXJlbmNlKCkpIHsKLSAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9X
ZWFrUmVmZXJlbmNlKTsKKyAgICBpZiAoY29kZUJsb2NrLT5zaG91bGRKZXR0aXNvbkR1ZVRvV2Vh
a1JlZmVyZW5jZSgpKSB7CisgICAgICAgIGNvZGVCbG9jay0+amV0dGlzb24oUHJvZmlsZXI6Okpl
dHRpc29uRHVlVG9XZWFrUmVmZXJlbmNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKIAotICAgIGlmIChzaG91bGRKZXR0aXNvbkR1ZVRvT2xkQWdl
KCkpIHsKLSAgICAgICAgamV0dGlzb24oUHJvZmlsZXI6OkpldHRpc29uRHVlVG9PbGRBZ2UpOwor
ICAgIGlmIChjb2RlQmxvY2stPnNob3VsZEpldHRpc29uRHVlVG9PbGRBZ2UoKSkgeworICAgICAg
ICBjb2RlQmxvY2stPmpldHRpc29uKFByb2ZpbGVyOjpKZXR0aXNvbkR1ZVRvT2xkQWdlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0
ZWQoaml0VHlwZSgpKSkKLSAgICAgICAgZmluYWxpemVMTEludElubGluZUNhY2hlcygpOworICAg
IGlmIChKSVRDb2RlOjpjb3VsZEJlSW50ZXJwcmV0ZWQoY29kZUJsb2NrLT5qaXRUeXBlKCkpKQor
ICAgICAgICBjb2RlQmxvY2stPmZpbmFsaXplTExJbnRJbmxpbmVDYWNoZXMoKTsKIAogI2lmIEVO
QUJMRShKSVQpCi0gICAgaWYgKCEhaml0Q29kZSgpKQotICAgICAgICBmaW5hbGl6ZUJhc2VsaW5l
SklUSW5saW5lQ2FjaGVzKCk7CisgICAgaWYgKCEhY29kZUJsb2NrLT5qaXRDb2RlKCkpCisgICAg
ICAgIGNvZGVCbG9jay0+ZmluYWxpemVCYXNlbGluZUpJVElubGluZUNhY2hlcygpOwogI2VuZGlm
CiB9CiAKQEAgLTI3NDYsMTQgKzI4NTEsMTQgQEAgdm9pZCBDb2RlQmxvY2s6OnZpc2l0T1NSRXhp
dFRhcmdldHMoU2xvdAogICAgIC8vIGd1YXJhbnRlZWluZyB0aGF0IGl0IG1hdGNoZXMgdGhlIGRl
dGFpbHMgb2YgdGhlIENvZGVCbG9jayB3ZSBjb21waWxlZAogICAgIC8vIHRoZSBPU1IgZXhpdCBh
Z2FpbnN0LgogCi0gICAgYWx0ZXJuYXRpdmUoKS0+dmlzaXRTdHJvbmdseSh2aXNpdG9yKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZCgmbV9hbHRlcm5hdGl2ZSk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
ICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7
CiAgICAgaWYgKGRmZ0NvbW1vbi0+aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3IgKGF1
dG8qIGlubGluZUNhbGxGcmFtZSA6ICpkZmdDb21tb24tPmlubGluZUNhbGxGcmFtZXMpIHsKICAg
ICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCkpOwot
ICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpLT52aXNpdFN0
cm9uZ2x5KHZpc2l0b3IpOworICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJl
YWRPbmx5UG9pbnRlcihpbmxpbmVDYWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCkpOwogICAg
ICAgICB9CiAgICAgfQogI2VuZGlmCkBAIC0yOTYyLDggKzMwNjcsNiBAQCB2b2lkIENvZGVCbG9j
azo6dW5saW5rSW5jb21pbmdDYWxscygpCiAgICAgd2hpbGUgKG1faW5jb21pbmdMTEludENhbGxz
LmJlZ2luKCkgIT0gbV9pbmNvbWluZ0xMSW50Q2FsbHMuZW5kKCkpCiAgICAgICAgIG1faW5jb21p
bmdMTEludENhbGxzLmJlZ2luKCktPnVubGluaygpOwogI2lmIEVOQUJMRShKSVQpCi0gICAgaWYg
KG1faW5jb21pbmdDYWxscy5pc0VtcHR5KCkgJiYgbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm47CiAgICAgd2hpbGUgKG1faW5jb21pbmdDYWxscy5i
ZWdpbigpICE9IG1faW5jb21pbmdDYWxscy5lbmQoKSkKICAgICAgICAgbV9pbmNvbWluZ0NhbGxz
LmJlZ2luKCktPnVubGluaygqdm0oKSk7CiAgICAgd2hpbGUgKG1faW5jb21pbmdQb2x5bW9ycGhp
Y0NhbGxzLmJlZ2luKCkgIT0gbV9pbmNvbWluZ1BvbHltb3JwaGljQ2FsbHMuZW5kKCkpCkBAIC0y
OTc3LDY2ICszMDgwLDY2IEBAIHZvaWQgQ29kZUJsb2NrOjpsaW5rSW5jb21pbmdDYWxsKEV4ZWNT
dGEKICAgICBtX2luY29taW5nTExJbnRDYWxscy5wdXNoKGluY29taW5nKTsKIH0KIAotUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+IENvZGVCbG9jazo6bmV3UmVwbGFjZW1lbnQoKQorQ29kZUJsb2NrKiBD
b2RlQmxvY2s6Om5ld1JlcGxhY2VtZW50KCkKIHsKICAgICByZXR1cm4gb3duZXJTY3JpcHRFeGVj
dXRhYmxlKCktPm5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCgp
KTsKIH0KIAogI2lmIEVOQUJMRShKSVQpCi1Db2RlQmxvY2sqIFByb2dyYW1Db2RlQmxvY2s6OnJl
cGxhY2VtZW50KCkKK0NvZGVCbG9jayogQ29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCiB7Ci0gICAg
cmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29k
ZUJsb2NrKCk7Ci19CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8gPSB0aGlzLT5jbGFz
c0luZm8oKTsKIAotQ29kZUJsb2NrKiBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpyZXBsYWNlbWVu
dCgpCi17Ci0gICAgcmV0dXJuIGpzQ2FzdDxNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVy
RXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrKCk7Ci19CisgICAgaWYgKGNsYXNzSW5mbyA9PSBGdW5j
dGlvbkNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2NrRm9yKG1faXNDb25zdHJ1Y3Rv
ciA/IENvZGVGb3JDb25zdHJ1Y3QgOiBDb2RlRm9yQ2FsbCk7CiAKLUNvZGVCbG9jayogRXZhbENv
ZGVCbG9jazo6cmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBqc0Nhc3Q8RXZhbEV4ZWN1dGFi
bGUqPihvd25lckV4ZWN1dGFibGUoKSktPmNvZGVCbG9jaygpOwotfQorICAgIGlmIChjbGFzc0lu
Zm8gPT0gRXZhbENvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PEV2YWxF
eGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKIAotQ29kZUJsb2Nr
KiBGdW5jdGlvbkNvZGVCbG9jazo6cmVwbGFjZW1lbnQoKQotewotICAgIHJldHVybiBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4ob3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2tGb3IobV9p
c0NvbnN0cnVjdG9yID8gQ29kZUZvckNvbnN0cnVjdCA6IENvZGVGb3JDYWxsKTsKLX0KKyAgICBp
ZiAoY2xhc3NJbmZvID09IFByb2dyYW1Db2RlQmxvY2s6OmluZm8oKSkKKyAgICAgICAgcmV0dXJu
IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KG93bmVyRXhlY3V0YWJsZSgpKS0+Y29kZUJsb2Nr
KCk7CiAKLURGRzo6Q2FwYWJpbGl0eUxldmVsIFByb2dyYW1Db2RlQmxvY2s6OmNhcGFiaWxpdHlM
ZXZlbEludGVybmFsKCkKLXsKLSAgICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVs
KHRoaXMpOwotfQorICAgIGlmIChjbGFzc0luZm8gPT0gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6
aW5mbygpKQorICAgICAgICByZXR1cm4ganNDYXN0PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4o
b3duZXJFeGVjdXRhYmxlKCkpLT5jb2RlQmxvY2soKTsKIAotREZHOjpDYXBhYmlsaXR5TGV2ZWwg
TW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQotewotICAg
IHJldHVybiBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci19CisjaWYgRU5BQkxF
KFdFQkFTU0VNQkxZKQorICAgIGlmIChjbGFzc0luZm8gPT0gV2ViQXNzZW1ibHlDb2RlQmxvY2s6
OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHIKKyNlbmRpZgogCi1ERkc6OkNhcGFiaWxp
dHlMZXZlbCBFdmFsQ29kZUJsb2NrOjpjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpCi17Ci0gICAg
cmV0dXJuIERGRzo6ZXZhbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOwogfQogCi1ERkc6OkNhcGFiaWxp
dHlMZXZlbCBGdW5jdGlvbkNvZGVCbG9jazo6Y2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKQorREZH
OjpDYXBhYmlsaXR5TGV2ZWwgQ29kZUJsb2NrOjpjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCkKIHsK
LSAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQotICAgICAgICByZXR1cm4gREZHOjpmdW5jdGlvbkZv
ckNvbnN0cnVjdENhcGFiaWxpdHlMZXZlbCh0aGlzKTsKLSAgICByZXR1cm4gREZHOjpmdW5jdGlv
bkZvckNhbGxDYXBhYmlsaXR5TGV2ZWwodGhpcyk7Ci19CisgICAgY29uc3QgQ2xhc3NJbmZvKiBj
bGFzc0luZm8gPSB0aGlzLT5jbGFzc0luZm8oKTsKKworICAgIGlmIChjbGFzc0luZm8gPT0gRnVu
Y3Rpb25Db2RlQmxvY2s6OmluZm8oKSkgeworICAgICAgICBpZiAobV9pc0NvbnN0cnVjdG9yKQor
ICAgICAgICAgICAgcmV0dXJuIERGRzo6ZnVuY3Rpb25Gb3JDb25zdHJ1Y3RDYXBhYmlsaXR5TGV2
ZWwodGhpcyk7CisgICAgICAgIHJldHVybiBERkc6OmZ1bmN0aW9uRm9yQ2FsbENhcGFiaWxpdHlM
ZXZlbCh0aGlzKTsKKyAgICB9CisKKyAgICBpZiAoY2xhc3NJbmZvID09IEV2YWxDb2RlQmxvY2s6
OmluZm8oKSkKKyAgICAgICAgcmV0dXJuIERGRzo6ZXZhbENhcGFiaWxpdHlMZXZlbCh0aGlzKTsK
KworICAgIGlmIChjbGFzc0luZm8gPT0gUHJvZ3JhbUNvZGVCbG9jazo6aW5mbygpKQorICAgICAg
ICByZXR1cm4gREZHOjpwcm9ncmFtQ2FwYWJpbGl0eUxldmVsKHRoaXMpOworCisgICAgaWYgKGNs
YXNzSW5mbyA9PSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjppbmZvKCkpCisgICAgICAgIHJldHVy
biBERkc6OnByb2dyYW1DYXBhYmlsaXR5TGV2ZWwodGhpcyk7CiAKICNpZiBFTkFCTEUoV0VCQVNT
RU1CTFkpCi1Db2RlQmxvY2sqIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpyZXBsYWNlbWVudCgpCi17
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19CisgICAgaWYgKGNsYXNzSW5mbyA9PSBXZWJBc3NlbWJs
eUNvZGVCbG9jazo6aW5mbygpKQorICAgICAgICByZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOwor
I2VuZGlmCiAKLURGRzo6Q2FwYWJpbGl0eUxldmVsIFdlYkFzc2VtYmx5Q29kZUJsb2NrOjpjYXBh
YmlsaXR5TGV2ZWxJbnRlcm5hbCgpCi17CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKICAgICByZXR1cm4gREZHOjpDYW5ub3RDb21waWxlOwogfQotI2VuZGlmCi0jZW5kaWYKKwor
I2VuZGlmIC8vIEVOQUJMRShKSVQpCiAKIHZvaWQgQ29kZUJsb2NrOjpqZXR0aXNvbihQcm9maWxl
cjo6SmV0dGlzb25SZWFzb24gcmVhc29uLCBSZW9wdGltaXphdGlvbk1vZGUgbW9kZSwgY29uc3Qg
RmlyZURldGFpbCogZGV0YWlsKQogewpAQCAtMzk4MCw3ICs0MDgzLDcgQEAgdW5zaWduZWQgQ29k
ZUJsb2NrOjpyYXJlQ2FzZVByb2ZpbGVDb3VudAogI2lmIEVOQUJMRShKSVQpCiBERkc6OkNhcGFi
aWxpdHlMZXZlbCBDb2RlQmxvY2s6OmNhcGFiaWxpdHlMZXZlbCgpCiB7Ci0gICAgREZHOjpDYXBh
YmlsaXR5TGV2ZWwgcmVzdWx0ID0gY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKTsKKyAgICBERkc6
OkNhcGFiaWxpdHlMZXZlbCByZXN1bHQgPSBjb21wdXRlQ2FwYWJpbGl0eUxldmVsKCk7CiAgICAg
bV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZSA9IHJlc3VsdDsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNp
b24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTAgQEAKICNpbmNsdWRlICJDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZU9mZnNldC5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNp
bmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKLSNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb2RlVHlwZS5oIgogI2luY2x1ZGUg
IkNvbXBhY3RKSVRDb2RlTWFwLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNp
bmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1
ZGUgIkRlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAtNDksMTggKzQ5LDE5IEBACiAj
aW5jbHVkZSAiRXhlY3V0aW9uQ291bnRlci5oIgogI2luY2x1ZGUgIkV4cHJlc3Npb25SYW5nZUlu
Zm8uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgotI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRp
b25Qcm9maWxlLmgiCi0jaW5jbHVkZSAiT3B0aW9ucy5oIgotI2luY2x1ZGUgIlB1dFByb3BlcnR5
U2xvdC5oIgogI2luY2x1ZGUgIkluc3RydWN0aW9uLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgog
I2luY2x1ZGUgIkpJVFdyaXRlQmFycmllci5oIgorI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSnVtcFRhYmxlLmgiCiAjaW5jbHVkZSAi
TExJbnRDYWxsTGlua0luZm8uaCIKICNpbmNsdWRlICJMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5o
IgorI2luY2x1ZGUgIk9iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgiCisjaW5jbHVkZSAiT3B0aW9u
cy5oIgogI2luY2x1ZGUgIlByb2ZpbGVyQ29tcGlsYXRpb24uaCIKICNpbmNsdWRlICJQcm9maWxl
ckpldHRpc29uUmVhc29uLmgiCisjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCiAjaW5jbHVk
ZSAiUmVnRXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKICNpbmNs
dWRlICJVbmNvbmRpdGlvbmFsRmluYWxpemVyLmgiCkBAIC04NSwyNiArODYsNDUgQEAgY2xhc3Mg
SlNNb2R1bGVFbnZpcm9ubWVudDsKIAogZW51bSBSZW9wdGltaXphdGlvbk1vZGUgeyBEb250Q291
bnRSZW9wdGltaXphdGlvbiwgQ291bnRSZW9wdGltaXphdGlvbiB9OwogCi1jbGFzcyBDb2RlQmxv
Y2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Q29kZUJsb2NrPiwgcHVibGljIFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIsIHB1YmxpYyBXZWFrUmVmZXJlbmNlSGFydmVzdGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIENvZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwg
eworICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpczsKICAgICBmcmllbmQgY2xhc3MgSklUOwogICAgIGZyaWVuZCBjbGFzcyBM
TEludE9mZnNldHNFeHRyYWN0b3I7CisKKyAgICBjbGFzcyBVbmNvbmRpdGlvbmFsRmluYWxpemVy
IDogcHVibGljIEpTQzo6VW5jb25kaXRpb25hbEZpbmFsaXplciB7IAorICAgICAgICB2aXJ0dWFs
IHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICB9OworCisgICAg
Y2xhc3MgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciA6IHB1YmxpYyBKU0M6OldlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIgeworICAgICAgICB2aXJ0dWFsIHZvaWQgdmlzaXRXZWFrUmVmZXJlbmNlcyhTbG90
VmlzaXRvciYpIG92ZXJyaWRlOworICAgIH07CisKIHB1YmxpYzoKICAgICBlbnVtIENvcHlQYXJz
ZWRCbG9ja1RhZyB7IENvcHlQYXJzZWRCbG9jayB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOworCisgICAgREVDTEFSRV9JTkZPOworCiBwcm90ZWN0ZWQ6Ci0gICAgQ29kZUJsb2Nr
KENvcHlQYXJzZWRCbG9ja1RhZywgQ29kZUJsb2NrJiBvdGhlcik7Ci0gICAgICAgIAotICAgIENv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29kZUJs
b2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+LCB1bnNpZ25lZCBzb3Vy
Y2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCk7CisgICAgQ29kZUJsb2Nr
KFZNKiwgU3RydWN0dXJlKiwgQ29weVBhcnNlZEJsb2NrVGFnLCBDb2RlQmxvY2smIG90aGVyKTsK
KyAgICBDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiwgSlNTY29wZSosIFBhc3NSZWZQdHI8U291cmNl
UHJvdmlkZXI+LCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVt
bk9mZnNldCk7CisjaWYgRU5BQkxFKFdFQkFTU0VNQkxZKQorICAgIENvZGVCbG9jayhWTSosIFN0
cnVjdHVyZSosIFdlYkFzc2VtYmx5RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBWTSYsIEpT
R2xvYmFsT2JqZWN0Kik7CisjZW5kaWYKKworICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBD
b3B5UGFyc2VkQmxvY2tUYWcsIENvZGVCbG9jayYgb3RoZXIpOworICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkQ29k
ZUJsb2NrKiwgSlNTY29wZSopOwogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBDb2RlQmxv
Y2soV2ViQXNzZW1ibHlFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFZNJiwgSlNHbG9iYWxP
YmplY3QqKTsKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgV2ViQXNzZW1ibHlFeGVjdXRh
YmxlKiBvd25lckV4ZWN1dGFibGUsIEpTR2xvYmFsT2JqZWN0Kik7CiAjZW5kaWYKIAogICAgIFdy
aXRlQmFycmllcjxKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CiAgICAgSGVhcCogbV9o
ZWFwOwogCiBwdWJsaWM6Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdmlydHVhbCB+Q29kZUJsb2Nr
KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvZGVCbG9jaygpOwogCiAgICAgVW5saW5rZWRD
b2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV91bmxpbmtlZENv
ZGUuZ2V0KCk7IH0KIApAQCAtMTI0LDggKzE0NCw4IEBAIHB1YmxpYzoKICAgICBpbnQqIGFkZHJl
c3NPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiAmbV9udW1QYXJhbWV0ZXJzOyB9CiAgICAgc3Rh
dGljIHB0cmRpZmZfdCBvZmZzZXRPZk51bVBhcmFtZXRlcnMoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoQ29kZUJsb2NrLCBtX251bVBhcmFtZXRlcnMpOyB9CiAKLSAgICBDb2RlQmxvY2sqIGFs
dGVybmF0aXZlKCkgeyByZXR1cm4gbV9hbHRlcm5hdGl2ZS5nZXQoKTsgfQotICAgIHZvaWQgc2V0
QWx0ZXJuYXRpdmUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGFsdGVybmF0aXZlKSB7IG1fYWx0ZXJu
YXRpdmUgPSBhbHRlcm5hdGl2ZTsgfQorICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmUoKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxDb2RlQmxvY2sqPihtX2FsdGVybmF0aXZlLmdldCgpKTsg
fQorICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoVk0mLCBDb2RlQmxvY2sqKTsKIAogICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKEZ1bmN0
b3ImJiBmdW5jdG9yKQogICAgIHsKQEAgLTE0OCwxNiArMTY4LDE4IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHJldHVybiBzcGVjaWFsaXphdGlvbkZyb21Jc0NvbnN0cnVjdChtX2lzQ29uc3Ry
dWN0b3IpOwogICAgIH0KLSAgICAKKworICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmVGb3JKZXR0
aXNvbigpOyAgICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAgICAK
ICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lVmVy
c2lvbigpOwogCi0gICAgdm9pZCBjbGVhck1hcmtzKCk7Ci0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYpOwotICAgIHZvaWQgdmlzaXRTdHJvbmdseShTbG90VmlzaXRvciYpOwor
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAg
ICB2b2lkIHZpc2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImKTsKKyAgICB2b2lkIHZpc2l0V2Vha2x5
KFNsb3RWaXNpdG9yJik7CisgICAgdm9pZCBjbGVhclZpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZCgp
OwogCiAgICAgdm9pZCBkdW1wU291cmNlKCk7CiAgICAgdm9pZCBkdW1wU291cmNlKFByaW50U3Ry
ZWFtJik7CkBAIC0yNjUsNyArMjg3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluc3RydWN0
aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2luc3RydWN0aW9ucy5zaXplKCk7IH0KIAogICAg
IC8vIEV4YWN0bHkgZXF1aXZhbGVudCB0byBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5u
ZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zvcihjb2RlQmxvY2stPnNwZWNpYWxpemF0aW9uS2luZCgp
KQotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdSZXBsYWNlbWVudCgpOworICAgIENvZGVC
bG9jayogbmV3UmVwbGFjZW1lbnQoKTsKICAgICAKICAgICB2b2lkIHNldEpJVENvZGUoUGFzc1Jl
ZlB0cjxKSVRDb2RlPiBjb2RlKQogICAgIHsKQEAgLTI5MSw5ICszMTMsOSBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdmlydHVhbCBDb2RlQmxvY2sqIHJlcGxh
Y2VtZW50KCkgPSAwOworICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKTsKIAotICAgIHZpcnR1
YWwgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSA9IDA7Cisg
ICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgY29tcHV0ZUNhcGFiaWxpdHlMZXZlbCgpOwogICAgIERG
Rzo6Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbCgpOwogICAgIERGRzo6Q2FwYWJpbGl0
eUxldmVsIGNhcGFiaWxpdHlMZXZlbFN0YXRlKCkgeyByZXR1cm4gbV9jYXBhYmlsaXR5TGV2ZWxT
dGF0ZTsgfQogCkBAIC01NDMsNyArNTY1LDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgdW5z
aWduZWQgcmVzdWx0ID0gbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCk7CiAgICAgICAgIG1fY29u
c3RhbnRSZWdpc3RlcnMuYXBwZW5kKFdyaXRlQmFycmllcjxVbmtub3duPigpKTsKLSAgICAgICAg
bV9jb25zdGFudFJlZ2lzdGVycy5sYXN0KCkuc2V0KG1fZ2xvYmFsT2JqZWN0LT52bSgpLCBtX293
bmVyRXhlY3V0YWJsZS5nZXQoKSwgdik7CisgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMubGFz
dCgpLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgdGhpcywgdik7CiAgICAgICAgIG1fY29uc3Rh
bnRzU291cmNlQ29kZVJlcHJlc2VudGF0aW9uLmFwcGVuZChTb3VyY2VDb2RlUmVwcmVzZW50YXRp
b246Ok90aGVyKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CkBAIC04OTUsOCArOTE3
LDYgQEAgcHVibGljOgogICAgIH0KIAogcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCB2aXNp
dFdlYWtSZWZlcmVuY2VzKFNsb3RWaXNpdG9yJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lk
IGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBmaW5hbGl6ZUxM
SW50SW5saW5lQ2FjaGVzKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUJhc2VsaW5lSklUSW5saW5lQ2Fj
aGVzKCk7CiAKQEAgLTkyMywxNCArOTQzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIHNpemVfdCBj
b3VudCA9IGNvbnN0YW50cy5zaXplKCk7CiAgICAgICAgIG1fY29uc3RhbnRSZWdpc3RlcnMucmVz
aXplVG9GaXQoY291bnQpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyBp
KyspCi0gICAgICAgICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgb3duZXJF
eGVjdXRhYmxlKCksIGNvbnN0YW50c1tpXS5nZXQoKSk7CisgICAgICAgICAgICBtX2NvbnN0YW50
UmVnaXN0ZXJzW2ldLnNldCgqbV92bSwgdGhpcywgY29uc3RhbnRzW2ldLmdldCgpKTsKICAgICAg
ICAgbV9jb25zdGFudHNTb3VyY2VDb2RlUmVwcmVzZW50YXRpb24gPSBjb25zdGFudHNTb3VyY2VD
b2RlUmVwcmVzZW50YXRpb247CiAgICAgfQogCiAgICAgdm9pZCByZXBsYWNlQ29uc3RhbnQoaW50
IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnRS
ZWdpc3RlckluZGV4KGluZGV4KSAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KGluZGV4IC0gRmlyc3RD
b25zdGFudFJlZ2lzdGVySW5kZXgpIDwgbV9jb25zdGFudFJlZ2lzdGVycy5zaXplKCkpOwotICAg
ICAgICBtX2NvbnN0YW50UmVnaXN0ZXJzW2luZGV4IC0gRmlyc3RDb25zdGFudFJlZ2lzdGVySW5k
ZXhdLnNldChtX2dsb2JhbE9iamVjdC0+dm0oKSwgbV9vd25lckV4ZWN1dGFibGUuZ2V0KCksIHZh
bHVlKTsKKyAgICAgICAgbV9jb25zdGFudFJlZ2lzdGVyc1tpbmRleCAtIEZpcnN0Q29uc3RhbnRS
ZWdpc3RlckluZGV4XS5zZXQobV9nbG9iYWxPYmplY3QtPnZtKCksIHRoaXMsIHZhbHVlKTsKICAg
ICB9CiAKICAgICB2b2lkIGR1bXBCeXRlY29kZSgKQEAgLTEwMDIsOCArMTAyMiw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2lzU3RyaWN0TW9kZTsKICAgICBib29sIG1fbmVlZHNBY3RpdmF0aW9u
OwogCi0gICAgQXRvbWljPGJvb2w+IG1fdmlzaXRBZ2dyZWdhdGVIYXNCZWVuQ2FsbGVkOwotICAg
IEF0b21pYzxib29sPiBtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVkOworICAgIEF0b21pYzxi
b29sPiBtX3Zpc2l0V2Vha2x5SGFzQmVlbkNhbGxlZDsKIAogICAgIFJlZlB0cjxTb3VyY2VQcm92
aWRlcj4gbV9zb3VyY2U7CiAgICAgdW5zaWduZWQgbV9zb3VyY2VPZmZzZXQ7CkBAIC0xMDQ1LDcg
KzEwNjQsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8RnVuY3Rpb25FeGVj
dXRhYmxlPj4gbV9mdW5jdGlvbkRlY2xzOwogICAgIFZlY3RvcjxXcml0ZUJhcnJpZXI8RnVuY3Rp
b25FeGVjdXRhYmxlPj4gbV9mdW5jdGlvbkV4cHJzOwogCi0gICAgUmVmUHRyPENvZGVCbG9jaz4g
bV9hbHRlcm5hdGl2ZTsKKyAgICBXcml0ZUJhcnJpZXI8Q29kZUJsb2NrPiBtX2FsdGVybmF0aXZl
OwogICAgIAogICAgIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlciBtX2xsaW50RXhlY3V0ZUNvdW50
ZXI7CiAKQEAgLTEwNjUsMTI0ICsxMDg0LDI0MiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShKSVQp
CiAgICAgREZHOjpDYXBhYmlsaXR5TGV2ZWwgbV9jYXBhYmlsaXR5TGV2ZWxTdGF0ZTsKICNlbmRp
ZgorCisgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9uYWxGaW5hbGl6ZXI7
CisgICAgV2Vha1JlZmVyZW5jZUhhcnZlc3RlciBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXI7CiB9
OwogCiAvLyBQcm9ncmFtIGNvZGUgaXMgbm90IG1hcmtlZCBieSBhbnkgZnVuY3Rpb24sIHNvIHdl
IG1ha2UgdGhlIGdsb2JhbCBvYmplY3QKIC8vIHJlc3BvbnNpYmxlIGZvciBtYXJraW5nIGl0Lgog
CiBjbGFzcyBHbG9iYWxDb2RlQmxvY2sgOiBwdWJsaWMgQ29kZUJsb2NrIHsKKyAgICB0eXBlZGVm
IENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKwogcHJvdGVjdGVkOgotICAgIEds
b2JhbENvZGVCbG9jayhDb3B5UGFyc2VkQmxvY2tUYWcsIEdsb2JhbENvZGVCbG9jayYgb3RoZXIp
Ci0gICAgOiBDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICBHbG9iYWxDb2Rl
QmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrVGFnLCBH
bG9iYWxDb2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJl
LCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQogICAgIHsKICAgICB9Ci0gICAgICAgIAotICAgIEds
b2JhbENvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2Vk
Q29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBzb3VyY2VPZmZzZXQsIHVu
c2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAgICAgOiBDb2RlQmxvY2sob3duZXJF
eGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3Vy
Y2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKworICAgIEdsb2JhbENvZGVCbG9jayhW
TSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywgSlNTY29wZSogc2Nv
cGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBz
b3VyY2VPZmZzZXQsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICAgICAgOiBD
b2RlQmxvY2sodm0sIHN0cnVjdHVyZSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9j
aywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIGZpcnN0TGluZUNvbHVtbk9m
ZnNldCkKICAgICB7CiAgICAgfQogfTsKIAogY2xhc3MgUHJvZ3JhbUNvZGVCbG9jayA6IHB1Ymxp
YyBHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgotICAgIFByb2dyYW1Db2RlQmxvY2soQ29weVBh
cnNlZEJsb2NrVGFnLCBQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICA6IEdsb2JhbENvZGVC
bG9jayhDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAgIHR5cGVkZWYgR2xvYmFsQ29kZUJsb2Nr
IEJhc2U7CisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFByb2dyYW1Db2RlQmxvY2sq
IGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3Ro
ZXIpCiAgICAgeworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAg
ICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZtLT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdl
dCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgaW5zdGFuY2UtPmZpbmlzaENy
ZWF0aW9uKCp2bSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIHJldHVybiBpbnN0
YW5jZTsKICAgICB9CiAKLSAgICBQcm9ncmFtQ29kZUJsb2NrKFByb2dyYW1FeGVjdXRhYmxlKiBv
d25lckV4ZWN1dGFibGUsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxv
Y2ssIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92
aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQotICAgICAgICA6IEdsb2JhbENv
ZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNl
UHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICBzdGF0aWMgUHJvZ3JhbUNv
ZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJs
ZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAg
SlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVy
LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCiAgICAgeworICAgICAgICBQcm9ncmFt
Q29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb2dyYW1D
b2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIFByb2dyYW1Db2RlQmxvY2sodm0sIHZt
LT5wcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIHVubGlu
a2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIsIGZpcnN0TGluZUNvbHVtbk9mZnNl
dCk7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0sIG93bmVyRXhlY3V0YWJs
ZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlKTsKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOwog
ICAgIH0KIAotI2lmIEVOQUJMRShKSVQpCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCBDb2RlQmxv
Y2sqIHJlcGxhY2VtZW50KCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCBERkc6OkNhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWxJbnRlcm5hbCgpIG92ZXJyaWRlOwotI2VuZGlmCisgICAgc3Rh
dGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
dWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxs
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQ
cm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRC
bG9ja1RhZywgUHJvZ3JhbUNvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAgIH0K
KworICAgIFByb2dyYW1Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJv
Z3JhbUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
KiB1bmxpbmtlZENvZGVCbG9jaywKKyAgICAgICAgSlNTY29wZSogc2NvcGUsIFBhc3NSZWZQdHI8
U291cmNlUHJvdmlkZXI+IHNvdXJjZVByb3ZpZGVyLCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5P
ZmZzZXQpCisgICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhl
Y3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgZmly
c3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOwogfTsKIAogY2xhc3MgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA6IHB1Ymxp
YyBHbG9iYWxDb2RlQmxvY2sgewogcHVibGljOgotICAgIE1vZHVsZVByb2dyYW1Db2RlQmxvY2so
Q29weVBhcnNlZEJsb2NrVGFnLCBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrJiBvdGhlcikKLSAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB0eXBlZGVm
IEdsb2JhbENvZGVCbG9jayBCYXNlOworICAgIERFQ0xBUkVfSU5GTzsKKworICAgIHN0YXRpYyBN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcs
IE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQogICAgIHsKKyAgICAgICAgTW9kdWxlUHJv
Z3JhbUNvZGVCbG9jayogaW5zdGFuY2UgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1
bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFt
Q29kZUJsb2NrKHZtLCB2bS0+bW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwg
Q29weVBhcnNlZEJsb2NrLCBvdGhlcik7CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlv
bigqdm0sIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICByZXR1cm4gaW5zdGFuY2U7
CiAgICAgfQogCi0gICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayhNb2R1bGVQcm9ncmFtRXhlY3V0
YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRl
cj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKLSAgICAg
ICAgOiBHbG9iYWxDb2RlQmxvY2sob3duZXJFeGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
c2NvcGUsIHNvdXJjZVByb3ZpZGVyLCAwLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgc3Rh
dGljIE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIE1vZHVsZVByb2dyYW1F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9j
ayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAgIEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRy
PFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1u
T2Zmc2V0KQogICAgIHsKKyAgICAgICAgTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogaW5zdGFuY2Ug
PSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bS0+
aGVhcCkpCisgICAgICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKHZtLCB2bS0+bW9kdWxl
UHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5nZXQoKSwgb3duZXJFeGVjdXRhYmxlLCB1bmxpbmtl
ZENvZGVCbG9jaywgc2NvcGUsIHNvdXJjZVByb3ZpZGVyLCBmaXJzdExpbmVDb2x1bW5PZmZzZXQp
OworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUs
IHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAg
ICB9CiAKLSNpZiBFTkFCTEUoSklUKQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgQ29kZUJsb2Nr
KiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5TGV2
ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKLSNlbmRpZgorICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5
cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTW9k
dWxlUHJvZ3JhbUNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFy
c2VkQmxvY2tUYWcsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2smIG90aGVyKQorICAgICAgICA6IEds
b2JhbENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssCisgICAgICAg
IEpTU2NvcGUqIHNjb3BlLCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRl
ciwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IEdsb2JhbENvZGVC
bG9jayh2bSwgc3RydWN0dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBz
Y29wZSwgc291cmNlUHJvdmlkZXIsIDAsIGZpcnN0TGluZUNvbHVtbk9mZnNldCkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIH07CiAKIGNsYXNzIEV2
YWxDb2RlQmxvY2sgOiBwdWJsaWMgR2xvYmFsQ29kZUJsb2NrIHsKIHB1YmxpYzoKLSAgICBFdmFs
Q29kZUJsb2NrKENvcHlQYXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCi0gICAg
ICAgIDogR2xvYmFsQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgdHlwZWRl
ZiBHbG9iYWxDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMg
RXZhbENvZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgQ29weVBhcnNlZEJsb2NrVGFnLCBFdmFsQ29k
ZUJsb2NrJiBvdGhlcikKICAgICB7CisgICAgICAgIEV2YWxDb2RlQmxvY2sqIGluc3RhbmNlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbENvZGVCbG9jaz4odm0tPmhlYXApKQorICAg
ICAgICAgICAgRXZhbENvZGVCbG9jayh2bSwgdm0tPmV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0
KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAgICBpbnN0YW5jZS0+ZmluaXNoQ3Jl
YXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAgICAgICAgcmV0dXJuIGluc3Rh
bmNlOwogICAgIH0KLSAgICAgICAgCi0gICAgRXZhbENvZGVCbG9jayhFdmFsRXhlY3V0YWJsZSog
b3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LCBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIpCi0gICAgICAgIDogR2xvYmFsQ29kZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRD
b2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQcm92aWRlciwgMCwgMSkKKworICAgIHN0YXRpYyBFdmFs
Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxl
LCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Nj
b3BlKiBzY29wZSwgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCiAg
ICAgeworICAgICAgICBFdmFsQ29kZUJsb2NrKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPEV2YWxDb2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAgICAgIEV2YWxDb2Rl
QmxvY2sodm0sIHZtLT5ldmFsQ29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFi
bGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJvdmlkZXIpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9Ci0gICAgCisK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCiAgICAgY29u
c3QgSWRlbnRpZmllciYgdmFyaWFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHVubGlua2Vk
RXZhbENvZGVCbG9jaygpLT52YXJpYWJsZShpbmRleCk7IH0KICAgICB1bnNpZ25lZCBudW1WYXJp
YWJsZXMoKSB7IHJldHVybiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKS0+bnVtVmFyaWFibGVzKCk7
IH0KICAgICAKLSNpZiBFTkFCTEUoSklUKQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgQ29kZUJs
b2NrKiByZXBsYWNlbWVudCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgREZHOjpDYXBhYmlsaXR5
TGV2ZWwgY2FwYWJpbGl0eUxldmVsSW50ZXJuYWwoKSBvdmVycmlkZTsKLSNlbmRpZgorcHJpdmF0
ZToKKyAgICBFdmFsQ29kZUJsb2NrKFZNKiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvcHlQ
YXJzZWRCbG9ja1RhZywgRXZhbENvZGVCbG9jayYgb3RoZXIpCisgICAgICAgIDogR2xvYmFsQ29k
ZUJsb2NrKHZtLCBzdHJ1Y3R1cmUsIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgeworICAg
IH0KKyAgICAgICAgCisgICAgRXZhbENvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBFdmFsRXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlLCBVbmxpbmtlZEV2YWxDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrLAorICAgICAgICBKU1Njb3BlKiBzY29wZSwgUGFzc1JlZlB0
cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIpCisgICAgICAgIDogR2xvYmFsQ29kZUJs
b2NrKHZtLCBzdHJ1Y3R1cmUsIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNj
b3BlLCBzb3VyY2VQcm92aWRlciwgMCwgMSkKKyAgICB7CisgICAgfQogICAgIAorICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKIHByaXZhdGU6CiAgICAgVW5saW5rZWRFdmFsQ29k
ZUJsb2NrKiB1bmxpbmtlZEV2YWxDb2RlQmxvY2soKSBjb25zdCB7IHJldHVybiBqc0Nhc3Q8VW5s
aW5rZWRFdmFsQ29kZUJsb2NrKj4odW5saW5rZWRDb2RlQmxvY2soKSk7IH0KIH07CiAKIGNsYXNz
IEZ1bmN0aW9uQ29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CiBwdWJsaWM6Ci0gICAgRnVu
Y3Rpb25Db2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBGdW5jdGlvbkNvZGVCbG9jayYgb3Ro
ZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywgb3RoZXIpCisgICAgdHlw
ZWRlZiBDb2RlQmxvY2sgQmFzZTsKKyAgICBERUNMQVJFX0lORk87CisKKyAgICBzdGF0aWMgRnVu
Y3Rpb25Db2RlQmxvY2sqIGNyZWF0ZShWTSogdm0sIENvcHlQYXJzZWRCbG9ja1RhZywgRnVuY3Rp
b25Db2RlQmxvY2smIG90aGVyKQorICAgIHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGlu
c3RhbmNlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZt
LT5oZWFwKSkKKyAgICAgICAgICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25D
b2RlQmxvY2tTdHJ1Y3R1cmUuZ2V0KCksIENvcHlQYXJzZWRCbG9jaywgb3RoZXIpOworICAgICAg
ICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsK
KyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworICAgIH0KKworICAgIHN0YXRpYyBGdW5jdGlvbkNv
ZGVCbG9jayogY3JlYXRlKFZNKiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBvd25lckV4ZWN1dGFi
bGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLCBKU1Njb3Bl
KiBzY29wZSwKKyAgICAgICAgUGFzc1JlZlB0cjxTb3VyY2VQcm92aWRlcj4gc291cmNlUHJvdmlk
ZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWduZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0
KQogICAgIHsKKyAgICAgICAgRnVuY3Rpb25Db2RlQmxvY2sqIGluc3RhbmNlID0gbmV3IChOb3RO
dWxsLCBhbGxvY2F0ZUNlbGw8RnVuY3Rpb25Db2RlQmxvY2s+KHZtLT5oZWFwKSkKKyAgICAgICAg
ICAgIEZ1bmN0aW9uQ29kZUJsb2NrKHZtLCB2bS0+ZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUu
Z2V0KCksIG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpOworICAgICAgICBp
bnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24oKnZtLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29k
ZUJsb2NrLCBzY29wZSk7CisgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBG
dW5jdGlvbkNvZGVCbG9jayhGdW5jdGlvbkV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIEpTU2NvcGUqIHNjb3Bl
LCBQYXNzUmVmUHRyPFNvdXJjZVByb3ZpZGVyPiBzb3VyY2VQcm92aWRlciwgdW5zaWduZWQgc291
cmNlT2Zmc2V0LCB1bnNpZ25lZCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCi0gICAgICAgIDogQ29k
ZUJsb2NrKG93bmVyRXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBzb3VyY2VQ
cm92aWRlciwgc291cmNlT2Zmc2V0LCBmaXJzdExpbmVDb2x1bW5PZmZzZXQpCisgICAgc3RhdGlj
IFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0
dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlw
ZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBGdW5j
dGlvbkNvZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxv
Y2tUYWcsIEZ1bmN0aW9uQ29kZUJsb2NrJiBvdGhlcikKKyAgICAgICAgOiBDb2RlQmxvY2sodm0s
IHN0cnVjdHVyZSwgQ29weVBhcnNlZEJsb2NrLCBvdGhlcikKKyAgICB7CisgICAgfQorCisgICAg
RnVuY3Rpb25Db2RlQmxvY2soVk0qIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRnVuY3Rpb25F
eGVjdXRhYmxlKiBvd25lckV4ZWN1dGFibGUsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2sqIHVu
bGlua2VkQ29kZUJsb2NrLCBKU1Njb3BlKiBzY29wZSwKKyAgICAgICAgUGFzc1JlZlB0cjxTb3Vy
Y2VQcm92aWRlcj4gc291cmNlUHJvdmlkZXIsIHVuc2lnbmVkIHNvdXJjZU9mZnNldCwgdW5zaWdu
ZWQgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQorICAgICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0
dXJlLCBvd25lckV4ZWN1dGFibGUsIHVubGlua2VkQ29kZUJsb2NrLCBzY29wZSwgc291cmNlUHJv
dmlkZXIsIHNvdXJjZU9mZnNldCwgZmlyc3RMaW5lQ29sdW1uT2Zmc2V0KQogICAgIHsKICAgICB9
CiAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIENvZGVCbG9j
ayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIERGRzo6Q2FwYWJpbGl0eUxl
dmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7Ci0jZW5kaWYKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogfTsKIAogI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkK
IGNsYXNzIFdlYkFzc2VtYmx5Q29kZUJsb2NrIDogcHVibGljIENvZGVCbG9jayB7CiBwdWJsaWM6
Ci0gICAgV2ViQXNzZW1ibHlDb2RlQmxvY2soQ29weVBhcnNlZEJsb2NrVGFnLCBXZWJBc3NlbWJs
eUNvZGVCbG9jayYgb3RoZXIpCi0gICAgICAgIDogQ29kZUJsb2NrKENvcHlQYXJzZWRCbG9jaywg
b3RoZXIpCisgICAgREVDTEFSRV9JTkZPOworCisgICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJs
b2NrKiBjcmVhdGUoVk0qIHZtLCBDb3B5UGFyc2VkQmxvY2tUYWcsIFdlYkFzc2VtYmx5Q29kZUJs
b2NrJiBvdGhlcikKICAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5j
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+
aGVhcCkpCisgICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2Vt
Ymx5Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKTsKKyAg
ICAgICAgaW5zdGFuY2UtPmZpbmlzaENyZWF0aW9uKCp2bSk7CisgICAgICAgIHJldHVybiBpbnN0
YW5jZTsKICAgICB9CiAKLSAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhXZWJBc3NlbWJseUV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQotICAgICAgICA6IENvZGVCbG9jayhvd25lckV4ZWN1dGFibGUsIHZtLCBnbG9iYWxPYmpl
Y3QpCisgICAgc3RhdGljIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjcmVhdGUoVk0qIHZtLCBXZWJB
c3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCkKICAgICB7CisgICAgICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBpbnN0YW5jZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFdlYkFzc2VtYmx5Q29kZUJsb2NrPih2bS0+aGVh
cCkpCisgICAgICAgICAgICBXZWJBc3NlbWJseUNvZGVCbG9jayh2bSwgdm0tPndlYkFzc2VtYmx5
Q29kZUJsb2NrU3RydWN0dXJlLmdldCgpLCBvd25lckV4ZWN1dGFibGUsIGdsb2JhbE9iamVjdCk7
CisgICAgICAgIGluc3RhbmNlLT5maW5pc2hDcmVhdGlvbigqdm0pOworICAgICAgICByZXR1cm4g
aW5zdGFuY2U7CiAgICAgfQogCi0jaWYgRU5BQkxFKEpJVCkKLXByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIERGRzo6
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbEludGVybmFsKCkgb3ZlcnJpZGU7Ci0jZW5k
aWYKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5
cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CisgICAgfQorCitwcml2
YXRlOgorICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvcHlQYXJzZWRCbG9ja1RhZywgV2ViQXNzZW1ibHlDb2RlQmxvY2smIG90aGVyKQorICAg
ICAgICA6IENvZGVCbG9jayh2bSwgc3RydWN0dXJlLCBDb3B5UGFyc2VkQmxvY2ssIG90aGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBXZWJBc3NlbWJseUNvZGVCbG9jayhWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBXZWJBc3NlbWJseUV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICAgICAgOiBDb2RlQmxvY2sodm0sIHN0cnVj
dHVyZSwgb3duZXJFeGVjdXRhYmxlLCB2bSwgZ2xvYmFsT2JqZWN0KQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogfTsKICNlbmRpZgogCkBAIC0xMjEw
LDEwICsxMzQ3LDkgQEAgaW5saW5lIFJlZ2lzdGVyJiBFeGVjU3RhdGU6OnVuY2hlY2tlZFIoVgog
ICAgIHJldHVybiB1bmNoZWNrZWRSKHJlZy5vZmZzZXQoKSk7CiB9CiAKLWlubGluZSB2b2lkIENv
ZGVCbG9jazo6Y2xlYXJNYXJrcygpCitpbmxpbmUgdm9pZCBDb2RlQmxvY2s6OmNsZWFyVmlzaXRX
ZWFrbHlIYXNCZWVuQ2FsbGVkKCkKIHsKLSAgICBtX3Zpc2l0U3Ryb25nbHlIYXNCZWVuQ2FsbGVk
LnN0b3JlKGZhbHNlLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKLSAgICBtX3Zpc2l0QWdn
cmVnYXRlSGFzQmVlbkNhbGxlZC5zdG9yZShmYWxzZSwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhl
ZCk7CisgICAgbV92aXNpdFdlYWtseUhhc0JlZW5DYWxsZWQuc3RvcmUoZmFsc2UsIHN0ZDo6bWVt
b3J5X29yZGVyX3JlbGF4ZWQpOwogfQogCiBpbmxpbmUgdm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmso
dm9pZCogY2FuZGlkYXRlQ29kZUJsb2NrKQpAQCAtMTIzOCwxMiArMTM3NCwxMSBAQCBpbmxpbmUg
dm9pZCBDb2RlQmxvY2tTZXQ6Om1hcmsoQ29kZUJsb2NrCiB7CiAgICAgaWYgKCFjb2RlQmxvY2sp
CiAgICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBGb3JjZSBHQyB0byB2aXNpdCBhbGwgQ29k
ZUJsb2NrcyBvbiB0aGUgc3RhY2ssIGluY2x1ZGluZyBvbGQgQ29kZUJsb2NrcwotICAgIC8vIHRo
YXQgaGF2ZSBub3QgZXhlY3V0ZWQgYSBiYXJyaWVyLiBUaGlzIGlzIG92ZXJraWxsLCBidXQgd2Ug
aGF2ZSBhbHdheXMKLSAgICAvLyBkb25lIHRoaXMsIGFuZCBpdCBtaWdodCBoZWxwIHVzIHJlY292
ZXIgZ3JhY2VmdWxseSBpZiB3ZSBmb3JnZXQgdG8gZXhlY3V0ZQotICAgIC8vIGEgYmFycmllciB3
aGVuIGEgQ29kZUJsb2NrIG5lZWRzIGl0LgotICAgIGNvZGVCbG9jay0+Y2xlYXJNYXJrcygpOwor
CisgICAgLy8gVHJ5IHRvIHJlY292ZXIgZ3JhY2VmdWxseSBpZiB3ZSBmb3JnZXQgdG8gZXhlY3V0
ZSBhIGJhcnJpZXIgZm9yIGEKKyAgICAvLyBDb2RlQmxvY2sgdGhhdCBkb2VzIHZhbHVlIHByb2Zp
bGluZy4gVGhpcyBpcyBwcm9iYWJseSBvdmVya2lsbCwgYnV0IHdlCisgICAgLy8gaGF2ZSBhbHdh
eXMgZG9uZSBpdC4KKyAgICBIZWFwOjpoZWFwKGNvZGVCbG9jayktPndyaXRlQmFycmllcihjb2Rl
QmxvY2spOwogCiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuYWRkKGNvZGVCbG9jayk7CiB9CkBA
IC0xMjUyLDEzICsxMzg3LDEzIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUg
dm9pZCAKIHsKICAgICBzd2l0Y2ggKHR5cGUoKSkgewogICAgIGNhc2UgUHJvZ3JhbUV4ZWN1dGFi
bGVUeXBlOiB7Ci0gICAgICAgIGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGpzQ2FzdDxQcm9n
cmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpCisgICAgICAg
IGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IHN0YXRpY19jYXN0PENvZGVCbG9jayo+KGpzQ2Fz
dDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpLT5tX3Byb2dyYW1Db2RlQmxvY2suZ2V0KCkpKQog
ICAgICAgICAgICAgY29kZUJsb2NrLT5mb3JFYWNoUmVsYXRlZENvZGVCbG9jayhzdGQ6OmZvcndh
cmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNl
IEV2YWxFeGVjdXRhYmxlVHlwZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
PSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpKQor
ICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sq
Pihqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPih0aGlzKS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpKSkK
ICAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTI2Niwx
NSArMTQwMSwxNSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgCiAg
ICAgY2FzZSBGdW5jdGlvbkV4ZWN1dGFibGVUeXBlOiB7CiAgICAgICAgIEZ1bmN0b3IgZihzdGQ6
OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOwogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7Ci0gICAgICAg
IGlmIChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ2Fs
bC5nZXQoKSkKKyAgICAgICAgaWYgKENvZGVCbG9jayogY29kZUJsb2NrID0gc3RhdGljX2Nhc3Q8
Q29kZUJsb2NrKj4oZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmdldCgpKSkKICAgICAg
ICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRDb2RlQmxvY2soZik7Ci0gICAgICAgIGlm
IChDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3Ry
dWN0LmdldCgpKQorICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2Fz
dDxDb2RlQmxvY2sqPihleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKSkp
CiAgICAgICAgICAgICBjb2RlQmxvY2stPmZvckVhY2hSZWxhdGVkQ29kZUJsb2NrKGYpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlVHlw
ZTogewotICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBqc0Nhc3Q8TW9kdWxlUHJv
Z3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrLmdldCgpKQor
ICAgICAgICBpZiAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBzdGF0aWNfY2FzdDxDb2RlQmxvY2sq
Pihqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4ZWN1dGFibGUqPih0aGlzKS0+bV9tb2R1bGVQcm9ncmFt
Q29kZUJsb2NrLmdldCgpKSkKICAgICAgICAgICAgIGNvZGVCbG9jay0+Zm9yRWFjaFJlbGF0ZWRD
b2RlQmxvY2soc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29t
cGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHJldmlzaW9uIDE5MDQz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBK
U0MgewogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2soKSB7IH0KIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6fkRlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaygpIHsgfQogCi12b2lkIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6
Y29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRpb25S
ZXN1bHQgcmVzdWx0KQordm9pZCBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0
aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayosIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBkdW1wQ29tcGlsZWRTb3VyY2VzSWZOZWVkZWQoKTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw4IEBAIHByb3RlY3RlZDoKIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAotICAgIHZpcnR1YWwg
dm9pZCBjb21waWxhdGlvbkRpZEJlY29tZVJlYWR5QXN5bmNocm9ub3VzbHkoQ29kZUJsb2NrKikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayos
IENvbXBpbGF0aW9uUmVzdWx0KTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNv
bWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdD
b2RlQmxvY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShD
b2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJl
c3VsdCk7CiAKICAgICBWZWN0b3I8RGVmZXJyZWRTb3VyY2VEdW1wPiYgZW5zdXJlRGVmZXJyZWRT
b3VyY2VEdW1wKCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFs
Q29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V2YWxDb2RlQ2FjaGUuaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgICAgIAotICAgICAgICBFdmFsRXhlY3V0YWJsZSogZ2V0U2xvdyhFeGVjU3RhdGUqIGV4ZWMs
IFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyLCBib29sIGluU3RyaWN0Q29udGV4dCwgVGhpc1REWk1v
ZGUgdGhpc1REWk1vZGUsIGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgSlNTY29wZSogc2NvcGUp
CisgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBnZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxs
KiBvd25lciwgYm9vbCBpblN0cmljdENvbnRleHQsIFRoaXNURFpNb2RlIHRoaXNURFpNb2RlLCBj
b25zdCBTdHJpbmcmIGV2YWxTb3VyY2UsIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7CiAgICAg
ICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVyVERaOwogICAgICAgICAg
ICAgSlNTY29wZTo6Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3BlLCB2YXJpYWJsZXNVbmRl
clREWik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seW1vcnBoaWNB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
b2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxMSw3ICs0MTEsNyBAQCB2b2lkIEFjY2Vzc0Nhc2U6OmdlbmVyYXRlKEFjY2Vzc0dlbmVyYXRp
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBXZSB3aWxsIGVtaXQgY29kZSB0aGF0IGhhcyBhIHdl
YWsgcmVmZXJlbmNlIHRoYXQgaXNuJ3Qgb3RoZXJ3aXNlIGxpc3RlZCBhbnl3aGVyZS4KLSAgICAg
ICAgc3RhdGUud2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpKTsKKyAgICAgICAgc3RhdGUu
d2Vha1JlZmVyZW5jZXMuYXBwZW5kKFdyaXRlQmFycmllcjxKU0NlbGw+KHZtLCBjb2RlQmxvY2ss
IHN0cnVjdHVyZSkpOwogICAgICAgICAKICAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGNvbmRpdGlvbi5vYmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBz
dGF0ZS5mYWlsQW5kUmVwYXRjaC5hcHBlbmQoCkBAIC0xMTcwLDcgKzExNzAsNyBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgUG9seW1vcnBoaWNBY2Nlc3M6CiAgICAgZm9yIChhdXRvJiBlbnRyeSA6
IGNhc2VzKQogICAgICAgICBkb2VzQ2FsbHMgfD0gZW50cnktPmRvZXNDYWxscygpOwogICAgIAot
ICAgIG1fc3R1YlJvdXRpbmUgPSBjcmVhdGVKSVRTdHViUm91dGluZShjb2RlLCB2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZG9lc0NhbGxzKTsKKyAgICBtX3N0dWJSb3V0aW5lID0g
Y3JlYXRlSklUU3R1YlJvdXRpbmUoY29kZSwgdm0sIGNvZGVCbG9jaywgZG9lc0NhbGxzKTsKICAg
ICBtX3dhdGNocG9pbnRzID0gV1RGOjptb3ZlKHN0YXRlLndhdGNocG9pbnRzKTsKICAgICBpZiAo
IXN0YXRlLndlYWtSZWZlcmVuY2VzLmlzRW1wdHkoKSkKICAgICAgICAgbV93ZWFrUmVmZXJlbmNl
cyA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPFdyaXRlQmFycmllcjxKU0NlbGw+Pj4oV1RGOjpt
b3ZlKHN0YXRlLndlYWtSZWZlcmVuY2VzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5jcHAJKHJldmlzaW9uIDE5MDQz
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IFN0cnVjdHVyZVN0dWJJbmZvOgogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2Fz
ZT4+IGFjY2Vzc0Nhc2VzOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxBY2Nlc3NDYXNlPiBw
cmV2aW91c0Nhc2UgPQotICAgICAgICBBY2Nlc3NDYXNlOjpmcm9tU3RydWN0dXJlU3R1YkluZm8o
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksICp0aGlzKTsKKyAgICAgICAgQWNjZXNz
Q2FzZTo6ZnJvbVN0cnVjdHVyZVN0dWJJbmZvKHZtLCBjb2RlQmxvY2ssICp0aGlzKTsKICAgICBp
ZiAocHJldmlvdXNDYXNlKQogICAgICAgICBhY2Nlc3NDYXNlcy5hcHBlbmQoV1RGOjptb3ZlKHBy
ZXZpb3VzQ2FzZSkpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Mjgs
NyArNDgyOCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlKCkKICAgICBpZiAoT3B0aW9u
czo6dmVyYm9zZURGR0J5dGVDb2RlUGFyc2luZygpKQogICAgICAgICBkYXRhTG9nKCJQYXJzaW5n
ICIsICptX2NvZGVCbG9jaywgIlxuIik7CiAgICAgCi0gICAgbV9kZmdDb2RlQmxvY2sgPSBtX2dy
YXBoLm1fcGxhbi5wcm9maWxlZERGR0NvZGVCbG9jay5nZXQoKTsKKyAgICBtX2RmZ0NvZGVCbG9j
ayA9IG1fZ3JhcGgubV9wbGFuLnByb2ZpbGVkREZHQ29kZUJsb2NrOwogICAgIGlmIChpc0ZUTCht
X2dyYXBoLm1fcGxhbi5tb2RlKSAmJiBtX2RmZ0NvZGVCbG9jawogICAgICAgICAmJiBPcHRpb25z
OjplbmFibGVQb2x5dmFyaWFudERldmlydHVhbGl6YXRpb24oKSkgewogICAgICAgICBpZiAoT3B0
aW9uczo6ZW5hYmxlUG9seXZhcmlhbnRDYWxsSW5saW5pbmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5zaXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRUcmFuc2l0aW9ucy5jcHAJKHJldmlz
aW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFRyYW5z
aXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCB2b2lkIERlc2lyZWRU
cmFuc2l0aW9uOjpyZWFsbHlBZGQoVk0mIHZtCiB7CiAgICAgY29tbW9uLT50cmFuc2l0aW9ucy5h
cHBlbmQoCiAgICAgICAgIFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAotICAgICAgICAgICAgdm0s
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwKKyAgICAgICAgICAgIHZtLCBtX2NvZGVC
bG9jaywKICAgICAgICAgICAgIG1fY29kZU9yaWdpbk93bmVyLAogICAgICAgICAgICAgbV9vbGRT
dHJ1Y3R1cmUsIG1fbmV3U3RydWN0dXJlKSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVmZXJlbmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwCShyZXZpc2lv
biAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXZWFrUmVm
ZXJlbmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEwICs3MCwxMCBAQCB2b2lkIERlc2ly
ZWRXZWFrUmVmZXJlbmNlczo6cmVhbGx5QWRkKFZNCiAgICAgZm9yIChKU0NlbGwqIHRhcmdldCA6
IG1fcmVmZXJlbmNlcykgewogICAgICAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBqc0R5
bmFtaWNDYXN0PFN0cnVjdHVyZSo+KHRhcmdldCkpIHsKICAgICAgICAgICAgIGNvbW1vbi0+d2Vh
a1N0cnVjdHVyZVJlZmVyZW5jZXMuYXBwZW5kKAotICAgICAgICAgICAgICAgIFdyaXRlQmFycmll
cjxTdHJ1Y3R1cmU+KHZtLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVy
ZSkpOworICAgICAgICAgICAgICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+KHZtLCBtX2NvZGVC
bG9jaywgc3RydWN0dXJlKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb21tb24t
PndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKLSAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXI8SlND
ZWxsPih2bSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCB0YXJnZXQpKTsKKyAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPih2bSwgbV9jb2RlQmxvY2ssIHRhcmdldCkp
OwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEcml2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdEcml2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAgQ29tcGls
YXRpb25SZXN1bHQgY29tcGlsZSgKICAgICAgICAgdm0sIGNvZGVCbG9jaywgcHJvZmlsZWRERkdD
b2RlQmxvY2ssIG1vZGUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCwgbXVzdEhhbmRsZVZhbHVlcywK
ICAgICAgICAgY2FsbGJhY2spOwogICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25EZWZlcnJl
ZCkKLSAgICAgICAgY2FsbGJhY2stPmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBy
ZXN1bHQpOworICAgICAgICBjYWxsYmFjay0+Y29tcGlsYXRpb25EaWRDb21wbGV0ZShjb2RlQmxv
Y2ssIHByb2ZpbGVkREZHQ29kZUJsb2NrLCByZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
OTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogZGZnT3BOYW1lc1td
ID0gewogR3JhcGg6OkdyYXBoKFZNJiB2bSwgUGxhbiYgcGxhbiwgTG9uZ0xpdmVkU3RhdGUmIGxv
bmdMaXZlZFN0YXRlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fcGxhbihwbGFuKQotICAgICwg
bV9jb2RlQmxvY2sobV9wbGFuLmNvZGVCbG9jay5nZXQoKSkKKyAgICAsIG1fY29kZUJsb2NrKG1f
cGxhbi5jb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVkQmxvY2sobV9jb2RlQmxvY2stPmFsdGVy
bmF0aXZlKCkpCiAgICAgLCBtX2FsbG9jYXRvcihsb25nTGl2ZWRTdGF0ZS5tX2FsbG9jYXRvcikK
ICAgICAsIG1fbmV4dE1hY2hpbmVMb2NhbCgwKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlLmgJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNv
bXBpbGF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUg
IkRGR01pbmlmaWVkR3JhcGguaCIKQEAgLTExNCw2ICsxMTUsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgdmFsaWRhdGVSZWZlcmVuY2VzKGNvbnN0IFRyYWNrZWRSZWZlcmVuY2VzJikgb3ZlcnJpZGU7
CiAgICAgCiAgICAgdm9pZCBzaHJpbmtUb0ZpdCgpOworCisjaWYgRU5BQkxFKEZUTF9KSVQpCisg
ICAgQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrKCkgeyByZXR1cm4gbV9vc3JFbnRyeUJsb2NrLmdl
dCgpOyB9CisgICAgdm9pZCBzZXRPU1JFbnRyeUJsb2NrKFZNJiB2bSwgY29uc3QgSlNDZWxsKiBv
d25lciwgQ29kZUJsb2NrKiBvc3JFbnRyeUJsb2NrKSB7IG1fb3NyRW50cnlCbG9jay5zZXQodm0s
IG93bmVyLCBvc3JFbnRyeUJsb2NrKTsgfQorICAgIHZvaWQgY2xlYXJPU1JFbnRyeUJsb2NrKCkg
eyBtX29zckVudHJ5QmxvY2suY2xlYXIoKTsgfQorI2VuZGlmCiAgICAgCiBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBKSVRDb21waWxlcjsgLy8gQWxsb3cgSklUQ29tcGlsZXIgdG8gY2FsbCBz
ZXRDb2RlUmVmKCkuCkBAIC0xMjgsNyArMTM1LDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShGVExf
SklUKQogICAgIHVpbnQ4X3QgbmVzdGVkVHJpZ2dlcklzU2V0IHsgMCB9OwogICAgIFVwcGVyVGll
ckV4ZWN1dGlvbkNvdW50ZXIgdGllclVwQ291bnRlcjsKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBv
c3JFbnRyeUJsb2NrOworICAgIFdyaXRlQmFycmllcjxDb2RlQmxvY2s+IG1fb3NyRW50cnlCbG9j
azsKICAgICB1bnNpZ25lZCBvc3JFbnRyeVJldHJ5OwogICAgIGJvb2wgYWJhbmRvbk9TUkVudHJ5
OwogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklURmluYWxpemVyLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Nyw3ICs1Nyw3IEBAIHNpemVfdCBKSVRGaW5hbGl6ZXI6OmNvZGVTaXplKCkKIGJvb2wgSklU
RmluYWxpemVyOjpmaW5hbGl6ZSgpCiB7CiAgICAgbV9qaXRDb2RlLT5pbml0aWFsaXplQ29kZVJl
ZigKLSAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZlciwgKCJERkcgSklUIGNv
ZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKG1fcGxhbi5jb2RlQmxv
Y2suZ2V0KCksIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpLAorICAgICAgICBGSU5BTElaRV9E
RkdfQ09ERSgqbV9saW5rQnVmZmVyLCAoIkRGRyBKSVQgY29kZSBmb3IgJXMiLCB0b0NTdHJpbmco
Q29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSku
ZGF0YSgpKSksCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKICAgICAKICAgICBt
X3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKG1faml0Q29kZSk7CkBAIC03MSw3ICs3MSw3IEBA
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKIHsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV93aXRoQXJpdHlDaGVjay5pc0VtcHR5VmFsdWUoKSk7CiAgICAgbV9qaXRDb2RlLT5p
bml0aWFsaXplQ29kZVJlZigKLSAgICAgICAgRklOQUxJWkVfREZHX0NPREUoKm1fbGlua0J1ZmZl
ciwgKCJERkcgSklUIGNvZGUgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkRGR0pJVCkpLmRhdGEoKSkpLAorICAg
ICAgICBGSU5BTElaRV9ERkdfQ09ERSgqbV9saW5rQnVmZmVyLCAoIkRGRyBKSVQgY29kZSBmb3Ig
JXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklU
Q29kZTo6REZHSklUKSkuZGF0YSgpKSksCiAgICAgICAgIG1fd2l0aEFyaXR5Q2hlY2spOwogICAg
IG1fcGxhbi5jb2RlQmxvY2stPnNldEpJVENvZGUobV9qaXRDb2RlKTsKICAgICAKQEAgLTgzLDcg
KzgzLDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogdm9pZCBKSVRG
aW5hbGl6ZXI6OmZpbmFsaXplQ29tbW9uKCkKIHsKICNpZiBFTkFCTEUoRlRMX0pJVCkKLSAgICBt
X2ppdENvZGUtPm9wdGltaXplQWZ0ZXJXYXJtVXAobV9wbGFuLmNvZGVCbG9jay5nZXQoKSk7Cisg
ICAgbV9qaXRDb2RlLT5vcHRpbWl6ZUFmdGVyV2FybVVwKG1fcGxhbi5jb2RlQmxvY2spOwogI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQogICAgIAogICAgIGlmIChtX3BsYW4uY29tcGlsYXRpb24p
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1v
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2OCwxMyArMjY4LDE0IEBAIHN0YXRpYyB2b2lkIG9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBl
cnMKIAogdm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IE9TUkV4aXRCYXNlJiBleGl0LCBib29sIGlzRXhpdGluZ1RvT3BDYXRjaCkKIHsKLSAgICBqaXQu
bW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmNvZGVCbG9jaygpLT5vd25l
ckV4ZWN1dGFibGUoKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgQ29kZUJsb2NrKiBi
YXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9y
aWdpbik7CisgICAgaml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGJhc2Vs
aW5lQ29kZUJsb2NrKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKICAgICBvc3JXcml0ZUJhcnJp
ZXIoaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjApOwogICAg
IElubGluZUNhbGxGcmFtZVNldCogaW5saW5lQ2FsbEZyYW1lcyA9IGppdC5jb2RlQmxvY2soKS0+
aml0Q29kZSgpLT5kZmdDb21tb24oKS0+aW5saW5lQ2FsbEZyYW1lcy5nZXQoKTsKICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lIDogKmlubGluZUNhbGxGcmFtZXMpIHsKLSAgICAgICAgICAgIFNjcmlwdEV4ZWN1
dGFibGUqIG93bmVyRXhlY3V0YWJsZSA9IGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQo
KTsKLSAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihv
d25lckV4ZWN1dGFibGUpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2Rl
QmxvY2soKTsKKyAgICAgICAgICAgIGppdC5tb3ZlKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bVB0cihiYXNlbGluZUNvZGVCbG9jayksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CiAgICAgICAg
ICAgICBvc3JXcml0ZUJhcnJpZXIoaml0LCBHUFJJbmZvOjphcmd1bWVudEdQUjEsIEdQUkluZm86
Om5vbkFyZ0dQUjApOwogICAgICAgICB9CiAgICAgfQpAQCAtMjgyLDcgKzI4Myw2IEBAIHZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYKICAgICBpZiAoZXhpdC5tX2NvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tP
ZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpOwogCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNv
ZGVCbG9ja0ZvcihleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFj
aGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gaml0LmRlY29kZWRDb2RlTWFwRm9yKGJhc2Vs
aW5lQ29kZUJsb2NrKTsKICAgICAKICAgICBCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQqIG1hcHBp
bmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0LCB1bnNpZ25lZD4oZGVj
b2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0
ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3Nyw4ICsxMzc3LDggQEAgc3RhdGljIHZvaWQgdHJp
Z2dlckZUTFJlcGxhY2VtZW50Q29tcGlsZQogCiAgICAgLy8gV2UgbmVlZCB0byBjb21waWxlIHRo
ZSBjb2RlLgogICAgIGNvbXBpbGUoCi0gICAgICAgICp2bSwgY29kZUJsb2NrLT5uZXdSZXBsYWNl
bWVudCgpLmdldCgpLCBjb2RlQmxvY2ssIEZUTE1vZGUsIFVJTlRfTUFYLAotICAgICAgICBPcGVy
YW5kczxKU1ZhbHVlPigpLCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRl
KGNvZGVCbG9jaykpOworICAgICAgICAqdm0sIGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKSwg
Y29kZUJsb2NrLCBGVExNb2RlLCBVSU5UX01BWCwKKyAgICAgICAgT3BlcmFuZHM8SlNWYWx1ZT4o
KSwgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKIH0KIAogc3Rh
dGljIHZvaWQgdHJpZ2dlclRpZXJVcE5vd0NvbW1vbihFeGVjU3RhdGUqIGV4ZWMsIGJvb2wgaW5M
b29wKQpAQCAtMTQ2Myw3ICsxNDYzLDcgQEAgY2hhciogSklUX09QRVJBVElPTiB0cmlnZ2VyT1NS
RW50cnlOb3coCiAgICAgaWYgKHdvcmtsaXN0U3RhdGUgPT0gV29ya2xpc3Q6OkNvbXBpbGluZykK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgCi0gICAgaWYgKENvZGVCbG9jayogZW50cnlCbG9jayA9
IGppdENvZGUtPm9zckVudHJ5QmxvY2suZ2V0KCkpIHsKKyAgICBpZiAoQ29kZUJsb2NrKiBlbnRy
eUJsb2NrID0gaml0Q29kZS0+b3NyRW50cnlCbG9jaygpKSB7CiAgICAgICAgIHZvaWQqIGFkZHJl
c3MgPSBGVEw6OnByZXBhcmVPU1JFbnRyeSgKICAgICAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywg
ZW50cnlCbG9jaywgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOwogICAgICAgICBpZiAoYWRk
cmVzcykKQEAgLTE0NzcsNyArMTQ3Nyw3IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9T
UkVudHJ5Tm93KAogICAgICAgICAKICAgICAgICAgLy8gT1NSIGVudHJ5IGZhaWxlZC4gT2ggbm8h
IFRoaXMgaW1wbGllcyB0aGF0IHdlIG5lZWQgdG8gcmV0cnkuIFdlIHJldHJ5CiAgICAgICAgIC8v
IHdpdGhvdXQgZXhwb25lbnRpYWwgYmFja29mZiBhbmQgd2Ugb25seSBkbyB0aGlzIGZvciB0aGUg
ZW50cnkgY29kZSBibG9jay4KLSAgICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jayA9IG51bGxw
dHI7CisgICAgICAgIGppdENvZGUtPmNsZWFyT1NSRW50cnlCbG9jaygpOwogICAgICAgICBqaXRD
b2RlLT5vc3JFbnRyeVJldHJ5ID0gMDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTQ5
NCwyMSArMTQ5NCwxOSBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIHRyaWdnZXJPU1JFbnRyeU5vdygK
ICAgICBPcGVyYW5kczxKU1ZhbHVlPiBtdXN0SGFuZGxlVmFsdWVzOwogICAgIGppdENvZGUtPnJl
Y29uc3RydWN0KAogICAgICAgICBleGVjLCBjb2RlQmxvY2ssIENvZGVPcmlnaW4oYnl0ZWNvZGVJ
bmRleCksIHN0cmVhbUluZGV4LCBtdXN0SGFuZGxlVmFsdWVzKTsKLSAgICBSZWZQdHI8Q29kZUJs
b2NrPiByZXBsYWNlbWVudENvZGVCbG9jayA9IGNvZGVCbG9jay0+bmV3UmVwbGFjZW1lbnQoKTsK
KyAgICBDb2RlQmxvY2sqIHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBs
YWNlbWVudCgpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGls
ZSgKLSAgICAgICAgKnZtLCByZXBsYWNlbWVudENvZGVCbG9jay5nZXQoKSwgY29kZUJsb2NrLCBG
VExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgsCi0gICAgICAgIG11c3RIYW5kbGVWYWx1
ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZShj
b2RlQmxvY2spKTsKKyAgICAgICAgKnZtLCByZXBsYWNlbWVudENvZGVCbG9jaywgY29kZUJsb2Nr
LCBGVExGb3JPU1JFbnRyeU1vZGUsIGJ5dGVjb2RlSW5kZXgsCisgICAgICAgIG11c3RIYW5kbGVW
YWx1ZXMsIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0
ZSgpKTsKICAgICAKLSAgICBpZiAoZm9yRW50cnlSZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsKSB7Ci0gICAgICAgIEFTU0VSVChmb3JFbnRyeVJlc3VsdCA9PSBDb21waWxhdGlvbkRlZmVy
cmVkIHx8IHJlcGxhY2VtZW50Q29kZUJsb2NrLT5oYXNPbmVSZWYoKSk7CisgICAgaWYgKGZvckVu
dHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQogCiAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSBmb3ItZW50cnkgY29tcGlsZSBh
bHJlYWR5IHN1Y2NlZWRlZC4gSW4gdGhhdCBjYXNlIE9TUgogICAgIC8vIGVudHJ5IHdpbGwgc3Vj
Y2VlZCB1bmxlc3Mgd2UgcmFuIG91dCBvZiBzdGFjay4gSXQncyBub3QgY2xlYXIgd2hhdCB3ZSBz
aG91bGQgZG8uCiAgICAgLy8gV2Ugc2lnbmFsIHRvIHRyeSBhZ2FpbiBhZnRlciBhIHdoaWxlIGlm
IHRoYXQgaGFwcGVucy4KICAgICB2b2lkKiBhZGRyZXNzID0gRlRMOjpwcmVwYXJlT1NSRW50cnko
Ci0gICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgaml0Q29kZS0+b3NyRW50cnlCbG9jay5nZXQoKSwg
Ynl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOworICAgICAgICBleGVjLCBjb2RlQmxvY2ssIGpp
dENvZGUtPm9zckVudHJ5QmxvY2soKSwgYnl0ZWNvZGVJbmRleCwgc3RyZWFtSW5kZXgpOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oYWRkcmVzcyk7CiB9CiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBQcm9maWxlcjo6Q29tcGlsYXRpb25LaW5k
IHByb2ZpbGVyQ29tcGlsCiAKIH0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQogCi1QbGFuOjpQbGFu
KFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBwYXNzZWRDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRERkdDb2RlQmxvY2ssCitQbGFuOjpQbGFuKENvZGVCbG9jayogcGFzc2VkQ29kZUJsb2NrLCBD
b2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLAogICAgIENvbXBpbGF0aW9uTW9kZSBtb2Rl
LCB1bnNpZ25lZCBvc3JFbnRyeUJ5dGVjb2RlSW5kZXgsCiAgICAgY29uc3QgT3BlcmFuZHM8SlNW
YWx1ZT4mIG11c3RIYW5kbGVWYWx1ZXMpCiAgICAgOiB2bSgqcGFzc2VkQ29kZUJsb2NrLT52bSgp
KQpAQCAtMTQwLDEwICsxNDAsMTAgQEAgUGxhbjo6UGxhbihQYXNzUmVmUHRyPENvZGVCbG9jaz4g
cGFzc2VkQwogICAgICwgbW9kZShtb2RlKQogICAgICwgb3NyRW50cnlCeXRlY29kZUluZGV4KG9z
ckVudHJ5Qnl0ZWNvZGVJbmRleCkKICAgICAsIG11c3RIYW5kbGVWYWx1ZXMobXVzdEhhbmRsZVZh
bHVlcykKLSAgICAsIGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVBy
b2ZpbGVyID8gYWRvcHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZt
KCktPm1fcGVyQnl0ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jay5n
ZXQoKSksIHByb2ZpbGVyQ29tcGlsYXRpb25LaW5kRm9yTW9kZShtb2RlKSkpIDogMCkKKyAgICAs
IGNvbXBpbGF0aW9uKGNvZGVCbG9jay0+dm0oKS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyID8gYWRv
cHRSZWYobmV3IFByb2ZpbGVyOjpDb21waWxhdGlvbihjb2RlQmxvY2stPnZtKCktPm1fcGVyQnl0
ZWNvZGVQcm9maWxlci0+ZW5zdXJlQnl0ZWNvZGVzRm9yKGNvZGVCbG9jayksIHByb2ZpbGVyQ29t
cGlsYXRpb25LaW5kRm9yTW9kZShtb2RlKSkpIDogMCkKICAgICAsIGlubGluZUNhbGxGcmFtZXMo
YWRvcHRSZWYobmV3IElubGluZUNhbGxGcmFtZVNldCgpKSkKLSAgICAsIGlkZW50aWZpZXJzKGNv
ZGVCbG9jay5nZXQoKSkKLSAgICAsIHdlYWtSZWZlcmVuY2VzKGNvZGVCbG9jay5nZXQoKSkKKyAg
ICAsIGlkZW50aWZpZXJzKGNvZGVCbG9jaykKKyAgICAsIHdlYWtSZWZlcmVuY2VzKGNvZGVCbG9j
aykKICAgICAsIHdpbGxUcnlUb1RpZXJVcChmYWxzZSkKICAgICAsIHN0YWdlKFByZXBhcmluZykK
IHsKQEAgLTUzNSw3ICs1MzUsNyBAQCBib29sIFBsYW46OmlzU3RpbGxWYWxpZCgpCiAKIHZvaWQg
UGxhbjo6cmVhbGx5QWRkKENvbW1vbkRhdGEqIGNvbW1vbkRhdGEpCiB7Ci0gICAgd2F0Y2hwb2lu
dHMucmVhbGx5QWRkKGNvZGVCbG9jay5nZXQoKSwgKmNvbW1vbkRhdGEpOworICAgIHdhdGNocG9p
bnRzLnJlYWxseUFkZChjb2RlQmxvY2ssICpjb21tb25EYXRhKTsKICAgICBpZGVudGlmaWVycy5y
ZWFsbHlBZGQodm0sIGNvbW1vbkRhdGEpOwogICAgIHdlYWtSZWZlcmVuY2VzLnJlYWxseUFkZCh2
bSwgY29tbW9uRGF0YSk7CiAgICAgdHJhbnNpdGlvbnMucmVhbGx5QWRkKHZtLCBjb21tb25EYXRh
KTsKQEAgLTU1MywxNCArNTUzLDE0IEBAIHZvaWQgUGxhbjo6bm90aWZ5Q29tcGlsZWQoKQogCiB2
b2lkIFBsYW46Om5vdGlmeVJlYWR5KCkKIHsKLSAgICBjYWxsYmFjay0+Y29tcGlsYXRpb25EaWRC
ZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KGNvZGVCbG9jay5nZXQoKSk7CisgICAgY2FsbGJhY2st
PmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShjb2RlQmxvY2ssIHByb2Zp
bGVkREZHQ29kZUJsb2NrKTsKICAgICBzdGFnZSA9IFJlYWR5OwogfQogCiBDb21waWxhdGlvblJl
c3VsdCBQbGFuOjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjaygpCiB7CiAgICAgLy8g
V2Ugd2lsbCBlc3RhYmxpc2ggbmV3IHJlZmVyZW5jZXMgZnJvbSB0aGUgY29kZSBibG9jayB0byB0
aGluZ3MuIFNvLCB3ZSBuZWVkIGEgYmFycmllci4KLSAgICB2bS5oZWFwLndyaXRlQmFycmllcihj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICB2bS5oZWFwLndyaXRlQmFycmllcihj
b2RlQmxvY2spOwogICAgIAogICAgIGlmICghaXNTdGlsbFZhbGlkKCkpCiAgICAgICAgIHJldHVy
biBDb21waWxhdGlvbkludmFsaWRhdGVkOwpAQCAtNTk2LDcgKzU5Niw3IEBAIENvbXBpbGF0aW9u
UmVzdWx0IFBsYW46OmZpbmFsaXplV2l0aG91dE4KIAogdm9pZCBQbGFuOjpmaW5hbGl6ZUFuZE5v
dGlmeUNhbGxiYWNrKCkKIHsKLSAgICBjYWxsYmFjay0+Y29tcGlsYXRpb25EaWRDb21wbGV0ZShj
b2RlQmxvY2suZ2V0KCksIGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkpOworICAg
IGNhbGxiYWNrLT5jb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRERkdD
b2RlQmxvY2ssIGZpbmFsaXplV2l0aG91dE5vdGlmeWluZ0NhbGxiYWNrKCkpOwogfQogCiBDb21w
aWxhdGlvbktleSBQbGFuOjprZXkoKQpAQCAtNjA0LDE2ICs2MDQsMTUgQEAgQ29tcGlsYXRpb25L
ZXkgUGxhbjo6a2V5KCkKICAgICByZXR1cm4gQ29tcGlsYXRpb25LZXkoY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpLCBtb2RlKTsKIH0KIAotdm9pZCBQbGFuOjpjbGVhckNvZGVCbG9ja01hcmtzKCkK
K3ZvaWQgUGxhbjo6cmVtZW1iZXJDb2RlQmxvY2tzKCkKIHsKICAgICAvLyBDb21waWxhdGlvbiB3
cml0ZXMgbG90cyBvZiB2YWx1ZXMgdG8gYSBDb2RlQmxvY2sgd2l0aG91dCBwZXJmb3JtaW5nCiAg
ICAgLy8gYW4gZXhwbGljaXQgYmFycmllci4gU28sIHdlIG5lZWQgdG8gYmUgcGVzc2ltaXN0aWMg
YW5kIGFzc3VtZSB0aGF0CiAgICAgLy8gYWxsIG91ciBDb2RlQmxvY2tzIG11c3QgYmUgdmlzaXRl
ZCBkdXJpbmcgR0MuCiAKLSAgICBjb2RlQmxvY2stPmNsZWFyTWFya3MoKTsKLSAgICBjb2RlQmxv
Y2stPmFsdGVybmF0aXZlKCktPmNsZWFyTWFya3MoKTsKKyAgICBIZWFwOjpoZWFwKGNvZGVCbG9j
ayktPndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9j
aykKLSAgICAgICAgcHJvZmlsZWRERkdDb2RlQmxvY2stPmNsZWFyTWFya3MoKTsKKyAgICAgICAg
SGVhcDo6aGVhcChwcm9maWxlZERGR0NvZGVCbG9jayktPndyaXRlQmFycmllcihwcm9maWxlZERG
R0NvZGVCbG9jayk7CiB9CiAKIHZvaWQgUGxhbjo6Y2hlY2tMaXZlbmVzc0FuZFZpc2l0Q2hpbGRy
ZW4oU2xvdFZpc2l0b3ImIHZpc2l0b3IpCkBAIC02MjQsMTUgKzYyMywxMyBAQCB2b2lkIFBsYW46
OmNoZWNrTGl2ZW5lc3NBbmRWaXNpdENoaWxkcmVuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gbXVz
dEhhbmRsZVZhbHVlcy5zaXplKCk7IGktLTspCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRWYWx1ZSgmbXVzdEhhbmRsZVZhbHVlc1tpXSk7CiAKLSAgICBjb2RlQmxvY2stPnZpc2l0
U3Ryb25nbHkodmlzaXRvcik7Ci0gICAgY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT52aXNpdFN0
cm9uZ2x5KHZpc2l0b3IpOwotICAgIGlmIChwcm9maWxlZERGR0NvZGVCbG9jaykKLSAgICAgICAg
cHJvZmlsZWRERkdDb2RlQmxvY2stPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7CisgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5UG9pbnRlcihjb2RlQmxvY2spOworICAgIHZpc2l0
b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIocHJvZmlsZWRERkdDb2RlQmxvY2sp
OwogCiAgICAgaWYgKGlubGluZUNhbGxGcmFtZXMpIHsKICAgICAgICAgZm9yIChhdXRvKiBpbmxp
bmVDYWxsRnJhbWUgOiAqaW5saW5lQ2FsbEZyYW1lcykgewogICAgICAgICAgICAgQVNTRVJUKGlu
bGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKSk7Ci0gICAgICAgICAgICBpbmxpbmVD
YWxsRnJhbWUtPmJhc2VsaW5lQ29kZUJsb2NrKCktPnZpc2l0U3Ryb25nbHkodmlzaXRvcik7Cisg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKGlubGlu
ZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKSk7CiAgICAgICAgIH0KICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5oCShyZXZpc2lvbiAxOTA0MzgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNyBAQCBjbGFzcyBUaHJlYWREYXRhOwogCiBzdHJ1Y3QgUGxhbiA6IHB1YmxpYyBUaHJl
YWRTYWZlUmVmQ291bnRlZDxQbGFuPiB7CiAgICAgUGxhbigKLSAgICAgICAgUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IGNvZGVCbG9ja1RvQ29tcGlsZSwgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVC
bG9jaywKKyAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2tUb0NvbXBpbGUsIENvZGVCbG9jayog
cHJvZmlsZWRERkdDb2RlQmxvY2ssCiAgICAgICAgIENvbXBpbGF0aW9uTW9kZSwgdW5zaWduZWQg
b3NyRW50cnlCeXRlY29kZUluZGV4LAogICAgICAgICBjb25zdCBPcGVyYW5kczxKU1ZhbHVlPiYg
bXVzdEhhbmRsZVZhbHVlcyk7CiAgICAgflBsYW4oKTsKQEAgLTcxLDE0ICs3MSwxNyBAQCBzdHJ1
Y3QgUGxhbiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlCiAgICAgCiAgICAgQ29tcGlsYXRp
b25LZXkga2V5KCk7CiAgICAgCi0gICAgdm9pZCBjbGVhckNvZGVCbG9ja01hcmtzKCk7CisgICAg
dm9pZCByZW1lbWJlckNvZGVCbG9ja3MoKTsKICAgICB2b2lkIGNoZWNrTGl2ZW5lc3NBbmRWaXNp
dENoaWxkcmVuKFNsb3RWaXNpdG9yJik7CiAgICAgYm9vbCBpc0tub3duVG9CZUxpdmVEdXJpbmdH
QygpOwogICAgIHZvaWQgY2FuY2VsKCk7CiAgICAgCiAgICAgVk0mIHZtOwotICAgIFJlZlB0cjxD
b2RlQmxvY2s+IGNvZGVCbG9jazsKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBwcm9maWxlZERGR0Nv
ZGVCbG9jazsKKworICAgIC8vIFRoZXNlIGNhbiBiZSByYXcgcG9pbnRlcnMgYmVjYXVzZSB3ZSB2
aXNpdCB0aGVtIGR1cmluZyBldmVyeSBHQyBpbiBjaGVja0xpdmVuZXNzQW5kVmlzaXRDaGlsZHJl
bi4KKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jazsKKyAgICBDb2RlQmxvY2sqIHByb2ZpbGVkREZH
Q29kZUJsb2NrOworCiAgICAgQ29tcGlsYXRpb25Nb2RlIG1vZGU7CiAgICAgY29uc3QgdW5zaWdu
ZWQgb3NyRW50cnlCeXRlY29kZUluZGV4OwogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5k
bGVWYWx1ZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkocmV2aXNp
b24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDQ2ICszNSw0NCBA
QAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLVRvRlRMRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygKLSAgICBQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKQotICAgIDogbV9kZmdDb2RlQmxvY2so
ZGZnQ29kZUJsb2NrKQorVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRvRlRMRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCkKIHsKIH0KIAogVG9GVExEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2s6On5Ub0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpIHsgfQogCi1S
ZWY8VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IFRvRlRMRGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrOjpjcmVhdGUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykK
K1JlZjxUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz4gVG9GVExEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soZGZnQ29kZUJsb2NrKSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKSk7CiB9CiAK
IHZvaWQgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVj
b21lUmVhZHlBc3luY2hyb25vdXNseSgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsK
ICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAg
ICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3Ig
IiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24g
b2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICpwcm9maWxlZERGR0NvZGVCbG9jaywKICAgICAg
ICAgICAgICIpIGRpZCBiZWNvbWUgcmVhZHkuXG4iKTsKICAgICB9CiAgICAgCi0gICAgbV9kZmdD
b2RlQmxvY2stPmppdENvZGUoKS0+ZGZnKCktPmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25j
dXJyZW50bHkoCi0gICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpKTsKKyAgICBwcm9maWxlZERG
R0NvZGVCbG9jay0+aml0Q29kZSgpLT5kZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENv
bmN1cnJlbnRseSgKKyAgICAgICAgcHJvZmlsZWRERkdDb2RlQmxvY2spOwogfQogCiB2b2lkIFRv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKAot
ICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCisgICAg
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2ssIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigp
KSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemluZyBjb21waWxhdGlv
biBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAgICAgICAg
ICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9yICIsICpw
cm9maWxlZERGR0NvZGVCbG9jaywKICAgICAgICAgICAgICIpIHJlc3VsdDogIiwgcmVzdWx0LCAi
XG4iKTsKICAgICB9CiAgICAgCi0gICAgaWYgKG1fZGZnQ29kZUJsb2NrLT5yZXBsYWNlbWVudCgp
ICE9IG1fZGZnQ29kZUJsb2NrKSB7CisgICAgaWYgKHByb2ZpbGVkREZHQ29kZUJsb2NrLT5yZXBs
YWNlbWVudCgpICE9IHByb2ZpbGVkREZHQ29kZUJsb2NrKSB7CiAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAg
IkRyb3BwaW5nIEZUTCBjb2RlIGJsb2NrICIsICpjb2RlQmxvY2ssICIgb24gdGhlIGZsb29yIGJl
Y2F1c2UgdGhlICIKLSAgICAgICAgICAgICAgICAiREZHIGNvZGUgYmxvY2sgIiwgKm1fZGZnQ29k
ZUJsb2NrLCAiIHdhcyBqZXR0aXNvbmVkLlxuIik7CisgICAgICAgICAgICAgICAgIkRGRyBjb2Rl
IGJsb2NrICIsICpwcm9maWxlZERGR0NvZGVCbG9jaywgIiB3YXMgamV0dGlzb25lZC5cbiIpOwog
ICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC04MiwxMCArODAsMTAgQEAgdm9p
ZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6YwogICAgIGlmIChyZXN1bHQgPT0g
Q29tcGlsYXRpb25TdWNjZXNzZnVsKQogICAgICAgICBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhl
Y3V0YWJsZSgpLT5pbnN0YWxsQ29kZShjb2RlQmxvY2spOwogICAgIAotICAgIG1fZGZnQ29kZUJs
b2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29t
cGlsYXRpb25SZXN1bHQoCi0gICAgICAgIG1fZGZnQ29kZUJsb2NrLmdldCgpLCByZXN1bHQpOwor
ICAgIHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCisgICAgICAgIHByb2ZpbGVkREZH
Q29kZUJsb2NrLCByZXN1bHQpOwogCi0gICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpj
b21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKKyAgICBEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoY29kZUJsb2NrLCBwcm9m
aWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsKIH0KIAogfSB9IC8vIEpTQzo6REZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQwLDE4ICs0MCwxNSBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xh
c3MgVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2sgOiBwdWJsaWMgRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrIHsKIHByb3RlY3RlZDoKLSAgICBUb0ZUTERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjayhQYXNzUmVmUHRyPENvZGVCbG9jaz4gZGZnQ29kZUJsb2NrKTsKKyAgICBUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygpOwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+
VG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKTsKIAotICAgIHN0YXRpYyBSZWY8VG9G
VExEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s+IGNyZWF0ZShQYXNzUmVmUHRyPENvZGVCbG9j
az4gZGZnQ29kZUJsb2NrKTsKKyAgICBzdGF0aWMgUmVmPFRvRlRMRGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrPiBjcmVhdGUoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25E
aWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayopOwotICAgIHZpcnR1YWwgdm9p
ZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsK
LQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKKyAgICB2
aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVC
bG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgIHZpcnR1YWwgdm9p
ZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRE
RkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0KTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JF
bnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAKLVRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6
OlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soCi0gICAgUGFzc1Jl
ZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKLSAgICA6IG1fZGZnQ29kZUJsb2NrKGRmZ0Nv
ZGVCbG9jaykKK1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OlRv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soKQogewogfQogCkBAIC00
NSwzOSArNDMsMzggQEAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYgog
ewogfQogCi1SZWY8VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaz5U
b0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjcmVhdGUoCi0gICAg
UGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVCbG9jaykKK1JlZjxUb0ZUTEZvck9TUkVudHJ5
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPlRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayhkZmdDb2RlQmxvY2spKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrKCkpOwogfQogCiB2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseSgK
LSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29k
ZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaykKIHsKICAgICBpZiAoT3B0aW9uczo6dmVyYm9z
ZU9TUigpKSB7CiAgICAgICAgIGRhdGFMb2coCi0gICAgICAgICAgICAiT3B0aW1pemluZyBjb21w
aWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKm1fZGZnQ29kZUJsb2NrLAorICAg
ICAgICAgICAgIk9wdGltaXppbmcgY29tcGlsYXRpb24gb2YgIiwgKmNvZGVCbG9jaywgIiAoZm9y
ICIsICpwcm9maWxlZERGR0NvZGVCbG9jaywKICAgICAgICAgICAgICIpIGRpZCBiZWNvbWUgcmVh
ZHkuXG4iKTsKICAgICB9CiAgICAgCi0gICAgbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+ZGZn
KCktPmZvcmNlT3B0aW1pemF0aW9uU2xvd1BhdGhDb25jdXJyZW50bHkoCi0gICAgICAgIG1fZGZn
Q29kZUJsb2NrLmdldCgpKTsKKyAgICBwcm9maWxlZERGR0NvZGVCbG9jay0+aml0Q29kZSgpLT5k
ZmcoKS0+Zm9yY2VPcHRpbWl6YXRpb25TbG93UGF0aENvbmN1cnJlbnRseSgKKyAgICAgICAgcHJv
ZmlsZWRERkdDb2RlQmxvY2spOwogfQogCiB2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0IHJlc3VsdCkKKyAgICBDb2RlQmxvY2sqIGNv
ZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZERGR0NvZGVCbG9jaywgQ29tcGlsYXRpb25SZXN1
bHQgcmVzdWx0KQogewogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpIHsKICAgICAgICAg
ZGF0YUxvZygKLSAgICAgICAgICAgICJPcHRpbWl6aW5nIGNvbXBpbGF0aW9uIG9mICIsICpjb2Rl
QmxvY2ssICIgKGZvciAiLCAqbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAiT3B0aW1pemlu
ZyBjb21waWxhdGlvbiBvZiAiLCAqY29kZUJsb2NrLCAiIChmb3IgIiwgKnByb2ZpbGVkREZHQ29k
ZUJsb2NrLAogICAgICAgICAgICAgIikgcmVzdWx0OiAiLCByZXN1bHQsICJcbiIpOwogICAgIH0K
ICAgICAKLSAgICBKSVRDb2RlKiBqaXRDb2RlID0gbV9kZmdDb2RlQmxvY2stPmppdENvZGUoKS0+
ZGZnKCk7CisgICAgSklUQ29kZSogaml0Q29kZSA9IHByb2ZpbGVkREZHQ29kZUJsb2NrLT5qaXRD
b2RlKCktPmRmZygpOwogICAgICAgICAKICAgICBzd2l0Y2ggKHJlc3VsdCkgewogICAgIGNhc2Ug
Q29tcGlsYXRpb25TdWNjZXNzZnVsOgotICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeUJsb2NrID0g
Y29kZUJsb2NrOworICAgICAgICBqaXRDb2RlLT5zZXRPU1JFbnRyeUJsb2NrKCpjb2RlQmxvY2st
PnZtKCksIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBjb2RlQmxvY2spOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIENvbXBpbGF0aW9uRmFpbGVkOgogICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeVJl
dHJ5ID0gMDsKQEAgLTkwLDcgKzg3LDcgQEAgdm9pZCBUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRD
b21waWxhdGlvbgogICAgICAgICBicmVhazsKICAgICB9CiAgICAgCi0gICAgRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0
KTsKKyAgICBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxl
dGUoY29kZUJsb2NrLCBwcm9maWxlZERGR0NvZGVCbG9jaywgcmVzdWx0KTsKIH0KIAogfSB9IC8v
IEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NS
RW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDE4ICs0MCwxNSBAQCBuYW1lc3BhY2UgREZHIHsKIAogY2xhc3MgVG9G
VExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjayA6IHB1YmxpYyBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2sgewogcHJvdGVjdGVkOgotICAgIFRvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2soUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0NvZGVC
bG9jayk7CisgICAgVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjaygp
OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+VG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjaygpOwogCi0gICAgc3RhdGljIFJlZjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxDb2RlQmxvY2s+IGRmZ0Nv
ZGVCbG9jayk7CisgICAgc3RhdGljIFJlZjxUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrPiBjcmVhdGUoKTsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRp
b25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVCbG9jayopOwotICAgIHZpcnR1YWwg
dm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0
KTsKLQotcHJpdmF0ZToKLSAgICBSZWZQdHI8Q29kZUJsb2NrPiBtX2RmZ0NvZGVCbG9jazsKKyAg
ICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENv
ZGVCbG9jayosIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spOworICAgIHZpcnR1YWwg
dm9pZCBjb21waWxhdGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvZGVCbG9jayogcHJvZmls
ZWRERkdDb2RlQmxvY2ssIENvbXBpbGF0aW9uUmVzdWx0KTsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3Qu
Y3BwCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dv
cmtsaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA3LDE0ICsyMDcsMTQgQEAgdm9pZCBXb3Jr
bGlzdDo6Y29tcGxldGVBbGxQbGFuc0ZvclZNKFZNJgogICAgIGNvbXBsZXRlQWxsUmVhZHlQbGFu
c0ZvclZNKHZtKTsKIH0KIAotdm9pZCBXb3JrbGlzdDo6Y2xlYXJDb2RlQmxvY2tNYXJrcyhWTSYg
dm0pCit2b2lkIFdvcmtsaXN0OjpyZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgZm9yIChQbGFuTWFwOjppdGVyYXRvciBpdGVy
ID0gbV9wbGFucy5iZWdpbigpOyBpdGVyICE9IG1fcGxhbnMuZW5kKCk7ICsraXRlcikgewogICAg
ICAgICBQbGFuKiBwbGFuID0gaXRlci0+dmFsdWUuZ2V0KCk7CiAgICAgICAgIGlmICgmcGxhbi0+
dm0gIT0gJnZtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHBsYW4tPmNsZWFyQ29k
ZUJsb2NrTWFya3MoKTsKKyAgICAgICAgcGxhbi0+cmVtZW1iZXJDb2RlQmxvY2tzKCk7CiAgICAg
fQogfQogCkBAIC00NjcsMTEgKzQ2NywxMSBAQCB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShW
TSYgdm0pCiAgICAgfQogfQogCi12b2lkIGNsZWFyQ29kZUJsb2NrTWFya3MoVk0mIHZtKQordm9p
ZCByZW1lbWJlckNvZGVCbG9ja3MoVk0mIHZtKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IERG
Rzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0tOykgewogICAgICAgICBpZiAoREZHOjpXb3JrbGlz
dCogd29ya2xpc3QgPSBERkc6OndvcmtsaXN0Rm9ySW5kZXhPck51bGwoaSkpCi0gICAgICAgICAg
ICB3b3JrbGlzdC0+Y2xlYXJDb2RlQmxvY2tNYXJrcyh2bSk7CisgICAgICAgICAgICB3b3JrbGlz
dC0+cmVtZW1iZXJDb2RlQmxvY2tzKHZtKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1dvcmtsaXN0LmgJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyAr
NTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gd29ya2xpc3QtPmNvbXBsZXRlQWxsUmVhZHlQbGFuc0Zv
clZNKHZtKTsKICAgICB2b2lkIGNvbXBsZXRlQWxsUGxhbnNGb3JWTShWTSYpOwogCi0gICAgdm9p
ZCBjbGVhckNvZGVCbG9ja01hcmtzKFZNJik7CisgICAgdm9pZCByZW1lbWJlckNvZGVCbG9ja3Mo
Vk0mKTsKIAogICAgIHZvaWQgd2FpdFVudGlsQWxsUGxhbnNGb3JWTUFyZVJlYWR5KFZNJik7CiAg
ICAgU3RhdGUgY29tcGxldGVBbGxSZWFkeVBsYW5zRm9yVk0oVk0mLCBDb21waWxhdGlvbktleSA9
IENvbXBpbGF0aW9uS2V5KCkpOwpAQCAtMTQxLDcgKzE0MSw3IEBAIGlubGluZSBXb3JrbGlzdCog
d29ya2xpc3RGb3JJbmRleE9yTnVsbCgKIH0KIAogdm9pZCBjb21wbGV0ZUFsbFBsYW5zRm9yVk0o
Vk0mKTsKLXZvaWQgY2xlYXJDb2RlQmxvY2tNYXJrcyhWTSYpOwordm9pZCByZW1lbWJlckNvZGVC
bG9ja3MoVk0mKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxOTA0
MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXpl
RnVuY3Rpb24oKQogICAgICAgICBqaXRDb2RlLT5pbml0aWFsaXplRXhpdFRodW5rcygKICAgICAg
ICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgICAgICpleGl0VGh1bmtzTGlu
a0J1ZmZlciwKLSAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NT
dHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jay5nZXQoKSwgSklUQ29k
ZTo6RlRMSklUKSkuZGF0YSgpKSkpOworICAgICAgICAgICAgICAgICgiRlRMIGV4aXQgdGh1bmtz
IGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2Nr
LCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CiAgICAgfSAvLyBlbHNlIHRoaXMgZnVuY3Rp
b24gaGFkIG5vIE9TUiBleGl0cywgc28gbm8gZXhpdCB0aHVua3MuCiAgICAgCiAgICAgaWYgKHNp
ZGVDb2RlTGlua0J1ZmZlcikgewpAQCAtMTE2LDcgKzExNiw3IEBAIGJvb2wgSklURmluYWxpemVy
OjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgaml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpF
X0RGR19DT0RFKAogICAgICAgICAgICAgKnNpZGVDb2RlTGlua0J1ZmZlciwKICAgICAgICAgICAg
ICgiRlRMIHNpZGUgY29kZSBmb3IgJXMiLAotICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2Rl
QmxvY2tXaXRoSklUVHlwZShtX3BsYW4uY29kZUJsb2NrLmdldCgpLCBKSVRDb2RlOjpGVExKSVQp
KS5kYXRhKCkpKQorICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlw
ZShtX3BsYW4uY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKQogICAgICAgICAg
ICAgLmV4ZWN1dGFibGVNZW1vcnkoKSk7CiAgICAgfQogICAgIApAQCAtMTI0LDcgKzEyNCw3IEBA
IGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgaml0Q29kZS0+
YWRkSGFuZGxlKEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgKmhhbmRsZUV4Y2VwdGlv
bnNMaW5rQnVmZmVyLAogICAgICAgICAgICAgKCJGVEwgZXhjZXB0aW9uIGhhbmRsZXIgZm9yICVz
IiwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFu
LmNvZGVCbG9jay5nZXQoKSwgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkKKyAgICAgICAgICAg
ICAgICB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9wbGFuLmNvZGVCbG9jaywgSklU
Q29kZTo6RlRMSklUKSkuZGF0YSgpKSkKICAgICAgICAgICAgIC5leGVjdXRhYmxlTWVtb3J5KCkp
OwogICAgIH0KIApAQCAtMTM3LDcgKzEzNyw3IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6
ZUZ1bmN0aW9uKCkKICAgICBqaXRDb2RlLT5pbml0aWFsaXplQXJpdHlDaGVja0VudHJ5cG9pbnQo
CiAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAogICAgICAgICAgICAgKmVudHJ5cG9pbnRMaW5r
QnVmZmVyLAotICAgICAgICAgICAgKCJGVEwgZW50cnlwb2ludCB0aHVuayBmb3IgJXMgd2l0aCBM
TFZNIGdlbmVyYXRlZCBjb2RlIGF0ICVwIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fcGxhbi5jb2RlQmxvY2suZ2V0KCksIEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSwgZnVuY3Rp
b24pKSk7CisgICAgICAgICAgICAoIkZUTCBlbnRyeXBvaW50IHRodW5rIGZvciAlcyB3aXRoIExM
Vk0gZ2VuZXJhdGVkIGNvZGUgYXQgJXAiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUo
bV9wbGFuLmNvZGVCbG9jaywgSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpLCBmdW5jdGlvbikpKTsK
ICAgICAKICAgICBtX3BsYW4uY29kZUJsb2NrLT5zZXRKSVRDb2RlKGppdENvZGUpOwogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJKHJldmlzaW9u
IDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDE3ICs0MSwxMSBAQCBDb2RlQmxvY2tTZXQ6OkNvZGVCbG9j
a1NldCgpCiAKIENvZGVCbG9ja1NldDo6fkNvZGVCbG9ja1NldCgpCiB7Ci0gICAgZm9yIChDb2Rl
QmxvY2sqIGNvZGVCbG9jayA6IG1fb2xkQ29kZUJsb2NrcykKLSAgICAgICAgY29kZUJsb2NrLT5k
ZXJlZigpOwotCi0gICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IG1fbmV3Q29kZUJsb2Nr
cykKLSAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOwogfQogCi12b2lkIENvZGVCbG9ja1NldDo6
YWRkKFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2spCit2b2lkIENvZGVCbG9ja1NldDo6
YWRkKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIENvZGVCbG9jayogYmxvY2sgPSBjb2Rl
QmxvY2subGVha1JlZigpOwotICAgIGJvb2wgaXNOZXdFbnRyeSA9IG1fbmV3Q29kZUJsb2Nrcy5h
ZGQoYmxvY2spLmlzTmV3RW50cnk7CisgICAgYm9vbCBpc05ld0VudHJ5ID0gbV9uZXdDb2RlQmxv
Y2tzLmFkZChjb2RlQmxvY2spLmlzTmV3RW50cnk7CiAgICAgQVNTRVJUX1VOVVNFRChpc05ld0Vu
dHJ5LCBpc05ld0VudHJ5KTsKIH0KIApAQCAtNjQsNTIgKzU4LDI2IEBAIHZvaWQgQ29kZUJsb2Nr
U2V0Ojpwcm9tb3RlWW91bmdDb2RlQmxvY2sKIHZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtz
Rm9yRnVsbENvbGxlY3Rpb24oKQogewogICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiBt
X29sZENvZGVCbG9ja3MpCi0gICAgICAgIGNvZGVCbG9jay0+Y2xlYXJNYXJrcygpOworICAgICAg
ICBjb2RlQmxvY2stPmNsZWFyVmlzaXRXZWFrbHlIYXNCZWVuQ2FsbGVkKCk7CiAKICAgICAvLyBX
ZSBwcm9tb3RlIGFmdGVyIHdlIGNsZWFyIG1hcmtzIG9uIHRoZSBvbGQgZ2VuZXJhdGlvbiBDb2Rl
QmxvY2tzIGJlY2F1c2UKICAgICAvLyBub25lIG9mIHRoZSB5b3VuZyBnZW5lcmF0aW9ucyBDb2Rl
QmxvY2tzIG5lZWQgdG8gYmUgY2xlYXJlZC4KICAgICBwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCk7
CiB9CiAKLXZvaWQgQ29kZUJsb2NrU2V0OjpjbGVhck1hcmtzRm9yRWRlbkNvbGxlY3Rpb24oY29u
c3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+JiByZW1lbWJlcmVkU2V0KQotewotICAgIC8vIFRoaXMg
ZW5zdXJlcyB0aGF0IHdlIHdpbGwgcmV2aXNpdCBDb2RlQmxvY2tzIGluIHJlbWVtYmVyZWQgRXhl
Y3V0YWJsZXMgZXZlbiBpZiB0aGV5IHdlcmUgcHJldmlvdXNseSBtYXJrZWQuCi0gICAgZm9yIChj
b25zdCBKU0NlbGwqIGNlbGwgOiByZW1lbWJlcmVkU2V0KSB7Ci0gICAgICAgIFNjcmlwdEV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUgPSBjb25zdF9jYXN0PFNjcmlwdEV4ZWN1dGFibGUqPihqc0R5bmFt
aWNDYXN0PGNvbnN0IFNjcmlwdEV4ZWN1dGFibGUqPihjZWxsKSk7Ci0gICAgICAgIGlmICghZXhl
Y3V0YWJsZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBleGVjdXRhYmxlLT5mb3JF
YWNoQ29kZUJsb2NrKFt0aGlzXShDb2RlQmxvY2sqIGNvZGVCbG9jaykgewotICAgICAgICAgICAg
Y29kZUJsb2NrLT5jbGVhck1hcmtzKCk7Ci0gICAgICAgICAgICBtX3JlbWVtYmVyZWQuYWRkKGNv
ZGVCbG9jayk7Ci0gICAgICAgIH0pOwotICAgIH0KLX0KLQogdm9pZCBDb2RlQmxvY2tTZXQ6OmRl
bGV0ZVVubWFya2VkQW5kVW5yZWZlcmVuY2VkKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUp
CiB7CiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiYgc2V0ID0gY29sbGVjdGlvblR5cGUgPT0gRWRl
bkNvbGxlY3Rpb24gPyBtX25ld0NvZGVCbG9ja3MgOiBtX29sZENvZGVCbG9ja3M7CisgICAgVmVj
dG9yPENvZGVCbG9jayo+IHVubWFya2VkOworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
OiBzZXQpIHsKKyAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNvZGVCbG9jaykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgdW5tYXJrZWQuYXBwZW5kKGNvZGVCbG9jayk7CisgICAg
fQogCi0gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBhIGZpeHBvaW50IGJlY2F1c2UgY29kZSBibG9j
a3MgdGhhdCBhcmUgdW5tYXJrZWQgbWF5Ci0gICAgLy8gcmVmZXIgdG8gZWFjaCBvdGhlci4gRm9y
IGV4YW1wbGUsIGEgREZHIGNvZGUgYmxvY2sgdGhhdCBpcyBvd25lZCBieQotICAgIC8vIHRoZSBH
QyBtYXkgcmVmZXIgdG8gYW4gRlRMIGZvci1lbnRyeSBjb2RlIGJsb2NrIHRoYXQgaXMgYWxzbyBv
d25lZCBieQotICAgIC8vIHRoZSBHQy4KLSAgICBWZWN0b3I8Q29kZUJsb2NrKiwgMTY+IHRvUmVt
b3ZlOwotICAgIGlmICh2ZXJib3NlKQotICAgICAgICBkYXRhTG9nKCJGaXhwb2ludGluZyBvdmVy
IHVubWFya2VkLCBzZXQgc2l6ZSA9ICIsIHNldC5zaXplKCksICIuLi5cbiIpOwotICAgIGZvciAo
OzspIHsKLSAgICAgICAgZm9yIChDb2RlQmxvY2sqIGNvZGVCbG9jayA6IHNldCkgewotICAgICAg
ICAgICAgaWYgKCFjb2RlQmxvY2stPmhhc09uZVJlZigpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgY29kZUJsb2NrLT5kZXJlZigpOwotICAgICAgICAgICAgdG9SZW1v
dmUuYXBwZW5kKGNvZGVCbG9jayk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCIgICAgUmVtb3ZpbmcgIiwgdG9SZW1vdmUuc2l6ZSgpLCAiIGJs
b2Nrcy5cbiIpOwotICAgICAgICBpZiAodG9SZW1vdmUuaXNFbXB0eSgpKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiB0b1JlbW92ZSkKLSAg
ICAgICAgICAgIHNldC5yZW1vdmUoY29kZUJsb2NrKTsKLSAgICAgICAgdG9SZW1vdmUucmVzaXpl
KDApOworICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sgOiB1bm1hcmtlZCkgeworICAgICAg
ICBjb2RlQmxvY2stPmNsYXNzSW5mbygpLT5tZXRob2RUYWJsZS5kZXN0cm95KGNvZGVCbG9jayk7
CisgICAgICAgIHNldC5yZW1vdmUoY29kZUJsb2NrKTsKICAgICB9CiAKICAgICAvLyBBbnkgcmVt
YWluaW5nIHlvdW5nIENvZGVCbG9ja3MgYXJlIGxpdmUgYW5kIG5lZWQgdG8gYmUgcHJvbW90ZWQg
dG8gdGhlIHNldCBvZiBvbGQgQ29kZUJsb2Nrcy4KQEAgLTExOSw3ICs4Nyw2IEBAIHZvaWQgQ29k
ZUJsb2NrU2V0OjpkZWxldGVVbm1hcmtlZEFuZFVucmUKIAogdm9pZCBDb2RlQmxvY2tTZXQ6OnJl
bW92ZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKLSAgICBjb2RlQmxvY2stPmRlcmVmKCk7CiAg
ICAgaWYgKG1fb2xkQ29kZUJsb2Nrcy5jb250YWlucyhjb2RlQmxvY2spKSB7CiAgICAgICAgIG1f
b2xkQ29kZUJsb2Nrcy5yZW1vdmUoY29kZUJsb2NrKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTI4
LDM1ICs5NSwxMyBAQCB2b2lkIENvZGVCbG9ja1NldDo6cmVtb3ZlKENvZGVCbG9jayogY29kCiAg
ICAgbV9uZXdDb2RlQmxvY2tzLnJlbW92ZShjb2RlQmxvY2spOwogfQogCi12b2lkIENvZGVCbG9j
a1NldDo6dHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgaWYgKHZlcmJv
c2UpCi0gICAgICAgIGRhdGFMb2coIlRyYWNpbmcgIiwgbV9jdXJyZW50bHlFeGVjdXRpbmcuc2l6
ZSgpLCAiIGNvZGUgYmxvY2tzLlxuIik7Ci0KLSAgICAvLyBXZSBzdHJvbmdseSB2aXNpdCB0aGUg
Y3VycmVudGx5IGV4ZWN1dGluZyBzZXQgYmVjYXVzZSBqZXR0aXNvbmluZyBjb2RlCi0gICAgLy8g
aXMgbm90IHZhbHVhYmxlIG9uY2UgaXQncyBvbiB0aGUgc3RhY2suIFdlJ3JlIHBhc3QgdGhlIHBv
aW50IHdoZXJlCi0gICAgLy8gamV0dGlzb25pbmcgd291bGQgYXZvaWQgdGhlIGNvc3Qgb2YgT1NS
IGV4aXQuCi0gICAgZm9yIChjb25zdCBSZWZQdHI8Q29kZUJsb2NrPiYgY29kZUJsb2NrIDogbV9j
dXJyZW50bHlFeGVjdXRpbmcpCi0gICAgICAgIGNvZGVCbG9jay0+dmlzaXRTdHJvbmdseSh2aXNp
dG9yKTsKLQotICAgIC8vIFdlIHN0cm9uZ2x5IHZpc2l0IHRoZSByZW1lbWJlcmVkIHNldCBiZWNh
dXNlIGpldHRpc29uaW5nIG9sZCBjb2RlIGR1cmluZwotICAgIC8vIEVkZW4gR0MgaXMgdW5zb3Vu
ZC4gVGhlcmUgbWlnaHQgYmUgYW4gb2xkIG9iamVjdCB3aXRoIGEgc3Ryb25nIHJlZmVyZW5jZQot
ICAgIC8vIHRvIHRoZSBjb2RlLgotICAgIGZvciAoY29uc3QgUmVmUHRyPENvZGVCbG9jaz4mIGNv
ZGVCbG9jayA6IG1fcmVtZW1iZXJlZCkKLSAgICAgICAgY29kZUJsb2NrLT52aXNpdFN0cm9uZ2x5
KHZpc2l0b3IpOwotfQotCiB2b2lkIENvZGVCbG9ja1NldDo6cmVtZW1iZXJDdXJyZW50bHlFeGVj
dXRpbmdDb2RlQmxvY2tzKEhlYXAqIGhlYXApCiB7CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
IGRhdGFMb2coIlJlbWVtYmVyaW5nICIsIG1fY3VycmVudGx5RXhlY3V0aW5nLnNpemUoKSwgIiBj
b2RlIGJsb2Nrcy5cbiIpOwotICAgIGZvciAoY29uc3QgUmVmUHRyPENvZGVCbG9jaz4mIGNvZGVC
bG9jayA6IG1fY3VycmVudGx5RXhlY3V0aW5nKQotICAgICAgICBoZWFwLT5hZGRUb1JlbWVtYmVy
ZWRTZXQoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Ci0KLSAgICAvLyBJdCdzIHNhZmUg
dG8gY2xlYXIgdGhlc2UgUmVmUHRyIHNldHMgYmVjYXVzZSB3ZSB3b24ndCBkZWxldGUgdGhlIENv
ZGVCbG9ja3MKLSAgICAvLyBpbiB0aGVtIHVudGlsIHRoZSBuZXh0IEdDLCBhbmQgd2UnbGwgcmVj
b21wdXRlIHRoZW0gYXQgdGhhdCB0aW1lLgorICAgIGZvciAoQ29kZUJsb2NrKiBjb2RlQmxvY2sg
OiBtX2N1cnJlbnRseUV4ZWN1dGluZykKKyAgICAgICAgaGVhcC0+YWRkVG9SZW1lbWJlcmVkU2V0
KGNvZGVCbG9jayk7CiAgICAgbV9jdXJyZW50bHlFeGVjdXRpbmcuY2xlYXIoKTsKLSAgICBtX3Jl
bWVtYmVyZWQuY2xlYXIoKTsKIH0KIAogdm9pZCBDb2RlQmxvY2tTZXQ6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKQEAgLTE3MSw4ICsxMTYsOCBAQCB2b2lkIENvZGVCbG9ja1NldDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAo
Y29kZUJsb2NrKSk7CiAgICAgb3V0LnByaW50KCJdLCBjdXJyZW50bHlFeGVjdXRpbmcgPSBbIik7
CiAgICAgY29tbWEgPSBDb21tYVByaW50ZXIoKTsKLSAgICBmb3IgKGNvbnN0IFJlZlB0cjxDb2Rl
QmxvY2s+JiBjb2RlQmxvY2sgOiBtX2N1cnJlbnRseUV4ZWN1dGluZykKLSAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBwb2ludGVyRHVtcChjb2RlQmxvY2suZ2V0KCkpKTsKKyAgICBmb3IgKENvZGVC
bG9jayogY29kZUJsb2NrIDogbV9jdXJyZW50bHlFeGVjdXRpbmcpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgcG9pbnRlckR1bXAoY29kZUJsb2NrKSk7CiAgICAgb3V0LnByaW50KCJdfSIpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuaAkocmV2
aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDExICs1Myw4IEBAIHB1YmxpYzoKICAgICB+Q29kZUJs
b2NrU2V0KCk7CiAgICAgCiAgICAgLy8gQWRkIGEgQ29kZUJsb2NrLiBUaGlzIGlzIG9ubHkgY2Fs
bGVkIGJ5IENvZGVCbG9jayBjb25zdHJ1Y3RvcnMuCi0gICAgdm9pZCBhZGQoUGFzc1JlZlB0cjxD
b2RlQmxvY2s+KTsKKyAgICB2b2lkIGFkZChDb2RlQmxvY2sqKTsKICAgICAKLSAgICAvLyBDbGVh
ciBtYXJrIGJpdHMgZm9yIGNlcnRhaW4gQ29kZUJsb2NrcyBkZXBlbmRpbmcgb24gdGhlIHR5cGUg
b2YgY29sbGVjdGlvbi4KLSAgICB2b2lkIGNsZWFyTWFya3NGb3JFZGVuQ29sbGVjdGlvbihjb25z
dCBWZWN0b3I8Y29uc3QgSlNDZWxsKj4mKTsKLQogICAgIC8vIENsZWFyIGFsbCBtYXJrIGJpdHMg
Zm9yIGFsbCBDb2RlQmxvY2tzLgogICAgIHZvaWQgY2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9u
KCk7CiAKQEAgLTcyLDEwICs2OSw2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlbW92ZShD
b2RlQmxvY2sqKTsKICAgICAKLSAgICAvLyBUcmFjZSBhbGwgbWFya2VkIGNvZGUgYmxvY2tzLiBU
aGUgQ29kZUJsb2NrIGlzIGZyZWUgdG8gbWFrZSB1c2Ugb2YKLSAgICAvLyBtYXlCZUV4ZWN1dGlu
Zy4KLSAgICB2b2lkIHRyYWNlTWFya2VkKFNsb3RWaXNpdG9yJik7Ci0KICAgICAvLyBBZGQgYWxs
IGN1cnJlbnRseSBleGVjdXRpbmcgQ29kZUJsb2NrcyB0byB0aGUgcmVtZW1iZXJlZCBzZXQgdG8g
YmUgCiAgICAgLy8gcmUtc2Nhbm5lZCBkdXJpbmcgdGhlIG5leHQgY29sbGVjdGlvbi4KICAgICB2
b2lkIHJlbWVtYmVyQ3VycmVudGx5RXhlY3V0aW5nQ29kZUJsb2NrcyhIZWFwKik7CkBAIC0xMDQs
MTMgKzk3LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyTWFya3NGb3JDb2RlQmxvY2tzSW5S
ZW1lbWJlcmVkRXhlY3V0YWJsZXMoY29uc3QgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+Jik7CiAgICAg
dm9pZCBwcm9tb3RlWW91bmdDb2RlQmxvY2tzKCk7CiAKLSAgICAvLyBUaGlzIGlzIG5vdCBhIHNl
dCBvZiBSZWZQdHI8Q29kZUJsb2NrPiBiZWNhdXNlIHdlIG5lZWQgdG8gYmUgYWJsZSB0byBmaW5k
Ci0gICAgLy8gYXJiaXRyYXJ5IGJvZ3VzIHBvaW50ZXJzLiBJIGNvdWxkIGhhdmUgd3JpdHRlbiBh
IHRoaW5neSB0aGF0IGhhZCBwZWVrIHR5cGVzCi0gICAgLy8gYW5kIGFsbCwgYnV0IHRoYXQgc2Vl
bWVkIGxpa2Ugb3ZlcmtpbGwuCiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX29sZENvZGVCbG9j
a3M7CiAgICAgSGFzaFNldDxDb2RlQmxvY2sqPiBtX25ld0NvZGVCbG9ja3M7Ci0gICAgSGFzaFNl
dDxSZWZQdHI8Q29kZUJsb2NrPj4gbV9jdXJyZW50bHlFeGVjdXRpbmc7Ci0gICAgSGFzaFNldDxS
ZWZQdHI8Q29kZUJsb2NrPj4gbV9yZW1lbWJlcmVkOworICAgIEhhc2hTZXQ8Q29kZUJsb2NrKj4g
bV9jdXJyZW50bHlFeGVjdXRpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIwLDE3ICs1
MjAsNiBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAgICAgR0NQ
SEFTRShNYXJrUm9vdHMpOwogICAgIEFTU0VSVChpc1ZhbGlkVGhyZWFkU3RhdGUobV92bSkpOwog
Ci0gICAgVmVjdG9yPGNvbnN0IEpTQ2VsbCo+IHJlbWVtYmVyZWRTZXQobV9zbG90VmlzaXRvci5t
YXJrU3RhY2soKS5zaXplKCkpOwotICAgIG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuZmlsbFZl
Y3RvcihyZW1lbWJlcmVkU2V0KTsKLQotI2lmIEVOQUJMRShERkdfSklUKQotICAgIERGRzo6Y2xl
YXJDb2RlQmxvY2tNYXJrcygqbV92bSk7Ci0jZW5kaWYKLSAgICBpZiAobV9vcGVyYXRpb25JblBy
b2dyZXNzID09IEVkZW5Db2xsZWN0aW9uKQotICAgICAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJr
c0ZvckVkZW5Db2xsZWN0aW9uKHJlbWVtYmVyZWRTZXQpOwotICAgIGVsc2UKLSAgICAgICAgbV9j
b2RlQmxvY2tzLmNsZWFyTWFya3NGb3JGdWxsQ29sbGVjdGlvbigpOwotCiAgICAgLy8gV2UgZ2F0
aGVyIGNvbnNlcnZhdGl2ZSByb290cyBiZWZvcmUgY2xlYXJpbmcgbWFyayBiaXRzIGJlY2F1c2Ug
Y29uc2VydmF0aXZlCiAgICAgLy8gZ2F0aGVyaW5nIHVzZXMgdGhlIG1hcmsgYml0cyB0byBkZXRl
cm1pbmUgd2hldGhlciBhIHJlZmVyZW5jZSBpcyB2YWxpZC4KICAgICBDb25zZXJ2YXRpdmVSb290
cyBjb25zZXJ2YXRpdmVSb290cygmbV9vYmplY3RTcGFjZS5ibG9ja3MoKSwgJm1fc3RvcmFnZVNw
YWNlKTsKQEAgLTUzOCwxMCArNTI3LDIwIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGRvdWJsZSBn
Y1N0YXJ0VGltZSwKICAgICBnYXRoZXJKU1N0YWNrUm9vdHMoY29uc2VydmF0aXZlUm9vdHMpOwog
ICAgIGdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhjb25zZXJ2YXRpdmVSb290cyk7CiAKLSAgICBj
bGVhckxpdmVuZXNzRGF0YSgpOworI2lmIEVOQUJMRShERkdfSklUKQorICAgIERGRzo6cmVtZW1i
ZXJDb2RlQmxvY2tzKCptX3ZtKTsKKyNlbmRpZgogCi0gICAgaWYgKG1fb3BlcmF0aW9uSW5Qcm9n
cmVzcyA9PSBGdWxsQ29sbGVjdGlvbikKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09
IEZ1bGxDb2xsZWN0aW9uKSB7CiAgICAgICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKKyAgICAg
ICAgbV9zbG90VmlzaXRvci5jbGVhck1hcmtTdGFjaygpOworICAgIH0KKworICAgIFZlY3Rvcjxj
b25zdCBKU0NlbGwqPiByZW1lbWJlcmVkU2V0KG1fc2xvdFZpc2l0b3IubWFya1N0YWNrKCkuc2l6
ZSgpKTsKKyAgICBtX3Nsb3RWaXNpdG9yLm1hcmtTdGFjaygpLmZpbGxWZWN0b3IocmVtZW1iZXJl
ZFNldCk7CisKKyAgICBjbGVhckxpdmVuZXNzRGF0YSgpOworCiAKICAgICBtX3Nob3VsZEhhc2hD
b25zID0gbV92bS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zKCk7CiAKQEAgLTU4Miw2
ICs1ODEsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhkb3VibGUgZ2NTdGFydFRpbWUsCiAgICAg
ewogICAgICAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIobV9zbG90VmlzaXRvcik7CiAK
KyAgICAgICAgbV9zbG90VmlzaXRvci5kb25hdGVBbmREcmFpbigpOwogICAgICAgICB2aXNpdEV4
dGVybmFsUmVtZW1iZXJlZFNldCgpOwogICAgICAgICB2aXNpdFNtYWxsU3RyaW5ncygpOwogICAg
ICAgICB2aXNpdENvbnNlcnZhdGl2ZVJvb3RzKGNvbnNlcnZhdGl2ZVJvb3RzKTsKQEAgLTY5Nyw2
ICs2OTcsOSBAQCB2b2lkIEhlYXA6OmdhdGhlclNjcmF0Y2hCdWZmZXJSb290cyhDb25zCiB2b2lk
IEhlYXA6OmNsZWFyTGl2ZW5lc3NEYXRhKCkKIHsKICAgICBHQ1BIQVNFKENsZWFyTGl2ZW5lc3NE
YXRhKTsKKyAgICBpZiAobV9vcGVyYXRpb25JblByb2dyZXNzID09IEZ1bGxDb2xsZWN0aW9uKQor
ICAgICAgICBtX2NvZGVCbG9ja3MuY2xlYXJNYXJrc0ZvckZ1bGxDb2xsZWN0aW9uKCk7CisKICAg
ICBtX29iamVjdFNwYWNlLmNsZWFyTmV3bHlBbGxvY2F0ZWQoKTsKICAgICBtX29iamVjdFNwYWNl
LmNsZWFyTWFya3MoKTsKIH0KQEAgLTgxOCw3ICs4MjEsNiBAQCB2b2lkIEhlYXA6OnZpc2l0SGFu
ZGxlU3RhY2soSGVhcFJvb3RWaXNpCiB2b2lkIEhlYXA6OnRyYWNlQ29kZUJsb2Nrc0FuZEpJVFN0
dWJSb3V0aW5lcygpCiB7CiAgICAgR0NQSEFTRShUcmFjZUNvZGVCbG9ja3NBbmRKSVRTdHViUm91
dGluZXMpOwotICAgIG1fY29kZUJsb2Nrcy50cmFjZU1hcmtlZChtX3Nsb3RWaXNpdG9yKTsKICAg
ICBtX2ppdFN0dWJSb3V0aW5lcy50cmFjZU1hcmtlZFN0dWJSb3V0aW5lcyhtX3Nsb3RWaXNpdG9y
KTsKIAogICAgIGlmIChPcHRpb25zOjpsb2dHQygpID09IEdDTG9nZ2luZzo6VmVyYm9zZSkKQEAg
LTk2MywxOCArOTY1LDEyIEBAIHZvaWQgSGVhcDo6ZGVsZXRlQWxsQ29kZUJsb2NrcygpCiAgICAg
Ly8gSWYgSmF2YVNjcmlwdCBpcyBydW5uaW5nLCBpdCdzIG5vdCBzYWZlIHRvIGRlbGV0ZSBhbGwg
SmF2YVNjcmlwdCBjb2RlLCBzaW5jZQogICAgIC8vIHdlJ2xsIGVuZCB1cCByZXR1cm5pbmcgdG8g
ZGVsZXRlZCBjb2RlLgogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3ZtLT5lbnRyeVNjb3BlKTsKKyAg
ICBBU1NFUlQobV9vcGVyYXRpb25JblByb2dyZXNzID09IE5vT3BlcmF0aW9uKTsKIAogICAgIGNv
bXBsZXRlQWxsREZHUGxhbnMoKTsKIAotICAgIGZvciAoRXhlY3V0YWJsZUJhc2UqIGN1cnJlbnQg
OiBtX2V4ZWN1dGFibGVzKSB7Ci0gICAgICAgIGlmICghY3VycmVudC0+aXNGdW5jdGlvbkV4ZWN1
dGFibGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihjdXJyZW50KS0+Y2xlYXJDb2RlKCk7Ci0gICAgfQotCi0gICAgQVNT
RVJUKG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9PSBGdWxsQ29sbGVjdGlvbiB8fCBtX29wZXJhdGlv
bkluUHJvZ3Jlc3MgPT0gTm9PcGVyYXRpb24pOwotICAgIG1fY29kZUJsb2Nrcy5jbGVhck1hcmtz
Rm9yRnVsbENvbGxlY3Rpb24oKTsKLSAgICBtX2NvZGVCbG9ja3MuZGVsZXRlVW5tYXJrZWRBbmRV
bnJlZmVyZW5jZWQoRnVsbENvbGxlY3Rpb24pOworICAgIGZvciAoRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUgOiBtX2V4ZWN1dGFibGVzKQorICAgICAgICBleGVjdXRhYmxlLT5jbGVhckNvZGUo
KTsKIH0KIAogdm9pZCBIZWFwOjpkZWxldGVBbGxVbmxpbmtlZENvZGVCbG9ja3MoKQpAQCAtOTk0
LDkgKzk5MCw5IEBAIHZvaWQgSGVhcDo6Y2xlYXJVbm1hcmtlZEV4ZWN1dGFibGVzKCkKICAgICAg
ICAgaWYgKGlzTWFya2VkKGN1cnJlbnQpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAg
ICAgLy8gV2UgZG8gdGhpcyBiZWNhdXNlIGV4ZWN1dGFibGUgbWVtb3J5IGlzIGxpbWl0ZWQgb24g
c29tZSBwbGF0Zm9ybXMgYW5kIGJlY2F1c2UKLSAgICAgICAgLy8gQ29kZUJsb2NrIHJlcXVpcmVz
IGVhZ2VyIGZpbmFsaXphdGlvbi4KLSAgICAgICAgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZp
cnR1YWwoY3VycmVudCk7CisgICAgICAgIC8vIEVhZ2VybHkgZGVyZWZlcmVuY2UgdGhlIEV4ZWN1
dGFibGUncyBKSVRDb2RlIGluIG9yZGVyIHRvIHJ1biB3YXRjaHBvaW50CisgICAgICAgIC8vIGRl
c3RydWN0b3JzLiBPdGhlcndpc2UsIHdhdGNocG9pbnRzIG1pZ2h0IGZpcmUgZm9yIGRlbGV0ZWQg
Q29kZUJsb2Nrcy4KKyAgICAgICAgY3VycmVudC0+Y2xlYXJDb2RlKCk7CiAgICAgICAgIHN0ZDo6
c3dhcChtX2V4ZWN1dGFibGVzW2ldLCBtX2V4ZWN1dGFibGVzLmxhc3QoKSk7CiAgICAgICAgIG1f
ZXhlY3V0YWJsZXMucmVtb3ZlTGFzdCgpOwogICAgIH0KQEAgLTExNTAsNyArMTE0Niw2IEBAIHZv
aWQgSGVhcDo6d2lsbFN0YXJ0Q29sbGVjdGlvbihIZWFwT3BlcmEKICAgICBHQ1BIQVNFKFN0YXJ0
aW5nQ29sbGVjdGlvbik7CiAgICAgaWYgKHNob3VsZERvRnVsbENvbGxlY3Rpb24oY29sbGVjdGlv
blR5cGUpKSB7CiAgICAgICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IEZ1bGxDb2xsZWN0aW9u
OwotICAgICAgICBtX3Nsb3RWaXNpdG9yLmNsZWFyTWFya1N0YWNrKCk7CiAgICAgICAgIG1fc2hv
dWxkRG9GdWxsQ29sbGVjdGlvbiA9IGZhbHNlOwogICAgICAgICBpZiAoT3B0aW9uczo6bG9nR0Mo
KSkKICAgICAgICAgICAgIGRhdGFMb2coIkZ1bGxDb2xsZWN0aW9uLCAiKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2
aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIEpTVmFsdWUgZXZh
bChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgQVNTRVJUKCFjYWxsRnJhbWUtPnZtKCku
ZXhjZXB0aW9uKCkpOwogCiAgICAgICAgIFRoaXNURFpNb2RlIHRoaXNURFpNb2RlID0gY2FsbGVy
Q29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5jb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25z
dHJ1Y3RvcktpbmQ6OkRlcml2ZWQgPyBUaGlzVERaTW9kZTo6QWx3YXlzQ2hlY2sgOiBUaGlzVERa
TW9kZTo6Q2hlY2tJZk5lZWRlZDsKLSAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVCbG9jay0+ZXZh
bENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyU2Ny
aXB0RXhlY3V0YWJsZSgpLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCB0aGlzVERa
TW9kZSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CisgICAgICAgIGV2YWwgPSBj
YWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVy
Q29kZUJsb2NrLCBjYWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCB0aGlzVERaTW9kZSwg
cHJvZ3JhbVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CiAgICAgICAgIGlmICghZXZhbCkKICAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRpbmUuaAkocmV2aXNpb24g
MTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HQ0F3YXJlSklUU3R1YlJvdXRp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIFBhc3NSZWZQdHI8SklUU3R1
YlJvdXRpbmU+IGNyZWF0ZUpJVFN0dWIKIC8vIEhlbHBlciBmb3IgdGhlIGNyZWF0aW9uIG9mIHNp
bXBsZSBzdHViIHJvdXRpbmVzIHRoYXQgbmVlZCBubyBoZWxwIGZyb20gdGhlIEdDLiBOb3RlCiAv
LyB0aGF0IGNvZGVCbG9jayBnZXRzICJleGVjdXRlZCIgbW9yZSB0aGFuIG9uY2UuCiAjZGVmaW5l
IEZJTkFMSVpFX0NPREVfRk9SX0dDX0FXQVJFX1NUVUIoY29kZUJsb2NrLCBwYXRjaEJ1ZmZlciwg
bWFrZXNDYWxscywgY2VsbCwgZGF0YUxvZ0ZBcmd1bWVudHMpIFwKLSAgICAoY3JlYXRlSklUU3R1
YlJvdXRpbmUoRklOQUxJWkVfQ09ERV9GT1IoKGNvZGVCbG9jayksIChwYXRjaEJ1ZmZlciksIGRh
dGFMb2dGQXJndW1lbnRzKSwgKihjb2RlQmxvY2spLT52bSgpLCAoY29kZUJsb2NrKS0+b3duZXJF
eGVjdXRhYmxlKCksIChtYWtlc0NhbGxzKSwgKGNlbGwpKSkKKyAgICAoY3JlYXRlSklUU3R1YlJv
dXRpbmUoRklOQUxJWkVfQ09ERV9GT1IoKGNvZGVCbG9jayksIChwYXRjaEJ1ZmZlciksIGRhdGFM
b2dGQXJndW1lbnRzKSwgKihjb2RlQmxvY2spLT52bSgpLCAoY29kZUJsb2NrKSwgKG1ha2VzQ2Fs
bHMpLCAoY2VsbCkpKQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsMjggKzEyMSw2IEBAIHB1
YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBzdGQ6OmNocm9ubzo6bWlsbGlz
ZWNvbmRzIHRpbWVUb0xpdmUoSklUVHlwZSBqaXRUeXBlKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChqaXRUeXBlKSB7Ci0gICAgICAgIGNhc2UgSW50ZXJwcmV0ZXJUaHVuazoKLSAgICAgICAgICAg
IHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNv
bmRzPigKLSAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg1KSk7Ci0gICAgICAg
IGNhc2UgQmFzZWxpbmVKSVQ6Ci0gICAgICAgICAgICAvLyBFZmZlY3RpdmVseSAxMCBhZGRpdGlv
bmFsIHNlY29uZHMsIHNpbmNlIEJhc2VsaW5lSklUIGFuZAotICAgICAgICAgICAgLy8gSW50ZXJw
cmV0ZXJUaHVuayBzaGFyZSBhIENvZGVCbG9jay4KLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNo
cm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKLSAgICAgICAg
ICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygxNSkpOwotICAgICAgICBjYXNlIERGR0pJVDoK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9ubzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9u
bzo6bWlsbGlzZWNvbmRzPigKLSAgICAgICAgICAgICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcygy
MCkpOwotICAgICAgICBjYXNlIEZUTEpJVDoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6OmNocm9u
bzo6ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPigKLSAgICAgICAgICAg
ICAgICBzdGQ6OmNocm9ubzo6c2Vjb25kcyg2MCkpOwotICAgICAgICBkZWZhdWx0OgotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjptaWxsaXNlY29uZHM6Om1heCgpOwotICAgICAgICB9
Ci0gICAgfQotCiAgICAgc3RhdGljIGJvb2wgaXNMb3dlclRpZXIoSklUVHlwZSBleHBlY3RlZExv
d2VyLCBKSVRUeXBlIGV4cGVjdGVkSGlnaGVyKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoaXNFeGVjdXRhYmxlU2NyaXB0KGV4cGVjdGVkTG93ZXIpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTkwNDM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjY2
LDcgKzY2Niw3IEBAIHZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKikKICAgICBm
b3IgKHNpemVfdCBqID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNW
aXJ0dWFsUmVnaXN0ZXJzKCk7IGogPCBjb3VudDsgKytqKQogICAgICAgICBlbWl0SW5pdFJlZ2lz
dGVyKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGopLm9mZnNldCgpKTsKIAotICAgIGVtaXRXcml0
ZUJhcnJpZXIobV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKTsKKyAgICBlbWl0V3JpdGVC
YXJyaWVyKG1fY29kZUJsb2NrKTsKIAogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzMsMTUgKzEyNzMsMTMgQEAgU2xvd1BhdGhS
ZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgICAgICAgICAgbXVzdEhhbmRsZVZh
bHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCkuanNWYWx1ZSgpOwogICAgICAgICB9
CiAKLSAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gcmVwbGFjZW1lbnRDb2RlQmxvY2sgPSBjb2Rl
QmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CisgICAgICAgIENvZGVCbG9jayogcmVwbGFjZW1lbnRD
b2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CiAgICAgICAgIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAgICAgICAgIHZtLCByZXBsYWNl
bWVudENvZGVCbG9jay5nZXQoKSwgMCwgREZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAorICAg
ICAgICAgICAgdm0sIHJlcGxhY2VtZW50Q29kZUJsb2NrLCBudWxscHRyLCBERkc6OkRGR01vZGUs
IGJ5dGVjb2RlSW5kZXgsCiAgICAgICAgICAgICBtdXN0SGFuZGxlVmFsdWVzLCBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKCkpOwogICAgICAgICAKLSAgICAgICAg
aWYgKHJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpIHsKLSAgICAgICAgICAgIEFTU0VS
VChyZXN1bHQgPT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCByZXBsYWNlbWVudENvZGVCbG9jay0+
aGFzT25lUmVmKCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1
bCkKICAgICAgICAgICAgIHJldHVybiBlbmNvZGVSZXN1bHQoMCwgMCk7Ci0gICAgICAgIH0KICAg
ICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBvcHRpbWl6ZWRDb2RlQmxvY2sgPSBjb2RlQmxvY2st
PnJlcGxhY2VtZW50KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAko
cmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDkgQEAgUmVmPEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrPgogfQogCiB2b2lk
IEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZEJlY29t
ZVJlYWR5QXN5bmNocm9ub3VzbHkoCi0gICAgQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRERkdDb2RlQmxvY2spCiB7Cisg
ICAgQVNTRVJUX1VOVVNFRChwcm9maWxlZERGR0NvZGVCbG9jaywgIXByb2ZpbGVkREZHQ29kZUJs
b2NrKTsKICAgICBBU1NFUlQoY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5qaXRUeXBlKCkgPT0g
SklUQ29kZTo6QmFzZWxpbmVKSVQpOwogICAgIAogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NS
KCkpCkBAIC01NCw4ICs1NSw5IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2sKIH0KIAogdm9pZCBKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29t
cGlsYXRpb25EaWRDb21wbGV0ZSgKLSAgICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgQ29tcGlsYXRp
b25SZXN1bHQgcmVzdWx0KQorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkREZHQ29kZUJsb2NrLCBDb21waWxhdGlvblJlc3VsdCByZXN1bHQpCiB7CisgICAgQVNT
RVJUKCFwcm9maWxlZERGR0NvZGVCbG9jayk7CiAgICAgQVNTRVJUKGNvZGVCbG9jay0+YWx0ZXJu
YXRpdmUoKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICAKICAgICBp
ZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQpAQCAtNjYsNyArNjgsNyBAQCB2b2lkIEpJVFRvREZH
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrCiAgICAgCiAgICAgY29kZUJsb2NrLT5hbHRlcm5h
dGl2ZSgpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQo
cmVzdWx0KTsKIAotICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGlsYXRpb25E
aWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcHJvZmlsZWRERkdDb2Rl
QmxvY2ssIHJlc3VsdCk7CiB9CiAKIH0gLy8gSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oCShyZXZpc2lvbiAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDggKzQ0LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIFJlZjxKSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjaz4gY3JlYXRlKCk7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGNv
bXBpbGF0aW9uRGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2RlQmxvY2sqLCBD
b21waWxhdGlvblJlc3VsdCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIGNvbXBpbGF0aW9u
RGlkQmVjb21lUmVhZHlBc3luY2hyb25vdXNseShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2Zp
bGVkREZHQ29kZUJsb2NrKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25E
aWRDb21wbGV0ZShDb2RlQmxvY2sqLCBDb2RlQmxvY2sqIHByb2ZpbGVkREZHQ29kZUJsb2NrLCBD
b21waWxhdGlvblJlc3VsdCkgb3ZlcnJpZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTkwNDM4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI3LDE1ICsyMjcsMTQgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlR2V0
QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKIAogICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXIg
PSBjb2RlQmxvY2stPm93bmVyU2NyaXB0RXhlY3V0YWJsZSgpOwogICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZTsKIAogICAg
IGlmIChpc0pTQXJyYXkoYmFzZVZhbHVlKSAmJiBwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmxlbmd0aCkKLSAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0
aCh2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkFycmF5TGVuZ3RoKTsKKyAgICAgICAgbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpBcnJheUxl
bmd0aCk7CiAgICAgZWxzZSBpZiAoaXNKU1N0cmluZyhiYXNlVmFsdWUpICYmIHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKQotICAgICAgICBuZXdDYXNlID0gQWNj
ZXNzQ2FzZTo6Z2V0TGVuZ3RoKHZtLCBvd25lciwgQWNjZXNzQ2FzZTo6U3RyaW5nTGVuZ3RoKTsK
KyAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OmdldExlbmd0aCh2bSwgY29kZUJsb2NrLCBB
Y2Nlc3NDYXNlOjpTdHJpbmdMZW5ndGgpOwogICAgIGVsc2UgewogICAgICAgICBpZiAoIXNsb3Qu
aXNDYWNoZWFibGUoKSAmJiAhc2xvdC5pc1Vuc2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gR2l2
ZVVwT25DYWNoZTsKQEAgLTI2Niw3ICsyNjUsNyBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24g
dHJ5Q2FjaGVHZXRCeUlECiAgICAgICAgICAgICAmJiAhbG9hZFRhcmdldEZyb21Qcm94eSkgewog
ICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxm
QWNjZXNzKGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCB0cnVlKTsKLSAgICAgICAgICAgIHN0dWJJbmZv
LmluaXRHZXRCeUlkU2VsZih2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkU2VsZih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgcmV0dXJuIFJldHJ5Q2FjaGVMYXRlcjsKICAgICAgICAgfQogCkBAIC0yNzks
MTAgKzI3OCwxMCBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVHZXRCeUlECiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LmlzVW5zZXQoKSkgewogICAgICAgICAg
ICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygK
LSAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGV4
ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CisgICAgICAgICAgICAgICAgICAg
IHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAgICAgICAgICAgICAg
ICB2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZXhlYywgc3RydWN0dXJlLCBzbG90
LnNsb3RCYXNlKCksCisgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0
cnVjdHVyZSwgc2xvdC5zbG90QmFzZSgpLAogICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU5h
bWUuaW1wbCgpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMzAzLDcgKzMwMiw3
IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZUdldEJ5SUQKICAgICAgICAgICAg
IHR5cGUgPSBBY2Nlc3NDYXNlOjpDdXN0b21HZXR0ZXI7CiAKICAgICAgICAgbmV3Q2FzZSA9IEFj
Y2Vzc0Nhc2U6OmdldCgKLSAgICAgICAgICAgIHZtLCBvd25lciwgdHlwZSwgb2Zmc2V0LCBzdHJ1
Y3R1cmUsIGNvbmRpdGlvblNldCwgbG9hZFRhcmdldEZyb21Qcm94eSwKKyAgICAgICAgICAgIHZt
LCBjb2RlQmxvY2ssIHR5cGUsIG9mZnNldCwgc3RydWN0dXJlLCBjb25kaXRpb25TZXQsIGxvYWRU
YXJnZXRGcm9tUHJveHksCiAgICAgICAgICAgICBzbG90LndhdGNocG9pbnRTZXQoKSwgc2xvdC5p
c0NhY2hlYWJsZUN1c3RvbSgpID8gc2xvdC5jdXN0b21HZXR0ZXIoKSA6IG51bGxwdHIsCiAgICAg
ICAgICAgICBzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgPyBzbG90LnNsb3RCYXNlKCkgOiBudWxs
cHRyKTsKICAgICB9CkBAIC0zNTcsNyArMzU2LDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9u
IHRyeUNhY2hlUHV0QnlJRAogICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsKICAgICAKICAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgIFNjcmlwdEV4
ZWN1dGFibGUqIG93bmVyID0gY29kZUJsb2NrLT5vd25lclNjcmlwdEV4ZWN1dGFibGUoKTsKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogCiAgICAgaWYgKCFiYXNlVmFsdWUuaXNDZWxsKCkpCkBA
IC0zODUsMTEgKzM4MywxMSBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQdXRC
eUlECiAgICAgICAgICAgICAgICAgICAgIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwg
c2xvdC5jYWNoZWRPZmZzZXQoKSwKICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGVPcHRp
bWl6aW5nUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKAotICAgICAgICAgICAgICAgICAgICB2
bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBzbG90LmNhY2hlZE9m
ZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jaywgc3RydWN0dXJlLCBz
bG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gUmV0cnlDYWNoZUxh
dGVyOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6
cmVwbGFjZSh2bSwgb3duZXIsIHN0cnVjdHVyZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6cmVwbGFjZSh2bSwgY29kZUJsb2NrLCBzdHJ1
Y3R1cmUsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgQVNTRVJUKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpOwog
CkBAIC00MTEsMTIgKzQwOSwxMiBAQCBzdGF0aWMgSW5saW5lQ2FjaGVBY3Rpb24gdHJ5Q2FjaGVQ
dXRCeUlECiAgICAgICAgICAgICBpZiAocHV0S2luZCA9PSBOb3REaXJlY3QpIHsKICAgICAgICAg
ICAgICAgICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRp
dGlvbnNGb3JQcm9wZXJ0eVNldHRlck1pc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICB2bSwg
b3duZXIsIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIG5ld1N0cnVjdHVyZSwgaWRlbnQuaW1wbCgp
KTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBuZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgb3duZXIsIHN0cnVj
dHVyZSwgbmV3U3RydWN0dXJlLCBvZmZzZXQsIGNvbmRpdGlvblNldCk7CisgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6dHJhbnNpdGlvbih2bSwgY29kZUJsb2NrLCBzdHJ1Y3R1cmUs
IG5ld1N0cnVjdHVyZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9CiAgICAgfSBl
bHNlIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkgfHwgc2xvdC5pc0NhY2hlYWJsZVNldHRl
cigpKSB7CiAgICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlQ3VzdG9tKCkpIHsKQEAgLTQyNSwx
MyArNDIzLDEzIEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAg
ICAgICAgICAgIGlmIChzbG90LmJhc2UoKSAhPSBiYXNlVmFsdWUpIHsKICAgICAgICAgICAgICAg
ICBjb25kaXRpb25TZXQgPQogICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUNvbmRpdGlvbnNG
b3JQcm90b3R5cGVQcm9wZXJ0eUhpdEN1c3RvbSgKLSAgICAgICAgICAgICAgICAgICAgICAgIHZt
LCBvd25lciwgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2ssIGV4ZWMsIHN0cnVjdHVyZSwgc2xv
dC5iYXNlKCksIGlkZW50LmltcGwoKSk7CiAgICAgICAgICAgICAgICAgaWYgKCFjb25kaXRpb25T
ZXQuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gR2l2ZVVwT25DYWNoZTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbmV3Q2FzZSA9IEFjY2Vzc0Nhc2U6OnNldHRl
cigKLSAgICAgICAgICAgICAgICB2bSwgb3duZXIsIEFjY2Vzc0Nhc2U6OkN1c3RvbVNldHRlciwg
c3RydWN0dXJlLCBpbnZhbGlkT2Zmc2V0LCBjb25kaXRpb25TZXQsCisgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgQWNjZXNzQ2FzZTo6Q3VzdG9tU2V0dGVyLCBzdHJ1Y3R1cmUsIGludmFs
aWRPZmZzZXQsIGNvbmRpdGlvblNldCwKICAgICAgICAgICAgICAgICBzbG90LmN1c3RvbVNldHRl
cigpLCBzbG90LmJhc2UoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBPYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvblNldCBjb25kaXRpb25TZXQ7CkBAIC00NDAsNyArNDM4LDcgQEAgc3Rh
dGljIElubGluZUNhY2hlQWN0aW9uIHRyeUNhY2hlUHV0QnlJRAogICAgICAgICAgICAgaWYgKHNs
b3QuYmFzZSgpICE9IGJhc2VWYWx1ZSkgewogICAgICAgICAgICAgICAgIGNvbmRpdGlvblNldCA9
CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3Bl
cnR5SGl0KAotICAgICAgICAgICAgICAgICAgICAgICAgdm0sIG93bmVyLCBleGVjLCBzdHJ1Y3R1
cmUsIHNsb3QuYmFzZSgpLCBpZGVudC5pbXBsKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jaywgZXhlYywgc3RydWN0dXJlLCBzbG90LmJhc2UoKSwgaWRlbnQuaW1wbCgp
KTsKICAgICAgICAgICAgICAgICBpZiAoIWNvbmRpdGlvblNldC5pc1ZhbGlkKCkpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBHaXZlVXBPbkNhY2hlOwogICAgICAgICAgICAgICAgIG9mZnNl
dCA9IGNvbmRpdGlvblNldC5zbG90QmFzZUNvbmRpdGlvbigpLm9mZnNldCgpOwpAQCAtNDQ4LDcg
KzQ0Niw3IEBAIHN0YXRpYyBJbmxpbmVDYWNoZUFjdGlvbiB0cnlDYWNoZVB1dEJ5SUQKICAgICAg
ICAgICAgICAgICBvZmZzZXQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogCiAgICAgICAgICAgICBu
ZXdDYXNlID0gQWNjZXNzQ2FzZTo6c2V0dGVyKAotICAgICAgICAgICAgICAgIHZtLCBvd25lciwg
QWNjZXNzQ2FzZTo6U2V0dGVyLCBzdHJ1Y3R1cmUsIG9mZnNldCwgY29uZGl0aW9uU2V0KTsKKyAg
ICAgICAgICAgICAgICB2bSwgY29kZUJsb2NrLCBBY2Nlc3NDYXNlOjpTZXR0ZXIsIHN0cnVjdHVy
ZSwgb2Zmc2V0LCBjb25kaXRpb25TZXQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00OTEsNyAr
NDg5LDYgQEAgc3RhdGljIElubGluZUNhY2hlQWN0aW9uIHRyeVJlcGF0Y2hJbigKICAgICB9CiAg
ICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKLSAgICBT
Y3JpcHRFeGVjdXRhYmxlKiBvd25lciA9IGNvZGVCbG9jay0+b3duZXJTY3JpcHRFeGVjdXRhYmxl
KCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGJhc2UtPnN0cnVjdHVyZSh2bSk7CiAgICAgCkBAIC00OTksMTcgKzQ5NiwxNyBAQCBzdGF0aWMg
SW5saW5lQ2FjaGVBY3Rpb24gdHJ5UmVwYXRjaEluKAogICAgIGlmICh3YXNGb3VuZCkgewogICAg
ICAgICBpZiAoc2xvdC5zbG90QmFzZSgpICE9IGJhc2UpIHsKICAgICAgICAgICAgIGNvbmRpdGlv
blNldCA9IGdlbmVyYXRlQ29uZGl0aW9uc0ZvclByb3RvdHlwZVByb3BlcnR5SGl0KAotICAgICAg
ICAgICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgpKTsKKyAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIHNsb3Quc2xvdEJhc2UoKSwgaWRlbnQuaW1wbCgp
KTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbmRpdGlvblNldCA9IGdlbmVy
YXRlQ29uZGl0aW9uc0ZvclByb3BlcnR5TWlzcygKLSAgICAgICAgICAgIHZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CisgICAg
ICAgICAgICB2bSwgY29kZUJsb2NrLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50LmltcGwoKSk7CiAg
ICAgfQogICAgIGlmICghY29uZGl0aW9uU2V0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIEdp
dmVVcE9uQ2FjaGU7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8QWNjZXNzQ2FzZT4gbmV3Q2FzZSA9
IEFjY2Vzc0Nhc2U6OmluKAotICAgICAgICB2bSwgb3duZXIsIHdhc0ZvdW5kID8gQWNjZXNzQ2Fz
ZTo6SW5IaXQgOiBBY2Nlc3NDYXNlOjpJbk1pc3MsIHN0cnVjdHVyZSwgY29uZGl0aW9uU2V0KTsK
KyAgICAgICAgdm0sIGNvZGVCbG9jaywgd2FzRm91bmQgPyBBY2Nlc3NDYXNlOjpJbkhpdCA6IEFj
Y2Vzc0Nhc2U6OkluTWlzcywgc3RydWN0dXJlLCBjb25kaXRpb25TZXQpOwogCiAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIgPSBzdHViSW5mby5hZGRBY2Nlc3NDYXNlKHZtLCBjb2Rl
QmxvY2ssIGlkZW50LCBXVEY6Om1vdmUobmV3Q2FzZSkpOwogICAgIGlmICghY29kZVB0cikKQEAg
LTU1OCw4ICs1NTUsOCBAQCB2b2lkIGxpbmtGb3IoCiAgICAgVk0qIHZtID0gY2FsbGVyQ29kZUJs
b2NrLT52bSgpOwogICAgIAogICAgIEFTU0VSVCghY2FsbExpbmtJbmZvLmlzTGlua2VkKCkpOwot
ICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+dm0oKSwgY2Fs
bExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBjYWxsZWUpOwotICAgIGNhbGxMaW5rSW5mby5zZXRMYXN0U2VlbkNhbGxlZShleGVjLT5j
YWxsZXJGcmFtZSgpLT52bSgpLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBj
YWxsZWUpOworICAgIGNhbGxMaW5rSW5mby5zZXRDYWxsZWUoZXhlYy0+Y2FsbGVyRnJhbWUoKS0+
dm0oKSwgY2FsbExpbmtJbmZvLmhvdFBhdGhCZWdpbigpLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxl
ZSk7CisgICAgY2FsbExpbmtJbmZvLnNldExhc3RTZWVuQ2FsbGVlKGV4ZWMtPmNhbGxlckZyYW1l
KCktPnZtKCksIGNhbGxlckNvZGVCbG9jaywgY2FsbGVlKTsKICAgICBpZiAoc2hvdWxkU2hvd0Rp
c2Fzc2VtYmx5Rm9yKGNhbGxlckNvZGVCbG9jaykpCiAgICAgICAgIGRhdGFMb2coIkxpbmtpbmcg
Y2FsbCBpbiAiLCAqY2FsbGVyQ29kZUJsb2NrLCAiIGF0ICIsIGNhbGxMaW5rSW5mby5jb2RlT3Jp
Z2luKCksICIgdG8gIiwgcG9pbnRlckR1bXAoY2FsbGVlQ29kZUJsb2NrKSwgIiwgZW50cnlwb2lu
dCBhdCAiLCBjb2RlUHRyLCAiXG4iKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwYXRjaE5lYXJD
YWxsKGNhbGxMaW5rSW5mby5ob3RQYXRoT3RoZXIoKSwgQ29kZUxvY2F0aW9uTGFiZWwoY29kZVB0
cikpOwpAQCAtODc2LDcgKzg3Myw3IEBAIHZvaWQgbGlua1BvbHltb3JwaGljQ2FsbCgKICAgICAg
ICAgICAgICgiUG9seW1vcnBoaWMgY2FsbCBzdHViIGZvciAlcywgcmV0dXJuIHBvaW50ICVwLCB0
YXJnZXRzICVzIiwKICAgICAgICAgICAgICAgICB0b0NTdHJpbmcoKmNhbGxlckNvZGVCbG9jayku
ZGF0YSgpLCBjYWxsTGlua0luZm8uY2FsbFJldHVybkxvY2F0aW9uKCkubGFiZWxBdE9mZnNldCgw
KS5leGVjdXRhYmxlQWRkcmVzcygpLAogICAgICAgICAgICAgICAgIHRvQ1N0cmluZyhsaXN0RHVt
cChjYWxsQ2FzZXMpKS5kYXRhKCkpKSwKLSAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBleGVjLT5jYWxsZXJGcmFtZSgpLCBjYWxsTGlua0luZm8sIGNhbGxD
YXNlcywKKyAgICAgICAgKnZtLCBjYWxsZXJDb2RlQmxvY2ssIGV4ZWMtPmNhbGxlckZyYW1lKCks
IGNhbGxMaW5rSW5mbywgY2FsbENhc2VzLAogICAgICAgICBXVEY6Om1vdmUoZmFzdENvdW50cykp
KTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lv
biAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzYsNyArNTc2LDcgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX2dldF9ieV9pZAogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlwZUluZm8oKS5w
cm9oaWJpdHNQcm9wZXJ0eUNhY2hpbmcoKQogICAgICAgICAgICAgJiYgIXN0cnVjdHVyZS0+dHlw
ZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMoKSkgewotICAgICAgICAg
ICAgdm0uaGVhcC53cml0ZUJhcnJpZXIoY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSk7Cisg
ICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2spOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9j
ayk7CiAKQEAgLTY0MSw3ICs2NDEsNyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHV0X2J5X2lkCiAgICAgICAgICAgICAmJiAhc3RydWN0dXJlLT50eXBlSW5mbygpLnByb2hpYml0
c1Byb3BlcnR5Q2FjaGluZygpCiAgICAgICAgICAgICAmJiBiYXNlQ2VsbCA9PSBzbG90LmJhc2Uo
KSkgewogCi0gICAgICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpKTsKKyAgICAgICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKGNvZGVCbG9j
ayk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9w
ZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5KSB7CiAgICAgICAgICAgICAgICAgR0NTYWZlQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2ssIHZtLmhlYXApOwpAQCAtNjU4LDcg
KzY1OCw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4gPSBzdHJ1Y3R1cmUt
PnByb3RvdHlwZUNoYWluKGV4ZWMpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChjaGFpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGNbN10udS5zdHJ1Y3R1cmVD
aGFpbi5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBjaGFpbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLCBjb2RlQmxvY2ssIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIHBjWzhdLnUucHV0QnlJZEZsYWdzID0gc3RhdGljX2Nhc3Q8
UHV0QnlJZEZsYWdzPigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY1s4XS51LnB1dEJ5
SWRGbGFncyB8CkBAIC0xMTkwLDggKzExOTAsOCBAQCBpbmxpbmUgU2xvd1BhdGhSZXR1cm5UeXBl
IHNldFVwQ2FsbChFeGVjCiAgICAgICAgIAogICAgICAgICBpZiAoY2FsbExpbmtJbmZvLT5pc09u
TGlzdCgpKQogICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5yZW1vdmUoKTsKLSAgICAgICAgY2Fs
bExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBjYWxsZWUpOwotICAgICAgICBjYWxsTGlua0luZm8tPmxhc3RTZWVuQ2FsbGVlLnNldCh2
bSwgY2FsbGVyQ29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgY2FsbGVlKTsKKyAgICAgICAg
Y2FsbExpbmtJbmZvLT5jYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlZSk7Cisg
ICAgICAgIGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUuc2V0KHZtLCBjYWxsZXJDb2RlQmxv
Y2ssIGNhbGxlZSk7CiAgICAgICAgIGNhbGxMaW5rSW5mby0+bWFjaGluZUNvZGVUYXJnZXQgPSBj
b2RlUHRyOwogICAgICAgICBpZiAoY29kZUJsb2NrKQogICAgICAgICAgICAgY29kZUJsb2NrLT5s
aW5rSW5jb21pbmdDYWxsKGV4ZWMsIGNhbGxMaW5rSW5mbyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE5
MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSw3ICsyMzEsNyBAQCBTTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfY3JlYXRlX3RoaXMpCiAKICAgICBhdXRvJiBjYWNoZVdyaXRlQmFycmllciA9IHBjWzRd
LnUuanNDZWxsOwogICAgIGlmICghY2FjaGVXcml0ZUJhcnJpZXIpCi0gICAgICAgIGNhY2hlV3Jp
dGVCYXJyaWVyLnNldChleGVjLT52bSgpLCBleGVjLT5jb2RlQmxvY2soKS0+b3duZXJFeGVjdXRh
YmxlKCksIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0KGV4ZWMt
PnZtKCksIGV4ZWMtPmNvZGVCbG9jaygpLCBjb25zdHJ1Y3Rvcik7CiAgICAgZWxzZSBpZiAoY2Fj
aGVXcml0ZUJhcnJpZXIudW52YWxpZGF0ZWRHZXQoKSAhPSBKU0NlbGw6OnNlZW5NdWx0aXBsZUNh
bGxlZU9iamVjdHMoKSAmJiBjYWNoZVdyaXRlQmFycmllci5nZXQoKSAhPSBjb25zdHJ1Y3RvcikK
ICAgICAgICAgY2FjaGVXcml0ZUJhcnJpZXIuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU0NlbGw6
OnNlZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSk7CiAKQEAgLTI1MCw3ICsyNTAsNyBAQCBTTE9X
X1BBVEhfREVDTChzbG93X3BhdGhfdG9fdGhpcykKICAgICAgICAgaWYgKG15U3RydWN0dXJlICE9
IG90aGVyU3RydWN0dXJlKSB7CiAgICAgICAgICAgICBpZiAob3RoZXJTdHJ1Y3R1cmUpCiAgICAg
ICAgICAgICAgICAgcGNbM10udS50b1RoaXNTdGF0dXMgPSBUb1RoaXNDb25mbGljdGVkOwotICAg
ICAgICAgICAgcGNbMl0udS5zdHJ1Y3R1cmUuc2V0KHZtLCBleGVjLT5jb2RlQmxvY2soKS0+b3du
ZXJFeGVjdXRhYmxlKCksIG15U3RydWN0dXJlKTsKKyAgICAgICAgICAgIHBjWzJdLnUuc3RydWN0
dXJlLnNldCh2bSwgZXhlYy0+Y29kZUJsb2NrKCksIG15U3RydWN0dXJlKTsKICAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHBjWzNdLnUudG9UaGlzU3RhdHVzID0gVG9UaGlzQ29uZmxp
Y3RlZDsKQEAgLTUyNiw4ICs1MjYsOCBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG9fcHJp
bWl0aXZlKQogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2VudGVyKQogewogICAgIEJFR0lOKCk7
Ci0gICAgRXhlY3V0YWJsZUJhc2UqIG93bmVyRXhlY3V0YWJsZSA9IGV4ZWMtPmNvZGVCbG9jaygp
LT5vd25lckV4ZWN1dGFibGUoKTsKLSAgICBIZWFwOjpoZWFwKG93bmVyRXhlY3V0YWJsZSktPndy
aXRlQmFycmllcihvd25lckV4ZWN1dGFibGUpOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
ZXhlYy0+Y29kZUJsb2NrKCk7CisgICAgSGVhcDo6aGVhcChjb2RlQmxvY2spLT53cml0ZUJhcnJp
ZXIoY29kZUJsb2NrKTsKICAgICBFTkQoKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE5MDQzOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjksNyArMTI5LDcgQEAgaW5saW5lIHZvaWQgdHJ5Q2FjaGVQdXRUb1Njb3Bl
R2xvYmFsKAogICAgICAgICBzY29wZS0+c3RydWN0dXJlKCktPmRpZENhY2hlUHJvcGVydHlSZXBs
YWNlbWVudChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKIAogICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgIHBjWzVd
LnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzY29wZS0+c3RydWN0dXJlKCkpOworICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgY29kZUJsb2NrLCBzY29wZS0+c3RydWN0dXJlKCkpOwogICAgICAgICBwY1s2XS51
Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOwogICAgIH0KIH0KQEAgLTE2Miw3ICsxNjIs
NyBAQCBpbmxpbmUgdm9pZCB0cnlDYWNoZUdldEZyb21TY29wZUdsb2JhbCgKICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52
bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2ssIHN0cnVj
dHVyZSk7CiAgICAgICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZz
ZXQoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lv
biAxOTA0MzgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsNDUgQEAgdm9pZCBFeGVjdXRhYmxlQmFzZTo6
Y2xlYXJDb2RlKCkKICNlbmRpZgogICAgIG1fbnVtUGFyYW1ldGVyc0ZvckNhbGwgPSBOVU1fUEFS
QU1FVEVSU19OT1RfQ09NUElMRUQ7CiAgICAgbV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0ID0g
TlVNX1BBUkFNRVRFUlNfTk9UX0NPTVBJTEVEOworCisgICAgaWYgKGNsYXNzSW5mbygpID09IEZ1
bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKKyAgICAgICAg
ZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7CisgICAgICAgIGV4ZWN1dGFi
bGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LmNsZWFyKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gRXZhbEV4ZWN1dGFibGU6OmluZm8oKSkgewor
ICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxFdmFsRXhlY3V0YWJs
ZSo+KHRoaXMpOworICAgICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2suY2xlYXIoKTsK
KyAgICAgICAgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2suY2xlYXIoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoY2xhc3NJbmZvKCkgPT0gUHJvZ3Jh
bUV4ZWN1dGFibGU6OmluZm8oKSkgeworICAgICAgICBQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOworICAgICAgICBleGVjdXRh
YmxlLT5tX3Byb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV91
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChjbGFzc0luZm8oKSA9PSBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZTo6aW5mbygp
KSB7CisgICAgICAgIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNDYXN0
PE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKj4odGhpcyk7CisgICAgICAgIGV4ZWN1dGFibGUtPm1f
bW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAgICBleGVjdXRhYmxlLT5tX3Vu
bGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5jbGVhcigpOworICAgICAgICBleGVjdXRhYmxl
LT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUuY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkpCisgICAgaWYgKGNsYXNzSW5m
bygpID09IFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6aW5mbygpKSB7CisgICAgICAgIFdlYkFzc2Vt
Ymx5RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxXZWJBc3NlbWJseUV4ZWN1dGFibGUq
Pih0aGlzKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9jb2RlQmxvY2tGb3JDYWxsLmNsZWFyKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworICAgIEFTU0VSVChjbGFzc0luZm8o
KSA9PSBOYXRpdmVFeGVjdXRhYmxlOjppbmZvKCkpOwogfQogCiAjaWYgRU5BQkxFKERGR19KSVQp
CkBAIC0xMjMsNyArMTYyLDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShW
TSYgdgogewogICAgIEFTU0VSVCh2bS5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgCi0gICAgUmVm
UHRyPENvZGVCbG9jaz4gb2xkQ29kZUJsb2NrOworICAgIENvZGVCbG9jayogb2xkQ29kZUJsb2Nr
ID0gbnVsbHB0cjsKICAgICAKICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7CiAgICAgY2FzZSBHbG9i
YWxDb2RlOiB7CkBAIC0xMzIsOCArMTcxLDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0
YWxsQ29kZShWTSYgdgogICAgICAgICAKICAgICAgICAgQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNh
bGwpOwogICAgICAgICAKLSAgICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9wcm9n
cmFtQ29kZUJsb2NrOwotICAgICAgICBleGVjdXRhYmxlLT5tX3Byb2dyYW1Db2RlQmxvY2sgPSBj
b2RlQmxvY2s7CisgICAgICAgIG9sZENvZGVCbG9jayA9IGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNv
ZGVCbG9jay5nZXQoKTsKKyAgICAgICAgZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrLnNl
dE1heUJlTnVsbCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkBAIC0xNDMsOCArMTgyLDggQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShW
TSYgdgogCiAgICAgICAgIEFTU0VSVChraW5kID09IENvZGVGb3JDYWxsKTsKIAotICAgICAgICBv
bGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2s7Ci0gICAg
ICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAg
ICAgICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2Nr
LmdldCgpOworICAgICAgICBleGVjdXRhYmxlLT5tX21vZHVsZVByb2dyYW1Db2RlQmxvY2suc2V0
TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgICAgICBicmVhazsKICAgICB9CiAK
QEAgLTE1NCw4ICsxOTMsOCBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKFZN
JiB2CiAgICAgICAgIAogICAgICAgICBBU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAg
ICAgIAotICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2s7
Ci0gICAgICAgIGV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayA9IGNvZGVCbG9jazsKKyAgICAg
ICAgb2xkQ29kZUJsb2NrID0gZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLmdldCgpOworICAg
ICAgICBleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2suc2V0TWF5QmVOdWxsKHZtLCB0aGlzLCBj
b2RlQmxvY2spOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMTY1LDEyICsy
MDQsMTIgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShWTSYgdgogICAgICAg
ICAKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgQ29kZUZvckNhbGw6Ci0g
ICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGw7
Ci0gICAgICAgICAgICBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwgPSBjb2RlQmxvY2s7
CisgICAgICAgICAgICBvbGRDb2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNh
bGwuZ2V0KCk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNhbGwuc2V0
TWF5QmVOdWxsKHZtLCB0aGlzLCBjb2RlQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKLSAgICAgICAgICAgIG9sZENvZGVCbG9jayA9IGV4
ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwotICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QgPSBjb2RlQmxvY2s7CisgICAgICAgICAgICBvbGRD
b2RlQmxvY2sgPSBleGVjdXRhYmxlLT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC5nZXQoKTsKKyAg
ICAgICAgICAgIGV4ZWN1dGFibGUtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LnNldE1heUJlTnVs
bCh2bSwgdGhpcywgY29kZUJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwpAQCAtMjEwLDcgKzI0OSw3IEBAIHZvaWQgU2NyaXB0RXhlY3V0YWJsZTo6
aW5zdGFsbENvZGUoVk0mIHYKICAgICB2bS5oZWFwLndyaXRlQmFycmllcih0aGlzKTsKIH0KIAot
UmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAorQ29k
ZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tGb3IoCiAgICAgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUs
IEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIFZNKiB2bSA9IHNjb3BlLT52bSgpOwpAQCAt
MjI0LDkgKzI2Myw5IEBAIFJlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld0MK
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoa2luZCA9PSBDb2RlRm9yQ2FsbCk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFleGVjdXRhYmxlLT5tX2V2YWxDb2RlQmxvY2spOwogICAgICAgICBSRUxF
QVNFX0FTU0VSVCghZnVuY3Rpb24pOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV2YWxD
b2RlQmxvY2soCisgICAgICAgIHJldHVybiBFdmFsQ29kZUJsb2NrOjpjcmVhdGUodm0sCiAgICAg
ICAgICAgICBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5tX3VubGlua2VkRXZhbENvZGVCbG9jay5n
ZXQoKSwgc2NvcGUsCi0gICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigp
KSk7CisgICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGNsYXNzSW5mbygpID09IFByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkp
IHsKQEAgLTIzNCw5ICsyNzMsOSBAQCBSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxl
OjpuZXdDCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrKTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBQcm9ncmFtQ29kZUJsb2NrKAorICAgICAgICByZXR1cm4gUHJvZ3JhbUNvZGVCbG9jazo6
Y3JlYXRlKHZtLAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAgICAgICAgZXhlY3V0YWJsZS0+
c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSkp
OworICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJs
ZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSk7CiAgICAgfQogCiAgICAgaWYgKGNsYXNzSW5mbygp
ID09IE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlOjppbmZvKCkpIHsKQEAgLTI0NCw5ICsyODMsOSBA
QCBSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDCiAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKGtpbmQgPT0gQ29kZUZvckNhbGwpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVCgh
ZXhlY3V0YWJsZS0+bV9tb2R1bGVQcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoIWZ1bmN0aW9uKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2R1bGVQcm9n
cmFtQ29kZUJsb2NrKAorICAgICAgICByZXR1cm4gTW9kdWxlUHJvZ3JhbUNvZGVCbG9jazo6Y3Jl
YXRlKHZtLAogICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZE1v
ZHVsZVByb2dyYW1Db2RlQmxvY2suZ2V0KCksIHNjb3BlLAotICAgICAgICAgICAgZXhlY3V0YWJs
ZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4o
KSkpOworICAgICAgICAgICAgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXhlY3V0
YWJsZS0+c291cmNlKCkuc3RhcnRDb2x1bW4oKSk7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NF
UlQoY2xhc3NJbmZvKCkgPT0gRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpOwpAQCAtMjc2LDEx
ICszMTUsMTEgQEAgUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3QwogICAg
IHVuc2lnbmVkIHNvdXJjZU9mZnNldCA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0T2Zmc2V0
KCk7CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFy
dENvbHVtbigpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jaygK
LSAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92aWRlciwg
c291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOworICAgIHJldHVybiBGdW5jdGlvbkNvZGVCbG9j
azo6Y3JlYXRlKHZtLAorICAgICAgICBleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgc2Nv
cGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKTsKIH0KIAotUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6Om5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9y
KAorQ29kZUJsb2NrKiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9ja0Zv
cigKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgaWYgKGNsYXNzSW5m
bygpID09IEV2YWxFeGVjdXRhYmxlOjppbmZvKCkpIHsKQEAgLTI4OCw5ICszMjcsOSBAQCBQYXNz
UmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgICAgIEV2YWxFeGVjdXRh
YmxlKiBleGVjdXRhYmxlID0ganNDYXN0PEV2YWxFeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgICAg
IEV2YWxDb2RlQmxvY2sqIGJhc2VsaW5lID0gc3RhdGljX2Nhc3Q8RXZhbENvZGVCbG9jayo+KAog
ICAgICAgICAgICAgZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24o
KSk7Ci0gICAgICAgIFJlZlB0cjxFdmFsQ29kZUJsb2NrPiByZXN1bHQgPSBhZG9wdFJlZihuZXcg
RXZhbENvZGVCbG9jaygKLSAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNlZEJsb2NrLCAq
YmFzZWxpbmUpKTsKLSAgICAgICAgcmVzdWx0LT5zZXRBbHRlcm5hdGl2ZShiYXNlbGluZSk7Cisg
ICAgICAgIEV2YWxDb2RlQmxvY2sqIHJlc3VsdCA9IEV2YWxDb2RlQmxvY2s6OmNyZWF0ZSh2bSgp
LAorICAgICAgICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSk7Cisg
ICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUoKnZtKCksIGJhc2VsaW5lKTsKICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCkBAIC0yOTksOSArMzM4LDkgQEAgUGFzc1JlZlB0
cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICBQcm9ncmFtRXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAg
ICBQcm9ncmFtQ29kZUJsb2NrKiBiYXNlbGluZSA9IHN0YXRpY19jYXN0PFByb2dyYW1Db2RlQmxv
Y2sqPigKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jay0+YmFzZWxp
bmVWZXJzaW9uKCkpOwotICAgICAgICBSZWZQdHI8UHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0ID0g
YWRvcHRSZWYobmV3IFByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAgICBDb2RlQmxvY2s6OkNv
cHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRp
dmUoYmFzZWxpbmUpOworICAgICAgICBQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQgPSBQcm9ncmFt
Q29kZUJsb2NrOjpjcmVhdGUodm0oKSwKKyAgICAgICAgICAgIENvZGVCbG9jazo6Q29weVBhcnNl
ZEJsb2NrLCAqYmFzZWxpbmUpOworICAgICAgICByZXN1bHQtPnNldEFsdGVybmF0aXZlKCp2bSgp
LCBiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCkBAIC0zMTAsOSAr
MzQ5LDkgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAg
ICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBi
YXNlbGluZSA9IHN0YXRpY19jYXN0PE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqPigKICAgICAgICAg
ICAgIGV4ZWN1dGFibGUtPm1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9u
KCkpOwotICAgICAgICBSZWZQdHI8TW9kdWxlUHJvZ3JhbUNvZGVCbG9jaz4gcmVzdWx0ID0gYWRv
cHRSZWYobmV3IE1vZHVsZVByb2dyYW1Db2RlQmxvY2soCi0gICAgICAgICAgICBDb2RlQmxvY2s6
OkNvcHlQYXJzZWRCbG9jaywgKmJhc2VsaW5lKSk7Ci0gICAgICAgIHJlc3VsdC0+c2V0QWx0ZXJu
YXRpdmUoYmFzZWxpbmUpOworICAgICAgICBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrKiByZXN1bHQg
PSBNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGUodm0oKSwKKyAgICAgICAgICAgIENvZGVC
bG9jazo6Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgICAgICByZXN1bHQtPnNldEFs
dGVybmF0aXZlKCp2bSgpLCBiYXNlbGluZSk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAg
fQogCkBAIC0zMjAsOSArMzU5LDkgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1
dGFibGU6OgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPih0aGlzKTsKICAgICBGdW5jdGlvbkNvZGVCbG9jayogYmFzZWxpbmUg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkNvZGVCbG9jayo+KAogICAgICAgICBleGVjdXRhYmxlLT5j
b2RlQmxvY2tGb3Ioa2luZCktPmJhc2VsaW5lVmVyc2lvbigpKTsKLSAgICBSZWZQdHI8RnVuY3Rp
b25Db2RlQmxvY2s+IHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jaygKLSAg
ICAgICAgQ29kZUJsb2NrOjpDb3B5UGFyc2VkQmxvY2ssICpiYXNlbGluZSkpOwotICAgIHJlc3Vs
dC0+c2V0QWx0ZXJuYXRpdmUoYmFzZWxpbmUpOworICAgIEZ1bmN0aW9uQ29kZUJsb2NrKiByZXN1
bHQgPSBGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKHZtKCksCisgICAgICAgIENvZGVCbG9jazo6
Q29weVBhcnNlZEJsb2NrLCAqYmFzZWxpbmUpOworICAgIHJlc3VsdC0+c2V0QWx0ZXJuYXRpdmUo
KnZtKCksIGJhc2VsaW5lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zNTAsNyArMzg5
LDcgQEAgSlNPYmplY3QqIFNjcmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeAogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKICAgICBKU09iamVjdCogZXhjZXB0aW9uID0gMDsK
LSAgICBSZWZQdHI8Q29kZUJsb2NrPiBjb2RlQmxvY2sgPSBuZXdDb2RlQmxvY2tGb3Ioa2luZCwg
ZnVuY3Rpb24sIHNjb3BlLCBleGNlcHRpb24pOworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bmV3Q29kZUJsb2NrRm9yKGtpbmQsIGZ1bmN0aW9uLCBzY29wZSwgZXhjZXB0aW9uKTsKICAgICBp
ZiAoIWNvZGVCbG9jaykgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChleGNlcHRpb24pOwogICAg
ICAgICByZXR1cm4gZXhjZXB0aW9uOwpAQCAtMzYwLDExICszOTksMTEgQEAgSlNPYmplY3QqIFNj
cmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeAogICAgICAgICBjb2RlQmxvY2stPnZhbGlkYXRl
KCk7CiAgICAgCiAgICAgaWYgKE9wdGlvbnM6OnVzZUxMSW50KCkpCi0gICAgICAgIHNldHVwTExJ
bnQodm0sIGNvZGVCbG9jay5nZXQoKSk7CisgICAgICAgIHNldHVwTExJbnQodm0sIGNvZGVCbG9j
ayk7CiAgICAgZWxzZQotICAgICAgICBzZXR1cEpJVCh2bSwgY29kZUJsb2NrLmdldCgpKTsKKyAg
ICAgICAgc2V0dXBKSVQodm0sIGNvZGVCbG9jayk7CiAgICAgCi0gICAgaW5zdGFsbENvZGUoKmNv
ZGVCbG9jay0+dm0oKSwgY29kZUJsb2NrLmdldCgpLCBjb2RlQmxvY2stPmNvZGVUeXBlKCksIGNv
ZGVCbG9jay0+c3BlY2lhbGl6YXRpb25LaW5kKCkpOworICAgIGluc3RhbGxDb2RlKCpjb2RlQmxv
Y2stPnZtKCksIGNvZGVCbG9jaywgY29kZUJsb2NrLT5jb2RlVHlwZSgpLCBjb2RlQmxvY2stPnNw
ZWNpYWxpemF0aW9uS2luZCgpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNTAyLDE2ICs1NDEs
OSBAQCB2b2lkIEV2YWxFeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsCiAgICAgRXZhbEV4
ZWN1dGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKTsKICAg
ICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7CiAgICAgU2Ny
aXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLSAgICBp
ZiAodGhpc09iamVjdC0+bV9ldmFsQ29kZUJsb2NrKQotICAgICAgICB0aGlzT2JqZWN0LT5tX2V2
YWxDb2RlQmxvY2stPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3VubGlua2VkRXZhbENvZGVCbG9jayk7Ci19Ci0KLXZvaWQgRXZhbEV4
ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAgbV9ldmFsQ29kZUJsb2NrID0gbnVsbHB0cjsK
LSAgICBtX3VubGlua2VkRXZhbENvZGVCbG9jay5jbGVhcigpOwotICAgIEJhc2U6OmNsZWFyQ29k
ZSgpOworICAgIGlmICh0aGlzT2JqZWN0LT5tX2V2YWxDb2RlQmxvY2spCisgICAgICAgIHRoaXNP
YmplY3QtPm1fZXZhbENvZGVCbG9jay0+dmlzaXRXZWFrbHkodmlzaXRvcik7CiB9CiAKIEpTT2Jq
ZWN0KiBQcm9ncmFtRXhlY3V0YWJsZTo6Y2hlY2tTeW50YXgoRXhlY1N0YXRlKiBleGVjKQpAQCAt
NjE4LDE0ICs2NTAsNyBAQCB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
CiAgICAgU2NyaXB0RXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2spOwogICAgIGlmICh0aGlzT2JqZWN0LT5tX3Byb2dyYW1Db2RlQmxvY2spCi0gICAgICAg
IHRoaXNPYmplY3QtPm1fcHJvZ3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7
Ci19Ci0KLXZvaWQgUHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAgbV9wcm9n
cmFtQ29kZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5j
bGVhcigpOwotICAgIEJhc2U6OmNsZWFyQ29kZSgpOworICAgICAgICB0aGlzT2JqZWN0LT5tX3By
b2dyYW1Db2RlQmxvY2stPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogfQogCiB2b2lkIE1vZHVsZVBy
b2dyYW1FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCkBAIC02MzYsMTUgKzY2MSw3IEBAIHZvaWQgTW9kdWxlUHJvZ3JhbUV4ZWN1dGFi
bGU6OnZpc2l0Q2hpbGQKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX21vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUpOwogICAgIGlmICh0aGlzT2JqZWN0LT5t
X21vZHVsZVByb2dyYW1Db2RlQmxvY2spCi0gICAgICAgIHRoaXNPYmplY3QtPm1fbW9kdWxlUHJv
Z3JhbUNvZGVCbG9jay0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7Ci19Ci0KLXZvaWQgTW9kdWxl
UHJvZ3JhbUV4ZWN1dGFibGU6OmNsZWFyQ29kZSgpCi17Ci0gICAgbV9tb2R1bGVQcm9ncmFtQ29k
ZUJsb2NrID0gbnVsbHB0cjsKLSAgICBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5j
bGVhcigpOwotICAgIG1fbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZS5jbGVhcigpOwotICAg
IEJhc2U6OmNsZWFyQ29kZSgpOworICAgICAgICB0aGlzT2JqZWN0LT5tX21vZHVsZVByb2dyYW1D
b2RlQmxvY2stPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogfQogCiBGdW5jdGlvbkNvZGVCbG9jayog
RnVuY3Rpb25FeGVjdXRhYmxlOjpiYXNlbGluZUNvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIGtpbmQpCkBAIC02NjcsMjAgKzY4NCwxMyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJs
ZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwogICAgIFNjcmlwdEV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbCkK
LSAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdFdl
YWtseSh2aXNpdG9yKTsKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QpCi0gICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFn
Z3JlZ2F0ZSh2aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3QtPnZpc2l0V2Vha2x5KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3VubGlua2VkRXhlY3V0YWJsZSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fc2luZ2xldG9uRnVuY3Rpb24pOwogfQogCi12b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6
Y2xlYXJDb2RlKCkKLXsKLSAgICBtX2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOwotICAgIG1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0ID0gbnVsbHB0cjsKLSAgICBCYXNlOjpjbGVhckNvZGUoKTsK
LX0KLQogRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OmZyb21HbG9iYWxD
b2RlKAogICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEV4ZWNTdGF0ZSYgZXhlYywgY29uc3Qg
U291cmNlQ29kZSYgc291cmNlLCAKICAgICBKU09iamVjdComIGV4Y2VwdGlvbiwgaW50IG92ZXJy
aWRlTGluZU51bWJlcikKQEAgLTcxNiwxNiArNzI2LDEwIEBAIHZvaWQgV2ViQXNzZW1ibHlFeGVj
dXRhYmxlOjp2aXNpdENoaWxkcmUKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgRXhlY3V0YWJsZUJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09i
amVjdCwgdmlzaXRvcik7CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ2FsbCkK
LSAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdEFnZ3JlZ2F0ZSh2
aXNpdG9yKTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDYWxsLT52aXNpdFdl
YWtseSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9tb2R1bGUp
OwogfQogCi12b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6Y2xlYXJDb2RlKCkKLXsKLSAgICBt
X2NvZGVCbG9ja0ZvckNhbGwgPSBudWxscHRyOwotICAgIEJhc2U6OmNsZWFyQ29kZSgpOwotfQot
CiB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgaWYgKGhhc0pJVENvZGVGb3JDYWxsKCkpCkBAIC03MzQsMTYgKzcz
OCwxNiBAQCB2b2lkIFdlYkFzc2VtYmx5RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4CiAgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAKLSAgICBS
ZWZQdHI8V2ViQXNzZW1ibHlDb2RlQmxvY2s+IGNvZGVCbG9jayA9IGFkb3B0UmVmKG5ldyBXZWJB
c3NlbWJseUNvZGVCbG9jaygKLSAgICAgICAgdGhpcywgdm0sIGV4ZWMtPmxleGljYWxHbG9iYWxP
YmplY3QoKSkpOworICAgIFdlYkFzc2VtYmx5Q29kZUJsb2NrKiBjb2RlQmxvY2sgPSBXZWJBc3Nl
bWJseUNvZGVCbG9jazo6Y3JlYXRlKHZtLAorICAgICAgICB0aGlzLCBleGVjLT5sZXhpY2FsR2xv
YmFsT2JqZWN0KCkpKTsKIAotICAgIFdBU01GdW5jdGlvblBhcnNlcjo6Y29tcGlsZSh2bSwgY29k
ZUJsb2NrLmdldCgpLCBtX21vZHVsZS5nZXQoKSwgbV9zb3VyY2UsIG1fZnVuY3Rpb25JbmRleCk7
CisgICAgV0FTTUZ1bmN0aW9uUGFyc2VyOjpjb21waWxlKHZtLCBjb2RlQmxvY2ssIG1fbW9kdWxl
LmdldCgpLCBtX3NvdXJjZSwgbV9mdW5jdGlvbkluZGV4KTsKIAogICAgIG1faml0Q29kZUZvckNh
bGwgPSBjb2RlQmxvY2stPmppdENvZGUoKTsKICAgICBtX2ppdENvZGVGb3JDYWxsV2l0aEFyaXR5
Q2hlY2sgPSBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKICAgICBtX251bVBhcmFtZXRlcnNGb3JD
YWxsID0gY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7CiAKLSAgICBtX2NvZGVCbG9ja0ZvckNh
bGwgPSBjb2RlQmxvY2s7CisgICAgbV9jb2RlQmxvY2tGb3JDYWxsLnNldCh2bSwgdGhpcywgY29k
ZUJsb2NrKTsKIAogICAgIEhlYXA6OmhlYXAodGhpcyktPndyaXRlQmFycmllcih0aGlzKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlz
aW9uIDE5MDQzOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDggKzEzOSw2IEBAIHByb3RlY3RlZDoKICAgICBpbnQg
bV9udW1QYXJhbWV0ZXJzRm9yQ29uc3RydWN0OwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSopOwotCiAgICAgUGFzc1JlZlB0cjxKSVRD
b2RlPiBnZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpCiAgICAgewogICAgICAgICBBU1NFUlQobV9q
aXRDb2RlRm9yQ2FsbCk7CkBAIC0zMDYsNiArMzA0LDggQEAgcHJvdGVjdGVkOgogICAgIH0KIAog
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CisKICAgICBOYXRpdmVF
eGVjdXRhYmxlKFZNJiB2bSwgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE5hdGl2ZUZ1bmN0aW9u
IGNvbnN0cnVjdG9yKQogICAgICAgICA6IEV4ZWN1dGFibGVCYXNlKHZtLCB2bS5uYXRpdmVFeGVj
dXRhYmxlU3RydWN0dXJlLmdldCgpLCBOVU1fUEFSQU1FVEVSU19JU19IT1NUKQogICAgICAgICAs
IG1fZnVuY3Rpb24oZnVuY3Rpb24pCkBAIC0zNzYsOCArMzc2LDggQEAgcHVibGljOgogCiAgICAg
dm9pZCBpbnN0YWxsQ29kZShDb2RlQmxvY2sqKTsKICAgICB2b2lkIGluc3RhbGxDb2RlKFZNJiwg
Q29kZUJsb2NrKiwgQ29kZVR5cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIFJlZlB0
cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCBKU0Z1
bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKLSAgICBQYXNzUmVmUHRy
PENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9u
S2luZCk7CisgICAgQ29kZUJsb2NrKiBuZXdDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9u
S2luZCwgSlNGdW5jdGlvbiosIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2VwdGlvbik7CisgICAg
Q29kZUJsb2NrKiBuZXdSZXBsYWNlbWVudENvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kKTsKICAgICAKICAgICBKU09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbihFeGVjU3RhdGUq
IGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogICAgIHsKQEAgLTM4OSw2ICszODksNyBAQCBwdWJsaWM6CiAgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9jayhGdW5jdG9y
JiYpOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKICAgICBK
U09iamVjdCogcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbios
IEpTU2NvcGUqLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKIAogcHJvdGVjdGVkOgpAQCAtNDQ3
LDIwICs0NDgsMTkgQEAgcHVibGljOgogICAgICAgICAKICAgICBERUNMQVJFX0lORk87CiAKLSAg
ICB2b2lkIGNsZWFyQ29kZSgpOwotCiAgICAgRXhlY3V0YWJsZUluZm8gZXhlY3V0YWJsZUluZm8o
KSBjb25zdCB7IHJldHVybiBFeGVjdXRhYmxlSW5mbyhuZWVkc0FjdGl2YXRpb24oKSwgdXNlc0V2
YWwoKSwgaXNTdHJpY3RNb2RlKCksIGZhbHNlLCBmYWxzZSwgQ29uc3RydWN0b3JLaW5kOjpOb25l
LCBmYWxzZSk7IH0KIAogICAgIHVuc2lnbmVkIG51bVZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdW5s
aW5rZWRFdmFsQ29kZUJsb2NrLT5udW1WYXJpYWJsZXMoKTsgfQogICAgIHVuc2lnbmVkIG51bWJl
ck9mRnVuY3Rpb25EZWNscygpIHsgcmV0dXJuIG1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLT5udW1i
ZXJPZkZ1bmN0aW9uRGVjbHMoKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFeGVj
dXRhYmxlQmFzZTsKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKICAgICBFdmFs
RXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCk7CiAKICAgICBz
dGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKLSAgICBS
ZWZQdHI8RXZhbENvZGVCbG9jaz4gbV9ldmFsQ29kZUJsb2NrOworICAgIFdyaXRlQmFycmllcjxF
dmFsQ29kZUJsb2NrPiBtX2V2YWxDb2RlQmxvY2s7CiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2Vk
RXZhbENvZGVCbG9jaz4gbV91bmxpbmtlZEV2YWxDb2RlQmxvY2s7CiB9OwogCkBAIC01MDEsMTEg
KzUwMSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHZv
aWQgY2xlYXJDb2RlKCk7Ci0KICAgICBFeGVjdXRhYmxlSW5mbyBleGVjdXRhYmxlSW5mbygpIGNv
bnN0IHsgcmV0dXJuIEV4ZWN1dGFibGVJbmZvKG5lZWRzQWN0aXZhdGlvbigpLCB1c2VzRXZhbCgp
LCBpc1N0cmljdE1vZGUoKSwgZmFsc2UsIGZhbHNlLCBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsIGZh
bHNlKTsgfQogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBFeGVjdXRhYmxlQmFzZTsKICAg
ICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKIAogICAgIFByb2dyYW1FeGVjdXRhYmxl
KEV4ZWNTdGF0ZSosIGNvbnN0IFNvdXJjZUNvZGUmKTsKQEAgLTUxMyw3ICs1MTIsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3Im
KTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5r
ZWRQcm9ncmFtQ29kZUJsb2NrOwotICAgIFJlZlB0cjxQcm9ncmFtQ29kZUJsb2NrPiBtX3Byb2dy
YW1Db2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPFByb2dyYW1Db2RlQmxvY2s+IG1fcHJvZ3Jh
bUNvZGVCbG9jazsKIH07CiAKIGNsYXNzIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlIGZpbmFsIDog
cHVibGljIFNjcmlwdEV4ZWN1dGFibGUgewpAQCAtNTQzLDE0ICs1NDIsMTMgQEAgcHVibGljOgog
CiAgICAgREVDTEFSRV9JTkZPOwogCi0gICAgdm9pZCBjbGVhckNvZGUoKTsKLQogICAgIEV4ZWN1
dGFibGVJbmZvIGV4ZWN1dGFibGVJbmZvKCkgY29uc3QgeyByZXR1cm4gRXhlY3V0YWJsZUluZm8o
bmVlZHNBY3RpdmF0aW9uKCksIHVzZXNFdmFsKCksIGlzU3RyaWN0TW9kZSgpLCBmYWxzZSwgZmFs
c2UsIENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgZmFsc2UpOyB9CiAgICAgVW5saW5rZWRNb2R1bGVQ
cm9ncmFtQ29kZUJsb2NrKiB1bmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2soKSB7IHJldHVy
biBtX3VubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jay5nZXQoKTsgfQogCiAgICAgU3ltYm9s
VGFibGUqIG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUoKSB7IHJldHVybiBtX21vZHVsZUVu
dmlyb25tZW50U3ltYm9sVGFibGUuZ2V0KCk7IH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CiAK
ICAgICBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2Rl
Jik7CkBAIC01NTksNyArNTU3LDcgQEAgcHJpdmF0ZToKIAogICAgIFdyaXRlQmFycmllcjxVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+IG1fdW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJs
b2NrOwogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9tb2R1bGVFbnZpcm9ubWVudFN5
bWJvbFRhYmxlOwotICAgIFJlZlB0cjxNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPiBtX21vZHVsZVBy
b2dyYW1Db2RlQmxvY2s7CisgICAgV3JpdGVCYXJyaWVyPE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+
IG1fbW9kdWxlUHJvZ3JhbUNvZGVCbG9jazsKIH07CiAKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJs
ZSBmaW5hbCA6IHB1YmxpYyBTY3JpcHRFeGVjdXRhYmxlIHsKQEAgLTYwMCw3ICs1OTgsNyBAQCBw
dWJsaWM6CiAgICAgICAgIAogICAgIGJvb2wgaXNHZW5lcmF0ZWRGb3JDYWxsKCkgY29uc3QKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNhbGw7CisgICAgICAgIHJldHVybiAh
IW1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICB9CiAKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29k
ZUJsb2NrRm9yQ2FsbCgpCkBAIC02MTAsNyArNjA4LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c0dlbmVyYXRlZEZvckNvbnN0cnVjdCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV9j
b2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9ja0ZvckNvbnN0
cnVjdC5nZXQoKTsKICAgICB9CiAKICAgICBGdW5jdGlvbkNvZGVCbG9jayogY29kZUJsb2NrRm9y
Q29uc3RydWN0KCkKQEAgLTY3NiwxMSArNjc0LDEwIEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVf
SU5GTzsKIAotICAgIHZvaWQgY2xlYXJDb2RlKCk7Ci0gICAgCiAgICAgSW5mZXJyZWRWYWx1ZSog
c2luZ2xldG9uRnVuY3Rpb24oKSB7IHJldHVybiBtX3NpbmdsZXRvbkZ1bmN0aW9uLmdldCgpOyB9
CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEV4ZWN1dGFibGVCYXNlOwogICAgIEZ1bmN0
aW9uRXhlY3V0YWJsZSgKICAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRG
dW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIAogICAgICAgICB1bnNpZ25l
ZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbik7CkBA
IC02OTAsOCArNjg3LDggQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0
YWJsZTsKICAgICAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+
IG1fdW5saW5rZWRFeGVjdXRhYmxlOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9j
b2RlQmxvY2tGb3JDYWxsOwotICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3Q7CisgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2Nv
ZGVCbG9ja0ZvckNhbGw7CisgICAgV3JpdGVCYXJyaWVyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1cm5TdGF0ZW1l
bnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OwogICAgIFdy
aXRlQmFycmllcjxJbmZlcnJlZFZhbHVlPiBtX3NpbmdsZXRvbkZ1bmN0aW9uOwpAQCAtNzE5LDgg
KzcxNiw2IEBAIHB1YmxpYzoKIAogICAgIERFQ0xBUkVfSU5GTzsKIAotICAgIHZvaWQgY2xlYXJD
b2RlKCk7Ci0KICAgICB2b2lkIHByZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKik7CiAKICAg
ICBXZWJBc3NlbWJseUNvZGVCbG9jayogY29kZUJsb2NrRm9yQ2FsbCgpCkBAIC03MjksNiArNzI0
LDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgRXhlY3V0
YWJsZUJhc2U7CiAgICAgV2ViQXNzZW1ibHlFeGVjdXRhYmxlKFZNJiwgY29uc3QgU291cmNlQ29k
ZSYsIEpTV0FTTU1vZHVsZSosIHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXgpOwogCiAgICAgc3RhdGlj
IHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwpAQCAtNzM3LDMwICs3
MzMsMTAgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8SlNXQVNNTW9kdWxlPiBtX21vZHVs
ZTsKICAgICB1bnNpZ25lZCBtX2Z1bmN0aW9uSW5kZXg7CiAKLSAgICBSZWZQdHI8V2ViQXNzZW1i
bHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKKyAgICBXcml0ZUJhcnJpZXI8V2ViQXNz
ZW1ibHlDb2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKIH07CiAjZW5kaWYKIAotaW5saW5l
IHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4
ZWN1dGFibGUpCi17Ci0gICAgc3dpdGNoIChleGVjdXRhYmxlLT50eXBlKCkpIHsKLSAgICBjYXNl
IEV2YWxFeGVjdXRhYmxlVHlwZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxFdmFsRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5jbGVhckNvZGUoKTsKLSAgICBjYXNlIFByb2dyYW1FeGVjdXRhYmxl
VHlwZToKLSAgICAgICAgcmV0dXJuIGpzQ2FzdDxQcm9ncmFtRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpLT5jbGVhckNvZGUoKTsKLSAgICBjYXNlIEZ1bmN0aW9uRXhlY3V0YWJsZVR5cGU6Ci0gICAg
ICAgIHJldHVybiBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFy
Q29kZSgpOwotI2lmIEVOQUJMRShXRUJBU1NFTUJMWSkKLSAgICBjYXNlIFdlYkFzc2VtYmx5RXhl
Y3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8V2ViQXNzZW1ibHlFeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZSktPmNsZWFyQ29kZSgpOwotI2VuZGlmCi0gICAgY2FzZSBNb2R1bGVQcm9n
cmFtRXhlY3V0YWJsZVR5cGU6Ci0gICAgICAgIHJldHVybiBqc0Nhc3Q8TW9kdWxlUHJvZ3JhbUV4
ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+Y2xlYXJDb2RlKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgcmV0dXJuIGpzQ2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmNsZWFyQ29k
ZSgpOwotICAgIH0KLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKLSNlbmRpZgorI2VuZGlm
IC8vIEV4ZWN1dGFibGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMTkwNDM4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDE0IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBl
LCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICBleGNlcHRpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBF
eGNlcHRpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBwcm9t
aXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIGludGVybmFsUHJvbWlzZURlZmVy
cmVkU3RydWN0dXJlLnNldCgqdGhpcywgSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZDo6Y3JlYXRl
U3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb2dyYW1Db2RlQmxvY2tTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CisgICAgbW9kdWxlUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQo
KnRoaXMsIE1vZHVsZVByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKKyAgICBldmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgRXZhbENv
ZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGZ1bmN0
aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKKyNpZiBFTkFCTEUoV0VCQVNTRU1CTFkp
CisgICAgd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWJBc3NlbWJs
eUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworI2VuZGlm
CisKICAgICBpdGVyYXRpb25UZXJtaW5hdG9yLnNldCgqdGhpcywgSlNGaW5hbE9iamVjdDo6Y3Jl
YXRlKCp0aGlzLCBKU0ZpbmFsT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVs
bCgpLCAxKSkpOwogICAgIG5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbFN0cnVjdHVyZS5zZXQoKnRoaXMs
IE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHNtYWxsU3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhpcyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE5MDQzOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwOSw2
ICszMDksMTIgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJl
ZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBpbnRlcm5hbFByb21pc2VEZWZlcnJl
ZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBuYXRpdmVTdGRGdW5jdGlvbkNlbGxT
dHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVy
ZTsKKyAgICBTdHJvbmc8U3RydWN0dXJlPiBtb2R1bGVQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJl
OworICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IGV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgU3Ry
b25nPFN0cnVjdHVyZT4gZnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0
cnVjdHVyZT4gd2ViQXNzZW1ibHlDb2RlQmxvY2tTdHJ1Y3R1cmU7CisKICAgICBTdHJvbmc8SlND
ZWxsPiBpdGVyYXRpb25UZXJtaW5hdG9yOwogICAgIFN0cm9uZzxKU0NlbGw+IGVtcHR5UHJvcGVy
dHlOYW1lRW51bWVyYXRvcjsKIAo=
</data>
<flag name="review"
          id="287489"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>