<?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>134567</bug_id>
          
          <creation_ts>2014-07-02 15:34:06 -0700</creation_ts>
          <short_desc>[ftlopt] Infer immutable object properties</short_desc>
          <delta_ts>2014-07-15 21:09:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>134641</blocked>
    
    <blocked>134962</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1020073</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-02 15:34:06 -0700</bug_when>
    <thetext>We already do something like this for properties that point to functions, but the way that we do it leads to structure explosion.  We should do it for all properties and we should do it in a way that doesn&apos;t explode the number of structures.  Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020074</commentid>
    <comment_count>1</comment_count>
      <attachid>234289</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-02 15:34:59 -0700</bug_when>
    <thetext>Created attachment 234289
it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020161</commentid>
    <comment_count>2</comment_count>
      <attachid>234309</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-02 20:06:33 -0700</bug_when>
    <thetext>Created attachment 234309
more!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020171</commentid>
    <comment_count>3</comment_count>
      <attachid>234313</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-02 20:43:11 -0700</bug_when>
    <thetext>Created attachment 234313
getting further</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020183</commentid>
    <comment_count>4</comment_count>
      <attachid>234315</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-02 21:44:43 -0700</bug_when>
    <thetext>Created attachment 234315
closer to done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020184</commentid>
    <comment_count>5</comment_count>
      <attachid>234316</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-02 21:50:37 -0700</bug_when>
    <thetext>Created attachment 234316
it just folded some constants

Freaking amazing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020403</commentid>
    <comment_count>6</comment_count>
      <attachid>234379</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-03 16:36:45 -0700</bug_when>
    <thetext>Created attachment 234379
it&apos;s really starting to be awesome

I just confirmed that it folds the Math global property as well as all of the Math object&apos;s properties.  So, Math.PI is now folded.

I also confirmed that this will jettison code correctly upon various kinds of replaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020432</commentid>
    <comment_count>7</comment_count>
      <attachid>234388</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-03 20:18:46 -0700</bug_when>
    <thetext>Created attachment 234388
and now, more sound than ever!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020443</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-03 23:05:45 -0700</bug_when>
    <thetext>This is almost ready, except that it appears that I broke fast ToString for StringObjects.  Should be easy to fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020525</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-04 12:44:21 -0700</bug_when>
    <thetext>Nice!  In its latest incarnation this is pretty much pure awesomeness.


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

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

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

                                                        TipOfTree               ConstantProps                                   
SunSpider:
   3d-cube                                            7.8182+-0.1444     ?      7.8580+-0.0973        ?
   3d-morph                                           9.2818+-0.0742     ?      9.4355+-0.1044        ? might be 1.0166x slower
   3d-raytrace                                        9.8968+-0.2137            9.8267+-0.1644        
   access-binary-trees                                2.8699+-0.0848            2.8403+-0.0732          might be 1.0104x faster
   access-fannkuch                                    9.1933+-0.1137     ?      9.3389+-0.1167        ? might be 1.0158x slower
   access-nbody                                       4.6412+-0.0057            4.6166+-0.0197        
   access-nsieve                                      5.8329+-0.0859            5.7286+-0.0387          might be 1.0182x faster
   bitops-3bit-bits-in-byte                           1.8864+-0.0141     ^      1.8498+-0.0157        ^ definitely 1.0198x faster
   bitops-bits-in-byte                                6.4659+-0.0613     ?      6.4905+-0.1861        ?
   bitops-bitwise-and                                 3.1133+-0.0408     !      3.1747+-0.0173        ! definitely 1.0197x slower
   bitops-nsieve-bits                                 5.6344+-0.0613     ?      5.6586+-0.0174        ?
   controlflow-recursive                              3.0105+-0.0997            2.9262+-0.0598          might be 1.0288x faster
   crypto-aes                                         6.2664+-0.0253            6.1605+-0.0987          might be 1.0172x faster
   crypto-md5                                         3.4561+-0.0797            3.3875+-0.0722          might be 1.0203x faster
   crypto-sha1                                        3.7590+-0.0745            3.6788+-0.1160          might be 1.0218x faster
   date-format-tofte                                 13.3283+-0.3421     ?     13.8675+-0.2277        ? might be 1.0405x slower
   date-format-xparb                                  9.9023+-0.1651     ^      9.2990+-0.1573        ^ definitely 1.0649x faster
   math-cordic                                        4.6479+-0.0227     ?      4.6805+-0.0450        ?
   math-partial-sums                                 10.4815+-0.1197           10.4422+-0.0698        
   math-spectral-norm                                 3.0301+-0.0269     ?      3.0328+-0.0606        ?
   regexp-dna                                        11.9474+-0.1070           11.9155+-0.0475        
   string-base64                                      6.3040+-0.0687     ?      6.3441+-0.0548        ?
   string-fasta                                      10.2974+-0.1975     ^      9.8374+-0.2411        ^ definitely 1.0468x faster
   string-tagcloud                                   15.7889+-0.2443           15.7231+-0.1629        
   string-unpack-code                                32.4867+-0.0957     ?     32.6636+-0.3014        ?
   string-validate-input                              7.6651+-0.1167            7.5939+-0.0989        

   &lt;arithmetic&gt; *                                     8.0387+-0.0243            8.0143+-0.0208          might be 1.0030x faster
   &lt;geometric&gt;                                        6.5385+-0.0154     ^      6.5005+-0.0171        ^ definitely 1.0059x faster
   &lt;harmonic&gt;                                         5.4245+-0.0191     ^      5.3811+-0.0147        ^ definitely 1.0081x faster

                                                        TipOfTree               ConstantProps                                   
LongSpider:
   3d-cube                                         1396.8603+-10.3192        1371.5168+-15.3227         might be 1.0185x faster
   3d-morph                                        2285.6272+-13.6408    ?   2300.9314+-40.5206       ?
   3d-raytrace                                     1453.4378+-16.7932    ^   1353.9293+-9.5723        ^ definitely 1.0735x faster
   access-binary-trees                             1675.6227+-7.9567     ?   1684.0506+-2.8048        ?
   access-fannkuch                                  535.1838+-13.4817         525.7400+-19.9542         might be 1.0180x faster
   access-nbody                                    1257.1671+-2.9269     ^   1253.2397+-0.7783        ^ definitely 1.0031x faster
   access-nsieve                                   1620.8115+-38.4795        1599.5381+-5.0212          might be 1.0133x faster
   bitops-3bit-bits-in-byte                          56.9978+-1.8287           56.4445+-0.2942        
   bitops-bits-in-byte                              396.6784+-7.1251          396.2156+-2.5079        
   bitops-nsieve-bits                              1176.4320+-3.6247     ?   1177.0687+-4.7187        ?
   controlflow-recursive                            878.2308+-1.5768     ?    878.4530+-1.6065        ?
   crypto-aes                                      1160.5512+-11.3042        1149.3007+-3.1883        
   crypto-md5                                      1086.2631+-2.7155     ?   1090.1393+-3.2695        ?
   crypto-sha1                                     1211.2503+-3.8371     ?   1214.3267+-8.8184        ?
   date-format-tofte                               1211.1415+-23.7684    ?   1243.5400+-19.2116       ? might be 1.0268x slower
   date-format-xparb                               1651.9672+-24.7190    ^   1474.4400+-20.8955       ^ definitely 1.1204x faster
   math-cordic                                     1020.4646+-8.6662         1011.9027+-5.1625        
   math-partial-sums                               1317.2390+-2.3525     ?   1320.3023+-6.5964        ?
   math-spectral-norm                              1295.7792+-1.0312     ?   1296.3031+-1.4140        ?
   string-base64                                    598.8907+-4.4233     ?    601.1595+-4.4636        ?
   string-fasta                                     900.2269+-12.6027         882.9235+-6.6057          might be 1.0196x faster
   string-tagcloud                                  394.9052+-3.3092     ?    400.6811+-3.5039        ? might be 1.0146x slower

   &lt;arithmetic&gt;                                    1117.3513+-3.2822     ^   1103.7339+-2.3040        ^ definitely 1.0123x faster
   &lt;geometric&gt; *                                    934.2760+-3.4646     ^    925.0132+-1.9553        ^ definitely 1.0100x faster
   &lt;harmonic&gt;                                       554.9211+-8.2112          550.6189+-1.2271          might be 1.0078x faster

                                                        TipOfTree               ConstantProps                                   
V8Spider:
   crypto                                            82.7073+-1.1513     ?     83.3436+-1.2322        ?
   deltablue                                        100.3507+-0.4808          100.3495+-0.4562        
   earley-boyer                                      74.4385+-0.5887           73.3586+-0.6209          might be 1.0147x faster
   raytrace                                          43.5021+-0.7988           43.3727+-0.7127        
   regexp                                           105.4128+-1.4601          105.2356+-0.6738        
   richards                                         108.3555+-1.0664     ?    109.3989+-1.4256        ?
   splay                                             49.8586+-0.4919     ?     50.5465+-0.9555        ? might be 1.0138x slower

   &lt;arithmetic&gt;                                      80.6608+-0.1446     ?     80.8008+-0.4591        ? might be 1.0017x slower
   &lt;geometric&gt; *                                     76.4765+-0.0996     ?     76.6045+-0.4907        ? might be 1.0017x slower
   &lt;harmonic&gt;                                        71.9717+-0.2036     ?     72.0993+-0.5688        ? might be 1.0018x slower

                                                        TipOfTree               ConstantProps                                   
Octane and V8v7:
   encrypt                                           0.41965+-0.00140          0.41926+-0.00053       
   decrypt                                           7.57283+-0.02756          7.57253+-0.01631       
   deltablue                                x2       0.46821+-0.00252    ^     0.45882+-0.00471       ^ definitely 1.0205x faster
   earley                                            0.94636+-0.00590          0.94614+-0.00545       
   boyer                                            10.62972+-0.12452         10.48411+-0.08605         might be 1.0139x faster
   navier-stokes                            x2       7.69744+-0.00734    !     7.71627+-0.01002       ! definitely 1.0024x slower
   raytrace                                 x2       2.91817+-0.03264    ^     2.73621+-0.03914       ^ definitely 1.0665x faster
   regexp                                   x2      32.78528+-0.15415    ?    33.17915+-0.24116       ? might be 1.0120x slower
   richards                                 x2       0.23349+-0.00454          0.23331+-0.00811       
   splay                                    x2       0.63048+-0.00701    !     0.64120+-0.00320       ! definitely 1.0170x slower
   pdfjs                                    x2      94.51867+-0.98388    ^    92.80384+-0.46530       ^ definitely 1.0185x faster
   mandreel                                 x2      88.00037+-0.41322    ?    88.26669+-0.73920       ?
   gbemu                                    x2      68.86337+-0.48167         68.62590+-0.27462       
   closure                                           0.88070+-0.00113    !     0.89743+-0.00195       ! definitely 1.0190x slower
   jquery                                           10.92016+-0.06929    ?    10.94888+-0.03767       ?
   box2d                                    x2      25.50091+-0.08468    ^    25.14991+-0.18822       ^ definitely 1.0140x faster
   zlib                                     x2     772.87741+-3.04224        755.45981+-34.31395        might be 1.0231x faster
   typescript                               x2    1238.48336+-8.61351    !  1256.15560+-7.76545       ! definitely 1.0143x slower

V8v7:
   &lt;arithmetic&gt;                                      6.81467+-0.01928    ?     6.83450+-0.02790       ? might be 1.0029x slower
   &lt;geometric&gt; *                                     2.02871+-0.00434    ^     2.01306+-0.01054       ^ definitely 1.0078x faster
   &lt;harmonic&gt;                                        0.77356+-0.00552          0.77015+-0.01170         might be 1.0044x faster

Octane including V8v7:
   &lt;arithmetic&gt;                                    156.57746+-0.51277        156.47072+-2.41841         might be 1.0007x faster
   &lt;geometric&gt; *                                    11.83003+-0.01569    ^    11.75676+-0.05640       ^ definitely 1.0062x faster
   &lt;harmonic&gt;                                        1.35954+-0.00915          1.35513+-0.01925         might be 1.0033x faster

                                                        TipOfTree               ConstantProps                                   
Kraken:
   ai-astar                                          530.397+-2.435            529.899+-1.558         
   audio-beat-detection                              203.172+-2.706      ?     208.286+-3.927         ? might be 1.0252x slower
   audio-dft                                         255.009+-1.040            252.838+-3.750         
   audio-fft                                         116.580+-0.219      !     121.425+-0.276         ! definitely 1.0416x slower
   audio-oscillator                                  366.890+-1.210      ^     357.903+-1.062         ^ definitely 1.0251x faster
   imaging-darkroom                                  293.948+-1.000      ^     288.127+-1.866         ^ definitely 1.0202x faster
   imaging-desaturate                                121.926+-0.196      ?     122.075+-0.703         ?
   imaging-gaussian-blur                             184.259+-7.894            178.107+-0.463           might be 1.0345x faster
   json-parse-financial                               83.101+-0.438      !      85.437+-0.721         ! definitely 1.0281x slower
   json-stringify-tinderbox                          102.693+-1.620      ?     102.739+-0.802         ?
   stanford-crypto-aes                                92.870+-1.287      ?      93.139+-1.223         ?
   stanford-crypto-ccm                                93.173+-11.055            88.698+-9.171           might be 1.0504x faster
   stanford-crypto-pbkdf2                            247.719+-3.138      ?     253.236+-5.527         ? might be 1.0223x slower
   stanford-crypto-sha256-iterative                  108.154+-0.270      !     109.881+-0.562         ! definitely 1.0160x slower

   &lt;arithmetic&gt; *                                    199.992+-1.160            199.414+-0.458           might be 1.0029x faster
   &lt;geometric&gt;                                       168.815+-1.713            168.813+-1.026           might be 1.0000x faster
   &lt;harmonic&gt;                                        146.243+-2.158      ?     146.548+-1.591         ? might be 1.0021x slower

                                                        TipOfTree               ConstantProps                                   
JSRegress:
   adapt-to-double-divide                            20.1566+-0.4820     ?     20.4130+-0.4260        ? might be 1.0127x slower
   aliased-arguments-getbyval                         1.1097+-0.0054            1.1029+-0.0142        
   allocate-big-object                                3.6436+-0.0398            3.5542+-0.1467          might be 1.0252x faster
   arity-mismatch-inlining                            1.0027+-0.0051            0.9973+-0.0093        
   array-access-polymorphic-structure                10.8465+-0.1660           10.6795+-0.2787          might be 1.0156x faster
   array-nonarray-polymorhpic-access                 62.7782+-0.1760           61.6053+-1.6442          might be 1.0190x faster
   array-prototype-every                            119.3313+-0.6267     ?    120.1406+-1.4944        ?
   array-prototype-forEach                          120.4464+-1.7173          120.1052+-1.6394        
   array-prototype-map                              145.6106+-3.1862          145.2546+-1.5498        
   array-prototype-some                             119.3205+-1.4262     ?    120.3271+-1.5373        ?
   array-splice-contiguous                           68.7826+-0.6802           68.2888+-0.3305        
   array-with-double-add                              6.6840+-0.0760     ?      6.7539+-0.0843        ? might be 1.0105x slower
   array-with-double-increment                        4.6770+-0.0688     ?      4.7239+-0.0797        ? might be 1.0100x slower
   array-with-double-mul-add                          7.7596+-0.1019     ?      7.7671+-0.1856        ?
   array-with-double-sum                              5.0004+-0.0598     ?      5.0239+-0.0535        ?
   array-with-int32-add-sub                          12.1359+-0.2474           11.9742+-0.3553          might be 1.0135x faster
   array-with-int32-or-double-sum                     5.1298+-0.0863     ?      5.1679+-0.0907        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                    115.6589+-1.0129     ?    116.5123+-1.8083        ?
   ArrayBuffer-DataView-alloc-long-lived             32.8177+-0.5638     ?     33.1582+-1.0669        ? might be 1.0104x slower
   ArrayBuffer-Int32Array-byteOffset                  5.2358+-0.0219     ?      5.2576+-0.0857        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                    119.4163+-1.8239     ?    119.9810+-1.5387        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     51.9901+-0.5785           51.2875+-0.6402          might be 1.0137x faster
   ArrayBuffer-Int8Array-alloc-long-lived            31.6105+-0.7069     ?     31.9215+-0.4813        ?
   ArrayBuffer-Int8Array-alloc                       27.6875+-0.1539     ?     28.2430+-1.1793        ? might be 1.0201x slower
   asmjs_bool_bug                                    10.1601+-0.0612     ?     10.2467+-0.2046        ?
   assign-custom-setter-polymorphic                   4.7867+-0.1316     ?      4.9858+-0.1300        ? might be 1.0416x slower
   assign-custom-setter                               6.7165+-0.1137            6.6605+-0.0503        
   basic-set                                         16.4006+-0.3347           16.2670+-0.2332        
   big-int-mul                                        6.2640+-0.0835            6.2002+-0.0529          might be 1.0103x faster
   boolean-test                                       4.7208+-0.0527            4.7201+-0.0539        
   branch-fold                                        5.2437+-0.0702            5.2140+-0.0427        
   by-val-generic                                    14.1660+-0.1892           13.5597+-0.4247          might be 1.0447x faster
   call-spread-apply                                 20.9012+-0.2553     ^     20.3403+-0.2109        ^ definitely 1.0276x faster
   call-spread-call                                   9.8323+-0.5154     ^      8.8636+-0.2445        ^ definitely 1.1093x faster
   captured-assignments                               0.5573+-0.0021     ^      0.5390+-0.0040        ^ definitely 1.0338x faster
   cast-int-to-double                                12.7326+-0.0758     ^      9.3109+-0.0823        ^ definitely 1.3675x faster
   cell-argument                                     10.7828+-0.1910     !     11.1706+-0.0585        ! definitely 1.0360x slower
   cfg-simplify                                       4.1611+-0.0498            4.1231+-0.0252        
   chain-getter-access                               14.7625+-0.3700           14.5063+-0.6848          might be 1.0177x faster
   cmpeq-obj-to-obj-other                            13.8355+-0.4028           13.6326+-0.2336          might be 1.0149x faster
   constant-test                                      8.7774+-0.1035            8.6570+-0.1330          might be 1.0139x faster
   DataView-custom-properties                       123.9673+-1.4988     ?    126.2419+-2.3620        ? might be 1.0183x slower
   delay-tear-off-arguments-strictmode                3.6824+-0.0634            3.6037+-0.0156          might be 1.0218x faster
   destructuring-arguments                            8.8627+-0.0889            8.7476+-0.0360          might be 1.0132x faster
   destructuring-swap                                 8.9816+-0.0888     ?      9.2612+-0.6567        ? might be 1.0311x slower
   direct-arguments-getbyval                          1.1214+-0.0131            1.1122+-0.0086        
   double-get-by-val-out-of-bounds                    6.7161+-0.3593            6.6451+-0.1072          might be 1.0107x faster
   double-pollution-getbyval                         11.5153+-0.1688           11.2941+-0.0966          might be 1.0196x faster
   double-pollution-putbyoffset                       6.1663+-0.0950     ?      6.2904+-0.1064        ? might be 1.0201x slower
   double-to-int32-typed-array-no-inline              3.0663+-0.0652     ?      3.1301+-0.0683        ? might be 1.0208x slower
   double-to-int32-typed-array                        2.4859+-0.0637            2.4489+-0.0676          might be 1.0151x faster
   double-to-uint32-typed-array-no-inline             3.1399+-0.0814            3.1054+-0.0494          might be 1.0111x faster
   double-to-uint32-typed-array                       2.5830+-0.0083     ?      2.6283+-0.0659        ? might be 1.0175x slower
   empty-string-plus-int                             10.6350+-0.2081           10.6099+-0.1102        
   emscripten-cube2hash                              53.7954+-0.6525     ?     54.0302+-0.5414        ?
   external-arguments-getbyval                        2.0347+-0.0186     ?      2.0659+-0.0237        ? might be 1.0153x slower
   external-arguments-putbyval                        2.9494+-0.0577            2.9487+-0.0239        
   fixed-typed-array-storage-var-index                1.5306+-0.0184     ?      1.5513+-0.1044        ? might be 1.0135x slower
   fixed-typed-array-storage                          1.0946+-0.0070     ?      1.1001+-0.0052        ?
   Float32Array-matrix-mult                           7.9947+-0.2757     ^      7.3328+-0.0493        ^ definitely 1.0903x faster
   Float32Array-to-Float64Array-set                  90.5518+-0.7002     ^     86.8063+-1.4259        ^ definitely 1.0431x faster
   Float64Array-alloc-long-lived                    100.5495+-0.7951     ?    101.7828+-1.6483        ? might be 1.0123x slower
   Float64Array-to-Int16Array-set                   113.5450+-1.5516     ?    114.8343+-1.1904        ? might be 1.0114x slower
   fold-double-to-int                                20.0441+-0.0878     ^     19.4780+-0.1484        ^ definitely 1.0291x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     19.5690+-0.2473     ?     19.6657+-0.3255        ?
   fold-get-by-id-to-multi-get-by-offset             18.5912+-0.4329           18.5812+-0.4157        
   fold-multi-get-by-offset-to-get-by-offset   
                                                     13.0438+-0.1680     ?     13.0720+-0.1333        ?
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.3062+-0.3461     ?     13.5207+-0.2814        ? might be 1.0161x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     13.3691+-0.2164     ?     13.6096+-0.6598        ? might be 1.0180x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     12.5774+-0.3965     ?     12.6602+-0.2009        ?
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     17.0962+-0.1886     ?     17.9964+-0.7243        ? might be 1.0527x slower
   fold-put-by-id-to-multi-put-by-offset             20.9953+-0.4624     ?     21.1296+-0.2602        ?
   fold-put-structure                                12.9547+-0.8590           12.6846+-0.1583          might be 1.0213x faster
   for-of-iterate-array-entries                       9.7149+-0.2017            9.6415+-0.3371        
   for-of-iterate-array-keys                          3.6069+-0.0551     ?      3.6301+-0.0802        ?
   for-of-iterate-array-values                        3.1514+-0.0504     ?      3.2241+-0.0714        ? might be 1.0231x slower
   fround                                            24.6322+-0.5920           23.9149+-0.2507          might be 1.0300x faster
   ftl-library-inlining-dataview                    108.7813+-0.2004     ?    108.9919+-0.6329        ?
   ftl-library-inlining                              85.3251+-0.9073     ^     78.4889+-0.2815        ^ definitely 1.0871x faster
   function-dot-apply                                 1.7515+-0.1522     ?      1.7684+-0.1173        ?
   function-test                                      5.1385+-0.0659     ?      5.2560+-0.1294        ? might be 1.0229x slower
   function-with-eval                                41.2917+-1.9227     ?     41.5510+-1.4997        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.8440+-0.1143            3.7693+-0.0197          might be 1.0198x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      9.5938+-0.2248            9.4759+-0.2065          might be 1.0124x faster
   get-by-id-chain-from-try-block                     8.2907+-0.1710            8.1578+-0.1502          might be 1.0163x faster
   get-by-id-check-structure-elimination              8.7229+-0.2775     ?      8.8422+-0.1921        ? might be 1.0137x slower
   get-by-id-proto-or-self                           26.5906+-0.9641     ^     24.0653+-0.4974        ^ definitely 1.1049x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.5827+-0.1334            4.5074+-0.0625          might be 1.0167x faster
   get-by-id-self-or-proto                           25.2640+-1.6747           25.2100+-1.2282        
   get-by-val-out-of-bounds                           6.5247+-0.1308     ?      6.7217+-0.1034        ? might be 1.0302x slower
   get_callee_monomorphic                             5.2276+-0.1041     ?      5.2322+-0.0691        ?
   get_callee_polymorphic                             4.8301+-0.1091     ?      4.9362+-0.2313        ? might be 1.0220x slower
   getter-no-activation                               6.7260+-0.0730     ?      6.7400+-0.0873        ?
   getter-richards                                  188.7612+-3.3148     ^    180.4673+-2.1352        ^ definitely 1.0460x faster
   getter                                             7.4904+-0.0544     ?      7.5024+-0.1343        ?
   global-var-const-infer-fire-from-opt               1.2407+-0.0262            1.2207+-0.0329          might be 1.0164x faster
   global-var-const-infer                             1.0425+-0.0262            1.0060+-0.0118          might be 1.0362x faster
   HashMap-put-get-iterate-keys                      40.1039+-0.7255     ?     40.1191+-0.8245        ?
   HashMap-put-get-iterate                           39.4474+-0.2804     !     40.3617+-0.6201        ! definitely 1.0232x slower
   HashMap-string-put-get-iterate                    45.0497+-0.9877     ?     45.3664+-0.6770        ?
   hoist-make-rope                                   13.7999+-1.0012     ?     15.0317+-1.8596        ? might be 1.0893x slower
   hoist-poly-check-structure-effectful-loop   
                                                      7.9592+-0.1957     ^      7.5464+-0.0559        ^ definitely 1.0547x faster
   hoist-poly-check-structure                         5.6182+-0.0888     ?      5.6205+-0.0780        ?
   imul-double-only                                  10.3164+-0.5316           10.0855+-0.0559          might be 1.0229x faster
   imul-int-only                                     13.9302+-0.2313           13.4403+-0.5403          might be 1.0364x faster
   imul-mixed                                        10.7068+-0.6344            9.9153+-0.5662          might be 1.0798x faster
   in-four-cases                                     28.4354+-0.1606           28.2911+-0.2399        
   in-one-case-false                                 14.8007+-0.0816           14.7165+-0.1417        
   in-one-case-true                                  14.7682+-0.1952     ?     14.8349+-0.0629        ?
   in-two-cases                                      15.3875+-0.1451           15.3042+-0.1745        
   indexed-properties-in-objects                      4.4513+-0.1878            4.2585+-0.0796          might be 1.0453x faster
   infer-closure-const-then-mov-no-inline             5.1235+-0.0255     ?      5.1474+-0.0787        ?
   infer-closure-const-then-mov                      29.0813+-0.0797     ?     29.1599+-0.1559        ?
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.5041+-0.0853     ?     17.5347+-0.0290        ?
   infer-closure-const-then-put-to-scope             33.1790+-0.0900     ?     33.2420+-0.1520        ?
   infer-closure-const-then-reenter-no-inline   
                                                     77.0221+-0.1399     ?     77.1581+-0.1688        ?
   infer-closure-const-then-reenter                  33.1546+-0.0716           33.1429+-0.0489        
   infer-one-time-closure-ten-vars                   16.4497+-0.1416     ?     16.5612+-0.5818        ?
   infer-one-time-closure-two-vars                   15.6585+-0.2200     ?     15.8984+-0.0784        ? might be 1.0153x slower
   infer-one-time-closure                            15.6790+-0.0862           15.6455+-0.0948        
   infer-one-time-deep-closure                       28.4882+-0.6090           28.2891+-0.1844        
   inline-arguments-access                            1.5903+-0.0151     ^      1.5314+-0.0055        ^ definitely 1.0384x faster
   inline-arguments-aliased-access                    1.7028+-0.0675            1.6509+-0.0114          might be 1.0314x faster
   inline-arguments-local-escape                     19.5387+-0.2849     !     21.2420+-0.3113        ! definitely 1.0872x slower
   inline-get-scoped-var                              7.0592+-0.1785            7.0026+-0.0594        
   inlined-put-by-id-transition                      15.5213+-0.5594           15.5015+-0.2844        
   int-or-other-abs-then-get-by-val                   9.7403+-0.2702     ^      8.0863+-0.1441        ^ definitely 1.2045x faster
   int-or-other-abs-zero-then-get-by-val             33.4406+-0.4242     ^     30.0487+-0.4637        ^ definitely 1.1129x faster
   int-or-other-add-then-get-by-val                  10.7246+-0.1277     ^      6.7496+-0.0353        ^ definitely 1.5889x faster
   int-or-other-add                                  11.0798+-0.1256     ^      8.9613+-0.1203        ^ definitely 1.2364x faster
   int-or-other-div-then-get-by-val                   6.7544+-0.0709     ^      6.0331+-0.0496        ^ definitely 1.1196x faster
   int-or-other-max-then-get-by-val                   7.7760+-0.1408     ^      7.2894+-0.2289        ^ definitely 1.0668x faster
   int-or-other-min-then-get-by-val                   7.6899+-0.1536     ^      5.8139+-0.0342        ^ definitely 1.3227x faster
   int-or-other-mod-then-get-by-val                   6.4080+-0.0381     ^      5.8178+-0.0219        ^ definitely 1.1014x faster
   int-or-other-mul-then-get-by-val                   6.7080+-0.0368     ^      5.9017+-0.1089        ^ definitely 1.1366x faster
   int-or-other-neg-then-get-by-val                   8.6255+-0.0862     ^      7.1286+-0.0652        ^ definitely 1.2100x faster
   int-or-other-neg-zero-then-get-by-val             34.0613+-0.7530     ^     29.9606+-0.4432        ^ definitely 1.1369x faster
   int-or-other-sub-then-get-by-val                  11.0312+-0.0602     ^      6.9827+-0.0602        ^ definitely 1.5798x faster
   int-or-other-sub                                   9.8011+-0.0876     ^      5.2942+-0.0826        ^ definitely 1.8513x faster
   int-overflow-local                                 6.6292+-0.0333     ?      6.6992+-0.1162        ? might be 1.0106x slower
   Int16Array-alloc-long-lived                       73.1390+-0.5970     ?     73.4673+-0.4204        ?
   Int16Array-bubble-sort-with-byteLength            44.4583+-0.0652           43.8496+-0.6595          might be 1.0139x faster
   Int16Array-bubble-sort                            43.0385+-0.6205     ?     43.1587+-0.4535        ?
   Int16Array-load-int-mul                            2.0983+-0.0184            2.0682+-0.0248          might be 1.0145x faster
   Int16Array-to-Int32Array-set                      88.4931+-0.5704           88.3392+-0.8625        
   Int32Array-alloc-large                            43.5389+-1.5417           42.6443+-0.5298          might be 1.0210x faster
   Int32Array-alloc-long-lived                       81.6274+-1.0492           81.4297+-1.0588        
   Int32Array-alloc                                   4.8140+-0.0309     ?      4.8345+-0.0376        ?
   Int32Array-Int8Array-view-alloc                   15.6361+-0.6760           15.4209+-0.1203          might be 1.0140x faster
   int52-spill                                       11.9532+-0.2852           11.9217+-0.1903        
   Int8Array-alloc-long-lived                        66.8956+-0.4681     ^     66.1199+-0.1765        ^ definitely 1.0117x faster
   Int8Array-load-with-byteLength                     5.6112+-0.2041            5.4410+-0.0500          might be 1.0313x faster
   Int8Array-load                                     5.4721+-0.0491     ?      5.4952+-0.0707        ?
   integer-divide                                    16.8358+-0.0491           16.7865+-0.0660        
   integer-modulo                                     3.2288+-0.3019            3.2127+-0.3264        
   large-int-captured                                10.5653+-0.3014           10.3374+-0.0938          might be 1.0220x faster
   large-int-neg                                     25.0369+-0.8218           24.5579+-0.3741          might be 1.0195x faster
   large-int                                         21.7424+-0.4617           21.5117+-0.2399          might be 1.0107x faster
   logical-not                                        6.7832+-0.1652     ?      6.7963+-0.1036        ?
   lots-of-fields                                    14.8171+-0.1438     ?     14.8403+-0.4178        ?
   make-indexed-storage                               4.5136+-0.2481            4.4027+-0.3477          might be 1.0252x faster
   make-rope-cse                                      6.1763+-0.0466     ?      6.2898+-0.1302        ? might be 1.0184x slower
   marsaglia-larger-ints                             59.3515+-0.4925           59.3369+-0.3666        
   marsaglia-osr-entry                               31.9013+-0.9979           31.1033+-0.2532          might be 1.0257x faster
   method-on-number                                  30.4823+-0.2393     !     32.1297+-0.4509        ! definitely 1.0540x slower
   misc-strict-eq                                    58.2399+-1.0547     ?     58.5318+-1.1103        ?
   negative-zero-divide                               0.4393+-0.0038     ^      0.4297+-0.0044        ^ definitely 1.0223x faster
   negative-zero-modulo                               0.4412+-0.0038     ?      0.4442+-0.0422        ?
   negative-zero-negate                               0.4117+-0.0052     ^      0.3985+-0.0020        ^ definitely 1.0331x faster
   nested-function-parsing                           48.9444+-0.2043     ?     49.1728+-0.3174        ?
   new-array-buffer-dead                              4.0751+-0.0890            4.0191+-0.0679          might be 1.0139x faster
   new-array-buffer-push                             10.7432+-0.1852           10.7194+-0.2671        
   new-array-dead                                    14.5467+-0.3214           14.4895+-0.3122        
   new-array-push                                     7.4941+-0.0680     ?      7.5444+-0.1058        ?
   number-test                                        4.6042+-0.0181     ?      4.6146+-0.0110        ?
   object-closure-call                                8.7343+-0.0629     !      8.9273+-0.0727        ! definitely 1.0221x slower
   object-test                                        4.9590+-0.0665     ?      5.0437+-0.1864        ? might be 1.0171x slower
   poly-chain-access-different-prototypes-simple   
                                                      4.8643+-0.0535     ^      4.4316+-0.0488        ^ definitely 1.0976x faster
   poly-chain-access-different-prototypes             3.9084+-0.1621     ^      3.6171+-0.0118        ^ definitely 1.0805x faster
   poly-chain-access-simpler                          4.8228+-0.0185     ^      4.4849+-0.0581        ^ definitely 1.0753x faster
   poly-chain-access                                  3.6425+-0.0114            3.3815+-0.4020          might be 1.0772x faster
   poly-stricteq                                     82.4596+-0.4186     ?     82.6532+-0.3895        ?
   polymorphic-array-call                             2.2229+-0.0606            2.1925+-0.0171          might be 1.0139x faster
   polymorphic-get-by-id                              4.7354+-0.0214     ?      4.7618+-0.0537        ?
   polymorphic-put-by-id                             97.4178+-38.8481    ?    105.4052+-42.1527       ? might be 1.0820x slower
   polymorphic-structure                             30.3263+-0.1656     ^     27.0142+-0.8501        ^ definitely 1.1226x faster
   polyvariant-monomorphic-get-by-id                 13.3524+-0.1412           13.3374+-0.2382        
   proto-getter-access                               14.8662+-0.2424     ^     14.1558+-0.1254        ^ definitely 1.0502x faster
   put-by-id-replace-and-transition                  12.4648+-0.1775     ?     12.8151+-0.4090        ? might be 1.0281x slower
   put-by-id-slightly-polymorphic                     4.0686+-0.0698            4.0290+-0.0283        
   put-by-id                                         20.9541+-0.4057     ?     21.0275+-0.5928        ?
   put-by-val-large-index-blank-indexing-type   
                                                     10.7115+-0.1389     ?     11.2348+-0.5498        ? might be 1.0488x slower
   put-by-val-machine-int                             4.3692+-0.1350     ?      4.4688+-0.4654        ? might be 1.0228x slower
   rare-osr-exit-on-local                            21.6838+-0.1394           21.3924+-0.2538          might be 1.0136x faster
   register-pressure-from-osr                        31.2212+-0.2422     ?     31.3674+-0.0793        ?
   setter                                             7.5921+-0.1159            7.5024+-0.1037          might be 1.0119x faster
   simple-activation-demo                            35.0973+-0.1222     !     36.4290+-0.7488        ! definitely 1.0379x slower
   simple-getter-access                              20.0142+-0.1829     !     20.4768+-0.2588        ! definitely 1.0231x slower
   slow-array-profile-convergence                     4.2000+-0.0986     ?      4.3525+-0.2188        ? might be 1.0363x slower
   slow-convergence                                   4.7245+-0.0273            4.6988+-0.0775        
   sparse-conditional                                 1.5192+-0.0573            1.4923+-0.0055          might be 1.0180x faster
   splice-to-remove                                  33.1851+-1.6955     ^     29.2023+-0.3329        ^ definitely 1.1364x faster
   string-char-code-at                               23.3587+-0.1242           23.3344+-0.0677        
   string-concat-object                               3.1954+-0.0879     ?      3.2697+-0.1049        ? might be 1.0233x slower
   string-concat-pair-object                          3.0774+-0.0535     ?      3.1381+-0.0588        ? might be 1.0197x slower
   string-concat-pair-simple                         18.7489+-0.2945     ?     18.7893+-0.2737        ?
   string-concat-simple                              18.6678+-0.4684     ?     18.9495+-0.6837        ? might be 1.0151x slower
   string-cons-repeat                                11.8708+-0.1282     ?     11.9213+-0.0261        ?
   string-cons-tower                                 10.7953+-0.0648     ?     10.9154+-0.0662        ? might be 1.0111x slower
   string-equality                                   43.9575+-0.4173     ?     43.9852+-0.2110        ?
   string-get-by-val-big-char                        14.2218+-0.1359     !     15.1602+-0.4520        ! definitely 1.0660x slower
   string-get-by-val-out-of-bounds-insane             6.3467+-0.2141            6.3134+-0.0616        
   string-get-by-val-out-of-bounds                    7.1801+-0.1119            7.1583+-0.1117        
   string-get-by-val                                  5.5511+-0.0141            5.5189+-0.0656        
   string-hash                                        2.9055+-0.0600            2.8518+-0.0088          might be 1.0188x faster
   string-long-ident-equality                        39.1691+-0.2165     ?     40.0219+-1.0088        ? might be 1.0218x slower
   string-repeat-arith                               47.6515+-1.8928           47.5643+-1.4341        
   string-sub                                       101.7502+-20.4469          95.1528+-1.3392          might be 1.0693x faster
   string-test                                        4.6122+-0.0471     ?      4.6223+-0.0624        ?
   string-var-equality                               89.8062+-0.9471           88.7625+-2.5983          might be 1.0118x faster
   structure-hoist-over-transitions                   3.9098+-0.0252            3.8639+-0.0254          might be 1.0119x faster
   substring-concat-weird                            64.2758+-0.4468     ?     64.8475+-0.6127        ?
   substring-concat                                  67.6204+-0.6601     ?     68.0475+-0.6587        ?
   substring                                         74.8326+-0.2765     ?     75.1697+-0.5944        ?
   switch-char-constant                               3.6227+-0.0100            3.6036+-0.0188        
   switch-char                                        9.1892+-0.0310     ?      9.2793+-0.1421        ?
   switch-constant                                   12.3043+-0.4645           12.2439+-0.2522        
   switch-string-basic-big-var                       25.4541+-0.8534     ?     25.7947+-0.4879        ? might be 1.0134x slower
   switch-string-basic-big                           30.8424+-1.2907     ?     31.5478+-1.6154        ? might be 1.0229x slower
   switch-string-basic-var                           30.7694+-0.5186     ?     30.9966+-0.7925        ?
   switch-string-basic                               32.8682+-2.5020           31.0568+-2.4126          might be 1.0583x faster
   switch-string-big-length-tower-var                29.8890+-0.1100     ?     29.9298+-0.3029        ?
   switch-string-length-tower-var                    23.8080+-0.1661     ?     24.3510+-0.6736        ? might be 1.0228x slower
   switch-string-length-tower                        17.3013+-0.1297     ?     17.5216+-0.4079        ? might be 1.0127x slower
   switch-string-short                               17.4650+-0.1410           17.2798+-0.1338          might be 1.0107x faster
   switch                                            16.2764+-1.0754           15.8079+-0.4951          might be 1.0296x faster
   tear-off-arguments-simple                          2.2730+-0.0370     ^      2.2255+-0.0068        ^ definitely 1.0214x faster
   tear-off-arguments                                 3.7563+-0.0868            3.6943+-0.0172          might be 1.0168x faster
   temporal-structure                                19.1652+-0.0857     !     19.8831+-0.1324        ! definitely 1.0375x slower
   to-int32-boolean                                  24.5339+-0.1068     ?     24.5812+-0.1103        ?
   undefined-test                                     4.8601+-0.0633            4.8411+-0.0560        
   unprofiled-licm                                   31.1744+-0.7325     ?     31.5694+-0.0875        ? might be 1.0127x slower
   weird-inlining-const-prop                          2.6932+-0.0807     ?      2.6932+-0.1118        ?

   &lt;arithmetic&gt;                                      23.4333+-0.1539           23.2177+-0.1762          might be 1.0093x faster
   &lt;geometric&gt; *                                     11.9055+-0.0219     ^     11.6918+-0.0233        ^ definitely 1.0183x faster
   &lt;harmonic&gt;                                         5.6442+-0.0121     ^      5.5381+-0.0215        ^ definitely 1.0192x faster

                                                        TipOfTree               ConstantProps                                   
AsmBench:
   bigfib.cpp                                       800.5756+-5.9465          796.4006+-5.9109        
   cray.c                                           788.2736+-2.2454     ?    789.3686+-3.7115        ?
   dry.c                                            847.1505+-68.5083    ?    886.3119+-50.4821       ? might be 1.0462x slower
   FloatMM.c                                       1146.9502+-1.6140     ?   1147.2221+-1.7175        ?
   gcc-loops.cpp                                   7565.9098+-13.1485        7559.8443+-11.2115       
   n-body.c                                        2042.4041+-6.2077         2041.9375+-1.5508        
   Quicksort.c                                      681.0657+-7.6397     ?    683.9342+-7.5917        ?
   stepanov_container.cpp                          5798.3952+-13.7968    ?   5805.6161+-22.0601       ?
   Towers.c                                         493.6302+-1.2804          491.4378+-1.1004        

   &lt;arithmetic&gt;                                    2240.4839+-7.3045     ?   2244.6748+-8.6907        ? might be 1.0019x slower
   &lt;geometric&gt; *                                   1382.3277+-12.7586    ?   1388.8921+-10.7363       ? might be 1.0047x slower
   &lt;harmonic&gt;                                      1015.3949+-11.7045    ?   1020.8282+-9.2550        ? might be 1.0054x slower

                                                        TipOfTree               ConstantProps                                   
All benchmarks:
   &lt;arithmetic&gt;                                     167.2684+-0.1553     ^    166.3419+-0.3624        ^ definitely 1.0056x faster
   &lt;geometric&gt;                                       19.4975+-0.0299     ^     19.2270+-0.0324        ^ definitely 1.0141x faster
   &lt;harmonic&gt;                                         5.0032+-0.0136     ^      4.9372+-0.0152        ^ definitely 1.0134x faster

                                                        TipOfTree               ConstantProps                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   80.7374+-0.1418     ^     80.3484+-0.1575        ^ definitely 1.0048x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020530</commentid>
    <comment_count>10</comment_count>
      <attachid>234419</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-04 13:00:24 -0700</bug_when>
    <thetext>Created attachment 234419
almost done

I still need to think about this a bit more to ensure that everything is good and sound, but I&apos;m definitely almost done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020531</commentid>
    <comment_count>11</comment_count>
      <attachid>234420</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-04 13:35:57 -0700</bug_when>
    <thetext>Created attachment 234420
adding more ruggedness

Better defends against the structure changing after we fold the property.  This is almost done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020554</commentid>
    <comment_count>12</comment_count>
      <attachid>234427</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-04 18:42:07 -0700</bug_when>
    <thetext>Created attachment 234427
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020558</commentid>
    <comment_count>13</comment_count>
      <attachid>234429</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-04 19:40:34 -0700</bug_when>
    <thetext>Created attachment 234429
the patch

Improved a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020569</commentid>
    <comment_count>14</comment_count>
      <attachid>234432</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-04 22:27:27 -0700</bug_when>
    <thetext>Created attachment 234432
the patch

More changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020872</commentid>
    <comment_count>15</comment_count>
      <attachid>234432</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2014-07-07 12:22:01 -0700</bug_when>
    <thetext>Comment on attachment 234432
the patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:34
&gt; +        cached. A put cache will create, and immediately invalidate, the watchpoint set. A get cache

A put replace cache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1020894</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-07-07 13:41:05 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/170855</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234289</attachid>
            <date>2014-07-02 15:34:59 -0700</date>
            <delta_ts>2014-07-02 20:06:33 -0700</delta_ts>
            <desc>it begins</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>12326</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDYgQEAgdm9pZCBXYXRjaHBv
aW50U2V0OjphZGQoV2F0Y2hwb2ludCogd2F0YwogICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CiB9
CiAKLXZvaWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCi17Ci0g
ICAgZmlyZUFsbChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwotfQotCiB2b2lkIFdhdGNocG9p
bnRTZXQ6OmZpcmVBbGxTbG93KGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBBU1NF
UlQoc3RhdGUoKSA9PSBJc1dhdGNoZWQpOwpAQCAtODUsNiArODAsMTEgQEAgdm9pZCBXYXRjaHBv
aW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBGaQogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7
CiB9CiAKK3ZvaWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgY2hhciogcmVhc29u
KQoreworICAgIGZpcmVBbGxTbG93KFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Cit9CisKIHZv
aWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFdhdGNocG9pbnRzKGNvbnN0IEZpcmVEZXRhaWwmIGRl
dGFpbCkKIHsKICAgICB3aGlsZSAoIW1fc2V0LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTcwNzI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDEyICsxMzEsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZmlyZUFsbChj
b25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewotICAgICAgICBpZiAoc3RhdGUoKSAhPSBJ
c1dhdGNoZWQpCisgICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICBmaXJlQWxsU2xvdyhkZXRhaWwpOwogICAgIH0KICAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29u
KTsKKyAgICB2b2lkIGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAg
aWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0Y2hlZCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGZpcmVBbGxTbG93KHJlYXNvbik7CisgICAgfQogICAgIAogICAgIHZvaWQgdG91Y2go
Y29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKQEAgLTE1Nyw2ICsxNjIsNyBAQCBwdWJs
aWM6CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0
SXNOb3RFbXB0eTsgfQogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNs
b3coY29uc3QgRmlyZURldGFpbCYpOyAvLyBDYWxsIG9ubHkgaWYgeW91J3ZlIGNoZWNrZWQgaXNX
YXRjaGVkLgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coY29uc3QgY2hh
ciogcmVhc29uKTsgLy8gRGl0dG8uCiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgZmlyZUFsbFdh
dGNocG9pbnRzKGNvbnN0IEZpcmVEZXRhaWwmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJl
dmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU2OSw2ICsxNTY5LDEyIEBA
IGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAg
IAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgZGF0
YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4KCldOworICAgICAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBmb3JOb2RlKG5vZGUtPmNoaWxk
MigpKS5hdHRlbXB0TG9hZChkYXRhLm9mZnNldCwgbV9ncmFwaC5pZGVudGlmaWVycygpW2RhdGEu
aWRlbnRpZmllck51bWJlcl0pKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldENvbnN0
YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE2MDIsMTQgKzE2MDgsMTggQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0Vt
cHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1l
cmdlKHNldCk7Ci0gICAgICAgICAgICBpZiAoIXZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSB7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPSBiYXNlLmF0
dGVtcHRMb2FkKAorICAgICAgICAgICAgICAgIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAg
ICAgICAgbV9ncmFwaC5pZGVudGlmaWVycygpW25vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
aWRlbnRpZmllck51bWJlcl0pOworICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewog
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVz
dWx0OwogICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCiAgICAgICAgICAgICAgICAgbV9ncmFw
aCwKLSAgICAgICAgICAgICAgICAqbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVl
KCkpLAorICAgICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCiAg
ICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAg
ICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAkocmV2aXNpb24gMTcw
NzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzU2LDYgKzM1NiwxOSBAQCBGaWx0cmF0aW9uUmVzdWx0IEFic3Ry
YWN0VmFsdWU6Om5vcm1hbGl6CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorSlNWYWx1ZSBBYnN0
cmFjdFZhbHVlOjphdHRlbXB0TG9hZChQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIFN0cmluZ0ltcGwq
IHVpZCkKK3sKKyAgICBpZiAoIW1fdmFsdWUgfHwgIW1fdmFsdWUuaXNPYmplY3QoKSkKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmpl
Y3QobV92YWx1ZSk7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gb2JqZWN0LT5zdHJ1Y3R1cmUo
KS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQodWlkKTsKKyAgICBpZiAoIXNldCB8
fCAhc2V0LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAK
KyAgICByZXR1cm4gb2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KTsKK30KKwogI2lmICFBU1NFUlRf
RElTQUJMRUQKIHZvaWQgQWJzdHJhY3RWYWx1ZTo6Y2hlY2tDb25zaXN0ZW5jeSgpIGNvbnN0CiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAko
cmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw2ICszMjAsOCBAQCBzdHJ1Y3QgQWJzdHJh
Y3RWYWx1ZSB7CiAgICAgICAgICAgICB8fCAhYXJyYXlNb2Rlc0FyZUNsZWFyT3JUb3AobV9hcnJh
eU1vZGVzKTsKICAgICB9CiAgICAgCisgICAgSlNWYWx1ZSBhdHRlbXB0TG9hZChQcm9wZXJ0eU9m
ZnNldCwgU3RyaW5nSW1wbCogdWlkKTsKKyAgICAKICNpZiBBU1NFUlRfRElTQUJMRUQKICAgICB2
b2lkIGNoZWNrQ29uc2lzdGVuY3koKSBjb25zdCB7IH0KICAgICB2b2lkIGFzc2VydElzV2F0Y2hl
ZChHcmFwaCYpIGNvbnN0IHsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBh
dGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2gu
Y3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0
Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDggQEAgc3RhdGljIHZvaWQgcmVw
YXRjaEJ5SWRTZWxmQWNjZXNzKFZNJiB2bQogewogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZv
KCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCiAgICAgICAgIHZtLnJlZ2lz
dGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRk
V2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICAKKyAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgcHJvcGVydHlOYW1lKTsKIAogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCkBAIC0zNDMsOCArMzQ1LDExIEBA
IHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNh
c2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7
CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBj
dXJyU3RydWN0dXJlKTsKICAgICB9CiAgICAgCisgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAKICAg
ICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKICAgICBpZiAoY2hhaW4pIHsKICAgICAgICAgc3R1
YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2Ny
YXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMTYsNiArMTMxNiw4IEBAIGlubGluZSBib29sIEpT
T2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CisgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpOworICAgICAgICAg
ICAgCiAgICAgICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgb2JqZWN0cyBzdHJ1Y3R1cmUg
b25seSBoYXMgYSBzcGVjaWZpYyB2YWx1ZSBzZXQgaWYgcHJldmlvdXNseSB0aGVyZQogICAgICAg
ICAgICAgLy8gaGFkIGJlZW4gb25lIHNldCwgYW5kIGlmIHRoZSBuZXcgdmFsdWUgYmVpbmcgc3Bl
Y2lmaWVkIGlzIHRoZSBzYW1lIChvdGhlcndpc2Ugd2Ugd291bGQKICAgICAgICAgICAgIC8vIGhh
dmUgZGVzcGVjaWZpZWQsIGFib3ZlKS4gIFNvLCBpZiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiBp
cyBub3Qgc2V0LCBvciBpZiB0aGUgbmV3CkBAIC0xMzc2LDYgKzEzNzgsNyBAQCBpbmxpbmUgYm9v
bCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRN
b2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KHByb3Bl
cnR5TmFtZSk7CiAgICAgICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzIGhlcmU6
CiAgICAgICAgIC8vICAoMSkgVGhlcmUgaXMgYW4gZXhpc3Rpbmcgc3BlY2lmaWMgdmFsdWUgc2V0
LCBhbmQgd2UncmUgb3ZlcndyaXRpbmcgd2l0aCAqdGhlIHNhbWUgdmFsdWUqLgogICAgICAgICAv
LyAgICAgICAqIERvIG5vdGhpbmcgLSBubyBuZWVkIHRvIGRlc3BlY2lmeSwgYnV0IHRoYXQgbWVh
bnMgd2UgY2FuJ3QgY2FjaGUgKGEgY2FjaGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxMiwx
MSArODEyLDMwIEBAIHZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIHsK
ICAgICBBU1NFUlQoIWhhc1JhcmVEYXRhKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJl
RGF0YSA9IFN0cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGUodm0sIHByZXZpb3VzKCkpOworICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0
aGlzLCByYXJlRGF0YSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBzZXRIYXNS
YXJlRGF0YSh0cnVlKTsKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiB9CiAKK3ZvaWQgU3Ry
dWN0dXJlOjpzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAg
ICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0
YSgpOworICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cykgewor
ICAgICAgICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzID0KKyAgICAgICAg
ICAgIHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlUmFyZURhdGE6OlByb3BlcnR5V2F0Y2hwb2lu
dE1hcD4oKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICB9CisgICAgYXV0
byByZXN1bHQgPSByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzLmFkZChwcm9w
ZXJ0eU5hbWUudWlkKCksIG51bGxwdHIpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisg
ICAgICAgIHJldHVybjsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRvcHRSZWYobmV3
IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSk7Cit9CisKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NU
QVRTCiAKIHN0cnVjdCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzA3MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcxLDYgKzM3MSwxMCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4g
bV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKICAgICB9CisgICAgCisgICAgdm9pZCBzdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIHZv
aWQgZGlkUmVwbGFjZVByb3BlcnR5KFByb3BlcnR5TmFtZSk7CisgICAgV2F0Y2hwb2ludFNldCog
cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoU3RyaW5nSW1wbCopOwogCiAgICAgUGFz
c1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1cmVTaGFwZSgpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAko
cmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjMsNiArMjIzLDMxIEBAIEFMV0FZU19J
TkxJTkUgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGUKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRh
YmxlVW5zYWZlOwogfQogCitpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0
eShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQoreworICAgIGlmIChMSUtFTFkoIWhhc1JhcmVE
YXRhKCkpKQorICAgICAgICByZXR1cm47CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3BlcnR5
V2F0Y2hwb2ludE1hcCogbWFwID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRT
ZXRzLmdldCgpOworICAgIGlmIChMSUtFTFkoIW1hcCkpCisgICAgICAgIHJldHVybjsKKyAgICBX
YXRjaHBvaW50U2V0KiBzZXQgPSBtYXAuZ2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgaWYg
KExJS0VMWSghc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHNldC0+ZmlyZUFsbCgiUHJvcGVy
dHkgZGlkIGdldCByZXBsYWNlZCIpOworfQorCitpbmxpbmUgV2F0Y2hwb2ludFNldCogU3RydWN0
dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChTdHJpbmdJbXBsKiB1aWQpCit7
CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBpZiAoIWhhc1Jh
cmVEYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFdURjo6bG9hZExvYWRGZW5j
ZSgpOworICAgIFN0cnVjdHVyZVJhcmVEYXRhOjpQcm9wZXJ0eVdhdGNocG9pbnRNYXAqIG1hcCA9
IHJhcmVEYXRhKCktPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cy5nZXQoKTsKKyAgICBpZiAo
IW1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIG1hcC5nZXQodWlkKTsK
K30KKwogQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVy
dHlUYWJsZVVuc2FmZS5nZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNiArNDYsMTEgQEAgU3RydWN0dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJh
cmVEYXRhOjpjcgogICAgIHJldHVybiByYXJlRGF0YTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVSYXJl
RGF0YTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8U3RydWN0dXJl
UmFyZURhdGEqPihjZWxsKS0+U3RydWN0dXJlUmFyZURhdGE6On5TdHJ1Y3R1cmVSYXJlRGF0YSgp
OworfQorCiBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3RydWN0dXJlUmFyZURhdGEoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxsKHZtLCB2bS5zdHJ1Y3R1cmVSYXJlRGF0YVN0
cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNiArNDAsMTAgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgOiBwdWJsaWMgSlNDZWxs
IAogcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0YSogY3JlYXRlKFZNJiwgU3Ry
dWN0dXJlKik7CiAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1
ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7Cisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwogICAgIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUp
OwpAQCAtNTMsMTAgKzU3LDEyIEBAIHB1YmxpYzoKIAogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IqIGVudW1lcmF0aW9uQ2FjaGUoKTsKICAgICB2b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoVk0m
LCBjb25zdCBTdHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSk7
Ci0KKyAgICAKICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBTdHJ1Y3R1cmU7CisgICAgCiAgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBTdHJ1
Y3R1cmUqKTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdzOwpAQCAtNjQsNiAr
NzAsOSBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7
CiAgICAgV3JpdGVCYXJyaWVyPEpTU3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAg
V3JpdGVCYXJyaWVyPEpTUHJvcGVydHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsK
KyAgICAKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIFJlZlB0cjxXYXRjaHBvaW50
U2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0
eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0czsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234309</attachid>
            <date>2014-07-02 20:06:33 -0700</date>
            <delta_ts>2014-07-02 20:43:11 -0700</delta_ts>
            <desc>more!!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66888</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
NiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxl
eEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAg
Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAogICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWlu
Q291bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVu
dE9iamVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBo
ZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1
ZSA9IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5t
X29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAg
ICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
U2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9m
ZnNldCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwg
ZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
I2VuZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0g
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFy
aWFudC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAg
ICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50
Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBA
IC0yOTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZt
LCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdz
IHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2
ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0
cmVuZ2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1
cmUsIG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29m
ZnNldChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0
YXR1cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYg
QEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0
dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90
aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRl
cm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtODYsOSArODMsNiBAQCBi
b29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCFhcmVDb21w
YXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSAhPSBvdGhlci5t
X3NwZWNpZmljVmFsdWUpCi0gICAgICAgIG1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKLQog
ICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCkBA
IC0xMTIsOCArMTA2LDYgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRl
eHQpLCAiXSIpOwogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgIG91dC5wcmludCgi
LCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwg
Y29udGV4dCkpOwotICAgIGlmIChzcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIG91dC5wcmludCgi
LCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCkp
OwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBA
IHN0cnVjdCBEdW1wQ29udGV4dDsKIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAg
ICBHZXRCeUlkVmFyaWFudCgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKQEAgLTU4LDcg
KzU3LDYgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0K
ICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRl
QmFzZTsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzMsNyArNzEsNiBA
QCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKICAgICBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsOCArMjU0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsICpzdHViLT5tX2NhbGxM
aW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxleEdldFN0YXR1cy5jaGFpbigpLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQo
KSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzQsMTkgKzMzNCwxMyBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscyk7CiAKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVh
ZE9ubHkpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBzdG9y
aW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxp
emVkIHNsb3QuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTM4NCwyMiArMzc4LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkgb3B0
aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9u
IGlzIGNhY2hlZCB0by4KLSAgICAgICAgLy8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFsbG93
cyB1cyB0byBndWFyZCBhZ2FpbnN0IGEgdHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAgICAg
ICAgLy8gdmFsdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgc3RvcmluZyBh
IHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IHRoaXMgd291bGQgb25seSBiZSBhIHByb2Js
ZW0gaWYKLSAgICAgICAgLy8gICB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNw
ZWNpZmljIHZhbHVlIGFscmVhZHksIHNpbmNlIGlmIGl0IGRpZG4ndCwKLSAgICAgICAgLy8gICB0
aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZp
YyB2YWx1ZS4gSWYgaXQgZGlkCi0gICAgICAgIC8vICAgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB0
aGVuIHdlJ2xsIGtub3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAgICAgICAgLy8g
ICBzcGVjaWZpY1ZhbHVlIHdpbGwgdGVsbCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gLSBJ
ZiB3ZSdyZSBub3Qgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFnYWlu
LCB0aGlzIHdvdWxkIG9ubHkgYmUgYQotICAgICAgICAvLyAgIHByb2JsZW0gaWYgdGhlIGV4aXN0
aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hpY2ggd2UgY2hlY2sg
Zm9yCi0gICAgICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KICAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCAw
LCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gVGhpcyBvY2N1cnMgaW4gYml6YXJyZSBj
YXNlcyBvbmx5LiBTZWUgYWJvdmUuCi0gICAgICAgIEFTU0VSVCghdHJhbnNpdGlvbi0+dHJhbnNp
dGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJp
YW50KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2
IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0
cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uc3RhbnRDaGVja3MgPSBv
dGhlci5tX2NvbnN0YW50Q2hlY2tzOwogICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0
ZXJuYXRlQmFzZTsKLSAgICBtX3NwZWNpZmljVmFsdWUgPSBvdGhlci5tX3NwZWNpZmljVmFsdWU7
CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlu
a1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTc4LDcgKzc3LDcgQEAg
UHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogfQogCiBQdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSwKKyAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAog
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsK
QEAgLTg5LDcgKzg4LDYgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigK
ICAgICAgICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlw
ZSgpOwogICAgIH0KICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1f
c3BlY2lmaWNWYWx1ZSA9IHNwZWNpZmljVmFsdWU7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0
dXMgPSBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0yMjksOCArMjI3LDYgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4
dCksICJdIik7CiAgICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRl
QmFzZSksIGNvbnRleHQpKTsKLSAgICAgICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAg
ICAgIG91dC5wcmludCgiLCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KG1fc3BlY2lmaWNW
YWx1ZSwgY29udGV4dCkpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZz
ZXQpOwogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsK
ICAgICAgICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKICAgICAKICAg
ICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFs
dWUsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCiAgICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKICAgICAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KQEAgLTExNywxMiArMTE3LDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwogICAgIH0KICAgICAKLSAgICBK
U1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOwotICAgIH0KLSAg
ICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTQyLDcgKzEzNiw2IEBAIHByaXZh
dGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRl
QmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9p
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsNiBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmFkZChXYXRjaHBvaW50KiB3YXRjCiAgICAgbV9zdGF0ZSA9IElz
V2F0Y2hlZDsKIH0KIAotdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsKGNvbnN0IGNoYXIqIHJl
YXNvbikKLXsKLSAgICBmaXJlQWxsKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Ci19Ci0KIHZv
aWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ewogICAgIEFTU0VSVChzdGF0ZSgpID09IElzV2F0Y2hlZCk7CkBAIC04NSw2ICs4MCwxMSBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KGNvbnN0IEZpCiAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKIH0KIAordm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBj
aGFyKiByZWFzb24pCit7CisgICAgZmlyZUFsbFNsb3coU3RyaW5nRmlyZURldGFpbChyZWFzb24p
KTsKK30KKwogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmly
ZURldGFpbCYgZGV0YWlsKQogewogICAgIHdoaWxlICghbV9zZXQuaXNFbXB0eSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAx
NzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMTIgKzEzMSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBmaXJlQWxsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0
Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KGRldGFpbCk7
CiAgICAgfQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbChjb25zdCBj
aGFyKiByZWFzb24pOworICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCisgICAg
eworICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZmlyZUFsbFNsb3cocmVhc29uKTsKKyAgICB9CiAgICAgCiAgICAg
dm9pZCB0b3VjaChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewpAQCAtMTU3LDYgKzE2
Miw3IEBAIHB1YmxpYzoKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJl
dHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWlsJik7IC8vIENhbGwgb25seSBpZiB5b3UndmUg
Y2hlY2tlZCBpc1dhdGNoZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJlQWxsU2xv
dyhjb25zdCBjaGFyKiByZWFzb24pOyAvLyBEaXR0by4KICAgICAKIHByaXZhdGU6CiAgICAgdm9p
ZCBmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmlyZURldGFpbCYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg3LDE0
ICsxMzg3LDE2IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAg
ICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBzdWJ0bGU/CiAgICAgICAgICAgICAgICAg
QWJzdHJhY3RWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFz
dGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
Y29uc3RhbnRSZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRD
b25zdGFudFByb3BlcnR5KHZhbHVlLm1fdmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgICAgICAg
ICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCAqbV9n
cmFwaC5mcmVlemUoc3RhdHVzW2ldLnNwZWNpZmljVmFsdWUoKSksCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0xNTY5LDExICsxNTcxLDI3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0
cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUsIGRhdGEub2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3Vs
dCkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRDb25zdGFudChub2RlLCAqbV9ncmFw
aC5mcmVlemUocmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAg
ICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0
YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUsIGRhdGEub2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAmJiBqc0R5bmFtaWNDYXN0PEdldHRlclNldHRlcio+KHJlc3VsdCkpIHsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUu
Z2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNjAyLDE0ICsxNjIwLDE3IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChz
ZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFz
ZVNldC5tZXJnZShzZXQpOwotICAgICAgICAgICAgaWYgKCF2YXJpYW50LnNwZWNpZmljVmFsdWUo
KSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0K
KyAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS5tX3Zh
bHVlLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQp
IHsKICAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhp
c1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAgICAgICAgIG1f
Z3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNW
YWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQp
LAogICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAg
ICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNp
b24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NzIsMjEgKzE3NzIsMTQgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyBVbmxlc3Mgd2Ugd2FudCBidWdzIGxpa2Ug
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3ZSBuZWVkIHRv
CiAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdldF9ieV9pZCBp
cyBrZXB0IGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAogICAgIC8vIGFsbCBvZiB0aGUgc3Bl
Y3VsYXRpb25zLiBXZSBvbmx5IGluc2VydCB0aGUgUGhhbnRvbSBpZiB0aGVyZSBoYWQgYmVlbiBh
IENoZWNrU3RydWN0dXJlCi0gICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGJhc2Ug
Zm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLCBvciBpZiB0aGUKLSAgICAvLyBh
Y2Nlc3Mgd2FzIGNvbXBpbGVkIHRvIGEgV2Vha0pTQ29uc3RhbnQgc3BlY2lmaWMgdmFsdWUsIGlu
IHdoaWNoIGNhc2Ugd2UgbWlnaHQgbm90Ci0gICAgLy8gaGF2ZSBhbnkgZXhwbGljaXQgdXNlIG9m
IHRoZSBiYXNlIGF0IGFsbC4KLSAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkgfHwgb3Jp
Z2luYWxCYXNlICE9IGJhc2UpCisgICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGJh
c2UgZm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLgorICAgIGlmIChvcmlnaW5h
bEJhc2UgIT0gYmFzZSkKICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5hbEJhc2Up
OwogICAgIAotICAgIE5vZGUqIGxvYWRlZFZhbHVlOwotICAgIGlmICh2YXJpYW50LnNwZWNpZmlj
VmFsdWUoKSkKLSAgICAgICAgbG9hZGVkVmFsdWUgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LnNw
ZWNpZmljVmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxl
R2V0QnlPZmZzZXQoCi0gICAgICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVj
Q2VsbE90aGVyIDogcHJlZGljdGlvbiwKLSAgICAgICAgICAgIGJhc2UsIGlkZW50aWZpZXJOdW1i
ZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICB9CisgICAg
Tm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgdmFyaWFudC5j
YWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCisgICAgICAgIGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgIHZhcmlhbnQu
Y2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQp
OwogICAgIAogICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CiAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUpOwpAQCAt
MTk0OSwxNCArMTk0Miw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAg
ICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKICAgICAgICAgICAgIGJhc2UgPSB3
ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CiAgICAgICAgIAotICAgICAg
ICBOb2RlKiBsb2FkZWRWYWx1ZTsKLSAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgp
KQotICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSBo
YW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgICAgICBTcGVjQ2VsbE90aGVyLCBiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICAgICAgICAgIEdldEdl
dHRlclNldHRlckJ5T2Zmc2V0KTsKLSAgICAgICAgfQorICAgICAgICBOb2RlKiBsb2FkZWRWYWx1
ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwg
aWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgR2V0R2V0dGVyU2V0dGVyQnlPZmZz
ZXQpOwogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0
ZXIsIGxvYWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0yOTU4LDEwICsyOTQ1LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNr
KGdsb2JhbE9iamVjdCwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLm9ubHlTdHJ1Y3R1cmUoKSk7
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVy
KHNjb3BlKSkpOwotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBz
dGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmll
ck51bWJlciwgb3BlcmFuZCkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KSwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJl
ciwgb3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0yOTY5LDE2ICsyOTUzLDE2IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAg
ICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+
Z2V0KHVpZCk7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBv
aW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSA9CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0K
ICAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludFNldCA/IHdhdGNocG9pbnRTZXQtPmluZmVy
cmVkVmFsdWUoKSA6IEpTVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNwZWNpZmljVmFs
dWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUpIHsKICAgICAgICAgICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAg
ICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdl
dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8o
d2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZSkpOworICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdD
b25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDcsOCArNDA3LDggQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRCYXNlQ2hlY2soaW5k
ZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSB7Ci0gICAgICAgICAg
ICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhcmlhbnQu
c3BlY2lmaWNWYWx1ZSgpKSk7CisgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50
cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VWYWx1ZS5tX3ZhbHVlLCB2YXJpYW50Lm9mZnNldCgp
KSkgeworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBtX2dyYXBo
LmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3
MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03ODksNiArNzg5LDI2IEBAIHVuc2lnbmVkIEdyYXBoOjpyZXF1aXJlZFJlZ2lz
dGVyQ291bnRGb3IKICAgICByZXR1cm4gc3RkOjptYXgoZnJhbWVSZWdpc3RlckNvdW50KCksIHJl
cXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKSk7CiB9CiAKK0pTVmFsdWUgR3JhcGg6OnRyeUdl
dENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7
CisgICAgaWYgKCFiYXNlIHx8ICFpc09iamVjdChiYXNlKSkKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWUoKTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIFdh
dGNocG9pbnRTZXQqIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQob2Zmc2V0KTsKKyAgICBpZiAoIXNldCB8fCAhc2V0LT5pc1N0aWxsVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOworICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxl
RGljdGlvbmFyeSgpKTsKKyAgICAKKyAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShzZXQpOwor
ICAgIAorICAgIHJldHVybiBvYmplY3QtPmdldERpcmVjdChvZmZzZXQpOworfQorCiBKU0FjdGl2
YXRpb24qIEdyYXBoOjp0cnlHZXRBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJu
IG5vZGUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc5LDYgKzY3
OSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0
KCk7CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhp
dCgpOwogICAgIAorICAgIEpTVmFsdWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVlIGJh
c2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgCiAgICAgSlNBY3RpdmF0aW9uKiB0cnlH
ZXRBY3RpdmF0aW9uKE5vZGUqKTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB0cnlH
ZXRSZWdpc3RlcnMoTm9kZSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
cGF0Y2guY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNiArMTAxLDggQEAgc3RhdGljIHZv
aWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKFZNJiB2bQogewogICAgIGlmIChzdHJ1Y3R1cmUtPnR5
cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCiAgICAgICAgIHZt
LnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1Yklu
Zm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKKyAgICAKKyAgICBzdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgb2Zmc2V0KTsKIAogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCkBAIC0zNDMsOCArMzQ1LDExIEBA
IHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0dWIoCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNh
c2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7
CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBj
dXJyU3RydWN0dXJlKTsKICAgICB9CiAgICAgCisgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJS
ZWcgYmFzZUZvckFjY2Vzc0dQUjsKICAgICBpZiAoY2hhaW4pIHsKICAgICAgICAgc3R1YkppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQ
Uik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MSw4ICszNzEsNyBAQCB2b2lkIEpTT2JqZWN0Ojpw
dXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgSlNPYmplY3QqIG9iajsKICAgICBmb3IgKG9i
aiA9IHRoaXNPYmplY3Q7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkgewogICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewogICAgICAgICAgICAgICAgIEFT
U0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2Vw
dFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7
CkBAIC0xMjY3LDkgKzEyNjYsOCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0Nl
bGwqIGNlCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVsZXRl
KGV4ZWMpOwogCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNpZmlj
VmFsdWU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoaXNWYWxpZE9mZnNldCh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSkpKSB7CisgICAgaWYgKGlzVmFsaWRPZmZzZXQodGhpc09iamVjdC0+
c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKSkgewogICAg
ICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnREZWxldGUgJiYgIXZtLmlzSW5EZWZpbmVPd25Qcm9w
ZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB0aGlzT2JqZWN0LT5y
ZW1vdmVEaXJlY3Qodm0sIHByb3BlcnR5TmFtZSk7CkBAIC0xNDQ2LDIwICsxNDQ0LDYgQEAgYm9v
bCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsK
IH0KIAotYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkg
Y29uc3QKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIHVuc2lnbmVkIGF0dHJpYnV0
ZXM7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICAvLyBUaGlzIGNvdWxkIGJlIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBzdGF0aWMgdGFi
bGU/IC0gc2hvdWxkIHByb2JhYmx5Ci0gICAgLy8gYWxzbyBsb29rIGluIHRoZSBoYXNoPyAgVGhp
cyBjdXJyZW50bHkgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0sIHNpbmNlCi0gICAgLy8gd2UndmUg
Y3VycmVudGx5IGFsd2F5cyBjYWxsICdnZXQnIGZpcnN0LCB3aGljaCBzaG91bGQgaGF2ZSBwb3B1
bGF0ZWQKLSAgICAvLyB0aGUgbm9ybWFsIHN0b3JhZ2UuCi0gICAgcmV0dXJuIGZhbHNlOwotfQot
CiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9u
TW9kZSBtb2RlKQogewogICAgIHByb3BlcnR5TmFtZXMuc2V0QmFzZU9iamVjdChvYmplY3QpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAx
NzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OTEsOCArNDkxLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2Rl
KTsKIAotICAgIGJvb2wgZ2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikgY29uc3Q7Ci0KICAgICAvLyBUaGlz
IGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAgSlNWYWx1
ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogICAg
IHsKQEAgLTUwNCw5ICs1MDIsOCBAQCBwdWJsaWM6CiAKICAgICBKU1ZhbHVlIGdldERpcmVjdChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBj
b25zdAogICAgIHsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBz
cGVjaWZpYyk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZz
ZXQsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCA/IGdldERpcmVjdChvZmZzZXQpIDogSlNWYWx1ZSgpOwogICAgIH0K
QEAgLTUyMSw5ICs1MTgsOCBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJl
Y3RPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0
cmlidXRlcykKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWM7CiAgICAgICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWMpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgY2hlY2tPZmZzZXQo
b2Zmc2V0LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zm
c2V0OwogICAgIH0KQEAgLTEyMTMsOCArMTIwOSw3IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0
Ojpwcm90b3R5cGUoKSBjb24KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUmIHN0cnVj
dHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBzcGVjaWZpYzsKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUu
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmIChMSUtFTFkoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RGlyZWN0KG9m
ZnNldCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygp
ICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCkBAIC0xMjk1LDcgKzEyOTAsNyBAQCBpbmxpbmUg
SlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAKIHRlbXBsYXRlPEpTT2JqZWN0
OjpQdXRNb2RlIG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwo
Vk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTQ2VsbCogc3BlY2lmaWNGdW5j
dGlvbikKK2lubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFT
U0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3Nvcikp
OwpAQCAtMTMwNSwyNSArMTMwMCwxNSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwoCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0p
OwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVk
IGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIGN1cnJlbnRTcGVjaWZpY0Z1bmN0
aW9uOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVudFNwZWNpZmljRnVuY3Rpb24p
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52
YWxpZE9mZnNldCkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgc3Bl
Y2lmaWMgZnVuY3Rpb24sIGFuZCB0aGVyZSBub3cgZWl0aGVyIGlzbid0LAotICAgICAgICAgICAg
Ly8gb3IgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQsIHRoZW4gZGVzcGVjaWZ5LgotICAgICAg
ICAgICAgaWYgKGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uICYmIChzcGVjaWZpY0Z1bmN0aW9uICE9
IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRl
c3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcHV0RGlyZWN0
KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBv
YmplY3RzIHN0cnVjdHVyZSBvbmx5IGhhcyBhIHNwZWNpZmljIHZhbHVlIHNldCBpZiBwcmV2aW91
c2x5IHRoZXJlCi0gICAgICAgICAgICAvLyBoYWQgYmVlbiBvbmUgc2V0LCBhbmQgaWYgdGhlIG5l
dyB2YWx1ZSBiZWluZyBzcGVjaWZpZWQgaXMgdGhlIHNhbWUgKG90aGVyd2lzZSB3ZSB3b3VsZAot
ICAgICAgICAgICAgLy8gaGF2ZSBkZXNwZWNpZmllZCwgYWJvdmUpLiAgU28sIGlmIGN1cnJlbnRT
cGVjaWZpY0Z1bmN0aW9uIGlzIG5vdCBzZXQsIG9yIGlmIHRoZSBuZXcKLSAgICAgICAgICAgIC8v
IHZhbHVlIGlzIGRpZmZlcmVudCAob3IgdGhlcmUgaXMgbm8gbmV3IHZhbHVlKSwgdGhlbiB0aGUg
c2xvdCBub3cgaGFzIG5vIHZhbHVlIC0gYW5kCi0gICAgICAgICAgICAvLyBhcyBzdWNoIGl0IGlz
IGNhY2hhYmxlLgotICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIHByZXZpb3VzbHkgYSB2YWx1
ZSwgYW5kIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUsIHRoZW4gd2UgY2Fubm90IGNhY2hlLgot
ICAgICAgICAgICAgaWYgKCFjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiB8fCAoc3BlY2lmaWNGdW5j
dGlvbiAhPSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgc2xvdC5z
ZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUt
PmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBz
bG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAKQEAgLTEzMzQsMTUgKzEzMTksMTMgQEAgaW5saW5lIGJvb2wg
SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRl
cmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCktPnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jv
d091dE9mTGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0
eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFj
aXR5KCkpOwotICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1
bmN0aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCktPmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0dXJlKCksIG5ld0J1dHRl
cmZseSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJU
KHRoaXMtPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAvLyBTZWUgY29tbWVudCBvbiBzZXRO
ZXdQcm9wZXJ0eSBjYWxsIGJlbG93LgotICAgICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCi0g
ICAgICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHNs
b3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkKICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1Jl
YWRPbmx5UHJvcGVydGllcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzNTAsNyArMTMz
Myw3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+
c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
RnVuY3Rpb24sIG9mZnNldCkpIHsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3Ry
dWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgewogICAgICAgICBE
ZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5
ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMzYyLDQwICsxMzQ1LDE3IEBAIGlubGluZSBi
b29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVy
Zmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwg
b2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5z
aXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAot
ICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgotICAg
ICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCi0gICAgICAgICAgICBzbG90LnNldE5ld1Byb3Bl
cnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zm
c2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdW5zaWduZWQgY3VycmVu
dEF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbjsKLSAgICBv
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRl
cywgY3VycmVudFNwZWNpZmljRnVuY3Rpb24pOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9
IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1
cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKLSAgICAgICAg
Ly8gICgxKSBUaGVyZSBpcyBhbiBleGlzdGluZyBzcGVjaWZpYyB2YWx1ZSBzZXQsIGFuZCB3ZSdy
ZSBvdmVyd3JpdGluZyB3aXRoICp0aGUgc2FtZSB2YWx1ZSouCi0gICAgICAgIC8vICAgICAgICog
RG8gbm90aGluZyAtIG5vIG5lZWQgdG8gZGVzcGVjaWZ5LCBidXQgdGhhdCBtZWFucyB3ZSBjYW4n
dCBjYWNoZSAoYSBjYWNoZWQKLSAgICAgICAgLy8gICAgICAgICBwdXQgY291bGQgd3JpdGUgYSBk
aWZmZXJlbnQgdmFsdWUpLiBMZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgot
ICAgICAgICAvLyAgKDIpIFRoZXJlIGlzIGEgc3BlY2lmaWMgdmFsdWUgY3VycmVudGx5IHNldCwg
YnV0IHdlJ3JlIHdyaXRpbmcgYSBkaWZmZXJlbnQgdmFsdWUuCi0gICAgICAgIC8vICAgICAgICog
Rmlyc3QsIHdlIGhhdmUgdG8gZGVzcGVjaWZ5LiAgSGF2aW5nIGRvbmUgc28sIHRoaXMgaXMgbm93
IGEgcmVndWxhciBzbG90Ci0gICAgICAgIC8vICAgICAgICAgd2l0aCBubyBzcGVjaWZpYyB2YWx1
ZSwgc28gZ28gYWhlYWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAgICAgLy8gICgzKSBOb3Jt
YWwgY2FzZSwgdGhlcmUgaXMgbm8gc3BlY2lmaWMgdmFsdWUgc2V0LgotICAgICAgICAvLyAgICAg
ICAqIEdvIGFoZWFkICYgY2FjaGUgbGlrZSBub3JtYWwuCi0gICAgICAgIGlmIChjdXJyZW50U3Bl
Y2lmaWNGdW5jdGlvbikgewotICAgICAgICAgICAgLy8gY2FzZSAoMSkgRG8gdGhlIHB1dCwgdGhl
biByZXR1cm4gbGVhdmluZyB0aGUgc2xvdCB1bmNhY2hhYmxlLgotICAgICAgICAgICAgaWYgKHNw
ZWNpZmljRnVuY3Rpb24gPT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAgICAgICAg
ICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2FzZSAoMikgRGVzcGVjaWZ5
LCBmYWxsIHRocm91Z2ggdG8gKDMpLgotICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNhc2UgKDMpIHNldCB0aGUgc2xvdCwg
ZG8gdGhlIHB1dCwgcmV0dXJuLgorICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0
eShvZmZzZXQpOwogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0
KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC0xNDA0LDE3ICsxMzY0LDE0IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbnRlcm5hbCgKICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5z
aWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCwgc2xvdC5jb250ZXh0KCkpOworICAg
IHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSk7CiAg
ICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5p
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9y
YWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CiAKICAgICBwdXREaXJlY3Qodm0sIG9mZnNl
dCwgdmFsdWUpOwotICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdp
dGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAotICAgIC8vIHNv
IGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0gICAgaWYgKCFzcGVjaWZp
Y0Z1bmN0aW9uKQotICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Cisg
ICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1dGVz
ICYgUmVhZE9ubHkpCiAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3Bl
cnRpZXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMTcwNzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTQg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTc2LDEzICs3NiwxMSBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgU3RyaW5nSW1w
bCoga2V5OwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzOwotICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IHNwZWNpZmljVmFsdWU7CiAKLSAgICBQcm9w
ZXJ0eU1hcEVudHJ5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RyaW5nSW1wbCoga2V5LCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZSkKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RyaW5n
SW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAg
ICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAgICAsIGF0
dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgLCBzcGVjaWZpY1ZhbHVlKHZtLCBvd25lciwg
c3BlY2lmaWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46Ok1heUJlTnVsbCkKICAgICB7CiAg
ICAgfQogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIFN0cnVjdHVy
ZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmoKICAgICBzZXRIYXNSZWFkT25seU9yR2V0
dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKGNsYXNzSW5mby0+aGFzU3RhdGljU2V0
dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJv
cGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0
U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KDApOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25z
KGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRTdGF0aWNGdW5j
dGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIwMyw3ICsyMDIsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0pCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNF
eGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3Bl
cnRpZXModm0pKTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhmYWxzZSk7CiAg
ICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRo
cmFzaENvdW50KDApOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25zKGZhbHNlKTsKICAgICBzZXRE
aWRUcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKGZhbHNl
KTsKQEAgLTIzMiw3ICsyMzAsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIGNvbnN0
IFN0cnVjCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRp
bmdQcm90byhwcmV2aW91cy0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNs
dWRpbmdQcm90bygpKTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhwcmV2aW91
cy0+aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJl
dmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KHByZXZpb3VzLT5z
cGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSk7CiAgICAgc2V0UHJldmVudEV4dGVuc2lvbnMo
cHJldmlvdXMtPnByZXZlbnRFeHRlbnNpb25zKCkpOwogICAgIHNldERpZFRyYW5zaXRpb24odHJ1
ZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmllZChwcmV2aW91cy0+c3RhdGljRnVuY3Rp
b25zUmVpZmllZCgpKTsKQEAgLTMxNyw3ICszMTQsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChWCiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkodm0sIHRoaXMsIHN0cnVjdHVy
ZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJl
LT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJl
dmlvdXMuZ2V0KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHZtLCB0aGlzLCBz
dHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0
cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CiAgICAgICAgIHByb3BlcnR5VGFibGUo
KS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0
Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC0zMzYsMzAgKzMzMywxMiBAQCBzaXplX3QgU3Ry
dWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTCiAgICAgcmV0dXJuIG5leHRPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkob3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiB9CiAgCi12b2lkIFN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKLXsKLSAgICBTdHJpbmdJbXBsKiByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7Ci0K
LSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLQotICAgIEFTU0VSVChpc0RpY3Rpb25hcnkoKSk7
Ci0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7Ci0KLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBl
bnRyeSA9IHByb3BlcnR5VGFibGUoKS0+Z2V0KHJlcCk7Ci0gICAgQVNTRVJUKGVudHJ5KTsKLSAg
ICBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwotfQotCi1TdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFBy
b3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKIAogICAgIGlmIChT
dHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuZ2V0KHVpZCwgYXR0cmlidXRlcykpIHsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
SW5QcmV2aW91cyA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91
cy5nZXQoKTsKLSAgICAgICAgaWYgKHNwZWNpZmljVmFsdWVJblByZXZpb3VzICYmIHNwZWNpZmlj
VmFsdWVJblByZXZpb3VzICE9IHNwZWNpZmljVmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgdmFsaWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT5tX29mZnNldCwgZXhp
c3RpbmdUcmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgb2Zmc2V0ID0gZXhp
c3RpbmdUcmFuc2l0aW9uLT5tX29mZnNldDsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNp
dGlvbjsKQEAgLTM2OCwxNiArMzQ3LDE2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXQKICAgICByZXR1cm4gMDsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2Vs
bCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlv
blRocmVhZCgpKTsKLSAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0
cnVjdHVyZUltcGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljVmFsdWUsIG9mZnNldCk7CisgICAgcmV0dXJuIGFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpLCBhdHRy
aWJ1dGVzLCBvZmZzZXQpOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNp
ZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
cm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHN0cnVjdHVyZS0+bV9sb2NrKTsKLSAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
VmFsdWUsIG9mZnNldCk7CisgICAgcmV0dXJuIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgdWlkLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwogfQog
CiBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4ZWRBY2Nl
c3NlcygpIGNvbnN0CkBAIC00MzIsMjUgKzQxMSwxMiBAQCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24g
U3RydWN0dXJlOjpzdWdnZXN0CiAgICAgcmV0dXJuIEFsbG9jYXRlQXJyYXlTdG9yYWdlOwogfQog
Ci1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCwg
UHV0UHJvcGVydHlTbG90OjpDb250ZXh0IGNvbnRleHQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0
JiBvZmZzZXQsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBjb250ZXh0KQogewotICAgIC8vIElm
IHdlIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiwgd2UgbWF5IGhhdmUgZ290IHRvIHRoaXMgcG9p
bnQgaWYgdGhlcmUgaXMKLSAgICAvLyBhbHJlYWR5IGEgdHJhbnNpdGlvbiB3aXRoIHRoZSBjb3Jy
ZWN0IHByb3BlcnR5IG5hbWUgYW5kIGF0dHJpYnV0ZXMsIGJ1dAotICAgIC8vIHNwZWNpYWxpemVk
IHRvIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiAgSW4gdGhpcyBjYXNlIHdlIGp1c3Qgd2FudCB0byBn
aXZlIHVwCi0gICAgLy8gYW5kIGRlc3BlY2lhbGl6ZSB0aGUgdHJhbnNpdGlvbi4KLSAgICAvLyBJ
biB0aGlzIGNhc2Ugd2UgY2xlYXIgdGhlIHZhbHVlIG9mIHNwZWNpZmljRnVuY3Rpb24gd2hpY2gg
d2lsbCByZXN1bHQKLSAgICAvLyBpbiB1cyBhZGRpbmcgYSBub24tc3BlY2lmaWMgdHJhbnNpdGlv
biwgYW5kIGFueSBzdWJzZXF1ZW50IGxvb2t1cCBpbgotICAgIC8vIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSB3aWxsIGp1c3QgdXNlIHRoYXQuCi0g
ICAgaWYgKHNwZWNpZmljVmFsdWUgJiYgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5jb250
YWlucyhwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMpKQotICAgICAgICBzcGVjaWZpY1Zh
bHVlID0gMDsKLQogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CiAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUsIG9mZnNldCkpOworICAgIEFTU0VSVCgh
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKTsKICAgICAKLSAgICBpZiAo
c3RydWN0dXJlLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1
bmN0aW9uVGhyYXNoQ291bnQpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAgaW50
IG1heFRyYW5zaXRpb25MZW5ndGg7CiAgICAgaWYgKGNvbnRleHQgPT0gUHV0UHJvcGVydHlTbG90
OjpQdXRCeUlkKQogICAgICAgICBtYXhUcmFuc2l0aW9uTGVuZ3RoID0gc19tYXhUcmFuc2l0aW9u
TGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQ7CkBAIC00NTksNyArNDI1LDcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25Db3VudCgpID4gbWF4VHJhbnNpdGlvbkxlbmd0aCkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUp
OwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOwotICAgICAgICBvZmZz
ZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHJldHVybiB0cmFuc2l0aW9u
OwogICAgIH0KICAgICAKQEAgLTQ2OSwxMSArNDM1LDEwIEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPm1fbmFtZUluUHJldmlvdXMg
PSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRlc0luUHJl
dmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2
aW91cy5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHNwZWNpZmljVmFsdWUpOwogICAgIHRy
YW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+
dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0sIHRyYW5zaXRpb24pKTsKICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAKLSAgICBvZmZzZXQg
PSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1f
b2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB7CkBAIC01MTMsMzAg
KzQ3OCw2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmEKICAgICBy
ZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1
bmN0aW9uVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5h
bWUgcmVwbGFjZUZ1bmN0aW9uKQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPnNwZWNpZmljRnVu
Y3Rpb25UaHJhc2hDb3VudCgpIDwgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KTsKLSAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7Ci0KLSAgICB0
cmFuc2l0aW9uLT5zZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQodHJhbnNpdGlvbi0+c3Bl
Y2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgKyAxKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRy
YW5zaXRpb24pKTsKLSAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZz
ZXQ7Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7Ci0KLSAgICBpZiAodHJhbnNpdGlvbi0+c3BlY2lm
aWNGdW5jdGlvblRocmFzaENvdW50KCkgPT0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50
KQotICAgICAgICB0cmFuc2l0aW9uLT5kZXNwZWNpZnlBbGxGdW5jdGlvbnModm0pOwotICAgIGVs
c2UgewotICAgICAgICBib29sIHJlbW92ZWQgPSB0cmFuc2l0aW9uLT5kZXNwZWNpZnlGdW5jdGlv
bih2bSwgcmVwbGFjZUZ1bmN0aW9uKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVkLCBy
ZW1vdmVkKTsKLSAgICB9Ci0KLSAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5
KCk7Ci0gICAgcmV0dXJuIHRyYW5zaXRpb247Ci19Ci0KIFN0cnVjdHVyZSogU3RydWN0dXJlOjph
dHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwpAQCAtNzczLDE5ICs3MTQsMTYgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgIHJldHVybiB0aGlzOwogfQogCi1Qcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwq
IHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0
aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghZW51bWVyYXRpb25DYWNoZSgpKTsKIAotICAg
IGlmIChzcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9u
VGhyYXNoQ291bnQpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZv
clBpbm5pbmcodm0sIGRlZmVyR0MpOwogICAgIAogICAgIHBpbigpOwogCi0gICAgcmV0dXJuIHB1
dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1
ZSk7CisgICAgcmV0dXJuIHB1dCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIH0KIAog
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTgxMiwxMSArNzUwLDMyIEBA
IHZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIHsKICAgICBBU1NFUlQo
IWhhc1JhcmVEYXRhKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IFN0cnVj
dHVyZVJhcmVEYXRhOjpjcmVhdGUodm0sIHByZXZpb3VzKCkpOworICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CiAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCByYXJlRGF0
YSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBzZXRIYXNSYXJlRGF0YSh0cnVl
KTsKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlOjpzdGFy
dFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mIHZtLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQpCit7CisgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICAK
KyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIGFsbG9jYXRlUmFyZURhdGEodm0pOwor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgU3RydWN0dXJlUmFy
ZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKTsKKyAgICBpZiAoIXJhcmVEYXRhLT5t
X3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMpIHsKKyAgICAgICAgcmFyZURhdGEtPm1fcmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0cyA9CisgICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFN0cnVj
dHVyZVJhcmVEYXRhOjpQcm9wZXJ0eVdhdGNocG9pbnRNYXA+KCk7CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmFyZURhdGEtPm1fcmVw
bGFjZW1lbnRXYXRjaHBvaW50U2V0cy5hZGQob2Zmc2V0LCBudWxscHRyKTsKKyAgICBpZiAoIXJl
c3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXR1cm47CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOworfQorCiAjaWYg
RFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogCiBzdHJ1Y3QgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhp
dExvZ2dlciB7CkBAIC04NTksNyArODE4LDcgQEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpj
b3B5UHJvcGVydHlUYQogICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51bWJl
ck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAK
LVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1w
bCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkKK1By
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKIHsKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4g
c3RydWN0dXJlczsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKQEAgLTg3MSw3ICs4MzAsNiBA
QCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRsCiAgICAgICAgIFByb3Bl
cnR5TWFwRW50cnkqIGVudHJ5ID0gdGFibGUtPmdldCh1aWQpOwogICAgICAgICBpZiAoZW50cnkp
IHsKICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKLSAgICAgICAg
ICAgIHNwZWNpZmljVmFsdWUgPSBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5nZXQoKTsKICAgICAgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IHJlc3VsdCA9IGVudHJ5LT5vZmZzZXQ7CiAgICAgICAgICAgICBz
dHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBA
IC04ODUsMTQgKzg0MywxMyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJl
bnRsCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGF0dHJpYnV0ZXMg
PSBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCk7Ci0gICAgICAgIHNwZWNpZmljVmFs
dWUgPSBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCk7CiAgICAgICAg
IHJldHVybiBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIH0KICAgICAKICAgICByZXR1cm4gaW52
YWxpZE9mZnNldDsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYg
c3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNT
RVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKQEAgLTkwNywzOSArODY0LDEwIEBAIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHIKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Ci0gICAgc3BlY2lmaWNWYWx1
ZSA9IGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmdldCgpOwogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0
OwogfQogCi1ib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAg
ICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlm
ICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm9wZXJ0
eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQo
KSk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJU
KGVudHJ5LT5zcGVjaWZpY1ZhbHVlKTsKLSAgICBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5jbGVhcigp
OwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5QWxsRnVu
Y3Rpb25zKFZNJiB2bSkKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXBy
b3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUHJvcGVydHlUYWJsZTo6aXRl
cmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKLX0KLQotUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbHVlKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEdDU2FmZUNvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CiAgICAgCkBAIC05NTYsNyArODg0
LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbAogCiAgICAgUHJv
cGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5s
aW5lQ2FwYWNpdHkpOwogCi0gICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRy
eSh2bSwgdGhpcywgcmVwLCBuZXdPZmZzZXQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpLCBt
X29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNYXlDaGFuZ2UpOworICAgIHBy
b3BlcnR5VGFibGUoKS0+YWRkKFByb3BlcnR5TWFwRW50cnkodm0sIHRoaXMsIHJlcCwgbmV3T2Zm
c2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0
TWF5Q2hhbmdlKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIG5l
d09mZnNldDsKQEAgLTEwNjAsNyArOTg4LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZQogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9jYWNo
ZWRQcm90b3R5cGVDaGFpbik7CiAgICAgfQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0
LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7Ci0gICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwogCiAgICAgaWYgKHRoaXNPYmplY3QtPmlzUGlu
bmVkUHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3Byb3Bl
cnR5VGFibGVVbnNhZmUpOwpAQCAtMTA4Myw4ICsxMDEwLDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OnBy
b3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgICAgICBjdXJyZW50ID0gcHJvdG90eXBlLmFzQ2Vs
bCgpLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBjdXJyZW50LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3Bl
Y2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKCFKU0M6OmlzVmFs
aWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKQEAgLTEx
NDQsMTMgKzEwNzAsOCBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
CiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIg
PSB0YWJsZS0+YmVnaW4oKTsKICAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0g
dGFibGUtPmVuZCgpOwotICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKICAgICAgICAgICAgIG91dC5wcmludChj
b21tYSwgaXRlci0+a2V5LCAiOiIsIHN0YXRpY19jYXN0PGludD4oaXRlci0+b2Zmc2V0KSk7Ci0g
ICAgICAgICAgICBpZiAoaXRlci0+c3BlY2lmaWNWYWx1ZSkgewotICAgICAgICAgICAgICAgIER1
bXBDb250ZXh0IGR1bW15Q29udGV4dDsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnQoIj0+Iiwg
UmF3UG9pbnRlcihpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwog
ICAgIH0KQEAgLTExNjAsMTAgKzEwODEsNiBAQCB2b2lkIFN0cnVjdHVyZTo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjCiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91dC5wcmludChjb21tYSwgc3RydWN0dXJl
LT5tX25hbWVJblByZXZpb3VzLmdldCgpLCAiOiIsIHN0YXRpY19jYXN0PGludD4oc3RydWN0dXJl
LT5tX29mZnNldCkpOwotICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblBy
ZXZpb3VzKSB7Ci0gICAgICAgICAgICBEdW1wQ29udGV4dCBkdW1teUNvbnRleHQ7Ci0gICAgICAg
ICAgICBvdXQucHJpbnQoIj0+IiwgUmF3UG9pbnRlcihzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1
ZUluUHJldmlvdXMuZ2V0KCkpKTsKLSAgICAgICAgfQogICAgIH0KICAgICAKICAgICBvdXQucHJp
bnQoIn0sICIsIEluZGV4aW5nVHlwZUR1bXAoaW5kZXhpbmdUeXBlKCkpKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCShyZXZpc2lvbiAxNzA3MjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTExLDEyICsxMTEsMTEgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgZHVtcFN0
YXRpc3RpY3MoKTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFk
ZFByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYsIFB1
dFByb3BlcnR5U2xvdDo6Q29udGV4dCA9IFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQp
OwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFBy
b3BlcnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90
OjpVbmtub3duQ29udGV4dCk7CisgICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBTdHJpbmdJ
bXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJv
cGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9m
ZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVBy
b3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0g
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogZGVzcGVjaWZ5RnVuY3Rpb25U
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0Nh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKik7CkBAIC0xMzgsNyArMTM3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRlc3Ry
b3koSlNDZWxsKik7CiAKICAgICAvLyBUaGVzZSBzaG91bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24u
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0Nl
bGwqIHNwZWNpZmljVmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0
IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZVByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIHZvaWQgc2V0UHJvdG90eXBlV2l0aG91
dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQo
dm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAgCkBAIC0xODgsOCArMTg3LDYgQEAgcHVi
bGljOgogICAgIC8vIFdpbGwganVzdCB0aGUgcHJvdG90eXBlIGNoYWluIGludGVyY2VwdCB0aGlz
IHByb3BlcnR5IGFjY2Vzcz8KICAgICBib29sIHByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgICAgIAotICAgIGJvb2wgdHJhbnNpdGlvbkRp
ZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gISFtX3NwZWNpZmljVmFsdWVJ
blByZXZpb3VzOyB9Ci0gICAgICAgIAogICAgIFN0cnVjdHVyZSogcHJldmlvdXNJRCgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8o
KSk7CkBAIC0yNjMsMTAgKzI2MCwxMCBAQCBwdWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBn
ZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIGNvbnN0
IFdURjo6U3RyaW5nJiBuYW1lKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNl
dCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBz
cGVjaWZpY1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBnZXQo
Vk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKTsKIAogICAgIFByb3BlcnR5
T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgUHJvcGVy
dHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYg
YXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVydHlPZmZzZXQg
Z2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRl
cyk7CiAKICAgICB2b2lkIHNldEhhc0dldHRlclNldHRlclByb3BlcnRpZXNXaXRoUHJvdG9DaGVj
ayhib29sIGlzX19wcm90b19fKQogICAgIHsKQEAgLTI4Myw5ICsyODAsNiBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiAhSlNDOjppc1ZhbGlkT2Zmc2V0KG1fb2Zmc2V0KTsKICAgICB9CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihWTSYs
IFByb3BlcnR5TmFtZSk7Ci0gICAgdm9pZCBkaXNhYmxlU3BlY2lmaWNGdW5jdGlvblRyYWNraW5n
KCkgeyBzZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQobWF4U3BlY2lmaWNGdW5jdGlvblRo
cmFzaENvdW50KTsgfQotCiAgICAgdm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSk7IC8vIERlZmluZWQgaW4gSlNQcm9w
ZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0
aW9uQ2FjaGUoKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCiAgICAg
dm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYsIFByb3BlcnR5TmFtZUFycmF5
JiwgRW51bWVyYXRpb25Nb2RlKTsKQEAgLTM2NCwxMyArMzU4LDE3IEBAIHB1YmxpYzoKICAgICAg
ICAgQVNTRVJUKHRyYW5zaXRpb25XYXRjaHBvaW50U2V0SXNTdGlsbFZhbGlkKCkpOwogICAgICAg
ICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmFkZCh3YXRjaHBvaW50KTsKICAgICB9Ci0gICAg
ICAgIAorICAgIAogICAgIHZvaWQgbm90aWZ5VHJhbnNpdGlvbkZyb21UaGlzU3RydWN0dXJlKCkg
Y29uc3Q7CiAgICAgCiAgICAgSW5saW5lV2F0Y2hwb2ludFNldCYgdHJhbnNpdGlvbldhdGNocG9p
bnRTZXQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fdHJhbnNpdGlvbldhdGNocG9p
bnRTZXQ7CiAgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKFZNJiwgUHJvcGVydHlPZmZzZXQpOworICAgIHZvaWQgZGlkUmVwbGFjZVByb3Bl
cnR5KFByb3BlcnR5T2Zmc2V0KTsKKyAgICBXYXRjaHBvaW50U2V0KiBwcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNldCk7CiAKICAgICBQYXNzUmVmUHRyPFN0cnVj
dHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKCk7CiAgICAgCkBAIC00MDYsNyArNDA0LDYgQEAg
cHVibGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJv
cGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIEhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzLCAx
LCA1KTsKICAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIGF0dHJpYnV0ZXNJblByZXZpb3Vz
LCBBdHRyaWJ1dGVzSW5QcmV2aW91cywgMTQsIDYpOwotICAgIERFRklORV9CSVRGSUVMRCh1bnNp
Z25lZCwgc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50LCBTcGVjaWZpY0Z1bmN0aW9uVGhyYXNo
Q291bnQsIDIsIDIwKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJldmVudEV4dGVuc2lv
bnMsIFByZXZlbnRFeHRlbnNpb25zLCAxLCAyMik7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2ws
IGRpZFRyYW5zaXRpb24sIERpZFRyYW5zaXRpb24sIDEsIDIzKTsKICAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgc3RhdGljRnVuY3Rpb25zUmVpZmllZCwgU3RhdGljRnVuY3Rpb25zUmVpZmllZCwg
MSwgMjQpOwpAQCAtNDIxLDcgKzQxOCw3IEBAIHByaXZhdGU6CiAKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsKICAgICAKLSAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1
Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQ
cm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqLCBTdHJp
bmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CiAKICAg
ICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzdHJ1Y3R1cmUgdGhhdCBoYXMgYSB1c2FibGUgcHJv
cGVydHkgdGFibGUsIHRoYXQgcHJvcGVydHkgdGFibGUsCiAgICAgLy8gYW5kIHRoZSBsaXN0IG9m
IHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3QgdG8gaXQuIElmIGl0IHJl
dHVybnMgYQpAQCAtNDMxLDE1ICs0MjgsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMg
U3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlv
bmFyeUtpbmQpOwogCi0gICAgUHJvcGVydHlPZmZzZXQgcHV0U3BlY2lmaWNWYWx1ZShWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsK
KyAgICBQcm9wZXJ0eU9mZnNldCBwdXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOwogCiAgICAg
dm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwg
Vk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgp
OwogCi0gICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7Ci0gICAg
dm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0mKTsKLQogICAgIFdyaXRlQmFycmllcjxQcm9w
ZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwogICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9w
ZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiwgU3RydWN0dXJlKiBvd25lcik7CiAgICAgUHJv
cGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKQEAg
LTUwNyw4ICs1MDEsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFu
c2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25M
ZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwotICAgIAogICAgIC8vIFRoZXNl
IG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAnU3Ry
dWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAgICBTdHJ1Y3R1cmVJREJsb2Ig
bV9ibG9iOwpAQCAtNTIxLDcgKzUxMyw2IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9wcmV2aW91c09yUmFyZURhdGE7CiAKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9u
YW1lSW5QcmV2aW91czsKLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3NwZWNpZmljVmFsdWVJ
blByZXZpb3VzOwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAko
cmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSArMTAyLDcgQEAgaW5saW5lIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJgogaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiB2bSwgU3RyaW5nSW1wbCogdWlkKQogewogICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZUln
bm9yZWQ7Ci0gICAgcmV0dXJuIGdldENvbmN1cnJlbnRseSgKLSAgICAgICAgdm0sIHVpZCwgYXR0
cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWVJZ25vcmVkKTsKKyAgICByZXR1cm4gZ2V0Q29u
Y3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkKTsKIH0KIAogaW5saW5lIGJvb2wg
U3RydWN0dXJlOjpoYXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0CkBA
IC0yMjMsNiArMjIxLDMxIEBAIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFi
bGUKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogfQogCitpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7Cisg
ICAgaWYgKExJS0VMWSghaGFzUmFyZURhdGEoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJ1
Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSByYXJlRGF0YSgpLT5t
X3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYgKExJS0VMWSghbWFwKSkK
KyAgICAgICAgcmV0dXJuOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1hcC5nZXQob2Zmc2V0
KTsKKyAgICBpZiAoTElLRUxZKCFzZXQpKQorICAgICAgICByZXR1cm47CisgICAgc2V0LT5maXJl
QWxsKCJQcm9wZXJ0eSBkaWQgZ2V0IHJlcGxhY2VkIik7Cit9CisKK2lubGluZSBXYXRjaHBvaW50
U2V0KiBTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5
T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
V1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3BlcnR5V2F0
Y2hwb2ludE1hcCogbWFwID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRz
LmdldCgpOworICAgIGlmICghbWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1
cm4gbWFwLmdldChvZmZzZXQpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpj
aGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiBwcm9w
ZXJ0eVRhYmxlID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBTdHJ1Y3R1cmVS
YXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNyCiAgICAgcmV0dXJuIHJhcmVEYXRhOwogfQog
Cit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBz
dGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5TdHJ1Y3R1cmVSYXJlRGF0YTo6
flN0cnVjdHVyZVJhcmVEYXRhKCk7Cit9CisKIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVS
YXJlRGF0YShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwodm0sIHZt
LnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAx
NzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJl
RGF0YSA6IHB1YmxpYyBKU0NlbGwgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZVJhcmVE
YXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFs
U3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CkBAIC01MywxMCArNTcsMTIgQEAgcHVibGljOgogCiAgICAg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOwogICAgIHZvaWQgc2V0
RW51bWVyYXRpb25DYWNoZShWTSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqIHZhbHVlKTsKLQorICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
IHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKKyAgICAKICAgICBTdHJ1Y3R1
cmVSYXJlRGF0YShWTSYsIFN0cnVjdHVyZSopOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0
dXJlRmxhZ3M7CkBAIC02NCw2ICs3MCw5IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9wcmV2aW91czsKICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0
VG9TdHJpbmdWYWx1ZTsKICAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4g
bV9lbnVtZXJhdGlvbkNhY2hlOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9m
ZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+LCBVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czxQcm9wZXJ0eU9mZnNldD4+IFByb3BlcnR5V2F0Y2hwb2ludE1hcDsKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UHJvcGVydHlXYXRjaHBvaW50TWFwPiBtX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHM7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234313</attachid>
            <date>2014-07-02 20:43:11 -0700</date>
            <delta_ts>2014-07-02 21:44:43 -0700</delta_ts>
            <desc>getting further</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>76481</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
NiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxl
eEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAg
Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAogICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWlu
Q291bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVu
dE9iamVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBo
ZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1
ZSA9IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5t
X29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAg
ICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
U2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9m
ZnNldCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwg
ZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
I2VuZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0g
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFy
aWFudC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAg
ICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50
Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBA
IC0yOTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZt
LCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdz
IHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2
ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0
cmVuZ2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1
cmUsIG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29m
ZnNldChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0
YXR1cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYg
QEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0
dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90
aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRl
cm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtODYsOSArODMsNiBAQCBi
b29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCFhcmVDb21w
YXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSAhPSBvdGhlci5t
X3NwZWNpZmljVmFsdWUpCi0gICAgICAgIG1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKLQog
ICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCkBA
IC0xMTIsOCArMTA2LDYgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRl
eHQpLCAiXSIpOwogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgIG91dC5wcmludCgi
LCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwg
Y29udGV4dCkpOwotICAgIGlmIChzcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIG91dC5wcmludCgi
LCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCkp
OwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBA
IHN0cnVjdCBEdW1wQ29udGV4dDsKIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAg
ICBHZXRCeUlkVmFyaWFudCgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKQEAgLTU4LDcg
KzU3LDYgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0K
ICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRl
QmFzZTsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzMsNyArNzEsNiBA
QCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKICAgICBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsOCArMjU0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsICpzdHViLT5tX2NhbGxM
aW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxleEdldFN0YXR1cy5jaGFpbigpLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQo
KSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzQsMTkgKzMzNCwxMyBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscyk7CiAKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVh
ZE9ubHkpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBzdG9y
aW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxp
emVkIHNsb3QuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTM4NCwyMiArMzc4LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkgb3B0
aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9u
IGlzIGNhY2hlZCB0by4KLSAgICAgICAgLy8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFsbG93
cyB1cyB0byBndWFyZCBhZ2FpbnN0IGEgdHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAgICAg
ICAgLy8gdmFsdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgc3RvcmluZyBh
IHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IHRoaXMgd291bGQgb25seSBiZSBhIHByb2Js
ZW0gaWYKLSAgICAgICAgLy8gICB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNw
ZWNpZmljIHZhbHVlIGFscmVhZHksIHNpbmNlIGlmIGl0IGRpZG4ndCwKLSAgICAgICAgLy8gICB0
aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZp
YyB2YWx1ZS4gSWYgaXQgZGlkCi0gICAgICAgIC8vICAgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB0
aGVuIHdlJ2xsIGtub3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAgICAgICAgLy8g
ICBzcGVjaWZpY1ZhbHVlIHdpbGwgdGVsbCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gLSBJ
ZiB3ZSdyZSBub3Qgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFnYWlu
LCB0aGlzIHdvdWxkIG9ubHkgYmUgYQotICAgICAgICAvLyAgIHByb2JsZW0gaWYgdGhlIGV4aXN0
aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hpY2ggd2UgY2hlY2sg
Zm9yCi0gICAgICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KICAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCAw
LCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gVGhpcyBvY2N1cnMgaW4gYml6YXJyZSBj
YXNlcyBvbmx5LiBTZWUgYWJvdmUuCi0gICAgICAgIEFTU0VSVCghdHJhbnNpdGlvbi0+dHJhbnNp
dGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9m
ZnNldCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJp
YW50KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2
IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0
cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uc3RhbnRDaGVja3MgPSBv
dGhlci5tX2NvbnN0YW50Q2hlY2tzOwogICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0
ZXJuYXRlQmFzZTsKLSAgICBtX3NwZWNpZmljVmFsdWUgPSBvdGhlci5tX3NwZWNpZmljVmFsdWU7
CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlu
a1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2Fs
bExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTc4LDcgKzc3LDcgQEAg
UHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogfQogCiBQdXRCeUlkVmFy
aWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSwKKyAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAog
ICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExp
bmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsK
QEAgLTg5LDcgKzg4LDYgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigK
ICAgICAgICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlw
ZSgpOwogICAgIH0KICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1f
c3BlY2lmaWNWYWx1ZSA9IHNwZWNpZmljVmFsdWU7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0
dXMgPSBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBA
IC0yMjksOCArMjI3LDYgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4
dCksICJdIik7CiAgICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRl
QmFzZSksIGNvbnRleHQpKTsKLSAgICAgICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAg
ICAgIG91dC5wcmludCgiLCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KG1fc3BlY2lmaWNW
YWx1ZSwgY29udGV4dCkpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZz
ZXQpOwogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsK
ICAgICAgICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKICAgICAKICAg
ICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFs
dWUsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCiAgICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKICAgICAKICAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KQEAgLTExNywxMiArMTE3LDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwogICAgIH0KICAgICAKLSAgICBK
U1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOwotICAgIH0KLSAg
ICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdAogICAgIHsKICAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTQyLDcgKzEzNiw2IEBAIHByaXZh
dGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRl
QmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9p
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsNiBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmFkZChXYXRjaHBvaW50KiB3YXRjCiAgICAgbV9zdGF0ZSA9IElz
V2F0Y2hlZDsKIH0KIAotdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsKGNvbnN0IGNoYXIqIHJl
YXNvbikKLXsKLSAgICBmaXJlQWxsKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Ci19Ci0KIHZv
aWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ewogICAgIEFTU0VSVChzdGF0ZSgpID09IElzV2F0Y2hlZCk7CkBAIC04NSw2ICs4MCwxMSBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KGNvbnN0IEZpCiAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKIH0KIAordm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBj
aGFyKiByZWFzb24pCit7CisgICAgZmlyZUFsbFNsb3coU3RyaW5nRmlyZURldGFpbChyZWFzb24p
KTsKK30KKwogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmly
ZURldGFpbCYgZGV0YWlsKQogewogICAgIHdoaWxlICghbV9zZXQuaXNFbXB0eSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAx
NzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMTIgKzEzMSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBmaXJlQWxsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0
Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KGRldGFpbCk7
CiAgICAgfQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbChjb25zdCBj
aGFyKiByZWFzb24pOworICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCisgICAg
eworICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZmlyZUFsbFNsb3cocmVhc29uKTsKKyAgICB9CiAgICAgCiAgICAg
dm9pZCB0b3VjaChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewpAQCAtMTU3LDYgKzE2
Miw3IEBAIHB1YmxpYzoKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJl
dHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWlsJik7IC8vIENhbGwgb25seSBpZiB5b3UndmUg
Y2hlY2tlZCBpc1dhdGNoZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJlQWxsU2xv
dyhjb25zdCBjaGFyKiByZWFzb24pOyAvLyBEaXR0by4KICAgICAKIHByaXZhdGU6CiAgICAgdm9p
ZCBmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmlyZURldGFpbCYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5n
T2JqZWN0LmgiCkBAIC0xMzg3LDE0ICsxMzg4LDE3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBzdWJ0
bGU/CiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5hbHRlcm5h
dGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2
YWx1ZS5tX3ZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbnN0YW50UmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubWFr
ZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgKm1fZ3JhcGguZnJlZXplKHN0YXR1
c1tpXS5zcGVjaWZpY1ZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
Km1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTU2OSwxMSAr
MTU3MywyNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CisgICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdl
dENvbnN0YW50UHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5t
X3ZhbHVlLCBkYXRhLm9mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VI
ZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBkYXRhID0g
bV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgo
KV07CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3Bl
cnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV92YWx1ZSwgZGF0YS5v
ZmZzZXQpOworICAgICAgICBpZiAocmVzdWx0ICYmIGpzRHluYW1pY0Nhc3Q8R2V0dGVyU2V0dGVy
Kj4ocmVzdWx0KSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJl
ZXplKHJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5nZXR0ZXJTZXR0
ZXJTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNjAyLDE0ICsx
NjIyLDIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAg
ICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwotICAgICAgICAgICAgaWYgKCF2YXJpYW50LnNw
ZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlIGJhc2VG
b3JMb2FkOworICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQorICAgICAg
ICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1fdmFsdWU7Cisg
ICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KKyAgICAgICAgICAgICAgICBtX2dy
YXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQub2Zmc2V0KCkp
OworICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewogICAgICAgICAgICAgICAgIHJl
c3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwogICAgICAgICAgICAg
dGhpc1Jlc3VsdC5zZXQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAgICAg
ICAqbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpLAorICAgICAgICAgICAg
ICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCiAgICAgICAgICAgICAgICAgbV9z
dGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgICAgICByZXN1bHQubWVyZ2Uo
dGhpc1Jlc3VsdCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTY3OCw2ICsxNjc4LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50
SW50ZXIKIAogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7CisgICAgaWYgKGJhc2UtPmhh
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRy
eUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIG9mZnNldCkpIHsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gd2Vh
a0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAgIAogICAgIE5vZGUq
IHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAg
ICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKQEAgLTE3NzIsMjEgKzE3NzksMTQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyBVbmxlc3Mgd2Ugd2FudCBidWdz
IGxpa2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3ZSBu
ZWVkIHRvCiAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdldF9i
eV9pZCBpcyBrZXB0IGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAogICAgIC8vIGFsbCBvZiB0
aGUgc3BlY3VsYXRpb25zLiBXZSBvbmx5IGluc2VydCB0aGUgUGhhbnRvbSBpZiB0aGVyZSBoYWQg
YmVlbiBhIENoZWNrU3RydWN0dXJlCi0gICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhl
IGJhc2UgZm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLCBvciBpZiB0aGUKLSAg
ICAvLyBhY2Nlc3Mgd2FzIGNvbXBpbGVkIHRvIGEgV2Vha0pTQ29uc3RhbnQgc3BlY2lmaWMgdmFs
dWUsIGluIHdoaWNoIGNhc2Ugd2UgbWlnaHQgbm90Ci0gICAgLy8gaGF2ZSBhbnkgZXhwbGljaXQg
dXNlIG9mIHRoZSBiYXNlIGF0IGFsbC4KLSAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkg
fHwgb3JpZ2luYWxCYXNlICE9IGJhc2UpCisgICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4g
dGhlIGJhc2UgZm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLgorICAgIGlmIChv
cmlnaW5hbEJhc2UgIT0gYmFzZSkKICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5h
bEJhc2UpOwogICAgIAotICAgIE5vZGUqIGxvYWRlZFZhbHVlOwotICAgIGlmICh2YXJpYW50LnNw
ZWNpZmljVmFsdWUoKSkKLSAgICAgICAgbG9hZGVkVmFsdWUgPSB3ZWFrSlNDb25zdGFudCh2YXJp
YW50LnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxvYWRlZFZhbHVlID0g
aGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkg
PyBTcGVjQ2VsbE90aGVyIDogcHJlZGljdGlvbiwKLSAgICAgICAgICAgIGJhc2UsIGlkZW50aWZp
ZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICB2YXJpYW50LmNhbGxMaW5r
U3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICB9
CisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgdmFy
aWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCisgICAg
ICAgIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgIHZh
cmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlP
ZmZzZXQpOwogICAgIAogICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1cygpKSB7CiAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwgbG9hZGVkVmFsdWUp
OwpAQCAtMTk0OSwxNCArMTk0OSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5
SWQoCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKICAgICAgICAgICAgIGJh
c2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7CiAgICAgICAgIAot
ICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKLSAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNW
YWx1ZSgpKQotICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50
LnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbG9hZGVkVmFs
dWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgICAgICBTcGVjQ2VsbE90aGVyLCBi
YXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICAgICAgICAg
IEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKLSAgICAgICAgfQorICAgICAgICBOb2RlKiBsb2Fk
ZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwg
YmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgR2V0R2V0dGVyU2V0dGVy
QnlPZmZzZXQpOwogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChH
ZXRTZXR0ZXIsIGxvYWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0yOTU4LDEwICsyOTUyLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVy
ZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLm9ubHlTdHJ1Y3R1
cmUoKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSkpOwotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHNwZWNpZmljVmFs
dWUgPSBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxs
KCkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRl
bnRpZmllck51bWJlciwgb3BlcmFuZCkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmll
ck51bWJlciwgb3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0yOTY5LDE2ICsyOTYwLDE2IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAg
ICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFi
bGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwotICAgICAgICAgICAgICAgIEpT
VmFsdWUgc3BlY2lmaWNWYWx1ZSA9CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpbmZlcnJlZFZh
bHVlID0KICAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludFNldCA/IHdhdGNocG9pbnRTZXQt
PmluZmVycmVkVmFsdWUoKSA6IEpTVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNwZWNp
ZmljVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUpIHsKICAgICAg
ICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24o
KTsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dy
YXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBP
cEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZSkpOworICAgICAgICAgICAgICAg
IHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2Fz
ZSBDbG9zdXJlVmFyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFu
dEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MDcsOCArNDA3LDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkQmFzZUNo
ZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgp
KTsKICAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewotICAg
ICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2
YXJpYW50LnNwZWNpZmljVmFsdWUoKSkpOworICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOwor
ICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCisgICAgICAgICAgICBiYXNlRm9y
TG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBiYXNlRm9yTG9hZCA9IGJhc2VWYWx1ZS5tX3ZhbHVlOworICAgICAgICBpZiAoSlNWYWx1ZSB2
YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlRm9yTG9hZCwgdmFyaWFu
dC5vZmZzZXQoKSkpIHsKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9k
ZSwgbV9ncmFwaC5mcmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBo
YXNlLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4NiwyMiArMTI4NiwyMyBAQCBw
cml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1N0
cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1
cmUsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2Fu
ZShTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZSwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJpbmdQcm90b3R5cGUtPnN0cnVjdHVyZSgp
OworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc1VudXNlZDsKLSAgICAgICAg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgICAgIHZt
KCksIHVpZCwgYXR0cmlidXRlc1VudXNlZCwgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtKCksIHVpZCwg
YXR0cmlidXRlc1VudXNlZCk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzcGVjaWZp
Y1ZhbHVlKQorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFBy
b3BlcnR5KHN0cmluZ1Byb3RvdHlwZSwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghc3BlY2lmaWNW
YWx1ZS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSkKKyAgICAgICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSk7CisgICAgICAgIGlm
ICghZnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4oc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgIGlmIChmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pbnRyaW5zaWNGb3IoQ29k
ZUZvckNhbGwpICE9IFN0cmluZ1Byb3RvdHlwZVZhbHVlT2ZJbnRyaW5zaWMpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAtMTMzMCw5ICsxMzMxLDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgLy8gKHRoYXQgd291bGQgY2FsbCB0b1N0cmluZygpKS4gV2UgZG9uJ3Qgd2FudCB0
aGUgREZHIHRvIGhhdmUgdG8gZGlzdGluZ3Vpc2gKICAgICAgICAgLy8gYmV0d2VlbiB0aGUgdHdv
LCBqdXN0IGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGdldCBjb25mdXNpbmcuIFNv
IHdlCiAgICAgICAgIC8vIGp1c3QgcmVxdWlyZSBib3RoIG1ldGhvZHMgdG8gYmUgc2FuZS4KLSAg
ICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3Ry
dWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpKSkKKyAgICAgICAgaWYg
KCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlT2JqZWN0LCB2bSgp
LnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90
eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKSkpCisgICAg
ICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlwZU9iamVj
dCwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSw2
ICs3ODksMjYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvcgogICAg
IHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291bnQoKSwgcmVxdWlyZWRSZWdpc3RlckNv
dW50Rm9yRXhpdCgpKTsKIH0KIAorSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShKU1ZhbHVlIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBpZiAoIWJhc2Ug
fHwgIWJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAg
ICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFzZSk7CisgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAgIAorICAgIFdhdGNocG9pbnRTZXQqIHNl
dCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsK
KyAgICBpZiAoIXNldCB8fCAhc2V0LT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpOworICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsK
KyAgICAKKyAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShzZXQpOworICAgIAorICAgIHJldHVy
biBvYmplY3QtPmdldERpcmVjdChvZmZzZXQpOworfQorCiBKU0FjdGl2YXRpb24qIEdyYXBoOjp0
cnlHZXRBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUtPmR5bmFtaWND
YXN0Q29uc3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsKQEAgLTkwMCw3ICs5MjAsNiBAQCB2b2lkIEdy
YXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBjYXNlIE11bHRp
R2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVs
dGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAg
ICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0
RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVT
ZXQoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsg
ai0tOykKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRS
ZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc5LDYgKzY3OSw4IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCk7CiAgICAgdW5zaWduZWQgcmVx
dWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5kRXhpdCgpOwogICAgIAorICAgIEpTVmFs
dWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVlIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCk7CisgICAgCiAgICAgSlNBY3RpdmF0aW9uKiB0cnlHZXRBY3RpdmF0aW9uKE5vZGUqKTsK
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB0cnlHZXRSZWdpc3RlcnMoTm9kZSopOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjM0LDggKzMyMzQsMTMg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAg
ICAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhcmlhbnQuc3BlY2lmaWNW
YWx1ZSgpKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0OworICAgICAgICAg
ICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3Rh
bnRSZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCisgICAgICAgICAgICAg
ICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb25zdGFudFJlc3VsdCkKKyAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudFJlc3Vs
dCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5
QmFzZTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwMSw2ICsxMDEsOCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoVk0mIHZt
CiB7CiAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVz
V2F0Y2hwb2ludHMoKSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJv
cGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwor
ICAgIAorICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KHZtLCBvZmZzZXQpOwogCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7CiAKQEAgLTM0Myw4ICszNDUsMTEgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVCeUlkU3R1YigK
ICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAg
Y3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQocHJv
dG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOwogICAgIH0KICAgICAKKyAg
ICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZt
LCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOwogICAgIGlmIChj
aGFpbikgewogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTUg
KzU1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBBcnJheUNvbnZlbnRpb25zLmguCiBzdGF0aWMg
dW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CiAKLUpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RT
bG93KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBpZiAoY2VsbC0+dHlwZSgpID09IEpTRnVuY3Rpb25U
eXBlKQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPmNs
YXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoSW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkKLSAgICAg
ICAgcmV0dXJuIGNlbGw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIFNUQVRJQ19BU1NFUlRfSVNfVFJJ
VklBTExZX0RFU1RSVUNUSUJMRShKU09iamVjdCk7CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxM
WV9ERVNUUlVDVElCTEUoSlNGaW5hbE9iamVjdCk7CiAKQEAgLTM3MSw4ICszNjIsNyBAQCB2b2lk
IEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgSlNPYmplY3QqIG9iajsK
ICAgICBmb3IgKG9iaiA9IHRoaXNPYmplY3Q7IDsgb2JqID0gYXNPYmplY3QocHJvdG90eXBlKSkg
ewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmlj
VmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKHZt
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewogICAgICAg
ICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0g
dGhpc09iamVjdCk7CkBAIC0xMjY3LDkgKzEyNTcsOCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eShKU0NlbGwqIGNlCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGljRnVuY3Rp
b25zRm9yRGVsZXRlKGV4ZWMpOwogCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0Nl
bGwqIHNwZWNpZmljVmFsdWU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoaXNW
YWxpZE9mZnNldCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSkpKSB7CisgICAgaWYgKGlzVmFsaWRPZmZzZXQo
dGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpKSkgewogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnREZWxldGUgJiYgIXZtLmlzSW5E
ZWZpbmVPd25Qcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB0
aGlzT2JqZWN0LT5yZW1vdmVEaXJlY3Qodm0sIHByb3BlcnR5TmFtZSk7CkBAIC0xMzUzLDcgKzEz
NDIsNyBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDCiAKIHN0YXRp
YyBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgY2FsbERlZmF1bHRWYWx1ZUZ1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSlNPYmplY3QqIG9iamVjdCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkKIHsKLSAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5nZXQoZXhlYywgcHJvcGVydHlO
YW1lKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gb2JqZWN0LT5nZXRBbmRXYXRjaChleGVjLCBw
cm9wZXJ0eU5hbWUpOwogICAgIENhbGxEYXRhIGNhbGxEYXRhOwogICAgIENhbGxUeXBlIGNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEoZnVuY3Rpb24sIGNhbGxEYXRhKTsKICAgICBpZiAoY2FsbFR5cGUg
PT0gQ2FsbFR5cGVOb25lKQpAQCAtMTQ0NiwyMCArMTQzNSw2IEBAIGJvb2wgSlNPYmplY3Q6OmRl
ZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNP
YmplY3Q6OmdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpIGNvbnN0Ci17Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIGlmIChp
c1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhp
cyBjb3VsZCBiZSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUgc3RhdGljIHRhYmxlPyAtIHNob3VsZCBw
cm9iYWJseQotICAgIC8vIGFsc28gbG9vayBpbiB0aGUgaGFzaD8gIFRoaXMgY3VycmVudGx5IHNo
b3VsZCBub3QgYmUgYSBwcm9ibGVtLCBzaW5jZQotICAgIC8vIHdlJ3ZlIGN1cnJlbnRseSBhbHdh
eXMgY2FsbCAnZ2V0JyBmaXJzdCwgd2hpY2ggc2hvdWxkIGhhdmUgcG9wdWxhdGVkCi0gICAgLy8g
dGhlIG5vcm1hbCBzdG9yYWdlLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBKU09iamVj
dDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsK
ICAgICBwcm9wZXJ0eU5hbWVzLnNldEJhc2VPYmplY3Qob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NTYsMTUgKzU2LDYgQEAgaW5saW5lIEpTQ2VsbCogZ2V0SlNGdW5jdGlvbihKU1ZhbHVlIHZhbAog
ICAgIHJldHVybiAwOwogfQogCi1KU19FWFBPUlRfUFJJVkFURSBKU0NlbGwqIGdldENhbGxhYmxl
T2JqZWN0U2xvdyhKU0NlbGwqKTsKLQotaW5saW5lIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3Qo
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gZ2V0Q2FsbGFibGVPYmplY3RTbG93KHZhbHVlLmFzQ2VsbCgpKTsK
LX0KLQogY2xhc3MgR2V0dGVyU2V0dGVyOwogY2xhc3MgSW50ZXJuYWxGdW5jdGlvbjsKIGNsYXNz
IEpTRnVuY3Rpb247CkBAIC0xMTksNiArMTEwLDcgQEAgcHVibGljOgogICAgIH0KICAgICAgICAg
CiAgICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKKyAgICBK
U1ZhbHVlIGdldEFuZFdhdGNoKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAg
SlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKSBjb25zdDsKIAog
ICAgIGJvb2wgZmFzdEdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVy
ZSYsIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CkBAIC00OTEsOCArNDgzLDYgQEAgcHVi
bGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpTQ2Vs
bCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKIAotICAgIGJvb2wgZ2V0UHJvcGVydHlTcGVjaWZp
Y1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNGdW5jdGlv
bikgY29uc3Q7Ci0KICAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBw
cm9wZXJ0eSBtYXAuCiAgICAgSlNWYWx1ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKSBjb25zdAogICAgIHsKQEAgLTUwNCw5ICs0OTQsOCBAQCBwdWJsaWM6CiAK
ICAgICBKU1ZhbHVlIGdldERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNDZWxsKiBzcGVj
aWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0p
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwog
ICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGdldERpcmVjdChvZmZz
ZXQpIDogSlNWYWx1ZSgpOwogICAgIH0KQEAgLTUyMSw5ICs1MTAsOCBAQCBwdWJsaWM6CiAKICAg
ICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIEpTQ2VsbCog
c3BlY2lmaWM7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJl
KHZtKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KTsKICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5
KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgIH0KQEAgLTk0OSw3ICs5MzcsNyBAQCBw
cml2YXRlOgogICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdNb2RlV2hl
bkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoVk0mLCBBcnJheVN0b3JhZ2UqKTsKICAgICAgICAg
CiAgICAgdGVtcGxhdGU8UHV0TW9kZT4KLSAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmLCBK
U0NlbGwqKTsKKyAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlOYW1lLCBK
U1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGJvb2wgaW5s
aW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlJiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbGxH
ZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWduZWQsIFByb3Bl
cnR5T2Zmc2V0KTsKQEAgLTEyMTMsOCArMTIwMSw3IEBAIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0
Ojpwcm90b3R5cGUoKSBjb24KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0
T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUmIHN0cnVj
dHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQogewog
ICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBzcGVjaWZpYzsKLSAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUu
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmIChMSUtFTFkoaXNWYWxp
ZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RGlyZWN0KG9m
ZnNldCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygp
ICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCkBAIC0xMjg1LDYgKzEyNzIsMjAgQEAgaW5saW5l
IEpTVmFsdWUgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIAogICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwogfQogCitpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0QW5kV2F0Y2goRXhlY1N0YXRl
KiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIFByb3BlcnR5
U2xvdCBzbG90KHRoaXMpOworICAgIGlmIChjb25zdF9jYXN0PEpTT2JqZWN0Kj4odGhpcyktPmdl
dFByb3BlcnR5U2xvdChleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpKSB7CisgICAgICAgIGlmIChz
bG90LmlzQ2FjaGVhYmxlKCkpIHsKKyAgICAgICAgICAgIHNsb3Quc2xvdEJhc2UoKS0+c3RydWN0
dXJlKCktPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygKKyAgICAgICAgICAg
ICAgICBleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0eU5hbWUpOworICAgIH0KKyAgICAK
KyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKwogaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6
OmdldChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3QKIHsKICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKQEAgLTEyOTUsNyArMTI5Niw3IEBAIGlubGluZSBK
U1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAKIH0KIAogdGVtcGxhdGU8SlNPYmplY3Q6
OlB1dE1vZGUgbW9kZT4KLWlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgSlNDZWxsKiBzcGVjaWZpY0Z1bmN0
aW9uKQoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNT
RVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7
CkBAIC0xMzA1LDI1ICsxMzA2LDE1IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bnRlcm5hbCgKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7
CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgdW5zaWduZWQg
Y3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogY3VycmVudFNwZWNpZmljRnVuY3Rp
b247Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbik7
CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBzcGVj
aWZpYyBmdW5jdGlvbiwgYW5kIHRoZXJlIG5vdyBlaXRoZXIgaXNuJ3QsCi0gICAgICAgICAgICAv
LyBvciB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCwgdGhlbiBkZXNwZWNpZnkuCi0gICAgICAg
ICAgICBpZiAoY3VycmVudFNwZWNpZmljRnVuY3Rpb24gJiYgKHNwZWNpZmljRnVuY3Rpb24gIT0g
Y3VycmVudFNwZWNpZmljRnVuY3Rpb24pKQotICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGVz
cGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
aWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwdXREaXJlY3Qo
dm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIG9i
amVjdHMgc3RydWN0dXJlIG9ubHkgaGFzIGEgc3BlY2lmaWMgdmFsdWUgc2V0IGlmIHByZXZpb3Vz
bHkgdGhlcmUKLSAgICAgICAgICAgIC8vIGhhZCBiZWVuIG9uZSBzZXQsIGFuZCBpZiB0aGUgbmV3
IHZhbHVlIGJlaW5nIHNwZWNpZmllZCBpcyB0aGUgc2FtZSAob3RoZXJ3aXNlIHdlIHdvdWxkCi0g
ICAgICAgICAgICAvLyBoYXZlIGRlc3BlY2lmaWVkLCBhYm92ZSkuICBTbywgaWYgY3VycmVudFNw
ZWNpZmljRnVuY3Rpb24gaXMgbm90IHNldCwgb3IgaWYgdGhlIG5ldwotICAgICAgICAgICAgLy8g
dmFsdWUgaXMgZGlmZmVyZW50IChvciB0aGVyZSBpcyBubyBuZXcgdmFsdWUpLCB0aGVuIHRoZSBz
bG90IG5vdyBoYXMgbm8gdmFsdWUgLSBhbmQKLSAgICAgICAgICAgIC8vIGFzIHN1Y2ggaXQgaXMg
Y2FjaGFibGUuCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSB3YXMgcHJldmlvdXNseSBhIHZhbHVl
LCBhbmQgdGhlIG5ldyB2YWx1ZSBpcyB0aGUgc2FtZSwgdGhlbiB3ZSBjYW5ub3QgY2FjaGUuCi0g
ICAgICAgICAgICBpZiAoIWN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uIHx8IChzcGVjaWZpY0Z1bmN0
aW9uICE9IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBzbG90LnNl
dEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+
ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNs
b3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KIApAQCAtMTMzNCwxNSArMTMyNSwxMyBAQCBpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2ls
bEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNp
dHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVu
Y3Rpb24pOworICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3QnV0dGVy
Zmx5KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQo
dGhpcy0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIHB1dERp
cmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIC8vIFNlZSBjb21tZW50IG9uIHNldE5l
d1Byb3BlcnR5IGNhbGwgYmVsb3cuCi0gICAgICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAg
ICAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgc2xv
dC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IFJlYWRPbmx5KQogICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVh
ZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTM1MCw3ICsxMzM5
LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNG
dW5jdGlvbiwgb2Zmc2V0KSkgeworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1
Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CiAgICAgICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpIHsKQEAgLTEzNjIsNDAgKzEzNTEsMTcgQEAgaW5saW5lIGJv
b2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBBU1NFUlQoc3RydWN0dXJl
LT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNp
dGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCi0g
ICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0gICAg
ICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAgICAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVy
dHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50
QXR0cmlidXRlczsKLSAgICBKU0NlbGwqIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uOwotICAgIG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVz
LCBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbik7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgIGlmIChvZmZzZXQgIT0g
aW52YWxpZE9mZnNldCkgewogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3Vy
cmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyBoZXJlOgotICAgICAgICAv
LyAgKDEpIFRoZXJlIGlzIGFuIGV4aXN0aW5nIHNwZWNpZmljIHZhbHVlIHNldCwgYW5kIHdlJ3Jl
IG92ZXJ3cml0aW5nIHdpdGggKnRoZSBzYW1lIHZhbHVlKi4KLSAgICAgICAgLy8gICAgICAgKiBE
byBub3RoaW5nIC0gbm8gbmVlZCB0byBkZXNwZWNpZnksIGJ1dCB0aGF0IG1lYW5zIHdlIGNhbid0
IGNhY2hlIChhIGNhY2hlZAotICAgICAgICAvLyAgICAgICAgIHB1dCBjb3VsZCB3cml0ZSBhIGRp
ZmZlcmVudCB2YWx1ZSkuIExlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0g
ICAgICAgIC8vICAoMikgVGhlcmUgaXMgYSBzcGVjaWZpYyB2YWx1ZSBjdXJyZW50bHkgc2V0LCBi
dXQgd2UncmUgd3JpdGluZyBhIGRpZmZlcmVudCB2YWx1ZS4KLSAgICAgICAgLy8gICAgICAgKiBG
aXJzdCwgd2UgaGF2ZSB0byBkZXNwZWNpZnkuICBIYXZpbmcgZG9uZSBzbywgdGhpcyBpcyBub3cg
YSByZWd1bGFyIHNsb3QKLSAgICAgICAgLy8gICAgICAgICB3aXRoIG5vIHNwZWNpZmljIHZhbHVl
LCBzbyBnbyBhaGVhZCAmIGNhY2hlIGxpa2Ugbm9ybWFsLgotICAgICAgICAvLyAgKDMpIE5vcm1h
bCBjYXNlLCB0aGVyZSBpcyBubyBzcGVjaWZpYyB2YWx1ZSBzZXQuCi0gICAgICAgIC8vICAgICAg
ICogR28gYWhlYWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAgICAgaWYgKGN1cnJlbnRTcGVj
aWZpY0Z1bmN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBjYXNlICgxKSBEbyB0aGUgcHV0LCB0aGVu
IHJldHVybiBsZWF2aW5nIHRoZSBzbG90IHVuY2FjaGFibGUuCi0gICAgICAgICAgICBpZiAoc3Bl
Y2lmaWNGdW5jdGlvbiA9PSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikgewotICAgICAgICAgICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjYXNlICgyKSBEZXNwZWNpZnks
IGZhbGwgdGhyb3VnaCB0byAoMykuCi0gICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVj
dHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2FzZSAoMykgc2V0IHRoZSBzbG90LCBk
byB0aGUgcHV0LCByZXR1cm4uCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5
KG9mZnNldCk7CiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQp
OwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE0MDQsMTcgKzEzNzAsMTQgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKAogICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNFeHRlbnNp
YmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSk7CisgICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpKTsKICAg
ICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3Jh
Z2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKIAogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0
LCB2YWx1ZSk7Ci0gICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0
aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCi0gICAgLy8gc28g
bGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KLSAgICBpZiAoIXNwZWNpZmlj
RnVuY3Rpb24pCi0gICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAg
ICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkKICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTQ0NywyMCArMTQxMCwyMCBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICBB
U1NFUlQoIXN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwogCi0gICAg
cmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHJldHVybiBwdXRE
aXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwotICAgIHB1dERpcmVj
dEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0
RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpw
dXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNl
dHRlcigpKTsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1
ZSkpOworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMTQ3MCw3ICsx
NDMzLDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKHN0cnVj
dHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5
KCkpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxh
YmxlT2JqZWN0KHZhbHVlKSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
KCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcyk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3
QnV0dGVyZmx5KTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzYsMTMgKzc2LDExIEBAIHN0cnVjdCBQcm9wZXJ0eU1h
cEVudHJ5IHsKICAgICBTdHJpbmdJbXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
OwogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gc3Bl
Y2lmaWNWYWx1ZTsKIAotICAgIFByb3BlcnR5TWFwRW50cnkoVk0mIHZtLCBKU0NlbGwqIG93bmVy
LCBTdHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorICAgIFByb3BlcnR5TWFwRW50cnkoU3RyaW5n
SW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiAg
ICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAgICAsIGF0
dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgLCBzcGVjaWZpY1ZhbHVlKHZtLCBvd25lciwg
c3BlY2lmaWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46Ok1heUJlTnVsbCkKICAgICB7CiAg
ICAgfQogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIFN0cnVjdHVy
ZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmoKICAgICBzZXRIYXNSZWFkT25seU9yR2V0
dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKGNsYXNzSW5mby0+aGFzU3RhdGljU2V0
dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJv
cGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0
U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KDApOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25z
KGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRTdGF0aWNGdW5j
dGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIwMyw3ICsyMDIsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0pCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNF
eGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3Bl
cnRpZXModm0pKTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhmYWxzZSk7CiAg
ICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRo
cmFzaENvdW50KDApOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25zKGZhbHNlKTsKICAgICBzZXRE
aWRUcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKGZhbHNl
KTsKQEAgLTIzMiw3ICsyMzAsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIGNvbnN0
IFN0cnVjCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRp
bmdQcm90byhwcmV2aW91cy0+aGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNs
dWRpbmdQcm90bygpKTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhwcmV2aW91
cy0+aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJl
dmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KHByZXZpb3VzLT5z
cGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSk7CiAgICAgc2V0UHJldmVudEV4dGVuc2lvbnMo
cHJldmlvdXMtPnByZXZlbnRFeHRlbnNpb25zKCkpOwogICAgIHNldERpZFRyYW5zaXRpb24odHJ1
ZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmllZChwcmV2aW91cy0+c3RhdGljRnVuY3Rp
b25zUmVpZmllZCgpKTsKQEAgLTMxNyw3ICszMTQsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChWCiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAg
ICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkodm0sIHRoaXMsIHN0cnVjdHVy
ZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJl
LT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJl
dmlvdXMuZ2V0KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+
bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5h
dHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50
cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2Up
OwogICAgIH0KICAgICAKQEAgLTMzNiwzMCArMzMzLDEyIEBAIHNpemVfdCBTdHJ1Y3R1cmU6OnN1
Z2dlc3RlZE5ld091dE9mTGluZVMKICAgICByZXR1cm4gbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBh
Y2l0eShvdXRPZkxpbmVDYXBhY2l0eSgpKTsKIH0KICAKLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNp
ZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQot
ewotICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQotICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnkodm0sIGRlZmVyR0MpOwotCi0gICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKLSAgICBBU1NF
UlQocHJvcGVydHlUYWJsZSgpKTsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJv
cGVydHlUYWJsZSgpLT5nZXQocmVwKTsKLSAgICBBU1NFUlQoZW50cnkpOwotICAgIGVudHJ5LT5z
cGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci19Ci0KLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmlj
VmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZz
ZXQmIG9mZnNldCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwog
ICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogCiAgICAgaWYgKFN0cnVjdHVyZSog
ZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQodWlk
LCBhdHRyaWJ1dGVzKSkgewotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWVJblByZXZpb3Vz
ID0gZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpOwot
ICAgICAgICBpZiAoc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgJiYgc3BlY2lmaWNWYWx1ZUluUHJl
dmlvdXMgIT0gc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB2
YWxpZGF0ZU9mZnNldChleGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0LCBleGlzdGluZ1RyYW5z
aXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1RyYW5z
aXRpb24tPm1fb2Zmc2V0OwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwpAQCAt
MzY4LDE2ICszNDcsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dAogICAgIHJldHVybiAwOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZp
Y1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3Bl
cnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1w
bChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1
ZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0
cnVjdHVyZUltcGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMsIG9m
ZnNldCk7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJp
bmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwg
UHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zm
c2V0JiBvZmZzZXQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RydWN0dXJl
LT5tX2xvY2spOwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zm
c2V0KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKIGJvb2wgU3Ry
dWN0dXJlOjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29u
c3QKQEAgLTQzMiwyNSArNDExLDEyIEBAIE5vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6
OnN1Z2dlc3QKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7CiB9CiAKLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBQdXRQcm9wZXJ0
eVNsb3Q6OkNvbnRleHQgY29udGV4dCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCwg
UHV0UHJvcGVydHlTbG90OjpDb250ZXh0IGNvbnRleHQpCiB7Ci0gICAgLy8gSWYgd2UgaGF2ZSBh
IHNwZWNpZmljIGZ1bmN0aW9uLCB3ZSBtYXkgaGF2ZSBnb3QgdG8gdGhpcyBwb2ludCBpZiB0aGVy
ZSBpcwotICAgIC8vIGFscmVhZHkgYSB0cmFuc2l0aW9uIHdpdGggdGhlIGNvcnJlY3QgcHJvcGVy
dHkgbmFtZSBhbmQgYXR0cmlidXRlcywgYnV0Ci0gICAgLy8gc3BlY2lhbGl6ZWQgdG8gYSBkaWZm
ZXJlbnQgZnVuY3Rpb24uICBJbiB0aGlzIGNhc2Ugd2UganVzdCB3YW50IHRvIGdpdmUgdXAKLSAg
ICAvLyBhbmQgZGVzcGVjaWFsaXplIHRoZSB0cmFuc2l0aW9uLgotICAgIC8vIEluIHRoaXMgY2Fz
ZSB3ZSBjbGVhciB0aGUgdmFsdWUgb2Ygc3BlY2lmaWNGdW5jdGlvbiB3aGljaCB3aWxsIHJlc3Vs
dAotICAgIC8vIGluIHVzIGFkZGluZyBhIG5vbi1zcGVjaWZpYyB0cmFuc2l0aW9uLCBhbmQgYW55
IHN1YnNlcXVlbnQgbG9va3VwIGluCi0gICAgLy8gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlIHdpbGwganVzdCB1c2UgdGhhdC4KLSAgICBpZiAoc3Bl
Y2lmaWNWYWx1ZSAmJiBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmNvbnRhaW5zKHByb3Bl
cnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcykpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwot
CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICBBU1NFUlQoIVN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KSk7CisgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpOwogICAgIAotICAgIGlmIChzdHJ1Y3R1cmUt
PnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJh
c2hDb3VudCkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBpbnQgbWF4VHJhbnNp
dGlvbkxlbmd0aDsKICAgICBpZiAoY29udGV4dCA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQp
CiAgICAgICAgIG1heFRyYW5zaXRpb25MZW5ndGggPSBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JO
b25FdmFsUHV0QnlJZDsKQEAgLTQ1OSw3ICs0MjUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbkNvdW50KCkg
PiBtYXhUcmFuc2l0aW9uTGVuZ3RoKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9
IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAgICAgICAg
IEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7Ci0gICAgICAgIG9mZnNldCA9IHRyYW5z
aXRpb24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3Bl
Y2lmaWNWYWx1ZSk7CisgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247CiAgICAgfQog
ICAgIApAQCAtNDY5LDExICs0MzUsMTAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5
TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRy
aWJ1dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLnNldE1h
eUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1ZSk7CiAgICAgdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVy
dHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24t
Pm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKIAotICAgIG9mZnNldCA9IHRyYW5zaXRp
b24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lm
aWNWYWx1ZSk7CisgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0KHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpOwogCiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRy
YW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKQEAgLTUxMywzMCArNDc4LDYgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogICAgIHJldHVybiB0cmFu
c2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSByZXBsYWNl
RnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50KCkgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOwotICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgIHRyYW5zaXRpb24t
PnNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0
aW9uVGhyYXNoQ291bnQoKSArIDEpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikp
OwotICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICB0
cmFuc2l0aW9uLT5waW4oKTsKLQotICAgIGlmICh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0aW9u
VGhyYXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpCi0gICAgICAg
IHRyYW5zaXRpb24tPmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyh2bSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGJvb2wgcmVtb3ZlZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1bmN0aW9uKHZtLCByZXBs
YWNlRnVuY3Rpb24pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwot
ICAgIH0KLQotICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICBy
ZXR1cm4gdHJhbnNpdGlvbjsKLX0KLQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNo
YW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CkBAIC03NzMsMTkgKzcxNCwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLVByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7CiAgICAgQVNTRVJUKCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCi0gICAgaWYgKHNwZWNp
ZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2
bSwgZGVmZXJHQyk7CiAgICAgCiAgICAgcGluKCk7CiAKLSAgICByZXR1cm4gcHV0U3BlY2lmaWNW
YWx1ZSh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICBy
ZXR1cm4gcHV0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogfQogCiBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtODEyLDExICs3NTAsMzIgQEAgdm9pZCBTdHJ1
Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogewogICAgIEFTU0VSVCghaGFzUmFyZURh
dGEoKSk7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJlUmFyZURh
dGE6OmNyZWF0ZSh2bSwgcHJldmlvdXMoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
ICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQodm0sIHRoaXMsIHJhcmVEYXRhKTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwogICAgIEFT
U0VSVChoYXNSYXJlRGF0YSgpKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdQ
cm9wZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sK
KyAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIAorICAgIGlmICgh
aGFzUmFyZURhdGEoKSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFy
ZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOworICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0cykgeworICAgICAgICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNo
cG9pbnRTZXRzID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlUmFyZURh
dGE6OlByb3BlcnR5V2F0Y2hwb2ludE1hcD4oKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVu
Y2UoKTsKKyAgICB9CisgICAgYXV0byByZXN1bHQgPSByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdh
dGNocG9pbnRTZXRzLmFkZChvZmZzZXQsIG51bGxwdHIpOworICAgIGlmICghcmVzdWx0LmlzTmV3
RW50cnkpCisgICAgICAgIHJldHVybjsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gYWRv
cHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSk7Cit9CisKICNpZiBEVU1QX1BST1BF
UlRZTUFQX1NUQVRTCiAKIHN0cnVjdCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyIHsK
QEAgLTg1OSw3ICs4MTgsNyBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0
eVRhCiAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgbnVtYmVyT2ZTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIH0KIAotUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVu
c2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzKQogewogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVz
OwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwpAQCAtODcxLDcgKzgzMCw2IEBAIFByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGwKICAgICAgICAgUHJvcGVydHlNYXBFbnRy
eSogZW50cnkgPSB0YWJsZS0+Z2V0KHVpZCk7CiAgICAgICAgIGlmIChlbnRyeSkgewogICAgICAg
ICAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmdldCgpOwogICAgICAgICAgICAgUHJvcGVy
dHlPZmZzZXQgcmVzdWx0ID0gZW50cnktPm9mZnNldDsKICAgICAgICAgICAgIHN0cnVjdHVyZS0+
bV9sb2NrLnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg4NSwxNCAr
ODQzLDEzIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGwKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgYXR0cmlidXRlcyA9IHN0cnVjdHVy
ZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKTsKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IHN0cnVj
dHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKTsKICAgICAgICAgcmV0dXJuIHN0
cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgfQogICAgIAogICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0
OwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1Zh
bHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIWlzQ29t
cGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkpOwpAQCAtOTA3LDM5ICs4NjQsMTAgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXQoVk0mIHZtLCBQcgogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0
dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKLSAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnkt
PnNwZWNpZmljVmFsdWUuZ2V0KCk7CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAKLWJv
b2wgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0
eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFByb3BlcnR5TWFwRW50cnkq
IGVudHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICBp
ZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoZW50cnktPnNw
ZWNpZmljVmFsdWUpOwotICAgIGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0m
IHZtKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJs
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQg
PSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikK
LSAgICAgICAgaXRlci0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwotfQotCi1Qcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCitQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tl
ciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKICAgICAKQEAgLTk1Niw3ICs4ODQsNyBAQCBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsCiAKICAgICBQcm9wZXJ0eU9mZnNl
dCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0
eSk7CiAKLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHZtLCB0aGlz
LCByZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQ
cm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJs
ZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1f
b2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CiAgICAgCiAg
ICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiBuZXdPZmZzZXQ7CkBAIC0xMDYwLDcg
Kzk4OCw2IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwog
ICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2aW91c09yUmFyZURh
dGEpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NwZWNpZmljVmFsdWVJblBy
ZXZpb3VzKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkg
ewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKQEAg
LTEwODMsOCArMTAxMCw3IEBAIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVy
Y2UKICAgICAgICAgY3VycmVudCA9IHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsK
ICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CiAgICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xMTQ0LDEzICsxMDcwLDggQEAgdm9p
ZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgIGlmICh0YWJsZSkgewog
ICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7CiAg
ICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKLSAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGl0ZXItPmtleSwgIjoi
LCBzdGF0aWNfY2FzdDxpbnQ+KGl0ZXItPm9mZnNldCkpOwotICAgICAgICAgICAgaWYgKGl0ZXIt
PnNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBEdW1wQ29udGV4dCBkdW1teUNvbnRl
eHQ7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoaXRlci0+c3Bl
Y2lmaWNWYWx1ZS5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9CkBAIC0xMTYwLDEwICsx
MDgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAg
ICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5n
ZXQoKSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0cnVjdHVyZS0+bV9vZmZzZXQpKTsKLSAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cykgewotICAgICAgICAg
ICAgRHVtcENvbnRleHQgZHVtbXlDb250ZXh0OwotICAgICAgICAgICAgb3V0LnByaW50KCI9PiIs
IFJhd1BvaW50ZXIoc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKSk7
Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KCJ9LCAiLCBJbmRleGluZ1R5
cGVEdW1wKGluZGV4aW5nVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMiArMTExLDEx
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKLSAgICBK
U19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb24o
Vk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2Vs
bCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRl
eHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0KTsKLSAgICBzdGF0aWMgU3RydWN0
dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5
KFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwq
IHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYsIFB1dFBy
b3BlcnR5U2xvdDo6Q29udGV4dCA9IFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQpOwor
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3Ry
dWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNl
dCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBTdHJ1Y3R1cmUqIGRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSosIFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hh
bmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcyk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAtMTM4LDcgKzEz
Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAg
Ly8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBQ
cm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVy
dHlOYW1lKTsKICAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwg
SlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUp
OyB9CiAgICAgICAgIApAQCAtMTg4LDggKzE4Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBXaWxsIGp1
c3QgdGhlIHByb3RvdHlwZSBjaGFpbiBpbnRlcmNlcHQgdGhpcyBwcm9wZXJ0eSBhY2Nlc3M/CiAg
ICAgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5h
bWUpOwogICAgICAgICAKLSAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQotICAgICAg
ICAKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzSUQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwpAQCAtMjYzLDEwICsyNjAs
MTAgQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1l
KTsKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7
Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCYgYXR0cmlidXRlcyk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50
bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQpOwotICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJl
bnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbCom
IHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYs
IFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOwogCiAgICAgdm9pZCBzZXRI
YXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzV2l0aFByb3RvQ2hlY2soYm9vbCBpc19fcHJvdG9fXykK
ICAgICB7CkBAIC0yODMsOSArMjgwLDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIUpTQzo6
aXNWYWxpZE9mZnNldChtX29mZnNldCk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAg
IHZvaWQgZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpIHsgc2V0U3BlY2lmaWNGdW5j
dGlvblRocmFzaENvdW50KG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCk7IH0KLQogICAg
IHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVu
dW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4K
ICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7IC8vIERlZmlu
ZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1l
c0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7
CkBAIC0zNjQsMTMgKzM1OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9u
V2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hw
b2ludFNldC5hZGQod2F0Y2hwb2ludCk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICB2b2lk
IG5vdGlmeVRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgpIGNvbnN0OwogICAgIAogICAgIElu
bGluZVdhdGNocG9pbnRTZXQmIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkgY29uc3QKICAgICB7
CiAgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYsIFByb3Bl
cnR5T2Zmc2V0KTsKKyAgICB2b2lkIGRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCk7
CisgICAgV2F0Y2hwb2ludFNldCogcHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoUHJv
cGVydHlPZmZzZXQpOwogCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFwZT4gdG9TdHJ1Y3R1
cmVTaGFwZSgpOwogICAgIApAQCAtNDA2LDcgKzQwNCw2IEBAIHB1YmxpYzoKICAgICBERUZJTkVf
QklURklFTEQoYm9vbCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRp
bmdQcm90bywgSGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90
bywgMSwgNCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc05vbkVudW1lcmFibGVQcm9w
ZXJ0aWVzLCBIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcywgMSwgNSk7CiAgICAgREVGSU5FX0JJ
VEZJRUxEKHVuc2lnbmVkLCBhdHRyaWJ1dGVzSW5QcmV2aW91cywgQXR0cmlidXRlc0luUHJldmlv
dXMsIDE0LCA2KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHNwZWNpZmljRnVuY3Rp
b25UaHJhc2hDb3VudCwgU3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50LCAyLCAyMCk7CiAgICAg
REVGSU5FX0JJVEZJRUxEKGJvb2wsIHByZXZlbnRFeHRlbnNpb25zLCBQcmV2ZW50RXh0ZW5zaW9u
cywgMSwgMjIpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRUcmFuc2l0aW9uLCBEaWRU
cmFuc2l0aW9uLCAxLCAyMyk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHN0YXRpY0Z1bmN0
aW9uc1JlaWZpZWQsIFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQsIDEsIDI0KTsKQEAgLTQyMSw3ICs0
MTgsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlKFZNJiwgY29u
c3QgU3RydWN0dXJlKik7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5
T2Zmc2V0Jik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogCiAgICAgLy8gVGhpcyB3aWxsIHJldHVy
biB0aGUgc3RydWN0dXJlIHRoYXQgaGFzIGEgdXNhYmxlIHByb3BlcnR5IHRhYmxlLCB0aGF0IHBy
b3BlcnR5IHRhYmxlLAogICAgIC8vIGFuZCB0aGUgbGlzdCBvZiBzdHJ1Y3R1cmVzIHRoYXQgd2Ug
dmlzaXRlZCBiZWZvcmUgd2UgZ290IHRvIGl0LiBJZiBpdCByZXR1cm5zIGEKQEAgLTQzMSwxNSAr
NDI4LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5kKTsKIAotICAgIFBy
b3BlcnR5T2Zmc2V0IHB1dFNwZWNpZmljVmFsdWUoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJvcGVydHlPZmZzZXQg
cHV0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBQcm9wZXJ0
eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAogICAgIHZvaWQgY3JlYXRlUHJvcGVydHlN
YXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5zaWduZWQga2V5Q291
bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAgIGJvb2wgZGVzcGVj
aWZ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgZGVzcGVjaWZ5QWxsRnVu
Y3Rpb25zKFZNJik7Ci0KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHByb3BlcnR5
VGFibGUoKTsKICAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBp
bm5lZChWTSYsIFN0cnVjdHVyZSogb3duZXIpOwogICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9w
ZXJ0eVRhYmxlKFZNJiwgU3RydWN0dXJlKiBvd25lcik7CkBAIC01MDcsOCArNTAxLDYgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0Owog
ICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5
SWQgPSA1MTI7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlv
blRocmFzaENvdW50ID0gMzsKLSAgICAKICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIHByb3Blcmx5
IGFsaWduZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgJ1N0cnVjdHVyZScKICAgICAvLyBwYXJ0
IG9mIHRoZSBvYmplY3QuCiAgICAgU3RydWN0dXJlSURCbG9iIG1fYmxvYjsKQEAgLTUyMSw3ICs1
MTMsNiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fcHJldmlvdXNPclJh
cmVEYXRhOwogCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbmFtZUluUHJldmlvdXM7Ci0gICAg
V3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsKIAogICAgIGNv
bnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDcyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTAyLDkgKzEwMiw3IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmdldChWTSYKIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJl
bnRseShWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVz
SWdub3JlZDsKLSAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWVJZ25vcmVkOwotICAgIHJldHVybiBn
ZXRDb25jdXJyZW50bHkoCi0gICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVj
aWZpY1ZhbHVlSWdub3JlZCk7CisgICAgcmV0dXJuIGdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBh
dHRyaWJ1dGVzSWdub3JlZCk7CiB9CiAKIGlubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhp
bmdIZWFkZXIoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdApAQCAtMjIzLDYgKzIyMSwzMSBAQCBB
TFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlCiAgICAgcmV0dXJuIG1fcHJv
cGVydHlUYWJsZVVuc2FmZTsKIH0KIAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNl
UHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGlmIChMSUtFTFkoIWhhc1Jh
cmVEYXRhKCkpKQorICAgICAgICByZXR1cm47CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3Bl
cnR5V2F0Y2hwb2ludE1hcCogbWFwID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzLmdldCgpOworICAgIGlmIChMSUtFTFkoIW1hcCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtYXAtPmdldChvZmZzZXQpOworICAgIGlmIChMSUtFTFko
IXNldCkpCisgICAgICAgIHJldHVybjsKKyAgICBzZXQtPmZpcmVBbGwoIlByb3BlcnR5IGRpZCBn
ZXQgcmVwbGFjZWQiKTsKK30KKworaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJv
cGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorewor
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKCFoYXNSYXJl
RGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBXVEY6OmxvYWRMb2FkRmVuY2Uo
KTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSBy
YXJlRGF0YSgpLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYgKCFt
YXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXAtPmdldChvZmZzZXQp
OworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3Rl
bmN5KCkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBTdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJl
UmFyZURhdGE6OmNyCiAgICAgcmV0dXJuIHJhcmVEYXRhOwogfQogCit2b2lkIFN0cnVjdHVyZVJh
cmVEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxTdHJ1Y3R1
cmVSYXJlRGF0YSo+KGNlbGwpLT5TdHJ1Y3R1cmVSYXJlRGF0YTo6flN0cnVjdHVyZVJhcmVEYXRh
KCk7Cit9CisKIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0sIFN0
cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVJhcmVEYXRh
U3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw2ICs0MCwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSA6IHB1YmxpYyBKU0Nl
bGwgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqKTsKIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7CkBAIC01MywxMCArNTcsMTIgQEAgcHVibGljOgogCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogZW51bWVyYXRpb25DYWNoZSgpOwogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShW
TSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVl
KTsKLQorICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFN0cnVjdHVyZTsKKyAgICAKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYsIFN0
cnVjdHVyZSopOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CkBAIC02NCw2
ICs3MCw5IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91
czsKICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4gbV9lbnVtZXJhdGlvbkNhY2hl
OworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNo
cG9pbnRTZXQ+LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFw
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234315</attachid>
            <date>2014-07-02 21:44:43 -0700</date>
            <delta_ts>2014-07-02 21:50:37 -0700</delta_ts>
            <desc>closer to done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>95394</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
NiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxl
eEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAg
Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAogICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWlu
Q291bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVu
dE9iamVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBo
ZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1
ZSA9IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5t
X29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAg
ICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
U2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9m
ZnNldCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwg
ZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
I2VuZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0g
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFy
aWFudC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAg
ICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50
Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBA
IC0yOTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZt
LCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdz
IHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2
ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0
cmVuZ2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1
cmUsIG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29m
ZnNldChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0
YXR1cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYg
QEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0
dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90
aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRl
cm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtODYsOSArODMsNiBAQCBi
b29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCFhcmVDb21w
YXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSAhPSBvdGhlci5t
X3NwZWNpZmljVmFsdWUpCi0gICAgICAgIG1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKLQog
ICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCkBA
IC0xMTIsOCArMTA2LDYgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRl
eHQpLCAiXSIpOwogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgIG91dC5wcmludCgi
LCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwg
Y29udGV4dCkpOwotICAgIGlmIChzcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIG91dC5wcmludCgi
LCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCkp
OwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBA
IHN0cnVjdCBEdW1wQ29udGV4dDsKIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAg
ICBHZXRCeUlkVmFyaWFudCgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKQEAgLTU4LDcg
KzU3LDYgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0K
ICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRl
QmFzZTsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzMsNyArNzEsNiBA
QCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKICAgICBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsOCArMjU0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsICpzdHViLT5tX2NhbGxM
aW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxleEdldFN0YXR1cy5jaGFpbigpLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQo
KSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzQsMTkgKzMzNCwxMyBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscyk7CiAKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVh
ZE9ubHkpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBzdG9y
aW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxp
emVkIHNsb3QuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTM4NCwyMiArMzc4LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkgb3B0
aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9u
IGlzIGNhY2hlZCB0by4KLSAgICAgICAgLy8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFsbG93
cyB1cyB0byBndWFyZCBhZ2FpbnN0IGEgdHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAgICAg
ICAgLy8gdmFsdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgc3RvcmluZyBh
IHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IHRoaXMgd291bGQgb25seSBiZSBhIHByb2Js
ZW0gaWYKLSAgICAgICAgLy8gICB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNw
ZWNpZmljIHZhbHVlIGFscmVhZHksIHNpbmNlIGlmIGl0IGRpZG4ndCwKLSAgICAgICAgLy8gICB0
aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZp
YyB2YWx1ZS4gSWYgaXQgZGlkCi0gICAgICAgIC8vICAgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB0
aGVuIHdlJ2xsIGtub3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAgICAgICAgLy8g
ICBzcGVjaWZpY1ZhbHVlIHdpbGwgdGVsbCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gLSBJ
ZiB3ZSdyZSBub3Qgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFnYWlu
LCB0aGlzIHdvdWxkIG9ubHkgYmUgYQotICAgICAgICAvLyAgIHByb2JsZW0gaWYgdGhlIGV4aXN0
aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hpY2ggd2UgY2hlY2sg
Zm9yCi0gICAgICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KLSAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCAw
LCBvZmZzZXQpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0
dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3VycyBp
biBiaXphcnJlIGNhc2VzIG9ubHkuIFNlZSBhYm92ZS4KLSAgICAgICAgQVNTRVJUKCF0cmFuc2l0
aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0
LmFwcGVuZFZhcmlhbnQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDYgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgog
ICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25zdGFu
dENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0g
b3RoZXIubV9hbHRlcm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3Bl
Y2lmaWNWYWx1ZTsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzgs
NyArNzcsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiB9CiAK
IFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZp
Y1ZhbHVlLAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCiAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAgICAgUHV0QnlJZFZhcmlh
bnQgcmVzdWx0OwpAQCAtODksNyArODgsNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAogICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1p
bmFsUHJvdG90eXBlKCk7CiAgICAgfQogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAg
ICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1ZTsKICAgICByZXN1bHQubV9j
YWxsTGlua1N0YXR1cyA9IHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTIyOSw4ICsyMjcsNiBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5D
b250ZXh0KFByaW50CiAgICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNr
cygpLCBjb250ZXh0KSwgIl0iKTsKICAgICAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAg
ICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUo
bV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOwotICAgICAgICBpZiAobV9zcGVjaWZpY1ZhbHVl
KQotICAgICAgICAgICAgb3V0LnByaW50KCIsIHNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQo
bV9zcGVjaWZpY1ZhbHVlLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQg
PSAiLCBtX29mZnNldCk7CiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExp
bmtTdGF0dXMpOwogICAgICAgICBvdXQucHJpbnQoIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxNzA3MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
OwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSwKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpOwogICAg
IAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQpAQCAtMTE3LDEyICsx
MTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7CiAgICAgfQog
ICAgIAotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgfQotICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CkBAIC0xNDIsNyArMTM2
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwogICAgIENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKICAgICBKU09iamVjdCog
bV9hbHRlcm5hdGVCYXNlOwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwogICAgIFByb3Bl
cnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
bV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEx
ICs3MCw2IEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6YWRkKFdhdGNocG9pbnQqIHdhdGMKICAgICBt
X3N0YXRlID0gSXNXYXRjaGVkOwogfQogCi12b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGwoY29u
c3QgY2hhciogcmVhc29uKQotewotICAgIGZpcmVBbGwoU3RyaW5nRmlyZURldGFpbChyZWFzb24p
KTsKLX0KLQogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCiB7CiAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVkKTsKQEAgLTg1LDYg
KzgwLDExIEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmkKICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogfQogCit2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxT
bG93KGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBmaXJlQWxsU2xvdyhTdHJpbmdGaXJlRGV0
YWlsKHJlYXNvbikpOworfQorCiB2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxXYXRjaHBvaW50
cyhjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiB7CiAgICAgd2hpbGUgKCFtX3NldC5pc0VtcHR5
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDE3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGZpcmVBbGwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKLSAg
ICAgICAgaWYgKHN0YXRlKCkgIT0gSXNXYXRjaGVkKQorICAgICAgICBpZiAoTElLRUxZKHN0YXRl
KCkgIT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNs
b3coZGV0YWlsKTsKICAgICB9CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJl
QWxsKGNvbnN0IGNoYXIqIHJlYXNvbik7CisgICAgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJl
YXNvbikKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBmaXJlQWxsU2xvdyhyZWFzb24pOworICAgIH0K
ICAgICAKICAgICB2b2lkIHRvdWNoKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7CkBA
IC0xNTcsNiArMTYyLDcgQEAgcHVibGljOgogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNOb3RF
bXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpcmVBbGxTbG93KGNvbnN0IEZpcmVEZXRhaWwmKTsgLy8gQ2FsbCBvbmx5
IGlmIHlvdSd2ZSBjaGVja2VkIGlzV2F0Y2hlZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpcmVBbGxTbG93KGNvbnN0IGNoYXIqIHJlYXNvbik7IC8vIERpdHRvLgogICAgIAogcHJpdmF0
ZToKICAgICB2b2lkIGZpcmVBbGxXYXRjaHBvaW50cyhjb25zdCBGaXJlRGV0YWlsJik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKICNpbmNs
dWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTEzODcsMTQgKzEzODgsMTcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGlu
ZyBtb3JlIHN1YnRsZT8KICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0t
OykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5zcGVjaWZpY1ZhbHVlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhc3RhdHVz
W2ldLmFsdGVybmF0ZUJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3Rh
bnRSZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KHZhbHVlLm1fdmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgdGhp
c1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5m
cmVlemUoc3RhdHVzW2ldLnNwZWNpZmljVmFsdWUoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNTY5LDExICsxNTczLDI3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEgZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1f
Z3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLm1fdmFsdWUsIGRhdGEub2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkgewor
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdldENv
bnN0YW50UHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3Zh
bHVlLCBkYXRhLm9mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQgJiYganNEeW5hbWljQ2FzdDxH
ZXR0ZXJTZXR0ZXIqPihyZXN1bHQpKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAq
bV9ncmFwaC5mcmVlemUocmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3Zt
LmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTE2MDIsMTQgKzE2MjIsMjIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICBpZiAo
IXZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpT
VmFsdWUgYmFzZUZvckxvYWQ7CisgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNl
KCkpCisgICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2Uu
bV92YWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlRm9yTG9hZCwgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAg
ICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAg
ICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSksCisg
ICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIHJl
c3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MDcyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjc4LDYgKzE2NzgsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ29uc3RhbnRJbnRlcgogCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKKyAgICBp
ZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgb2Zmc2V0
KSkgeworICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAgICAgICAg
IHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZz
ZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMTc3MiwyMSArMTc3OSwx
NCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIC8vIFVubGVzcyB3
ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODg3ODMsIHdlIG5lZWQgdG8KICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3Jp
Z2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCiAgICAg
Ly8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlm
IHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3Ro
ZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UsIG9y
IGlmIHRoZQotICAgIC8vIGFjY2VzcyB3YXMgY29tcGlsZWQgdG8gYSBXZWFrSlNDb25zdGFudCBz
cGVjaWZpYyB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBtaWdodCBub3QKLSAgICAvLyBoYXZlIGFu
eSBleHBsaWNpdCB1c2Ugb2YgdGhlIGJhc2UgYXQgYWxsLgotICAgIGlmICh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKSB8fCBvcmlnaW5hbEJhc2UgIT0gYmFzZSkKKyAgICAvLyBvbiBzb21ldGhpbmcg
b3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2Uu
CisgICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIG9yaWdpbmFsQmFzZSk7CiAgICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWU7Ci0gICAgaWYg
KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICBsb2FkZWRWYWx1ZSA9IHdlYWtKU0Nv
bnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9h
ZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgIHZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAotICAgICAgICAgICAgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIHZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZz
ZXQpOwotICAgIH0KKyAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAor
ICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDogcHJlZGlj
dGlvbiwKKyAgICAgICAgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwK
KyAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlPZmZz
ZXQgOiBHZXRCeU9mZnNldCk7CiAgICAgCiAgICAgaWYgKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBs
b2FkZWRWYWx1ZSk7CkBAIC0xOTQ5LDE0ICsxOTQ5LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQogICAg
ICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsK
ICAgICAgICAgCi0gICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlOwotICAgICAgICBpZiAodmFyaWFu
dC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZSA9IHdlYWtKU0NvbnN0
YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgICAgIFNwZWND
ZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAg
ICAgICAgICAgICAgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQpOwotICAgICAgICB9CisgICAgICAg
IE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBTcGVj
Q2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBh
ZGRUb0dyYXBoKEdldFNldHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI5NTgsMTAg
KzI5NTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRX
aXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCku
b25seVN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSA9IHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNW
YWx1ZS5hc0NlbGwoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9u
LCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTI5NjksMTYgKzI5
NjAsMTYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkp
KTsKICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0KKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IGluZmVycmVkVmFsdWUgPQogICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID8gd2F0
Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1ZSgpIDogSlNWYWx1ZSgpOwotICAgICAgICAgICAgICAg
IGlmICghc3BlY2lmaWNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICghaW5mZXJyZWRWYWx1
ZSkgewogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0
UHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVk
aWN0aW9uKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdh
dGNocG9pbnQsIE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChzcGVjaWZpY1ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChpbmZl
cnJlZFZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcwNzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw4ICs0MDcsMTMgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1
ZSgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3Jh
cGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSk7CisgICAgICAgIEpTVmFsdWUgYmFz
ZUZvckxvYWQ7CisgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKKyAgICAgICAg
ICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7CisgICAgICAgIGlm
IChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JM
b2FkLCB2YXJpYW50Lm9mZnNldCgpKSkgeworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9D
b25zdGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg2LDIyICsx
Mjg2LDIzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAg
ICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShTdHJ1Y3R1cmUqIHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkKQorICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5
cGVNZXRob2RTYW5lKEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGUsIFN0cmluZ0ltcGwqIHVpZCkK
ICAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RyaW5nUHJvdG90eXBlLT5z
dHJ1Y3R1cmUoKTsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNVbnVzZWQ7
Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAg
ICAgICAgICB2bSgpLCB1aWQsIGF0dHJpYnV0ZXNVbnVzZWQsIHNwZWNpZmljVmFsdWUpOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2
bSgpLCB1aWQsIGF0dHJpYnV0ZXNVbnVzZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghc3BlY2lmaWNWYWx1ZSkKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShzdHJpbmdQcm90b3R5cGUsIG9mZnNldCk7CisgICAgICAgIGlmICgh
dmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAo
IXNwZWNpZmljVmFsdWUtPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpCisgICAgICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOwor
ICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHNw
ZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAoZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmlu
c2ljRm9yKENvZGVGb3JDYWxsKSAhPSBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTEzMzAsOSArMTMzMSw5IEBA
IHByaXZhdGU6CiAgICAgICAgIC8vICh0aGF0IHdvdWxkIGNhbGwgdG9TdHJpbmcoKSkuIFdlIGRv
bid0IHdhbnQgdGhlIERGRyB0byBoYXZlIHRvIGRpc3Rpbmd1aXNoCiAgICAgICAgIC8vIGJldHdl
ZW4gdGhlIHR3bywganVzdCBiZWNhdXNlIHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBnZXQgY29u
ZnVzaW5nLiBTbyB3ZQogICAgICAgICAvLyBqdXN0IHJlcXVpcmUgYm90aCBtZXRob2RzIHRvIGJl
IHNhbmUuCi0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1By
b3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkpCisg
ICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlwZU9i
amVjdCwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBs
KCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90
b3R5cGVPYmplY3QsIHZtKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MDcyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03ODksNiArNzg5LDI2IEBAIHVuc2lnbmVkIEdyYXBoOjpyZXF1aXJlZFJlZ2lzdGVyQ291
bnRGb3IKICAgICByZXR1cm4gc3RkOjptYXgoZnJhbWVSZWdpc3RlckNvdW50KCksIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4aXQoKSk7CiB9CiAKK0pTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAg
aWYgKCFiYXNlIHx8ICFiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBXYXRjaHBv
aW50U2V0KiBzZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0
KG9mZnNldCk7CisgICAgaWYgKCFzZXQgfHwgIXNldC0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CisgICAgCisgICAgd2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc2V0KTsKKyAgICAK
KyAgICByZXR1cm4gb2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KTsKK30KKwogSlNBY3RpdmF0aW9u
KiBHcmFwaDo6dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2Rl
LT5keW5hbWljQ2FzdENvbnN0YW50PEpTQWN0aXZhdGlvbio+KCk7CkBAIC05MDAsNyArOTIwLDYg
QEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5VmFsdWUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkp
OwogICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCA9IHZhcmlhbnQu
c3RydWN0dXJlU2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHNl
dC5zaXplKCk7IGotLTspCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3OSw2ICs2NzksOCBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwogICAgIHVu
c2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKICAgICAK
KyAgICBKU1ZhbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpOworICAgIAogICAgIEpTQWN0aXZhdGlvbiogdHJ5R2V0QWN0aXZhdGlv
bihOb2RlKik7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdHJ5R2V0UmVnaXN0ZXJz
KE5vZGUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5mcmVlemUo
dmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVy
ZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhh
dmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3
YXRjaCB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzNCw4ICszMjM0
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsK
LSAgICAgICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKSkpOworICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdDsKKyAgICAg
ICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgICAgIGNv
bnN0YW50UmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29uc3RhbnRSZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnRS
ZXN1bHQpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9w
ZXJ0eUJhc2U7CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzA3MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNiArMTAxLDggQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKFZN
JiB2bQogewogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlG
aXJlc1dhdGNocG9pbnRzKCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVy
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2sp
KTsKKyAgICAKKyAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2Vt
ZW50cyh2bSwgb2Zmc2V0KTsKIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwogCkBAIC0zNDMsOCArMzQ1LDExIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0
dWIoCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKICAgICB9CiAgICAg
CisgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKICAgICBp
ZiAoY2hhaW4pIHsKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAko
cmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNyBAQCBi
b29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om1heUludGVyY2VwCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh2bSwgdWlk
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzKTsK
ICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNp
b24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw4ICsxMzksNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSogCiAKICAgICBmb3IgKDsgOyBvYmogPSBhc09iamVjdChwcm90
b3R5cGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1
Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUp
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52
YWxpZE9mZnNldCkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewog
ICAgICAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUuc2V0KHZtLCB0
aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKHZtLCBGdW5jdGlvblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBl
IHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCiAgICAgbV9mdW5j
dGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fYm91bmRGdW5jdGlv
blN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9uYW1lZEZ1bmN0
aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b24odm0sIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCAwLCBtX2Z1bmN0aW9uTmFtZU9mZnNl
dCkpOworICAgIG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwg
bV9mdW5jdGlvbk5hbWVPZmZzZXQpKTsKICAgICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rp
b24gPSAwOwogICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSAwOwpAQCAtNDI5LDggKzQy
OSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBQcm90
b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1hcDsKICAgICBTdHJ1Y3R1cmUq
IGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gcHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0
dXJlRm9yUHJvdG90eXBlKG1fb2JqZWN0UHJvdG90eXBlLmdldCgpLCBKU0ZpbmFsT2JqZWN0Ojpk
ZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAg
IGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kb25lLCAw
LCAwLCBvZmZzZXQpOwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT52YWx1ZSwgMCwgMCwgb2Zmc2V0KTsKKyAgICBpdGVyYXRvclJlc3VsdFN0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3Vs
dFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+ZG9uZSwgMCwgb2Zmc2V0KTsKKyAgICBpdGVy
YXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIDAsIG9m
ZnNldCk7CiAgICAgbV9pdGVyYXRvclJlc3VsdFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGl0ZXJh
dG9yUmVzdWx0U3RydWN0dXJlKTsKIAogICAgIG1fZXZhbEZ1bmN0aW9uLnNldCh2bSwgdGhpcywg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCB2bS5wcm9wZXJ0eU5hbWVzLT5ldmFsLnN0
cmluZygpLCBnbG9iYWxGdW5jRXZhbCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
RXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNTUsMTUgKzU1
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBBcnJheUNvbnZlbnRpb25zLmguCiBzdGF0aWMgdW5z
aWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CiAKLUpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93
KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBpZiAoY2VsbC0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBl
KQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPmNsYXNz
SW5mbygpLT5pc1N1YkNsYXNzT2YoSW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkKLSAgICAgICAg
cmV0dXJuIGNlbGw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRShKU09iamVjdCk7CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoSlNGaW5hbE9iamVjdCk7CiAKQEAgLTM2MCw3ICszNTEsNyBAQCB2b2lkIEpT
T2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgICAgICAgICBwcm90b3R5cGUg
PSBvYmotPnByb3RvdHlwZSgpOwogICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkp
OwotICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0
TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2Jq
ZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdElu
dGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KQogICAg
ICAgICAgICAgICAgICAgICAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDgg
KzM2Miw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBK
U09iamVjdCogb2JqOwogICAgIGZvciAob2JqID0gdGhpc09iamVjdDsgOyBvYmogPSBhc09iamVj
dChwcm90b3R5cGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2Jq
LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lm
aWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJl
KHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSkt
PnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5h
bWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKQEAgLTQwNyw3ICszOTcsNyBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgfQogICAgIAogICAgIEFTU0VSVCgh
dGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9y
ZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOwotICAg
IGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkgJiYgc2xv
dC5pc1N0cmljdE1vZGUoKSkKKyAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSAmJiBzbG90Lmlz
U3RyaWN0TW9kZSgpKQogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgcmV0dXJuOwogfQpA
QCAtMTIyNyw3ICsxMjE3LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3IoRXhl
Y1N0YQogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpcyk7Ci0gICAgcHV0RGlyZWN0SW50
ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBwdXREaXJl
Y3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKIAogICAgIC8vIHB1dERpcmVjdCB3aWxsIGNoYW5nZSBv
dXIgU3RydWN0dXJlIGlmIHdlIGFkZCBhIG5ldyBwcm9wZXJ0eS4gRm9yCiAgICAgLy8gZ2V0dGVy
cyBhbmQgc2V0dGVycywgdGhvdWdoLCB3ZSBhbHNvIG5lZWQgdG8gY2hhbmdlIG91ciBTdHJ1Y3R1
cmUKQEAgLTEyNjcsOSArMTI1Nyw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxl
dGUoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0
KHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKSkpIHsKKyAgICBpZiAoaXNWYWxpZE9mZnNldCh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpKSB7CiAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udERlbGV0ZSAmJiAhdm0uaXNJbkRlZmluZU93blBy
b3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHRoaXNPYmplY3Qt
PnJlbW92ZURpcmVjdCh2bSwgcHJvcGVydHlOYW1lKTsKQEAgLTEzNTMsNyArMTM0Miw3IEBAIGJv
b2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0MKIAogc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldEFuZFdhdGNoKGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpCkBAIC0xNDQ2LDIwICsxNDM1LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0lu
c3RhbmNlKEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0
UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkgY29uc3QKLXsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgaWYgKGlzVmFsaWRPZmZz
ZXQoc3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNp
ZmljVmFsdWUpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlzIGNvdWxkIGJl
IGEgZnVuY3Rpb24gd2l0aGluIHRoZSBzdGF0aWMgdGFibGU/IC0gc2hvdWxkIHByb2JhYmx5Ci0g
ICAgLy8gYWxzbyBsb29rIGluIHRoZSBoYXNoPyAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIG5vdCBi
ZSBhIHByb2JsZW0sIHNpbmNlCi0gICAgLy8gd2UndmUgY3VycmVudGx5IGFsd2F5cyBjYWxsICdn
ZXQnIGZpcnN0LCB3aGljaCBzaG91bGQgaGF2ZSBwb3B1bGF0ZWQKLSAgICAvLyB0aGUgbm9ybWFs
IHN0b3JhZ2UuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIHByb3Bl
cnR5TmFtZXMuc2V0QmFzZU9iamVjdChvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEy
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC01NiwxNSArNTYsNiBAQCBpbmxpbmUgSlNDZWxsKiBnZXRKU0Z1bmN0aW9u
KEpTVmFsdWUgdmFsCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTX0VYUE9SVF9QUklWQVRFIEpTQ2Vs
bCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCopOwotCi1pbmxpbmUgSlNDZWxsKiBnZXRD
YWxsYWJsZU9iamVjdChKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNDZWxsKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXRDYWxsYWJsZU9iamVjdFNsb3codmFs
dWUuYXNDZWxsKCkpOwotfQotCiBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBJbnRlcm5hbEZ1
bmN0aW9uOwogY2xhc3MgSlNGdW5jdGlvbjsKQEAgLTExOSw2ICsxMTAsNyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgICAgICAKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUp
IGNvbnN0OworICAgIEpTVmFsdWUgZ2V0QW5kV2F0Y2goRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KSBjb25zdDsKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpIGNvbnN0OwogCiAgICAgYm9vbCBmYXN0R2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IFZNJiwgU3RydWN0dXJlJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTQ5MSw4
ICs0ODMsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1
ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOwogCi0gICAgYm9vbCBnZXRQ
cm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU0NlbGwqJiBz
cGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKLQogICAgIC8vIFRoaXMgZ2V0IGZ1bmN0aW9uIG9ubHkg
bG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KICAgICBKU1ZhbHVlIGdldERpcmVjdChWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgewpAQCAtNTA0LDkgKzQ5NCw4
IEBAIHB1YmxpYzoKIAogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0CiAgICAgewotICAgICAg
ICBKU0NlbGwqIHNwZWNpZmljOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgcmV0dXJuIG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ID8g
Z2V0RGlyZWN0KG9mZnNldCkgOiBKU1ZhbHVlKCk7CiAgICAgfQpAQCAtNTIxLDkgKzUxMCw4IEBA
IHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldERpcmVjdE9mZnNldChWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogICAgIHsKLSAg
ICAgICAgSlNDZWxsKiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQ7CiAgICAgfQpAQCAtOTQ5
LDcgKzkzNyw3IEBAIHByaXZhdGU6CiAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhWTSYsIEFycmF5U3RvcmFn
ZSopOwogICAgICAgICAKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgotICAgIGJvb2wgcHV0RGlyZWN0
SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFBy
b3BlcnR5U2xvdCYsIEpTQ2VsbCopOworICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwog
CiAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1
Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1
bnNpZ25lZCwgUHJvcGVydHlPZmZzZXQpOwpAQCAtMTIxMyw4ICsxMjAxLDcgQEAgaW5saW5lIEpT
VmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0
cnVjdHVyZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNp
ZmljOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgaWYg
KExJS0VMWShpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBnZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5oYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKQEAgLTEyODUsNiArMTI3
MiwyMCBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK2lubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRBbmRX
YXRjaChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7
CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CisgICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsK
KyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGUoKSkgeworICAgICAgICAgICAgc2xvdC5zbG90
QmFzZSgpLT5zdHJ1Y3R1cmUoKS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KAorICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7
CisgICAgfQorICAgIAorICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCiBpbmxpbmUgSlNW
YWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwpAQCAtMTI5NSw3ICsxMjk2
LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIAogfQogCiB0ZW1w
bGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgotaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90LCBKU0NlbGwq
IHNwZWNpZmljRnVuY3Rpb24pCitpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZh
bHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpKTsKQEAgLTEzMDUsMjUgKzEzMDYsMTUgQEAgaW5saW5lIGJvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+
c3RydWN0dXJlKHZtKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewogICAg
ICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBjdXJyZW50
U3BlY2lmaWNGdW5jdGlvbjsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGN1cnJlbnRTcGVj
aWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGN1
cnJlbnRseSBhIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgdGhlcmUgbm93IGVpdGhlciBpc24ndCwK
LSAgICAgICAgICAgIC8vIG9yIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50LCB0aGVuIGRlc3Bl
Y2lmeS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiAmJiAoc3BlY2lm
aWNGdW5jdGlvbiAhPSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24odm0sIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0
ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBBdCB0aGlz
IHBvaW50LCB0aGUgb2JqZWN0cyBzdHJ1Y3R1cmUgb25seSBoYXMgYSBzcGVjaWZpYyB2YWx1ZSBz
ZXQgaWYgcHJldmlvdXNseSB0aGVyZQotICAgICAgICAgICAgLy8gaGFkIGJlZW4gb25lIHNldCwg
YW5kIGlmIHRoZSBuZXcgdmFsdWUgYmVpbmcgc3BlY2lmaWVkIGlzIHRoZSBzYW1lIChvdGhlcndp
c2Ugd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGhhdmUgZGVzcGVjaWZpZWQsIGFib3ZlKS4gIFNv
LCBpZiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiBpcyBub3Qgc2V0LCBvciBpZiB0aGUgbmV3Ci0g
ICAgICAgICAgICAvLyB2YWx1ZSBpcyBkaWZmZXJlbnQgKG9yIHRoZXJlIGlzIG5vIG5ldyB2YWx1
ZSksIHRoZW4gdGhlIHNsb3Qgbm93IGhhcyBubyB2YWx1ZSAtIGFuZAotICAgICAgICAgICAgLy8g
YXMgc3VjaCBpdCBpcyBjYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBwcmV2
aW91c2x5IGEgdmFsdWUsIGFuZCB0aGUgbmV3IHZhbHVlIGlzIHRoZSBzYW1lLCB0aGVuIHdlIGNh
bm5vdCBjYWNoZS4KLSAgICAgICAgICAgIGlmICghY3VycmVudFNwZWNpZmljRnVuY3Rpb24gfHwg
KHNwZWNpZmljRnVuY3Rpb24gIT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pKQotICAgICAgICAg
ICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICAg
ICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xMzM0LDE1ICsxMzI1LDEzIEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKHRoaXMtPnN0cnVj
dHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgICAgIG5ld0J1
dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGlu
ZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCkt
PmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNGdW5jdGlvbik7CisgICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgp
LT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVy
ZSgpLCBuZXdCdXR0ZXJmbHkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAg
ICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
ICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgLy8gU2VlIGNv
bW1lbnQgb24gc2V0TmV3UHJvcGVydHkgY2FsbCBiZWxvdy4KLSAgICAgICAgaWYgKCFzcGVjaWZp
Y0Z1bmN0aW9uKQotICAgICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQp
OworICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICB0aGlzLT5zdHJ1Y3R1cmUoKS0+
c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMzUwLDcgKzEzMzksNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoCiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBh
Y2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7CisgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkp
IHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewpAQCAtMTM2Miw0MCArMTM1MSwx
NyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHBy
b3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRs
eSBjYWNoYWJsZSwKLSAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJs
ZSBzdGF0ZS4KLSAgICAgICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQotICAgICAgICAgICAgc2xv
dC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBzbG90LnNldE5ld1Byb3Bl
cnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIEpTQ2VsbCogY3VycmVudFNwZWNpZmljRnVu
Y3Rpb247Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3Vy
cmVudEF0dHJpYnV0ZXMsIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAg
aWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRN
b2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzIGhl
cmU6Ci0gICAgICAgIC8vICAoMSkgVGhlcmUgaXMgYW4gZXhpc3Rpbmcgc3BlY2lmaWMgdmFsdWUg
c2V0LCBhbmQgd2UncmUgb3ZlcndyaXRpbmcgd2l0aCAqdGhlIHNhbWUgdmFsdWUqLgotICAgICAg
ICAvLyAgICAgICAqIERvIG5vdGhpbmcgLSBubyBuZWVkIHRvIGRlc3BlY2lmeSwgYnV0IHRoYXQg
bWVhbnMgd2UgY2FuJ3QgY2FjaGUgKGEgY2FjaGVkCi0gICAgICAgIC8vICAgICAgICAgcHV0IGNv
dWxkIHdyaXRlIGEgZGlmZmVyZW50IHZhbHVlKS4gTGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNo
YWJsZSBzdGF0ZS4KLSAgICAgICAgLy8gICgyKSBUaGVyZSBpcyBhIHNwZWNpZmljIHZhbHVlIGN1
cnJlbnRseSBzZXQsIGJ1dCB3ZSdyZSB3cml0aW5nIGEgZGlmZmVyZW50IHZhbHVlLgotICAgICAg
ICAvLyAgICAgICAqIEZpcnN0LCB3ZSBoYXZlIHRvIGRlc3BlY2lmeS4gIEhhdmluZyBkb25lIHNv
LCB0aGlzIGlzIG5vdyBhIHJlZ3VsYXIgc2xvdAotICAgICAgICAvLyAgICAgICAgIHdpdGggbm8g
c3BlY2lmaWMgdmFsdWUsIHNvIGdvIGFoZWFkICYgY2FjaGUgbGlrZSBub3JtYWwuCi0gICAgICAg
IC8vICAoMykgTm9ybWFsIGNhc2UsIHRoZXJlIGlzIG5vIHNwZWNpZmljIHZhbHVlIHNldC4KLSAg
ICAgICAgLy8gICAgICAgKiBHbyBhaGVhZCAmIGNhY2hlIGxpa2Ugbm9ybWFsLgotICAgICAgICBp
ZiAoY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIGNhc2UgKDEpIERv
IHRoZSBwdXQsIHRoZW4gcmV0dXJuIGxlYXZpbmcgdGhlIHNsb3QgdW5jYWNoYWJsZS4KLSAgICAg
ICAgICAgIGlmIChzcGVjaWZpY0Z1bmN0aW9uID09IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGNhc2Ug
KDIpIERlc3BlY2lmeSwgZmFsbCB0aHJvdWdoIHRvICgzKS4KLSAgICAgICAgICAgIHNldFN0cnVj
dHVyZSh2bSwgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjYXNlICgzKSBz
ZXQgdGhlIHNsb3QsIGRvIHRoZSBwdXQsIHJldHVybi4KKyAgICAgICAgc3RydWN0dXJlLT5kaWRS
ZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQwNCwxNyArMTM3MCwxNCBAQCBpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQp
ICYmICFpc0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RydWN0
dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQsIHNsb3QuY29u
dGV4dCgpKTsKKyAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5j
b250ZXh0KCkpOwogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0
cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJs
ZSwKLSAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgotICAg
IGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlz
LCBvZmZzZXQpOworICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBp
ZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5z
UmVhZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDQ3LDIwICsxNDEw
LDIwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOwogICAgIEFTU0VSVCghc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRp
ZXMoKSk7CiAKLSAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Cisg
ICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCAwLCBzbG90KTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEo
YXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpcyk7
Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFs
dWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKIH0KIAogaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIXZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZp
bmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxh
YmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93
blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCk7CiB9CiAKIGlubGlu
ZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CkBAIC0xNDcwLDcgKzE0MzMsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0
aG91dFRyCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAg
ICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
KCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1
ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03NiwxMyArNzYsMTEgQEAgc3Ry
dWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBXcml0ZUJhcnJp
ZXI8SlNDZWxsPiBzcGVjaWZpY1ZhbHVlOwogCi0gICAgUHJvcGVydHlNYXBFbnRyeShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cmluZ0ltcGwqIGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCisgICAgUHJvcGVydHlN
YXBFbnRyeShTdHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQg
YXR0cmlidXRlcykKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQp
CiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICAgICAsIHNwZWNpZmljVmFs
dWUodm0sIG93bmVyLCBzcGVjaWZpY1ZhbHVlLCBXcml0ZUJhcnJpZXI8SlNDZWxsPjo6TWF5QmVO
dWxsKQogICAgIHsKICAgICB9CiB9OwpAQCAtMTQxLDggKzEzOSw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KICAg
ICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVu
dHJ5IFZhbHVlVHlwZTsKIApAQCAtMTU3LDggKzE1Myw4IEBAIHB1YmxpYzoKIAogICAgIC8vIENv
bnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFibGUg
dG8gY29weSwgb3IgYm90aC4KICAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKFZNJiwg
dW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKLSAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xv
bmUoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgc3RhdGlj
IFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5VGFi
bGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0
eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVy
dHlUYWJsZSYpOwogICAgIH5Qcm9wZXJ0eVRhYmxlKCk7CiAKICAgICAvLyBPcmRlcmVkIGl0ZXJh
dGlvbiBtZXRob2RzLgpAQCAtMTk2LDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9m
ZnNldCBuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFjaXR5KTsKIAogICAgIC8v
IENvcHkgdGhpcyBQcm9wZXJ0eVRhYmxlLCBlbnN1cmluZyB0aGUgY29weSBoYXMgYXQgbGVhc3Qg
dGhlIGNhcGFjaXR5IHByb3ZpZGVkLgotICAgIFByb3BlcnR5VGFibGUqIGNvcHkoVk0mLCBKU0Nl
bGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZSogY29w
eShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXpl
X3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0yMDQsMTIgKzIwMCwxMiBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
IHByaXZhdGU6CiAgICAgUHJvcGVydHlUYWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0
eSk7Ci0gICAgUHJvcGVydHlUYWJsZShWTSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUm
KTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgSlNDZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJsZShWTSYsIGNvbnN0
IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAKICAgICBQcm9wZXJ0eVRhYmxlKGNv
bnN0IFByb3BlcnR5VGFibGUmKTsKICAgICAvLyBVc2VkIHRvIGluc2VydCBhIHZhbHVlIGtub3du
IG5vdCB0byBiZSBpbiB0aGUgdGFibGUsIGFuZCB3aGVyZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJl
IGF2YWlsYWJsZS4KQEAgLTQ5NCwxNSArNDkwLDE1IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBQ
cm9wZXJ0eVRhYmxlOjpuZXgKICAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6
ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0
eVRhYmxlOjpjb3B5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkp
CitpbmxpbmUgUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y29weShWTSYgdm0sIHVuc2ln
bmVkIG5ld0NhcGFjaXR5KQogewogICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2tleUNvdW50
KTsKIAogICAgIC8vIEZhc3QgY2FzZTsgaWYgdGhlIG5ldyB0YWJsZSB3aWxsIGJlIHRoZSBzYW1l
IG1faW5kZXhTaXplIGFzIHRoaXMgb25lLCB3ZSBjYW4gbWVtY3B5IGl0LAogICAgIC8vIHNhdmUg
cmVoYXNoaW5nIGFsbCBrZXlzLgogICAgIGlmIChzaXplRm9yQ2FwYWNpdHkobmV3Q2FwYWNpdHkp
ID09IG1faW5kZXhTaXplKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0s
IG93bmVyLCAqdGhpcyk7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25l
ciwgbmV3Q2FwYWNpdHksICp0aGlzKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNs
b25lKHZtLCAqdGhpcyk7CisgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBuZXdD
YXBhY2l0eSwgKnRoaXMpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDE3MDcy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCwxNiArNDQsMTYgQEAgUHJvcGVydHlUYWJsZSogUHJvcGVydHlU
YWJsZTo6Y3JlYXRlKFZNJgogICAgIHJldHVybiB0YWJsZTsKIH0KIAotUHJvcGVydHlUYWJsZSog
UHJvcGVydHlUYWJsZTo6Y2xvbmUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0
eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2
bSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkg
UHJvcGVydHlUYWJsZSh2bSwgb3duZXIsIG90aGVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQ
cm9wZXJ0eVRhYmxlKHZtLCBvdGhlcik7CiAgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICByZXR1cm4gdGFibGU7CiB9CiAKLVByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNs
b25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25z
dCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNs
b25lKFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxl
JiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25l
ciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVy
dHlUYWJsZSh2bSwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CiAgICAgdGFibGUtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7CiB9CkBAIC02OSw3ICs2OSw3IEBAIFByb3Bl
cnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCB1bnMKICAgICBBU1NFUlQoaXNQb3dlck9m
MihtX2luZGV4U2l6ZSkpOwogfQogCi1Qcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiAg
ICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBt
X2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkKICAgICAsIG1faW5kZXhNYXNrKG90aGVyLm1f
aW5kZXhNYXNrKQpAQCAtODIsMTAgKzgyLDggQEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJs
ZShWTSYgdm0sIEpTQwogICAgIG1lbWNweShtX2luZGV4LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6
ZSgpKTsKIAogICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXMtPmVuZCgpOwotICAgIGZvciAoaXRlcmF0
b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICBmb3IgKGl0ZXJh
dG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICBpdGVyLT5r
ZXktPnJlZigpOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3Bl
Y2lmaWNWYWx1ZS5nZXQoKSk7Ci0gICAgfQogCiAgICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zm
c2V0cyB2ZWN0b3IuCiAgICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zm
c2V0cyA9IG90aGVyLm1fZGVsZXRlZE9mZnNldHMuZ2V0KCk7CkBAIC05Myw3ICs5MSw3IEBAIFBy
b3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0MKICAgICAgICAgbV9kZWxldGVk
T2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0
ZWRPZmZzZXRzKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmIG90aGVyKQorUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiAgICAgOiBKU0Nl
bGwodm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6
ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkKICAgICAsIG1faW5kZXhNYXNrKG1f
aW5kZXhTaXplIC0gMSkKQEAgLTEwOSw3ICsxMDcsNiBAQCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7CiAgICAgICAg
IHJlaW5zZXJ0KCppdGVyKTsKICAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOwogICAg
IH0KIAogICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgpAQCAtMTMyLDE3
ICsxMjksNCBAQCBQcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCiAgICAgZmFzdEZyZWUo
bV9pbmRleCk7CiB9CiAKLXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFByb3BlcnR5VGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAg
IEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPmVuZCgpOwotICAgIGZvciAoUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+YmVnaW4oKTsgcHRyICE9IGVu
ZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOwot
fQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Myw3
ICsxNzMsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAg
c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFz
c0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKHZtKSk7CiAgICAgc2V0
SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEF0dHJpYnV0ZXNJblBy
ZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgwKTsKICAgICBz
ZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7CiAgICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7
CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmllZChmYWxzZSk7CkBAIC0yMDMsNyArMjAyLDYg
QEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtKQogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKHZtKSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVBy
b3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNl
dFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgwKTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9u
cyhmYWxzZSk7CiAgICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0U3RhdGljRnVu
Y3Rpb25zUmVpZmllZChmYWxzZSk7CkBAIC0yMzIsNyArMjMwLDYgQEAgU3RydWN0dXJlOjpTdHJ1
Y3R1cmUoVk0mIHZtLCBjb25zdCBTdHJ1YwogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8ocHJldmlvdXMtPmhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJs
ZVByb3BlcnRpZXMocHJldmlvdXMtPmhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpOwogICAg
IHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJh
c2hDb3VudChwcmV2aW91cy0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkpOwogICAgIHNl
dFByZXZlbnRFeHRlbnNpb25zKHByZXZpb3VzLT5wcmV2ZW50RXh0ZW5zaW9ucygpKTsKICAgICBz
ZXREaWRUcmFuc2l0aW9uKHRydWUpOwogICAgIHNldFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQocHJl
dmlvdXMtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7CkBAIC0zMDAsNyArMjk3LDcgQEAgdm9p
ZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgIGZpbmRTdHJ1Y3R1cmVz
QW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOwog
ICAgIAogICAgIGlmICh0YWJsZSkgewotICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBz
dHJ1Y3R1cmUsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNh
cGFjaXR5KSk7CisgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0sIG51bWJlck9mU2xvdHNG
b3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiAgICAgICAgIHN0cnVj
dHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAgIH0KICAgICAKQEAgLTMxNyw3ICszMTQsNyBAQCB2
b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgICAgIHN0cnVjdHVy
ZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZp
b3VzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50
cnkodm0sIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJl
LT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpLCBzdHJ1Y3R1cmUt
Pm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVu
dHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5t
X29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKICAgICAgICAgcHJv
cGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTMzNiwzMCArMzMzLDEyIEBA
IHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5ld091dE9mTGluZVMKICAgICByZXR1cm4gbmV4
dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShvdXRPZkxpbmVDYXBhY2l0eSgpKTsKIH0KICAKLXZv
aWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFt
ZS51aWQoKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotCi0gICAgQVNTRVJUKGlzRGlj
dGlvbmFyeSgpKTsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKLQotICAgIFByb3BlcnR5
TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5nZXQocmVwKTsKLSAgICBBU1NFUlQo
ZW50cnkpOwotICAgIGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci19Ci0KLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1w
bChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUltcGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0
cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwog
CiAgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3Ry
YW5zaXRpb25UYWJsZS5nZXQodWlkLCBhdHRyaWJ1dGVzKSkgewotICAgICAgICBKU0NlbGwqIHNw
ZWNpZmljVmFsdWVJblByZXZpb3VzID0gZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFs
dWVJblByZXZpb3VzLmdldCgpOwotICAgICAgICBpZiAoc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMg
JiYgc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgIT0gc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB2YWxpZGF0ZU9mZnNldChleGlzdGluZ1RyYW5zaXRpb24tPm1f
b2Zmc2V0LCBleGlzdGluZ1RyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBv
ZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0OwogICAgICAgICByZXR1cm4gZXhp
c3RpbmdUcmFuc2l0aW9uOwpAQCAtMzY4LDE2ICszNDcsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHJldHVybiAwOwogfQogCi1TdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUu
dWlkKCksIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3Vy
cmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2spOwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9m
ZnNldCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0
SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QKQEAgLTQzMiwyNSArNDExLDEyIEBAIE5vblByb3BlcnR5
VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3QKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0
b3JhZ2U7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24o
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNl
dCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgY29udGV4dCkKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJv
cGVydHlPZmZzZXQmIG9mZnNldCwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IGNvbnRleHQpCiB7
Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIHNwZWNpZmljIGZ1bmN0aW9uLCB3ZSBtYXkgaGF2ZSBnb3Qg
dG8gdGhpcyBwb2ludCBpZiB0aGVyZSBpcwotICAgIC8vIGFscmVhZHkgYSB0cmFuc2l0aW9uIHdp
dGggdGhlIGNvcnJlY3QgcHJvcGVydHkgbmFtZSBhbmQgYXR0cmlidXRlcywgYnV0Ci0gICAgLy8g
c3BlY2lhbGl6ZWQgdG8gYSBkaWZmZXJlbnQgZnVuY3Rpb24uICBJbiB0aGlzIGNhc2Ugd2UganVz
dCB3YW50IHRvIGdpdmUgdXAKLSAgICAvLyBhbmQgZGVzcGVjaWFsaXplIHRoZSB0cmFuc2l0aW9u
LgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBjbGVhciB0aGUgdmFsdWUgb2Ygc3BlY2lmaWNGdW5j
dGlvbiB3aGljaCB3aWxsIHJlc3VsdAotICAgIC8vIGluIHVzIGFkZGluZyBhIG5vbi1zcGVjaWZp
YyB0cmFuc2l0aW9uLCBhbmQgYW55IHN1YnNlcXVlbnQgbG9va3VwIGluCi0gICAgLy8gU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlIHdpbGwganVzdCB1
c2UgdGhhdC4KLSAgICBpZiAoc3BlY2lmaWNWYWx1ZSAmJiBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmNvbnRhaW5zKHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcykpCi0gICAgICAg
IHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICBBU1NFUlQoIVN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1
cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KSk7Cisg
ICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmUoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpOwogICAg
IAotICAgIGlmIChzdHJ1Y3R1cmUtPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1h
eFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7
Ci0KICAgICBpbnQgbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAgICBpZiAoY29udGV4dCA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpCiAgICAgICAgIG1heFRyYW5zaXRpb25MZW5ndGggPSBzX21h
eFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZDsKQEAgLTQ1OSw3ICs0MjUsNyBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgaWYgKHN0cnVjdHVy
ZS0+dHJhbnNpdGlvbkNvdW50KCkgPiBtYXhUcmFuc2l0aW9uTGVuZ3RoKSB7CiAgICAgICAgIFN0
cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7Ci0g
ICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIG9mZnNldCA9IHRyYW5z
aXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJu
IHRyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNDY5LDExICs0MzUsMTAgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldFByZXZp
b3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1l
SW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRy
aWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmlj
VmFsdWVJblByZXZpb3VzLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1
ZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSwgdHJhbnNpdGlv
bikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAKLSAgICBvZmZzZXQg
PSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1f
b2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB7CkBAIC01MDUsMzQg
KzQ3MCwxMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3Bl
cnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQg
PSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5zaXRpb24tPnBpbigpOwotCi0gICAgdHJh
bnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cmFuc2l0aW9u
OwotfQotCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSByZXBsYWNlRnVuY3Rp
b24pCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50
KCkgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOwotICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgIHRyYW5zaXRpb24tPnNldFNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQoKSArIDEpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIHN0
cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsK
LSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1
Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOworICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCi0g
ICAgaWYgKHRyYW5zaXRpb24tPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgdHJhbnNpdGlvbi0+ZGVzcGVjaWZ5
QWxsRnVuY3Rpb25zKHZtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0gdHJh
bnNpdGlvbi0+ZGVzcGVjaWZ5RnVuY3Rpb24odm0sIHJlcGxhY2VGdW5jdGlvbik7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAgfQotCiAgICAgdHJhbnNpdGlv
bi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQpA
QCAtNTQ0LDcgKzQ4NSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VU
cmEKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUp
OwogCiAgICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KHZtLCBkZWZlckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0s
IHRyYW5zaXRpb24pKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0p
KTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0Owog
ICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCkBAIC01NjgsNyArNTA5LDcgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaQogCiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSwgdHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZt
KSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAg
IHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRyYW5zaXRpb24tPnBp
bigpOwpAQCAtNjMxLDcgKzU3Miw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0
ZW5zaW9uc1QKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0g
c3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2ZW50RXh0ZW5zaW9u
cyh0cnVlKTsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKQEAgLTY0MCwxMyArNTgxLDEzIEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QKICAgICByZXR1cm4gdHJhbnNp
dGlvbjsKIH0KIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9y
Q2xvbmVJZlBpbm5lZChWTSYgdm0sIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBT
dHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CiAgICAgCiAgICAgaWYgKGlzUGlubmVk
UHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZt
LCBvd25lciwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKKyAgICAgICAgcmV0dXJuIHBy
b3BlcnR5VGFibGUoKS0+Y29weSh2bSwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKICAg
ICAKICAgICAvLyBIb2xkIHRoZSBsb2NrIHdoaWxlIHN0ZWFsaW5nIHRoZSB0YWJsZSAtIHNvIHRo
YXQgZ2V0Q29uY3VycmVudGx5KCkgb24gYW5vdGhlciB0aHJlYWQKICAgICAvLyB3aWxsIGVpdGhl
ciBoYXZlIHRvIGJ5cGFzcyB0aGlzIHN0cnVjdHVyZSwgb3Igd2lsbCBnZXQgdG8gdXNlIHRoZSBw
cm9wZXJ0eSB0YWJsZQpAQCAtNjgyLDcgKzYyMyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZp
b3VzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGUo
aW5kZXhpbmdUeXBlKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZt
LCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2
bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAg
ICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2Fw
YWNpdHkoKSk7CiAgICAgCkBAIC03NzMsMTkgKzcxNCwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLVByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCi0gICAgaWYgKHNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hD
b3VudCkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmlu
Zyh2bSwgZGVmZXJHQyk7CiAgICAgCiAgICAgcGluKCk7CiAKLSAgICByZXR1cm4gcHV0U3BlY2lm
aWNWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogfQogCiBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtODEyLDExICs3NTAsMzIgQEAgdm9pZCBT
dHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogewogICAgIEFTU0VSVCghaGFzUmFy
ZURhdGEoKSk7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJlUmFy
ZURhdGE6OmNyZWF0ZSh2bSwgcHJldmlvdXMoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQodm0sIHRoaXMsIHJhcmVEYXRhKTsKKyAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwogICAg
IEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIAorICAgIGlm
ICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSog
cmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOworICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0cykgeworICAgICAgICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdh
dGNocG9pbnRTZXRzID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlUmFy
ZURhdGE6OlByb3BlcnR5V2F0Y2hwb2ludE1hcD4oKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICB9CisgICAgYXV0byByZXN1bHQgPSByYXJlRGF0YS0+bV9yZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXRzLT5hZGQob2Zmc2V0LCBudWxscHRyKTsKKyAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICByZXR1cm47CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOworfQorCiAjaWYgRFVNUF9Q
Uk9QRVJUWU1BUF9TVEFUUwogCiBzdHJ1Y3QgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dl
ciB7CkBAIC04NDUsMjEgKzgwNCwyMSBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29u
c2lzdGVuY3koCiAKICNlbmRpZgogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9w
ZXJ0eVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVj
dHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtKQogewogICAgIGlmICghcHJvcGVydHlUYWJs
ZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUo
dm0sIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICByZXR1cm4gUHJvcGVydHlU
YWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwogfQogCi1Qcm9wZXJ0eVRh
YmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0sIFN0cnVj
dHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhWTSYgdm0pCiB7CiAgICAgaWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5
VGFibGUoKS5nZXQoKSk7CiAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgbnVt
YmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIH0K
IAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJ
bXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQor
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBs
KiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogewogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4
PiBzdHJ1Y3R1cmVzOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwpAQCAtODcxLDcgKzgzMCw2
IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGwKICAgICAgICAgUHJv
cGVydHlNYXBFbnRyeSogZW50cnkgPSB0YWJsZS0+Z2V0KHVpZCk7CiAgICAgICAgIGlmIChlbnRy
eSkgewogICAgICAgICAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAgICAg
ICAgICAgc3BlY2lmaWNWYWx1ZSA9IGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgcmVzdWx0ID0gZW50cnktPm9mZnNldDsKICAgICAgICAgICAg
IHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTg4NSwxNCArODQzLDEzIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3Vy
cmVudGwKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgYXR0cmlidXRl
cyA9IHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKTsKLSAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKTsKICAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgfQogICAgIAogICAgIHJldHVybiBp
bnZhbGlkT2Zmc2V0OwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwq
JiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKIHsKICAgICBB
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKSA9PSBpbmZvKCkpOwpAQCAtOTA3LDM5ICs4NjQsMTAgQEAgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcgogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKLSAgICBzcGVjaWZpY1Zh
bHVlID0gZW50cnktPnNwZWNpZmljVmFsdWUuZ2V0KCk7CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZz
ZXQ7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFByb3Bl
cnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVp
ZCgpKTsKLSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NF
UlQoZW50cnktPnNwZWNpZmljVmFsdWUpOwotICAgIGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmNsZWFy
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlBbGxG
dW5jdGlvbnMoVk0mIHZtKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwotfQotCi1Q
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmlj
VmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgR0NTYWZlQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKICAgICAKQEAgLTk1Niw3ICs4
ODQsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsCiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9p
bmxpbmVDYXBhY2l0eSk7CiAKLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVu
dHJ5KHZtLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSks
IG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAg
cHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0
cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5n
ZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiBuZXdPZmZzZXQ7
CkBAIC0xMDYwLDcgKzk4OCw2IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4pOwogICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2
aW91c09yUmFyZURhdGEpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NwZWNp
ZmljVmFsdWVJblByZXZpb3VzKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3Bl
cnR5VGFibGUoKSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxl
VW5zYWZlKTsKQEAgLTEwODMsOCArMTAxMCw3IEBAIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVD
aGFpbk1heUludGVyY2UKICAgICAgICAgY3VycmVudCA9IHByb3RvdHlwZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKHZtKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAg
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFs
dWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXQodm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xMTQ0LDEzICsx
MDcwLDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgIGlm
ICh0YWJsZSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUt
PmJlZ2luKCk7CiAgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5l
bmQoKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgZm9y
ICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGl0
ZXItPmtleSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KGl0ZXItPm9mZnNldCkpOwotICAgICAgICAg
ICAgaWYgKGl0ZXItPnNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBEdW1wQ29udGV4
dCBkdW1teUNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCI9PiIsIFJhd1BvaW50
ZXIoaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9CkBA
IC0xMTYwLDEwICsxMDgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgYwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0cnVjdHVyZS0+bV9vZmZz
ZXQpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cykg
ewotICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlDb250ZXh0OwotICAgICAgICAgICAgb3V0
LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZp
b3VzLmdldCgpKSk7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KCJ9LCAi
LCBJbmRleGluZ1R5cGVEdW1wKGluZGV4aW5nVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
MSwxMiArMTExLDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNz
KCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0
eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0
eVNsb3Q6OkNvbnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0KTsKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCA9IFB1dFByb3BlcnR5U2xvdDo6VW5rbm93
bkNvbnRleHQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlk
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
cm9wZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpA
QCAtMTM4LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogCiAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAgCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0
aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KHZtLCB0aGlz
LCBwcm90b3R5cGUpOyB9CiAgICAgICAgIApAQCAtMTg4LDggKzE4Nyw2IEBAIHB1YmxpYzoKICAg
ICAvLyBXaWxsIGp1c3QgdGhlIHByb3RvdHlwZSBjaGFpbiBpbnRlcmNlcHQgdGhpcyBwcm9wZXJ0
eSBhY2Nlc3M/CiAgICAgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0m
LCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKLSAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZl
U3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91
czsgfQotICAgICAgICAKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzSUQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwpAQCAt
MjYzLDEwICsyNjAsMTAgQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwg
UHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZN
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJv
cGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBn
ZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQpOwotICAgIFByb3BlcnR5T2Zmc2V0
IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1
cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOwogCiAg
ICAgdm9pZCBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzV2l0aFByb3RvQ2hlY2soYm9vbCBp
c19fcHJvdG9fXykKICAgICB7CkBAIC0yODMsOSArMjgwLDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gIUpTQzo6aXNWYWxpZE9mZnNldChtX29mZnNldCk7CiAgICAgfQogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0
eU5hbWUpOwotICAgIHZvaWQgZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpIHsgc2V0
U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCk7IH0KLQogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hl
KCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIHZvaWQgZ2V0
UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CkBAIC0zNjQsMTMgKzM1OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VCh0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgbV90cmFu
c2l0aW9uV2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7CiAgICAgfQotICAgICAgICAKKyAg
ICAKICAgICB2b2lkIG5vdGlmeVRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgpIGNvbnN0Owog
ICAgIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0Owog
ICAgIH0KKyAgICAKKyAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cyhWTSYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICB2b2lkIGRpZFJlcGxhY2VQcm9wZXJ0eShQcm9w
ZXJ0eU9mZnNldCk7CisgICAgV2F0Y2hwb2ludFNldCogcHJvcGVydHlSZXBsYWNlbWVudFdhdGNo
cG9pbnRTZXQoUHJvcGVydHlPZmZzZXQpOwogCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4gdG9TdHJ1Y3R1cmVTaGFwZSgpOwogICAgIApAQCAtNDA2LDcgKzQwNCw2IEBAIHB1YmxpYzoK
ICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3Bl
cnRpZXNFeGNsdWRpbmdQcm90bywgSGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNF
eGNsdWRpbmdQcm90bywgMSwgNCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc05vbkVu
dW1lcmFibGVQcm9wZXJ0aWVzLCBIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcywgMSwgNSk7CiAg
ICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCBhdHRyaWJ1dGVzSW5QcmV2aW91cywgQXR0cmli
dXRlc0luUHJldmlvdXMsIDE0LCA2KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCwgU3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50LCAy
LCAyMCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHByZXZlbnRFeHRlbnNpb25zLCBQcmV2
ZW50RXh0ZW5zaW9ucywgMSwgMjIpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRUcmFu
c2l0aW9uLCBEaWRUcmFuc2l0aW9uLCAxLCAyMyk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2ws
IHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQsIFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQsIDEsIDI0KTsK
QEAgLTQyMSw3ICs0MTgsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlKFZNJiwgY29uc3QgU3RydWN0dXJlKik7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiwg
U3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFs
dWUsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogCiAgICAgLy8gVGhp
cyB3aWxsIHJldHVybiB0aGUgc3RydWN0dXJlIHRoYXQgaGFzIGEgdXNhYmxlIHByb3BlcnR5IHRh
YmxlLCB0aGF0IHByb3BlcnR5IHRhYmxlLAogICAgIC8vIGFuZCB0aGUgbGlzdCBvZiBzdHJ1Y3R1
cmVzIHRoYXQgd2UgdmlzaXRlZCBiZWZvcmUgd2UgZ290IHRvIGl0LiBJZiBpdCByZXR1cm5zIGEK
QEAgLTQzMSwxOSArNDI4LDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5k
KTsKIAotICAgIFByb3BlcnR5T2Zmc2V0IHB1dFNwZWNpZmljVmFsdWUoVk0mLCBQcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJv
cGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAogICAgIHZvaWQgY3Jl
YXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5z
aWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAg
IGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgZGVz
cGVjaWZ5QWxsRnVuY3Rpb25zKFZNJik7Ci0KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJs
ZT4mIHByb3BlcnR5VGFibGUoKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZChWTSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIFByb3BlcnR5VGFi
bGUqIGNvcHlQcm9wZXJ0eVRhYmxlKFZNJiwgU3RydWN0dXJlKiBvd25lcik7Ci0gICAgUHJvcGVy
dHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiwgU3RydWN0dXJlKiBvd25l
cik7CisgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
Vk0mKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZShWTSYpOworICAgIFBy
b3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYpOwogICAgIHZvaWQg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCiAgICAg
ewpAQCAtNTA3LDggKzUwMSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21h
eFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNp
dGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCi0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA9IDM7Ci0gICAgCiAgICAgLy8g
VGhlc2UgbmVlZCB0byBiZSBwcm9wZXJseSBhbGlnbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
ICdTdHJ1Y3R1cmUnCiAgICAgLy8gcGFydCBvZiB0aGUgb2JqZWN0LgogICAgIFN0cnVjdHVyZUlE
QmxvYiBtX2Jsb2I7CkBAIC01MjEsNyArNTEzLDYgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJp
ZXI8SlNDZWxsPiBtX3ByZXZpb3VzT3JSYXJlRGF0YTsKIAogICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBtX25hbWVJblByZXZpb3VzOwotICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fc3BlY2lmaWNW
YWx1ZUluUHJldmlvdXM7CiAKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw5ICsxMDIsNyBAQCBpbmxp
bmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mCiBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mIHZtLCBTdHJpbmdJbXBsKiB1aWQpCiB7
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlSWdub3JlZDsKLSAgICByZXR1cm4gZ2V0Q29uY3VycmVudGx5KAotICAgICAgICB2bSwgdWlk
LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOworICAgIHJldHVybiBn
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogfQogCiBpbmxpbmUg
Ym9vbCBTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29u
c3QKQEAgLTIyMyw2ICsyMjEsMzEgQEAgQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVy
dHlUYWJsZQogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiB9CiAKK2lubGluZSB2
b2lkIFN0cnVjdHVyZTo6ZGlkUmVwbGFjZVByb3BlcnR5KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBpZiAoTElLRUxZKCFoYXNSYXJlRGF0YSgpKSkKKyAgICAgICAgcmV0dXJuOworICAg
IFN0cnVjdHVyZVJhcmVEYXRhOjpQcm9wZXJ0eVdhdGNocG9pbnRNYXAqIG1hcCA9IHJhcmVEYXRh
KCktPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cy5nZXQoKTsKKyAgICBpZiAoTElLRUxZKCFt
YXApKQorICAgICAgICByZXR1cm47CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbWFwLT5nZXQo
b2Zmc2V0KTsKKyAgICBpZiAoTElLRUxZKCFzZXQpKQorICAgICAgICByZXR1cm47CisgICAgc2V0
LT5maXJlQWxsKCJQcm9wZXJ0eSBkaWQgZ2V0IHJlcGxhY2VkIik7Cit9CisKK2lubGluZSBXYXRj
aHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3Bl
cnR5V2F0Y2hwb2ludE1hcCogbWFwID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzLmdldCgpOworICAgIGlmICghbWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gbWFwLT5nZXQob2Zmc2V0KTsKK30KKwogQUxXQVlTX0lOTElORSBib29sIFN0cnVj
dHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlUYWJs
ZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5j
cHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTEgQEAgU3Ry
dWN0dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJhcmVEYXRhOjpjcgogICAgIHJldHVybiByYXJlRGF0
YTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAgc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKS0+U3RydWN0dXJlUmFy
ZURhdGE6On5TdHJ1Y3R1cmVSYXJlRGF0YSgpOworfQorCiBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3Ry
dWN0dXJlUmFyZURhdGEoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxs
KHZtLCB2bS5zdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNp
bmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDAsNiAr
NDEsMTAgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgOiBwdWJsaWMgSlNDZWxsIAogcHVibGlj
OgogICAgIHN0YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0YSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7
CiAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwpAQCAtNTMs
MTAgKzU4LDEyIEBAIHB1YmxpYzoKIAogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1l
cmF0aW9uQ2FjaGUoKTsKICAgICB2b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoVk0mLCBjb25zdCBT
dHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSk7Ci0KKyAgICAK
ICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBT
dHJ1Y3R1cmU7CisgICAgCiAgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBTdHJ1Y3R1cmUqKTsK
IAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdzOwpAQCAtNjQsNiArNzEsOSBAQCBw
cml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7CiAgICAgV3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAgV3JpdGVCYXJy
aWVyPEpTUHJvcGVydHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsKKyAgICAKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8UHJvcGVydHlPZmZzZXQsIFJlZlB0cjxXYXRjaHBvaW50U2V0Piwg
V1RGOjpJbnRIYXNoPFByb3BlcnR5T2Zmc2V0PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czxQcm9wZXJ0eU9mZnNldD4+IFByb3BlcnR5V2F0Y2hwb2ludE1hcDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UHJvcGVydHlXYXRjaHBvaW50TWFwPiBtX3JlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234316</attachid>
            <date>2014-07-02 21:50:37 -0700</date>
            <delta_ts>2014-07-03 16:36:45 -0700</delta_ts>
            <desc>it just folded some constants</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>97151</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
NiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxl
eEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAg
Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAogICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWlu
Q291bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVu
dE9iamVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBo
ZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1
ZSA9IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5t
X29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAg
ICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
U2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9m
ZnNldCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwg
ZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
I2VuZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0g
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFy
aWFudC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAg
ICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50
Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBA
IC0yOTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZt
LCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdz
IHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2
ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0
cmVuZ2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1
cmUsIG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29m
ZnNldChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0
YXR1cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYg
QEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0
dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90
aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRl
cm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtODYsOSArODMsNiBAQCBi
b29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCFhcmVDb21w
YXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSAhPSBvdGhlci5t
X3NwZWNpZmljVmFsdWUpCi0gICAgICAgIG1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKLQog
ICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCkBA
IC0xMTIsOCArMTA2LDYgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRl
eHQpLCAiXSIpOwogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgIG91dC5wcmludCgi
LCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwg
Y29udGV4dCkpOwotICAgIGlmIChzcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIG91dC5wcmludCgi
LCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCkp
OwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBA
IHN0cnVjdCBEdW1wQ29udGV4dDsKIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAg
ICBHZXRCeUlkVmFyaWFudCgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKQEAgLTU4LDcg
KzU3LDYgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0K
ICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRl
QmFzZTsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzMsNyArNzEsNiBA
QCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKICAgICBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsOCArMjU0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsICpzdHViLT5tX2NhbGxM
aW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxleEdldFN0YXR1cy5jaGFpbigpLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQo
KSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzQsMTkgKzMzNCwxMyBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscyk7CiAKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVh
ZE9ubHkpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBzdG9y
aW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxp
emVkIHNsb3QuCi0gICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTM4NCwyMiArMzc4LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkgb3B0
aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9u
IGlzIGNhY2hlZCB0by4KLSAgICAgICAgLy8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFsbG93
cyB1cyB0byBndWFyZCBhZ2FpbnN0IGEgdHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAgICAg
ICAgLy8gdmFsdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgc3RvcmluZyBh
IHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IHRoaXMgd291bGQgb25seSBiZSBhIHByb2Js
ZW0gaWYKLSAgICAgICAgLy8gICB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNw
ZWNpZmljIHZhbHVlIGFscmVhZHksIHNpbmNlIGlmIGl0IGRpZG4ndCwKLSAgICAgICAgLy8gICB0
aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZp
YyB2YWx1ZS4gSWYgaXQgZGlkCi0gICAgICAgIC8vICAgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB0
aGVuIHdlJ2xsIGtub3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAgICAgICAgLy8g
ICBzcGVjaWZpY1ZhbHVlIHdpbGwgdGVsbCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gLSBJ
ZiB3ZSdyZSBub3Qgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFnYWlu
LCB0aGlzIHdvdWxkIG9ubHkgYmUgYQotICAgICAgICAvLyAgIHByb2JsZW0gaWYgdGhlIGV4aXN0
aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hpY2ggd2UgY2hlY2sg
Zm9yCi0gICAgICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KLSAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCAw
LCBvZmZzZXQpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0
dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3VycyBp
biBiaXphcnJlIGNhc2VzIG9ubHkuIFNlZSBhYm92ZS4KLSAgICAgICAgQVNTRVJUKCF0cmFuc2l0
aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFs
aWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0
LmFwcGVuZFZhcmlhbnQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0
QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDYgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgog
ICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25zdGFu
dENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0g
b3RoZXIubV9hbHRlcm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3Bl
Y2lmaWNWYWx1ZTsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhl
ci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtl
X3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzgs
NyArNzcsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiB9CiAK
IFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZp
Y1ZhbHVlLAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsCiAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAgICAgUHV0QnlJZFZhcmlh
bnQgcmVzdWx0OwpAQCAtODksNyArODgsNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFu
dDo6c2V0dGVyKAogICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1p
bmFsUHJvdG90eXBlKCk7CiAgICAgfQogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAg
ICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1ZTsKICAgICByZXN1bHQubV9j
YWxsTGlua1N0YXR1cyA9IHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KQEAgLTIyOSw4ICsyMjcsNiBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5D
b250ZXh0KFByaW50CiAgICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNr
cygpLCBjb250ZXh0KSwgIl0iKTsKICAgICAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAg
ICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUo
bV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOwotICAgICAgICBpZiAobV9zcGVjaWZpY1ZhbHVl
KQotICAgICAgICAgICAgb3V0LnByaW50KCIsIHNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQo
bV9zcGVjaWZpY1ZhbHVlLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQg
PSAiLCBtX29mZnNldCk7CiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExp
bmtTdGF0dXMpOwogICAgICAgICBvdXQucHJpbnQoIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxNzA3MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
OwogICAgIAogICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSwKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hh
aW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpOwogICAg
IAogICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQpAQCAtMTE3LDEyICsx
MTcsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7CiAgICAgfQog
ICAgIAotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBB
U1NFUlQoa2luZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX3NwZWNpZmljVmFsdWU7
Ci0gICAgfQotICAgIAogICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlQoa2luZCgpID09IFNldHRlcik7CkBAIC0xNDIsNyArMTM2
LDYgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwogICAgIENvbnN0
YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKICAgICBKU09iamVjdCog
bV9hbHRlcm5hdGVCYXNlOwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwogICAgIFByb3Bl
cnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4g
bV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDEx
ICs3MCw2IEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6YWRkKFdhdGNocG9pbnQqIHdhdGMKICAgICBt
X3N0YXRlID0gSXNXYXRjaGVkOwogfQogCi12b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGwoY29u
c3QgY2hhciogcmVhc29uKQotewotICAgIGZpcmVBbGwoU3RyaW5nRmlyZURldGFpbChyZWFzb24p
KTsKLX0KLQogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCiB7CiAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVkKTsKQEAgLTg1LDYg
KzgwLDExIEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmkKICAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogfQogCit2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxT
bG93KGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBmaXJlQWxsU2xvdyhTdHJpbmdGaXJlRGV0
YWlsKHJlYXNvbikpOworfQorCiB2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxXYXRjaHBvaW50
cyhjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiB7CiAgICAgd2hpbGUgKCFtX3NldC5pc0VtcHR5
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDE3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGZpcmVBbGwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKLSAg
ICAgICAgaWYgKHN0YXRlKCkgIT0gSXNXYXRjaGVkKQorICAgICAgICBpZiAoTElLRUxZKHN0YXRl
KCkgIT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNs
b3coZGV0YWlsKTsKICAgICB9CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJl
QWxsKGNvbnN0IGNoYXIqIHJlYXNvbik7CisgICAgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJl
YXNvbikKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBmaXJlQWxsU2xvdyhyZWFzb24pOworICAgIH0K
ICAgICAKICAgICB2b2lkIHRvdWNoKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7CkBA
IC0xNTcsNiArMTYyLDcgQEAgcHVibGljOgogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNOb3RF
bXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpcmVBbGxTbG93KGNvbnN0IEZpcmVEZXRhaWwmKTsgLy8gQ2FsbCBvbmx5
IGlmIHlvdSd2ZSBjaGVja2VkIGlzV2F0Y2hlZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpcmVBbGxTbG93KGNvbnN0IGNoYXIqIHJlYXNvbik7IC8vIERpdHRvLgogICAgIAogcHJpdmF0
ZToKICAgICB2b2lkIGZpcmVBbGxXYXRjaHBvaW50cyhjb25zdCBGaXJlRGV0YWlsJik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIK
ICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAj
aW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKICNpbmNs
dWRlICJTdHJpbmdPYmplY3QuaCIKQEAgLTEzODcsMTQgKzEzODgsMTcgQEAgYm9vbCBBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGlu
ZyBtb3JlIHN1YnRsZT8KICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0t
OykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5zcGVjaWZpY1ZhbHVlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhc3RhdHVz
W2ldLmFsdGVybmF0ZUJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3Rh
bnRSZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KHZhbHVlLm1fdmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgICAgICAgICAgdGhp
c1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5m
cmVlemUoc3RhdHVzW2ldLnNwZWNpZmljVmFsdWUoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAgICAgICAgICB9CkBA
IC0xNTY5LDExICsxNTczLDI3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZzZXQ6IHsKKyAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEgZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1f
Z3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLm1fdmFsdWUsIGRhdGEub2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCkgewor
ICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKICAg
ICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NE
YXRhIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vz
c0RhdGFJbmRleCgpXTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdldENv
bnN0YW50UHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS5tX3Zh
bHVlLCBkYXRhLm9mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQgJiYganNEeW5hbWljQ2FzdDxH
ZXR0ZXJTZXR0ZXIqPihyZXN1bHQpKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAq
bV9ncmFwaC5mcmVlemUocmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3Zt
LmdldHRlclNldHRlclN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAg
LTE2MDIsMTQgKzE2MjIsMjIgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3Rh
dGVUeQogICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICBpZiAo
IXZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpT
VmFsdWUgYmFzZUZvckxvYWQ7CisgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNl
KCkpCisgICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2Uu
bV92YWx1ZTsKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQorICAgICAgICAg
ICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlRm9yTG9hZCwgdmFyaWFu
dC5vZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAg
ICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKICAgICAgICAgICAgICAgICBtX2dyYXBoLAotICAg
ICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSksCisg
ICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKICAgICAgICAg
ICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgIHJl
c3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE3MDcyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNjc4LDYgKzE2NzgsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ29uc3RhbnRJbnRlcgogCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZz
ZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKKyAgICBp
ZiAoYmFzZS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgb2Zmc2V0
KSkgeworICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAgICAgICAg
IHJldHVybiB3ZWFrSlNDb25zdGFudChjb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CiAgICAgTm9kZSogcHJvcGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZz
ZXQpKQogICAgICAgICBwcm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMTc3MiwyMSArMTc3OSwx
NCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIC8vIFVubGVzcyB3
ZSB3YW50IGJ1Z3MgbGlrZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODg3ODMsIHdlIG5lZWQgdG8KICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3Jp
Z2luYWwgZ2V0X2J5X2lkIGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCiAgICAg
Ly8gYWxsIG9mIHRoZSBzcGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlm
IHRoZXJlIGhhZCBiZWVuIGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3Ro
ZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UsIG9y
IGlmIHRoZQotICAgIC8vIGFjY2VzcyB3YXMgY29tcGlsZWQgdG8gYSBXZWFrSlNDb25zdGFudCBz
cGVjaWZpYyB2YWx1ZSwgaW4gd2hpY2ggY2FzZSB3ZSBtaWdodCBub3QKLSAgICAvLyBoYXZlIGFu
eSBleHBsaWNpdCB1c2Ugb2YgdGhlIGJhc2UgYXQgYWxsLgotICAgIGlmICh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKSB8fCBvcmlnaW5hbEJhc2UgIT0gYmFzZSkKKyAgICAvLyBvbiBzb21ldGhpbmcg
b3RoZXIgdGhhbiB0aGUgYmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2Uu
CisgICAgaWYgKG9yaWdpbmFsQmFzZSAhPSBiYXNlKQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIG9yaWdpbmFsQmFzZSk7CiAgICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWU7Ci0gICAgaWYg
KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICBsb2FkZWRWYWx1ZSA9IHdlYWtKU0Nv
bnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9h
ZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgIHZhcmlhbnQuY2FsbExp
bmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAotICAgICAgICAgICAgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIHZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZz
ZXQpOwotICAgIH0KKyAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAor
ICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDogcHJlZGlj
dGlvbiwKKyAgICAgICAgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwK
KyAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlPZmZz
ZXQgOiBHZXRCeU9mZnNldCk7CiAgICAgCiAgICAgaWYgKCF2YXJpYW50LmNhbGxMaW5rU3RhdHVz
KCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0aW5hdGlvbk9wZXJhbmQpLCBs
b2FkZWRWYWx1ZSk7CkBAIC0xOTQ5LDE0ICsxOTQ5LDggQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQogICAg
ICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKTsK
ICAgICAgICAgCi0gICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlOwotICAgICAgICBpZiAodmFyaWFu
dC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICBsb2FkZWRWYWx1ZSA9IHdlYWtKU0NvbnN0
YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgICAgIFNwZWND
ZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAg
ICAgICAgICAgICAgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQpOwotICAgICAgICB9CisgICAgICAg
IE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAgICAgICBTcGVj
Q2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLCBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldCk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBh
ZGRUb0dyYXBoKEdldFNldHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI5NTgsMTAg
KzI5NTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRX
aXRoU3RydWN0dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCku
b25seVN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSA9IHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNW
YWx1ZS5hc0NlbGwoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9u
LCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNl
LCBpZGVudGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTI5NjksMTYgKzI5
NjAsMTYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkp
KTsKICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0KKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IGluZmVycmVkVmFsdWUgPQogICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID8gd2F0
Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1ZSgpIDogSlNWYWx1ZSgpOwotICAgICAgICAgICAgICAg
IGlmICghc3BlY2lmaWNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICghaW5mZXJyZWRWYWx1
ZSkgewogICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0
UHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVk
aWN0aW9uKSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdh
dGNocG9pbnQsIE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChzcGVjaWZpY1ZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChpbmZl
cnJlZFZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBjYXNlIENsb3N1cmVWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcwNzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNyw4ICs0MDcsMTMgQEAgcHJpdmF0ZToKIAogICAgICAg
ICBhZGRCYXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQuc3Ry
dWN0dXJlU2V0KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1
ZSgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3Jh
cGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSk7CisgICAgICAgIEpTVmFsdWUgYmFz
ZUZvckxvYWQ7CisgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKKyAgICAgICAg
ICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7CisgICAgICAgIGlm
IChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JM
b2FkLCB2YXJpYW50Lm9mZnNldCgpKSkgeworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9D
b25zdGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg2LDIyICsx
Mjg2LDIzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAg
ICBib29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShTdHJ1Y3R1cmUqIHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkKQorICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5
cGVNZXRob2RTYW5lKEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGUsIFN0cmluZ0ltcGwqIHVpZCkK
ICAgICB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RyaW5nUHJvdG90eXBlLT5z
dHJ1Y3R1cmUoKTsKKyAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNVbnVzZWQ7
Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAg
ICAgICAgICB2bSgpLCB1aWQsIGF0dHJpYnV0ZXNVbnVzZWQsIHNwZWNpZmljVmFsdWUpOworICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2
bSgpLCB1aWQsIGF0dHJpYnV0ZXNVbnVzZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghc3BlY2lmaWNWYWx1ZSkKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShzdHJpbmdQcm90b3R5cGUsIG9mZnNldCk7CisgICAgICAgIGlmICgh
dmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAo
IXNwZWNpZmljVmFsdWUtPmluaGVyaXRzKEpTRnVuY3Rpb246OmluZm8oKSkpCisgICAgICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0ganNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOwor
ICAgICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHNw
ZWNpZmljVmFsdWUpOwogICAgICAgICBpZiAoZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmlu
c2ljRm9yKENvZGVGb3JDYWxsKSAhPSBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKQEAgLTEzMzAsOSArMTMzMSw5IEBA
IHByaXZhdGU6CiAgICAgICAgIC8vICh0aGF0IHdvdWxkIGNhbGwgdG9TdHJpbmcoKSkuIFdlIGRv
bid0IHdhbnQgdGhlIERGRyB0byBoYXZlIHRvIGRpc3Rpbmd1aXNoCiAgICAgICAgIC8vIGJldHdl
ZW4gdGhlIHR3bywganVzdCBiZWNhdXNlIHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBnZXQgY29u
ZnVzaW5nLiBTbyB3ZQogICAgICAgICAvLyBqdXN0IHJlcXVpcmUgYm90aCBtZXRob2RzIHRvIGJl
IHNhbmUuCi0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1By
b3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkpCisg
ICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlwZU9i
amVjdCwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0
cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBs
KCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90
b3R5cGVPYmplY3QsIHZtKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MDcyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03ODksNiArNzg5LDI2IEBAIHVuc2lnbmVkIEdyYXBoOjpyZXF1aXJlZFJlZ2lzdGVyQ291
bnRGb3IKICAgICByZXR1cm4gc3RkOjptYXgoZnJhbWVSZWdpc3RlckNvdW50KCksIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4aXQoKSk7CiB9CiAKK0pTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAg
aWYgKCFiYXNlIHx8ICFiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gb2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICAKKyAgICBXYXRjaHBv
aW50U2V0KiBzZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0
KG9mZnNldCk7CisgICAgaWYgKCFzZXQgfHwgIXNldC0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgCisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKKyAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CisgICAgCisgICAgd2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc2V0KTsKKyAgICAK
KyAgICByZXR1cm4gb2JqZWN0LT5nZXREaXJlY3Qob2Zmc2V0KTsKK30KKwogSlNBY3RpdmF0aW9u
KiBHcmFwaDo6dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQogewogICAgIHJldHVybiBub2Rl
LT5keW5hbWljQ2FzdENvbnN0YW50PEpTQWN0aXZhdGlvbio+KCk7CkBAIC05MDAsNyArOTIwLDYg
QEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRvciYgdgogICAgICAgICAgICAg
Y2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgdmlzaXRv
ci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5VmFsdWUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkp
OwogICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCA9IHZhcmlhbnQu
c3RydWN0dXJlU2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHNl
dC5zaXplKCk7IGotLTspCiAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVu
YmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3OSw2ICs2NzksOCBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwogICAgIHVu
c2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKICAgICAK
KyAgICBKU1ZhbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpOworICAgIAogICAgIEpTQWN0aXZhdGlvbiogdHJ5R2V0QWN0aXZhdGlv
bihOb2RlKik7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdHJ5R2V0UmVnaXN0ZXJz
KE5vZGUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5mcmVlemUo
dmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVy
ZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhh
dmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3
YXRjaCB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzNCw4ICszMjM0
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsK
LSAgICAgICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKSkpOworICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdDsKKyAgICAg
ICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgICAgIGNv
bnN0YW50UmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5vZmZzZXQoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29uc3RhbnRSZXN1bHQpCisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29uc3RhbnRS
ZXN1bHQpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIExWYWx1ZSBwcm9w
ZXJ0eUJhc2U7CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzA3MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDEsNiArMTAxLDggQEAgc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKFZN
JiB2bQogewogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlG
aXJlc1dhdGNocG9pbnRzKCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVy
ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2sp
KTsKKyAgICAKKyAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2Vt
ZW50cyh2bSwgb2Zmc2V0KTsKIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwogCkBAIC0zNDMsOCArMzQ1LDExIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJZFN0
dWIoCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
KHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKICAgICB9CiAgICAg
CisgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKICAgICBp
ZiAoY2hhaW4pIHsKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQUik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAko
cmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsNyBAQCBi
b29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om1heUludGVyY2VwCiB7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7CiAgICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh2bSwgdWlk
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzKTsK
ICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkocmV2aXNp
b24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw4ICsxMzksNyBAQCB2b2lkIEpTVmFsdWU6OnB1dFRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSogCiAKICAgICBmb3IgKDsgOyBvYmogPSBhc09iamVjdChwcm90
b3R5cGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1
Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUp
OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52
YWxpZE9mZnNldCkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkgewog
ICAgICAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgpKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24g
MTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fZnVuY3Rpb25Qcm90b3R5cGUuc2V0KHZtLCB0
aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKHZtLCBGdW5jdGlvblByb3RvdHlwZTo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSkpKTsgLy8gVGhlIHJlYWwgcHJvdG90eXBl
IHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlzIGNyZWF0ZWQuCiAgICAgbV9mdW5j
dGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSh2
bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIG1fYm91bmRGdW5jdGlv
blN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTQm91bmRGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJl
KHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7Ci0gICAgbV9uYW1lZEZ1bmN0
aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b24odm0sIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUs
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCAwLCBtX2Z1bmN0aW9uTmFtZU9mZnNl
dCkpOworICAgIG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCB2
bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwg
bV9mdW5jdGlvbk5hbWVPZmZzZXQpKTsKICAgICBtX2ludGVybmFsRnVuY3Rpb25TdHJ1Y3R1cmUu
c2V0KHZtLCB0aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMs
IG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICBKU0Z1bmN0aW9uKiBjYWxsRnVuY3Rp
b24gPSAwOwogICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24gPSAwOwpAQCAtNDI5LDggKzQy
OSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBQcm90
b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1hcDsKICAgICBTdHJ1Y3R1cmUq
IGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gcHJvdG90eXBlTWFwLmVtcHR5T2JqZWN0U3RydWN0
dXJlRm9yUHJvdG90eXBlKG1fb2JqZWN0UHJvdG90eXBlLmdldCgpLCBKU0ZpbmFsT2JqZWN0Ojpk
ZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwotICAg
IGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kb25lLCAw
LCAwLCBvZmZzZXQpOwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT52YWx1ZSwgMCwgMCwgb2Zmc2V0KTsKKyAgICBpdGVyYXRvclJlc3VsdFN0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3Vs
dFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+ZG9uZSwgMCwgb2Zmc2V0KTsKKyAgICBpdGVy
YXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIDAsIG9m
ZnNldCk7CiAgICAgbV9pdGVyYXRvclJlc3VsdFN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIGl0ZXJh
dG9yUmVzdWx0U3RydWN0dXJlKTsKIAogICAgIG1fZXZhbEZ1bmN0aW9uLnNldCh2bSwgdGhpcywg
SlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCB2bS5wcm9wZXJ0eU5hbWVzLT5ldmFsLnN0
cmluZygpLCBnbG9iYWxGdW5jRXZhbCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwg
MjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
RXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtNTUsMTUgKzU1
LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBBcnJheUNvbnZlbnRpb25zLmguCiBzdGF0aWMgdW5z
aWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CiAKLUpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93
KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBpZiAoY2VsbC0+dHlwZSgpID09IEpTRnVuY3Rpb25UeXBl
KQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICBpZiAoY2VsbC0+c3RydWN0dXJlKCktPmNsYXNz
SW5mbygpLT5pc1N1YkNsYXNzT2YoSW50ZXJuYWxGdW5jdGlvbjo6aW5mbygpKSkKLSAgICAgICAg
cmV0dXJuIGNlbGw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklB
TExZX0RFU1RSVUNUSUJMRShKU09iamVjdCk7CiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJQUxMWV9E
RVNUUlVDVElCTEUoSlNGaW5hbE9iamVjdCk7CiAKQEAgLTM2MCw3ICszNTEsNyBAQCB2b2lkIEpT
T2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgICAgICAgICBwcm90b3R5cGUg
PSBvYmotPnByb3RvdHlwZSgpOwogICAgICAgICAgICAgaWYgKHByb3RvdHlwZS5pc051bGwoKSkg
ewogICAgICAgICAgICAgICAgIEFTU0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJv
dG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkp
OwotICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0
TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2Jq
ZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdElu
dGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KQogICAg
ICAgICAgICAgICAgICAgICAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICAgICAgICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzcxLDgg
KzM2Miw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICBK
U09iamVjdCogb2JqOwogICAgIGZvciAob2JqID0gdGhpc09iamVjdDsgOyBvYmogPSBhc09iamVj
dChwcm90b3R5cGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2Jq
LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lm
aWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJl
KHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNW
YWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRP
bmx5KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSkt
PnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5h
bWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKQEAgLTQwNyw3ICszOTcsNyBAQCB2b2lkIEpTT2Jq
ZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgfQogICAgIAogICAgIEFTU0VSVCgh
dGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9y
ZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOwotICAg
IGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkgJiYgc2xv
dC5pc1N0cmljdE1vZGUoKSkKKyAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFs
PFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KSAmJiBzbG90Lmlz
U3RyaWN0TW9kZSgpKQogICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgcmV0dXJuOwogfQpA
QCAtMTIyNyw3ICsxMjE3LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0QWNjZXNzb3IoRXhl
Y1N0YQogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3NvcihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpcyk7Ci0gICAgcHV0RGlyZWN0SW50
ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
YXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBwdXREaXJl
Y3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKIAogICAgIC8vIHB1dERpcmVjdCB3aWxsIGNoYW5nZSBv
dXIgU3RydWN0dXJlIGlmIHdlIGFkZCBhIG5ldyBwcm9wZXJ0eS4gRm9yCiAgICAgLy8gZ2V0dGVy
cyBhbmQgc2V0dGVycywgdGhvdWdoLCB3ZSBhbHNvIG5lZWQgdG8gY2hhbmdlIG91ciBTdHJ1Y3R1
cmUKQEAgLTEyNjcsOSArMTI1Nyw4IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpT
Q2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0aWNGdW5jdGlvbnNGb3JEZWxl
dGUoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0
KHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKSkpIHsKKyAgICBpZiAoaXNWYWxpZE9mZnNldCh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpKSB7CiAg
ICAgICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udERlbGV0ZSAmJiAhdm0uaXNJbkRlZmluZU93blBy
b3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHRoaXNPYmplY3Qt
PnJlbW92ZURpcmVjdCh2bSwgcHJvcGVydHlOYW1lKTsKQEAgLTEzNTMsNyArMTM0Miw3IEBAIGJv
b2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0MKIAogc3RhdGljIEFMV0FZU19J
TkxJTkUgSlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBwcm9wZXJ0eU5hbWUpOworICAg
IEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldEFuZFdhdGNoKGV4ZWMsIHByb3BlcnR5TmFt
ZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChjYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpCkBAIC0xNDQ2LDIwICsxNDM1LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0lu
c3RhbmNlKEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0
UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkgY29uc3QKLXsKLSAgICBWTSYgdm0gPSBl
eGVjLT52bSgpOwotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgaWYgKGlzVmFsaWRPZmZz
ZXQoc3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNp
ZmljVmFsdWUpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlzIGNvdWxkIGJl
IGEgZnVuY3Rpb24gd2l0aGluIHRoZSBzdGF0aWMgdGFibGU/IC0gc2hvdWxkIHByb2JhYmx5Ci0g
ICAgLy8gYWxzbyBsb29rIGluIHRoZSBoYXNoPyAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIG5vdCBi
ZSBhIHByb2JsZW0sIHNpbmNlCi0gICAgLy8gd2UndmUgY3VycmVudGx5IGFsd2F5cyBjYWxsICdn
ZXQnIGZpcnN0LCB3aGljaCBzaG91bGQgaGF2ZSBwb3B1bGF0ZWQKLSAgICAvLyB0aGUgbm9ybWFs
IHN0b3JhZ2UuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9w
ZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1l
QXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIHByb3Bl
cnR5TmFtZXMuc2V0QmFzZU9iamVjdChvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBA
QAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBr
ZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29t
KQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwg
MjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEy
LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC01NiwxNSArNTYsNiBAQCBpbmxpbmUgSlNDZWxsKiBnZXRKU0Z1bmN0aW9u
KEpTVmFsdWUgdmFsCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTX0VYUE9SVF9QUklWQVRFIEpTQ2Vs
bCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCopOwotCi1pbmxpbmUgSlNDZWxsKiBnZXRD
YWxsYWJsZU9iamVjdChKU1ZhbHVlIHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNDZWxsKCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXRDYWxsYWJsZU9iamVjdFNsb3codmFs
dWUuYXNDZWxsKCkpOwotfQotCiBjbGFzcyBHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBJbnRlcm5hbEZ1
bmN0aW9uOwogY2xhc3MgSlNGdW5jdGlvbjsKQEAgLTExOSw2ICsxMTAsNyBAQCBwdWJsaWM6CiAg
ICAgfQogICAgICAgICAKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUp
IGNvbnN0OworICAgIEpTVmFsdWUgZ2V0QW5kV2F0Y2goRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1l
KSBjb25zdDsKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5h
bWUpIGNvbnN0OwogCiAgICAgYm9vbCBmYXN0R2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IFZNJiwgU3RydWN0dXJlJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKQEAgLTQ5MSw4
ICs0ODMsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNWYWx1
ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOwogCi0gICAgYm9vbCBnZXRQ
cm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU0NlbGwqJiBz
cGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKLQogICAgIC8vIFRoaXMgZ2V0IGZ1bmN0aW9uIG9ubHkg
bG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KICAgICBKU1ZhbHVlIGdldERpcmVjdChWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgewpAQCAtNTA0LDkgKzQ5NCw4
IEBAIHB1YmxpYzoKIAogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0CiAgICAgewotICAgICAg
ICBKU0NlbGwqIHNwZWNpZmljOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMt
PnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlLT5pbmxp
bmVDYXBhY2l0eSgpKTsKICAgICAgICAgcmV0dXJuIG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ID8g
Z2V0RGlyZWN0KG9mZnNldCkgOiBKU1ZhbHVlKCk7CiAgICAgfQpAQCAtNTIxLDkgKzUxMCw4IEBA
IHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldERpcmVjdE9mZnNldChWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogICAgIHsKLSAg
ICAgICAgSlNDZWxsKiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0
aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+
aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQ7CiAgICAgfQpAQCAtOTQ5
LDcgKzkzNyw3IEBAIHByaXZhdGU6CiAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJ
bmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhWTSYsIEFycmF5U3RvcmFn
ZSopOwogICAgICAgICAKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgotICAgIGJvb2wgcHV0RGlyZWN0
SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFBy
b3BlcnR5U2xvdCYsIEpTQ2VsbCopOworICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwog
CiAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1
Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1
bnNpZ25lZCwgUHJvcGVydHlPZmZzZXQpOwpAQCAtMTIxMyw4ICsxMjAxLDcgQEAgaW5saW5lIEpT
VmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogQUxXQVlTX0lOTElORSBib29sIEpTT2Jq
ZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0
cnVjdHVyZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmIHNsb3QpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNp
ZmljOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgaWYg
KExJS0VMWShpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUg
PSBnZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5oYXNHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKQEAgLTEyODUsNiArMTI3
MiwyMCBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK2lubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXRBbmRX
YXRjaChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7
CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CisgICAgaWYgKGNvbnN0X2Nhc3Q8SlNPYmpl
Y3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCkpIHsK
KyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGUoKSkgeworICAgICAgICAgICAgc2xvdC5zbG90
QmFzZSgpLT5zdHJ1Y3R1cmUoKS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KAorICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSk7
CisgICAgfQorICAgIAorICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCiBpbmxpbmUgSlNW
YWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1l
KSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwpAQCAtMTI5NSw3ICsxMjk2
LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChFeGVjU3RhdGUqIAogfQogCiB0ZW1w
bGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgotaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90LCBKU0NlbGwq
IHNwZWNpZmljRnVuY3Rpb24pCitpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKHZh
bHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSA9PSAhIShhdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpKTsKQEAgLTEzMDUsMjUgKzEzMDYsMTUgQEAgaW5saW5lIGJvb2wgSlNPYmpl
Y3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+
c3RydWN0dXJlKHZtKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkgewogICAg
ICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBjdXJyZW50
U3BlY2lmaWNGdW5jdGlvbjsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGN1cnJlbnRTcGVj
aWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGN1
cnJlbnRseSBhIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgdGhlcmUgbm93IGVpdGhlciBpc24ndCwK
LSAgICAgICAgICAgIC8vIG9yIHRoZSBuZXcgdmFsdWUgaXMgZGlmZmVyZW50LCB0aGVuIGRlc3Bl
Y2lmeS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiAmJiAoc3BlY2lm
aWNGdW5jdGlvbiAhPSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAg
c3RydWN0dXJlLT5kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24odm0sIHByb3BlcnR5TmFtZSk7
CiAgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3VycmVudEF0dHJpYnV0
ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgICAgICAvLyBBdCB0aGlz
IHBvaW50LCB0aGUgb2JqZWN0cyBzdHJ1Y3R1cmUgb25seSBoYXMgYSBzcGVjaWZpYyB2YWx1ZSBz
ZXQgaWYgcHJldmlvdXNseSB0aGVyZQotICAgICAgICAgICAgLy8gaGFkIGJlZW4gb25lIHNldCwg
YW5kIGlmIHRoZSBuZXcgdmFsdWUgYmVpbmcgc3BlY2lmaWVkIGlzIHRoZSBzYW1lIChvdGhlcndp
c2Ugd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGhhdmUgZGVzcGVjaWZpZWQsIGFib3ZlKS4gIFNv
LCBpZiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiBpcyBub3Qgc2V0LCBvciBpZiB0aGUgbmV3Ci0g
ICAgICAgICAgICAvLyB2YWx1ZSBpcyBkaWZmZXJlbnQgKG9yIHRoZXJlIGlzIG5vIG5ldyB2YWx1
ZSksIHRoZW4gdGhlIHNsb3Qgbm93IGhhcyBubyB2YWx1ZSAtIGFuZAotICAgICAgICAgICAgLy8g
YXMgc3VjaCBpdCBpcyBjYWNoYWJsZS4KLSAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBwcmV2
aW91c2x5IGEgdmFsdWUsIGFuZCB0aGUgbmV3IHZhbHVlIGlzIHRoZSBzYW1lLCB0aGVuIHdlIGNh
bm5vdCBjYWNoZS4KLSAgICAgICAgICAgIGlmICghY3VycmVudFNwZWNpZmljRnVuY3Rpb24gfHwg
KHNwZWNpZmljRnVuY3Rpb24gIT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pKQotICAgICAgICAg
ICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICAg
ICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xMzM0LDE1ICsxMzI1LDEzIEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgQnV0dGVy
Zmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKHRoaXMtPnN0cnVj
dHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgICAgIG5ld0J1
dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGlu
ZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCkt
PmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNGdW5jdGlvbik7CisgICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgp
LT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHRoaXMtPnN0cnVjdHVy
ZSgpLCBuZXdCdXR0ZXJmbHkpOwogCiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAg
ICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsK
ICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgLy8gU2VlIGNv
bW1lbnQgb24gc2V0TmV3UHJvcGVydHkgY2FsbCBiZWxvdy4KLSAgICAgICAgaWYgKCFzcGVjaWZp
Y0Z1bmN0aW9uKQotICAgICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQp
OworICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIGlm
IChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICB0aGlzLT5zdHJ1Y3R1cmUoKS0+
c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0xMzUwLDcgKzEzMzksNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJu
YWwoCiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgc2l6ZV90IGN1cnJlbnRDYXBh
Y2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpOwotICAgIGlmIChT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7CisgICAgaWYgKFN0cnVjdHVyZSogc3Ry
dWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkp
IHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAoY3VycmVudENhcGFjaXR5
ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewpAQCAtMTM2Miw0MCArMTM1MSwx
NyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIHNldFN0cnVj
dHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0ZXJmbHkpOwogICAgICAgICBw
dXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHBy
b3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRs
eSBjYWNoYWJsZSwKLSAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJs
ZSBzdGF0ZS4KLSAgICAgICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQotICAgICAgICAgICAgc2xv
dC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBzbG90LnNldE5ld1Byb3Bl
cnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIEpTQ2VsbCogY3VycmVudFNwZWNpZmljRnVu
Y3Rpb247Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3Vy
cmVudEF0dHJpYnV0ZXMsIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAg
aWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgIGlmICgobW9kZSA9PSBQdXRN
b2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzIGhl
cmU6Ci0gICAgICAgIC8vICAoMSkgVGhlcmUgaXMgYW4gZXhpc3Rpbmcgc3BlY2lmaWMgdmFsdWUg
c2V0LCBhbmQgd2UncmUgb3ZlcndyaXRpbmcgd2l0aCAqdGhlIHNhbWUgdmFsdWUqLgotICAgICAg
ICAvLyAgICAgICAqIERvIG5vdGhpbmcgLSBubyBuZWVkIHRvIGRlc3BlY2lmeSwgYnV0IHRoYXQg
bWVhbnMgd2UgY2FuJ3QgY2FjaGUgKGEgY2FjaGVkCi0gICAgICAgIC8vICAgICAgICAgcHV0IGNv
dWxkIHdyaXRlIGEgZGlmZmVyZW50IHZhbHVlKS4gTGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNo
YWJsZSBzdGF0ZS4KLSAgICAgICAgLy8gICgyKSBUaGVyZSBpcyBhIHNwZWNpZmljIHZhbHVlIGN1
cnJlbnRseSBzZXQsIGJ1dCB3ZSdyZSB3cml0aW5nIGEgZGlmZmVyZW50IHZhbHVlLgotICAgICAg
ICAvLyAgICAgICAqIEZpcnN0LCB3ZSBoYXZlIHRvIGRlc3BlY2lmeS4gIEhhdmluZyBkb25lIHNv
LCB0aGlzIGlzIG5vdyBhIHJlZ3VsYXIgc2xvdAotICAgICAgICAvLyAgICAgICAgIHdpdGggbm8g
c3BlY2lmaWMgdmFsdWUsIHNvIGdvIGFoZWFkICYgY2FjaGUgbGlrZSBub3JtYWwuCi0gICAgICAg
IC8vICAoMykgTm9ybWFsIGNhc2UsIHRoZXJlIGlzIG5vIHNwZWNpZmljIHZhbHVlIHNldC4KLSAg
ICAgICAgLy8gICAgICAgKiBHbyBhaGVhZCAmIGNhY2hlIGxpa2Ugbm9ybWFsLgotICAgICAgICBp
ZiAoY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIGNhc2UgKDEpIERv
IHRoZSBwdXQsIHRoZW4gcmV0dXJuIGxlYXZpbmcgdGhlIHNsb3QgdW5jYWNoYWJsZS4KLSAgICAg
ICAgICAgIGlmIChzcGVjaWZpY0Z1bmN0aW9uID09IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIGNhc2Ug
KDIpIERlc3BlY2lmeSwgZmFsbCB0aHJvdWdoIHRvICgzKS4KLSAgICAgICAgICAgIHNldFN0cnVj
dHVyZSh2bSwgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24odm0sIHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBjYXNlICgzKSBz
ZXQgdGhlIHNsb3QsIGRvIHRoZSBwdXQsIHJldHVybi4KKyAgICAgICAgc3RydWN0dXJlLT5kaWRS
ZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQwNCwxNyArMTM3MCwxNCBAQCBpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQp
ICYmICFpc0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgc3RydWN0
dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQsIHNsb3QuY29u
dGV4dCgpKTsKKyAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5j
b250ZXh0KCkpOwogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9mZnNldCk7CiAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRS
ZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgcHV0RGly
ZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0
cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJs
ZSwKLSAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgotICAg
IGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlz
LCBvZmZzZXQpOworICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICBp
ZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5z
UmVhZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDQ3LDIwICsxNDEw
LDIwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOwogICAgIEFTU0VSVCghc3RydWN0dXJlKCktPmhhc0dldHRlclNldHRlclByb3BlcnRp
ZXMoKSk7CiAKLSAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Cisg
ICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUs
IHZhbHVlLCAwLCBzbG90KTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNldHRlcigpICYmICEo
YXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpcyk7
Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFs
dWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKIH0KIAogaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQoIXZh
bHVlLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZp
bmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxh
YmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93
blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCk7CiB9CiAKIGlubGlu
ZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CkBAIC0xNDcwLDcgKzE0MzMsNyBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0V2l0
aG91dFRyCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBtX2J1dHRlcmZseS5nZXQoKTsK
ICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAg
ICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgc3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
KCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHkodm0sIHN0
cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1
ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhh
c2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03NiwxMyArNzYsMTEgQEAgc3Ry
dWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBXcml0ZUJhcnJp
ZXI8SlNDZWxsPiBzcGVjaWZpY1ZhbHVlOwogCi0gICAgUHJvcGVydHlNYXBFbnRyeShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIFN0cmluZ0ltcGwqIGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCisgICAgUHJvcGVydHlN
YXBFbnRyeShTdHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQg
YXR0cmlidXRlcykKICAgICAgICAgOiBrZXkoa2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQp
CiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICAgICAsIHNwZWNpZmljVmFs
dWUodm0sIG93bmVyLCBzcGVjaWZpY1ZhbHVlLCBXcml0ZUJhcnJpZXI8SlNDZWxsPjo6TWF5QmVO
dWxsKQogICAgIHsKICAgICB9CiB9OwpAQCAtMTQxLDggKzEzOSw2IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwg
VHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KICAg
ICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVu
dHJ5IFZhbHVlVHlwZTsKIApAQCAtMTU3LDggKzE1Myw4IEBAIHB1YmxpYzoKIAogICAgIC8vIENv
bnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFibGUg
dG8gY29weSwgb3IgYm90aC4KICAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKFZNJiwg
dW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKLSAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xv
bmUoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgc3RhdGlj
IFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5VGFi
bGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0
eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVy
dHlUYWJsZSYpOwogICAgIH5Qcm9wZXJ0eVRhYmxlKCk7CiAKICAgICAvLyBPcmRlcmVkIGl0ZXJh
dGlvbiBtZXRob2RzLgpAQCAtMTk2LDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9m
ZnNldCBuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFjaXR5KTsKIAogICAgIC8v
IENvcHkgdGhpcyBQcm9wZXJ0eVRhYmxlLCBlbnN1cmluZyB0aGUgY29weSBoYXMgYXQgbGVhc3Qg
dGhlIGNhcGFjaXR5IHByb3ZpZGVkLgotICAgIFByb3BlcnR5VGFibGUqIGNvcHkoVk0mLCBKU0Nl
bGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZSogY29w
eShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXpl
X3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0yMDQsMTIgKzIwMCwxMiBAQCBwdWJsaWM6CiAjZW5kaWYK
IAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTdHJ1Y3R1cmVJc0ltbW9ydGFsOworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAK
IHByaXZhdGU6CiAgICAgUHJvcGVydHlUYWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0
eSk7Ci0gICAgUHJvcGVydHlUYWJsZShWTSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUm
KTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgSlNDZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJsZShWTSYsIGNvbnN0
IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAKICAgICBQcm9wZXJ0eVRhYmxlKGNv
bnN0IFByb3BlcnR5VGFibGUmKTsKICAgICAvLyBVc2VkIHRvIGluc2VydCBhIHZhbHVlIGtub3du
IG5vdCB0byBiZSBpbiB0aGUgdGFibGUsIGFuZCB3aGVyZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJl
IGF2YWlsYWJsZS4KQEAgLTQ5NCwxNSArNDkwLDE1IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBQ
cm9wZXJ0eVRhYmxlOjpuZXgKICAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6
ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0
eVRhYmxlOjpjb3B5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkp
CitpbmxpbmUgUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y29weShWTSYgdm0sIHVuc2ln
bmVkIG5ld0NhcGFjaXR5KQogewogICAgIEFTU0VSVChuZXdDYXBhY2l0eSA+PSBtX2tleUNvdW50
KTsKIAogICAgIC8vIEZhc3QgY2FzZTsgaWYgdGhlIG5ldyB0YWJsZSB3aWxsIGJlIHRoZSBzYW1l
IG1faW5kZXhTaXplIGFzIHRoaXMgb25lLCB3ZSBjYW4gbWVtY3B5IGl0LAogICAgIC8vIHNhdmUg
cmVoYXNoaW5nIGFsbCBrZXlzLgogICAgIGlmIChzaXplRm9yQ2FwYWNpdHkobmV3Q2FwYWNpdHkp
ID09IG1faW5kZXhTaXplKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0s
IG93bmVyLCAqdGhpcyk7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25l
ciwgbmV3Q2FwYWNpdHksICp0aGlzKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNs
b25lKHZtLCAqdGhpcyk7CisgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBuZXdD
YXBhY2l0eSwgKnRoaXMpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDE3MDcy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCwxNiArNDQsMTYgQEAgUHJvcGVydHlUYWJsZSogUHJvcGVydHlU
YWJsZTo6Y3JlYXRlKFZNJgogICAgIHJldHVybiB0YWJsZTsKIH0KIAotUHJvcGVydHlUYWJsZSog
UHJvcGVydHlUYWJsZTo6Y2xvbmUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0
eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2
bSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkg
UHJvcGVydHlUYWJsZSh2bSwgb3duZXIsIG90aGVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQ
cm9wZXJ0eVRhYmxlKHZtLCBvdGhlcik7CiAgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsK
ICAgICByZXR1cm4gdGFibGU7CiB9CiAKLVByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNs
b25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25z
dCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNs
b25lKFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxl
JiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25l
ciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVy
dHlUYWJsZSh2bSwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CiAgICAgdGFibGUtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7CiB9CkBAIC02OSw3ICs2OSw3IEBAIFByb3Bl
cnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCB1bnMKICAgICBBU1NFUlQoaXNQb3dlck9m
MihtX2luZGV4U2l6ZSkpOwogfQogCi1Qcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiAg
ICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBt
X2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkKICAgICAsIG1faW5kZXhNYXNrKG90aGVyLm1f
aW5kZXhNYXNrKQpAQCAtODIsMTAgKzgyLDggQEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJs
ZShWTSYgdm0sIEpTQwogICAgIG1lbWNweShtX2luZGV4LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6
ZSgpKTsKIAogICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXMtPmVuZCgpOwotICAgIGZvciAoaXRlcmF0
b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICBmb3IgKGl0ZXJh
dG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICBpdGVyLT5r
ZXktPnJlZigpOwotICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3Bl
Y2lmaWNWYWx1ZS5nZXQoKSk7Ci0gICAgfQogCiAgICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zm
c2V0cyB2ZWN0b3IuCiAgICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zm
c2V0cyA9IG90aGVyLm1fZGVsZXRlZE9mZnNldHMuZ2V0KCk7CkBAIC05Myw3ICs5MSw3IEBAIFBy
b3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0MKICAgICAgICAgbV9kZWxldGVk
T2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0
ZWRPZmZzZXRzKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmIG90aGVyKQorUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiAgICAgOiBKU0Nl
bGwodm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6
ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkKICAgICAsIG1faW5kZXhNYXNrKG1f
aW5kZXhTaXplIC0gMSkKQEAgLTEwOSw3ICsxMDcsNiBAQCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7CiAgICAgICAg
IHJlaW5zZXJ0KCppdGVyKTsKICAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgdm0u
aGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOwogICAg
IH0KIAogICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgpAQCAtMTMyLDE3
ICsxMjksNCBAQCBQcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCiAgICAgZmFzdEZyZWUo
bV9pbmRleCk7CiB9CiAKLXZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwq
IGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIFByb3BlcnR5VGFibGUqIHRoaXNP
YmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpF
Q1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAg
IEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPmVuZCgpOwotICAgIGZvciAoUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+YmVnaW4oKTsgcHRyICE9IGVu
ZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOwot
fQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Myw3
ICsxNzMsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAg
c2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFz
c0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKHZtKSk7CiAgICAgc2V0
SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEF0dHJpYnV0ZXNJblBy
ZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgwKTsKICAgICBz
ZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7CiAgICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7
CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmllZChmYWxzZSk7CkBAIC0yMDMsNyArMjAyLDYg
QEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtKQogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1Nl
dHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKHZtKSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVBy
b3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNl
dFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgwKTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9u
cyhmYWxzZSk7CiAgICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0U3RhdGljRnVu
Y3Rpb25zUmVpZmllZChmYWxzZSk7CkBAIC0yMzIsNyArMjMwLDYgQEAgU3RydWN0dXJlOjpTdHJ1
Y3R1cmUoVk0mIHZtLCBjb25zdCBTdHJ1YwogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0
ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8ocHJldmlvdXMtPmhhc1JlYWRPbmx5T3JHZXR0ZXJT
ZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oKSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJs
ZVByb3BlcnRpZXMocHJldmlvdXMtPmhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpOwogICAg
IHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJh
c2hDb3VudChwcmV2aW91cy0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkpOwogICAgIHNl
dFByZXZlbnRFeHRlbnNpb25zKHByZXZpb3VzLT5wcmV2ZW50RXh0ZW5zaW9ucygpKTsKICAgICBz
ZXREaWRUcmFuc2l0aW9uKHRydWUpOwogICAgIHNldFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQocHJl
dmlvdXMtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoKSk7CkBAIC0zMDAsNyArMjk3LDcgQEAgdm9p
ZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgIGZpbmRTdHJ1Y3R1cmVz
QW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOwog
ICAgIAogICAgIGlmICh0YWJsZSkgewotICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBz
dHJ1Y3R1cmUsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNh
cGFjaXR5KSk7CisgICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0sIG51bWJlck9mU2xvdHNG
b3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiAgICAgICAgIHN0cnVj
dHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAgIH0KICAgICAKQEAgLTMxNyw3ICszMTQsNyBAQCB2
b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgICAgIHN0cnVjdHVy
ZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZp
b3VzKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50
cnkodm0sIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJl
LT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpLCBzdHJ1Y3R1cmUt
Pm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVu
dHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5t
X29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpKTsKICAgICAgICAgcHJv
cGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0KICAgICAKQEAgLTMzNiwzMCArMzMzLDEyIEBA
IHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5ld091dE9mTGluZVMKICAgICByZXR1cm4gbmV4
dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShvdXRPZkxpbmVDYXBhY2l0eSgpKTsKIH0KICAKLXZv
aWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFt
ZS51aWQoKTsKLQotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotCi0gICAgQVNTRVJUKGlzRGlj
dGlvbmFyeSgpKTsKLSAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKLQotICAgIFByb3BlcnR5
TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5nZXQocmVwKTsKLSAgICBBU1NFUlQo
ZW50cnkpOwotICAgIGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci19Ci0KLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1w
bChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUltcGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0
cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwog
CiAgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3Ry
YW5zaXRpb25UYWJsZS5nZXQodWlkLCBhdHRyaWJ1dGVzKSkgewotICAgICAgICBKU0NlbGwqIHNw
ZWNpZmljVmFsdWVJblByZXZpb3VzID0gZXhpc3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFs
dWVJblByZXZpb3VzLmdldCgpOwotICAgICAgICBpZiAoc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMg
JiYgc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgIT0gc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgICAg
IHJldHVybiAwOwogICAgICAgICB2YWxpZGF0ZU9mZnNldChleGlzdGluZ1RyYW5zaXRpb24tPm1f
b2Zmc2V0LCBleGlzdGluZ1RyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBv
ZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0OwogICAgICAgICByZXR1cm4gZXhp
c3RpbmdUcmFuc2l0aW9uOwpAQCAtMzY4LDE2ICszNDcsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHJldHVybiAwOwogfQogCi1TdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFp
c0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUu
dWlkKCksIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVj
dHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpT
Q2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3Vy
cmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2spOwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9m
ZnNldCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0
SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QKQEAgLTQzMiwyNSArNDExLDEyIEBAIE5vblByb3BlcnR5
VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3QKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0
b3JhZ2U7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24o
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNl
dCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgY29udGV4dCkKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJv
cGVydHlPZmZzZXQmIG9mZnNldCwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IGNvbnRleHQpCiB7
Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIHNwZWNpZmljIGZ1bmN0aW9uLCB3ZSBtYXkgaGF2ZSBnb3Qg
dG8gdGhpcyBwb2ludCBpZiB0aGVyZSBpcwotICAgIC8vIGFscmVhZHkgYSB0cmFuc2l0aW9uIHdp
dGggdGhlIGNvcnJlY3QgcHJvcGVydHkgbmFtZSBhbmQgYXR0cmlidXRlcywgYnV0Ci0gICAgLy8g
c3BlY2lhbGl6ZWQgdG8gYSBkaWZmZXJlbnQgZnVuY3Rpb24uICBJbiB0aGlzIGNhc2Ugd2UganVz
dCB3YW50IHRvIGdpdmUgdXAKLSAgICAvLyBhbmQgZGVzcGVjaWFsaXplIHRoZSB0cmFuc2l0aW9u
LgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBjbGVhciB0aGUgdmFsdWUgb2Ygc3BlY2lmaWNGdW5j
dGlvbiB3aGljaCB3aWxsIHJlc3VsdAotICAgIC8vIGluIHVzIGFkZGluZyBhIG5vbi1zcGVjaWZp
YyB0cmFuc2l0aW9uLCBhbmQgYW55IHN1YnNlcXVlbnQgbG9va3VwIGluCi0gICAgLy8gU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlIHdpbGwganVzdCB1
c2UgdGhhdC4KLSAgICBpZiAoc3BlY2lmaWNWYWx1ZSAmJiBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmNvbnRhaW5zKHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcykpCi0gICAgICAg
IHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKLSAgICBBU1NFUlQoIVN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1
cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KSk7Cisg
ICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmUoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpOwogICAg
IAotICAgIGlmIChzdHJ1Y3R1cmUtPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1h
eFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7
Ci0KICAgICBpbnQgbWF4VHJhbnNpdGlvbkxlbmd0aDsKICAgICBpZiAoY29udGV4dCA9PSBQdXRQ
cm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpCiAgICAgICAgIG1heFRyYW5zaXRpb25MZW5ndGggPSBzX21h
eFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZDsKQEAgLTQ1OSw3ICs0MjUsNyBAQCBT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgaWYgKHN0cnVjdHVy
ZS0+dHJhbnNpdGlvbkNvdW50KCkgPiBtYXhUcmFuc2l0aW9uTGVuZ3RoKSB7CiAgICAgICAgIFN0
cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7Ci0g
ICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIG9mZnNldCA9IHRyYW5z
aXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJu
IHRyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNDY5LDExICs0MzUsMTAgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldFByZXZp
b3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1l
SW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRy
aWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKLSAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmlj
VmFsdWVJblByZXZpb3VzLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1
ZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSwgdHJhbnNpdGlv
bikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAKLSAgICBvZmZzZXQg
PSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1f
b2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB7CkBAIC01MDUsMzQg
KzQ3MCwxMCBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3Bl
cnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQg
PSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5zaXRpb24tPnBpbigpOwotCi0gICAgdHJh
bnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cmFuc2l0aW9u
OwotfQotCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSByZXBsYWNlRnVuY3Rp
b24pCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50
KCkgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOwotICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgIHRyYW5zaXRpb24tPnNldFNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQoKSArIDEpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIHN0
cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsK
LSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1
Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOworICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCi0g
ICAgaWYgKHRyYW5zaXRpb24tPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgdHJhbnNpdGlvbi0+ZGVzcGVjaWZ5
QWxsRnVuY3Rpb25zKHZtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYm9vbCByZW1vdmVkID0gdHJh
bnNpdGlvbi0+ZGVzcGVjaWZ5RnVuY3Rpb24odm0sIHJlcGxhY2VGdW5jdGlvbik7Ci0gICAgICAg
IEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAgfQotCiAgICAgdHJhbnNpdGlv
bi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQpA
QCAtNTQ0LDcgKzQ4NSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VU
cmEKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUp
OwogCiAgICAgICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5
KHZtLCBkZWZlckdDKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0s
IHRyYW5zaXRpb24pKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0p
KTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0Owog
ICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCkBAIC01NjgsNyArNTA5LDcgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaQogCiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSwgdHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZt
KSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAg
IHRyYW5zaXRpb24tPnNldERpY3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRyYW5zaXRpb24tPnBp
bigpOwpAQCAtNjMxLDcgKzU3Miw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0
ZW5zaW9uc1QKIAogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0g
c3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2ZW50RXh0ZW5zaW9u
cyh0cnVlKTsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKQEAgLTY0MCwxMyArNTgxLDEzIEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QKICAgICByZXR1cm4gdHJhbnNp
dGlvbjsKIH0KIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9y
Q2xvbmVJZlBpbm5lZChWTSYgdm0sIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBT
dHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElm
TmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CiAgICAgCiAgICAgaWYgKGlzUGlubmVk
UHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZt
LCBvd25lciwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKKyAgICAgICAgcmV0dXJuIHBy
b3BlcnR5VGFibGUoKS0+Y29weSh2bSwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKICAg
ICAKICAgICAvLyBIb2xkIHRoZSBsb2NrIHdoaWxlIHN0ZWFsaW5nIHRoZSB0YWJsZSAtIHNvIHRo
YXQgZ2V0Q29uY3VycmVudGx5KCkgb24gYW5vdGhlciB0aHJlYWQKICAgICAvLyB3aWxsIGVpdGhl
ciBoYXZlIHRvIGJ5cGFzcyB0aGlzIHN0cnVjdHVyZSwgb3Igd2lsbCBnZXQgdG8gdXNlIHRoZSBw
cm9wZXJ0eSB0YWJsZQpAQCAtNjgyLDcgKzYyMyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZp
b3VzKGF0dHJpYnV0ZXMpOwogICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGUo
aW5kZXhpbmdUeXBlKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZt
LCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2
bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAg
ICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2Fw
YWNpdHkoKSk7CiAgICAgCkBAIC03NzMsMTkgKzcxNCwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6ZmxhdHRlbkRpY3Rpb25hcnlTCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLVByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCi0gICAgaWYgKHNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hD
b3VudCkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmlu
Zyh2bSwgZGVmZXJHQyk7CiAgICAgCiAgICAgcGluKCk7CiAKLSAgICByZXR1cm4gcHV0U3BlY2lm
aWNWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICByZXR1cm4gYWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogfQogCiBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAtODEyLDExICs3NTAsMzIgQEAgdm9pZCBT
dHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEoVk0mIHZtKQogewogICAgIEFTU0VSVCghaGFzUmFy
ZURhdGEoKSk7CiAgICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJlUmFy
ZURhdGE6OmNyZWF0ZSh2bSwgcHJldmlvdXMoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2Uo
KTsKICAgICBtX3ByZXZpb3VzT3JSYXJlRGF0YS5zZXQodm0sIHRoaXMsIHJhcmVEYXRhKTsKKyAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwogICAg
IEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKIH0KIAordm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIAorICAgIGlm
ICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSog
cmFyZURhdGEgPSB0aGlzLT5yYXJlRGF0YSgpOworICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0cykgeworICAgICAgICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdh
dGNocG9pbnRTZXRzID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlUmFy
ZURhdGE6OlByb3BlcnR5V2F0Y2hwb2ludE1hcD4oKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICB9CisgICAgYXV0byByZXN1bHQgPSByYXJlRGF0YS0+bV9yZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXRzLT5hZGQob2Zmc2V0LCBudWxscHRyKTsKKyAgICBpZiAoIXJlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICByZXR1cm47CisgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9
IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOworfQorCiAjaWYgRFVNUF9Q
Uk9QRVJUWU1BUF9TVEFUUwogCiBzdHJ1Y3QgUHJvcGVydHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dl
ciB7CkBAIC04NDUsMjEgKzgwNCwyMSBAQCBpbmxpbmUgdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29u
c2lzdGVuY3koCiAKICNlbmRpZgogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9w
ZXJ0eVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVj
dHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtKQogewogICAgIGlmICghcHJvcGVydHlUYWJs
ZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUo
dm0sIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICByZXR1cm4gUHJvcGVydHlU
YWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOwogfQogCi1Qcm9wZXJ0eVRh
YmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0sIFN0cnVj
dHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhWTSYgdm0pCiB7CiAgICAgaWYgKHByb3BlcnR5VGFibGUoKSkKLSAgICAgICAg
cmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5
VGFibGUoKS5nZXQoKSk7CiAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNyZWF0ZSh2bSwgbnVt
YmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIH0K
IAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJ
bXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQor
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBs
KiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogewogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4
PiBzdHJ1Y3R1cmVzOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwpAQCAtODcxLDcgKzgzMCw2
IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGwKICAgICAgICAgUHJv
cGVydHlNYXBFbnRyeSogZW50cnkgPSB0YWJsZS0+Z2V0KHVpZCk7CiAgICAgICAgIGlmIChlbnRy
eSkgewogICAgICAgICAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAgICAg
ICAgICAgc3BlY2lmaWNWYWx1ZSA9IGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgUHJvcGVydHlPZmZzZXQgcmVzdWx0ID0gZW50cnktPm9mZnNldDsKICAgICAgICAgICAg
IHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTg4NSwxNCArODQzLDEzIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3Vy
cmVudGwKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgYXR0cmlidXRl
cyA9IHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKTsKLSAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKTsKICAgICAg
ICAgcmV0dXJuIHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgfQogICAgIAogICAgIHJldHVybiBp
bnZhbGlkT2Zmc2V0OwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwq
JiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKIHsKICAgICBB
U1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKSA9PSBpbmZvKCkpOwpAQCAtOTA3LDM5ICs4NjQsMTAgQEAgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcgogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKLSAgICBzcGVjaWZpY1Zh
bHVlID0gZW50cnktPnNwZWNpZmljVmFsdWUuZ2V0KCk7CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZz
ZXQ7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFByb3Bl
cnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5nZXQocHJvcGVydHlOYW1lLnVp
ZCgpKTsKLSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NF
UlQoZW50cnktPnNwZWNpZmljVmFsdWUpOwotICAgIGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmNsZWFy
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlBbGxG
dW5jdGlvbnMoVk0mIHZtKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwotfQotCi1Q
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmlj
VmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgR0NTYWZlQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsKICAgICAKQEAgLTk1Niw3ICs4
ODQsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsCiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9p
bmxpbmVDYXBhY2l0eSk7CiAKLSAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVu
dHJ5KHZtLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSks
IG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAg
cHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0
cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5n
ZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiBuZXdPZmZzZXQ7
CkBAIC0xMDYwLDcgKzk4OCw2IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fY2FjaGVkUHJvdG90
eXBlQ2hhaW4pOwogICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2
aW91c09yUmFyZURhdGEpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NwZWNp
ZmljVmFsdWVJblByZXZpb3VzKTsKIAogICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3Bl
cnR5VGFibGUoKSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxl
VW5zYWZlKTsKQEAgLTEwODMsOCArMTAxMCw3IEBAIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVD
aGFpbk1heUludGVyY2UKICAgICAgICAgY3VycmVudCA9IHByb3RvdHlwZS5hc0NlbGwoKS0+c3Ry
dWN0dXJlKHZtKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAg
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFs
dWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXQodm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCkBAIC0xMTQ0LDEzICsx
MDcwLDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgIGlm
ICh0YWJsZSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdGFibGUt
PmJlZ2luKCk7CiAgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5l
bmQoKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgZm9y
ICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIGl0
ZXItPmtleSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KGl0ZXItPm9mZnNldCkpOwotICAgICAgICAg
ICAgaWYgKGl0ZXItPnNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICBEdW1wQ29udGV4
dCBkdW1teUNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50KCI9PiIsIFJhd1BvaW50
ZXIoaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSkpOwotICAgICAgICAgICAgfQotICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9CkBA
IC0xMTYwLDEwICsxMDgxLDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgYwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0cnVjdHVyZS0+bV9vZmZz
ZXQpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cykg
ewotICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlDb250ZXh0OwotICAgICAgICAgICAgb3V0
LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZp
b3VzLmdldCgpKSk7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgb3V0LnByaW50KCJ9LCAi
LCBJbmRleGluZ1R5cGVEdW1wKGluZGV4aW5nVHlwZSgpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
MSwxMiArMTExLDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNz
KCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0
eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0
eVNsb3Q6OkNvbnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0KTsKLSAgICBz
dGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
Q29uY3VycmVudGx5KFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhp
c3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCA9IFB1dFByb3BlcnR5U2xvdDo6VW5rbm93
bkNvbnRleHQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCogdWlk
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
cm9wZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUpOwotICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSog
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpA
QCAtMTM4LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2Vs
bCopOwogCiAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLiAgCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICB2b2lkIHNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0
aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5cGUuc2V0KHZtLCB0aGlz
LCBwcm90b3R5cGUpOyB9CiAgICAgICAgIApAQCAtMTg4LDggKzE4Nyw2IEBAIHB1YmxpYzoKICAg
ICAvLyBXaWxsIGp1c3QgdGhlIHByb3RvdHlwZSBjaGFpbiBpbnRlcmNlcHQgdGhpcyBwcm9wZXJ0
eSBhY2Nlc3M/CiAgICAgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oVk0m
LCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKLSAgICBib29sIHRyYW5zaXRpb25EaWRJbnZvbHZl
U3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91
czsgfQotICAgICAgICAKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzSUQoKSBjb25zdAogICAgIHsK
ICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwpAQCAt
MjYzLDEwICsyNjAsMTAgQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwg
UHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0
cmluZyYgbmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZN
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJv
cGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBn
ZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQpOwotICAgIFByb3BlcnR5T2Zmc2V0
IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1
cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOwogCiAg
ICAgdm9pZCBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzV2l0aFByb3RvQ2hlY2soYm9vbCBp
c19fcHJvdG9fXykKICAgICB7CkBAIC0yODMsOSArMjgwLDYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gIUpTQzo6aXNWYWxpZE9mZnNldChtX29mZnNldCk7CiAgICAgfQogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0
eU5hbWUpOwotICAgIHZvaWQgZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZygpIHsgc2V0
U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCk7IH0KLQogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hl
KCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIHZvaWQgZ2V0
UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1l
cmF0aW9uTW9kZSk7CkBAIC0zNjQsMTMgKzM1OCwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFTU0VS
VCh0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKTsKICAgICAgICAgbV90cmFu
c2l0aW9uV2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7CiAgICAgfQotICAgICAgICAKKyAg
ICAKICAgICB2b2lkIG5vdGlmeVRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZSgpIGNvbnN0Owog
ICAgIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIHRyYW5zaXRpb25XYXRjaHBvaW50U2V0KCkg
Y29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0Owog
ICAgIH0KKyAgICAKKyAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50
cyhWTSYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICB2b2lkIGRpZFJlcGxhY2VQcm9wZXJ0eShQcm9w
ZXJ0eU9mZnNldCk7CisgICAgV2F0Y2hwb2ludFNldCogcHJvcGVydHlSZXBsYWNlbWVudFdhdGNo
cG9pbnRTZXQoUHJvcGVydHlPZmZzZXQpOwogCiAgICAgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVTaGFw
ZT4gdG9TdHJ1Y3R1cmVTaGFwZSgpOwogICAgIApAQCAtNDA2LDcgKzQwNCw2IEBAIHB1YmxpYzoK
ICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3Bl
cnRpZXNFeGNsdWRpbmdQcm90bywgSGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNF
eGNsdWRpbmdQcm90bywgMSwgNCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc05vbkVu
dW1lcmFibGVQcm9wZXJ0aWVzLCBIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcywgMSwgNSk7CiAg
ICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCBhdHRyaWJ1dGVzSW5QcmV2aW91cywgQXR0cmli
dXRlc0luUHJldmlvdXMsIDE0LCA2KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCwgU3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50LCAy
LCAyMCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHByZXZlbnRFeHRlbnNpb25zLCBQcmV2
ZW50RXh0ZW5zaW9ucywgMSwgMjIpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRUcmFu
c2l0aW9uLCBEaWRUcmFuc2l0aW9uLCAxLCAyMyk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2ws
IHN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQsIFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQsIDEsIDI0KTsK
QEAgLTQyMSw3ICs0MTgsNyBAQCBwcml2YXRlOgogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlKFZNJiwgY29uc3QgU3RydWN0dXJlKik7CiAgICAgCi0gICAgc3RhdGljIFN0cnVjdHVyZSog
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiwg
U3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFs
dWUsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiwgU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogCiAgICAgLy8gVGhp
cyB3aWxsIHJldHVybiB0aGUgc3RydWN0dXJlIHRoYXQgaGFzIGEgdXNhYmxlIHByb3BlcnR5IHRh
YmxlLCB0aGF0IHByb3BlcnR5IHRhYmxlLAogICAgIC8vIGFuZCB0aGUgbGlzdCBvZiBzdHJ1Y3R1
cmVzIHRoYXQgd2UgdmlzaXRlZCBiZWZvcmUgd2UgZ290IHRvIGl0LiBJZiBpdCByZXR1cm5zIGEK
QEAgLTQzMSwxOSArNDI4LDE2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERpY3Rpb25hcnlLaW5k
KTsKIAotICAgIFByb3BlcnR5T2Zmc2V0IHB1dFNwZWNpZmljVmFsdWUoVk0mLCBQcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgUHJv
cGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAogICAgIHZvaWQgY3Jl
YXRlUHJvcGVydHlNYXAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciYsIFZNJiwgdW5z
aWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAotICAg
IGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgZGVz
cGVjaWZ5QWxsRnVuY3Rpb25zKFZNJik7Ci0KICAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJs
ZT4mIHByb3BlcnR5VGFibGUoKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZChWTSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIFByb3BlcnR5VGFi
bGUqIGNvcHlQcm9wZXJ0eVRhYmxlKFZNJiwgU3RydWN0dXJlKiBvd25lcik7Ci0gICAgUHJvcGVy
dHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiwgU3RydWN0dXJlKiBvd25l
cik7CisgICAgUHJvcGVydHlUYWJsZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
Vk0mKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZShWTSYpOworICAgIFBy
b3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYpOwogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWTSYpOwogICAgIHZvaWQg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KFZNJiB2bSwgRGVmZXJHQyYpCiAgICAg
ewpAQCAtNTA3LDggKzUwMSw2IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21h
eFRyYW5zaXRpb25MZW5ndGggPSA2NDsKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNp
dGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkID0gNTEyOwogCi0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCA9IDM7Ci0gICAgCiAgICAgLy8g
VGhlc2UgbmVlZCB0byBiZSBwcm9wZXJseSBhbGlnbmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
ICdTdHJ1Y3R1cmUnCiAgICAgLy8gcGFydCBvZiB0aGUgb2JqZWN0LgogICAgIFN0cnVjdHVyZUlE
QmxvYiBtX2Jsb2I7CkBAIC01MjEsNyArNTEzLDYgQEAgcHJpdmF0ZToKICAgICBXcml0ZUJhcnJp
ZXI8SlNDZWxsPiBtX3ByZXZpb3VzT3JSYXJlRGF0YTsKIAogICAgIFJlZlB0cjxTdHJpbmdJbXBs
PiBtX25hbWVJblByZXZpb3VzOwotICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fc3BlY2lmaWNW
YWx1ZUluUHJldmlvdXM7CiAKICAgICBjb25zdCBDbGFzc0luZm8qIG1fY2xhc3NJbmZvOwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5l
cy5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw5ICsxMDIsNyBAQCBpbmxp
bmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mCiBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bHkoVk0mIHZtLCBTdHJpbmdJbXBsKiB1aWQpCiB7
CiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlSWdub3JlZDsKLSAgICByZXR1cm4gZ2V0Q29uY3VycmVudGx5KAotICAgICAgICB2bSwgdWlk
LCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZUlnbm9yZWQpOworICAgIHJldHVybiBn
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogfQogCiBpbmxpbmUg
Ym9vbCBTdHJ1Y3R1cmU6Omhhc0luZGV4aW5nSGVhZGVyKGNvbnN0IEpTQ2VsbCogY2VsbCkgY29u
c3QKQEAgLTIyMyw2ICsyMjEsMzEgQEAgQUxXQVlTX0lOTElORSBXcml0ZUJhcnJpZXI8UHJvcGVy
dHlUYWJsZQogICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiB9CiAKK2lubGluZSB2
b2lkIFN0cnVjdHVyZTo6ZGlkUmVwbGFjZVByb3BlcnR5KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkK
K3sKKyAgICBpZiAoTElLRUxZKCFoYXNSYXJlRGF0YSgpKSkKKyAgICAgICAgcmV0dXJuOworICAg
IFN0cnVjdHVyZVJhcmVEYXRhOjpQcm9wZXJ0eVdhdGNocG9pbnRNYXAqIG1hcCA9IHJhcmVEYXRh
KCktPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cy5nZXQoKTsKKyAgICBpZiAoTElLRUxZKCFt
YXApKQorICAgICAgICByZXR1cm47CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbWFwLT5nZXQo
b2Zmc2V0KTsKKyAgICBpZiAoTElLRUxZKCFzZXQpKQorICAgICAgICByZXR1cm47CisgICAgc2V0
LT5maXJlQWxsKCJQcm9wZXJ0eSBkaWQgZ2V0IHJlcGxhY2VkIik7Cit9CisKK2lubGluZSBXYXRj
aHBvaW50U2V0KiBTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIGlmICghaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3Bl
cnR5V2F0Y2hwb2ludE1hcCogbWFwID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzLmdldCgpOworICAgIGlmICghbWFwKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gbWFwLT5nZXQob2Zmc2V0KTsKK30KKwogQUxXQVlTX0lOTElORSBib29sIFN0cnVj
dHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlUYWJs
ZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVydHlUYWJsZVVuc2FmZS5nZXQoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5j
cHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVJhcmVEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTEgQEAgU3Ry
dWN0dXJlUmFyZURhdGEqIFN0cnVjdHVyZVJhcmVEYXRhOjpjcgogICAgIHJldHVybiByYXJlRGF0
YTsKIH0KIAordm9pZCBTdHJ1Y3R1cmVSYXJlRGF0YTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7
CisgICAgc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihjZWxsKS0+U3RydWN0dXJlUmFy
ZURhdGE6On5TdHJ1Y3R1cmVSYXJlRGF0YSgpOworfQorCiBTdHJ1Y3R1cmVSYXJlRGF0YTo6U3Ry
dWN0dXJlUmFyZURhdGEoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzKQogICAgIDogSlNDZWxs
KHZtLCB2bS5zdHJ1Y3R1cmVSYXJlRGF0YVN0cnVjdHVyZS5nZXQoKSkKIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKKyNp
bmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDAsNiAr
NDEsMTAgQEAgY2xhc3MgU3RydWN0dXJlUmFyZURhdGEgOiBwdWJsaWMgSlNDZWxsIAogcHVibGlj
OgogICAgIHN0YXRpYyBTdHJ1Y3R1cmVSYXJlRGF0YSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKik7
CiAKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShKU0NlbGwqKTsKKwogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0
cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOwpAQCAtNTMs
MTAgKzU4LDEyIEBAIHB1YmxpYzoKIAogICAgIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1l
cmF0aW9uQ2FjaGUoKTsKICAgICB2b2lkIHNldEVudW1lcmF0aW9uQ2FjaGUoVk0mLCBjb25zdCBT
dHJ1Y3R1cmUqIG93bmVyLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiB2YWx1ZSk7Ci0KKyAgICAK
ICAgICBERUNMQVJFX0VYUE9SVF9JTkZPOwogCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBT
dHJ1Y3R1cmU7CisgICAgCiAgICAgU3RydWN0dXJlUmFyZURhdGEoVk0mLCBTdHJ1Y3R1cmUqKTsK
IAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zp
c2l0Q2hpbGRyZW4gfCBKU0NlbGw6OlN0cnVjdHVyZUZsYWdzOwpAQCAtNjQsNiArNzEsOSBAQCBw
cml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTdHJ1Y3R1cmU+IG1fcHJldmlvdXM7CiAgICAgV3Jp
dGVCYXJyaWVyPEpTU3RyaW5nPiBtX29iamVjdFRvU3RyaW5nVmFsdWU7CiAgICAgV3JpdGVCYXJy
aWVyPEpTUHJvcGVydHlOYW1lSXRlcmF0b3I+IG1fZW51bWVyYXRpb25DYWNoZTsKKyAgICAKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8UHJvcGVydHlPZmZzZXQsIFJlZlB0cjxXYXRjaHBvaW50U2V0Piwg
V1RGOjpJbnRIYXNoPFByb3BlcnR5T2Zmc2V0PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFz
aFRyYWl0czxQcm9wZXJ0eU9mZnNldD4+IFByb3BlcnR5V2F0Y2hwb2ludE1hcDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UHJvcGVydHlXYXRjaHBvaW50TWFwPiBtX3JlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFu
dC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAor
SlNSZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXIt
Y29uc3RhbnQtcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAordmFy
IG8gPSB7Zjp7Zjp7Zjp7Zjp7Zjp7Zjp7Zjo0Mn19fX19fX07CisoZnVuY3Rpb24oKSB7CisgICAg
dmFyIG4gPSAxMDAwMDAwOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgbjsgKytpKQorICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIAor
ICAgIGlmIChyZXN1bHQgIT0gbiAqIDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234379</attachid>
            <date>2014-07-03 16:36:45 -0700</date>
            <delta_ts>2014-07-03 20:18:46 -0700</delta_ts>
            <desc>it&apos;s really starting to be awesome</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>105233</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
NiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxl
eEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAg
Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAogICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWlu
Q291bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVu
dE9iamVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBo
ZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1
ZSA9IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5t
X29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAg
ICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
U2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9m
ZnNldCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwg
ZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
I2VuZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0g
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFy
aWFudC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAg
ICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50
Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBA
IC0yOTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZt
LCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdz
IHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2
ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0
cmVuZ2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1
cmUsIG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29m
ZnNldChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0
YXR1cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYg
QEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0
dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90
aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRl
cm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtODYsOSArODMsNiBAQCBi
b29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCFhcmVDb21w
YXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSAhPSBvdGhlci5t
X3NwZWNpZmljVmFsdWUpCi0gICAgICAgIG1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKLQog
ICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCkBA
IC0xMTIsOCArMTA2LDYgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRl
eHQpLCAiXSIpOwogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgIG91dC5wcmludCgi
LCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwg
Y29udGV4dCkpOwotICAgIGlmIChzcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIG91dC5wcmludCgi
LCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCkp
OwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBA
IHN0cnVjdCBEdW1wQ29udGV4dDsKIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAg
ICBHZXRCeUlkVmFyaWFudCgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKQEAgLTU4LDcg
KzU3LDYgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0K
ICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRl
QmFzZTsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzMsNyArNzEsNiBA
QCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKICAgICBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsOCArMjU0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsICpzdHViLT5tX2NhbGxM
aW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxleEdldFN0YXR1cy5jaGFpbigpLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQo
KSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzQsMTkgKzMzNCwyMiBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscyk7CiAKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVh
ZE9ubHkpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBzdG9y
aW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxp
emVkIHNsb3QuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAocmVwbGFjZVNldCAmJiByZXBsYWNlU2V0LT5pc1N0aWxsVmFs
aWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgZmly
ZSB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LiBUaGF0IG1lYW5zIHRoYXQKKyAgICAg
ICAgICAgICAgICAvLyB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVjdXRlZCBvciB0aGF0IHNv
bWV0aGluZyBmaXNoeSBpcyBnb2luZyBvbi4gQmV0dGVyCisgICAgICAgICAgICAgICAgLy8gbGVh
dmUgaXQgYmUuCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghcmVz
dWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBvZmZz
ZXQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzg0LDIyICszODcsOSBAQCBQdXRCeUlkU3Rh
dHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAgICAKICAgICAgICAg
Ly8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRoYXQg
dGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICAvLyBBbW9uZyBvdGhlciB0aGlu
Z3MsIHRoaXMgYWxsb3dzIHVzIHRvIGd1YXJkIGFnYWluc3QgYSB0cmFuc2l0aW9uIHdpdGggYSBz
cGVjaWZpYwotICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gLSBJZiB3
ZSdyZSBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzogdGhpcyB3b3VsZCBv
bmx5IGJlIGEgcHJvYmxlbSBpZgotICAgICAgICAvLyAgIHRoZSBleGlzdGluZyB0cmFuc2l0aW9u
IGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUgYWxyZWFkeSwgc2luY2UgaWYgaXQgZGlkbid0LAot
ICAgICAgICAvLyAgIHRoZW4gd2Ugd291bGQgYmVoYXZlICJhcyBpZiIgd2Ugd2VyZSBub3Qgc3Rv
cmluZyBhIHNwZWNpZmljIHZhbHVlLiBJZiBpdCBkaWQKLSAgICAgICAgLy8gICBoYXZlIGEgc3Bl
Y2lmaWMgdmFsdWUsIHRoZW4gd2UnbGwga25vdyAtIHRoZSBmYWN0IHRoYXQgd2UgcGFzcyAwIGZv
cgotICAgICAgICAvLyAgIHNwZWNpZmljVmFsdWUgd2lsbCB0ZWxsIHVzLgotICAgICAgICAvLwot
ICAgICAgICAvLyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBz
cGVjaWZpYzogYWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBhCi0gICAgICAgIC8vICAgcHJvYmxl
bSBpZiB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB3
aGljaCB3ZSBjaGVjayBmb3IKLSAgICAgICAgLy8gICBieSBwYXNzaW5nIDAgZm9yIHRoZSBzcGVj
aWZpY1ZhbHVlLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0
dXJlLCB1aWQsIDAsIDAsIG9mZnNldCk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKICAgICAgICAgaWYgKCF0cmFuc2l0
aW9uKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7IC8v
IFRoaXMgb2NjdXJzIGluIGJpemFycmUgY2FzZXMgb25seS4gU2VlIGFib3ZlLgotICAgICAgICBB
U1NFUlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAg
ICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBkaWRB
cHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTcwNzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZhcmlh
bnQ6Om9wZXJhdG9yCiAgICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVyZTsK
ICAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFudENoZWNrczsKICAgICBtX2Fs
dGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7Ci0gICAgbV9zcGVjaWZpY1ZhbHVl
ID0gb3RoZXIubV9zcGVjaWZpY1ZhbHVlOwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZzZXQ7
CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtTdGF0
dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlua1N0
YXR1cyk7CkBAIC03OCw3ICs3Nyw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50Ojp0
cmFuc2l0aW8KIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAg
ICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBK
U1ZhbHVlIHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsKICAg
ICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CkBAIC04OSw3ICs4OCw2IEBAIFB1dEJ5SWRWYXJpYW50
IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJhc2Ug
PSBjaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKICAgICB9CiAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX3NwZWNpZmljVmFsdWUgPSBzcGVjaWZpY1ZhbHVlOwog
ICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKTsK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjI5LDggKzIyNyw2IEBAIHZvaWQgUHV0QnlJZFZh
cmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgICAgIGxpc3REdW1wSW5Db250ZXh0
KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRlcm5h
dGVCYXNlKQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNv
bnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7Ci0gICAgICAgIGlmICht
X3NwZWNpZmljVmFsdWUpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgc3BlY2lmaWNWYWx1ZSA9
ICIsIGluQ29udGV4dChtX3NwZWNpZmljVmFsdWUsIGNvbnRleHQpKTsKICAgICAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwg
PSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CiAgICAgICAgIG91dC5wcmludCgiPiIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHJl
dmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICAg
ICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRlcigK
LSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQm
IHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlu
a1N0YXR1cyk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CkBAIC0xMTcsMTIgKzExNyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYWx0ZXJuYXRl
QmFzZTsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJuIG1f
c3BlY2lmaWNWYWx1ZTsKLSAgICB9Ci0gICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5r
U3RhdHVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsK
QEAgLTE0Miw3ICsxMzYsNiBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1Y3R1
cmU7CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwog
ICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFs
dWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzAsMTEgKzcwLDYgQEAgdm9pZCBXYXRjaHBvaW50U2V0OjphZGQoV2F0Y2hwb2lu
dCogd2F0YwogICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CiB9CiAKLXZvaWQgV2F0Y2hwb2ludFNl
dDo6ZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCi17Ci0gICAgZmlyZUFsbChTdHJpbmdGaXJl
RGV0YWlsKHJlYXNvbikpOwotfQotCiB2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KGNv
bnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBBU1NFUlQoc3RhdGUoKSA9PSBJc1dhdGNo
ZWQpOwpAQCAtODUsNiArODAsMTEgQEAgdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhj
b25zdCBGaQogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiB9CiAKK3ZvaWQgV2F0Y2hwb2lu
dFNldDo6ZmlyZUFsbFNsb3coY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGZpcmVBbGxTbG93
KFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Cit9CisKIHZvaWQgV2F0Y2hwb2ludFNldDo6Zmly
ZUFsbFdhdGNocG9pbnRzKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICB3aGlsZSAo
IW1fc2V0LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9X
YXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDEyICsxMzEsMTcg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25zdCBGaXJlRGV0YWlsJiBkZXRh
aWwpCiAgICAgewotICAgICAgICBpZiAoc3RhdGUoKSAhPSBJc1dhdGNoZWQpCisgICAgICAgIGlm
IChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBmaXJlQWxsU2xvdyhkZXRhaWwpOwogICAgIH0KICAgICAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29uKTsKKyAgICB2b2lkIGZpcmVBbGwo
Y29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9
IElzV2F0Y2hlZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZpcmVBbGxTbG93KHJl
YXNvbik7CisgICAgfQogICAgIAogICAgIHZvaWQgdG91Y2goY29uc3QgRmlyZURldGFpbCYgZGV0
YWlsKQogICAgIHsKQEAgLTE1Nyw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgaW50OF90KiBhZGRy
ZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIAog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coY29uc3QgRmlyZURldGFpbCYp
OyAvLyBDYWxsIG9ubHkgaWYgeW91J3ZlIGNoZWNrZWQgaXNXYXRjaGVkLgorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coY29uc3QgY2hhciogcmVhc29uKTsgLy8gRGl0dG8u
CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgZmlyZUFsbFdhdGNocG9pbnRzKGNvbnN0IEZpcmVE
ZXRhaWwmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJ
bnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJHZXR0
ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHV0QnlJZFN0
YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMTM4NywxNCArMTM4OCwxNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICAg
ICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgcmVzdWx0OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5udW1W
YXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzW2ldLnNw
ZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgs
IG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUubV92YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwogICAgICAgICAg
ICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3Jh
cGgsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCks
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
KTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAg
ICAgICAgICAgIH0KQEAgLTE1NjksMTEgKzE1NzMsMjcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9mZnNl
dDogeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV92YWx1ZSwgZGF0YS5vZmZzZXQpOworICAgICAgICBp
ZiAocmVzdWx0KSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVl
emUocmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAg
ICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAg
U3RvcmFnZUFjY2Vzc0RhdGEgZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1f
Z3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS0+
Y2hpbGQyKCkpLm1fdmFsdWUsIGRhdGEub2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBq
c0R5bmFtaWNDYXN0PEdldHRlclNldHRlcio+KHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHNldENv
bnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBo
LCBtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMTYwMiwxNCArMTYyMiwyMiBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKLSAg
ICAgICAgICAgIGlmICghdmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKKyAgICAgICAgICAgIGlmICh2YXJpYW50
LmFsdGVybmF0ZUJhc2UoKSkKKyAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhc2VG
b3JMb2FkID0gYmFzZS5tX3ZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3Vs
dCA9CisgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VG
b3JMb2FkLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1
bHQpIHsKICAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUg
dGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAgICAgICAg
IG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lm
aWNWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1
bHQpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwog
ICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzgsNiArMTY3OCwxMyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBl
IG9wKQogeworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChKU1Zh
bHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFzSlNW
YWx1ZSgpLCBvZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2Up
OworICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5s
aW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0x
NzcyLDIxICsxNzc5LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAg
ICAgLy8gVW5sZXNzIHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04ODc4Mywgd2UgbmVlZCB0bwogICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBi
YXNlIG9mIHRoZSBvcmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBk
b25lIHdpdGgKICAgICAvLyBhbGwgb2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25seSBpbnNlcnQg
dGhlIFBoYW50b20gaWYgdGhlcmUgaGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQotICAgIC8vIG9u
IHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1Y3R1
cmUgb24gYmFzZSwgb3IgaWYgdGhlCi0gICAgLy8gYWNjZXNzIHdhcyBjb21waWxlZCB0byBhIFdl
YWtKU0NvbnN0YW50IHNwZWNpZmljIHZhbHVlLCBpbiB3aGljaCBjYXNlIHdlIG1pZ2h0IG5vdAot
ICAgIC8vIGhhdmUgYW55IGV4cGxpY2l0IHVzZSBvZiB0aGUgYmFzZSBhdCBhbGwuCi0gICAgaWYg
KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpIHx8IG9yaWdpbmFsQmFzZSAhPSBiYXNlKQorICAgIC8v
IG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1
Y3R1cmUgb24gYmFzZS4KKyAgICBpZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCiAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgb3JpZ2luYWxCYXNlKTsKICAgICAKLSAgICBOb2RlKiBsb2FkZWRW
YWx1ZTsKLSAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIGxvYWRlZFZh
bHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwotICAgIGVsc2Ug
ewotICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAg
dmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0g
ICAgICAgICAgICBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAg
ICAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlPZmZz
ZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgfQorICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxl
R2V0QnlPZmZzZXQoCisgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxs
T3RoZXIgOiBwcmVkaWN0aW9uLAorICAgICAgICBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJp
YW50Lm9mZnNldCgpLAorICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0
ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKICAgICAKICAgICBpZiAoIXZhcmlhbnQu
Y2FsbExpbmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0
aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsKQEAgLTE5NDksMTQgKzE5NDksOCBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5h
dGVCYXNlKCkpCiAgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbG9hZGVkVmFsdWU7Ci0gICAg
ICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAgIGxvYWRlZFZhbHVl
ID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
ICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5v
ZmZzZXQoKSwKLSAgICAgICAgICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7Ci0gICAg
ICAgIH0KKyAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAg
ICAgICAgICAgIFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQu
b2Zmc2V0KCksIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKICAgICAgICAgCiAgICAgICAgIE5v
ZGUqIHNldHRlciA9IGFkZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAg
IApAQCAtMjk1OCwxMCArMjk1Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9
IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1swXS5z
dHJ1Y3R1cmVTZXQoKS5vbmx5U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkK
LSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25z
dGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5T2Zm
c2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKKyAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5T2Zmc2V0KHBy
ZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgpA
QCAtMjk2OSwxNiArMjk2MCwxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJl
Z2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkg
PSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAgICAg
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRT
ZXQoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPQorICAgICAgICAg
ICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgIHdhdGNo
cG9pbnRTZXQgPyB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVlKCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgaWYg
KCFpbmZlcnJlZFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0
dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5k
KSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRUb0dy
YXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKLSAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNpZmlj
VmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtK
U0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50
Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3LDggKzQwNywxMyBAQCBwcml2
YXRlOgogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VWYWx1
ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFyaWFu
dC5zcGVjaWZpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3Rh
bnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKKyAgICAg
ICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKKyAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlVmFsdWUubV92YWx1
ZTsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJv
cGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQub2Zmc2V0KCkpKSB7CisgICAgICAgICAgICBtX2dy
YXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyODYsMjIgKzEyODYsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIAotICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKFN0cnVjdHVy
ZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgYm9vbCBp
c1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoSlNPYmplY3QqIHN0cmluZ1Byb3RvdHlwZSwgU3Ry
aW5nSW1wbCogdWlkKQogICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJp
bmdQcm90b3R5cGUtPnN0cnVjdHVyZSgpOworICAgICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0
cmlidXRlc1VudXNlZDsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSgKLSAgICAgICAgICAgIHZtKCksIHVpZCwgYXR0cmlidXRlc1VudXNlZCwgc3BlY2lm
aWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
Q29uY3VycmVudGx5KHZtKCksIHVpZCwgYXR0cmlidXRlc1VudXNlZCk7CiAgICAgICAgIGlmICgh
aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKLSAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlKQorICAgICAgICBKU1ZhbHVlIHZhbHVlID0g
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHN0cmluZ1Byb3RvdHlwZSwgb2Zmc2V0KTsK
KyAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
Ci0gICAgICAgIGlmICghc3BlY2lmaWNWYWx1ZS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygp
KSkKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rp
b24qPih2YWx1ZSk7CisgICAgICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIAotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmIChmdW5jdGlvbi0+ZXhlY3V0
YWJsZSgpLT5pbnRyaW5zaWNGb3IoQ29kZUZvckNhbGwpICE9IFN0cmluZ1Byb3RvdHlwZVZhbHVl
T2ZJbnRyaW5zaWMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAtMTMz
MCw5ICsxMzMxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gKHRoYXQgd291bGQgY2FsbCB0b1N0
cmluZygpKS4gV2UgZG9uJ3Qgd2FudCB0aGUgREZHIHRvIGhhdmUgdG8gZGlzdGluZ3Vpc2gKICAg
ICAgICAgLy8gYmV0d2VlbiB0aGUgdHdvLCBqdXN0IGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGl0
IHdvdWxkIGdldCBjb25mdXNpbmcuIFNvIHdlCiAgICAgICAgIC8vIGp1c3QgcmVxdWlyZSBib3Ro
IG1ldGhvZHMgdG8gYmUgc2FuZS4KLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhv
ZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVl
T2YuaW1wbCgpKSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3Ry
aW5nUHJvdG90eXBlT2JqZWN0LCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpKSkK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlw
ZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMt
PnRvU3RyaW5nLmltcGwoKSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RT
YW5lKHN0cmluZ1Byb3RvdHlwZU9iamVjdCwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5p
bXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgcmV0
dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc4OSw2ICs3ODksMjYgQEAgdW5zaWduZWQgR3JhcGg6OnJlcXVp
cmVkUmVnaXN0ZXJDb3VudEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVyQ291
bnQoKSwgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAorSlNWYWx1ZSBHcmFw
aDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVlIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKK3sKKyAgICBpZiAoIWJhc2UgfHwgIWJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFz
ZSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOworICAg
IAorICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBpZiAoIXNldCB8fCAhc2V0LT5pc1N0aWxsVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBBU1NFUlQoc3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICAKKyAgICB3YXRjaHBvaW50cygpLmFkZExhemls
eShzZXQpOworICAgIAorICAgIHJldHVybiBvYmplY3QtPmdldERpcmVjdChvZmZzZXQpOworfQor
CiBKU0FjdGl2YXRpb24qIEdyYXBoOjp0cnlHZXRBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7CiAg
ICAgcmV0dXJuIG5vZGUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsKQEAg
LTkwMCw3ICs5MjAsNiBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2
CiAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQg
PSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAg
ICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNw
ZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYg
c2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykKICAgICAgICAgICAgICAgICAgICAgICAgIHZp
c2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc5LDYg
KzY3OSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JF
eGl0KCk7CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9uQW5k
RXhpdCgpOwogICAgIAorICAgIEpTVmFsdWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVl
IGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgCiAgICAgSlNBY3RpdmF0aW9uKiB0
cnlHZXRBY3RpdmF0aW9uKE5vZGUqKTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiB0
cnlHZXRSZWdpc3RlcnMoTm9kZSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5n
UGhhc2UuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlP
ZmZzZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZz
ZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRjaCht
X2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSktPnN0cnVjdHVyZSgpKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3YXRjaCBhbnl0aGluZyBp
biB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdzLiBE
b24ndCBuZWVkIHRvIHdhdGNoIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjM0LDggKzMyMzQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAgICBM
VmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQot
ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2Rl
KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50
UmVzdWx0OworICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7CisgICAg
ICAgICAgICAgICAgY29uc3RhbnRSZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVy
dHkoCisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb25zdGFudFJlc3Vs
dCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVu
Y29kZShjb25zdGFudFJlc3VsdCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAg
ICAgTFZhbHVlIHByb3BlcnR5QmFzZTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsOSArMTY5OCwxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgLy8gQ292ZXJzIGlt
cGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBl
eGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUu
CiAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBz
Y29wZSAmJiBzY29wZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKSB7CiAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHkg
fHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNo
ZWNrcykgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUodm0pKTsKLSAg
ICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAg
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNjb3BlLT5zdHJ1Y3R1cmUodm0pOworICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAg
ICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICB9CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE3MDcy
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw2ICsxMDEsOCBAQCBzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
Vk0mIHZtCiB7CiAgICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0
eUZpcmVzV2F0Y2hwb2ludHMoKSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1w
dXJlUHJvcGVydHkocHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9j
aykpOworICAgIAorICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBvZmZzZXQpOwogCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CiAKQEAgLTM0Myw4ICszNDUsMTEgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVCeUlk
U3R1YigKICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogICAgICAg
ICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKICAgICAgICAgfQorICAgICAgICBBU1NF
UlQocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1Y3R1cmUpOwogICAgIH0KICAg
ICAKKyAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVu
dHMoKnZtLCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNlRm9yQWNjZXNzR1BSOwogICAg
IGlmIChjaGFpbikgewogICAgICAgICBzdHViSml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTcwNzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQyNiw5ICsxNDI2LDEzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3df
cGF0aF9nZXRfZnJvbV8KICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgJiYgc2xvdC5z
bG90QmFzZSgpID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKSB7CiAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xv
YmFsUHJvcGVydHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrcykgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBl
eGVjLT5jb2RlQmxvY2soKTsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChl
eGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJl
KCkpOwotICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsK
KyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2bSk7
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJl
LnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OworICAgICAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9w
ZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIH0K
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw3IEBAIGJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bjo6bWF5SW50ZXJjZXAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3Zl
Y3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFs
dWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29u
Y3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5
LDggKzEzOSw3IEBAIHZvaWQgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiAKIAog
ICAgIGZvciAoOyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4
Miw3ICsyODIsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAg
ICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQodm0sIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpj
cmVhdGUodm0sIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpz
TnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBiZSBzZXQgb25jZSBPYmplY3RQ
cm90b3R5cGUgaXMgY3JlYXRlZC4KICAgICBtX2Z1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhp
cywgSlNGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90
eXBlLmdldCgpKSk7CiAgICAgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywg
SlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90
b3R5cGUuZ2V0KCkpKTsKLSAgICBtX25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlz
LCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgbV9mdW5jdGlvblN0cnVjdHVy
ZS5nZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwg
RG9udEVudW0sIDAsIG1fZnVuY3Rpb25OYW1lT2Zmc2V0KSk7CisgICAgbV9uYW1lZEZ1bmN0aW9u
U3RydWN0dXJlLnNldCh2bSwgdGhpcywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIERv
bnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCBtX2Z1bmN0aW9uTmFtZU9mZnNldCkpOwog
ICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEludGVybmFsRnVu
Y3Rpb246OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQo
KSkpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxGdW5jdGlvbiA9IDA7CiAgICAgSlNGdW5jdGlvbiog
YXBwbHlGdW5jdGlvbiA9IDA7CkBAIC00MjksOCArNDI5LDggQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBlTWFwID0g
dm0ucHJvdG90eXBlTWFwOwogICAgIFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUg
PSBwcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUobV9vYmplY3RQ
cm90b3R5cGUuZ2V0KCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1
Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPmRvbmUsIDAsIDAsIG9mZnNldCk7Ci0gICAgaXRlcmF0
b3JSZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwg
aXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCAwLCAwLCBv
ZmZzZXQpOworICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5h
bWVzLT5kb25lLCAwLCBvZmZzZXQpOworICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJl
LCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgMCwgb2Zmc2V0KTsKICAgICBtX2l0ZXJhdG9yUmVz
dWx0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUpOwogCiAg
ICAgbV9ldmFsRnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRo
aXMsIDEsIHZtLnByb3BlcnR5TmFtZXMtPmV2YWwuc3RyaW5nKCksIGdsb2JhbEZ1bmNFdmFsKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZp
c2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQu
b3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01NSwxNSArNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIC8v
IEFycmF5Q29udmVudGlvbnMuaC4KIHN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsK
IAotSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQotewotICAgIGlm
IChjZWxsLT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCi0gICAgICAgIHJldHVybiBjZWxsOwot
ICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihJbnRl
cm5hbEZ1bmN0aW9uOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICByZXR1cm4g
MDsKLX0KLQogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTT2JqZWN0
KTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU0ZpbmFsT2JqZWN0
KTsKIApAQCAtMzYwLDcgKzM1MSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGws
IEV4ZWNTdGEKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CiAgICAg
ICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJU
KCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0
b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0
aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAg
ICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICYmIHNsb3Qu
aXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAg
ICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzEsOCArMzYyLDcgQEAgdm9pZCBKU09iamVjdDo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIEpTT2JqZWN0KiBvYmo7CiAgICAgZm9yIChv
YmogPSB0aGlzT2JqZWN0OyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAg
ICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNl
cHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3Qp
OwpAQCAtNDA3LDcgKzM5Nyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4
ZWNTdGEKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlO
YW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJl
Y3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwg
Z2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgIGlm
ICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5
TmFtZSwgdmFsdWUsIDAsIHNsb3QpICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0
eVdyaXRlRXJyb3IpKTsKICAgICByZXR1cm47CiB9CkBAIC0xMjI3LDcgKzEyMTcsNyBAQCB2b2lk
IEpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhCiB2b2lkIEpTT2JqZWN0OjpwdXRE
aXJlY3ROb25JbmRleEFjY2Vzc29yKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
SlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBQdXRQcm9wZXJ0eVNs
b3Qgc2xvdCh0aGlzKTsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJv
cGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxs
YWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVP
d25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwog
CiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEg
bmV3IHByb3BlcnR5LiBGb3IKICAgICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCB0aG91Z2gsIHdl
IGFsc28gbmVlZCB0byBjaGFuZ2Ugb3VyIFN0cnVjdHVyZQpAQCAtMTI2Nyw5ICsxMjU3LDggQEAg
Ym9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogICAgICAgICB0aGlzT2Jq
ZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKIAogICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQodGhpc09iamVjdC0+c3RydWN0dXJlKHZt
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkgewor
ICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSkpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBE
b250RGVsZXRlICYmICF2bS5pc0luRGVmaW5lT3duUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgdGhpc09iamVjdC0+cmVtb3ZlRGlyZWN0KHZtLCBwcm9wZXJ0
eU5hbWUpOwpAQCAtMTM1Myw3ICsxMzQyLDcgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHlCeUluZGV4KEpTQwogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGNhbGxEZWZhdWx0
VmFsdWVGdW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVj
dC0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBmdW5jdGlvbiA9IG9iamVj
dC0+Z2V0QW5kV2F0Y2goZXhlYywgcHJvcGVydHlOYW1lKTsKICAgICBDYWxsRGF0YSBjYWxsRGF0
YTsKICAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGdldENhbGxEYXRhKGZ1bmN0aW9uLCBjYWxsRGF0
YSk7CiAgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKQEAgLTE0NDYsMjAgKzE0MzUs
NiBAQCBib29sIEpTT2JqZWN0OjpkZWZhdWx0SGFzSW5zdGFuY2UoRXhlY1N0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1ib29sIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhl
Y1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU0NlbGwqJiBzcGVjaWZp
Y1ZhbHVlKSBjb25zdAotewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgdW5zaWduZWQg
YXR0cmlidXRlczsKLSAgICBpZiAoaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUodm0pLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSkpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIC8vIFRoaXMgY291bGQgYmUgYSBmdW5jdGlvbiB3aXRoaW4gdGhlIHN0
YXRpYyB0YWJsZT8gLSBzaG91bGQgcHJvYmFibHkKLSAgICAvLyBhbHNvIGxvb2sgaW4gdGhlIGhh
c2g/ICBUaGlzIGN1cnJlbnRseSBzaG91bGQgbm90IGJlIGEgcHJvYmxlbSwgc2luY2UKLSAgICAv
LyB3ZSd2ZSBjdXJyZW50bHkgYWx3YXlzIGNhbGwgJ2dldCcgZmlyc3QsIHdoaWNoIHNob3VsZCBo
YXZlIHBvcHVsYXRlZAotICAgIC8vIHRoZSBub3JtYWwgc3RvcmFnZS4KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KIHZvaWQgSlNPYmplY3Q6OmdldFByb3BlcnR5TmFtZXMoSlNPYmplY3QqIG9iamVj
dCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgcHJvcGVydHlOYW1lcy5zZXRCYXNlT2JqZWN0KG9i
amVjdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU2LDE1ICs1Niw2
IEBAIGlubGluZSBKU0NlbGwqIGdldEpTRnVuY3Rpb24oSlNWYWx1ZSB2YWwKICAgICByZXR1cm4g
MDsKIH0KIAotSlNfRVhQT1JUX1BSSVZBVEUgSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdFNsb3co
SlNDZWxsKik7Ci0KLWlubGluZSBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0KEpTVmFsdWUgdmFs
dWUpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc0NlbGwoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIGdldENhbGxhYmxlT2JqZWN0U2xvdyh2YWx1ZS5hc0NlbGwoKSk7Ci19Ci0KIGNsYXNz
IEdldHRlclNldHRlcjsKIGNsYXNzIEludGVybmFsRnVuY3Rpb247CiBjbGFzcyBKU0Z1bmN0aW9u
OwpAQCAtMTE5LDYgKzExMCw3IEBAIHB1YmxpYzoKICAgICB9CiAgICAgICAgIAogICAgIEpTVmFs
dWUgZ2V0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgSlNWYWx1ZSBnZXRB
bmRXYXRjaChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OwogICAgIEpTVmFsdWUgZ2V0
KEV4ZWNTdGF0ZSosIHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKICAgICBib29sIGZh
c3RHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwpAQCAtNDkxLDggKzQ4Myw2IEBAIHB1YmxpYzoKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwqLCBFeGVjU3Rh
dGUqLCBFQ01BTW9kZSk7CiAKLSAgICBib29sIGdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZShFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTQ2VsbComIHNwZWNpZmljRnVuY3Rpb24pIGNvbnN0Owot
CiAgICAgLy8gVGhpcyBnZXQgZnVuY3Rpb24gb25seSBsb29rcyBhdCB0aGUgcHJvcGVydHkgbWFw
LgogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSkgY29uc3QKICAgICB7CkBAIC01MDQsOSArNDk0LDggQEAgcHVibGljOgogCiAgICAgSlNWYWx1
ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYg
YXR0cmlidXRlcykgY29uc3QKICAgICB7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWM7CiAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgY2hl
Y2tPZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBy
ZXR1cm4gb2Zmc2V0ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zmc2V0KSA6IEpTVmFs
dWUoKTsKICAgICB9CkBAIC01MjEsOSArNTEwLDggQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlP
ZmZzZXQgZ2V0RGlyZWN0T2Zmc2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQmIGF0dHJpYnV0ZXMpCiAgICAgewotICAgICAgICBKU0NlbGwqIHNwZWNpZmljOwog
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAg
IGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAg
ICAgcmV0dXJuIG9mZnNldDsKICAgICB9CkBAIC05NDksNyArOTM3LDcgQEAgcHJpdmF0ZToKICAg
ICBBcnJheVN0b3JhZ2UqIGVudGVyRGljdGlvbmFyeUluZGV4aW5nTW9kZVdoZW5BcnJheVN0b3Jh
Z2VBbHJlYWR5RXhpc3RzKFZNJiwgQXJyYXlTdG9yYWdlKik7CiAgICAgICAgIAogICAgIHRlbXBs
YXRlPFB1dE1vZGU+Ci0gICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChWTSYsIFByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSwgdW5zaWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90JiwgSlNDZWxsKik7Cisg
ICAgYm9vbCBwdXREaXJlY3RJbnRlcm5hbChWTSYsIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgdW5z
aWduZWQgYXR0ciwgUHV0UHJvcGVydHlTbG90Jik7CiAKICAgICBib29sIGlubGluZUdldE93blBy
b3BlcnR5U2xvdChFeGVjU3RhdGUqLCBWTSYsIFN0cnVjdHVyZSYsIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaWxsR2V0dGVyUHJvcGVy
dHlTbG90KFByb3BlcnR5U2xvdCYsIEpTVmFsdWUsIHVuc2lnbmVkLCBQcm9wZXJ0eU9mZnNldCk7
CkBAIC0xMjEzLDggKzEyMDEsNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6cHJvdG90eXBl
KCkgY29uCiBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqIGV4ZWMsIFZNJiB2bSwgU3RydWN0dXJlJiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwotICAgIEpTQ2VsbCogc3BlY2lmaWM7Ci0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVj
aWZpYyk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICBpZiAoTElLRUxZKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSkpIHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdldERpcmVjdChvZmZzZXQpOwogICAg
ICAgICBpZiAoc3RydWN0dXJlLmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiB2YWx1ZS5p
c0dldHRlclNldHRlcigpKQpAQCAtMTI4NSw2ICsxMjcyLDIwIEBAIGlubGluZSBKU1ZhbHVlIEpT
T2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAor
aW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldEFuZFdhdGNoKEV4ZWNTdGF0ZSogZXhlYywgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkgY29uc3QKK3sKKyAgICBQcm9wZXJ0eVNsb3Qgc2xvdCh0
aGlzKTsKKyAgICBpZiAoY29uc3RfY2FzdDxKU09iamVjdCo+KHRoaXMpLT5nZXRQcm9wZXJ0eVNs
b3QoZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KSkgeworICAgICAgICBpZiAoc2xvdC5pc0NhY2hl
YWJsZSgpKSB7CisgICAgICAgICAgICBzbG90LnNsb3RCYXNlKCktPnN0cnVjdHVyZSgpLT5zdGFy
dFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoCisgICAgICAgICAgICAgICAgZXhlYy0+
dm0oKSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHNs
b3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Cit9CisKIGlubGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0
YXRlKiBleGVjLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0CiB7CiAgICAgUHJvcGVydHlT
bG90IHNsb3QodGhpcyk7CkBAIC0xMjk1LDcgKzEyOTYsNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09i
amVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAKIHRlbXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1v
ZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTQ2VsbCogc3BlY2lmaWNGdW5jdGlvbikKK2lubGlu
ZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3Bl
cnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5p
c0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nlc3NvcikpOwpAQCAtMTMwNSwy
NSArMTMwNiwxNSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOwotICAgICAgICBKU0NlbGwqIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uOwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVudFNwZWNpZmljRnVuY3Rpb24pOworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBj
dXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkg
ewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgY3VycmVudGx5IGEgc3BlY2lmaWMgZnVuY3Rp
b24sIGFuZCB0aGVyZSBub3cgZWl0aGVyIGlzbid0LAotICAgICAgICAgICAgLy8gb3IgdGhlIG5l
dyB2YWx1ZSBpcyBkaWZmZXJlbnQsIHRoZW4gZGVzcGVjaWZ5LgotICAgICAgICAgICAgaWYgKGN1
cnJlbnRTcGVjaWZpY0Z1bmN0aW9uICYmIChzcGVjaWZpY0Z1bmN0aW9uICE9IGN1cnJlbnRTcGVj
aWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRlc3BlY2lmeURpY3Rp
b25hcnlGdW5jdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKICAgICAgICAgICAgIGlmICgobW9kZSA9
PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBvYmplY3RzIHN0cnVj
dHVyZSBvbmx5IGhhcyBhIHNwZWNpZmljIHZhbHVlIHNldCBpZiBwcmV2aW91c2x5IHRoZXJlCi0g
ICAgICAgICAgICAvLyBoYWQgYmVlbiBvbmUgc2V0LCBhbmQgaWYgdGhlIG5ldyB2YWx1ZSBiZWlu
ZyBzcGVjaWZpZWQgaXMgdGhlIHNhbWUgKG90aGVyd2lzZSB3ZSB3b3VsZAotICAgICAgICAgICAg
Ly8gaGF2ZSBkZXNwZWNpZmllZCwgYWJvdmUpLiAgU28sIGlmIGN1cnJlbnRTcGVjaWZpY0Z1bmN0
aW9uIGlzIG5vdCBzZXQsIG9yIGlmIHRoZSBuZXcKLSAgICAgICAgICAgIC8vIHZhbHVlIGlzIGRp
ZmZlcmVudCAob3IgdGhlcmUgaXMgbm8gbmV3IHZhbHVlKSwgdGhlbiB0aGUgc2xvdCBub3cgaGFz
IG5vIHZhbHVlIC0gYW5kCi0gICAgICAgICAgICAvLyBhcyBzdWNoIGl0IGlzIGNhY2hhYmxlLgot
ICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIHByZXZpb3VzbHkgYSB2YWx1ZSwgYW5kIHRoZSBu
ZXcgdmFsdWUgaXMgdGhlIHNhbWUsIHRoZW4gd2UgY2Fubm90IGNhY2hlLgotICAgICAgICAgICAg
aWYgKCFjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiB8fCAoc3BlY2lmaWNGdW5jdGlvbiAhPSBjdXJy
ZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1By
b3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQ
cm9wZXJ0eShvZmZzZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzbG90LnNldEV4aXN0
aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CiAKQEAgLTEzMzQsMTUgKzEzMjUsMTMgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1
dERpcmVjdEludGVybmFsKAogICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRl
cmZseSgpOwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZM
aW5lU3RvcmFnZSgpKQogICAgICAgICAgICAgbmV3QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0
b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlzLT5z
dHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAg
ICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKKyAg
ICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5z
aXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHNldFN0cnVjdHVy
ZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAKICAg
ICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAgQVNTRVJUKHRoaXMtPnN0cnVj
dHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9m
ZnNldCwgdmFsdWUpOwotICAgICAgICAvLyBTZWUgY29tbWVudCBvbiBzZXROZXdQcm9wZXJ0eSBj
YWxsIGJlbG93LgotICAgICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCi0gICAgICAgICAgICBz
bG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkK
ICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzNTAsNyArMTMzOSw3IEBAIGlubGlu
ZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCkt
Pm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0
cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9m
ZnNldCkpIHsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgewogICAgICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5
KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVD
YXBhY2l0eSgpKSB7CkBAIC0xMzYyLDQwICsxMzUxLDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9m
ZnNldChvZmZzZXQpKTsKICAgICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1
Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1
ZSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGgg
c3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAotICAgICAgICAvLyBz
byBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgotICAgICAgICBpZiAoIXNw
ZWNpZmljRnVuY3Rpb24pCi0gICAgICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9m
ZnNldCk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
Ci0gICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbjsKLSAgICBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVudFNw
ZWNpZmljRnVuY3Rpb24pOworICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZz
ZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1
dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgLy8g
VGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKLSAgICAgICAgLy8gICgxKSBUaGVy
ZSBpcyBhbiBleGlzdGluZyBzcGVjaWZpYyB2YWx1ZSBzZXQsIGFuZCB3ZSdyZSBvdmVyd3JpdGlu
ZyB3aXRoICp0aGUgc2FtZSB2YWx1ZSouCi0gICAgICAgIC8vICAgICAgICogRG8gbm90aGluZyAt
IG5vIG5lZWQgdG8gZGVzcGVjaWZ5LCBidXQgdGhhdCBtZWFucyB3ZSBjYW4ndCBjYWNoZSAoYSBj
YWNoZWQKLSAgICAgICAgLy8gICAgICAgICBwdXQgY291bGQgd3JpdGUgYSBkaWZmZXJlbnQgdmFs
dWUpLiBMZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRlLgotICAgICAgICAvLyAg
KDIpIFRoZXJlIGlzIGEgc3BlY2lmaWMgdmFsdWUgY3VycmVudGx5IHNldCwgYnV0IHdlJ3JlIHdy
aXRpbmcgYSBkaWZmZXJlbnQgdmFsdWUuCi0gICAgICAgIC8vICAgICAgICogRmlyc3QsIHdlIGhh
dmUgdG8gZGVzcGVjaWZ5LiAgSGF2aW5nIGRvbmUgc28sIHRoaXMgaXMgbm93IGEgcmVndWxhciBz
bG90Ci0gICAgICAgIC8vICAgICAgICAgd2l0aCBubyBzcGVjaWZpYyB2YWx1ZSwgc28gZ28gYWhl
YWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAgICAgLy8gICgzKSBOb3JtYWwgY2FzZSwgdGhl
cmUgaXMgbm8gc3BlY2lmaWMgdmFsdWUgc2V0LgotICAgICAgICAvLyAgICAgICAqIEdvIGFoZWFk
ICYgY2FjaGUgbGlrZSBub3JtYWwuCi0gICAgICAgIGlmIChjdXJyZW50U3BlY2lmaWNGdW5jdGlv
bikgewotICAgICAgICAgICAgLy8gY2FzZSAoMSkgRG8gdGhlIHB1dCwgdGhlbiByZXR1cm4gbGVh
dmluZyB0aGUgc2xvdCB1bmNhY2hhYmxlLgotICAgICAgICAgICAgaWYgKHNwZWNpZmljRnVuY3Rp
b24gPT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAgICAgICAgICAgICBwdXREaXJl
Y3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2FzZSAoMikgRGVzcGVjaWZ5LCBmYWxsIHRocm91
Z2ggdG8gKDMpLgotICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmRlc3Bl
Y2lmeUZ1bmN0aW9uVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUpKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIGNhc2UgKDMpIHNldCB0aGUgc2xvdCwgZG8gdGhlIHB1dCwg
cmV0dXJuLgorICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwog
ICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAg
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0x
NDA0LDE3ICsxMzcwLDE0IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCgKICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljRnVuY3Rpb24sIG9mZnNldCwgc2xvdC5jb250ZXh0KCkpOworICAgIHN0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSk7CiAgICAgCiAgICAgdmFs
aWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpOwogICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nh
cnkodm0sIHN0cnVjdHVyZSk7CiAKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwot
ICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMg
dmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAotICAgIC8vIHNvIGxlYXZlIHRoZSBz
bG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0gICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQot
ICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgc2xvdC5zZXRO
ZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkp
CiAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTE0NDcsMjAgKzE0MTAsMjAgQEAgaW5saW5lIGJvb2wgSlNPYmpl
Y3Q6OnB1dE93bkRhdGFQcm9wZXJ0eQogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwg
SGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKTsKIAotICAgIHJldHVybiBwdXRE
aXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJu
YWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpOwogfQogCiBp
bmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NF
UlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsK
ICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQ
dXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1
dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHB1dERpcmVjdEludGVy
bmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0
dHJpYnV0ZXMsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVy
dHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0g
ICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBw
dXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTE0NzAsNyArMTQzMyw3IEBAIGlu
bGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIKICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0
V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dP
dXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3Ry
dWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2
YWx1ZSkpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAg
IHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7
CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTksOCArOTksMTkgQEAgc3RhdGljIGlubGluZSBib29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAog
ICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRz
VmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIDAsIDAsIDApOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShH
bG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgZ2xvYmFsT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgMCwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIAor
ICAgICAgICBXYXRjaHBvaW50U3RhdGUgc3RhdGUgPSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgp
LT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoZXhlYy0+dm0oKSwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBJc1dhdGNoZWQgJiYgZ2V0T3JQ
dXQgPT0gUHV0KSB7CisgICAgICAgICAgICAvLyBUaGUgZmllbGQgZXhpc3RzLCBidXQgYmVjYXVz
ZSB0aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBzdGlsbCBpbnRhY3QuIFRoaXMgaXMKKyAg
ICAgICAgICAgIC8vIGtpbmQgb2YgZGFuZ2Vyb3VzLiBXZSBoYXZlIHR3byBvcHRpb25zOgorICAg
ICAgICAgICAgLy8gMSkgSW52YWxpZGF0ZSB0aGUgd2F0Y2hwb2ludCBzZXQuIFRoYXQgd291bGQg
d29yaywgYnV0IGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGNvZGUKKyAgICAgICAgICAgIC8vICAg
IHBhdGggbmV2ZXIgZXhlY3V0ZXMgLSBpbiB3aGljaCBjYXNlIHRoaXMgd291bGQgYmUgdW53aXNl
LgorICAgICAgICAgICAgLy8gMikgSGF2ZSB0aGUgaW52YWxpZGF0aW9uIGhhcHBlbiBhdCBydW4t
dGltZS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMgbGVhdmUgdGhlIGNvZGUKKyAgICAgICAgICAgIC8v
ICAgIHVuY2FjaGVkLiBUaGUgb25seSBkb3duc2lkZSBpcyBzbGlnaHRseSBtb3JlIHdvcmsgd2hl
biB0aGlzIGRvZXMgZXhlY3V0ZS4KKyAgICAgICAgICAgIC8vIFdlIGdvIHdpdGggb3B0aW9uICgy
KSBoZXJlIGJlY2F1c2UgaXQgc2VlbXMgbGVzcyBldmlsLgorICAgICAgICAgICAgb3AgPSBSZXNv
bHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwg
ZGVwdGgsIDAsIDAsIDAsIDApOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9wID0gUmVz
b2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyks
IGRlcHRoLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLCAwLCAwLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlz
aW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFw
SGFzaFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC03NiwxMyArNzYsMTEgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAg
IFN0cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWdu
ZWQgYXR0cmlidXRlczsKLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBzcGVjaWZpY1ZhbHVlOwog
Ci0gICAgUHJvcGVydHlNYXBFbnRyeShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cmluZ0ltcGwq
IGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwq
IHNwZWNpZmljVmFsdWUpCisgICAgUHJvcGVydHlNYXBFbnRyeShTdHJpbmdJbXBsKiBrZXksIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgOiBrZXko
a2V5KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRy
aWJ1dGVzKQotICAgICAgICAsIHNwZWNpZmljVmFsdWUodm0sIG93bmVyLCBzcGVjaWZpY1ZhbHVl
LCBXcml0ZUJhcnJpZXI8SlNDZWxsPjo6TWF5QmVOdWxsKQogICAgIHsKICAgICB9CiB9OwpAQCAt
MTQxLDggKzEzOSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVy
ZUZsYWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KICAgICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5
cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVudHJ5IFZhbHVlVHlwZTsKIApAQCAtMTU3LDgg
KzE1Myw4IEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0
aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFibGUgdG8gY29weSwgb3IgYm90aC4KICAgICBzdGF0
aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsK
LSAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25z
dCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwg
SlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRh
YmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVy
dHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIH5Qcm9wZXJ0eVRh
YmxlKCk7CiAKICAgICAvLyBPcmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgpAQCAtMTk2LDcgKzE5
Miw3IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9mZnNldCBuZXh0T2Zmc2V0KFByb3BlcnR5T2Zm
c2V0IGlubGluZUNhcGFjaXR5KTsKIAogICAgIC8vIENvcHkgdGhpcyBQcm9wZXJ0eVRhYmxlLCBl
bnN1cmluZyB0aGUgY29weSBoYXMgYXQgbGVhc3QgdGhlIGNhcGFjaXR5IHByb3ZpZGVkLgotICAg
IFByb3BlcnR5VGFibGUqIGNvcHkoVk0mLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBh
Y2l0eSk7CisgICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5
KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0yMDQs
MTIgKzIwMCwxMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBT
dHJ1Y3R1cmVJc0ltbW9ydGFsOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVG
bGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKIHByaXZhdGU6CiAgICAgUHJvcGVydHlUYWJs
ZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShWTSYs
IEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwg
SlNDZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7
CisgICAgUHJvcGVydHlUYWJsZShWTSYsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9w
ZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRh
YmxlJik7CiAKICAgICBQcm9wZXJ0eVRhYmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKICAgICAv
LyBVc2VkIHRvIGluc2VydCBhIHZhbHVlIGtub3duIG5vdCB0byBiZSBpbiB0aGUgdGFibGUsIGFu
ZCB3aGVyZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KQEAgLTQ5NCwxNSArNDkw
LDE1IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXgKICAgICByZXR1
cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9CiAK
LWlubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCitpbmxpbmUgUHJvcGVydHlUYWJsZSogUHJv
cGVydHlUYWJsZTo6Y29weShWTSYgdm0sIHVuc2lnbmVkIG5ld0NhcGFjaXR5KQogewogICAgIEFT
U0VSVChuZXdDYXBhY2l0eSA+PSBtX2tleUNvdW50KTsKIAogICAgIC8vIEZhc3QgY2FzZTsgaWYg
dGhlIG5ldyB0YWJsZSB3aWxsIGJlIHRoZSBzYW1lIG1faW5kZXhTaXplIGFzIHRoaXMgb25lLCB3
ZSBjYW4gbWVtY3B5IGl0LAogICAgIC8vIHNhdmUgcmVoYXNoaW5nIGFsbCBrZXlzLgogICAgIGlm
IChzaXplRm9yQ2FwYWNpdHkobmV3Q2FwYWNpdHkpID09IG1faW5kZXhTaXplKQotICAgICAgICBy
ZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqdGhpcyk7Ci0gICAgcmV0dXJu
IFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25lciwgbmV3Q2FwYWNpdHksICp0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGhpcyk7CisgICAgcmV0dXJu
IFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBuZXdDYXBhY2l0eSwgKnRoaXMpOwogfQogCiAjaWZu
ZGVmIE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlU
YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlUYWJsZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNiArNDQs
MTYgQEAgUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y3JlYXRlKFZNJgogICAgIHJldHVy
biB0YWJsZTsKIH0KIAotUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFi
bGUqIFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3Ro
ZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgb3duZXIsIG90
aGVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvdGhlcik7CiAg
ICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7CiB9CiAKLVBy
b3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwg
dW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1By
b3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgdW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRh
YmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZt
LmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25lciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7
CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQ
cm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgaW5pdGlhbENhcGFjaXR5
LCBvdGhlcik7CiAgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFi
bGU7CiB9CkBAIC02OSw3ICs2OSw3IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0m
IHZtLCB1bnMKICAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwogfQogCi1Qcm9w
ZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJv
cGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwg
Y29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5
VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6
ZSkKICAgICAsIG1faW5kZXhNYXNrKG90aGVyLm1faW5kZXhNYXNrKQpAQCAtODIsMTAgKzgyLDgg
QEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpTQwogICAgIG1lbWNweSht
X2luZGV4LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6ZSgpKTsKIAogICAgIGl0ZXJhdG9yIGVuZCA9
IHRoaXMtPmVuZCgpOwotICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKQogICAgICAgICBpdGVyLT5rZXktPnJlZigpOwotICAgICAgICB2bS5oZWFw
LndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSk7Ci0gICAgfQog
CiAgICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3IuCiAgICAgVmVjdG9yPFBy
b3BlcnR5T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zmc2V0cyA9IG90aGVyLm1fZGVsZXRlZE9mZnNl
dHMuZ2V0KCk7CkBAIC05Myw3ICs5MSw3IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUo
Vk0mIHZtLCBKU0MKICAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0
b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7CiB9CiAKLVByb3BlcnR5
VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0
aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlUYWJsZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJv
cGVydHlUYWJsZSYgb3RoZXIpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1
Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENh
cGFjaXR5KSkKICAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkKQEAgLTEwOSw3ICsx
MDcsNiBAQCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgICAg
IEFTU0VSVChjYW5JbnNlcnQoKSk7CiAgICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKICAgICAgICAg
aXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGl0
ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOwogICAgIH0KIAogICAgIC8vIENvcHkgdGhlIG1fZGVs
ZXRlZE9mZnNldHMgdmVjdG9yLgpAQCAtMTMyLDE3ICsxMjksNCBAQCBQcm9wZXJ0eVRhYmxlOjp+
UHJvcGVydHlUYWJsZSgpCiAgICAgZmFzdEZyZWUobV9pbmRleCk7CiB9CiAKLXZvaWQgUHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9y
KQotewotICAgIFByb3BlcnR5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJs
ZSo+KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5m
bygpKTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3Zl
cnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlz
T2JqZWN0LCB2aXNpdG9yKTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRo
aXNPYmplY3QtPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0g
dGhpc09iamVjdC0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAw
OSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Myw3ICsxNzMsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRl
clByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVh
ZG9ubHlQcm9wZXJ0aWVzKHZtKSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMo
ZmFsc2UpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmlj
RnVuY3Rpb25UaHJhc2hDb3VudCgwKTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7
CiAgICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVp
ZmllZChmYWxzZSk7CkBAIC0yMDMsNyArMjAyLDYgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0m
IHZtKQogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKHZt
KSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEF0
dHJpYnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCgwKTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7CiAgICAgc2V0RGlkVHJhbnNp
dGlvbihmYWxzZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmllZChmYWxzZSk7CkBAIC0y
MzIsNyArMjMwLDYgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBjb25zdCBTdHJ1Ywog
ICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8o
cHJldmlvdXMtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJv
dG8oKSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMocHJldmlvdXMtPmhhc05v
bkVudW1lcmFibGVQcm9wZXJ0aWVzKCkpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDAp
OwotICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudChwcmV2aW91cy0+c3BlY2lmaWNG
dW5jdGlvblRocmFzaENvdW50KCkpOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25zKHByZXZpb3Vz
LT5wcmV2ZW50RXh0ZW5zaW9ucygpKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKHRydWUpOwogICAg
IHNldFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQocHJldmlvdXMtPnN0YXRpY0Z1bmN0aW9uc1JlaWZp
ZWQoKSk7CkBAIC0zMDAsNyArMjk3LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJv
cGVydHlNYXAoVgogICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0
cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOwogICAgIAogICAgIGlmICh0YWJsZSkgewotICAg
ICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBzdHJ1Y3R1cmUsIG51bWJlck9mU2xvdHNGb3JM
YXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgIHRhYmxlID0g
dGFibGUtPmNvcHkodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lu
bGluZUNhcGFjaXR5KSk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAg
IH0KICAgICAKQEAgLTMxNyw3ICszMTQsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcChWCiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAg
IGlmICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkodm0sIHRoaXMsIHN0cnVjdHVyZS0+bV9u
YW1lSW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRy
aWJ1dGVzSW5QcmV2aW91cygpLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMu
Z2V0KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1
dGVzSW5QcmV2aW91cygpKTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1f
b2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAg
IH0KICAgICAKQEAgLTMzNiwzMCArMzMzLDEyIEBAIHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3Rl
ZE5ld091dE9mTGluZVMKICAgICByZXR1cm4gbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShv
dXRPZkxpbmVDYXBhY2l0eSgpKTsKIH0KICAKLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0
aW9uYXJ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAg
IFN0cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQotICAgIERlZmVyR0MgZGVm
ZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0s
IGRlZmVyR0MpOwotCi0gICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKLSAgICBBU1NFUlQocHJv
cGVydHlUYWJsZSgpKTsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlU
YWJsZSgpLT5nZXQocmVwKTsKLSAgICBBU1NFUlQoZW50cnkpOwotICAgIGVudHJ5LT5zcGVjaWZp
Y1ZhbHVlLmNsZWFyKCk7Ci19Ci0KLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
aW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUs
IFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9m
ZnNldCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFT
U0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogCiAgICAgaWYgKFN0cnVjdHVyZSogZXhpc3Rp
bmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQodWlkLCBhdHRy
aWJ1dGVzKSkgewotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWVJblByZXZpb3VzID0gZXhp
c3RpbmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpOwotICAgICAg
ICBpZiAoc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgJiYgc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMg
IT0gc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB2YWxpZGF0
ZU9mZnNldChleGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0LCBleGlzdGluZ1RyYW5zaXRpb24t
PmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24t
Pm1fb2Zmc2V0OwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwpAQCAtMzY4LDE2
ICszNDcsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAg
IHJldHVybiAwOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
LCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zm
c2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAg
IHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zm
c2V0KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUltcGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMsIG9mZnNldCk7
CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBs
KiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVy
dHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xv
Y2spOwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
SW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsK
KyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwo
c3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKIGJvb2wgU3RydWN0dXJl
OjphbnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QKQEAg
LTQzMiwyNSArNDExLDEyIEBAIE5vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dl
c3QKICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7CiB9CiAKLVN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6
OkNvbnRleHQgY29udGV4dCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCwgUHV0UHJv
cGVydHlTbG90OjpDb250ZXh0IGNvbnRleHQpCiB7Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIHNwZWNp
ZmljIGZ1bmN0aW9uLCB3ZSBtYXkgaGF2ZSBnb3QgdG8gdGhpcyBwb2ludCBpZiB0aGVyZSBpcwot
ICAgIC8vIGFscmVhZHkgYSB0cmFuc2l0aW9uIHdpdGggdGhlIGNvcnJlY3QgcHJvcGVydHkgbmFt
ZSBhbmQgYXR0cmlidXRlcywgYnV0Ci0gICAgLy8gc3BlY2lhbGl6ZWQgdG8gYSBkaWZmZXJlbnQg
ZnVuY3Rpb24uICBJbiB0aGlzIGNhc2Ugd2UganVzdCB3YW50IHRvIGdpdmUgdXAKLSAgICAvLyBh
bmQgZGVzcGVjaWFsaXplIHRoZSB0cmFuc2l0aW9uLgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBj
bGVhciB0aGUgdmFsdWUgb2Ygc3BlY2lmaWNGdW5jdGlvbiB3aGljaCB3aWxsIHJlc3VsdAotICAg
IC8vIGluIHVzIGFkZGluZyBhIG5vbi1zcGVjaWZpYyB0cmFuc2l0aW9uLCBhbmQgYW55IHN1YnNl
cXVlbnQgbG9va3VwIGluCi0gICAgLy8gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlIHdpbGwganVzdCB1c2UgdGhhdC4KLSAgICBpZiAoc3BlY2lmaWNW
YWx1ZSAmJiBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmNvbnRhaW5zKHByb3BlcnR5TmFt
ZS51aWQoKSwgYXR0cmlidXRlcykpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAg
QVNTRVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJl
LT5pc09iamVjdCgpKTsKLSAgICBBU1NFUlQoIVN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KSk7CisgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIG9mZnNldCkpOwogICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPnNwZWNp
ZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBpbnQgbWF4VHJhbnNpdGlvbkxl
bmd0aDsKICAgICBpZiAoY29udGV4dCA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpCiAgICAg
ICAgIG1heFRyYW5zaXRpb25MZW5ndGggPSBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFs
UHV0QnlJZDsKQEAgLTQ1OSw3ICs0MjUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0CiAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbkNvdW50KCkgPiBtYXhU
cmFuc2l0aW9uTGVuZ3RoKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2Fj
aGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VS
VChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7Ci0gICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24t
PnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNW
YWx1ZSk7CisgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247CiAgICAgfQogICAgIApA
QCAtNDY5LDExICs0MzUsMTAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdAogICAgIHRyYW5zaXRpb24tPnNldFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVj
dHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51
aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVz
KTsKLSAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLnNldE1heUJlTnVs
bCh2bSwgdHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJs
ZU9yQ2xvbmVJZlBpbm5lZCh2bSwgdHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3Bl
cnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFi
bGVPckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAKLSAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1Zh
bHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIG9m
ZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIAog
ICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVD
YXBhY2l0eSgpKTsKICAgICB7CkBAIC01MDUsNyArNDcwLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikp
OworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlv
bi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigp
OwogCkBAIC01MTMsMzAgKzQ3OCw2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90
b3R5cGVUcmEKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBQcm9wZXJ0eU5hbWUgcmVwbGFjZUZ1bmN0aW9uKQotewotICAgIEFTU0VSVChzdHJ1Y3R1
cmUtPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpIDwgbWF4U3BlY2lmaWNGdW5jdGlvblRo
cmFzaENvdW50KTsKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVj
dHVyZSk7Ci0KLSAgICB0cmFuc2l0aW9uLT5zZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQo
dHJhbnNpdGlvbi0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgKyAxKTsKLQotICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKLSAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0
cnVjdHVyZS0+bV9vZmZzZXQ7Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7Ci0KLSAgICBpZiAodHJh
bnNpdGlvbi0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgPT0gbWF4U3BlY2lmaWNGdW5j
dGlvblRocmFzaENvdW50KQotICAgICAgICB0cmFuc2l0aW9uLT5kZXNwZWNpZnlBbGxGdW5jdGlv
bnModm0pOwotICAgIGVsc2UgewotICAgICAgICBib29sIHJlbW92ZWQgPSB0cmFuc2l0aW9uLT5k
ZXNwZWNpZnlGdW5jdGlvbih2bSwgcmVwbGFjZUZ1bmN0aW9uKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci0KLSAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIHRyYW5zaXRpb247Ci19Ci0KIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwpAQCAtNTQ0LDcgKzQ4NSw3IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKICAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgICAgIHN0cnVj
dHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAg
ICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAg
ICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNp
dGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgICAgICB0cmFuc2l0aW9u
LT5waW4oKTsKICAgICAgICAgCkBAIC01NjgsNyArNTA5LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnRvRGljdGlvbmFyeVRyYW5zaQogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikp
OworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlv
bi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnNldERp
Y3Rpb25hcnlLaW5kKGtpbmQpOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNjMxLDcgKzU3
Miw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QKIAogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVy
dHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
KCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlu
bmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNl
dDsKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2ZW50RXh0ZW5zaW9ucyh0cnVlKTsKICAgICB0cmFu
c2l0aW9uLT5waW4oKTsKQEAgLTY0MCwxMyArNTgxLDEzIEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpwcmV2ZW50RXh0ZW5zaW9uc1QKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotUHJvcGVy
dHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYg
dm0sIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9w
ZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmlu
Zyh2bSwgZGVmZXJHQyk7CiAgICAgCiAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQot
ICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBvd25lciwgcHJvcGVydHlU
YWJsZSgpLT5zaXplKCkgKyAxKTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+Y29w
eSh2bSwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKICAgICAKICAgICAvLyBIb2xkIHRo
ZSBsb2NrIHdoaWxlIHN0ZWFsaW5nIHRoZSB0YWJsZSAtIHNvIHRoYXQgZ2V0Q29uY3VycmVudGx5
KCkgb24gYW5vdGhlciB0aHJlYWQKICAgICAvLyB3aWxsIGVpdGhlciBoYXZlIHRvIGJ5cGFzcyB0
aGlzIHN0cnVjdHVyZSwgb3Igd2lsbCBnZXQgdG8gdXNlIHRoZSBwcm9wZXJ0eSB0YWJsZQpAQCAt
NjgyLDcgKzYyMyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQK
ICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUp
OwogICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwog
ICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKLSAg
ICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1
cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtLCB0cmFuc2l0aW9uKSk7Cisg
ICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRp
b24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICBjaGVja09mZnNldCh0cmFu
c2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgCkBA
IC03NzMsMTkgKzcxNCwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25h
cnlTCiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNT
RVJUKCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCi0gICAgaWYgKHNwZWNpZmljRnVuY3Rpb25UaHJh
c2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgc3Bl
Y2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CiAg
ICAgCiAgICAgcGluKCk7CiAKLSAgICByZXR1cm4gcHV0U3BlY2lmaWNWYWx1ZSh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICByZXR1cm4gYWRkKHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQpAQCAtODEyLDExICs3NTAsMzIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRl
UmFyZURhdGEoVk0mIHZtKQogewogICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7CiAgICAgU3Ry
dWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZSh2bSwg
cHJldmlvdXMoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX3ByZXZpb3Vz
T3JSYXJlRGF0YS5zZXQodm0sIHRoaXMsIHJhcmVEYXRhKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOwogICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwogICAgIEFTU0VSVChoYXNSYXJlRGF0
YSgpKTsKIH0KIAorV2F0Y2hwb2ludFN0YXRlIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAg
IEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgCisgICAgaWYgKCFoYXNS
YXJlRGF0YSgpKQorICAgICAgICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOworICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0
YSA9IHRoaXMtPnJhcmVEYXRhKCk7CisgICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdh
dGNocG9pbnRTZXRzKSB7CisgICAgICAgIHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldHMgPQorICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVSYXJlRGF0YTo6
UHJvcGVydHlXYXRjaHBvaW50TWFwPigpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgIH0KKyAgICBhdXRvIHJlc3VsdCA9IHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hw
b2ludFNldHMtPmFkZChvZmZzZXQsIG51bGxwdHIpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRy
eSkKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UmVmKG5ldyBXYXRjaHBv
aW50U2V0KElzV2F0Y2hlZCkpOworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5z
dGF0ZSgpOworfQorCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogCiBzdHJ1Y3QgUHJvcGVy
dHlNYXBTdGF0aXN0aWNzRXhpdExvZ2dlciB7CkBAIC04NDUsMjEgKzgwNCwyMSBAQCBpbmxpbmUg
dm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koCiAKICNlbmRpZgogCi1Qcm9wZXJ0eVRh
YmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgU3RydWN0dXJlKiBvd25l
cikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtKQog
ewogICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgp
KTsKKyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxlKCku
Z2V0KCkpOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhWTSYgdm0sIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1
Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYgdm0pCiB7CiAgICAgaWYgKHBy
b3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBv
d25lciwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eVRh
YmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CiAgICAgcmV0dXJuIFByb3Bl
cnR5VGFibGU6OmNyZWF0ZSh2bSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQs
IG1faW5saW5lQ2FwYWNpdHkpKTsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRD
b25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBK
U0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25j
dXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogewog
ICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOwogICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlOwpAQCAtODcxLDcgKzgzMCw2IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
Q29uY3VycmVudGwKICAgICAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSB0YWJsZS0+Z2V0
KHVpZCk7CiAgICAgICAgIGlmIChlbnRyeSkgewogICAgICAgICAgICAgYXR0cmlidXRlcyA9IGVu
dHJ5LT5hdHRyaWJ1dGVzOwotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IGVudHJ5LT5zcGVj
aWZpY1ZhbHVlLmdldCgpOwogICAgICAgICAgICAgUHJvcGVydHlPZmZzZXQgcmVzdWx0ID0gZW50
cnktPm9mZnNldDsKICAgICAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTg4NSwxNCArODQzLDEzIEBAIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGwKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAKICAgICAgICAgYXR0cmlidXRlcyA9IHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlv
dXMoKTsKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVl
SW5QcmV2aW91cy5nZXQoKTsKICAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAg
ICAgfQogICAgIAogICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogfQogCi1Qcm9wZXJ0eU9mZnNl
dCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCYgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAg
ICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSBpbmZvKCkpOwpAQCAtOTA3LDM5
ICs4NjQsMTAgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcgogICAg
ICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0
cmlidXRlczsKLSAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnktPnNwZWNpZmljVmFsdWUuZ2V0KCk7
CiAgICAgcmV0dXJuIGVudHJ5LT5vZmZzZXQ7CiB9CiAKLWJvb2wgU3RydWN0dXJlOjpkZXNwZWNp
ZnlGdW5jdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJs
ZSgpLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKLSAgICBpZiAoIWVudHJ5KQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBBU1NFUlQoZW50cnktPnNwZWNpZmljVmFsdWUpOwotICAgIGVu
dHJ5LT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0mIHZtKQotewotICAgIERlZmVyR0Mg
ZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
dm0sIGRlZmVyR0MpOwotICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVu
ZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFi
bGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+c3BlY2lm
aWNWYWx1ZS5jbGVhcigpOwotfQotCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNp
ZmljVmFsdWUoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMpCiB7CiAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5o
ZWFwKTsKICAgICAKQEAgLTk1Niw3ICs4ODQsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OnB1dFNwZWNpZmljVmFsCiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0
eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKLSAgICBwcm9wZXJ0eVRh
YmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHZtLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBF
bnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxl
OjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIHJldHVybiBuZXdPZmZzZXQ7CkBAIC0xMDYwLDcgKzk4OCw2IEBAIHZvaWQgU3RydWN0
dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwogICAgIH0KICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9wcmV2aW91c09yUmFyZURhdGEpOwotICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKIAogICAgIGlmICh0
aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBBU1NFUlQodGhp
c09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKQEAgLTEwODMsOCArMTAxMCw3IEBAIGJv
b2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKICAgICAgICAgY3VycmVudCA9
IHByb3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgCiAgICAgICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBjdXJyZW50LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAg
IGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgCkBAIC0xMTQ0LDEzICsxMDcwLDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgYwogICAgIGlmICh0YWJsZSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7CiAgICAgICAgIFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIGl0ZXItPmtleSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KGl0
ZXItPm9mZnNldCkpOwotICAgICAgICAgICAgaWYgKGl0ZXItPnNwZWNpZmljVmFsdWUpIHsKLSAg
ICAgICAgICAgICAgICBEdW1wQ29udGV4dCBkdW1teUNvbnRleHQ7Ci0gICAgICAgICAgICAgICAg
b3V0LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSkpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUtPm1f
bG9jay51bmxvY2soKTsKICAgICB9CkBAIC0xMTYwLDEwICsxMDgxLDYgQEAgdm9pZCBTdHJ1Y3R1
cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9u
YW1lSW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgIjoiLCBzdGF0aWNfY2Fz
dDxpbnQ+KHN0cnVjdHVyZS0+bV9vZmZzZXQpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9z
cGVjaWZpY1ZhbHVlSW5QcmV2aW91cykgewotICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlD
b250ZXh0OwotICAgICAgICAgICAgb3V0LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoc3RydWN0dXJl
LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKSk7Ci0gICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgb3V0LnByaW50KCJ9LCAiLCBJbmRleGluZ1R5cGVEdW1wKGluZGV4aW5nVHlwZSgp
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2
aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMSwxMiArMTExLDExIEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJv
cGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6
OlVua25vd25Db250ZXh0KTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSosIFN0cmluZ0lt
cGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9w
ZXJ0eU9mZnNldCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3Bl
cnR5T2Zmc2V0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRk
UHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCA9
IFB1dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3Ry
dWN0dXJlKiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3Ry
dWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1
ZSBwcm90b3R5cGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGRl
c3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSk7
CiAgICAgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVy
ZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNp
dGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAtMTM4LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVz
ZWQgd2l0aCBjYXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQg
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBQcm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICB2b2lkIHNl
dFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsg
bV9wcm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUpOyB9CiAgICAgICAgIApAQCAtMTg4
LDggKzE4Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBXaWxsIGp1c3QgdGhlIHByb3RvdHlwZSBjaGFp
biBpbnRlcmNlcHQgdGhpcyBwcm9wZXJ0eSBhY2Nlc3M/CiAgICAgYm9vbCBwcm90b3R5cGVDaGFp
bk1heUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKLSAgICBi
b29sIHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEh
bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQotICAgICAgICAKICAgICBTdHJ1Y3R1cmUqIHBy
ZXZpb3VzSUQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKSA9PSBpbmZvKCkpOwpAQCAtMjYzLDEwICsyNjAsMTAgQEAgcHVibGljOgogCiAgICAg
UHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNl
dCBnZXQoVk0mLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgUHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmli
dXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJv
cGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7
CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1
aWQpOwotICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwq
IHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAg
IFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5z
aWduZWQmIGF0dHJpYnV0ZXMpOwogCiAgICAgdm9pZCBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzV2l0aFByb3RvQ2hlY2soYm9vbCBpc19fcHJvdG9fXykKICAgICB7CkBAIC0yODMsOSArMjgw
LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gIUpTQzo6aXNWYWxpZE9mZnNldChtX29mZnNl
dCk7CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXNwZWNpZnlEaWN0aW9u
YXJ5RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgZGlzYWJsZVNwZWNpZmlj
RnVuY3Rpb25UcmFja2luZygpIHsgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KG1heFNw
ZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCk7IH0KLQogICAgIHZvaWQgc2V0RW51bWVyYXRpb25D
YWNoZShWTSYsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBE
ZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oLgogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQ
cm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CkBAIC0zNjQsMTMgKzM1OCwxNyBA
QCBwdWJsaWM6CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxW
YWxpZCgpKTsKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2lu
dCk7CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICB2b2lkIG5vdGlmeVRyYW5zaXRpb25Gcm9t
VGhpc1N0cnVjdHVyZSgpIGNvbnN0OwogICAgIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIHRy
YW5zaXRpb25XYXRjaHBvaW50U2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3Ry
YW5zaXRpb25XYXRjaHBvaW50U2V0OwogICAgIH0KKyAgICAKKyAgICBXYXRjaHBvaW50U3RhdGUg
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKFZNJiwgUHJvcGVydHlPZmZzZXQp
OworICAgIHZvaWQgZGlkUmVwbGFjZVByb3BlcnR5KFByb3BlcnR5T2Zmc2V0KTsKKyAgICBXYXRj
aHBvaW50U2V0KiBwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0eU9mZnNl
dCk7CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKCk7
CiAgICAgCkBAIC00MDYsNyArNDA0LDYgQEAgcHVibGljOgogICAgIERFRklORV9CSVRGSUVMRChi
b29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBI
YXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsK
ICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIEhh
c05vbkVudW1lcmFibGVQcm9wZXJ0aWVzLCAxLCA1KTsKICAgICBERUZJTkVfQklURklFTEQodW5z
aWduZWQsIGF0dHJpYnV0ZXNJblByZXZpb3VzLCBBdHRyaWJ1dGVzSW5QcmV2aW91cywgMTQsIDYp
OwotICAgIERFRklORV9CSVRGSUVMRCh1bnNpZ25lZCwgc3BlY2lmaWNGdW5jdGlvblRocmFzaENv
dW50LCBTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQsIDIsIDIwKTsKICAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgcHJldmVudEV4dGVuc2lvbnMsIFByZXZlbnRFeHRlbnNpb25zLCAxLCAyMik7
CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5zaXRpb24sIERpZFRyYW5zaXRpb24s
IDEsIDIzKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgc3RhdGljRnVuY3Rpb25zUmVpZmll
ZCwgU3RhdGljRnVuY3Rpb25zUmVpZmllZCwgMSwgMjQpOwpAQCAtNDIxLDcgKzQxOCw3IEBAIHBy
aXZhdGU6CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1
cmUqKTsKICAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CiAKICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzdHJ1
Y3R1cmUgdGhhdCBoYXMgYSB1c2FibGUgcHJvcGVydHkgdGFibGUsIHRoYXQgcHJvcGVydHkgdGFi
bGUsCiAgICAgLy8gYW5kIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJl
Zm9yZSB3ZSBnb3QgdG8gaXQuIElmIGl0IHJldHVybnMgYQpAQCAtNDMxLDE5ICs0MjgsMTYgQEAg
cHJpdmF0ZToKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uKFZNJiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQpOwogCi0gICAgUHJvcGVydHlPZmZz
ZXQgcHV0U3BlY2lmaWNWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJl
bW92ZShQcm9wZXJ0eU5hbWUpOwogCiAgICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBH
Q1NhZmVDb25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwog
ICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlv
bihWTSYsIFByb3BlcnR5TmFtZSk7Ci0gICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0m
KTsKLQogICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwot
ICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiwg
U3RydWN0dXJlKiBvd25lcik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUo
Vk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoVk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxl
KiB0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFi
bGUqIGNvcHlQcm9wZXJ0eVRhYmxlKFZNJik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwKFZNJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnkoVk0mIHZtLCBEZWZlckdDJikKICAgICB7CkBAIC01MDcsOCArNTAxLDYgQEAg
cHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0
OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1
dEJ5SWQgPSA1MTI7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5j
dGlvblRocmFzaENvdW50ID0gMzsKLSAgICAKICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIHByb3Bl
cmx5IGFsaWduZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgJ1N0cnVjdHVyZScKICAgICAvLyBw
YXJ0IG9mIHRoZSBvYmplY3QuCiAgICAgU3RydWN0dXJlSURCbG9iIG1fYmxvYjsKQEAgLTUyMSw3
ICs1MTMsNiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fcHJldmlvdXNP
clJhcmVEYXRhOwogCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbmFtZUluUHJldmlvdXM7Ci0g
ICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsKIAogICAg
IGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDcyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDkgKzEwMiw3IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldChWTSYKIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1
cnJlbnRseShWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1
dGVzSWdub3JlZDsKLSAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWVJZ25vcmVkOwotICAgIHJldHVy
biBnZXRDb25jdXJyZW50bHkoCi0gICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBz
cGVjaWZpY1ZhbHVlSWdub3JlZCk7CisgICAgcmV0dXJuIGdldENvbmN1cnJlbnRseSh2bSwgdWlk
LCBhdHRyaWJ1dGVzSWdub3JlZCk7CiB9CiAKIGlubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5k
ZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdApAQCAtMjIzLDYgKzIyMSwzMSBA
QCBBTFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlCiAgICAgcmV0dXJuIG1f
cHJvcGVydHlUYWJsZVVuc2FmZTsKIH0KIAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBs
YWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGlmIChMSUtFTFkoIWhh
c1JhcmVEYXRhKCkpKQorICAgICAgICByZXR1cm47CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlBy
b3BlcnR5V2F0Y2hwb2ludE1hcCogbWFwID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNo
cG9pbnRTZXRzLmdldCgpOworICAgIGlmIChMSUtFTFkoIW1hcCkpCisgICAgICAgIHJldHVybjsK
KyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtYXAtPmdldChvZmZzZXQpOworICAgIGlmIChMSUtF
TFkoIXNldCkpCisgICAgICAgIHJldHVybjsKKyAgICBzZXQtPmZpcmVBbGwoIlByb3BlcnR5IGRp
ZCBnZXQgcmVwbGFjZWQiKTsKK30KKworaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6
cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
eworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKCFoYXNS
YXJlRGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAg
PSByYXJlRGF0YSgpLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYg
KCFtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXAtPmdldChvZmZz
ZXQpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNp
c3RlbmN5KCkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9w
cm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMTcwNzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBTdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0
dXJlUmFyZURhdGE6OmNyCiAgICAgcmV0dXJuIHJhcmVEYXRhOwogfQogCit2b2lkIFN0cnVjdHVy
ZVJhcmVEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxTdHJ1
Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5TdHJ1Y3R1cmVSYXJlRGF0YTo6flN0cnVjdHVyZVJhcmVE
YXRhKCk7Cit9CisKIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0s
IFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVJhcmVE
YXRhU3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiSlND
ZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MCw2ICs0MSwxMCBAQCBjbGFzcyBTdHJ1Y3R1
cmVSYXJlRGF0YSA6IHB1YmxpYyBKU0NlbGwgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVy
ZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHN0YXRpYyBjb25zdCBi
b29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lt
bW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCop
OworCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxP
YmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CkBAIC01MywxMCArNTgsMTIgQEAgcHVibGljOgog
CiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOwogICAgIHZv
aWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJv
cGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKTsKLQorICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKKyAgICAKICAgICBT
dHJ1Y3R1cmVSYXJlRGF0YShWTSYsIFN0cnVjdHVyZSopOwogCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6
U3RydWN0dXJlRmxhZ3M7CkBAIC02NCw2ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJy
aWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsKICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1f
b2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVy
YXRvcj4gbV9lbnVtZXJhdGlvbkNhY2hlOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9w
ZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+LCBXVEY6OkludEhhc2g8UHJvcGVydHlP
ZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0
Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdh
dGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0czsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZl
ci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVy
LWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4
IEBACitmdW5jdGlvbiBmb28ocCkgeworICAgIGlmIChwKQorICAgICAgICBNYXRoID0ge3Npbjog
ZnVuY3Rpb24oKSB7IHJldHVybiA0MjsgfSwgUEk6IDQzLCBhYnM6IE1hdGguYWJzfTsKK30KKwor
bm9JbmxpbmUoZm9vKTsKKworKGZ1bmN0aW9uKCkgeworICAgIHZhciBuID0gMTAwMDAwOworICAg
IHZhciBtID0gMTAwOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbjsgKytpKSB7CisgICAgICAgIGZvbyhpID09IG4gLSBtKTsKKyAgICAgICAgcmVzdWx0ICs9
IE1hdGguc2luKE1hdGguUEkpOworICAgIH0KKyAgICBpZiAoTWF0aC5hYnMocmVzdWx0IC0gbSAq
IDQyKSA+IDFlLTgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVy
LWNvbnN0YW50LXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LXByb3Bl
cnR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK3ZhciBvID0ge2Y6e2Y6e2Y6
e2Y6e2Y6e2Y6e2Y6NDJ9fX19fX19OworCitmdW5jdGlvbiBmb28ocCkgeworICAgIGlmIChwKQor
ICAgICAgICBvLmYuZi5mLmYuZi5mID0ge2Y6NTN9OworfQorCitub0lubGluZShmb28pOworCiso
ZnVuY3Rpb24oKSB7CisgICAgdmFyIG4gPSAxMDAwMDA7CisgICAgdmFyIG0gPSAxMDA7CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsK
KyAgICAgICAgZm9vKGkgPT0gbiAtIG0pOworICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYu
Zi5mOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ICE9IChuIC0gbSkgKiA0MiArIG0gKiA1
MykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3Bl
cnR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
ZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2lu
ZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwt
cHJvcGVydHkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9i
YWwtcHJvcGVydHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0
eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2lu
ZmVyLWNvbnN0YW50LXByb3BlcnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkKKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3Bl
cnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwg
UFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtcHJvcGVydHku
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0
YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0
ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICBy
ZXN1bHQgKz0gTWF0aC5zaW4oTWF0aC5QSSk7CisgICAgfQorICAgIGlmIChNYXRoLmFicyhyZXN1
bHQpID4gMWUtOCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVy
LWNvbnN0YW50LXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtcHJv
cGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAordmFyIG8gPSB7Zjp7Zjp7
Zjp7Zjp7Zjp7Zjp7Zjo0Mn19fX19fX07CisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG4gPSAxMDAw
MDAwOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytp
KQorICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIAorICAgIGlmIChyZXN1
bHQgIT0gbiAqIDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7Cit9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234388</attachid>
            <date>2014-07-03 20:18:46 -0700</date>
            <delta_ts>2014-07-04 13:00:24 -0700</delta_ts>
            <desc>and now, more sound than ever!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>117194</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYs
NiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxl
eEdldFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAg
Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAg
ICAgICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KAogICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWlu
Q291bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRT
dGF0dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVu
dE9iamVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0o
KSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYg
KGN1cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBo
ZWFkU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9j
ay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAg
ICAgaWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1
ZSA9IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5t
X29mZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShy
ZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJ
ZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3Rh
dHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25v
cmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2st
PnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChz
dHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAg
ICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAg
IGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMo
U2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9m
ZnNldCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwg
ZmFsc2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsK
ICNlbHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
I2VuZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93
UGF0aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0g
ICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCks
IHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFy
aWFudC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAg
ICB2YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50
Lm1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpA
QCAtMjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZv
clMKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R2V0QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0
KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAg
ICAgIGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNo
YWluKCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBA
IC0yOTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVG
b3IoCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAg
ICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZt
LCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdz
IHByb2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2
ZW4gdGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAg
ICAgIGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0
cmVuZ2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5p
c0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1
cmUsIG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRC
eUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNw
YWNlIEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAg
ICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShu
dWxscHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29m
ZnNldChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0
YXR1cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VS
VChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1
ZSk7CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYg
QEAgR2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0
dXJlU2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90
aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRl
cm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtODYsOSArODMsNiBAQCBi
b29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCFhcmVDb21w
YXRpYmxlKG1fY29uc3RhbnRDaGVja3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSAhPSBvdGhlci5t
X3NwZWNpZmljVmFsdWUpCi0gICAgICAgIG1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKLQog
ICAgIG1lcmdlSW50byhvdGhlci5tX2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsK
ICAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCkBA
IC0xMTIsOCArMTA2LDYgQEAgdm9pZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmlu
dAogICAgICAgICAiWyIsIGxpc3REdW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRl
eHQpLCAiXSIpOwogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgIG91dC5wcmludCgi
LCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwg
Y29udGV4dCkpOwotICAgIGlmIChzcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIG91dC5wcmludCgi
LCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCkp
OwogICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2Fs
bExpbmtTdGF0dXMpCiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtT
dGF0dXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJp
YW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9HZXRCeUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBA
IHN0cnVjdCBEdW1wQ29udGV4dDsKIGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAg
ICBHZXRCeUlkVmFyaWFudCgKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVT
ZXQgPSBTdHJ1Y3R1cmVTZXQoKSwKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52
YWxpZE9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAorICAgICAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiA9IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKQEAgLTU4LDcg
KzU3LDYgQEAgcHVibGljOgogICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1
cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVj
dG9yJiBjb25zdGFudENoZWNrcygpIGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0K
ICAgICBKU09iamVjdCogYWx0ZXJuYXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRl
QmFzZTsgfQotICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Bl
Y2lmaWNWYWx1ZTsgfQogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0OyB9CiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYWxsTGlua1N0YXR1cy5nZXQoKTsgfQogICAgIApAQCAtNzMsNyArNzEsNiBA
QCBwcml2YXRlOgogICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKICAgICBDb25zdGFu
dFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1f
YWx0ZXJuYXRlQmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0
eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1f
Y2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNTQsOCArMjU0LDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9y
UwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NrZXIsICpzdHViLT5tX2NhbGxM
aW5rSW5mbywgY2FsbEV4aXRTaXRlRGF0YSkpOwogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFudCA9IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNv
bXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
Y29tcGxleEdldFN0YXR1cy5jaGFpbigpLCBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQo
KSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgfSB9CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0zMzQsMTkgKzMzNCwyNCBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICByZXR1cm4gUHV0
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAKICAgICAgICAgdW5zaWduZWQgYXR0cmli
dXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYg
Q3VzdG9tQWNjZXNzb3IpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoTWFr
ZXNDYWxscyk7CiAKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKEFjY2Vzc29yIHwgUmVh
ZE9ubHkpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOwotICAgICAgICAgICAgaWYgKHNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBuZWVkIHRoZSBQdXRCeUlkIHNsb3cgcGF0aCB0byB2ZXJpZnkgdGhhdCB3ZSdyZSBzdG9y
aW5nIHRoZSByaWdodCB2YWx1ZSBpbnRvCi0gICAgICAgICAgICAgICAgLy8gdGhlIHNwZWNpYWxp
emVkIHNsb3QuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHJlcGxh
Y2VTZXQgPSBzdHJ1Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNl
dCk7CisgICAgICAgICAgICBpZiAoIXJlcGxhY2VTZXQgfHwgcmVwbGFjZVNldC0+aXNTdGlsbFZh
bGlkKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXaGVuIHRoaXMgZXhlY3V0ZXMsIGl0J2xsIGNy
ZWF0ZSwgYW5kIGZpcmUsIHRoaXMgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAgICAg
ICAgICAgICAgLy8gVGhhdCBtZWFucyB0aGF0ICB0aGlzIGhhcyBwcm9iYWJseSBuZXZlciBleGVj
dXRlZCBvciB0aGF0IHNvbWV0aGluZyBmaXNoeSBpcworICAgICAgICAgICAgICAgIC8vIGdvaW5n
IG9uLiBBbHNvLCB3ZSBjYW5ub3QgY3JlYXRlIG9yIGZpcmUgdGhlIHdhdGNocG9pbnQgc2V0IGZy
b20gdGhlIGNvbmN1cnJlbnQKKyAgICAgICAgICAgICAgICAvLyBKSVQgdGhyZWFkLCBzbyBldmVu
IGlmIHdlIHdhbnRlZCB0byBkbyB0aGlzLCB3ZSdkIG5lZWQgdG8gaGF2ZSBhIGxhenkgdGhpbmd5
LgorICAgICAgICAgICAgICAgIC8vIFNvLCBiZXR0ZXIgbGVhdmUgdGhpcyBhbG9uZSBhbmQgdGFr
ZSBzbG93IHBhdGguCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
cmVzdWx0LmFwcGVuZFZhcmlhbnQoUHV0QnlJZFZhcmlhbnQ6OnJlcGxhY2Uoc3RydWN0dXJlLCBv
ZmZzZXQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzg0LDIyICszODksOSBAQCBQdXRCeUlk
U3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgIH0KICAgICAKICAgICAg
ICAgLy8gV2Ugb25seSBvcHRpbWl6ZSBpZiB0aGVyZSBpcyBhbHJlYWR5IGEgc3RydWN0dXJlIHRo
YXQgdGhlIHRyYW5zaXRpb24gaXMgY2FjaGVkIHRvLgotICAgICAgICAvLyBBbW9uZyBvdGhlciB0
aGluZ3MsIHRoaXMgYWxsb3dzIHVzIHRvIGd1YXJkIGFnYWluc3QgYSB0cmFuc2l0aW9uIHdpdGgg
YSBzcGVjaWZpYwotICAgICAgICAvLyB2YWx1ZS4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gLSBJ
ZiB3ZSdyZSBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBiZSBzcGVjaWZpYzogdGhpcyB3b3Vs
ZCBvbmx5IGJlIGEgcHJvYmxlbSBpZgotICAgICAgICAvLyAgIHRoZSBleGlzdGluZyB0cmFuc2l0
aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUgYWxyZWFkeSwgc2luY2UgaWYgaXQgZGlkbid0
LAotICAgICAgICAvLyAgIHRoZW4gd2Ugd291bGQgYmVoYXZlICJhcyBpZiIgd2Ugd2VyZSBub3Qg
c3RvcmluZyBhIHNwZWNpZmljIHZhbHVlLiBJZiBpdCBkaWQKLSAgICAgICAgLy8gICBoYXZlIGEg
c3BlY2lmaWMgdmFsdWUsIHRoZW4gd2UnbGwga25vdyAtIHRoZSBmYWN0IHRoYXQgd2UgcGFzcyAw
IGZvcgotICAgICAgICAvLyAgIHNwZWNpZmljVmFsdWUgd2lsbCB0ZWxsIHVzLgotICAgICAgICAv
LwotICAgICAgICAvLyAtIElmIHdlJ3JlIG5vdCBzdG9yaW5nIGEgdmFsdWUgdGhhdCBjb3VsZCBi
ZSBzcGVjaWZpYzogYWdhaW4sIHRoaXMgd291bGQgb25seSBiZSBhCi0gICAgICAgIC8vICAgcHJv
YmxlbSBpZiB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNwZWNpZmljIHZhbHVl
LCB3aGljaCB3ZSBjaGVjayBmb3IKLSAgICAgICAgLy8gICBieSBwYXNzaW5nIDAgZm9yIHRoZSBz
cGVjaWZpY1ZhbHVlLgotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3Ry
dWN0dXJlLCB1aWQsIDAsIDAsIG9mZnNldCk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNv
bmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgb2Zmc2V0KTsKICAgICAgICAgaWYgKCF0cmFu
c2l0aW9uKQotICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7
IC8vIFRoaXMgb2NjdXJzIGluIGJpemFycmUgY2FzZXMgb25seS4gU2VlIGFib3ZlLgotICAgICAg
ICBBU1NFUlQoIXRyYW5zaXRpb24tPnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgp
KTsKKyAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAg
ICAgICBBU1NFUlQoaXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAKICAgICAgICAgYm9vbCBk
aWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTcwNzI0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNiBAQCBQdXRCeUlkVmFyaWFudCYgUHV0QnlJZFZh
cmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9uZXdTdHJ1Y3R1cmUgPSBvdGhlci5tX25ld1N0cnVjdHVy
ZTsKICAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFudENoZWNrczsKICAgICBt
X2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7Ci0gICAgbV9zcGVjaWZpY1Zh
bHVlID0gb3RoZXIubV9zcGVjaWZpY1ZhbHVlOwogICAgIG1fb2Zmc2V0ID0gb3RoZXIubV9vZmZz
ZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAgIG1fY2FsbExpbmtT
dGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3RoZXIubV9jYWxsTGlu
a1N0YXR1cyk7CkBAIC03OCw3ICs3Nyw3IEBAIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50
Ojp0cmFuc2l0aW8KIH0KIAogUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigK
LSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1
cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKICAgICBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKIHsK
ICAgICBQdXRCeUlkVmFyaWFudCByZXN1bHQ7CkBAIC04OSw3ICs4OCw2IEBAIFB1dEJ5SWRWYXJp
YW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCiAgICAgICAgIHJlc3VsdC5tX2FsdGVybmF0ZUJh
c2UgPSBjaGFpbi0+dGVybWluYWxQcm90b3R5cGUoKTsKICAgICB9CiAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gb2Zmc2V0OwotICAgIHJlc3VsdC5tX3NwZWNpZmljVmFsdWUgPSBzcGVjaWZpY1ZhbHVl
OwogICAgIHJlc3VsdC5tX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVz
KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjI5LDggKzIyNyw2IEBAIHZvaWQgUHV0QnlJ
ZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgICAgIGxpc3REdW1wSW5Db250
ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRl
cm5hdGVCYXNlKQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBp
bkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7Ci0gICAgICAgIGlm
IChtX3NwZWNpZmljVmFsdWUpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgc3BlY2lmaWNWYWx1
ZSA9ICIsIGluQ29udGV4dChtX3NwZWNpZmljVmFsdWUsIGNvbnRleHQpKTsKICAgICAgICAgb3V0
LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICAgICAgb3V0LnByaW50KCIsIGNh
bGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CiAgICAgICAgIG91dC5wcmludCgiPiIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRl
cigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cyk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CkBAIC0xMTcsMTIgKzExNyw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYWx0ZXJu
YXRlQmFzZTsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJu
IG1fc3BlY2lmaWNWYWx1ZTsKLSAgICB9Ci0gICAgCiAgICAgQ2FsbExpbmtTdGF0dXMqIGNhbGxM
aW5rU3RhdHVzKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVy
KTsKQEAgLTE0Miw3ICsxMzYsNiBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZSogbV9uZXdTdHJ1
Y3R1cmU7CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tz
OwogICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmlj
VmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE3MDcyNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDYgQEAgdm9pZCBXYXRjaHBvaW50U2V0OjphZGQoV2F0Y2hw
b2ludCogd2F0YwogICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CiB9CiAKLXZvaWQgV2F0Y2hwb2lu
dFNldDo6ZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCi17Ci0gICAgZmlyZUFsbChTdHJpbmdG
aXJlRGV0YWlsKHJlYXNvbikpOwotfQotCiB2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93
KGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBBU1NFUlQoc3RhdGUoKSA9PSBJc1dh
dGNoZWQpOwpAQCAtODUsNiArODAsMTEgQEAgdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xv
dyhjb25zdCBGaQogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiB9CiAKK3ZvaWQgV2F0Y2hw
b2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGZpcmVBbGxT
bG93KFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Cit9CisKIHZvaWQgV2F0Y2hwb2ludFNldDo6
ZmlyZUFsbFdhdGNocG9pbnRzKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICB3aGls
ZSAoIW1fc2V0LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDEyICsxMzEs
MTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25zdCBGaXJlRGV0YWlsJiBk
ZXRhaWwpCiAgICAgewotICAgICAgICBpZiAoc3RhdGUoKSAhPSBJc1dhdGNoZWQpCisgICAgICAg
IGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBmaXJlQWxsU2xvdyhkZXRhaWwpOwogICAgIH0KICAgICAKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29uKTsKKyAgICB2b2lkIGZpcmVB
bGwoY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgp
ICE9IElzV2F0Y2hlZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZpcmVBbGxTbG93
KHJlYXNvbik7CisgICAgfQogICAgIAogICAgIHZvaWQgdG91Y2goY29uc3QgRmlyZURldGFpbCYg
ZGV0YWlsKQogICAgIHsKQEAgLTE1Nyw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgaW50OF90KiBh
ZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAg
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coY29uc3QgRmlyZURldGFp
bCYpOyAvLyBDYWxsIG9ubHkgaWYgeW91J3ZlIGNoZWNrZWQgaXNXYXRjaGVkLgorICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coY29uc3QgY2hhciogcmVhc29uKTsgLy8gRGl0
dG8uCiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgZmlyZUFsbFdhdGNocG9pbnRzKGNvbnN0IEZp
cmVEZXRhaWwmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDcyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJh
Y3RJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKKyNpbmNsdWRlICJH
ZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUHV0QnlJ
ZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMTM4NywxNCArMTM4OCwx
NyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAg
ICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwogICAgICAgICAgICAgICAgIEFic3RyYWN0
VmFsdWUgcmVzdWx0OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXR1cy5u
dW1WYXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RhdHVzW2ld
LnNwZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJUKG1fZ3Jh
cGgsIG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUubV92YWx1ZSwgc3RhdHVzW2ldLm9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwogICAgICAg
ICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
Z3JhcGgsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgpKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3Vs
dCksCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTE1NjksMTEgKzE1NzMsMjcgQEAgYm9vbCBBYnN0cmFjdEludGVy
cHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRCeU9m
ZnNldDogeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBkYXRhID0gbV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgICAgICAg
ICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV92YWx1ZSwgZGF0YS5vZmZzZXQpOworICAgICAg
ICBpZiAocmVzdWx0KSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5m
cmVlemUocmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgZm9yTm9kZShub2RlKS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAg
ICAgU3RvcmFnZUFjY2Vzc0RhdGEgZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLm1fdmFsdWUsIGRhdGEub2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAm
JiBqc0R5bmFtaWNDYXN0PEdldHRlclNldHRlcio+KHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHNl
dENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dy
YXBoLCBtX2dyYXBoLm1fdm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQpAQCAtMTYwMiwxNCArMTYyMiwyMiBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsK
LSAgICAgICAgICAgIGlmICghdmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKKyAgICAgICAgICAgIGlmICh2YXJp
YW50LmFsdGVybmF0ZUJhc2UoKSkKKyAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlh
bnQuYWx0ZXJuYXRlQmFzZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJh
c2VGb3JMb2FkID0gYmFzZS5tX3ZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJl
c3VsdCA9CisgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJh
c2VGb3JMb2FkLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGlmICghY29uc3RhbnRS
ZXN1bHQpIHsKICAgICAgICAgICAgICAgICByZXN1bHQubWFrZUhlYXBUb3AoKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEFic3RyYWN0VmFs
dWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0KAogICAgICAgICAgICAg
ICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKHZhcmlhbnQuc3Bl
Y2lmaWNWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRS
ZXN1bHQpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkp
OwogICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNSZXN1bHQpOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NzgsNiArMTY3OCwxMyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAKIE5vZGUqIEJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNl
LCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVU
eXBlIG9wKQogeworICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChK
U1ZhbHVlIGNvbnN0YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFz
SlNWYWx1ZSgpLCBvZmZzZXQpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJh
c2UpOworICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKICAgICBOb2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlz
SW5saW5lT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBA
IC0xNzcyLDIxICsxNzc5LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQo
CiAgICAgLy8gVW5sZXNzIHdlIHdhbnQgYnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODc4Mywgd2UgbmVlZCB0bwogICAgIC8vIGVuc3VyZSB0aGF0IHRo
ZSBiYXNlIG9mIHRoZSBvcmlnaW5hbCBnZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdy
ZSBkb25lIHdpdGgKICAgICAvLyBhbGwgb2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25seSBpbnNl
cnQgdGhlIFBoYW50b20gaWYgdGhlcmUgaGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQotICAgIC8v
IG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1
Y3R1cmUgb24gYmFzZSwgb3IgaWYgdGhlCi0gICAgLy8gYWNjZXNzIHdhcyBjb21waWxlZCB0byBh
IFdlYWtKU0NvbnN0YW50IHNwZWNpZmljIHZhbHVlLCBpbiB3aGljaCBjYXNlIHdlIG1pZ2h0IG5v
dAotICAgIC8vIGhhdmUgYW55IGV4cGxpY2l0IHVzZSBvZiB0aGUgYmFzZSBhdCBhbGwuCi0gICAg
aWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpIHx8IG9yaWdpbmFsQmFzZSAhPSBiYXNlKQorICAg
IC8vIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tT
dHJ1Y3R1cmUgb24gYmFzZS4KKyAgICBpZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCiAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgb3JpZ2luYWxCYXNlKTsKICAgICAKLSAgICBOb2RlKiBsb2Fk
ZWRWYWx1ZTsKLSAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIGxvYWRl
ZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwotICAgIGVs
c2UgewotICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAg
ICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24s
Ci0gICAgICAgICAgICBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAot
ICAgICAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlP
ZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0gICAgfQorICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFu
ZGxlR2V0QnlPZmZzZXQoCisgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWND
ZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAorICAgICAgICBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2
YXJpYW50Lm9mZnNldCgpLAorICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRH
ZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKICAgICAKICAgICBpZiAoIXZhcmlh
bnQuY2FsbExpbmtTdGF0dXMoKSkgewogICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3Rp
bmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsKQEAgLTE5NDksMTQgKzE5NDksOCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICBpZiAodmFyaWFudC5hbHRl
cm5hdGVCYXNlKCkpCiAgICAgICAgICAgICBiYXNlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5h
bHRlcm5hdGVCYXNlKCkpOwogICAgICAgICAKLSAgICAgICAgTm9kZSogbG9hZGVkVmFsdWU7Ci0g
ICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAgIGxvYWRlZFZh
bHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAg
ICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFu
dC5vZmZzZXQoKSwKLSAgICAgICAgICAgICAgICBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7Ci0g
ICAgICAgIH0KKyAgICAgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgK
KyAgICAgICAgICAgIFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCksIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKICAgICAgICAgCiAgICAgICAg
IE5vZGUqIHNldHRlciA9IGFkZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CiAgICAg
ICAgIApAQCAtMjk1OCwxMCArMjk1Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFz
ZSA9IGNlbGxDb25zdGFudFdpdGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1sw
XS5zdHJ1Y3R1cmVTZXQoKS5vbmx5U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUo
KSkKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlND
b25zdGFudChzcGVjaWZpY1ZhbHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5
T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKKyAg
ICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5T2Zmc2V0
KHByZWRpY3Rpb24sIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgpAQCAtMjk2OSwxNiArMjk2MCwxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAg
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9p
bnRTZXQoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPQorICAgICAg
ICAgICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgIHdh
dGNocG9pbnRTZXQgPyB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFpbmZlcnJlZFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVy
YW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKLSAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNp
ZmljVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdl
YWtKU0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3LDggKzQwNywxMyBAQCBw
cml2YXRlOgogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VW
YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29u
c3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKKyAg
ICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKKyAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlVmFsdWUubV92
YWx1ZTsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50
UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQub2Zmc2V0KCkpKSB7CisgICAgICAgICAgICBt
X2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyODYsMjIgKzEyODYsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKFN0cnVj
dHVyZSogc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgYm9v
bCBpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoSlNPYmplY3QqIHN0cmluZ1Byb3RvdHlwZSwg
U3RyaW5nSW1wbCogdWlkKQogICAgIHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBz
dHJpbmdQcm90b3R5cGUtPnN0cnVjdHVyZSgpOworICAgICAgICAKICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlc1VudXNlZDsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSgKLSAgICAgICAgICAgIHZtKCksIHVpZCwgYXR0cmlidXRlc1VudXNlZCwgc3Bl
Y2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHZtKCksIHVpZCwgYXR0cmlidXRlc1VudXNlZCk7CiAgICAgICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAKLSAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlKQorICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KHN0cmluZ1Byb3RvdHlwZSwgb2Zmc2V0
KTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCi0gICAgICAgIGlmICghc3BlY2lmaWNWYWx1ZS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5m
bygpKSkKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVu
Y3Rpb24qPih2YWx1ZSk7CisgICAgICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmIChmdW5jdGlvbi0+ZXhl
Y3V0YWJsZSgpLT5pbnRyaW5zaWNGb3IoQ29kZUZvckNhbGwpICE9IFN0cmluZ1Byb3RvdHlwZVZh
bHVlT2ZJbnRyaW5zaWMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAt
MTMzMCw5ICsxMzMxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gKHRoYXQgd291bGQgY2FsbCB0
b1N0cmluZygpKS4gV2UgZG9uJ3Qgd2FudCB0aGUgREZHIHRvIGhhdmUgdG8gZGlzdGluZ3Vpc2gK
ICAgICAgICAgLy8gYmV0d2VlbiB0aGUgdHdvLCBqdXN0IGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtl
IGl0IHdvdWxkIGdldCBjb25mdXNpbmcuIFNvIHdlCiAgICAgICAgIC8vIGp1c3QgcmVxdWlyZSBi
b3RoIG1ldGhvZHMgdG8gYmUgc2FuZS4KLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1l
dGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnZh
bHVlT2YuaW1wbCgpKSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUo
c3RyaW5nUHJvdG90eXBlT2JqZWN0LCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgp
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3Rv
dHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFt
ZXMtPnRvU3RyaW5nLmltcGwoKSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRo
b2RTYW5lKHN0cmluZ1Byb3RvdHlwZU9iamVjdCwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmlu
Zy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAg
cmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAko
cmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSw2ICs3ODksMjYgQEAgdW5zaWduZWQgR3JhcGg6OnJl
cXVpcmVkUmVnaXN0ZXJDb3VudEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJlZ2lzdGVy
Q291bnQoKSwgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAorSlNWYWx1ZSBH
cmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVlIGJhc2UsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCkKK3sKKyAgICBpZiAoIWJhc2UgfHwgIWJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3Qo
YmFzZSk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBvYmplY3QtPnN0cnVjdHVyZSgpOwor
ICAgIAorICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNl
bWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICBpZiAoIXNldCB8fCAhc2V0LT5pc1N0aWxs
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgIEFTU0VSVCghc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICAKKyAgICB3YXRjaHBvaW50cygpLmFkZExh
emlseShzZXQpOworICAgIAorICAgIHJldHVybiBvYmplY3QtPmdldERpcmVjdChvZmZzZXQpOwor
fQorCiBKU0FjdGl2YXRpb24qIEdyYXBoOjp0cnlHZXRBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7
CiAgICAgcmV0dXJuIG5vZGUtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsK
QEAgLTkwMCw3ICs5MjAsNiBAQCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2CiAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5z
aXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlh
bnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAg
ICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50
LnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykKICAgICAgICAgICAgICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc5
LDYgKzY3OSw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRG
b3JFeGl0KCk7CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhlY3V0aW9u
QW5kRXhpdCgpOwogICAgIAorICAgIEpTVmFsdWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1Zh
bHVlIGJhc2UsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCk7CisgICAgCiAgICAgSlNBY3RpdmF0aW9u
KiB0cnlHZXRBY3RpdmF0aW9uKE5vZGUqKTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+
KiB0cnlHZXRSZWdpc3RlcnMoTm9kZSopOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Niw3ICs4Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE11bHRpR2V0
QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11
bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlP
ZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnlXYXRj
aChtX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSktPnN0cnVjdHVyZSgpKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3RydWN0dXJlU2V0KCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3YXRjaCBhbnl0aGlu
ZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVjdHVyZSdz
LiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjM0LDggKzMyMzQsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFyaWFudHNbaV07CiAgICAgICAgICAg
ICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgp
KQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSk7CisgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0
YW50UmVzdWx0OworICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKSB7Cisg
ICAgICAgICAgICAgICAgY29uc3RhbnRSZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJv
cGVydHkoCisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpLCB2YXJp
YW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjb25zdGFudFJl
c3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6
OmVuY29kZShjb25zdGFudFJlc3VsdCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICAgICAgTFZhbHVlIHByb3BlcnR5QmFzZTsKICAgICAgICAgICAgICAgICBpZiAodmFyaWFudC5h
bHRlcm5hdGVCYXNlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2OTgsOSArMTY5OCwxMyBA
QCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdlCiAgICAgLy8gQ292ZXJz
IGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJz
dCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRp
bWUuCiAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9
PSBzY29wZSAmJiBzY29wZS0+c3RydWN0dXJlKHZtKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKSB7CiAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVy
dHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUodm0pKTsK
LSAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAg
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHNjb3BlLT5zdHJ1Y3R1cmUodm0pOworICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNv
ZGVCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQo
ZXhlYy0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAg
ICAgICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlG
b3JSZXBsYWNlbWVudHModm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xNzMwLDE0ICsxNzM0LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dFRvU2NvcGUoRQogICAgIGlmIChleGVjLT52bSgpLmV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24ndCBl
eGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBjYWNo
ZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KLSAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEds
b2JhbFByb3BlcnR5IHx8IG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVQdXQoKSAm
JiBzbG90LmJhc2UoKSA9PSBzY29wZSAmJiBzY29wZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNj
ZXNzZXNBcmVDYWNoZWFibGUoKSkgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIENvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVQdXRU
b1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVCbG9jaywgcGMsIHNjb3BlLCBtb2RlQW5kVHlwZSwgc2xv
dCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvdyhFeGVjU3RhdGUqIGV4
ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRFeGNlcHRpb25WYWx1ZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsMTIgKzk2
LDE0IEBAIHN0YXRpYyB2b2lkIHJlcGF0Y2hDYWxsKENvZGVCbG9jayogY29kZWIKICAgICByZXBh
dGNoQ2FsbChyZXBhdGNoQnVmZmVyLCBjYWxsLCBuZXdDYWxsZWVGdW5jdGlvbik7CiB9CiAKLXN0
YXRpYyB2b2lkIHJlcGF0Y2hCeUlkU2VsZkFjY2VzcyhWTSYgdm0sIENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwKLSAg
ICBjb25zdCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwgYm9vbCBjb21wYWN0KQorc3Rh
dGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKAorICAgIFZNJiB2bSwgQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsCisgICAgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQsIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLAorICAgIGJvb2wgY29t
cGFjdCkKIHsKICAgICBpZiAoc3RydWN0dXJlLT50eXBlSW5mbygpLm5ld0ltcHVyZVByb3BlcnR5
RmlyZXNXYXRjaHBvaW50cygpKQogICAgICAgICB2bS5yZWdpc3RlcldhdGNocG9pbnRGb3JJbXB1
cmVQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHN0dWJJbmZvLmFkZFdhdGNocG9pbnQoY29kZUJsb2Nr
KSk7Ci0KKyAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
IAogICAgIC8vIE9ubHkgb3B0aW1pemUgb25jZSEKQEAgLTM0Myw4ICszNDUsMTEgQEAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVCeUlkU3R1YigKICAgICAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMsIHNj
cmF0Y2hHUFIpOwogICAgICAgICAgICAgY3VyclN0cnVjdHVyZSA9IGl0LT5nZXQoKTsKICAgICAg
ICAgfQorICAgICAgICBBU1NFUlQocHJvdG9PYmplY3QtPnN0cnVjdHVyZSgpID09IGN1cnJTdHJ1
Y3R1cmUpOwogICAgIH0KICAgICAKKyAgICBjdXJyU3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJv
cGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBvZmZzZXQpOworICAgIAogICAgIEdQUlJlZyBiYXNl
Rm9yQWNjZXNzR1BSOwogICAgIGlmIChjaGFpbikgewogICAgICAgICBzdHViSml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocHJvdG9PYmplY3QpLCBzY3JhdGNoR1BSKTsKQEAg
LTY5Myw5ICs2OTgsMTAgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSog
ZQogICAgIGlmIChzbG90LnNsb3RCYXNlKCkgPT0gYmFzZVZhbHVlCiAgICAgICAgICYmIHNsb3Qu
aXNDYWNoZWFibGVWYWx1ZSgpCiAgICAgICAgICYmIE1hY3JvQXNzZW1ibGVyOjppc0NvbXBhY3RQ
dHJBbGlnbmVkQWRkcmVzc09mZnNldChtYXhPZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uo
c2xvdC5jYWNoZWRPZmZzZXQoKSkpKSB7Ci0gICAgICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nl
c3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7Ci0gICAg
ICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKCp2bSwgc2xv
dC5jYWNoZWRPZmZzZXQoKSk7CisgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNv
ZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKKyAgICAgICAgc3R1Yklu
Zm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgcmVwYXRjaENhbGwo
Y29kZUJsb2NrLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRC
dWlsZExpc3QpOwpAQCAtMTE3OCw2ICsxMTg0LDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRC
eUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjppc1B0ckFsaWdu
ZWRBZGRyZXNzT2Zmc2V0KG9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hl
ZE9mZnNldCgpKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICAgICAgc3RydWN0
dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5m
bywgc3RydWN0dXJlLCBpZGVudCwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgYXBwcm9wcmlhdGVMaXN0
QnVpbGRpbmdQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCksIGZhbHNlKTsKICAgICAgICAg
c3R1YkluZm8uaW5pdFB1dEJ5SWRSZXBsYWNlKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMjk1LDYgKzEzMDIs
OCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZFB1dEJ5SWRMaXN0KEV4ZWNTdGF0CiAgICAgICAgICAg
ICBpZiAobGlzdC0+aXNGdWxsKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBX
aWxsIGdldCBoZXJlIGR1ZSB0byByZWN1cnNpb24uCiAgICAgICAgICAgICAKKyAgICAgICAgICAg
IHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFdlJ3JlIG5vdyBjb21taXR0
ZWQgdG8gY3JlYXRpbmcgdGhlIHN0dWIuIE1vZ3JpZnkgdGhlIG1ldGEtZGF0YSBhY2NvcmRpbmds
eS4KICAgICAgICAgICAgIGVtaXRQdXRSZXBsYWNlU3R1YigKICAgICAgICAgICAgICAgICBleGVj
LCBiYXNlVmFsdWUsIHByb3BlcnR5TmFtZSwgc2xvdCwgc3R1YkluZm8sIHB1dEtpbmQsCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5Myw2ICs2OTMsNyBAQCBMTElOVF9TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfcHV0X2J5X2lkCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cnVj
dHVyZS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgICAgICAgICBwY1s0XS51LnN0cnVjdHVyZS5zZXQoCiAgICAgICAgICAgICAg
ICAgICAgIHZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAg
ICAgICAgICAgICAgIGlmIChpc0lubGluZU9mZnNldChzbG90LmNhY2hlZE9mZnNldCgpKSkgewpA
QCAtMTQyNiw5ICsxNDI3LDEzIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9nZXRf
ZnJvbV8KICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgJiYgc2xvdC5zbG90QmFzZSgp
ID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hl
YWJsZSgpKSB7CiAgICAgICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVy
dHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcykgewogICAgICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9j
ay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgp
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOwotICAg
ICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVj
LT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTE0NDgsMTUgKzE0NTMsOCBAQCBzdGF0aWMgSlNPYmplY3QqIHB1dFRvU2NvcGVDb21tb24o
RXhlY1N0CiAKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChzY29wZSwgY29kZUJsb2NrLT5pc1N0
cmljdE1vZGUoKSk7CiAgICAgc2NvcGUtPm1ldGhvZFRhYmxlKCktPnB1dChzY29wZSwgZXhlYywg
aWRlbnQsIHZhbHVlLCBzbG90KTsKLQotICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBT
aW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0
IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgotICAgIGlmIChtb2RlQW5k
VHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBpZiAoc2xvdC5p
c0NhY2hlYWJsZVB1dCgpICYmIHNsb3QuYmFzZSgpID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1
cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7Ci0gICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBw
Y1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9
IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgCisgICAgQ29tbW9u
U2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywg
c2NvcGUsIG1vZGVBbmRUeXBlLCBzbG90KTsKIAogICAgIHJldHVybiBudWxscHRyOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJ
KHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5MywzMyBAQCBpbmxpbmUgYm9v
bCBvcEluKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1CiAgICAgcmV0dXJuIGJhc2VPYmotPmhhc1By
b3BlcnR5KGV4ZWMsIHByb3BlcnR5KTsKIH0KIAoraW5saW5lIHZvaWQgdHJ5Q2FjaGVQdXRUb1Nj
b3BlR2xvYmFsKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIElu
c3RydWN0aW9uKiBwYywgSlNPYmplY3QqIHNjb3BlLAorICAgIFJlc29sdmVNb2RlQW5kVHlwZSBt
b2RlQW5kVHlwZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQoreworICAgIC8vIENvdmVycyBpbXBs
aWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhl
Y3V0ZSwgd2UgZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgor
ICAgIAorICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgIT0gR2xvYmFsUHJvcGVydHkgJiYgbW9k
ZUFuZFR5cGUudHlwZSgpICE9IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghc2xvdC5pc0NhY2hlYWJsZVB1dCgpCisg
ICAgICAgIHx8IHNsb3QuYmFzZSgpICE9IHNjb3BlCisgICAgICAgIHx8ICFzY29wZS0+c3RydWN0
dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChzbG90LnR5cGUoKSA9PSBQdXRQcm9wZXJ0eVNsb3Q6Ok5ld1Byb3BlcnR5
KSB7CisgICAgICAgIC8vIERvbid0IGNhY2hlIGlmIHdlJ3ZlIGRvbmUgYSB0cmFuc2l0aW9uLiBX
ZSB3YW50IHRvIGRldGVjdCB0aGUgZmlyc3QgcmVwbGFjZSBzbyB0aGF0IHdlCisgICAgICAgIC8v
IGNhbiBpbnZhbGlkYXRlIHRoZSB3YXRjaHBvaW50LgorICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIHNjb3BlLT5zdHJ1Y3R1cmUoKS0+ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50
KGV4ZWMtPnZtKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworCisgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgIHBjWzVdLnUuc3RydWN0dXJlLnNl
dChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0
dXJlKCkpOworICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIENvbW1vblNsb3dQYXRocwogCiBjbGFzcyBFeGVjU3RhdGU7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0
cnVjdHVyZUNoYWluLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNyw4ICsxMDcsNyBAQCBib29sIEludGVuZGVkU3RydWN0dXJlQ2hhaW46Om1heUludGVyY2Vw
CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmVjdG9yLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbV92ZWN0b3JbaV0tPmdldENv
bmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gbV92ZWN0b3JbaV0tPmdldENvbmN1cnJlbnRseSh2bSwg
dWlkLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoUmVhZE9ubHkg
fCBBY2Nlc3NvcikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NK
U1ZhbHVlLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw4ICsxMzksNyBAQCB2
b2lkIEpTVmFsdWU6OnB1dFRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogCiAKICAgICBmb3IgKDsgOyBv
YmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7
Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmot
PnN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAg
IGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBSZWFkT25seSkgewogICAgICAgICAgICAgICAgIGlmIChzbG90LmlzU3RyaWN0TW9kZSgp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODIsNyArMjgyLDcgQEAg
dm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIG1fZnVuY3Rpb25Q
cm90b3R5cGUuc2V0KHZtLCB0aGlzLCBGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlKHZtLCBGdW5j
dGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBqc051bGwoKSkpKTsgLy8g
VGhlIHJlYWwgcHJvdG90eXBlIHdpbGwgYmUgc2V0IG9uY2UgT2JqZWN0UHJvdG90eXBlIGlzIGNy
ZWF0ZWQuCiAgICAgbV9mdW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTRnVuY3Rpb246
OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwog
ICAgIG1fYm91bmRGdW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEpTQm91bmRGdW5jdGlv
bjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7
Ci0gICAgbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIHZtLnBy
b3BlcnR5TmFtZXMtPm5hbWUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCAwLCBt
X2Z1bmN0aW9uTmFtZU9mZnNldCkpOworICAgIG1fbmFtZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQo
dm0sIHRoaXMsIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBtX2Z1bmN0aW9u
U3RydWN0dXJlLmdldCgpLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1lLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkgfCBEb250RW51bSwgbV9mdW5jdGlvbk5hbWVPZmZzZXQpKTsKICAgICBtX2ludGVybmFs
RnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBJbnRlcm5hbEZ1bmN0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICBKU0Z1
bmN0aW9uKiBjYWxsRnVuY3Rpb24gPSAwOwogICAgIEpTRnVuY3Rpb24qIGFwcGx5RnVuY3Rpb24g
PSAwOwpAQCAtNDI5LDggKzQyOSw4IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFs
dWUgcHJvdG8KICAgICBQcm90b3R5cGVNYXAmIHByb3RvdHlwZU1hcCA9IHZtLnByb3RvdHlwZU1h
cDsKICAgICBTdHJ1Y3R1cmUqIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gcHJvdG90eXBlTWFw
LmVtcHR5T2JqZWN0U3RydWN0dXJlRm9yUHJvdG90eXBlKG1fb2JqZWN0UHJvdG90eXBlLmdldCgp
LCBKU0ZpbmFsT2JqZWN0OjpkZWZhdWx0SW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0OwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5kb25lLCAwLCAwLCBvZmZzZXQpOwotICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0
dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0
U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgMCwgMCwgb2Zmc2V0KTsKKyAgICBp
dGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+ZG9uZSwgMCwg
b2Zmc2V0KTsKKyAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlO
YW1lcy0+dmFsdWUsIDAsIG9mZnNldCk7CiAgICAgbV9pdGVyYXRvclJlc3VsdFN0cnVjdHVyZS5z
ZXQodm0sIHRoaXMsIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlKTsKIAogICAgIG1fZXZhbEZ1bmN0
aW9uLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCB0aGlzLCAxLCB2bS5wcm9w
ZXJ0eU5hbWVzLT5ldmFsLnN0cmluZygpLCBnbG9iYWxGdW5jRXZhbCkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMTcwNzI0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5
LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgRXJpYyBTZWlkZWwgKGVyaWNAd2Via2l0Lm9yZykKICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgpAQCAtNTUsMTUgKzU1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAvLyBBcnJheUNvbnZlbnRp
b25zLmguCiBzdGF0aWMgdW5zaWduZWQgbGFzdEFycmF5U2l6ZSA9IDA7CiAKLUpTQ2VsbCogZ2V0
Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCogY2VsbCkKLXsKLSAgICBpZiAoY2VsbC0+dHlwZSgp
ID09IEpTRnVuY3Rpb25UeXBlKQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICBpZiAoY2VsbC0+
c3RydWN0dXJlKCktPmNsYXNzSW5mbygpLT5pc1N1YkNsYXNzT2YoSW50ZXJuYWxGdW5jdGlvbjo6
aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIGNlbGw7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIFNUQVRJ
Q19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU09iamVjdCk7CiBTVEFUSUNfQVNT
RVJUX0lTX1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNGaW5hbE9iamVjdCk7CiAKQEAgLTM2MCw3
ICszNTEsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAg
ICAgICAgICBwcm90b3R5cGUgPSBvYmotPnByb3RvdHlwZSgpOwogICAgICAgICAgICAgaWYgKHBy
b3RvdHlwZS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCghdGhpc09iamVjdC0+
c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZt
KCksIHByb3BlcnR5TmFtZSkpOwotICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0
RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNs
b3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICBpZiAoIXRoaXNP
YmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCAwLCBzbG90KQogICAgICAgICAgICAgICAgICAgICAmJiBzbG90LmlzU3RyaWN0TW9kZSgp
KQogICAgICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwo
U3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMzcxLDggKzM2Miw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNl
bGwsIEV4ZWNTdGEKICAgICBKU09iamVjdCogb2JqOwogICAgIGZvciAob2JqID0gdGhpc09iamVj
dDsgOyBvYmogPSBhc09iamVjdChwcm90b3R5cGUpKSB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG9iai0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAgICAgICAgICAgICBpZiAo
YXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHRoaXNPYmpl
Y3QtPnN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVj
LT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKQEAgLTQwNyw3ICsz
OTcsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAgfQog
ICAgIAogICAgIEFTU0VSVCghdGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hh
aW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09
IHRoaXNPYmplY3QpOwotICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0
TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxlT2Jq
ZWN0KHZhbHVlKSkgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKKyAgICBpZiAoIXRoaXNPYmplY3Qt
PnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAw
LCBzbG90KSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQogICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKSk7
CiAgICAgcmV0dXJuOwogfQpAQCAtMTIyNyw3ICsxMjE3LDcgQEAgdm9pZCBKU09iamVjdDo6cHV0
RGlyZWN0QWNjZXNzb3IoRXhlY1N0YQogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0Tm9uSW5kZXhB
Y2Nlc3NvcihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QodGhpcyk7
Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFs
dWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90KTsKIAogICAgIC8vIHB1dERp
cmVjdCB3aWxsIGNoYW5nZSBvdXIgU3RydWN0dXJlIGlmIHdlIGFkZCBhIG5ldyBwcm9wZXJ0eS4g
Rm9yCiAgICAgLy8gZ2V0dGVycyBhbmQgc2V0dGVycywgdGhvdWdoLCB3ZSBhbHNvIG5lZWQgdG8g
Y2hhbmdlIG91ciBTdHJ1Y3R1cmUKQEAgLTEyNjcsOSArMTI1Nyw4IEBAIGJvb2wgSlNPYmplY3Q6
OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2UKICAgICAgICAgdGhpc09iamVjdC0+cmVpZnlTdGF0
aWNGdW5jdGlvbnNGb3JEZWxldGUoZXhlYyk7CiAKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwot
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAg
IGlmIChpc1ZhbGlkT2Zmc2V0KHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkpIHsKKyAgICBpZiAoaXNWYWxp
ZE9mZnNldCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcykpKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgRG9udERlbGV0ZSAmJiAh
dm0uaXNJbkRlZmluZU93blByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIHRoaXNPYmplY3QtPnJlbW92ZURpcmVjdCh2bSwgcHJvcGVydHlOYW1lKTsKQEAgLTEz
NTMsNyArMTM0Miw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5QnlJbmRleChKU0MK
IAogc3RhdGljIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24o
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKU09iamVjdCogb2JqZWN0LCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQogewotICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldChleGVjLCBw
cm9wZXJ0eU5hbWUpOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBvYmplY3QtPmdldEFuZFdhdGNo
KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgICAgQ2FsbERhdGEgY2FsbERhdGE7CiAgICAgQ2FsbFR5
cGUgY2FsbFR5cGUgPSBnZXRDYWxsRGF0YShmdW5jdGlvbiwgY2FsbERhdGEpOwogICAgIGlmIChj
YWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCkBAIC0xNDQ2LDIwICsxNDM1LDYgQEAgYm9vbCBKU09i
amVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkgY29uc3QK
LXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0g
ICAgaWYgKGlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICAvLyBUaGlzIGNvdWxkIGJlIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBzdGF0aWMgdGFibGU/IC0g
c2hvdWxkIHByb2JhYmx5Ci0gICAgLy8gYWxzbyBsb29rIGluIHRoZSBoYXNoPyAgVGhpcyBjdXJy
ZW50bHkgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0sIHNpbmNlCi0gICAgLy8gd2UndmUgY3VycmVu
dGx5IGFsd2F5cyBjYWxsICdnZXQnIGZpcnN0LCB3aGljaCBzaG91bGQgaGF2ZSBwb3B1bGF0ZWQK
LSAgICAvLyB0aGUgbm9ybWFsIHN0b3JhZ2UuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCiB2b2lk
IEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBt
b2RlKQogewogICAgIHByb3BlcnR5TmFtZXMuc2V0QmFzZU9iamVjdChvYmplY3QpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZpc2lvbiAxNzA3MjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJy
aSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NiwxNSArNTYsNiBAQCBpbmxpbmUgSlND
ZWxsKiBnZXRKU0Z1bmN0aW9uKEpTVmFsdWUgdmFsCiAgICAgcmV0dXJuIDA7CiB9CiAKLUpTX0VY
UE9SVF9QUklWQVRFIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpTQ2VsbCopOwotCi1p
bmxpbmUgSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdChKU1ZhbHVlIHZhbHVlKQotewotICAgIGlm
ICghdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBnZXRDYWxs
YWJsZU9iamVjdFNsb3codmFsdWUuYXNDZWxsKCkpOwotfQotCiBjbGFzcyBHZXR0ZXJTZXR0ZXI7
CiBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOwogY2xhc3MgSlNGdW5jdGlvbjsKQEAgLTExOSw2ICsx
MTAsNyBAQCBwdWJsaWM6CiAgICAgfQogICAgICAgICAKICAgICBKU1ZhbHVlIGdldChFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIEpTVmFsdWUgZ2V0QW5kV2F0Y2goRXhlY1N0
YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsKICAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCB1
bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgYm9vbCBmYXN0R2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0
eVNsb3QmKTsKQEAgLTQ5MSw4ICs0ODMsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUp
OwogCi0gICAgYm9vbCBnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVy
dHlOYW1lLCBKU0NlbGwqJiBzcGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKLQogICAgIC8vIFRoaXMg
Z2V0IGZ1bmN0aW9uIG9ubHkgbG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KICAgICBKU1ZhbHVl
IGdldERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAg
ewpAQCAtNTA0LDkgKzQ5NCw4IEBAIHB1YmxpYzoKIAogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNv
bnN0CiAgICAgewotICAgICAgICBKU0NlbGwqIHNwZWNpZmljOwogICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNl
dCwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgcmV0dXJuIG9mZnNldCAh
PSBpbnZhbGlkT2Zmc2V0ID8gZ2V0RGlyZWN0KG9mZnNldCkgOiBKU1ZhbHVlKCk7CiAgICAgfQpA
QCAtNTIxLDkgKzUxMCw4IEBAIHB1YmxpYzoKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldERpcmVj
dE9mZnNldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzKQogICAgIHsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LCBzcGVjaWZpYyk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNldChv
ZmZzZXQsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZz
ZXQ7CiAgICAgfQpAQCAtOTQ5LDcgKzkzNyw3IEBAIHByaXZhdGU6CiAgICAgQXJyYXlTdG9yYWdl
KiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0
cyhWTSYsIEFycmF5U3RvcmFnZSopOwogICAgICAgICAKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgot
ICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVu
c2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpTQ2VsbCopOworICAgIGJvb2wgcHV0RGly
ZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1
dFByb3BlcnR5U2xvdCYpOwogCiAgICAgYm9vbCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhl
Y1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0
eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVydHlPZmZzZXQpOwpAQCAtMTIxMyw4ICsx
MjAxLDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OnByb3RvdHlwZSgpIGNvbgogQUxXQVlT
X0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICBKU0NlbGwqIHNwZWNpZmljOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcyk7CiAgICAgaWYgKExJS0VMWShpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CiAgICAg
ICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJlY3Qob2Zmc2V0KTsKICAgICAgICAgaWYgKHN0cnVj
dHVyZS5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSkKQEAgLTEyODUsNiArMTI3MiwyMCBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4
ZWNTdGF0ZSogCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK2lubGluZSBKU1ZhbHVl
IEpTT2JqZWN0OjpnZXRBbmRXYXRjaChFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgUHJvcGVydHlTbG90IHNsb3QodGhpcyk7CisgICAgaWYg
KGNvbnN0X2Nhc3Q8SlNPYmplY3QqPih0aGlzKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIHByb3Bl
cnR5TmFtZSwgc2xvdCkpIHsKKyAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGUoKSkgeworICAg
ICAgICAgICAgc2xvdC5zbG90QmFzZSgpLT5zdHJ1Y3R1cmUoKS0+c3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKAorICAgICAgICAgICAgICAgIGV4ZWMtPnZtKCksIHNsb3QuY2Fj
aGVkT2Zmc2V0KCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzbG90LmdldFZhbHVlKGV4
ZWMsIHByb3BlcnR5TmFtZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworfQorCiBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogZXhlYywgdW5z
aWduZWQgcHJvcGVydHlOYW1lKSBjb25zdAogewogICAgIFByb3BlcnR5U2xvdCBzbG90KHRoaXMp
OwpAQCAtMTI5NSw3ICsxMjk2LDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6OmdldChFeGVj
U3RhdGUqIAogfQogCiB0ZW1wbGF0ZTxKU09iamVjdDo6UHV0TW9kZSBtb2RlPgotaW5saW5lIGJv
b2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHV0UHJvcGVydHlT
bG90JiBzbG90LCBKU0NlbGwqIHNwZWNpZmljRnVuY3Rpb24pCitpbmxpbmUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBK
U1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgQVNTRVJUKHZhbHVlKTsKICAgICBBU1NFUlQodmFsdWUuaXNHZXR0ZXJTZXR0ZXIo
KSA9PSAhIShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKQEAgLTEzMDUsMjUgKzEzMDYsMTUgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gdGhpcy0+c3RydWN0dXJlKHZtKTsKICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkgewogICAgICAgICB1bnNpZ25lZCBjdXJyZW50QXR0cmlidXRlczsKLSAgICAg
ICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbjsKLSAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJp
YnV0ZXMsIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0
ZXMpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKLSAgICAgICAgICAg
IC8vIElmIHRoZXJlIGlzIGN1cnJlbnRseSBhIHNwZWNpZmljIGZ1bmN0aW9uLCBhbmQgdGhlcmUg
bm93IGVpdGhlciBpc24ndCwKLSAgICAgICAgICAgIC8vIG9yIHRoZSBuZXcgdmFsdWUgaXMgZGlm
ZmVyZW50LCB0aGVuIGRlc3BlY2lmeS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50U3BlY2lmaWNG
dW5jdGlvbiAmJiAoc3BlY2lmaWNGdW5jdGlvbiAhPSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikp
Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24o
dm0sIHByb3BlcnR5TmFtZSk7CiAgICAgICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkg
JiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAg
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgb2JqZWN0cyBzdHJ1Y3R1cmUgb25seSBoYXMg
YSBzcGVjaWZpYyB2YWx1ZSBzZXQgaWYgcHJldmlvdXNseSB0aGVyZQotICAgICAgICAgICAgLy8g
aGFkIGJlZW4gb25lIHNldCwgYW5kIGlmIHRoZSBuZXcgdmFsdWUgYmVpbmcgc3BlY2lmaWVkIGlz
IHRoZSBzYW1lIChvdGhlcndpc2Ugd2Ugd291bGQKLSAgICAgICAgICAgIC8vIGhhdmUgZGVzcGVj
aWZpZWQsIGFib3ZlKS4gIFNvLCBpZiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiBpcyBub3Qgc2V0
LCBvciBpZiB0aGUgbmV3Ci0gICAgICAgICAgICAvLyB2YWx1ZSBpcyBkaWZmZXJlbnQgKG9yIHRo
ZXJlIGlzIG5vIG5ldyB2YWx1ZSksIHRoZW4gdGhlIHNsb3Qgbm93IGhhcyBubyB2YWx1ZSAtIGFu
ZAotICAgICAgICAgICAgLy8gYXMgc3VjaCBpdCBpcyBjYWNoYWJsZS4KLSAgICAgICAgICAgIC8v
IElmIHRoZXJlIHdhcyBwcmV2aW91c2x5IGEgdmFsdWUsIGFuZCB0aGUgbmV3IHZhbHVlIGlzIHRo
ZSBzYW1lLCB0aGVuIHdlIGNhbm5vdCBjYWNoZS4KLSAgICAgICAgICAgIGlmICghY3VycmVudFNw
ZWNpZmljRnVuY3Rpb24gfHwgKHNwZWNpZmljRnVuY3Rpb24gIT0gY3VycmVudFNwZWNpZmljRnVu
Y3Rpb24pKQotICAgICAgICAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBv
ZmZzZXQpOworICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRo
aXMsIG9mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0x
MzM0LDE1ICsxMzI1LDEzIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5h
bCgKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAg
ICAgaWYgKHRoaXMtPnN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkK
ICAgICAgICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCB0aGlz
LT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdGhpcy0+c3RydWN0dXJlKCktPnN1
Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICAgICAgb2Zmc2V0ID0g
dGhpcy0+c3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbik7CisgICAgICAgIG9mZnNldCA9
IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJmbHko
dm0sIHRoaXMtPnN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogCiAgICAgICAgIHZhbGlkYXRl
T2Zmc2V0KG9mZnNldCk7CiAgICAgICAgIEFTU0VSVCh0aGlzLT5zdHJ1Y3R1cmUoKS0+aXNWYWxp
ZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsK
LSAgICAgICAgLy8gU2VlIGNvbW1lbnQgb24gc2V0TmV3UHJvcGVydHkgY2FsbCBiZWxvdy4KLSAg
ICAgICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQotICAgICAgICAgICAgc2xvdC5zZXROZXdQcm9w
ZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9m
ZnNldCk7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICB0
aGlzLT5zdHJ1Y3R1cmUoKS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMzUwLDcgKzEzMzksNyBAQCBpbmxpbmUgYm9vbCBKU09iamVj
dDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAg
c2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpOwotICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1Y3R1cmUoKSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9uLCBvZmZzZXQpKSB7CisgICAg
aWYgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIG9mZnNldCkpIHsKICAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBp
ZiAoY3VycmVudENhcGFjaXR5ICE9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSkgewpA
QCAtMTM2Miw0MCArMTM1MSwxNyBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50
ZXJuYWwoCiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7
CiAgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlLCBuZXdCdXR0
ZXJmbHkpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAv
LyBUaGlzIGlzIGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVl
cyBhcmUgbm90IGN1cnJlbnRseSBjYWNoYWJsZSwKLSAgICAgICAgLy8gc28gbGVhdmUgdGhlIHNs
b3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KLSAgICAgICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9u
KQotICAgICAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgICAg
ICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgIEpTQ2VsbCog
Y3VycmVudFNwZWNpZmljRnVuY3Rpb247Ci0gICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMsIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9u
KTsKKyAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50
QXR0cmlidXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAg
IGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJlYWRPbmx5
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFRoZXJlIGFyZSB0aHJl
ZSBwb3NzaWJpbGl0aWVzIGhlcmU6Ci0gICAgICAgIC8vICAoMSkgVGhlcmUgaXMgYW4gZXhpc3Rp
bmcgc3BlY2lmaWMgdmFsdWUgc2V0LCBhbmQgd2UncmUgb3ZlcndyaXRpbmcgd2l0aCAqdGhlIHNh
bWUgdmFsdWUqLgotICAgICAgICAvLyAgICAgICAqIERvIG5vdGhpbmcgLSBubyBuZWVkIHRvIGRl
c3BlY2lmeSwgYnV0IHRoYXQgbWVhbnMgd2UgY2FuJ3QgY2FjaGUgKGEgY2FjaGVkCi0gICAgICAg
IC8vICAgICAgICAgcHV0IGNvdWxkIHdyaXRlIGEgZGlmZmVyZW50IHZhbHVlKS4gTGVhdmUgdGhl
IHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KLSAgICAgICAgLy8gICgyKSBUaGVyZSBpcyBh
IHNwZWNpZmljIHZhbHVlIGN1cnJlbnRseSBzZXQsIGJ1dCB3ZSdyZSB3cml0aW5nIGEgZGlmZmVy
ZW50IHZhbHVlLgotICAgICAgICAvLyAgICAgICAqIEZpcnN0LCB3ZSBoYXZlIHRvIGRlc3BlY2lm
eS4gIEhhdmluZyBkb25lIHNvLCB0aGlzIGlzIG5vdyBhIHJlZ3VsYXIgc2xvdAotICAgICAgICAv
LyAgICAgICAgIHdpdGggbm8gc3BlY2lmaWMgdmFsdWUsIHNvIGdvIGFoZWFkICYgY2FjaGUgbGlr
ZSBub3JtYWwuCi0gICAgICAgIC8vICAoMykgTm9ybWFsIGNhc2UsIHRoZXJlIGlzIG5vIHNwZWNp
ZmljIHZhbHVlIHNldC4KLSAgICAgICAgLy8gICAgICAgKiBHbyBhaGVhZCAmIGNhY2hlIGxpa2Ug
bm9ybWFsLgotICAgICAgICBpZiAoY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAgICAg
ICAgIC8vIGNhc2UgKDEpIERvIHRoZSBwdXQsIHRoZW4gcmV0dXJuIGxlYXZpbmcgdGhlIHNsb3Qg
dW5jYWNoYWJsZS4KLSAgICAgICAgICAgIGlmIChzcGVjaWZpY0Z1bmN0aW9uID09IGN1cnJlbnRT
cGVjaWZpY0Z1bmN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQs
IHZhbHVlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIC8vIGNhc2UgKDIpIERlc3BlY2lmeSwgZmFsbCB0aHJvdWdoIHRvICgzKS4KLSAg
ICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICAvLyBjYXNlICgzKSBzZXQgdGhlIHNsb3QsIGRvIHRoZSBwdXQsIHJldHVybi4KKyAgICAg
ICAgc3RydWN0dXJlLT5kaWRSZXBsYWNlUHJvcGVydHkob2Zmc2V0KTsKICAgICAgICAgc2xvdC5z
ZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgICAgIHB1dERpcmVjdCh2bSwg
b2Zmc2V0LCB2YWx1ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTQwNCwxNyArMTM3MCwx
NCBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgaWYgKCht
b2RlID09IFB1dE1vZGVQdXQpICYmICFpc0V4dGVuc2libGUoKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY0Z1bmN0aW9u
LCBvZmZzZXQsIHNsb3QuY29udGV4dCgpKTsKKyAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFk
ZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCkpOwogICAgIAogICAgIHZhbGlkYXRlT2Zmc2V0KG9m
ZnNldCk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAg
ICBzZXRTdHJ1Y3R1cmVBbmRSZWFsbG9jYXRlU3RvcmFnZUlmTmVjZXNzYXJ5KHZtLCBzdHJ1Y3R1
cmUpOwogCiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAvLyBUaGlzIGlz
IGEgbmV3IHByb3BlcnR5OyB0cmFuc2l0aW9ucyB3aXRoIHNwZWNpZmljIHZhbHVlcyBhcmUgbm90
IGN1cnJlbnRseSBjYWNoYWJsZSwKLSAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNh
Y2hhYmxlIHN0YXRlLgotICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAgICAgICAgc2xvdC5z
ZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOworICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhp
cywgb2Zmc2V0KTsKICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KQogICAgICAgICBzdHJ1
Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHRydWU7
CkBAIC0xNDQ3LDIwICsxNDEwLDIwIEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRPd25EYXRh
UHJvcGVydHkKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFs
dWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogICAgIEFTU0VSVCghc3RydWN0dXJlKCktPmhhc0dl
dHRlclNldHRlclByb3BlcnRpZXMoKSk7CiAKLSAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8
UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QsIGdldENhbGxhYmxl
T2JqZWN0KHZhbHVlKSk7CisgICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAogaW5saW5lIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFs
dWUgdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpICYmICEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7CiAgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QodGhpcyk7Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93
blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCwgZ2V0
Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVm
aW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90
KTsKIH0KIAogaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdChWTSYgdm0sIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkK
IHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpOwotICAgIHB1dERpcmVjdElu
dGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUs
IDAsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGlyZWN0SW50ZXJu
YWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwg
c2xvdCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpCkBAIC0xNDcwLDcgKzE0MzMsNyBAQCBpbmxpbmUgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0V2l0aG91dFRyCiAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkgPSBt
X2J1dHRlcmZseS5nZXQoKTsKICAgICBpZiAoc3RydWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZM
aW5lU3RvcmFnZSgpKQogICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93T3V0T2ZMaW5lU3RvcmFn
ZSh2bSwgc3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCksIHN0cnVjdHVyZSgpLT5zdWdn
ZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKSk7Ci0gICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcywgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICBzZXRTdHJ1Y3R1cmVB
bmRCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSgpLCBuZXdCdXR0ZXJmbHkpOwogICAgIHB1dERpcmVj
dCh2bSwgb2Zmc2V0LCB2YWx1ZSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Njb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Njb3BlLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDggKzk5LDE5IEBA
IHN0YXRpYyBpbmxpbmUgYm9vbCBhYnN0cmFjdEFjY2VzcyhFeGVjU3QKICAgICAgICAgICAgIG9w
ID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNo
ZWNrcyksIGRlcHRoLCAwLCAwLCAwLCAwKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9Ci0KLSAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHks
IG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2JhbE9iamVjdC0+c3RydWN0dXJl
KCksIDAsIDAsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAgICAKKyAgICAgICAgV2F0Y2hw
b2ludFN0YXRlIHN0YXRlID0gZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+ZW5zdXJlUHJvcGVy
dHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoZXhlYy0+dm0oKSwgc2xvdC5jYWNoZWRPZmZzZXQo
KSktPnN0YXRlKCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBJc1dhdGNoZWQgJiYgZ2V0T3JQdXQg
PT0gUHV0KSB7CisgICAgICAgICAgICAvLyBUaGUgZmllbGQgZXhpc3RzLCBidXQgYmVjYXVzZSB0
aGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBpcyBzdGlsbCBpbnRhY3QuIFRoaXMgaXMKKyAgICAg
ICAgICAgIC8vIGtpbmQgb2YgZGFuZ2Vyb3VzLiBXZSBoYXZlIHR3byBvcHRpb25zOgorICAgICAg
ICAgICAgLy8gMSkgSW52YWxpZGF0ZSB0aGUgd2F0Y2hwb2ludCBzZXQuIFRoYXQgd291bGQgd29y
aywgYnV0IGl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGNvZGUKKyAgICAgICAgICAgIC8vICAgIHBh
dGggbmV2ZXIgZXhlY3V0ZXMgLSBpbiB3aGljaCBjYXNlIHRoaXMgd291bGQgYmUgdW53aXNlLgor
ICAgICAgICAgICAgLy8gMikgSGF2ZSB0aGUgaW52YWxpZGF0aW9uIGhhcHBlbiBhdCBydW4tdGlt
ZS4gQWxsIHdlIGhhdmUgdG8gZG8gaXMgbGVhdmUgdGhlIGNvZGUKKyAgICAgICAgICAgIC8vICAg
IHVuY2FjaGVkLiBUaGUgb25seSBkb3duc2lkZSBpcyBzbGlnaHRseSBtb3JlIHdvcmsgd2hlbiB0
aGlzIGRvZXMgZXhlY3V0ZS4KKyAgICAgICAgICAgIC8vIFdlIGdvIHdpdGggb3B0aW9uICgyKSBo
ZXJlIGJlY2F1c2UgaXQgc2VlbXMgbGVzcyBldmlsLgorICAgICAgICAgICAgb3AgPSBSZXNvbHZl
T3AobWFrZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVw
dGgsIDAsIDAsIDAsIDApOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG9wID0gUmVzb2x2
ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRl
cHRoLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLCAwLCAwLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgJKHJldmlzaW9u
IDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFz
aFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC03NiwxMyArNzYsMTEgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIFN0
cmluZ0ltcGwqIGtleTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7CiAgICAgdW5zaWduZWQg
YXR0cmlidXRlczsKLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBzcGVjaWZpY1ZhbHVlOwogCi0g
ICAgUHJvcGVydHlNYXBFbnRyeShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIFN0cmluZ0ltcGwqIGtl
eSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNw
ZWNpZmljVmFsdWUpCisgICAgUHJvcGVydHlNYXBFbnRyeShTdHJpbmdJbXBsKiBrZXksIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwgdW5zaWduZWQgYXR0cmlidXRlcykKICAgICAgICAgOiBrZXkoa2V5
KQogICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgICwgYXR0cmlidXRlcyhhdHRyaWJ1
dGVzKQotICAgICAgICAsIHNwZWNpZmljVmFsdWUodm0sIG93bmVyLCBzcGVjaWZpY1ZhbHVlLCBX
cml0ZUJhcnJpZXI8SlNDZWxsPjo6TWF5QmVOdWxsKQogICAgIHsKICAgICB9CiB9OwpAQCAtMTQx
LDggKzEzOSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZt
LCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpT
Q2VsbCosIFNsb3RWaXNpdG9yJik7Ci0KICAgICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5cGU7
CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVudHJ5IFZhbHVlVHlwZTsKIApAQCAtMTU3LDggKzE1
Myw4IEBAIHB1YmxpYzoKIAogICAgIC8vIENvbnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFs
IGNhcGFjaXR5LCBhIFByb3BlcnR5VGFibGUgdG8gY29weSwgb3IgYm90aC4KICAgICBzdGF0aWMg
UHJvcGVydHlUYWJsZSogY3JlYXRlKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKLSAg
ICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQ
cm9wZXJ0eVRhYmxlJik7Ci0gICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgSlND
ZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxl
Jik7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgY29uc3QgUHJvcGVydHlU
YWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIH5Qcm9wZXJ0eVRhYmxl
KCk7CiAKICAgICAvLyBPcmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgpAQCAtMTk2LDcgKzE5Miw3
IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9mZnNldCBuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0
IGlubGluZUNhcGFjaXR5KTsKIAogICAgIC8vIENvcHkgdGhpcyBQcm9wZXJ0eVRhYmxlLCBlbnN1
cmluZyB0aGUgY29weSBoYXMgYXQgbGVhc3QgdGhlIGNhcGFjaXR5IHByb3ZpZGVkLgotICAgIFBy
b3BlcnR5VGFibGUqIGNvcHkoVk0mLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0
eSk7CisgICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsK
IAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0yMDQsMTIg
KzIwMCwxMiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJvdGVjdGVkOgotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4gfCBTdHJ1
Y3R1cmVJc0ltbW9ydGFsOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IFN0cnVjdHVyZUlzSW1tb3J0YWw7CiAKIHByaXZhdGU6CiAgICAgUHJvcGVydHlUYWJsZShW
TSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShWTSYsIEpT
Q2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgSlND
ZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Cisg
ICAgUHJvcGVydHlUYWJsZShWTSYsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0
eVRhYmxlKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxl
Jik7CiAKICAgICBQcm9wZXJ0eVRhYmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKICAgICAvLyBV
c2VkIHRvIGluc2VydCBhIHZhbHVlIGtub3duIG5vdCB0byBiZSBpbiB0aGUgdGFibGUsIGFuZCB3
aGVyZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KQEAgLTQ5NCwxNSArNDkwLDE1
IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXgKICAgICByZXR1cm4g
b2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9CiAKLWlu
bGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCitpbmxpbmUgUHJvcGVydHlUYWJsZSogUHJvcGVy
dHlUYWJsZTo6Y29weShWTSYgdm0sIHVuc2lnbmVkIG5ld0NhcGFjaXR5KQogewogICAgIEFTU0VS
VChuZXdDYXBhY2l0eSA+PSBtX2tleUNvdW50KTsKIAogICAgIC8vIEZhc3QgY2FzZTsgaWYgdGhl
IG5ldyB0YWJsZSB3aWxsIGJlIHRoZSBzYW1lIG1faW5kZXhTaXplIGFzIHRoaXMgb25lLCB3ZSBj
YW4gbWVtY3B5IGl0LAogICAgIC8vIHNhdmUgcmVoYXNoaW5nIGFsbCBrZXlzLgogICAgIGlmIChz
aXplRm9yQ2FwYWNpdHkobmV3Q2FwYWNpdHkpID09IG1faW5kZXhTaXplKQotICAgICAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqdGhpcyk7Ci0gICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25lciwgbmV3Q2FwYWNpdHksICp0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqdGhpcyk7CisgICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNsb25lKHZtLCBuZXdDYXBhY2l0eSwgKnRoaXMpOwogfQogCiAjaWZuZGVm
IE5ERUJVRwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJs
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlUYWJsZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwxNiArNDQsMTYg
QEAgUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y3JlYXRlKFZNJgogICAgIHJldHVybiB0
YWJsZTsKIH0KIAotUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoVk0mIHZtLCBK
U0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGUq
IFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIp
CiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgb3duZXIsIG90aGVy
KTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxs
PFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvdGhlcik7CiAgICAg
dGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7CiB9CiAKLVByb3Bl
cnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgdW5z
aWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3Bl
cnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgdW5zaWduZWQgaW5pdGlhbENh
cGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhl
YXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25lciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7Cisg
ICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9w
ZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgaW5pdGlhbENhcGFjaXR5LCBv
dGhlcik7CiAgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICByZXR1cm4gdGFibGU7
CiB9CkBAIC02OSw3ICs2OSw3IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZt
LCB1bnMKICAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwogfQogCi1Qcm9wZXJ0
eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVy
dHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgY29u
c3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5VGFi
bGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkK
ICAgICAsIG1faW5kZXhNYXNrKG90aGVyLm1faW5kZXhNYXNrKQpAQCAtODIsMTAgKzgyLDggQEAg
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpTQwogICAgIG1lbWNweShtX2lu
ZGV4LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6ZSgpKTsKIAogICAgIGl0ZXJhdG9yIGVuZCA9IHRo
aXMtPmVuZCgpOwotICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKQogICAgICAgICBpdGVyLT5rZXktPnJlZigpOwotICAgICAgICB2bS5oZWFwLndy
aXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSk7Ci0gICAgfQogCiAg
ICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3IuCiAgICAgVmVjdG9yPFByb3Bl
cnR5T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zmc2V0cyA9IG90aGVyLm1fZGVsZXRlZE9mZnNldHMu
Z2V0KCk7CkBAIC05Myw3ICs5MSw3IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0m
IHZtLCBKU0MKICAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7CiB9CiAKLVByb3BlcnR5VGFi
bGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFs
Q2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlUYWJsZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVy
dHlUYWJsZSYgb3RoZXIpCiAgICAgOiBKU0NlbGwodm0sIHZtLnByb3BlcnR5VGFibGVTdHJ1Y3R1
cmUuZ2V0KCkpCiAgICAgLCBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFj
aXR5KSkKICAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkKQEAgLTEwOSw3ICsxMDcs
NiBAQCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgICAgIEFT
U0VSVChjYW5JbnNlcnQoKSk7CiAgICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKICAgICAgICAgaXRl
ci0+a2V5LT5yZWYoKTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGl0ZXIt
PnNwZWNpZmljVmFsdWUuZ2V0KCkpOwogICAgIH0KIAogICAgIC8vIENvcHkgdGhlIG1fZGVsZXRl
ZE9mZnNldHMgdmVjdG9yLgpAQCAtMTMyLDE3ICsxMjksNCBAQCBQcm9wZXJ0eVRhYmxlOjp+UHJv
cGVydHlUYWJsZSgpCiAgICAgZmFzdEZyZWUobV9pbmRleCk7CiB9CiAKLXZvaWQgUHJvcGVydHlU
YWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ewotICAgIFByb3BlcnR5VGFibGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+
KGNlbGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygp
KTsKLSAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbigpKTsKLQotICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2Jq
ZWN0LCB2aXNpdG9yKTsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNP
YmplY3QtPmVuZCgpOwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhp
c09iamVjdC0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Myw3ICsxNzMsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNldHRlclBy
b3BlcnRpZXNFeGNsdWRpbmdQcm90byhjbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9u
bHlQcm9wZXJ0aWVzKHZtKSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoZmFs
c2UpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmljRnVu
Y3Rpb25UaHJhc2hDb3VudCgwKTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7CiAg
ICAgc2V0RGlkVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmll
ZChmYWxzZSk7CkBAIC0yMDMsNyArMjAyLDYgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZt
KQogICAgIHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJv
dG8obV9jbGFzc0luZm8tPmhhc1N0YXRpY1NldHRlck9yUmVhZG9ubHlQcm9wZXJ0aWVzKHZtKSk7
CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoZmFsc2UpOwogICAgIHNldEF0dHJp
YnV0ZXNJblByZXZpb3VzKDApOwotICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgw
KTsKICAgICBzZXRQcmV2ZW50RXh0ZW5zaW9ucyhmYWxzZSk7CiAgICAgc2V0RGlkVHJhbnNpdGlv
bihmYWxzZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmllZChmYWxzZSk7CkBAIC0yMzIs
NyArMjMwLDYgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBjb25zdCBTdHJ1YwogICAg
IHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8ocHJl
dmlvdXMtPmhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8o
KSk7CiAgICAgc2V0SGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMocHJldmlvdXMtPmhhc05vbkVu
dW1lcmFibGVQcm9wZXJ0aWVzKCkpOwogICAgIHNldEF0dHJpYnV0ZXNJblByZXZpb3VzKDApOwot
ICAgIHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudChwcmV2aW91cy0+c3BlY2lmaWNGdW5j
dGlvblRocmFzaENvdW50KCkpOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25zKHByZXZpb3VzLT5w
cmV2ZW50RXh0ZW5zaW9ucygpKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKHRydWUpOwogICAgIHNl
dFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQocHJldmlvdXMtPnN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQo
KSk7CkBAIC0zMDAsNyArMjk3LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVy
dHlNYXAoVgogICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVj
dHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOwogICAgIAogICAgIGlmICh0YWJsZSkgewotICAgICAg
ICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBzdHJ1Y3R1cmUsIG51bWJlck9mU2xvdHNGb3JMYXN0
T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgIHRhYmxlID0gdGFi
bGUtPmNvcHkodm0sIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGlu
ZUNhcGFjaXR5KSk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAgIH0K
ICAgICAKQEAgLTMxNyw3ICszMTQsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcChWCiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlm
ICghc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkodm0sIHRoaXMsIHN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1
dGVzSW5QcmV2aW91cygpLCBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0
KCkpOworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV9uYW1lSW5Q
cmV2aW91cy5nZXQoKSwgc3RydWN0dXJlLT5tX29mZnNldCwgc3RydWN0dXJlLT5hdHRyaWJ1dGVz
SW5QcmV2aW91cygpKTsKICAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoZW50cnksIG1fb2Zm
c2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOwogICAgIH0K
ICAgICAKQEAgLTMzNiwzMCArMzMzLDEyIEBAIHNpemVfdCBTdHJ1Y3R1cmU6OnN1Z2dlc3RlZE5l
d091dE9mTGluZVMKICAgICByZXR1cm4gbmV4dE91dE9mTGluZVN0b3JhZ2VDYXBhY2l0eShvdXRP
ZkxpbmVDYXBhY2l0eSgpKTsKIH0KICAKLXZvaWQgU3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9u
YXJ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIFN0
cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLQotICAgIERlZmVyR0MgZGVmZXJH
Qyh2bS5oZWFwKTsKLSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRl
ZmVyR0MpOwotCi0gICAgQVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKLSAgICBBU1NFUlQocHJvcGVy
dHlUYWJsZSgpKTsKLQotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJs
ZSgpLT5nZXQocmVwKTsKLSAgICBBU1NFUlQoZW50cnkpOwotICAgIGVudHJ5LT5zcGVjaWZpY1Zh
bHVlLmNsZWFyKCk7Ci19Ci0KLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5n
SW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFBy
b3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0
cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNl
dCkKIHsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogCiAgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdU
cmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQodWlkLCBhdHRyaWJ1
dGVzKSkgewotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWVJblByZXZpb3VzID0gZXhpc3Rp
bmdUcmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpOwotICAgICAgICBp
ZiAoc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgJiYgc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgIT0g
c3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB2YWxpZGF0ZU9m
ZnNldChleGlzdGluZ1RyYW5zaXRpb24tPm1fb2Zmc2V0LCBleGlzdGluZ1RyYW5zaXRpb24tPmlu
bGluZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1f
b2Zmc2V0OwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwpAQCAtMzY4LDE2ICsz
NDcsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIHJl
dHVybiAwOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQ
cm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0
JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwotICAgIHJl
dHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1
cmUsIHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0
KTsKKyAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUlt
cGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9
CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1
aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlP
ZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
dHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZz
ZXQpCiB7CiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2sp
OwotICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1w
bChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KTsKKyAg
ICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3Ry
dWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIG9mZnNldCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjph
bnlPYmplY3RJbkNoYWluTWF5SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKCkgY29uc3QKQEAgLTQz
MiwyNSArNDExLDEyIEBAIE5vblByb3BlcnR5VHJhbnNpdGlvbiBTdHJ1Y3R1cmU6OnN1Z2dlc3QK
ICAgICByZXR1cm4gQWxsb2NhdGVBcnJheVN0b3JhZ2U7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OkNv
bnRleHQgY29udGV4dCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCwgUHV0UHJvcGVy
dHlTbG90OjpDb250ZXh0IGNvbnRleHQpCiB7Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIHNwZWNpZmlj
IGZ1bmN0aW9uLCB3ZSBtYXkgaGF2ZSBnb3QgdG8gdGhpcyBwb2ludCBpZiB0aGVyZSBpcwotICAg
IC8vIGFscmVhZHkgYSB0cmFuc2l0aW9uIHdpdGggdGhlIGNvcnJlY3QgcHJvcGVydHkgbmFtZSBh
bmQgYXR0cmlidXRlcywgYnV0Ci0gICAgLy8gc3BlY2lhbGl6ZWQgdG8gYSBkaWZmZXJlbnQgZnVu
Y3Rpb24uICBJbiB0aGlzIGNhc2Ugd2UganVzdCB3YW50IHRvIGdpdmUgdXAKLSAgICAvLyBhbmQg
ZGVzcGVjaWFsaXplIHRoZSB0cmFuc2l0aW9uLgotICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBjbGVh
ciB0aGUgdmFsdWUgb2Ygc3BlY2lmaWNGdW5jdGlvbiB3aGljaCB3aWxsIHJlc3VsdAotICAgIC8v
IGluIHVzIGFkZGluZyBhIG5vbi1zcGVjaWZpYyB0cmFuc2l0aW9uLCBhbmQgYW55IHN1YnNlcXVl
bnQgbG9va3VwIGluCi0gICAgLy8gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4
aXN0aW5nU3RydWN0dXJlIHdpbGwganVzdCB1c2UgdGhhdC4KLSAgICBpZiAoc3BlY2lmaWNWYWx1
ZSAmJiBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmNvbnRhaW5zKHByb3BlcnR5TmFtZS51
aWQoKSwgYXR0cmlidXRlcykpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAgQVNT
RVJUKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5p
c09iamVjdCgpKTsKLSAgICBBU1NFUlQoIVN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
c3BlY2lmaWNWYWx1ZSwgb2Zmc2V0KSk7CisgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIG9mZnNldCkpOwogICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPnNwZWNpZmlj
RnVuY3Rpb25UaHJhc2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkK
LSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBpbnQgbWF4VHJhbnNpdGlvbkxlbmd0
aDsKICAgICBpZiAoY29udGV4dCA9PSBQdXRQcm9wZXJ0eVNsb3Q6OlB1dEJ5SWQpCiAgICAgICAg
IG1heFRyYW5zaXRpb25MZW5ndGggPSBzX21heFRyYW5zaXRpb25MZW5ndGhGb3JOb25FdmFsUHV0
QnlJZDsKQEAgLTQ1OSw3ICs0MjUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0CiAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbkNvdW50KCkgPiBtYXhUcmFu
c2l0aW9uTGVuZ3RoKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CiAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7Ci0gICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1
dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1
ZSk7CisgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAt
NDY5LDExICs0MzUsMTAgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dAogICAgIHRyYW5zaXRpb24tPnNldFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZSk7CiAgICAgdHJhbnNpdGlvbi0+bV9uYW1lSW5QcmV2aW91cyA9IHByb3BlcnR5TmFtZS51aWQo
KTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsK
LSAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLnNldE1heUJlTnVsbCh2
bSwgdHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9y
Q2xvbmVJZlBpbm5lZCh2bSwgdHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5
VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVP
ckNsb25lSWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAKLSAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVl
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgIG9mZnNl
dCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIAogICAg
IGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICB7CkBAIC01MDUsNyArNDcwLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmNoYW5nZVByb3RvdHlwZVRyYQogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdD
KTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwor
ICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVj
dHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+
bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwog
CkBAIC01MTMsMzAgKzQ3OCw2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5
cGVUcmEKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBQcm9wZXJ0eU5hbWUgcmVwbGFjZUZ1bmN0aW9uKQotewotICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpIDwgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50KTsKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVy
ZSk7Ci0KLSAgICB0cmFuc2l0aW9uLT5zZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQodHJh
bnNpdGlvbi0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgKyAxKTsKLQotICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcodm0sIHRyYW5zaXRpb24pKTsKLSAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7Ci0gICAgdHJhbnNpdGlvbi0+cGluKCk7Ci0KLSAgICBpZiAodHJhbnNp
dGlvbi0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgPT0gbWF4U3BlY2lmaWNGdW5jdGlv
blRocmFzaENvdW50KQotICAgICAgICB0cmFuc2l0aW9uLT5kZXNwZWNpZnlBbGxGdW5jdGlvbnMo
dm0pOwotICAgIGVsc2UgewotICAgICAgICBib29sIHJlbW92ZWQgPSB0cmFuc2l0aW9uLT5kZXNw
ZWNpZnlGdW5jdGlvbih2bSwgcmVwbGFjZUZ1bmN0aW9uKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChyZW1vdmVkLCByZW1vdmVkKTsKLSAgICB9Ci0KLSAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNl
dENvbnNpc3RlbmN5KCk7Ci0gICAgcmV0dXJuIHRyYW5zaXRpb247Ci19Ci0KIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMp
CiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwpAQCAtNTQ0LDcgKzQ4NSw3IEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmEKICAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwogCiAgICAgICAgIHN0cnVjdHVy
ZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICAg
ICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICAgICAgdHJhbnNpdGlv
bi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgICAgICB0cmFuc2l0aW9uLT5w
aW4oKTsKICAgICAgICAgCkBAIC01NjgsNyArNTA5LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaQogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdD
KTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwor
ICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVj
dHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+
bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnNldERpY3Rp
b25hcnlLaW5kKGtpbmQpOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNjMxLDcgKzU3Miw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1QKIAogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
ICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2ZW50RXh0ZW5zaW9ucyh0cnVlKTsKICAgICB0cmFuc2l0
aW9uLT5waW4oKTsKQEAgLTY0MCwxMyArNTgxLDEzIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpw
cmV2ZW50RXh0ZW5zaW9uc1QKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotUHJvcGVydHlU
YWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYgdm0s
IFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0
eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0u
aGVhcCk7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2
bSwgZGVmZXJHQyk7CiAgICAgCiAgICAgaWYgKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKQotICAg
ICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBvd25lciwgcHJvcGVydHlUYWJs
ZSgpLT5zaXplKCkgKyAxKTsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+Y29weSh2
bSwgcHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAxKTsKICAgICAKICAgICAvLyBIb2xkIHRoZSBs
b2NrIHdoaWxlIHN0ZWFsaW5nIHRoZSB0YWJsZSAtIHNvIHRoYXQgZ2V0Q29uY3VycmVudGx5KCkg
b24gYW5vdGhlciB0aHJlYWQKICAgICAvLyB3aWxsIGVpdGhlciBoYXZlIHRvIGJ5cGFzcyB0aGlz
IHN0cnVjdHVyZSwgb3Igd2lsbCBnZXQgdG8gdXNlIHRoZSBwcm9wZXJ0eSB0YWJsZQpAQCAtNjgy
LDcgKzYyMyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXQKICAg
ICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lEKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwog
ICAgIHRyYW5zaXRpb24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwogICAg
IHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ1R5cGUoaW5kZXhpbmdUeXBlKTsKLSAgICB0
cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtLCB0cmFuc2l0aW9uKSk7CisgICAg
dHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAgIHRyYW5zaXRpb24t
Pm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICBjaGVja09mZnNldCh0cmFuc2l0
aW9uLT5tX29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgCkBAIC03
NzMsMTkgKzcxNCwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlT
CiAgICAgcmV0dXJuIHRoaXM7CiB9CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJU
KCFlbnVtZXJhdGlvbkNhY2hlKCkpOwogCi0gICAgaWYgKHNwZWNpZmljRnVuY3Rpb25UaHJhc2hD
b3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgc3BlY2lm
aWNWYWx1ZSA9IDA7Ci0KICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5Rm9yUGlubmluZyh2bSwgZGVmZXJHQyk7CiAgICAg
CiAgICAgcGluKCk7CiAKLSAgICByZXR1cm4gcHV0U3BlY2lmaWNWYWx1ZSh2bSwgcHJvcGVydHlO
YW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICByZXR1cm4gYWRkKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogfQogCiBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJl
bW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQpAQCAtODEyLDExICs3NTAsMzcgQEAgdm9pZCBTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFy
ZURhdGEoVk0mIHZtKQogewogICAgIEFTU0VSVCghaGFzUmFyZURhdGEoKSk7CiAgICAgU3RydWN0
dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gU3RydWN0dXJlUmFyZURhdGE6OmNyZWF0ZSh2bSwgcHJl
dmlvdXMoKSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBtX3ByZXZpb3VzT3JS
YXJlRGF0YS5zZXQodm0sIHRoaXMsIHJhcmVEYXRhKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwogICAgIHNldEhhc1JhcmVEYXRhKHRydWUpOwogICAgIEFTU0VSVChoYXNSYXJlRGF0YSgp
KTsKIH0KIAorV2F0Y2hwb2ludFNldCogU3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldChWTSYgdm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBB
U1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIAorICAgIGlmICghaGFzUmFy
ZURhdGEoKSkKKyAgICAgICAgYWxsb2NhdGVSYXJlRGF0YSh2bSk7CisgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIobV9sb2NrKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEg
PSB0aGlzLT5yYXJlRGF0YSgpOworICAgIGlmICghcmFyZURhdGEtPm1fcmVwbGFjZW1lbnRXYXRj
aHBvaW50U2V0cykgeworICAgICAgICByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRT
ZXRzID0KKyAgICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8U3RydWN0dXJlUmFyZURhdGE6OlBy
b3BlcnR5V2F0Y2hwb2ludE1hcD4oKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICB9CisgICAgYXV0byByZXN1bHQgPSByYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzLT5hZGQob2Zmc2V0LCBudWxscHRyKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
CisgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2lu
dFNldChJc1dhdGNoZWQpKTsKKyAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQo
KTsKK30KKwordm9pZCBTdHJ1Y3R1cmU6OmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudChWTSYg
dm0sIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICBlbnN1cmVQcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldCh2bSwgb2Zmc2V0KS0+ZmlyZUFsbCgiRGlkIGNhY2hlIHByb3BlcnR5
IHJlcGxhY2VtZW50Iik7Cit9CisKICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKIHN0cnVj
dCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9nZ2VyIHsKQEAgLTg0NSwyMSArODA5LDIxIEBA
IGlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgKIAogI2VuZGlmCiAKLVBy
b3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShW
TSYgdm0pCiB7CiAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxl
KCkuZ2V0KCkpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5
VGFibGUoKS5nZXQoKSk7CiB9CiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFi
bGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKICAg
ICBpZiAocHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xv
bmUodm0sIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFBy
b3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKICAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldCht
X29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJp
YnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OmdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMpCiB7CiAgICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmU7CkBAIC04NzEsNyArODM1LDYgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjpnZXRDb25jdXJyZW50bAogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHRh
YmxlLT5nZXQodWlkKTsKICAgICAgICAgaWYgKGVudHJ5KSB7CiAgICAgICAgICAgICBhdHRyaWJ1
dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Ci0gICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gZW50
cnktPnNwZWNpZmljVmFsdWUuZ2V0KCk7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCByZXN1
bHQgPSBlbnRyeS0+b2Zmc2V0OwogICAgICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2Nr
KCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtODg1LDE0ICs4NDgsMTMgQEAgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bAogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIAogICAgICAgICBhdHRyaWJ1dGVzID0gc3RydWN0dXJlLT5hdHRyaWJ1dGVz
SW5QcmV2aW91cygpOwotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gc3RydWN0dXJlLT5tX3NwZWNp
ZmljVmFsdWVJblByZXZpb3VzLmdldCgpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5tX29m
ZnNldDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiB9CiAKLVByb3Bl
cnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVh
ZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBA
IC05MDcsMzkgKzg2OSwxMCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0s
IFByCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVu
dHJ5LT5hdHRyaWJ1dGVzOwotICAgIHNwZWNpZmljVmFsdWUgPSBlbnRyeS0+c3BlY2lmaWNWYWx1
ZS5nZXQoKTsKICAgICByZXR1cm4gZW50cnktPm9mZnNldDsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6
OmRlc3BlY2lmeUZ1bmN0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsK
LSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9w
ZXJ0eVRhYmxlKCktPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwotICAgIGlmICghZW50cnkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFTU0VSVChlbnRyeS0+c3BlY2lmaWNWYWx1ZSk7
Ci0gICAgZW50cnktPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhWTSYgdm0pCi17Ci0gICAg
RGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5l
Y2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFi
bGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJv
cGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVy
LT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
cHV0U3BlY2lmaWNWYWx1ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcykKIHsKICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xv
Y2ssIHZtLmhlYXApOwogICAgIApAQCAtOTU2LDcgKzg4OSw3IEBAIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWwKIAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9
IHByb3BlcnR5VGFibGUoKS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKIAotICAgIHBy
b3BlcnR5VGFibGUoKS0+YWRkKFByb3BlcnR5TWFwRW50cnkodm0sIHRoaXMsIHJlcCwgbmV3T2Zm
c2V0LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6
OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9w
ZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3Bl
cnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKICAgICAKICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgcmV0dXJuIG5ld09mZnNldDsKQEAgLTEwNjAsNyArOTkzLDYgQEAgdm9p
ZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZQogICAgICAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbik7CiAgICAgfQogICAgIHZp
c2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7Ci0gICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwogCiAg
ICAgaWYgKHRoaXNPYmplY3QtPmlzUGlubmVkUHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAgIEFT
U0VSVCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwpAQCAtMTA4Myw4ICsxMDE1
LDcgQEAgYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZQogICAgICAgICBj
dXJyZW50ID0gcHJvdG90eXBlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUodm0pOwogICAgICAgICAKICAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJyZW50LT5nZXQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsK
ICAgICAgICAgaWYgKCFKU0M6OmlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAKQEAgLTExNDQsMTMgKzEwNzUsOCBAQCB2b2lkIFN0cnVjdHVyZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0YWJsZS0+YmVnaW4oKTsKICAgICAgICAgUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGFibGUtPmVuZCgpOwotICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikK
ICAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgaXRlci0+a2V5LCAiOiIsIHN0YXRpY19jYXN0
PGludD4oaXRlci0+b2Zmc2V0KSk7Ci0gICAgICAgICAgICBpZiAoaXRlci0+c3BlY2lmaWNWYWx1
ZSkgewotICAgICAgICAgICAgICAgIER1bXBDb250ZXh0IGR1bW15Q29udGV4dDsKLSAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIj0+IiwgUmF3UG9pbnRlcihpdGVyLT5zcGVjaWZpY1ZhbHVlLmdl
dCgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHN0cnVj
dHVyZS0+bV9sb2NrLnVubG9jaygpOwogICAgIH0KQEAgLTExNjAsMTAgKzEwODYsNiBAQCB2b2lk
IFN0cnVjdHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIGlmICghc3RydWN0
dXJlLT5tX25hbWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIG91
dC5wcmludChjb21tYSwgc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCAiOiIsIHN0
YXRpY19jYXN0PGludD4oc3RydWN0dXJlLT5tX29mZnNldCkpOwotICAgICAgICBpZiAoc3RydWN0
dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKSB7Ci0gICAgICAgICAgICBEdW1wQ29udGV4
dCBkdW1teUNvbnRleHQ7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIj0+IiwgUmF3UG9pbnRlcihz
dHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCkpKTsKLSAgICAgICAgfQog
ICAgIH0KICAgICAKICAgICBvdXQucHJpbnQoIn0sICIsIEluZGV4aW5nVHlwZUR1bXAoaW5kZXhp
bmdUeXBlKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDEyICsxMTEsMTEgQEAgcHVibGljOgog
CiAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRpc3RpY3MoKTsKIAotICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVy
ZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlLCBQcm9wZXJ0eU9mZnNldCYsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCA9IFB1dFByb3Bl
cnR5U2xvdDo6VW5rbm93bkNvbnRleHQpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwg
U3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFs
dWUsIFByb3BlcnR5T2Zmc2V0Jik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVj
dHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1
ZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlTbG90OjpD
b250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCk7CisgICAgc3RhdGljIFN0
cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJl
bnRseShTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFBy
b3BlcnR5T2Zmc2V0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSog
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVj
dHVyZSogZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlOYW1lKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9u
KFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25h
cnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CkBAIC0xMzgsNyArMTM3LDcgQEAgcHVibGlj
OgogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAKICAgICAvLyBUaGVzZSBzaG91
bGQgYmUgdXNlZCB3aXRoIGNhdXRpb24uICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0
eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0m
LCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0
IHJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAg
IHZvaWQgc2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3Rv
dHlwZSkgeyBtX3Byb3RvdHlwZS5zZXQodm0sIHRoaXMsIHByb3RvdHlwZSk7IH0KICAgICAgICAg
CkBAIC0xODgsOCArMTg3LDYgQEAgcHVibGljOgogICAgIC8vIFdpbGwganVzdCB0aGUgcHJvdG90
eXBlIGNoYWluIGludGVyY2VwdCB0aGlzIHByb3BlcnR5IGFjY2Vzcz8KICAgICBib29sIHByb3Rv
dHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgICAg
IAotICAgIGJvb2wgdHJhbnNpdGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3NwZWNpZmljVmFsdWVJblByZXZpb3VzOyB9Ci0gICAgICAgIAogICAgIFN0cnVj
dHVyZSogcHJldmlvdXNJRCgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC0yNjMsMTAgKzI2MCwxMCBAQCBwdWJsaWM6
CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgIFByb3Bl
cnR5T2Zmc2V0IGdldChWTSYsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lKTsKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
JiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBQcm9wZXJ0eU9mZnNldCBnZXQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRy
aWJ1dGVzKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmlu
Z0ltcGwqIHVpZCk7Ci0gICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3Ry
aW5nSW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1
ZSk7CisgICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CiAKICAgICB2b2lkIHNldEhhc0dldHRlclNldHRl
clByb3BlcnRpZXNXaXRoUHJvdG9DaGVjayhib29sIGlzX19wcm90b19fKQogICAgIHsKQEAgLTI4
Myw5ICsyODAsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiAhSlNDOjppc1ZhbGlkT2Zmc2V0
KG1fb2Zmc2V0KTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGRlc3BlY2lm
eURpY3Rpb25hcnlGdW5jdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7Ci0gICAgdm9pZCBkaXNhYmxl
U3BlY2lmaWNGdW5jdGlvblRyYWNraW5nKCkgeyBzZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291
bnQobWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KTsgfQotCiAgICAgdm9pZCBzZXRFbnVt
ZXJhdGlvbkNhY2hlKFZNJiwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNo
ZSk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oLgogICAgIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUoKTsgLy8gRGVmaW5lZCBpbiBKU1Byb3Bl
cnR5TmFtZUl0ZXJhdG9yLmguCiAgICAgdm9pZCBnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0cnVjdHVy
ZShWTSYsIFByb3BlcnR5TmFtZUFycmF5JiwgRW51bWVyYXRpb25Nb2RlKTsKQEAgLTM2NCwxMyAr
MzU4LDIyIEBAIHB1YmxpYzoKICAgICAgICAgQVNTRVJUKHRyYW5zaXRpb25XYXRjaHBvaW50U2V0
SXNTdGlsbFZhbGlkKCkpOwogICAgICAgICBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0LmFkZCh3
YXRjaHBvaW50KTsKICAgICB9Ci0gICAgICAgIAorICAgIAogICAgIHZvaWQgbm90aWZ5VHJhbnNp
dGlvbkZyb21UaGlzU3RydWN0dXJlKCkgY29uc3Q7CiAgICAgCiAgICAgSW5saW5lV2F0Y2hwb2lu
dFNldCYgdHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0
dXJuIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7CiAgICAgfQorICAgIAorICAgIFdhdGNocG9p
bnRTZXQqIGVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFZNJiwgUHJvcGVy
dHlPZmZzZXQpOworICAgIHZvaWQgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgZW5zdXJlUHJv
cGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQodm0sIG9mZnNldCk7CisgICAgfQorICAgIFdh
dGNocG9pbnRTZXQqIHByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5T2Zm
c2V0KTsKKyAgICB2b2lkIGRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCk7CisgICAg
dm9pZCBkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mLCBQcm9wZXJ0eU9mZnNldCk7CiAK
ICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNoYXBlKCk7CiAgICAg
CkBAIC00MDYsNyArNDA5LDYgQEAgcHVibGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBo
YXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBIYXNSZWFk
T25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsKICAgICBE
RUZJTkVfQklURklFTEQoYm9vbCwgaGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIEhhc05vbkVu
dW1lcmFibGVQcm9wZXJ0aWVzLCAxLCA1KTsKICAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQs
IGF0dHJpYnV0ZXNJblByZXZpb3VzLCBBdHRyaWJ1dGVzSW5QcmV2aW91cywgMTQsIDYpOwotICAg
IERFRklORV9CSVRGSUVMRCh1bnNpZ25lZCwgc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50LCBT
cGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQsIDIsIDIwKTsKICAgICBERUZJTkVfQklURklFTEQo
Ym9vbCwgcHJldmVudEV4dGVuc2lvbnMsIFByZXZlbnRFeHRlbnNpb25zLCAxLCAyMik7CiAgICAg
REVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFRyYW5zaXRpb24sIERpZFRyYW5zaXRpb24sIDEsIDIz
KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgc3RhdGljRnVuY3Rpb25zUmVpZmllZCwgU3Rh
dGljRnVuY3Rpb25zUmVpZmllZCwgMSwgMjQpOwpAQCAtNDIxLDcgKzQyMyw3IEBAIHByaXZhdGU6
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsK
ICAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
SW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFBy
b3BlcnR5T2Zmc2V0Jik7CiAKICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzdHJ1Y3R1cmUg
dGhhdCBoYXMgYSB1c2FibGUgcHJvcGVydHkgdGFibGUsIHRoYXQgcHJvcGVydHkgdGFibGUsCiAg
ICAgLy8gYW5kIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3
ZSBnb3QgdG8gaXQuIElmIGl0IHJldHVybnMgYQpAQCAtNDMxLDE5ICs0MzMsMTYgQEAgcHJpdmF0
ZToKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQpOwogCi0gICAgUHJvcGVydHlPZmZzZXQgcHV0
U3BlY2lmaWNWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQ
cm9wZXJ0eU5hbWUpOwogCiAgICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihWTSYs
IFByb3BlcnR5TmFtZSk7Ci0gICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0mKTsKLQog
ICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFBy
b3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiwgU3RydWN0
dXJlKiBvd25lcik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mLCBT
dHJ1Y3R1cmUqIG93bmVyKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcoVk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtl
UHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNv
cHlQcm9wZXJ0eVRhYmxlKFZNJik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwKFZNJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3NhcnkoVk0mIHZtLCBEZWZlckdDJikKICAgICB7CkBAIC01MDcsOCArNTA2LDYgQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgY29uc3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAg
IHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQg
PSA1MTI7CiAKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRo
cmFzaENvdW50ID0gMzsKLSAgICAKICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIHByb3Blcmx5IGFs
aWduZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgJ1N0cnVjdHVyZScKICAgICAvLyBwYXJ0IG9m
IHRoZSBvYmplY3QuCiAgICAgU3RydWN0dXJlSURCbG9iIG1fYmxvYjsKQEAgLTUyMSw3ICs1MTgs
NiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFycmllcjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVE
YXRhOwogCiAgICAgUmVmUHRyPFN0cmluZ0ltcGw+IG1fbmFtZUluUHJldmlvdXM7Ci0gICAgV3Jp
dGVCYXJyaWVyPEpTQ2VsbD4gbV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsKIAogICAgIGNvbnN0
IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDcyNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDkgKzEwMiw3IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OmdldChWTSYKIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRs
eShWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdu
b3JlZDsKLSAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWVJZ25vcmVkOwotICAgIHJldHVybiBnZXRD
b25jdXJyZW50bHkoCi0gICAgICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZp
Y1ZhbHVlSWdub3JlZCk7CisgICAgcmV0dXJuIGdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRy
aWJ1dGVzSWdub3JlZCk7CiB9CiAKIGlubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdI
ZWFkZXIoY29uc3QgSlNDZWxsKiBjZWxsKSBjb25zdApAQCAtMjIzLDYgKzIyMSwzMSBAQCBBTFdB
WVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlCiAgICAgcmV0dXJuIG1fcHJvcGVy
dHlUYWJsZVVuc2FmZTsKIH0KIAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJv
cGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGlmIChMSUtFTFkoIWhhc1JhcmVE
YXRhKCkpKQorICAgICAgICByZXR1cm47CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3BlcnR5
V2F0Y2hwb2ludE1hcCogbWFwID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRT
ZXRzLmdldCgpOworICAgIGlmIChMSUtFTFkoIW1hcCkpCisgICAgICAgIHJldHVybjsKKyAgICBX
YXRjaHBvaW50U2V0KiBzZXQgPSBtYXAtPmdldChvZmZzZXQpOworICAgIGlmIChMSUtFTFkoIXNl
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBzZXQtPmZpcmVBbGwoIlByb3BlcnR5IGRpZCBnZXQg
cmVwbGFjZWQiKTsKK30KKworaW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJvcGVy
dHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKCFoYXNSYXJlRGF0
YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsK
KyAgICBTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSByYXJl
RGF0YSgpLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYgKCFtYXAp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBtYXAtPmdldChvZmZzZXQpOwor
fQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5
KCkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9wZXJ0
eVRhYmxlVW5zYWZlLmdldCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMTcwNzI0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBTdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFy
ZURhdGE6OmNyCiAgICAgcmV0dXJuIHJhcmVEYXRhOwogfQogCit2b2lkIFN0cnVjdHVyZVJhcmVE
YXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVS
YXJlRGF0YSo+KGNlbGwpLT5TdHJ1Y3R1cmVSYXJlRGF0YTo6flN0cnVjdHVyZVJhcmVEYXRhKCk7
Cit9CisKIFN0cnVjdHVyZVJhcmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0sIFN0cnVj
dHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVJhcmVEYXRhU3Ry
dWN0dXJlLmdldCgpKQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShyZXZpc2lvbiAxNzA3MjQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0y
OSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC00MCw2ICs0MSwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJl
RGF0YSA6IHB1YmxpYyBKU0NlbGwgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZVJhcmVE
YXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUqKTsKIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5l
ZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFs
U3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCiAg
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBKU1ZhbHVlIHByb3RvdHlwZSk7CkBAIC01MywxMCArNTgsMTIgQEAgcHVibGljOgogCiAgICAg
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOwogICAgIHZvaWQgc2V0
RW51bWVyYXRpb25DYWNoZShWTSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlO
YW1lSXRlcmF0b3IqIHZhbHVlKTsKLQorICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAK
IHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZTsKKyAgICAKICAgICBTdHJ1Y3R1
cmVSYXJlRGF0YShWTSYsIFN0cnVjdHVyZSopOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0
dXJlRmxhZ3M7CkBAIC02NCw2ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0
cnVjdHVyZT4gbV9wcmV2aW91czsKICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0
VG9TdHJpbmdWYWx1ZTsKICAgICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4g
bV9lbnVtZXJhdGlvbkNhY2hlOworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9m
ZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+
LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJv
cGVydHlXYXRjaHBvaW50TWFwOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9p
bnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25z
dGFudC1nbG9iYWwtcHJvcGVydHkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0
YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitm
dW5jdGlvbiBmb28ocCkgeworICAgIGlmIChwKQorICAgICAgICBNYXRoID0ge3NpbjogZnVuY3Rp
b24oKSB7IHJldHVybiA0MjsgfSwgUEk6IDQzLCBhYnM6IE1hdGguYWJzfTsKK30KKworbm9Jbmxp
bmUoZm9vKTsKKworKGZ1bmN0aW9uKCkgeworICAgIHZhciBuID0gMTAwMDAwOworICAgIHZhciBt
ID0gMTAwOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsg
KytpKSB7CisgICAgICAgIGZvbyhpID09IG4gLSBtKTsKKyAgICAgICAgcmVzdWx0ICs9IE1hdGgu
c2luKE1hdGguUEkpOworICAgIH0KKyAgICBpZiAoTWF0aC5hYnMocmVzdWx0IC0gbSAqIDQyKSA+
IDFlLTgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30p
KCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0
YW50LXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIgQEAKK3ZhciBvID0ge2Y6e2Y6e2Y6e2Y6e2Y6
e2Y6e2Y6NDJ9fX19fX19OworCitmdW5jdGlvbiBmb28ocCkgeworICAgIGlmIChwKQorICAgICAg
ICBvLmYuZi5mLmYuZi5mID0ge2Y6NTN9OworfQorCitub0lubGluZShmb28pOworCisoZnVuY3Rp
b24oKSB7CisgICAgdmFyIG4gPSAxMDAwMDA7CisgICAgdmFyIG0gPSAxMDA7CisgICAgdmFyIHJl
c3VsdCA9IDA7CisgICAgCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAg
ICAgZm9vKGkgPT0gbiAtIG0pOworICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOwor
ICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0ICE9IChuIC0gbSkgKiA0MiArIG0gKiA1MykKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFj
ZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBs
YWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHkt
cmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAordmFyIG8gPSB7Zjo0Mn07CisKK2Z1bmN0aW9uIGZv
byhwLCBvLCB2KSB7CisgICAgaWYgKHApCisgICAgICAgIG8uZiA9IHY7Cit9CisKK2Z1bmN0aW9u
IGJhcigpIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUo
YmFyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgIGZvbyhmYWxzZSk7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBmb28odHJ1ZSwge30sIDQyKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgIGZvbyh0cnVlLCBvLCA0Mik7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7
CisgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfQorCitmb28odHJ1ZSwgbywgNTMpOwordmFyIHJlc3VsdCA9IGJhcigp
OworaWYgKHJlc3VsdCAhPSA1MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5k
OiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9q
aXQtY2FjaGUtcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQt
Y2FjaGUtcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1j
YWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwIEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rp
b24gZm9vKHAsIHYpIHsKKyAgICBpZiAocCkKKyAgICAgICAgby5mID0gdjsKK30KKworZnVuY3Rp
b24gYmFyKCkgeworICAgIHJldHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7Citub0lubGlu
ZShiYXIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpCisgICAgZm9vKGZhbHNlKTsK
KworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgIGZvbyh0cnVlLCA0Mik7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7
CisgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfQorCitmb28odHJ1ZSwgNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOwor
aWYgKHJlc3VsdCAhPSA1MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAi
ICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQt
cHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNj
b3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xv
YmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDI2IEBACitmdW5jdGlvbiBmb28ocCwgdikgeworICAgIGlmIChwKQorICAgICAgICBnbG9i
YWwgPSB2OworfQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKwor
bm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7
ICsraSkKKyAgICBmb28oZmFsc2UpOworCit2YXIgdmFsdWUgPSA0MjsKK2Zvbyh0cnVlLCB2YWx1
ZSk7Cit2YXIgbiA9IDEwMDAwMDsKK3ZhciBtID0gMTAwOworZm9yICh2YXIgaSA9IDA7IGkgPCBu
OyArK2kpIHsKKyAgICBpZiAoaSA9PSBuIC0gbSkKKyAgICAgICAgZm9vKHRydWUsIHZhbHVlID0g
NTMpOworICAgIHZhciByZXN1bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IHZhbHVlKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IG9uIGl0ZXJhdGlvbiAiICsgaSArICIgZ290OiAiICsgcmVz
dWx0OworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1j
YWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LWNh
Y2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1j
YWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rp
b24gZm9vKHYpIHsKKyAgICBvLmYgPSB2OworfQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0
dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK2Zvbyg0Mik7
Citmb28oNDIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFy
IHJlc3VsdCA9IGJhcigpOworICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworZm9vKDUzKTsKK3ZhciByZXN1bHQg
PSBiYXIoKTsKK2lmIChyZXN1bHQgIT0gNTMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvbGxpbnQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRh
dGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9s
bGludC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQt
cHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAorZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBnbG9iYWwg
PSB2OworfQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9J
bmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK3ZhciB2YWx1ZSA9IDQyOworZm9vKHZhbHVl
KTsKK3ZhciBuID0gMTAwMDAwOwordmFyIG0gPSAxMDA7Citmb3IgKHZhciBpID0gMDsgaSA8IG47
ICsraSkgeworICAgIGlmIChpID09IG4gLSBtKQorICAgICAgICBmb28odmFsdWUgPSA1Myk7Cisg
ICAgdmFyIHJlc3VsdCA9IGJhcigpOworICAgIGlmIChyZXN1bHQgIT0gdmFsdWUpCisgICAgICAg
IHRocm93ICJFcnJvcjogb24gaXRlcmF0aW9uICIgKyBpICsgIiBnb3Q6ICIgKyByZXN1bHQ7Cit9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8t
c2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12YWx1ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBlYXQtcHV0
LXRvLXNjb3BlLWdsb2JhbC13aXRoLXNhbWUtdmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpz
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBl
YXQtcHV0LXRvLXNjb3BlLWdsb2JhbC13aXRoLXNhbWUtdmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlk
YXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGZvbyh2KSB7
CisgICAgZ2xvYmFsID0gdjsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBnbG9i
YWw7Cit9CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCit2YXIgdmFsdWUgPSA0
MjsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBmb28odmFsdWUpOwordmFyIG4g
PSAxMDAwMDA7Cit2YXIgbSA9IDEwMDsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7Cisg
ICAgaWYgKGkgPT0gbiAtIG0pCisgICAgICAgIGZvbyh2YWx1ZSA9IDUzKTsKKyAgICB2YXIgcmVz
dWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAhPSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBvbiBpdGVyYXRpb24gIiArIGkgKyAiIGdvdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0
YW50LWdsb2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLWNvbnN0
YW50LWdsb2JhbC1wcm9wZXJ0eQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25z
dGFudC1nbG9iYWwtcHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHku
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVy
dHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0
YW50LXByb3BlcnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBA
CitKU1JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2Jh
bC1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICByZXN1bHQgKz0g
TWF0aC5zaW4oTWF0aC5QSSk7CisgICAgfQorICAgIGlmIChNYXRoLmFicyhyZXN1bHQpID4gMWUt
OCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50
LXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAordmFyIG8gPSB7Zjp7Zjp7Zjp7Zjp7Zjp7
Zjp7Zjo0Mn19fX19fX07CisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG4gPSAxMDAwMDAwOworICAg
IHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKQorICAgICAg
ICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIAorICAgIGlmIChyZXN1bHQgIT0gbiAq
IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9KSgp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234419</attachid>
            <date>2014-07-04 13:00:24 -0700</date>
            <delta_ts>2014-07-04 13:35:57 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>129924</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNSBA
QAorMjAxNC0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEluZmVyIGltbXV0YWJsZSBvYmplY3QgcHJvcGVydGllcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NTY3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgd2F5IG9mIGluZmVycmluZyBpbW11dGFibGUgb2JqZWN0IHByb3BlcnRpZXMuIEEg
cHJvcGVydHkgaXMgc2FpZCB0bworICAgICAgICBiZSBpbW11dGFibGUgaWYgYWZ0ZXIgaXRzIGNy
ZWF0aW9uIChpLmUuIHRoZSB0cmFuc2l0aW9uIHRoYXQgY3JlYXRlcyBpdCksIHdlIG5ldmVyCisg
ICAgICAgIG92ZXJ3cml0ZSBpdCAoaS5lLiByZXBsYWNlIGl0KSBvciBkZWxldGUgaXQuIEltbXV0
YWJpbGl0eSBpcyBhIHByb3BlcnR5IG9mIGFuICJvd24KKyAgICAgICAgcHJvcGVydHkiIC0gc28g
aWYgd2Ugc2F5IHRoYXQgImYiIGlzIGltbXV0YWJsZSBhdCAibyIgdGhlbiB3ZSBhcmUgaW1wbHlp
bmcgdGhhdCAibyIgaGFzICJmIgorICAgICAgICBkaXJlY3RseSBhbmQgbm90IG9uIGEgcHJvdG90
eXBlLiBJbW11dGFiaWxpdHkgY2FuIGJlIHVzZWQgdG8gY29uc3RhbnQtZm9sZCBhY2Nlc3NlcyB0
bworICAgICAgICBvYmplY3RzIGF0IERGRy10aW1lLiBUaGUgREZHIG5lZWRzIHRvIHByb3ZlIHRo
ZSBmb2xsb3dpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgYWNjZXNzOgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgYmFzZSBvZiB0aGUgYWNjZXNzIG11c3QgYmUgYSBjb25zdGFudCBvYmplY3QgcG9p
bnRlci4KKyAgICAgICAgCisgICAgICAgIC0gQSBjaGVjayAob3Igd2F0Y2hwb2ludCkgbXVzdCBo
YXZlIGJlZW4gZW1pdHRlZCBwcm92aW5nIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBzdHJ1Y3R1cmUK
KyAgICAgICAgICB0aGF0IGFsbG93cyBsb2FkaW5nIHRoZSBwcm9wZXJ0eSBpbiBxdWVzdGlvbi4K
KyAgICAgICAgCisgICAgICAgIC0gVGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0IG9mIHRo
ZSBwcm9wZXJ0eSBpbiB0aGUgc3RydWN0dXJlIHRoYXQgdGhlIG9iamVjdCBoYXMgcmlnaHQKKyAg
ICAgICAgICBub3cgKG9yIHRoZSBzdHJ1Y3R1cmUgeW91IGNoZWNrZWQgLSBkb2Vzbid0IG1hdHRl
ciB3aGljaCkgaXMgc3RpbGwgdmFsaWQgYW5kIHdlIGFkZCBhCisgICAgICAgICAgd2F0Y2hwb2lu
dCB0byBpdCBsYXppbHkuCisgICAgICAgIAorICAgICAgICBUaGUgcmVwbGFjZW1lbnQgd2F0Y2hw
b2ludCBzZXQgaXMgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSB0aGF0IGFueSBhY2Nlc3MgdG8gdGhl
IHByb3BlcnR5IGlzCisgICAgICAgIGNhY2hlZC4gQSBwdXQgY2FjaGUgd2lsbCBjcmVhdGUsIGFu
ZCBpbW1lZGlhdGVseSBpbnZhbGlkYXRlLCB0aGUgd2F0Y2hwb2ludCBzZXQuIEEgZ2V0IGNhY2hl
CisgICAgICAgIHdpbGwgY3JlYXRlIHRoZSB3YXRjaHBvaW50IHNldCBhbmQgbWFrZSBpdCBzdGFy
dCB3YXRjaGluZy4gQW55IG5vbi1jYWNoZWQgcHV0IGFjY2VzcyB3aWxsCisgICAgICAgIGludmFs
aWRhdGUgdGhlIHdhdGNocG9pbnQgc2V0IGlmIG9uZSBoYWQgYmVlbiBjcmVhdGVkLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBhcHByb2FjaCBhdm9pZHMgY3JlYXRpbmcgcmVwbGFjZW1lbnQgd2F0
Y2hwb2ludCBzZXRzIHVudGlsIHRoZXkgYXJlIGtub3duIHRvIGJlCisgICAgICAgIG5lY2Vzc2Fy
eS4gVGhlIG51bWJlciBvZiBzdWNoIHNldHMgYXQgYW55IHRpbWUgaXMgYXN5bXB0b3RpY2FsbHkg
Ym91bmRlZCBieSB0aGUgbnVtYmVyIG9mCisgICAgICAgIGlubGluZSBjYWNoZXMuIFNvLCBmb3Ig
ZXhhbXBsZSwgZGljdGlvbmFyeSBwcm9wZXJ0aWVzIHdpbGwgdHlwaWNhbGx5IG5vdCBoYXZlIHRo
ZXNlCisgICAgICAgIHdhdGNocG9pbnQgc2V0cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW5m
ZXJlbmNlIGNvbXBsZXRlbHkgc3Vic3VtZXMgdGhlIHByZXZpb3VzbHkgInNwZWNpZmljVmFsdWUi
IGNvbnN0YW50IGluZmVyZW5jZS4gVGhhdAorICAgICAgICBhcHByb2FjaCByZXF1aXJlZCBjcmVh
dGluZyBuZXcgc3RydWN0dXJlcywgd2hpY2ggdGhpcyBvbmUgZG9lcyBub3QuIEl0IGFsc28gZGlk
bid0IHdvcmsgZm9yCisgICAgICAgIGFueSBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCB3ZXJlbid0IGVh
Z2VybHkgcmVjb2duaXplZCBhcyBjYW5kaWRhdGVzIGZvciBjb25zdGFudCBpbmZlcmVuY2UuCisg
ICAgICAgIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIG9sZCBzcGVjaWZp
Y1ZhbHVlIGNvbnN0YW50IGluZmVyZW5jZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBz
cGVlZC11cCBvbiBldmVyeXRoaW5nLiBkYXRlLWZvcm1hdC14cGFyYiBhbmQgYm90aCBTdW5TcGlk
ZXIvcmF5dHJhY2UgYW5kCisgICAgICAgIFY4L3JheXRyYWNlIHNlZW0gdG8gYmUgdGhlIGJpZ2dl
c3Qgd2lubmVycyBhbW9uZyB0aGUgbWFjcm9iZW5jaG1hcmtzLiBNYW55IG9mIG91cgorICAgICAg
ICBtaWNyb2JlbmNobWFya3Mgc2VlIHZlcnkgbGFyZ2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRz
LgorCisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHA6CisgICAgICAgIChK
U0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5dGVjb2RlL0dl
dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJv
bUxMSW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICog
Ynl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFu
dDo6R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0
b3I9KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAg
ICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5
dGVjb2RlL0dldEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50Ojph
bHRlcm5hdGVCYXNlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OnNwZWNpZmljVmFs
dWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwOgorICAg
ICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAo
SlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0p
OgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c2V0dGVyKToKKyAgICAgICAgKEpTQzo6
UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5
SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpzcGVjaWZpY1ZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50LmNwcDoKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3cpOgorICAgICAgICAoSlNDOjpXYXRjaHBv
aW50U2V0OjpmaXJlQWxsKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50
Lmg6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAqIGRm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmVtaXRHZXRCeU9m
ZnNldCk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkZpeHVwUGhhc2U6OmlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZSk6CisgICAgICAgIChK
U0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2FuT3B0aW1pemVTdHJpbmdPYmplY3RBY2Nlc3MpOgorICAg
ICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdl
dENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp2aXNpdENoaWxk
cmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHV2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6V2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TXVsdGlHZXRCeU9mZnNldCk6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAg
ICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNj
ZXNzKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlkU3R1Yik6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUNhY2hlUHV0QnlJRCk6CisgICAgICAg
IChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAgICAgICAqIGxsaW50L0xMSW50U2xvd1Bh
dGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1dfUEFUSF9ERUNMKToKKyAg
ICAgICAgKEpTQzo6TExJbnQ6OnB1dFRvU2NvcGVDb21tb24pOgorICAgICAgICAqIHJ1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6OkNvbW1vblNsb3dQYXRoczo6dHJ5Q2Fj
aGVQdXRUb1Njb3BlR2xvYmFsKToKKyAgICAgICAgKiBydW50aW1lL0ludGVuZGVkU3RydWN0dXJl
Q2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJbnRl
cmNlcHRTdG9yZVRvKToKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuY3BwOgorICAgICAg
ICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6Cisg
ICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpw
dXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcik6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgIChKU0M6
OkpTT2JqZWN0OjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAoSlNDOjpnZXRDYWxsYWJsZU9iamVj
dFNsb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0UHJvcGVydHlTcGVj
aWZpY1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0Lmg6CisgICAg
ICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Z2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmlubGluZUdldE93blBy
b3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRPd25EYXRhUHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6cHV0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6Z2V0Q2FsbGFibGVPYmplY3Qp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNTY29wZS5jcHA6CisgICAgICAgIChKU0M6
OmFic3RyYWN0QWNjZXNzKToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxl
Lmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwRW50cnk6OlByb3BlcnR5TWFwRW50cnkpOgor
ICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5KToKKyAgICAgICAgKiBydW50aW1lL1By
b3BlcnR5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjbG9uZSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6U3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2
ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQ
cm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFsbG9jYXRl
UmFyZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdGFydFdhdGNo
aW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRp
ZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3Rh
cnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0Q29uY3VycmVu
dGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRv
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpzdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5
Rm9yRW50aXJlQ2hhaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRyYW5zaXRpb25EaWRJ
bnZvbHZlU3BlY2lmaWNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
ZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZyk6IERlbGV0ZWQuCisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0Q29u
Y3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50
U2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmNwcDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmRlc3Ryb3kpOgorICAgICAgICAqIHJ1bnRpbWUvU3Ry
dWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQt
Z2xvYmFsLXByb3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5NYXRoLnNpbik6CisgICAg
ICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0
eS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9qaXQt
Y2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0
ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZvbGQtdGhl
bi1pbnZhbGlkYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgor
ICAgICAgICAqIHRlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRj
aHBvaW50LWludmFsaWRhdGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJh
cik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNo
ZS1nZXQtYW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6
CisgICAgICAgIChiYXIpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2Nv
cGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qczogQWRkZWQuCisgICAgICAg
IChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvcmVwZWF0LXB1
dC10by1zY29wZS1nbG9iYWwtd2l0aC1zYW1lLXZhbHVlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5q
czogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKwogMjAxNC0wNy0wMSAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFtmdGxvcHRdIEFsbG9j
YXRlIGEgbmV3IEdldHRlclNldHRlciBpZiB3ZSBjaGFuZ2UgdGhlIHZhbHVlIG9mIGFueSBvZiBp
dHMgZW50cmllcyBvdGhlciB0aGFuIHdoZW4gdGhleSB3ZXJlIHByZXZpb3VzbHkgbnVsbCwgc28g
dGhhdCBpZiB3ZSBjb25zdGFudC1pbmZlciBhbiBhY2Nlc3NvciBzbG90IHRoZW4gd2UgaW1tZWRp
YXRlbHkgZ2V0IHRoZSBmdW5jdGlvbiBjb25zdGFudCBmb3IgZnJlZQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkocmV2
aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhH
ZXRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw2IEBAIENvbXBsZXhHZXRT
dGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHUKICAgICBDb21wbGV4R2V0U3RhdHVzIHJlc3Vs
dDsKICAgICByZXN1bHQubV9raW5kID0gSW5saW5lYWJsZTsKICAgICAKLSAgICBKU0NlbGwqIHNw
ZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKGNoYWluKSB7CiAgICAgICAgIHJlc3VsdC5tX2No
YWluID0gYWRvcHRSZWYobmV3IEludGVuZGVkU3RydWN0dXJlQ2hhaW4oCiAgICAgICAgICAgICBw
cm9maWxlZEJsb2NrLCBoZWFkU3RydWN0dXJlLCBjaGFpbiwgY2hhaW5Db3VudCkpOwpAQCAtNjUs
MTggKzYzLDEyIEBAIENvbXBsZXhHZXRTdGF0dXMgQ29tcGxleEdldFN0YXR1czo6Y29tcHUKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChjdXJyZW50T2JqZWN0LCBjdXJyZW50T2JqZWN0KTsKICAgICAg
ICAgCiAgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGN1cnJlbnRTdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSgKLSAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIHJlc3VsdC5t
X2F0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwotICAgICAgICBpZiAoY3VycmVudFN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAgICAg
ICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGhlYWRTdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIHJl
c3VsdC5tX2F0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOwotICAgICAgICBpZiAoaGVhZFN0cnVj
dHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAg
ICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIHJlc3VsdC5tX2F0dHJpYnV0ZXMp
OwogICAgIH0KICAgICAKLSAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1
ZTsKLSAgICAKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQocmVzdWx0Lm1fb2Zmc2V0KSkKICAgICAg
ICAgcmV0dXJuIHRha2VzU2xvd1BhdGgoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDc4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODUsMTUgKzg1LDEyIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb20KICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlv
biwgZmFsc2UpOwogCiAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0gICAgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCBhdHRy
aWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOworICAgICAgICAqcHJvZmlsZWRC
bG9jay0+dm0oKSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zm
c2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24s
IGZhbHNlKTsKICAgICAKLSAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhTaW1wbGUsIGZhbHNlLCBH
ZXRCeUlkVmFyaWFudChTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgb2Zmc2V0LCBzcGVjaWZpY1Zh
bHVlKSk7CisgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoU2ltcGxlLCBmYWxzZSwgR2V0QnlJZFZh
cmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNldCkpOwogI2Vsc2UKICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7CiAjZW5kaWYKQEAgLTE1Niwx
OCArMTUzLDEzIEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHko
KSkKICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUp
OwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICAgICAgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlOwogICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50OwogICAgICAgICB2
YXJpYW50Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAg
ICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCwgc3BlY2lmaWNW
YWx1ZSk7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCBhdHRyaWJ1dGVz
SWdub3JlZCk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldCh2YXJpYW50Lm1fb2Zmc2V0KSkK
ICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKHNsb3dQYXRoU3RhdGUsIHRydWUpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAg
ICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKLSAgICAgICAgCiAgICAgICAgIHZhcmlhbnQubV9zdHJ1
Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7Ci0gICAgICAgIHZhcmlhbnQubV9zcGVjaWZpY1ZhbHVl
ID0gSlNWYWx1ZShzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1
bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRBcHBl
bmQsIGRpZEFwcGVuZCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0yMTIsOCArMjA0LDcg
QEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2
YXJpYW50KAotICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29t
cGxleEdldFN0YXR1cy5vZmZzZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0
YXR1cy5zcGVjaWZpY1ZhbHVlKCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKKyAgICAgICAg
ICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zm
c2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwKICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAg
ICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKQEAgLTI5NywxNiArMjg4LDEz
IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAg
IHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAKICAgICAgICAg
dW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAg
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2
bSwgdWlkLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRl
cyk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgcmV0
dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7IC8vIEl0J3MgcHJvYmFibHkgYSBwcm90
b3R5cGUgbG9va3VwLiBHaXZlIHVwIG9uIGxpZmUgZm9yIG5vdywgZXZlbiB0aG91Z2ggd2UgY291
bGQgdG90YWxseSBiZSB3YXkgc21hcnRlciBhYm91dCBpdC4KICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikKICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE1ha2VzQ2Fs
bHMpOyAvLyBXZSBjb3VsZCBiZSBzbWFydGVyIGhlcmUsIGxpa2Ugc3RyZW5naHQtcmVkdWNpbmcg
dGhpcyB0byBhIENhbGwuCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQot
ICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CiAgICAgICAgIAotICAgICAgICBpZiAoIXJl
c3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0LCBzcGVj
aWZpY1ZhbHVlKSkpCisgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQoR2V0QnlJZFZh
cmlhbnQoc3RydWN0dXJlLCBvZmZzZXQpKSkKICAgICAgICAgICAgIHJldHVybiBHZXRCeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAkocmV2aXNpb24gMTcwNzg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDE1IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogR2V0
QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3Ry
dWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSwK
KyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0LAogICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogICAgIDogbV9zdHJ1Y3R1cmVT
ZXQoc3RydWN0dXJlU2V0KQogICAgICwgbV9hbHRlcm5hdGVCYXNlKG51bGxwdHIpCi0gICAgLCBt
X3NwZWNpZmljVmFsdWUoc3BlY2lmaWNWYWx1ZSkKICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAg
ICAsIG1fY2FsbExpbmtTdGF0dXMoc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSkKIHsKICAgICBp
ZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKICAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBpbnZh
bGlkT2Zmc2V0KTsKLSAgICAgICAgQVNTRVJUKCFzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgQVNT
RVJUKCFjaGFpbik7CiAgICAgfQogICAgIApAQCAtNjYsNyArNjQsNiBAQCBHZXRCeUlkVmFyaWFu
dCYgR2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9yCiAgICAgbV9zdHJ1Y3R1cmVTZXQgPSBvdGhlci5t
X3N0cnVjdHVyZVNldDsKICAgICBtX2NvbnN0YW50Q2hlY2tzID0gb3RoZXIubV9jb25zdGFudENo
ZWNrczsKICAgICBtX2FsdGVybmF0ZUJhc2UgPSBvdGhlci5tX2FsdGVybmF0ZUJhc2U7Ci0gICAg
bV9zcGVjaWZpY1ZhbHVlID0gb3RoZXIubV9zcGVjaWZpY1ZhbHVlOwogICAgIG1fb2Zmc2V0ID0g
b3RoZXIubV9vZmZzZXQ7CiAgICAgaWYgKG90aGVyLm1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAg
IG1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1ha2VfdW5pcXVlPENhbGxMaW5rU3RhdHVzPigqb3Ro
ZXIubV9jYWxsTGlua1N0YXR1cyk7CkBAIC04Niw5ICs4Myw2IEBAIGJvb2wgR2V0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBpZiAoIWFyZUNvbXBhdGlibGUobV9jb25zdGFu
dENoZWNrcywgb3RoZXIubV9jb25zdGFudENoZWNrcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAKLSAgICBpZiAobV9zcGVjaWZpY1ZhbHVlICE9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZSkK
LSAgICAgICAgbV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOwotCiAgICAgbWVyZ2VJbnRvKG90
aGVyLm1fY29uc3RhbnRDaGVja3MsIG1fY29uc3RhbnRDaGVja3MpOwogICAgIG1fc3RydWN0dXJl
U2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAKQEAgLTExMiw4ICsxMDYsNiBA
QCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgICJbIiwg
bGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7CiAgICAg
aWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2Ug
PSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7Ci0gICAg
aWYgKHNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgb3V0LnByaW50KCIsIHNwZWNpZmljVmFsdWUg
PSAiLCBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSk7CiAgICAgb3V0LnByaW50
KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykKICAg
ICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAkocmV2
aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRW
YXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDcgQEAgc3RydWN0IER1bXBDb250
ZXh0OwogY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJpYW50
KAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNl
dCgpLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LCBKU1Zh
bHVlIHNwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCksCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IGludmFsaWRPZmZzZXQsCiAgICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNo
YWluID0gbnVsbHB0ciwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBj
YWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAgIApAQCAtNTgsNyArNTcsNiBAQCBwdWJsaWM6
CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVyZVNl
dDsgfQogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50Q2hl
Y2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNrczsgfQogICAgIEpTT2JqZWN0KiBh
bHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOyB9Ci0gICAgSlNW
YWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9CiAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAg
ICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxM
aW5rU3RhdHVzLmdldCgpOyB9CiAgICAgCkBAIC03Myw3ICs3MSw2IEBAIHByaXZhdGU6CiAgICAg
U3RydWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OwogICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3IgbV9jb25zdGFudENoZWNrczsKICAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOwot
ICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0
OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRT
dGF0dXMuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw4ICsyNTQsOCBA
QCBQdXRCeUlkU3RhdHVzIFB1dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2tlciwgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhp
dFNpdGVEYXRhKSk7CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2
YXJpYW50ID0gUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdHVyZSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5z
cGVjaWZpY1ZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVz
LmNoYWluKCksIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3Rh
dHVzLmNoYWluKCksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtT
dGF0dXMpKTsKICAgICAgICAgICAgICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KQEAgLTMzNCwxOSArMzM0LDI0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOwogICAgIAogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBK
U0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFs
dWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1
cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQo
b2Zmc2V0KSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikK
ICAgICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKIAogICAg
ICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiAoQWNjZXNzb3IgfCBSZWFkT25seSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAg
ICBpZiAoc3BlY2lmaWNWYWx1ZSkgewotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdGhlIFB1
dEJ5SWQgc2xvdyBwYXRoIHRvIHZlcmlmeSB0aGF0IHdlJ3JlIHN0b3JpbmcgdGhlIHJpZ2h0IHZh
bHVlIGludG8KLSAgICAgICAgICAgICAgICAvLyB0aGUgc3BlY2lhbGl6ZWQgc2xvdC4KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVy
ZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAg
IGlmICghcmVwbGFjZVNldCB8fCByZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFdoZW4gdGhpcyBleGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwg
dGhpcyByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0
IG1lYW5zIHRoYXQgIHRoaXMgaGFzIHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29t
ZXRoaW5nIGZpc2h5IGlzCisgICAgICAgICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNh
bm5vdCBjcmVhdGUgb3IgZmlyZSB0aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVu
dAorICAgICAgICAgICAgICAgIC8vIEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRv
IGRvIHRoaXMsIHdlJ2QgbmVlZCB0byBoYXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAg
ICAgLy8gU28sIGJldHRlciBsZWF2ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAg
ICAgICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFy
aWFudChQdXRCeUlkVmFyaWFudDo6cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAg
ICAgY29udGludWU7CkBAIC0zODQsMjIgKzM4OSw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgfQogICAgIAogICAgICAgICAvLyBXZSBvbmx5IG9w
dGltaXplIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlv
biBpcyBjYWNoZWQgdG8uCi0gICAgICAgIC8vIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBhbGxv
d3MgdXMgdG8gZ3VhcmQgYWdhaW5zdCBhIHRyYW5zaXRpb24gd2l0aCBhIHNwZWNpZmljCi0gICAg
ICAgIC8vIHZhbHVlLgotICAgICAgICAvLwotICAgICAgICAvLyAtIElmIHdlJ3JlIHN0b3Jpbmcg
YSB2YWx1ZSB0aGF0IGNvdWxkIGJlIHNwZWNpZmljOiB0aGlzIHdvdWxkIG9ubHkgYmUgYSBwcm9i
bGVtIGlmCi0gICAgICAgIC8vICAgdGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBz
cGVjaWZpYyB2YWx1ZSBhbHJlYWR5LCBzaW5jZSBpZiBpdCBkaWRuJ3QsCi0gICAgICAgIC8vICAg
dGhlbiB3ZSB3b3VsZCBiZWhhdmUgImFzIGlmIiB3ZSB3ZXJlIG5vdCBzdG9yaW5nIGEgc3BlY2lm
aWMgdmFsdWUuIElmIGl0IGRpZAotICAgICAgICAvLyAgIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwg
dGhlbiB3ZSdsbCBrbm93IC0gdGhlIGZhY3QgdGhhdCB3ZSBwYXNzIDAgZm9yCi0gICAgICAgIC8v
ICAgc3BlY2lmaWNWYWx1ZSB3aWxsIHRlbGwgdXMuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0g
SWYgd2UncmUgbm90IHN0b3JpbmcgYSB2YWx1ZSB0aGF0IGNvdWxkIGJlIHNwZWNpZmljOiBhZ2Fp
biwgdGhpcyB3b3VsZCBvbmx5IGJlIGEKLSAgICAgICAgLy8gICBwcm9ibGVtIGlmIHRoZSBleGlz
dGluZyB0cmFuc2l0aW9uIGRpZCBoYXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNoIHdlIGNoZWNr
IGZvcgotICAgICAgICAvLyAgIGJ5IHBhc3NpbmcgMCBmb3IgdGhlIHNwZWNpZmljVmFsdWUuCi0g
ICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwg
MCwgb2Zmc2V0KTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVj
dHVyZSwgdWlkLCAwLCBvZmZzZXQpOwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAg
ICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gVGhpcyBvY2N1cnMg
aW4gYml6YXJyZSBjYXNlcyBvbmx5LiBTZWUgYWJvdmUuCi0gICAgICAgIEFTU0VSVCghdHJhbnNp
dGlvbi0+dHJhbnNpdGlvbkRpZEludm9sdmVTcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAg
cmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIEFTU0VSVChpc1Zh
bGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3Vs
dC5hcHBlbmRWYXJpYW50KApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1
dEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw2IEBAIFB1dEJ5SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IK
ICAgICBtX25ld1N0cnVjdHVyZSA9IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uc3Rh
bnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwogICAgIG1fYWx0ZXJuYXRlQmFzZSA9
IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKLSAgICBtX3NwZWNpZmljVmFsdWUgPSBvdGhlci5tX3Nw
ZWNpZmljVmFsdWU7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3Ro
ZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFr
ZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTc4
LDcgKzc3LDcgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogfQog
CiBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVj
dHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lm
aWNWYWx1ZSwKKyAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0LAogICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJp
YW50IHJlc3VsdDsKQEAgLTg5LDcgKzg4LDYgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlh
bnQ6OnNldHRlcigKICAgICAgICAgcmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJt
aW5hbFByb3RvdHlwZSgpOwogICAgIH0KICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0g
ICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1ZSA9IHNwZWNpZmljVmFsdWU7CiAgICAgcmVzdWx0Lm1f
Y2FsbExpbmtTdGF0dXMgPSBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC0yMjksOCArMjI3LDYgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcElu
Q29udGV4dChQcmludAogICAgICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVj
a3MoKSwgY29udGV4dCksICJdIik7CiAgICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAg
ICAgICAgICBvdXQucHJpbnQoIiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVl
KG1fYWx0ZXJuYXRlQmFzZSksIGNvbnRleHQpKTsKLSAgICAgICAgaWYgKG1fc3BlY2lmaWNWYWx1
ZSkKLSAgICAgICAgICAgIG91dC5wcmludCgiLCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0
KG1fc3BlY2lmaWNWYWx1ZSwgY29udGV4dCkpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0
ID0gIiwgbV9vZmZzZXQpOwogICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxM
aW5rU3RhdHVzKTsKICAgICAgICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNzg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBJbnRl
bmRlZFN0cnVjdHVyZUNoYWluKiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KTsKICAgICAKICAgICBzdGF0aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25z
dCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUsCisgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKICAg
ICAKICAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KQEAgLTExNywxMiAr
MTE3LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwogICAgIH0K
ICAgICAKLSAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9zcGVjaWZpY1ZhbHVl
OwotICAgIH0KLSAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTZXR0ZXIpOwpAQCAtMTQyLDcgKzEz
Niw2IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBDb25z
dGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3Qq
IG1fYWx0ZXJuYXRlQmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9w
ZXJ0eU9mZnNldCBtX29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IG1fY2FsbExpbmtTdGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1dhdGNocG9pbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9XYXRjaHBvaW50LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwx
MSArNzAsNiBAQCB2b2lkIFdhdGNocG9pbnRTZXQ6OmFkZChXYXRjaHBvaW50KiB3YXRjCiAgICAg
bV9zdGF0ZSA9IElzV2F0Y2hlZDsKIH0KIAotdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsKGNv
bnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBmaXJlQWxsKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29u
KSk7Ci19Ci0KIHZvaWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmlyZURldGFp
bCYgZGV0YWlsKQogewogICAgIEFTU0VSVChzdGF0ZSgpID09IElzV2F0Y2hlZCk7CkBAIC04NSw2
ICs4MCwxMSBAQCB2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KGNvbnN0IEZpCiAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKIH0KIAordm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxs
U2xvdyhjb25zdCBjaGFyKiByZWFzb24pCit7CisgICAgZmlyZUFsbFNsb3coU3RyaW5nRmlyZURl
dGFpbChyZWFzb24pKTsKK30KKwogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsV2F0Y2hwb2lu
dHMoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogewogICAgIHdoaWxlICghbV9zZXQuaXNFbXB0
eSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5o
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0
Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsMTIgKzEzMSwxNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBmaXJlQWxsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0g
ICAgICAgIGlmIChzdGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgaWYgKExJS0VMWShzdGF0
ZSgpICE9IElzV2F0Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxT
bG93KGRldGFpbCk7CiAgICAgfQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmly
ZUFsbChjb25zdCBjaGFyKiByZWFzb24pOworICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiBy
ZWFzb24pCisgICAgeworICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZmlyZUFsbFNsb3cocmVhc29uKTsKKyAgICB9
CiAgICAgCiAgICAgdm9pZCB0b3VjaChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewpA
QCAtMTU3LDYgKzE2Miw3IEBAIHB1YmxpYzoKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90
RW1wdHkoKSB7IHJldHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWlsJik7IC8vIENhbGwgb25s
eSBpZiB5b3UndmUgY2hlY2tlZCBpc1dhdGNoZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaXJlQWxsU2xvdyhjb25zdCBjaGFyKiByZWFzb24pOyAvLyBEaXR0by4KICAgICAKIHByaXZh
dGU6CiAgICAgdm9pZCBmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmlyZURldGFpbCYpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyLmgi
CiAjaW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgog
I2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAjaW5j
bHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC0xMzg3LDE0ICsxMzg4LDE3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAvLyBzb21ldGhp
bmcgbW9yZSBzdWJ0bGU/CiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CiAg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGkt
LTspIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1
c1tpXS5hbHRlcm5hdGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0
YW50UmVzdWx0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eSh2YWx1ZS5tX3ZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWNvbnN0YW50UmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQubWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgICAgICBBYnN0cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIHRo
aXNSZXN1bHQuc2V0KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgKm1fZ3JhcGgu
ZnJlZXplKHN0YXR1c1tpXS5zcGVjaWZpY1ZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaCwgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAg
ICAgICAgICAgICByZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQpA
QCAtMTU2OSwxMSArMTU3MywyNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CisgICAgICAg
IFN0b3JhZ2VBY2Nlc3NEYXRhIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9k
ZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBt
X2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKS5tX3ZhbHVlLCBkYXRhLm9mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQpIHsK
KyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBmb3JOb2Rl
KG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCiAg
ICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAgICBTdG9yYWdlQWNjZXNz
RGF0YSBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nl
c3NEYXRhSW5kZXgoKV07CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRD
b25zdGFudFByb3BlcnR5KAorICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDIoKSkubV92
YWx1ZSwgZGF0YS5vZmZzZXQpOworICAgICAgICBpZiAocmVzdWx0ICYmIGpzRHluYW1pY0Nhc3Q8
R2V0dGVyU2V0dGVyKj4ocmVzdWx0KSkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwg
Km1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92
bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0xNjAyLDE0ICsxNjIyLDIyIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgICAgIGlmIChzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgYmFzZVNldC5tZXJnZShzZXQpOwotICAgICAgICAgICAgaWYg
KCF2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBK
U1ZhbHVlIGJhc2VGb3JMb2FkOworICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKQorICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNl
KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNl
Lm1fdmFsdWU7CisgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0KKyAgICAgICAg
ICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlh
bnQub2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewogICAgICAg
ICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0Owog
ICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAg
ICAgICAgICAgICAgICAqbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpLAor
ICAgICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCiAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgICAgICBy
ZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzA3ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY3OCw2ICsxNjc4LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNvbnN0YW50SW50ZXIKIAogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zm
c2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgTm9kZVR5cGUgb3ApCiB7CisgICAg
aWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQg
PSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS0+YXNKU1ZhbHVlKCksIG9mZnNl
dCkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgYmFzZSk7CisgICAgICAgICAg
ICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAgICAgICB9CisgICAgfQorICAg
IAogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAoaXNJbmxpbmVPZmZzZXQob2Zm
c2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsKQEAgLTE3NzIsMjEgKzE3Nzks
MTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCgKICAgICAvLyBVbmxlc3Mg
d2Ugd2FudCBidWdzIGxpa2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg4NzgzLCB3ZSBuZWVkIHRvCiAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGJhc2Ugb2YgdGhlIG9y
aWdpbmFsIGdldF9ieV9pZCBpcyBrZXB0IGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aAogICAg
IC8vIGFsbCBvZiB0aGUgc3BlY3VsYXRpb25zLiBXZSBvbmx5IGluc2VydCB0aGUgUGhhbnRvbSBp
ZiB0aGVyZSBoYWQgYmVlbiBhIENoZWNrU3RydWN0dXJlCi0gICAgLy8gb24gc29tZXRoaW5nIG90
aGVyIHRoYW4gdGhlIGJhc2UgZm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNlLCBv
ciBpZiB0aGUKLSAgICAvLyBhY2Nlc3Mgd2FzIGNvbXBpbGVkIHRvIGEgV2Vha0pTQ29uc3RhbnQg
c3BlY2lmaWMgdmFsdWUsIGluIHdoaWNoIGNhc2Ugd2UgbWlnaHQgbm90Ci0gICAgLy8gaGF2ZSBh
bnkgZXhwbGljaXQgdXNlIG9mIHRoZSBiYXNlIGF0IGFsbC4KLSAgICBpZiAodmFyaWFudC5zcGVj
aWZpY1ZhbHVlKCkgfHwgb3JpZ2luYWxCYXNlICE9IGJhc2UpCisgICAgLy8gb24gc29tZXRoaW5n
IG90aGVyIHRoYW4gdGhlIGJhc2UgZm9sbG93aW5nIHRoZSBDaGVja1N0cnVjdHVyZSBvbiBiYXNl
LgorICAgIGlmIChvcmlnaW5hbEJhc2UgIT0gYmFzZSkKICAgICAgICAgYWRkVG9HcmFwaChQaGFu
dG9tLCBvcmlnaW5hbEJhc2UpOwogICAgIAotICAgIE5vZGUqIGxvYWRlZFZhbHVlOwotICAgIGlm
ICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgbG9hZGVkVmFsdWUgPSB3ZWFrSlND
b25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGxv
YWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICB2YXJpYW50LmNhbGxM
aW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDogcHJlZGljdGlvbiwKLSAgICAgICAgICAgIGJh
c2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCi0gICAgICAgICAgICB2YXJp
YW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zm
c2V0KTsKLSAgICB9CisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgK
KyAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRp
Y3Rpb24sCisgICAgICAgIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCks
CisgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zm
c2V0IDogR2V0QnlPZmZzZXQpOwogICAgIAogICAgIGlmICghdmFyaWFudC5jYWxsTGlua1N0YXR1
cygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25PcGVyYW5kKSwg
bG9hZGVkVmFsdWUpOwpAQCAtMTk0OSwxNCArMTk0OSw4IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKICAg
ICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSk7
CiAgICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKLSAgICAgICAgaWYgKHZhcmlh
bnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSB3ZWFrSlNDb25z
dGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgICAgICBTcGVj
Q2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAg
ICAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKLSAgICAgICAgfQorICAgICAg
ICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICAgICAgU3Bl
Y0NlbGxPdGhlciwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwgR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQpOwogICAgICAgICAKICAgICAgICAgTm9kZSogc2V0dGVyID0g
YWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVlKTsKICAgICAgICAgCkBAIC0yOTU4LDEw
ICsyOTUyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBOb2RlKiBiYXNlID0gY2VsbENvbnN0YW50
V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgp
Lm9ubHlTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwotICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVl
IHNwZWNpZmljVmFsdWUgPSBzdGF0dXNbMF0uc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNpZmlj
VmFsdWUuYXNDZWxsKCkpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlv
biwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb3BlcmFuZCkpOworICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaGFuZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgb3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CkBAIC0yOTY5LDE2ICsy
OTYwLDE2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUp
KSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVj
dC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAgICAgICAgICAgICAgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiB3YXRjaHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwotICAgICAg
ICAgICAgICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9CisgICAgICAgICAgICAgICAgSlNWYWx1
ZSBpbmZlcnJlZFZhbHVlID0KICAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludFNldCA/IHdh
dGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSA6IEpTVmFsdWUoKTsKLSAgICAgICAgICAgICAg
ICBpZiAoIXNwZWNpZmljVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWluZmVycmVkVmFs
dWUpIHsKICAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJl
ZGljdGlvbikpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoVmFyaWFibGVX
YXRjaHBvaW50LCBPcEluZm8od2F0Y2hwb2ludFNldCkpOwotICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZSkpOworICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoaW5m
ZXJyZWRWYWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDc4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsOCArNDA3LDEzIEBAIHByaXZhdGU6CiAKICAgICAg
ICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9kZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0
cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFs
dWUoKSkgewotICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBtX2dy
YXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkpOworICAgICAgICBKU1ZhbHVlIGJh
c2VGb3JMb2FkOworICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCisgICAgICAg
ICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2VWYWx1ZS5tX3ZhbHVlOworICAgICAgICBp
ZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlRm9y
TG9hZCwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRv
Q29uc3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFsdWUpKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4NiwyMiAr
MTI4NiwyMyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoU3RydWN0dXJlKiBzdHJpbmdQcm90
b3R5cGVTdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBib29sIGlzU3RyaW5nUHJvdG90
eXBlTWV0aG9kU2FuZShKU09iamVjdCogc3RyaW5nUHJvdG90eXBlLCBTdHJpbmdJbXBsKiB1aWQp
CiAgICAgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cmluZ1Byb3RvdHlwZS0+
c3RydWN0dXJlKCk7CisgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzVW51c2Vk
OwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAg
ICAgICAgICAgdm0oKSwgdWlkLCBhdHRyaWJ1dGVzVW51c2VkLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHko
dm0oKSwgdWlkLCBhdHRyaWJ1dGVzVW51c2VkKTsKICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0
KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBp
ZiAoIXNwZWNpZmljVmFsdWUpCisgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdl
dENvbnN0YW50UHJvcGVydHkoc3RyaW5nUHJvdG90eXBlLCBvZmZzZXQpOworICAgICAgICBpZiAo
IXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFzcGVjaWZpY1ZhbHVlLT5pbmhlcml0cyhKU0Z1bmN0aW9uOjppbmZvKCkpKQorICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1pY0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsK
KyAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCi0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihz
cGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKGZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJp
bnNpY0ZvcihDb2RlRm9yQ2FsbCkgIT0gU3RyaW5nUHJvdG90eXBlVmFsdWVPZkludHJpbnNpYykK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCkBAIC0xMzMwLDkgKzEzMzEsOSBA
QCBwcml2YXRlOgogICAgICAgICAvLyAodGhhdCB3b3VsZCBjYWxsIHRvU3RyaW5nKCkpLiBXZSBk
b24ndCB3YW50IHRoZSBERkcgdG8gaGF2ZSB0byBkaXN0aW5ndWlzaAogICAgICAgICAvLyBiZXR3
ZWVuIHRoZSB0d28sIGp1c3QgYmVjYXVzZSB0aGF0IHNlZW1zIGxpa2UgaXQgd291bGQgZ2V0IGNv
bmZ1c2luZy4gU28gd2UKICAgICAgICAgLy8ganVzdCByZXF1aXJlIGJvdGggbWV0aG9kcyB0byBi
ZSBzYW5lLgotICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQ
cm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpKQor
ICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVP
YmplY3QsIHZtKCkucHJvcGVydHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShz
dHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1w
bCgpKSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJv
dG90eXBlT2JqZWN0LCB2bSgpLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nLmltcGwoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzA3ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzg5LDYgKzc4OSwzOCBAQCB1bnNpZ25lZCBHcmFwaDo6cmVxdWlyZWRSZWdpc3RlckNv
dW50Rm9yCiAgICAgcmV0dXJuIHN0ZDo6bWF4KGZyYW1lUmVnaXN0ZXJDb3VudCgpLCByZXF1aXJl
ZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkpOwogfQogCitKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25z
dGFudFByb3BlcnR5KEpTVmFsdWUgYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAg
IGlmICghYmFzZSB8fCAhYmFzZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OworICAgIAorICAgIEpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlKTsKKyAgICAKKyAg
ICAvLyBUaGlzIHBhcnQgZmVlbHMgc2hhZHkuIENvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2FzZToK
KyAgICAvLworICAgIC8vIDEpIFdlIHN0YXJ0IHdpdGg6CisgICAgLy8KKyAgICAvLyAgICBDaGVj
a1N0cnVjdHVyZShAbywgW1MxLCBTMl0pCisgICAgLy8gICAgR2V0QnlPZmZzZXQoQG8sIDQyKQor
ICAgIC8vCisgICAgLy8gMikgQXQgY29tcGlsZSB0aW1lLCBAbyBoYXMgc3RydWN0dXJlIFMxLCBh
bmQgdGhhdCBzdHJ1Y3R1cmUgaGFzIGFuIGludGFjdCByZXBsYWNlbWVudAorICAgIC8vICAgIHdh
dGNocG9pbnQgc2V0IGZvciA0Mi4gV2UgZm9sZCB0aGUgR2V0QnlPZmZzZXQuCisgICAgLy8KKyAg
ICAvLyAzKSBAbyB0cmFuc2l0aW9ucyB0byBTMi4KKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IG9iamVjdC0+c3RydWN0dXJlKCk7CisgICAgCisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gc3Ry
dWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgIGlm
ICghc2V0IHx8ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgp
OworICAgIAorICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7Cisg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIAor
ICAgIHdhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNldCk7CisgICAgCisgICAgcmV0dXJuIG9iamVj
dC0+Z2V0RGlyZWN0KG9mZnNldCk7Cit9CisKIEpTQWN0aXZhdGlvbiogR3JhcGg6OnRyeUdldEFj
dGl2YXRpb24oTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZS0+ZHluYW1pY0Nhc3RDb25z
dGFudDxKU0FjdGl2YXRpb24qPigpOwpAQCAtOTAwLDcgKzkzMiw2IEBAIHZvaWQgR3JhcGg6OnZp
c2l0Q2hpbGRyZW4oU2xvdFZpc2l0b3ImIHYKICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAg
ICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCku
dmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVy
ZWRSZWFkT25seVZhbHVlKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzZXQgPSB2YXJpYW50LnN0cnVjdHVyZVNldCgpOwog
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBzZXQuc2l6ZSgpOyBqLS07KQog
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5
UG9pbnRlcihzZXRbal0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAko
cmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NzksNiArNjc5LDggQEAgcHVibGljOgogICAgIHVuc2lnbmVk
IHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4aXQoKTsKICAgICB1bnNpZ25lZCByZXF1aXJlZFJl
Z2lzdGVyQ291bnRGb3JFeGVjdXRpb25BbmRFeGl0KCk7CiAgICAgCisgICAgSlNWYWx1ZSB0cnlH
ZXRDb25zdGFudFByb3BlcnR5KEpTVmFsdWUgYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsK
KyAgICAKICAgICBKU0FjdGl2YXRpb24qIHRyeUdldEFjdGl2YXRpb24oTm9kZSopOwogICAgIFdy
aXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRyeUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNo
aW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDYgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICAgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXpl
KCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1fZ3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNW
YWx1ZSgpKS0+c3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2go
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24n
dCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGluIHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0
aGF0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3Nl
ZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERvbid0IG5lZWQgdG8gd2F0Y2ggdGhlCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2
aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMzcsOCArMzIzNywxMyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52
YXJpYW50c1tpXTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAo
dmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQu
Y29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKKyAg
ICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQ7CisgICAgICAgICAgICBpZiAodmFyaWFu
dC5hbHRlcm5hdGVCYXNlKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdGFudFJlc3VsdCA9IG1f
Z3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFu
dC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaWYgKGNvbnN0YW50UmVzdWx0KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
b3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50UmVzdWx0KSk7CiAgICAgICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlCYXNlOwogICAgICAg
ICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTY5OCw5ICsxNjk4LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uR2UKICAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24n
dCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBj
YWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVl
KCkgJiYgc2xvdC5zbG90QmFzZSgpID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUodm0pLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKICAgICAgICAgaWYgKG1vZGVBbmRUeXBl
LnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBwY1s1XS51
LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c2NvcGUtPnN0cnVjdHVyZSh2bSkpOwotICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2Nv
cGUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAg
IHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNs
b3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJ1Y3R1cmUt
PnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MzAsMTQgKzE3MzQsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAgaWYgKGV4ZWMtPnZtKCkuZXhj
ZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9i
YWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2Ug
ZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgotICAgIGlmICht
b2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHkgfHwgbW9kZUFuZFR5cGUudHlwZSgp
ID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcykgewotICAgICAgICBpZiAo
c2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNsb3QuYmFzZSgpID09IHNjb3BlICYmIHNjb3BlLT5z
dHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKSB7Ci0gICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAg
ICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHBjWzZdLnUub3Bl
cmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgQ29tbW9u
U2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywg
c2NvcGUsIG1vZGVBbmRUeXBlLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblRocm93KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEV4Y2VwdGlv
blZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lv
biAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05NiwxMiArOTYsMTQgQEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29k
ZUJsb2NrKiBjb2RlYgogICAgIHJlcGF0Y2hDYWxsKHJlcGF0Y2hCdWZmZXIsIGNhbGwsIG5ld0Nh
bGxlZUZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKFZN
JiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0
aW9uLCBib29sIGNvbXBhY3QpCitzdGF0aWMgdm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisg
ICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRo
RnVuY3Rpb24sCisgICAgYm9vbCBjb21wYWN0KQogewogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJ
bmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dhdGNocG9pbnRzKCkpCiAgICAgICAgIHZtLnJl
Z2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8u
YWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCiAgICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQpAQCAt
MzQzLDggKzM0NSwxMSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICAg
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBjdXJyU3RydWN0
dXJlID0gaXQtPmdldCgpOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChwcm90b09iamVjdC0+
c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVyZSk7CiAgICAgfQogICAgIAorICAgIGN1cnJTdHJ1
Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIG9mZnNldCk7
CisgICAgCiAgICAgR1BSUmVnIGJhc2VGb3JBY2Nlc3NHUFI7CiAgICAgaWYgKGNoYWluKSB7CiAg
ICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09i
amVjdCksIHNjcmF0Y2hHUFIpOwpAQCAtNjkzLDkgKzY5OCwxMCBAQCBzdGF0aWMgYm9vbCB0cnlD
YWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNl
VmFsdWUKICAgICAgICAgJiYgc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkKICAgICAgICAgJiYgTWFj
cm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJl
bGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNhY2hlZE9mZnNldCgpKSkpIHsKLSAgICAgICAg
ICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlk
QnVpbGRMaXN0LCB0cnVlKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigq
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlG
b3JSZXBsYWNlbWVudHMoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgcmVwYXRj
aEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3Qs
IHRydWUpOworICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICByZXBhdGNoQ2FsbChjb2RlQmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCk7CkBAIC0xMTc4LDYgKzExODQsNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIGlmICghTWFj
cm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJlc3NPZmZzZXQob2Zmc2V0UmVsYXRpdmVUb1Bh
dGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAorICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgq
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3Mo
KnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1Y3R1cmUsIGlkZW50LCBzbG90LmNhY2hlZE9m
ZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRL
aW5kKSwgZmFsc2UpOwogICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFJlcGxhY2UoKnZtLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTEyOTUsNiArMTMwMiw4IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExp
c3QoRXhlY1N0YXQKICAgICAgICAgICAgIGlmIChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIFdpbGwgZ2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KICAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFj
ZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAg
ICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0
aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgogICAgICAgICAgICAgZW1pdFB1dFJlcGxhY2VTdHVi
KAogICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBz
dHViSW5mbywgcHV0S2luZCwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTElu
dFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkzLDYg
KzY5Myw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQo
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0
dXJlLnNldCgKICAgICAgICAgICAgICAgICAgICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNs
b3QuY2FjaGVkT2Zmc2V0KCkpKSB7CkBAIC0xNDI2LDkgKzE0MjcsMTMgQEAgTExJTlRfU0xPV19Q
QVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tXwogICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFs
dWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKICAgICAgICAgaWYgKG1vZGVBbmRUeXBl
LnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sq
IGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwotICAgICAgICAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5z
dHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNj
b3BlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNh
Y2hlZE9mZnNldCgpOworICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29wZS0+
c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICAgICAgcGNb
NV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5j
YWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cnVjdHVyZS0+c3Rh
cnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ0OCwxNSArMTQ1Myw4IEBAIHN0YXRpYyBKU09i
amVjdCogcHV0VG9TY29wZUNvbW1vbihFeGVjU3QKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90
KHNjb3BlLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpKTsKICAgICBzY29wZS0+bWV0aG9kVGFi
bGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwgdmFsdWUsIHNsb3QpOwotCi0gICAgLy8gQ292
ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBm
aXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxl
IHRpbWUuCi0gICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBt
b2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSB7Ci0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC5iYXNlKCkgPT0g
c2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOwotICAgICAg
ICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICAKKyAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2Jh
bChleGVjLCBjb2RlQmxvY2ssIHBjLCBzY29wZSwgbW9kZUFuZFR5cGUsIHNsb3QpOwogCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDYgKzkzLDMzIEBAIGlubGluZSBib29sIG9wSW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAg
ICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHkpOwogfQogCitpbmxp
bmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVHbG9iYWwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBD
b2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rpb24qIHBjLCBKU09iamVjdCogc2NvcGUsCisg
ICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3Qp
Cit7CisgICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhp
c3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUg
dGhlbSBhdCBjb21waWxlIHRpbWUuCisgICAgCisgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSAh
PSBHbG9iYWxQcm9wZXJ0eSAmJiBtb2RlQW5kVHlwZS50eXBlKCkgIT0gR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFz
bG90LmlzQ2FjaGVhYmxlUHV0KCkKKyAgICAgICAgfHwgc2xvdC5iYXNlKCkgIT0gc2NvcGUKKyAg
ICAgICAgfHwgIXNjb3BlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJs
ZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFBy
b3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgaWYgd2Un
dmUgZG9uZSBhIHRyYW5zaXRpb24uIFdlIHdhbnQgdG8gZGV0ZWN0IHRoZSBmaXJzdCByZXBsYWNl
IHNvIHRoYXQgd2UKKyAgICAgICAgLy8gY2FuIGludmFsaWRhdGUgdGhlIHdhdGNocG9pbnQuCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgc2NvcGUtPnN0cnVjdHVyZSgpLT5kaWRD
YWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoZXhlYy0+dm0oKSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7
CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Cisg
ICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUoKSk7CisgICAgcGNbNl0udS5vcGVyYW5kID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgQ29tbW9uU2xvd1BhdGhzCiAK
IGNsYXNzIEV4ZWNTdGF0ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxNzA3ODUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWlu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw3IEBAIGJvb2wgSW50ZW5kZWRTdHJ1
Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXAKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAg
ICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3Rvcltp
XS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAo
YXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTM5LDggKzEzOSw3IEBAIHZvaWQgSlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0
YXRlKiAKIAogICAgIGZvciAoOyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQodm0s
IHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJlYWRPbmx5KSB7CiAgICAgICAgICAgICAgICAg
aWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVl
IHByb3RvCiAgICAgbV9mdW5jdGlvblByb3RvdHlwZS5zZXQodm0sIHRoaXMsIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGUodm0sIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0s
IHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBiZSBzZXQgb25j
ZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KICAgICBtX2Z1bmN0aW9uU3RydWN0dXJlLnNl
dCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0
aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2
bSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVu
Y3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBtX25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0
KHZtLCB0aGlzLCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgbV9mdW5jdGlv
blN0cnVjdHVyZS5nZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0sIDAsIG1fZnVuY3Rpb25OYW1lT2Zmc2V0KSk7CisgICAgbV9uYW1l
ZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb24odm0sIG1fZnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMt
Pm5hbWUsIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtLCBtX2Z1bmN0aW9uTmFtZU9m
ZnNldCkpOwogICAgIG1faW50ZXJuYWxGdW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIElu
dGVybmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3Rv
dHlwZS5nZXQoKSkpOwogICAgIEpTRnVuY3Rpb24qIGNhbGxGdW5jdGlvbiA9IDA7CiAgICAgSlNG
dW5jdGlvbiogYXBwbHlGdW5jdGlvbiA9IDA7CkBAIC00MjksOCArNDI5LDggQEAgdm9pZCBKU0ds
b2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90bwogICAgIFByb3RvdHlwZU1hcCYgcHJvdG90
eXBlTWFwID0gdm0ucHJvdG90eXBlTWFwOwogICAgIFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1bHRT
dHJ1Y3R1cmUgPSBwcm90b3R5cGVNYXAuZW1wdHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUo
bV9vYmplY3RQcm90b3R5cGUuZ2V0KCksIEpTRmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBh
Y2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Ci0gICAgaXRlcmF0b3JSZXN1bHRT
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JS
ZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPmRvbmUsIDAsIDAsIG9mZnNldCk7Ci0g
ICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVl
LCAwLCAwLCBvZmZzZXQpOworICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5w
cm9wZXJ0eU5hbWVzLT5kb25lLCAwLCBvZmZzZXQpOworICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0
dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0
U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSwgMCwgb2Zmc2V0KTsKICAgICBtX2l0
ZXJhdG9yUmVzdWx0U3RydWN0dXJlLnNldCh2bSwgdGhpcywgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1
cmUpOwogCiAgICAgbV9ldmFsRnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVh
dGUodm0sIHRoaXMsIDEsIHZtLnByb3BlcnR5TmFtZXMtPmV2YWwuc3RyaW5nKCksIGdsb2JhbEZ1
bmNFdmFsKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJp
Y0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC01NSwxNSArNTUsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKIC8vIEFycmF5Q29udmVudGlvbnMuaC4KIHN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlT
aXplID0gMDsKIAotSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQot
ewotICAgIGlmIChjZWxsLT50eXBlKCkgPT0gSlNGdW5jdGlvblR5cGUpCi0gICAgICAgIHJldHVy
biBjZWxsOwotICAgIGlmIChjZWxsLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xh
c3NPZihJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKCkpKQotICAgICAgICByZXR1cm4gY2VsbDsKLSAg
ICByZXR1cm4gMDsKLX0KLQogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxF
KEpTT2JqZWN0KTsKIFNUQVRJQ19BU1NFUlRfSVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU0Zp
bmFsT2JqZWN0KTsKIApAQCAtMzYwLDcgKzM1MSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0Nl
bGwqIGNlbGwsIEV4ZWNTdGEKICAgICAgICAgICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBl
KCk7CiAgICAgICAgICAgICBpZiAocHJvdG90eXBlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAg
ICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUlu
dGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJv
cGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKQorICAg
ICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1
dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpCiAgICAgICAgICAgICAgICAgICAg
ICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC0zNzEsOCArMzYyLDcgQEAgdm9pZCBK
U09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIEpTT2JqZWN0KiBvYmo7CiAg
ICAgZm9yIChvYmogPSB0aGlzT2JqZWN0OyA7IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsK
ICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1Zh
bHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSkt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNl
dCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsKICAgICAgICAg
ICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRo
aXNPYmplY3QpOwpAQCAtNDA3LDcgKzM5Nyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGEKICAgICB9CiAgICAgCiAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwg
cHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0
LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
MCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKSAmJiBzbG90LmlzU3RyaWN0TW9kZSgp
KQorICAgIGlmICghdGhpc09iamVjdC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9u
bHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICByZXR1cm47CiB9CkBAIC0xMjI3LDcgKzEyMTcs
NyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhCiB2b2lkIEpTT2Jq
ZWN0OjpwdXREaXJlY3ROb25JbmRleEFjY2Vzc29yKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBQdXRQ
cm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVm
aW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90
LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1v
ZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMs
IHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYg
d2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKICAgICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCB0
aG91Z2gsIHdlIGFsc28gbmVlZCB0byBjaGFuZ2Ugb3VyIFN0cnVjdHVyZQpAQCAtMTI2Nyw5ICsx
MjU3LDggQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogICAgICAg
ICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKIAogICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQodGhpc09iamVjdC0+c3Ry
dWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFs
dWUpKSkgeworICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSkt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSkpIHsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiBEb250RGVsZXRlICYmICF2bS5pc0luRGVmaW5lT3duUHJvcGVydHkoKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgdGhpc09iamVjdC0+cmVtb3ZlRGlyZWN0KHZt
LCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTM4Myw2ICsxMzcyLDEwIEBAIGJvb2wgSlNPYmplY3Q6Omdl
dFByaW1pdGl2ZU51bWJlcihFeGVjU3QKIC8vIEVDTUEgOC42LjIuNgogSlNWYWx1ZSBKU09iamVj
dDo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywg
UHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQogeworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdo
YXRldmVyIGRlZmF1bHQgdmFsdWUgbWV0aG9kcyB0aGVyZSBhcmUgb24gb2JqZWN0J3MgcHJvdG90
eXBlIGNoYWluIGFyZQorICAgIC8vIGJlaW5nIHdhdGNoZWQuCisgICAgb2JqZWN0LT5zdHJ1Y3R1
cmUoKS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5Rm9yRW50aXJl
Q2hhaW4oZXhlYy0+dm0oKSk7CisgICAgCiAgICAgLy8gTXVzdCBjYWxsIHRvU3RyaW5nIGZpcnN0
IGZvciBEYXRlIG9iamVjdHMuCiAgICAgaWYgKChoaW50ID09IFByZWZlclN0cmluZykgfHwgKGhp
bnQgIT0gUHJlZmVyTnVtYmVyICYmIG9iamVjdC0+cHJvdG90eXBlKCkgPT0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5kYXRlUHJvdG90eXBlKCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFs
dWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24oZXhlYywgb2JqZWN0LCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkudG9TdHJpbmcpOwpAQCAtMTQ0NiwyMCArMTQzOSw2IEBAIGJvb2wgSlNPYmplY3Q6
OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
SlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lmaWNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpIGNvbnN0Ci17Ci0g
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIGlm
IChpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8g
VGhpcyBjb3VsZCBiZSBhIGZ1bmN0aW9uIHdpdGhpbiB0aGUgc3RhdGljIHRhYmxlPyAtIHNob3Vs
ZCBwcm9iYWJseQotICAgIC8vIGFsc28gbG9vayBpbiB0aGUgaGFzaD8gIFRoaXMgY3VycmVudGx5
IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtLCBzaW5jZQotICAgIC8vIHdlJ3ZlIGN1cnJlbnRseSBh
bHdheXMgY2FsbCAnZ2V0JyBmaXJzdCwgd2hpY2ggc2hvdWxkIGhhdmUgcG9wdWxhdGVkCi0gICAg
Ly8gdGhlIG5vcm1hbCBzdG9yYWdlLgotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBKU09i
amVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMs
IFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkK
IHsKICAgICBwcm9wZXJ0eU5hbWVzLnNldEJhc2VPYmplY3Qob2JqZWN0KTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkocmV2aXNpb24gMTcwNzg1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9y
dGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkg
KHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTYsMTUgKzU2LDYgQEAgaW5saW5lIEpTQ2VsbCog
Z2V0SlNGdW5jdGlvbihKU1ZhbHVlIHZhbAogICAgIHJldHVybiAwOwogfQogCi1KU19FWFBPUlRf
UFJJVkFURSBKU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xvdyhKU0NlbGwqKTsKLQotaW5saW5l
IEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3QoSlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZh
bHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ2V0Q2FsbGFibGVP
YmplY3RTbG93KHZhbHVlLmFzQ2VsbCgpKTsKLX0KLQogY2xhc3MgR2V0dGVyU2V0dGVyOwogY2xh
c3MgSW50ZXJuYWxGdW5jdGlvbjsKIGNsYXNzIEpTRnVuY3Rpb247CkBAIC00OTEsOCArNDgyLDYg
QEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIEpTVmFsdWUgdG9UaGlz
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2RlKTsKIAotICAgIGJvb2wgZ2V0UHJvcGVydHlT
cGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNG
dW5jdGlvbikgY29uc3Q7Ci0KICAgICAvLyBUaGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0
IHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAgSlNWYWx1ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogICAgIHsKQEAgLTUwNCw5ICs0OTMsOCBAQCBwdWJs
aWM6CiAKICAgICBKU1ZhbHVlIGdldERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdAogICAgIHsKLSAgICAgICAgSlNDZWxs
KiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAgICAgIFByb3BlcnR5
T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNp
dHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGdldERpcmVj
dChvZmZzZXQpIDogSlNWYWx1ZSgpOwogICAgIH0KQEAgLTUyMSw5ICs1MDksOCBAQCBwdWJsaWM6
CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAgIEpT
Q2VsbCogc3BlY2lmaWM7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+c3Ry
dWN0dXJlKHZtKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5n
ZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKTsKICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUtPmlubGluZUNh
cGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgIH0KQEAgLTk0OSw3ICs5MzYs
NyBAQCBwcml2YXRlOgogICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhpbmdN
b2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoVk0mLCBBcnJheVN0b3JhZ2UqKTsKICAg
ICAgICAgCiAgICAgdGVtcGxhdGU8UHV0TW9kZT4KLSAgICBib29sIHB1dERpcmVjdEludGVybmFs
KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNs
b3QmLCBKU0NlbGwqKTsKKyAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVydHlO
YW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAgIGJv
b2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJlJiwg
UHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWduZWQs
IFByb3BlcnR5T2Zmc2V0KTsKQEAgLTEyMTMsOCArMTIwMCw3IEBAIGlubGluZSBKU1ZhbHVlIEpT
T2JqZWN0Ojpwcm90b3R5cGUoKSBjb24KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5s
aW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1cmUm
IHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90
KQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBzcGVjaWZpYzsKLSAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmIChMSUtFTFko
aXNWYWxpZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0RGly
ZWN0KG9mZnNldCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCkBAIC0xMjk1LDcgKzEyODEsNyBAQCBp
bmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAKIHRlbXBsYXRlPEpT
T2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50
ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTQ2VsbCogc3BlY2lm
aWNGdW5jdGlvbikKK2lubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUpOwog
ICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBBY2Nl
c3NvcikpOwpAQCAtMTMwNSwyNSArMTI5MSwxNSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1
cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIGN1cnJlbnRTcGVjaWZp
Y0Z1bmN0aW9uOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVudFNwZWNpZmljRnVu
Y3Rpb24pOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2
bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZzZXQg
IT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgY3VycmVudGx5
IGEgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCB0aGVyZSBub3cgZWl0aGVyIGlzbid0LAotICAgICAg
ICAgICAgLy8gb3IgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQsIHRoZW4gZGVzcGVjaWZ5Lgot
ICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uICYmIChzcGVjaWZpY0Z1bmN0
aW9uICE9IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUtPmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKICAgICAg
ICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAmIFJl
YWRPbmx5KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgcHV0
RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQs
IHRoZSBvYmplY3RzIHN0cnVjdHVyZSBvbmx5IGhhcyBhIHNwZWNpZmljIHZhbHVlIHNldCBpZiBw
cmV2aW91c2x5IHRoZXJlCi0gICAgICAgICAgICAvLyBoYWQgYmVlbiBvbmUgc2V0LCBhbmQgaWYg
dGhlIG5ldyB2YWx1ZSBiZWluZyBzcGVjaWZpZWQgaXMgdGhlIHNhbWUgKG90aGVyd2lzZSB3ZSB3
b3VsZAotICAgICAgICAgICAgLy8gaGF2ZSBkZXNwZWNpZmllZCwgYWJvdmUpLiAgU28sIGlmIGN1
cnJlbnRTcGVjaWZpY0Z1bmN0aW9uIGlzIG5vdCBzZXQsIG9yIGlmIHRoZSBuZXcKLSAgICAgICAg
ICAgIC8vIHZhbHVlIGlzIGRpZmZlcmVudCAob3IgdGhlcmUgaXMgbm8gbmV3IHZhbHVlKSwgdGhl
biB0aGUgc2xvdCBub3cgaGFzIG5vIHZhbHVlIC0gYW5kCi0gICAgICAgICAgICAvLyBhcyBzdWNo
IGl0IGlzIGNhY2hhYmxlLgotICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIHByZXZpb3VzbHkg
YSB2YWx1ZSwgYW5kIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUsIHRoZW4gd2UgY2Fubm90IGNh
Y2hlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiB8fCAoc3BlY2lm
aWNGdW5jdGlvbiAhPSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAgICAg
c2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgICAgICBzdHJ1
Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTEzMzQsMTUgKzEzMTAsMTMgQEAgaW5saW5l
IGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBCdXR0ZXJmbHkqIG5l
d0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJlKCkt
PnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICAgICAgbmV3QnV0dGVyZmx5
ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVD
YXBhY2l0eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFn
ZUNhcGFjaXR5KCkpOwotICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVj
aWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCktPmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAg
ICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0dXJlKCksIG5l
d0J1dHRlcmZseSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAgICAg
QVNTRVJUKHRoaXMtPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAg
ICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAvLyBTZWUgY29tbWVudCBv
biBzZXROZXdQcm9wZXJ0eSBjYWxsIGJlbG93LgotICAgICAgICBpZiAoIXNwZWNpZmljRnVuY3Rp
b24pCi0gICAgICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAg
ICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgaWYgKGF0dHJp
YnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRDb250
YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzNTAs
NyArMTMyNCw3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKIAog
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5ID0g
dGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5n
U3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUodGhp
cy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgewogICAg
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0
dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0gc3Ry
dWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMzYyLDQwICsxMzM2LDE3IEBAIGlu
bGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgc2V0U3RydWN0dXJlQW5k
QnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERpcmVj
dCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7
IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hh
YmxlLAotICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0YXRl
LgotICAgICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCi0gICAgICAgICAgICBzbG90LnNldE5l
d1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhp
cywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdW5zaWduZWQg
Y3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbjsK
LSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0
cmlidXRlcywgY3VycmVudFNwZWNpZmljRnVuY3Rpb24pOworICAgIG9mZnNldCA9IHN0cnVjdHVy
ZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zm
c2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQp
ICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToKLSAg
ICAgICAgLy8gICgxKSBUaGVyZSBpcyBhbiBleGlzdGluZyBzcGVjaWZpYyB2YWx1ZSBzZXQsIGFu
ZCB3ZSdyZSBvdmVyd3JpdGluZyB3aXRoICp0aGUgc2FtZSB2YWx1ZSouCi0gICAgICAgIC8vICAg
ICAgICogRG8gbm90aGluZyAtIG5vIG5lZWQgdG8gZGVzcGVjaWZ5LCBidXQgdGhhdCBtZWFucyB3
ZSBjYW4ndCBjYWNoZSAoYSBjYWNoZWQKLSAgICAgICAgLy8gICAgICAgICBwdXQgY291bGQgd3Jp
dGUgYSBkaWZmZXJlbnQgdmFsdWUpLiBMZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0
YXRlLgotICAgICAgICAvLyAgKDIpIFRoZXJlIGlzIGEgc3BlY2lmaWMgdmFsdWUgY3VycmVudGx5
IHNldCwgYnV0IHdlJ3JlIHdyaXRpbmcgYSBkaWZmZXJlbnQgdmFsdWUuCi0gICAgICAgIC8vICAg
ICAgICogRmlyc3QsIHdlIGhhdmUgdG8gZGVzcGVjaWZ5LiAgSGF2aW5nIGRvbmUgc28sIHRoaXMg
aXMgbm93IGEgcmVndWxhciBzbG90Ci0gICAgICAgIC8vICAgICAgICAgd2l0aCBubyBzcGVjaWZp
YyB2YWx1ZSwgc28gZ28gYWhlYWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAgICAgLy8gICgz
KSBOb3JtYWwgY2FzZSwgdGhlcmUgaXMgbm8gc3BlY2lmaWMgdmFsdWUgc2V0LgotICAgICAgICAv
LyAgICAgICAqIEdvIGFoZWFkICYgY2FjaGUgbGlrZSBub3JtYWwuCi0gICAgICAgIGlmIChjdXJy
ZW50U3BlY2lmaWNGdW5jdGlvbikgewotICAgICAgICAgICAgLy8gY2FzZSAoMSkgRG8gdGhlIHB1
dCwgdGhlbiByZXR1cm4gbGVhdmluZyB0aGUgc2xvdCB1bmNhY2hhYmxlLgotICAgICAgICAgICAg
aWYgKHNwZWNpZmljRnVuY3Rpb24gPT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAgICAg
ICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2FzZSAoMikgRGVz
cGVjaWZ5LCBmYWxsIHRocm91Z2ggdG8gKDMpLgotICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZt
LCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNhc2UgKDMpIHNldCB0aGUg
c2xvdCwgZG8gdGhlIHB1dCwgcmV0dXJuLgorICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQ
cm9wZXJ0eShvZmZzZXQpOwogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywg
b2Zmc2V0KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0xNDA0LDE3ICsxMzU1LDE0IEBAIGlubGluZSBib29sIEpTT2JqZWN0
OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgIWlz
RXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCwgc2xvdC5jb250ZXh0KCkp
OworICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQo
KSk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3RydWN0
dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIHNldFN0cnVjdHVyZUFuZFJlYWxsb2Nh
dGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CiAKICAgICBwdXREaXJlY3Qodm0s
IG9mZnNldCwgdmFsdWUpOwotICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5zaXRp
b25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAotICAg
IC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0gICAgaWYgKCFz
cGVjaWZpY0Z1bmN0aW9uKQotICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNl
dCk7CisgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChhdHRy
aWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25s
eVByb3BlcnRpZXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0NDcsMjAgKzEzOTUsMjAgQEAg
aW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eQogICAgIEFTU0VSVCghSGVh
cDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7
CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygpKTsK
IAotICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICByZXR1
cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUs
IDAsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmli
dXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRyaWJ1
dGVzICYgQWNjZXNzb3IpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAgICBw
dXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwor
ICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBKU09i
amVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCghdmFsdWUuaXNH
ZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blBy
b3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmpl
Y3QodmFsdWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVy
dHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAogaW5saW5lIHZvaWQg
SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAgLTE0
NzAsNyArMTQxOCw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHIK
ICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAgIGlm
IChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgIG5l
d0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0T2ZM
aW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VD
YXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBn
ZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0
cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0dXJl
KCksIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZpc2lv
biAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksMTkgQEAgc3RhdGljIGlubGluZSBib29sIGFic3Ry
YWN0QWNjZXNzKEV4ZWNTdAogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xv
YmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIDAsIDAsIDAp
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICBvcCA9IFJl
c29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3Mp
LCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgMCwgc2xvdC5jYWNoZWRPZmZz
ZXQoKSk7CisgICAgICAgIAorICAgICAgICBXYXRjaHBvaW50U3RhdGUgc3RhdGUgPSBnbG9iYWxP
YmplY3QtPnN0cnVjdHVyZSgpLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKS0+c3RhdGUoKTsKKyAgICAgICAgaWYg
KHN0YXRlID09IElzV2F0Y2hlZCAmJiBnZXRPclB1dCA9PSBQdXQpIHsKKyAgICAgICAgICAgIC8v
IFRoZSBmaWVsZCBleGlzdHMsIGJ1dCBiZWNhdXNlIHRoZSByZXBsYWNlbWVudCB3YXRjaHBvaW50
IGlzIHN0aWxsIGludGFjdC4gVGhpcyBpcworICAgICAgICAgICAgLy8ga2luZCBvZiBkYW5nZXJv
dXMuIFdlIGhhdmUgdHdvIG9wdGlvbnM6CisgICAgICAgICAgICAvLyAxKSBJbnZhbGlkYXRlIHRo
ZSB3YXRjaHBvaW50IHNldC4gVGhhdCB3b3VsZCB3b3JrLCBidXQgaXQncyBwb3NzaWJsZSB0aGF0
IHRoaXMgY29kZQorICAgICAgICAgICAgLy8gICAgcGF0aCBuZXZlciBleGVjdXRlcyAtIGluIHdo
aWNoIGNhc2UgdGhpcyB3b3VsZCBiZSB1bndpc2UuCisgICAgICAgICAgICAvLyAyKSBIYXZlIHRo
ZSBpbnZhbGlkYXRpb24gaGFwcGVuIGF0IHJ1bi10aW1lLiBBbGwgd2UgaGF2ZSB0byBkbyBpcyBs
ZWF2ZSB0aGUgY29kZQorICAgICAgICAgICAgLy8gICAgdW5jYWNoZWQuIFRoZSBvbmx5IGRvd25z
aWRlIGlzIHNsaWdodGx5IG1vcmUgd29yayB3aGVuIHRoaXMgZG9lcyBleGVjdXRlLgorICAgICAg
ICAgICAgLy8gV2UgZ28gd2l0aCBvcHRpb24gKDIpIGhlcmUgYmVjYXVzZSBpdCBzZWVtcyBsZXNz
IGV2aWwuCisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0
eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgMCwgMCk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJvcGVy
dHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2JhbE9iamVjdC0+c3RydWN0
dXJlKCksIDAsIDAsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFw
SGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc2LDEzICs3NiwxMSBAQCBz
dHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgU3RyaW5nSW1wbCoga2V5OwogICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIFdyaXRlQmFy
cmllcjxKU0NlbGw+IHNwZWNpZmljVmFsdWU7CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KFZNJiB2
bSwgSlNDZWxsKiBvd25lciwgU3RyaW5nSW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKKyAgICBQcm9wZXJ0
eU1hcEVudHJ5KFN0cmluZ0ltcGwqIGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzKQogICAgICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9mZnNl
dCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICwgc3BlY2lmaWNW
YWx1ZSh2bSwgb3duZXIsIHNwZWNpZmljVmFsdWUsIFdyaXRlQmFycmllcjxKU0NlbGw+OjpNYXlC
ZU51bGwpCiAgICAgewogICAgIH0KIH07CkBAIC0xNDEsOCArMTM5LDYgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAot
ICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQog
ICAgIHR5cGVkZWYgU3RyaW5nSW1wbCogS2V5VHlwZTsKICAgICB0eXBlZGVmIFByb3BlcnR5TWFw
RW50cnkgVmFsdWVUeXBlOwogCkBAIC0xNTcsOCArMTUzLDggQEAgcHVibGljOgogCiAgICAgLy8g
Q29uc3RydWN0b3IgaXMgcGFzc2VkIGFuIGluaXRpYWwgY2FwYWNpdHksIGEgUHJvcGVydHlUYWJs
ZSB0byBjb3B5LCBvciBib3RoLgogICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjcmVhdGUoVk0m
LCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBj
bG9uZShWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLSAgICBzdGF0
aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0
aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlU
YWJsZSogY2xvbmUoVk0mLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3Bl
cnR5VGFibGUqIGNsb25lKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9w
ZXJ0eVRhYmxlJik7CiAgICAgflByb3BlcnR5VGFibGUoKTsKIAogICAgIC8vIE9yZGVyZWQgaXRl
cmF0aW9uIG1ldGhvZHMuCkBAIC0xOTYsNyArMTkyLDcgQEAgcHVibGljOgogICAgIFByb3BlcnR5
T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAg
Ly8gQ29weSB0aGlzIFByb3BlcnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFz
dCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQuCi0gICAgUHJvcGVydHlUYWJsZSogY29weShWTSYsIEpT
Q2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBj
b3B5KFZNJiwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNp
emVfdCBzaXplSW5NZW1vcnkoKTsKQEAgLTIwNCwxMiArMjAwLDEyIEBAIHB1YmxpYzoKICNlbmRp
ZgogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdz
ID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbDsK
IAogcHJpdmF0ZToKICAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5KTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgSlNDZWxsKiwgY29uc3QgUHJvcGVydHlUYWJs
ZSYpOwotICAgIFByb3BlcnR5VGFibGUoVk0mLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFsQ2Fw
YWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgY29u
c3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUoVk0mLCB1bnNpZ25lZCBpbml0
aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKIAogICAgIFByb3BlcnR5VGFibGUo
Y29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIC8vIFVzZWQgdG8gaW5zZXJ0IGEgdmFsdWUga25v
d24gbm90IHRvIGJlIGluIHRoZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cgY2FwYWNpdHkgdG8g
YmUgYXZhaWxhYmxlLgpAQCAtNDk0LDE1ICs0OTAsMTUgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0
IFByb3BlcnR5VGFibGU6Om5leAogICAgIHJldHVybiBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihz
aXplKCksIGlubGluZUNhcGFjaXR5KTsKIH0KIAotaW5saW5lIFByb3BlcnR5VGFibGUqIFByb3Bl
cnR5VGFibGU6OmNvcHkoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0
eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KFZNJiB2bSwgdW5z
aWduZWQgbmV3Q2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291
bnQpOwogCiAgICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNh
bWUgbV9pbmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2
ZSByZWhhc2hpbmcgYWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0
eSkgPT0gbV9pbmRleFNpemUpCi0gICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2
bSwgb3duZXIsICp0aGlzKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93
bmVyLCBuZXdDYXBhY2l0eSwgKnRoaXMpOworICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6
Y2xvbmUodm0sICp0aGlzKTsKKyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG5l
d0NhcGFjaXR5LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24gMTcw
Nzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBAQCBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0
eVRhYmxlOjpjcmVhdGUoVk0mCiAgICAgcmV0dXJuIHRhYmxlOwogfQogCi1Qcm9wZXJ0eVRhYmxl
KiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3Bl
cnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoVk0m
IHZtLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXAp
KSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25lciwgb3RoZXIpOworICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkp
IFByb3BlcnR5VGFibGUodm0sIG90aGVyKTsKICAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24odm0p
OwogICAgIHJldHVybiB0YWJsZTsKIH0KIAotUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6
Y2xvbmUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNv
bnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6
Y2xvbmUoVk0mIHZtLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmIG90aGVyKQogewotICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3BlcnR5VGFibGUodm0sIG93
bmVyLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQcm9w
ZXJ0eVRhYmxlKHZtLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsKICAgICB0YWJsZS0+ZmluaXNo
Q3JlYXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KQEAgLTY5LDcgKzY5LDcgQEAgUHJv
cGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIHVucwogICAgIEFTU0VSVChpc1Bvd2Vy
T2YyKG1faW5kZXhTaXplKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0m
IHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3BlcnR5
VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikK
ICAgICA6IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAs
IG1faW5kZXhTaXplKG90aGVyLm1faW5kZXhTaXplKQogICAgICwgbV9pbmRleE1hc2sob3RoZXIu
bV9pbmRleE1hc2spCkBAIC04MiwxMCArODIsOCBAQCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKFZNJiB2bSwgSlNDCiAgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFT
aXplKCkpOwogCiAgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVy
YXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIGZvciAoaXRl
cmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAgIGl0ZXIt
PmtleS0+cmVmKCk7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5z
cGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9CiAKICAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRP
ZmZzZXRzIHZlY3Rvci4KICAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0ZWRP
ZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKQEAgLTkzLDcgKzkxLDcgQEAg
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpTQwogICAgICAgICBtX2RlbGV0
ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVs
ZXRlZE9mZnNldHMpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0s
IEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlU
YWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKICAgICA6IEpT
Q2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1faW5kZXhT
aXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQogICAgICwgbV9pbmRleE1hc2so
bV9pbmRleFNpemUgLSAxKQpAQCAtMTA5LDcgKzEwNyw2IEBAIFByb3BlcnR5VGFibGU6OlByb3Bl
cnR5VGFibGUoVk0mIHZtLCBKU0MKICAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsKICAgICAg
ICAgcmVpbnNlcnQoKml0ZXIpOwogICAgICAgICBpdGVyLT5rZXktPnJlZigpOwotICAgICAgICB2
bS5oZWFwLndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSk7CiAg
ICAgfQogCiAgICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3IuCkBAIC0xMzIs
MTcgKzEyOSw0IEBAIFByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCkKICAgICBmYXN0RnJl
ZShtX2luZGV4KTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2Vs
bCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgUHJvcGVydHlUYWJsZSogdGhp
c09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09C
SkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEFTU0VSVCh0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwotCi0g
ICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAgUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+ZW5kKCk7Ci0gICAgZm9yIChQ
cm9wZXJ0eVRhYmxlOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5iZWdpbigpOyBwdHIgIT0g
ZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c3BlY2lmaWNWYWx1ZSk7
Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTcz
LDcgKzE3Myw2IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmoKICAg
ICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKGNs
YXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKTsKICAgICBz
ZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRlc0lu
UHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KDApOwogICAg
IHNldFByZXZlbnRFeHRlbnNpb25zKGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZhbHNl
KTsKICAgICBzZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIwMyw3ICsyMDIs
NiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0SGFzUmVhZE9ubHlPckdl
dHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+aGFzU3RhdGlj
U2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxl
UHJvcGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAg
c2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KDApOwogICAgIHNldFByZXZlbnRFeHRlbnNp
b25zKGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRTdGF0aWNG
dW5jdGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIzMiw3ICsyMzAsNiBAQCBTdHJ1Y3R1cmU6OlN0
cnVjdHVyZShWTSYgdm0sIGNvbnN0IFN0cnVjCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRlclNl
dHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhwcmV2aW91cy0+aGFzUmVhZE9ubHlPckdldHRl
clNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpKTsKICAgICBzZXRIYXNOb25FbnVtZXJh
YmxlUHJvcGVydGllcyhwcmV2aW91cy0+aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSk7CiAg
ICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRo
cmFzaENvdW50KHByZXZpb3VzLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSk7CiAgICAg
c2V0UHJldmVudEV4dGVuc2lvbnMocHJldmlvdXMtPnByZXZlbnRFeHRlbnNpb25zKCkpOwogICAg
IHNldERpZFRyYW5zaXRpb24odHJ1ZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmllZChw
cmV2aW91cy0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKQEAgLTMwMCw3ICsyOTcsNyBAQCB2
b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZmluZFN0cnVjdHVy
ZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJsZSk7
CiAgICAgCiAgICAgaWYgKHRhYmxlKSB7Ci0gICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHkodm0s
IHN0cnVjdHVyZSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5l
Q2FwYWNpdHkpKTsKKyAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgbnVtYmVyT2ZTbG90
c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKICAgICAgICAgc3Ry
dWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CiAgICAgfQogICAgIApAQCAtMzE3LDcgKzMxNCw3IEBA
IHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICAgICAgc3RydWN0
dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUluUHJl
dmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBl
bnRyeSh2bSwgdGhpcywgc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1
cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCksIHN0cnVjdHVy
ZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSk7CisgICAgICAgIFByb3BlcnR5TWFw
RW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOwogICAgICAgICBw
cm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3Bl
cnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtMzM2LDMwICszMzMsMTIg
QEAgc2l6ZV90IFN0cnVjdHVyZTo6c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lUwogICAgIHJldHVybiBu
ZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5KCkpOwogfQogIAot
dm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgU3RyaW5nSW1wbCogcmVwID0gcHJvcGVydHlO
YW1lLnVpZCgpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0KLSAgICBBU1NFUlQoaXNE
aWN0aW9uYXJ5KCkpOwotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwotCi0gICAgUHJvcGVy
dHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmdldChyZXApOwotICAgIEFTU0VS
VChlbnRyeSk7Ci0gICAgZW50cnktPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKLX0KLQotU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJ
bXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0
cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIEFTU0VSVCghc3RydWN0
dXJlLT5pc0RpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7
CiAKICAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1f
dHJhbnNpdGlvblRhYmxlLmdldCh1aWQsIGF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1fc3BlY2lmaWNW
YWx1ZUluUHJldmlvdXMuZ2V0KCk7Ci0gICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlSW5QcmV2aW91
cyAmJiBzcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyAhPSBzcGVjaWZpY1ZhbHVlKQotICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0aW5nVHJhbnNpdGlvbi0+
bV9vZmZzZXQsIGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAg
IG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9vZmZzZXQ7CiAgICAgICAgIHJldHVybiBl
eGlzdGluZ1RyYW5zaXRpb247CkBAIC0zNjgsMTYgKzM0NywxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitT
dHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBBU1NFUlQo
IWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIGFkZFByb3BlcnR5VHJhbnNpdGlv
blRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgpLCBh
dHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQpOworICAgIHJldHVybiBhZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZS51aWQoKSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25j
dXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQg
YXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7Ci0gICAgcmV0dXJuIGFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgdWlkLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQpOworICAgIHJldHVybiBhZGRQcm9wZXJ0eVRyYW5z
aXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRlcywg
b2Zmc2V0KTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRlcmNl
cHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdApAQCAtNDMyLDI1ICs0MTEsMTIgQEAgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdAogICAgIHJldHVybiBBbGxvY2F0ZUFycmF5
U3RvcmFnZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zm
c2V0JiBvZmZzZXQsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBjb250ZXh0KQorU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQ
cm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgY29udGV4dCkK
IHsKLSAgICAvLyBJZiB3ZSBoYXZlIGEgc3BlY2lmaWMgZnVuY3Rpb24sIHdlIG1heSBoYXZlIGdv
dCB0byB0aGlzIHBvaW50IGlmIHRoZXJlIGlzCi0gICAgLy8gYWxyZWFkeSBhIHRyYW5zaXRpb24g
d2l0aCB0aGUgY29ycmVjdCBwcm9wZXJ0eSBuYW1lIGFuZCBhdHRyaWJ1dGVzLCBidXQKLSAgICAv
LyBzcGVjaWFsaXplZCB0byBhIGRpZmZlcmVudCBmdW5jdGlvbi4gIEluIHRoaXMgY2FzZSB3ZSBq
dXN0IHdhbnQgdG8gZ2l2ZSB1cAotICAgIC8vIGFuZCBkZXNwZWNpYWxpemUgdGhlIHRyYW5zaXRp
b24uCi0gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGNsZWFyIHRoZSB2YWx1ZSBvZiBzcGVjaWZpY0Z1
bmN0aW9uIHdoaWNoIHdpbGwgcmVzdWx0Ci0gICAgLy8gaW4gdXMgYWRkaW5nIGEgbm9uLXNwZWNp
ZmljIHRyYW5zaXRpb24sIGFuZCBhbnkgc3Vic2VxdWVudCBsb29rdXAgaW4KLSAgICAvLyBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUgd2lsbCBqdXN0
IHVzZSB0aGF0LgotICAgIGlmIChzcGVjaWZpY1ZhbHVlICYmIHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uVGFibGUuY29udGFpbnMocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRyaWJ1dGVzKSkKLSAgICAg
ICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgIEFTU0VSVCgh
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHN0cnVj
dHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQpKTsK
KyAgICBBU1NFUlQoIVN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0
cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSk7CiAg
ICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgPT0g
bWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0g
MDsKLQogICAgIGludCBtYXhUcmFuc2l0aW9uTGVuZ3RoOwogICAgIGlmIChjb250ZXh0ID09IFB1
dFByb3BlcnR5U2xvdDo6UHV0QnlJZCkKICAgICAgICAgbWF4VHJhbnNpdGlvbkxlbmd0aCA9IHNf
bWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkOwpAQCAtNDU5LDcgKzQyNSw3IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICBpZiAoc3RydWN0
dXJlLT50cmFuc2l0aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsKICAgICAgICAg
U3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsK
LSAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZSh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgb2Zmc2V0ID0gdHJh
bnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1
cm4gdHJhbnNpdGlvbjsKICAgICB9CiAgICAgCkBAIC00NjksMTEgKzQzNSwxMCBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJl
dmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5tX25h
bWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNldEF0
dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPm1fc3BlY2lm
aWNWYWx1ZUluUHJldmlvdXMuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzcGVjaWZpY1Zh
bHVlKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtLCB0cmFuc2l0
aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlv
biwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAg
IHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKIAotICAgIG9mZnNl
dCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+
bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKQEAgLTUwNSw3
ICs0NzAsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3Bl
cnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTUxMywzMCArNDc4LDYgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogICAgIHJldHVybiB0cmFuc2l0
aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSByZXBsYWNlRnVu
Y3Rpb24pCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENv
dW50KCkgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOwotICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgIHRyYW5zaXRpb24tPnNl
dFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0aW9u
VGhyYXNoQ291bnQoKSArIDEpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAg
IHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdD
KTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwot
ICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICB0cmFu
c2l0aW9uLT5waW4oKTsKLQotICAgIGlmICh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpCi0gICAgICAgIHRy
YW5zaXRpb24tPmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyh2bSk7Ci0gICAgZWxzZSB7Ci0gICAgICAg
IGJvb2wgcmVtb3ZlZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1bmN0aW9uKHZtLCByZXBsYWNl
RnVuY3Rpb24pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwotICAg
IH0KLQotICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICByZXR1
cm4gdHJhbnNpdGlvbjsKLX0KLQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5n
ZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CkBAIC01NDQsNyArNDg1LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJp
YnV0ZUNoYW5nZVRyYQogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0s
IHN0cnVjdHVyZSk7CiAKICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyh2bSwgdHJhbnNpdGlvbikpOworICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAgICAgICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAKQEAgLTU2OCw3
ICs1MDksNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpCiAKICAg
ICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnByb3Bl
cnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7CiAgICAgdHJh
bnNpdGlvbi0+cGluKCk7CkBAIC02MzEsNyArNTcyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnByZXZlbnRFeHRlbnNpb25zVAogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAg
IHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdD
KTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOwor
ICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVj
dHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+
bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnNldFByZXZl
bnRFeHRlbnNpb25zKHRydWUpOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNjQwLDEzICs1
ODEsMTMgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAgIHJl
dHVybiB0cmFuc2l0aW9uOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9w
ZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3Bl
cnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0m
IHZtKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKICAgICBp
ZiAoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRhYmxl
KCktPmNvcHkodm0sIG93bmVyLCBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSArIDEpOworICAgICAg
ICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBwcm9wZXJ0eVRhYmxlKCktPnNpemUo
KSArIDEpOwogICAgIAogICAgIC8vIEhvbGQgdGhlIGxvY2sgd2hpbGUgc3RlYWxpbmcgdGhlIHRh
YmxlIC0gc28gdGhhdCBnZXRDb25jdXJyZW50bHkoKSBvbiBhbm90aGVyIHRocmVhZAogICAgIC8v
IHdpbGwgZWl0aGVyIGhhdmUgdG8gYnlwYXNzIHRoaXMgc3RydWN0dXJlLCBvciB3aWxsIGdldCB0
byB1c2UgdGhlIHByb3BlcnR5IHRhYmxlCkBAIC02ODIsNyArNjIzLDcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldFByZXZpb3Vz
SUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmli
dXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldElu
ZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUo
KS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxl
KCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9u
ZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1f
b2Zmc2V0OwogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0aW9u
LT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAKQEAgLTc3MywxOSArNzE0LDE2IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICByZXR1cm4gdGhpczsKIH0KIAot
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIWVudW1lcmF0aW9uQ2FjaGUoKSk7CiAK
LSAgICBpZiAoc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgPT0gbWF4U3BlY2lmaWNGdW5j
dGlvblRocmFzaENvdW50KQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKLQogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKICAgICBwaW4oKTsKIAotICAgIHJldHVy
biBwdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmlj
VmFsdWUpOworICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiB9
CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNp
dGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC04MTIsMTEgKzc1MCw1
NyBAQCB2b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShWTSYgdm0pCiB7CiAgICAgQVNT
RVJUKCFoYXNSYXJlRGF0YSgpKTsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEgPSBT
dHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKHZtLCBwcmV2aW91cygpKTsKKyAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldCh2bSwgdGhpcywgcmFy
ZURhdGEpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgc2V0SGFzUmFyZURhdGEo
dHJ1ZSk7CiAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogfQogCitXYXRjaHBvaW50U2V0KiBT
dHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFZNJiB2bSwg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CisgICAgCisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBhbGxvY2F0
ZVJhcmVEYXRhKHZtKTsKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2spOwor
ICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRhKCk7CisgICAg
aWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzKSB7CisgICAgICAgIHJh
cmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMgPQorICAgICAgICAgICAgc3RkOjpt
YWtlX3VuaXF1ZTxTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwPigpOwor
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIH0KKyAgICBhdXRvIHJlc3VsdCA9
IHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMtPmFkZChvZmZzZXQsIG51bGxw
dHIpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9y
LT52YWx1ZSA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOworICAgIHJl
dHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCit2b2lkIFN0cnVjdHVyZTo6
c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGdldCh2bSwgcHJvcGVydHlOYW1l
KTsKKyAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBvZmZz
ZXQpOworfQorCit2b2lkIFN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50KFZN
JiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGVuc3VyZVByb3BlcnR5UmVwbGFj
ZW1lbnRXYXRjaHBvaW50U2V0KHZtLCBvZmZzZXQpLT5maXJlQWxsKCJEaWQgY2FjaGUgcHJvcGVy
dHkgcmVwbGFjZW1lbnQiKTsKK30KKwordm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRl
cm5hbFByb3BlcnRpZXMoVk0mIHZtKQoreworICAgIGlmICghaXNVbmNhY2hlYWJsZURpY3Rpb25h
cnkoKSkgeworICAgICAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0s
IHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKTsKKyAgICAgICAgc3RhcnRXYXRjaGluZ1Byb3Bl
cnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKTsKKyAgICB9
CisgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7Cit9CisKICNpZiBEVU1Q
X1BST1BFUlRZTUFQX1NUQVRTCiAKIHN0cnVjdCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0TG9n
Z2VyIHsKQEAgLTg0NSwyMSArODI5LDIxIEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tD
b25zaXN0ZW5jeSgKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVBy
b3BlcnR5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3Ry
dWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShWTSYgdm0pCiB7CiAgICAgaWYgKCFwcm9wZXJ0eVRh
YmxlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9u
ZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOworICAgIHJldHVybiBQcm9wZXJ0
eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CiB9CiAKLVByb3BlcnR5
VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSwgU3Ry
dWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKICAgICBpZiAocHJvcGVydHlUYWJsZSgpKQotICAgICAg
ICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqcHJvcGVydHlUYWJsZSgp
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJvcGVy
dHlUYWJsZSgpLmdldCgpKTsKICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZtLCBu
dW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwog
fQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYsIFN0cmlu
Z0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUp
CitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0lt
cGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CiAgICAgVmVjdG9yPFN0cnVjdHVyZSos
IDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CkBAIC04NzEsNyArODU1
LDYgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bAogICAgICAgICBQ
cm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5nZXQodWlkKTsKICAgICAgICAgaWYgKGVu
dHJ5KSB7CiAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Ci0gICAg
ICAgICAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnktPnNwZWNpZmljVmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQgPSBlbnRyeS0+b2Zmc2V0OwogICAgICAgICAg
ICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtODg1LDE0ICs4NjgsMTMgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25j
dXJyZW50bAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBhdHRyaWJ1
dGVzID0gc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpOwotICAgICAgICBzcGVjaWZp
Y1ZhbHVlID0gc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpOwogICAg
ICAgICByZXR1cm4gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB9CiAgICAgCiAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7CiB9CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2Vs
bComIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0s
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogewogICAg
IEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlKCkt
PmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC05MDcsNDIgKzg4OSwxNSBAQCBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zm
c2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAgIHNwZWNpZmlj
VmFsdWUgPSBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5nZXQoKTsKICAgICByZXR1cm4gZW50cnktPm9m
ZnNldDsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7
Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAg
ICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUHJv
cGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmdldChwcm9wZXJ0eU5hbWUu
dWlkKCkpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFT
U0VSVChlbnRyeS0+c3BlY2lmaWNWYWx1ZSk7Ci0gICAgZW50cnktPnNwZWNpZmljVmFsdWUuY2xl
YXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUFs
bEZ1bmN0aW9ucyhWTSYgdm0pCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAg
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgaWYg
KCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci19Ci0K
LVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZShWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBHQ1NhZmVDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwogICAgIAorICAgIHNldERp
ZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKGZhbHNlKTsKKyAgICAKICAgICBBU1NFUlQoIUpTQzo6
aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKIAogICAgIGNoZWNrQ29uc2lz
dGVuY3koKTsKQEAgLTk1Niw3ICs5MTEsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1
dFNwZWNpZmljVmFsCiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0eVRh
YmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKLSAgICBwcm9wZXJ0eVRhYmxl
KCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHZtLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0cmli
dXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBFbnRy
eShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgIHJldHVybiBuZXdPZmZzZXQ7CkBAIC0xMDYwLDcgKzEwMTUsNiBAQCB2b2lkIFN0cnVjdHVy
ZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX2NhY2hlZFByb3RvdHlwZUNoYWluKTsKICAgICB9CiAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKLSAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7CiAKICAgICBpZiAodGhp
c09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpIHsKICAgICAgICAgQVNTRVJUKHRoaXNP
YmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CkBAIC0xMDgzLDggKzEwMzcsNyBAQCBib29s
IFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlCiAgICAgICAgIGN1cnJlbnQgPSBw
cm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIAogICAgICAgICB1bnNp
Z25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBp
ZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIApAQCAtMTE0NCwxMyArMTA5Nyw4IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGMKICAgICBpZiAodGFibGUpIHsKICAgICAgICAgUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOwogICAgICAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBpdGVyLT5rZXksICI6Iiwgc3RhdGljX2Nhc3Q8aW50PihpdGVy
LT5vZmZzZXQpKTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zcGVjaWZpY1ZhbHVlKSB7Ci0gICAg
ICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlDb250ZXh0OwotICAgICAgICAgICAgICAgIG91
dC5wcmludCgiPT4iLCBSYXdQb2ludGVyKGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlLT5tX2xv
Y2sudW5sb2NrKCk7CiAgICAgfQpAQCAtMTE2MCwxMCArMTEwOCw2IEBAIHZvaWQgU3RydWN0dXJl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFt
ZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksICI6Iiwgc3RhdGljX2Nhc3Q8
aW50PihzdHJ1Y3R1cmUtPm1fb2Zmc2V0KSk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fc3Bl
Y2lmaWNWYWx1ZUluUHJldmlvdXMpIHsKLSAgICAgICAgICAgIER1bXBDb250ZXh0IGR1bW15Q29u
dGV4dDsKLSAgICAgICAgICAgIG91dC5wcmludCgiPT4iLCBSYXdQb2ludGVyKHN0cnVjdHVyZS0+
bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSkpOwotICAgICAgICB9CiAgICAgfQogICAg
IAogICAgIG91dC5wcmludCgifSwgIiwgSW5kZXhpbmdUeXBlRHVtcChpbmRleGluZ1R5cGUoKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTIgKzExMSwxMSBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3Bl
cnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpV
bmtub3duQ29udGV4dCk7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBs
KiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVy
dHlPZmZzZXQmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQ
cm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0
eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFBy
b3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgPSBQ
dXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBh
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVj
dHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZz
ZXQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0
eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5h
bWUsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVj
dHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIEpTVmFsdWUg
cHJvdG90eXBlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBkZXNw
ZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTEzOCw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAgc3Rh
dGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2Vk
IHdpdGggY2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGFk
ZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
UHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgdm9pZCBzZXRQ
cm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7IG1f
cHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAKQEAgLTE4OCw4
ICsxODcsNiBAQCBwdWJsaWM6CiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90b3R5cGUgY2hhaW4g
aW50ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwogICAgIGJvb2wgcHJvdG90eXBlQ2hhaW5N
YXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICAgICAgCi0gICAgYm9v
bCB0cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiAhIW1f
c3BlY2lmaWNWYWx1ZUluUHJldmlvdXM7IH0KLSAgICAgICAgCiAgICAgU3RydWN0dXJlKiBwcmV2
aW91c0lEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gaW5mbygpKTsKQEAgLTI2MywxMCArMjYwLDEwIEBAIHB1YmxpYzoKIAogICAgIFBy
b3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZzZXQg
Z2V0KFZNJiwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRF
IFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3Bl
cnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpOwog
CiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCogdWlk
KTsKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1
aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkJiBhdHRyaWJ1dGVzKTsKIAogICAgIHZvaWQgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVydGll
c1dpdGhQcm90b0NoZWNrKGJvb2wgaXNfX3Byb3RvX18pCiAgICAgewpAQCAtMjgzLDkgKzI4MCw2
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICFKU0M6OmlzVmFsaWRPZmZzZXQobV9vZmZzZXQp
OwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVzcGVjaWZ5RGljdGlvbmFy
eUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKLSAgICB2b2lkIGRpc2FibGVTcGVjaWZpY0Z1
bmN0aW9uVHJhY2tpbmcoKSB7IHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudChtYXhTcGVj
aWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOyB9Ci0KICAgICB2b2lkIHNldEVudW1lcmF0aW9uQ2Fj
aGUoVk0mLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKTsgLy8gRGVm
aW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogZW51bWVyYXRpb25DYWNoZSgpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IuaC4KICAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwgUHJv
cGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwpAQCAtMzY0LDEzICszNTgsMzYgQEAg
cHVibGljOgogICAgICAgICBBU1NFUlQodHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxsVmFs
aWQoKSk7CiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9pbnQp
OwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgdm9pZCBkaWRUcmFuc2l0aW9uRnJvbVRoaXNT
dHJ1Y3R1cmUoKSBjb25zdDsKICAgICAKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiB0cmFuc2l0
aW9uV2F0Y2hwb2ludFNldCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90cmFuc2l0
aW9uV2F0Y2hwb2ludFNldDsKICAgICB9CisgICAgCisgICAgV2F0Y2hwb2ludFNldCogZW5zdXJl
UHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgdm9pZCBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mIHZtLCBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBlbnN1cmVQcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldCh2bSwgb2Zmc2V0KTsKKyAgICB9CisgICAgdm9pZCBzdGFydFdhdGNo
aW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIFdhdGNo
cG9pbnRTZXQqIHByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5T2Zmc2V0
KTsKKyAgICB2b2lkIGRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCk7CisgICAgdm9p
ZCBkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mLCBQcm9wZXJ0eU9mZnNldCk7CisgICAg
CisgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3NhcnkoVk0m
IHZtKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShkaWRXYXRjaEludGVybmFsUHJvcGVydGll
cygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhcnRXYXRjaGluZ0ludGVybmFs
UHJvcGVydGllcyh2bSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRXYXRjaGluZ0ludGVy
bmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5Rm9yRW50aXJlQ2hhaW4oVk0mIHZtKQorICAgIHsKKyAg
ICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsgc3RydWN0
dXJlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAgICAg
IHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5KHZt
KTsKKyAgICB9CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVyZVNo
YXBlKCk7CiAgICAgCkBAIC00MDYsMTEgKzQyMywxMSBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5n
UHJvdG8sIEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8s
IDEsIDQpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNOb25FbnVtZXJhYmxlUHJvcGVy
dGllcywgSGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIDEsIDUpOwogICAgIERFRklORV9CSVRG
SUVMRCh1bnNpZ25lZCwgYXR0cmlidXRlc0luUHJldmlvdXMsIEF0dHJpYnV0ZXNJblByZXZpb3Vz
LCAxNCwgNik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCBzcGVjaWZpY0Z1bmN0aW9u
VGhyYXNoQ291bnQsIFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCwgMiwgMjApOwogICAgIERF
RklORV9CSVRGSUVMRChib29sLCBwcmV2ZW50RXh0ZW5zaW9ucywgUHJldmVudEV4dGVuc2lvbnMs
IDEsIDIyKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJh
bnNpdGlvbiwgMSwgMjMpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNGdW5jdGlv
bnNSZWlmaWVkLCBTdGF0aWNGdW5jdGlvbnNSZWlmaWVkLCAxLCAyNCk7CiAgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGhhc1JhcmVEYXRhLCBIYXNSYXJlRGF0YSwgMSwgMjUpOworICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGllcywgRGlkV2F0Y2hJbnRl
cm5hbFByb3BlcnRpZXMsIDEsIDI2KTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNDIxLDcgKzQzOCw3IEBAIHByaXZhdGU6CiAKICAgICBz
dGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsKICAgICAKLSAg
ICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlSW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChTdHJ1
Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zm
c2V0Jik7CiAKICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzdHJ1Y3R1cmUgdGhhdCBoYXMg
YSB1c2FibGUgcHJvcGVydHkgdGFibGUsIHRoYXQgcHJvcGVydHkgdGFibGUsCiAgICAgLy8gYW5k
IHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3QgdG8g
aXQuIElmIGl0IHJldHVybnMgYQpAQCAtNDMxLDE5ICs0NDgsMTYgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKiwgRGljdGlvbmFyeUtpbmQpOwogCi0gICAgUHJvcGVydHlPZmZzZXQgcHV0U3BlY2lmaWNW
YWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5h
bWUpOwogCiAgICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJyZW50
SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQgY2hlY2tD
b25zaXN0ZW5jeSgpOwogCi0gICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihWTSYsIFByb3BlcnR5
TmFtZSk7Ci0gICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0mKTsKLQogICAgIFdyaXRl
QmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5VGFi
bGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiwgU3RydWN0dXJlKiBvd25l
cik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mLCBTdHJ1Y3R1cmUq
IG93bmVyKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
Vk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVydHlU
YWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0
eVRhYmxlKFZNJik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5u
aW5nKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5
TWFwKFZNJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoVk0m
IHZtLCBEZWZlckdDJikKICAgICB7CkBAIC01MDMsMTIgKzUxNywxMiBAQCBwcml2YXRlOgogICAg
IGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CisgICAgCisgICAgdm9pZCBzdGFydFdh
dGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKICAgICBzdGF0aWMgY29uc3QgaW50IHNf
bWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFu
c2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKLSAgICAKICAgICAv
LyBUaGVzZSBuZWVkIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0
aGUgJ1N0cnVjdHVyZScKICAgICAvLyBwYXJ0IG9mIHRoZSBvYmplY3QuCiAgICAgU3RydWN0dXJl
SURCbG9iIG1fYmxvYjsKQEAgLTUyMSw3ICs1MzUsNiBAQCBwcml2YXRlOgogICAgIFdyaXRlQmFy
cmllcjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwogCiAgICAgUmVmUHRyPFN0cmluZ0lt
cGw+IG1fbmFtZUluUHJldmlvdXM7Ci0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9zcGVjaWZp
Y1ZhbHVlSW5QcmV2aW91czsKIAogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxp
bmVzLmgJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDkgKzEwMiw3IEBAIGlu
bGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYKIGlubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYgdm0sIFN0cmluZ0ltcGwqIHVpZCkK
IHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICBKU0NlbGwqIHNwZWNpZmlj
VmFsdWVJZ25vcmVkOwotICAgIHJldHVybiBnZXRDb25jdXJyZW50bHkoCi0gICAgICAgIHZtLCB1
aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7CisgICAgcmV0dXJu
IGdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCk7CiB9CiAKIGlubGlu
ZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKiBjZWxsKSBj
b25zdApAQCAtMjIzLDYgKzIyMSwzMSBAQCBBTFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQcm9w
ZXJ0eVRhYmxlCiAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIH0KIAoraW5saW5l
IHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KQoreworICAgIGlmIChMSUtFTFkoIWhhc1JhcmVEYXRhKCkpKQorICAgICAgICByZXR1cm47Cisg
ICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3BlcnR5V2F0Y2hwb2ludE1hcCogbWFwID0gcmFyZURh
dGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzLmdldCgpOworICAgIGlmIChMSUtFTFko
IW1hcCkpCisgICAgICAgIHJldHVybjsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtYXAtPmdl
dChvZmZzZXQpOworICAgIGlmIChMSUtFTFkoIXNldCkpCisgICAgICAgIHJldHVybjsKKyAgICBz
ZXQtPmZpcmVBbGwoIlByb3BlcnR5IGRpZCBnZXQgcmVwbGFjZWQiKTsKK30KKworaW5saW5lIFdh
dGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQo
UHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KG1fbG9jayk7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJv
cGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSByYXJlRGF0YSgpLT5tX3JlcGxhY2VtZW50V2F0Y2hw
b2ludFNldHMuZ2V0KCk7CisgICAgaWYgKCFtYXApCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIHJldHVybiBtYXAtPmdldChvZmZzZXQpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgU3Ry
dWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBQcm9wZXJ0eVRh
YmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRh
LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBAQCBT
dHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNyCiAgICAgcmV0dXJuIHJhcmVE
YXRhOwogfQogCit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5TdHJ1Y3R1cmVS
YXJlRGF0YTo6flN0cnVjdHVyZVJhcmVEYXRhKCk7Cit9CisKIFN0cnVjdHVyZVJhcmVEYXRhOjpT
dHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBKU0Nl
bGwodm0sIHZtLnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCShy
ZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQ2xh
c3NJbmZvLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgor
I2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MCw2
ICs0MSwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSA6IHB1YmxpYyBKU0NlbGwgCiBwdWJs
aWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1cmUq
KTsKIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJl
bihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRl
U3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CkBAIC01
MywxMCArNTgsMTIgQEAgcHVibGljOgogCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogZW51
bWVyYXRpb25DYWNoZSgpOwogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIGNvbnN0
IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKTsKLQorICAg
IAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFN0cnVjdHVyZTsKKyAgICAKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYsIFN0cnVjdHVyZSop
OwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CkBAIC02NCw2ICs3MSw5IEBA
IHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsKICAgICBX
cml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAgICBXcml0ZUJh
cnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4gbV9lbnVtZXJhdGlvbkNhY2hlOworICAgIAor
ICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9pbnRTZXQ+
LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlI
YXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRjaHBv
aW50U2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25z
dGFudC1nbG9iYWwtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28ocCkgeworICAgIGlmIChw
KQorICAgICAgICBNYXRoID0ge3NpbjogZnVuY3Rpb24oKSB7IHJldHVybiA0MjsgfSwgUEk6IDQz
LCBhYnM6IE1hdGguYWJzfTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworKGZ1bmN0aW9uKCkgewor
ICAgIHZhciBuID0gMTAwMDAwOworICAgIHZhciBtID0gMTAwOworICAgIHZhciByZXN1bHQgPSAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGZvbyhpID09IG4g
LSBtKTsKKyAgICAgICAgcmVzdWx0ICs9IE1hdGguc2luKE1hdGguUEkpOworICAgIH0KKyAgICBp
ZiAoTWF0aC5hYnMocmVzdWx0IC0gbSAqIDQyKSA+IDFlLTgpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtcHJv
cGVydHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjIgQEAKK3ZhciBvID0ge2Y6e2Y6e2Y6e2Y6e2Y6e2Y6e2Y6NDJ9fX19fX19OworCitmdW5jdGlv
biBmb28ocCkgeworICAgIGlmIChwKQorICAgICAgICBvLmYuZi5mLmYuZi5mID0ge2Y6NTN9Owor
fQorCitub0lubGluZShmb28pOworCisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG4gPSAxMDAwMDA7
CisgICAgdmFyIG0gPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgCisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZm9vKGkgPT0gbiAtIG0pOworICAgICAg
ICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIH0KKyAgICAKKyAgICBpZiAocmVzdWx0
ICE9IChuIC0gbSkgKiA0MiArIG0gKiA1MykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10
aGVuLWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xk
LXRoZW4taW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQt
Zm9sZC10aGVuLWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAor
dmFyIG8gPSB7Zjo0Mn07CisKK2Z1bmN0aW9uIGZvbyhwLCBvLCB2KSB7CisgICAgaWYgKHApCisg
ICAgICAgIG8uZiA9IHY7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gby5mOwor
fQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDsgKytpKQorICAgIGZvbyhmYWxzZSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsr
aSkKKyAgICBmb28odHJ1ZSwge30sIDQyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytp
KQorICAgIGZvbyh0cnVlLCBvLCA0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyAr
K2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCitmb28odHJ1
ZSwgbywgNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1MykKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcmVwbGFjZS10aGVuLWNhY2hl
LWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcmVwbGFjZS10aGVuLWNhY2hlLWdl
dC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMw
IEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHAsIHYpIHsKKyAgICBpZiAocCkK
KyAgICAgICAgby5mID0gdjsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBvLmY7
Cit9CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwOyArK2kpCisgICAgZm9vKGZhbHNlKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsg
KytpKQorICAgIGZvbyh0cnVlLCA0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyAr
K2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCitmb28odHJ1
ZSwgNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1MykKKyAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13
YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50
LWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxp
ZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBmb28ocCwg
dikgeworICAgIGlmIChwKQorICAgICAgICBnbG9iYWwgPSB2OworfQorCitmdW5jdGlvbiBiYXIo
KSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJh
cik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBmb28oZmFsc2UpOworCit2
YXIgdmFsdWUgPSA0MjsKK2Zvbyh0cnVlLCB2YWx1ZSk7Cit2YXIgbiA9IDEwMDAwMDsKK3ZhciBt
ID0gMTAwOworZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICBpZiAoaSA9PSBuIC0g
bSkKKyAgICAgICAgZm9vKHRydWUsIHZhbHVlID0gNTMpOworICAgIHZhciByZXN1bHQgPSBiYXIo
KTsKKyAgICBpZiAocmVzdWx0ICE9IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IG9uIGl0
ZXJhdGlvbiAiICsgaSArICIgZ290OiAiICsgcmVzdWx0OworfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQt
YW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2
IEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBvLmYgPSB2Owor
fQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUoZm9v
KTsKK25vSW5saW5lKGJhcik7CisKK2Zvbyg0Mik7Citmb28oNDIpOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGJhcigpOworICAgIGlmIChy
ZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKK30KKworZm9vKDUzKTsKK3ZhciByZXN1bHQgPSBiYXIoKTsKK2lmIChyZXN1bHQgIT0gNTMp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQtcHV0LXRvLXNjb3BlLWds
b2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNh
Y2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13
YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAor
ZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBnbG9iYWwgPSB2OworfQorCitmdW5jdGlvbiBiYXIoKSB7
CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7
CisKK3ZhciB2YWx1ZSA9IDQyOworZm9vKHZhbHVlKTsKK3ZhciBuID0gMTAwMDAwOwordmFyIG0g
PSAxMDA7Citmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgIGlmIChpID09IG4gLSBt
KQorICAgICAgICBmb28odmFsdWUgPSA1Myk7CisgICAgdmFyIHJlc3VsdCA9IGJhcigpOworICAg
IGlmIChyZXN1bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93ICJFcnJvcjogb24gaXRlcmF0aW9u
ICIgKyBpICsgIiBnb3Q6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12YWx1
ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBlYXQtcHV0LXRvLXNjb3BlLWdsb2JhbC13aXRoLXNhbWUt
dmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBlYXQtcHV0LXRvLXNjb3BlLWdsb2JhbC13aXRo
LXNhbWUtdmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGZvbyh2KSB7CisgICAgZ2xvYmFsID0gdjsKK30KKworZnVu
Y3Rpb24gYmFyKCkgeworICAgIHJldHVybiBnbG9iYWw7Cit9CisKK25vSW5saW5lKGZvbyk7Citu
b0lubGluZShiYXIpOworCit2YXIgdmFsdWUgPSA0MjsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7
ICsraSkKKyAgICBmb28odmFsdWUpOwordmFyIG4gPSAxMDAwMDA7Cit2YXIgbSA9IDEwMDsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgaWYgKGkgPT0gbiAtIG0pCisgICAgICAg
IGZvbyh2YWx1ZSA9IDUzKTsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3Vs
dCAhPSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBvbiBpdGVyYXRpb24gIiArIGkgKyAi
IGdvdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDgwOCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA3
LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9wdF0g
SW5mZXIgaW1tdXRhYmxlIG9iamVjdCBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ1NjcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xv
YmFsLXByb3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9p
bmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuaHRtbDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuaHRtbDogQWRkZWQuCisg
ICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXBy
b3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZl
ci1jb25zdGFudC1wcm9wZXJ0eS5qczogQWRkZWQuCisKIDIwMTQtMDYtMzAgIE1hcmsgSGFobmVu
YmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSByMTY5MTIxIGZy
b20gdHJ1bmsuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWds
b2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHktZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwt
cHJvcGVydHktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pT
UmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkKKworT24gc3VjY2VzcywgeW91
IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1Qg
Q09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVs
bHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHku
aHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3Rh
bnQtZ2xvYmFsLXByb3BlcnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY29u
c3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHktZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3Rh
bnQtcHJvcGVydHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5CisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0
eS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25z
dGFudC1wcm9wZXJ0eS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50
LXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0
eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9p
bmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVy
dHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24oKSB7CisgICAg
dmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsK
KyAgICAgICAgcmVzdWx0ICs9IE1hdGguc2luKE1hdGguUEkpOworICAgIH0KKyAgICBpZiAoTWF0
aC5hYnMocmVzdWx0KSA+IDFlLTgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNv
bnN0YW50LXByb3BlcnR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK3ZhciBv
ID0ge2Y6e2Y6e2Y6e2Y6e2Y6e2Y6e2Y6NDJ9fX19fX19OworKGZ1bmN0aW9uKCkgeworICAgIHZh
ciBuID0gMTAwMDAwMDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IG47ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG8uZi5mLmYuZi5mLmYuZjsKKyAgICAKKyAg
ICBpZiAocmVzdWx0ICE9IG4gKiA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234420</attachid>
            <date>2014-07-04 13:35:57 -0700</date>
            <delta_ts>2014-07-04 18:42:07 -0700</delta_ts>
            <desc>adding more ruggedness</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>133353</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNiBA
QAorMjAxNC0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEluZmVyIGltbXV0YWJsZSBvYmplY3QgcHJvcGVydGllcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NTY3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgd2F5IG9mIGluZmVycmluZyBpbW11dGFibGUgb2JqZWN0IHByb3BlcnRpZXMuIEEg
cHJvcGVydHkgaXMgc2FpZCB0bworICAgICAgICBiZSBpbW11dGFibGUgaWYgYWZ0ZXIgaXRzIGNy
ZWF0aW9uIChpLmUuIHRoZSB0cmFuc2l0aW9uIHRoYXQgY3JlYXRlcyBpdCksIHdlIG5ldmVyCisg
ICAgICAgIG92ZXJ3cml0ZSBpdCAoaS5lLiByZXBsYWNlIGl0KSBvciBkZWxldGUgaXQuIEltbXV0
YWJpbGl0eSBpcyBhIHByb3BlcnR5IG9mIGFuICJvd24KKyAgICAgICAgcHJvcGVydHkiIC0gc28g
aWYgd2Ugc2F5IHRoYXQgImYiIGlzIGltbXV0YWJsZSBhdCAibyIgdGhlbiB3ZSBhcmUgaW1wbHlp
bmcgdGhhdCAibyIgaGFzICJmIgorICAgICAgICBkaXJlY3RseSBhbmQgbm90IG9uIGEgcHJvdG90
eXBlLiBJbW11dGFiaWxpdHkgY2FuIGJlIHVzZWQgdG8gY29uc3RhbnQtZm9sZCBhY2Nlc3NlcyB0
bworICAgICAgICBvYmplY3RzIGF0IERGRy10aW1lLiBUaGUgREZHIG5lZWRzIHRvIHByb3ZlIHRo
ZSBmb2xsb3dpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgYWNjZXNzOgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgYmFzZSBvZiB0aGUgYWNjZXNzIG11c3QgYmUgYSBjb25zdGFudCBvYmplY3QgcG9p
bnRlci4KKyAgICAgICAgCisgICAgICAgIC0gQSBjaGVjayAob3Igd2F0Y2hwb2ludCkgbXVzdCBo
YXZlIGJlZW4gZW1pdHRlZCBwcm92aW5nIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBzdHJ1Y3R1cmUK
KyAgICAgICAgICB0aGF0IGFsbG93cyBsb2FkaW5nIHRoZSBwcm9wZXJ0eSBpbiBxdWVzdGlvbi4K
KyAgICAgICAgCisgICAgICAgIC0gVGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0IG9mIHRo
ZSBwcm9wZXJ0eSBpbiB0aGUgc3RydWN0dXJlIHRoYXQgdGhlIG9iamVjdCBoYXMgcmlnaHQKKyAg
ICAgICAgICBub3cgKG9yIHRoZSBzdHJ1Y3R1cmUgeW91IGNoZWNrZWQgLSBkb2Vzbid0IG1hdHRl
ciB3aGljaCkgaXMgc3RpbGwgdmFsaWQgYW5kIHdlIGFkZCBhCisgICAgICAgICAgd2F0Y2hwb2lu
dCB0byBpdCBsYXppbHkuCisgICAgICAgIAorICAgICAgICBUaGUgcmVwbGFjZW1lbnQgd2F0Y2hw
b2ludCBzZXQgaXMgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSB0aGF0IGFueSBhY2Nlc3MgdG8gdGhl
IHByb3BlcnR5IGlzCisgICAgICAgIGNhY2hlZC4gQSBwdXQgY2FjaGUgd2lsbCBjcmVhdGUsIGFu
ZCBpbW1lZGlhdGVseSBpbnZhbGlkYXRlLCB0aGUgd2F0Y2hwb2ludCBzZXQuIEEgZ2V0IGNhY2hl
CisgICAgICAgIHdpbGwgY3JlYXRlIHRoZSB3YXRjaHBvaW50IHNldCBhbmQgbWFrZSBpdCBzdGFy
dCB3YXRjaGluZy4gQW55IG5vbi1jYWNoZWQgcHV0IGFjY2VzcyB3aWxsCisgICAgICAgIGludmFs
aWRhdGUgdGhlIHdhdGNocG9pbnQgc2V0IGlmIG9uZSBoYWQgYmVlbiBjcmVhdGVkLgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBhcHByb2FjaCBhdm9pZHMgY3JlYXRpbmcgcmVwbGFjZW1lbnQgd2F0
Y2hwb2ludCBzZXRzIHVudGlsIHRoZXkgYXJlIGtub3duIHRvIGJlCisgICAgICAgIG5lY2Vzc2Fy
eS4gVGhlIG51bWJlciBvZiBzdWNoIHNldHMgYXQgYW55IHRpbWUgaXMgYXN5bXB0b3RpY2FsbHkg
Ym91bmRlZCBieSB0aGUgbnVtYmVyIG9mCisgICAgICAgIGlubGluZSBjYWNoZXMuIFNvLCBmb3Ig
ZXhhbXBsZSwgZGljdGlvbmFyeSBwcm9wZXJ0aWVzIHdpbGwgdHlwaWNhbGx5IG5vdCBoYXZlIHRo
ZXNlCisgICAgICAgIHdhdGNocG9pbnQgc2V0cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW5m
ZXJlbmNlIGNvbXBsZXRlbHkgc3Vic3VtZXMgdGhlIHByZXZpb3VzbHkgInNwZWNpZmljVmFsdWUi
IGNvbnN0YW50IGluZmVyZW5jZS4gVGhhdAorICAgICAgICBhcHByb2FjaCByZXF1aXJlZCBjcmVh
dGluZyBuZXcgc3RydWN0dXJlcywgd2hpY2ggdGhpcyBvbmUgZG9lcyBub3QuIEl0IGFsc28gZGlk
bid0IHdvcmsgZm9yCisgICAgICAgIGFueSBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCB3ZXJlbid0IGVh
Z2VybHkgcmVjb2duaXplZCBhcyBjYW5kaWRhdGVzIGZvciBjb25zdGFudCBpbmZlcmVuY2UuCisg
ICAgICAgIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMgdGhlIG9sZCBzcGVjaWZp
Y1ZhbHVlIGNvbnN0YW50IGluZmVyZW5jZS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgYSBz
cGVlZC11cCBvbiBldmVyeXRoaW5nLiBkYXRlLWZvcm1hdC14cGFyYiBhbmQgYm90aCBTdW5TcGlk
ZXIvcmF5dHJhY2UgYW5kCisgICAgICAgIFY4L3JheXRyYWNlIHNlZW0gdG8gYmUgdGhlIGJpZ2dl
c3Qgd2lubmVycyBhbW9uZyB0aGUgbWFjcm9iZW5jaG1hcmtzOyB0aGV5IHNlZSA+NSUKKyAgICAg
ICAgc3BlZWQtdXBzLiBNYW55IG9mIG91ciBtaWNyb2JlbmNobWFya3Mgc2VlIHZlcnkgbGFyZ2Ug
cGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCBldmVuIDgwJSBpbgorICAgICAgICBvbmUgY2FzZS4K
KworICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwOgorICAgICAgICAoSlND
OjpDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9HZXRC
eUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZyb21M
TEludCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6
CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAqIGJ5
dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6
OkdldEJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6Om9wZXJhdG9y
PSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAg
ICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBieXRl
Y29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6YWx0
ZXJuYXRlQmFzZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpzcGVjaWZpY1ZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpT
Qzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJ
ZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToK
KyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnNldHRlcik6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6c3BlY2lmaWNWYWx1ZSk6
IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHA6CisgICAgICAgIChK
U0M6OldhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2lu
dFNldDo6ZmlyZUFsbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5o
OgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpmaXJlQWxsKToKKyAgICAgICAgKiBkZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAg
ICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjplbWl0R2V0QnlPZmZz
ZXQpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpGaXh1cFBoYXNlOjppc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUpOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0QWNjZXNzKToKKyAgICAg
ICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjp0cnlHZXRD
b25zdGFudFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR1dhdGNoYWJs
ZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OldhdGNoYWJs
ZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU11
bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlcGF0Y2hCeUlkU2VsZkFjY2Vz
cyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAgICAgICAoSlNDOjp0cnlD
YWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAgICAo
SlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6CisgICAg
ICAgIChKU0M6OkxMSW50OjpwdXRUb1Njb3BlQ29tbW9uKToKKyAgICAgICAgKiBydW50aW1lL0Nv
bW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93UGF0aHM6OnRyeUNhY2hl
UHV0VG9TY29wZUdsb2JhbCk6CisgICAgICAgICogcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNo
YWluLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJj
ZXB0U3RvcmVUbyk6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6Z2V0Q2FsbGFibGVPYmplY3RT
bG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lm
aWNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5oOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjppbmxpbmVHZXRPd25Qcm9w
ZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OmdldENhbGxhYmxlT2JqZWN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgorICAgICAgICAoSlNDOjph
YnN0cmFjdEFjY2Vzcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5o
OgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVudHJ5OjpQcm9wZXJ0eU1hcEVudHJ5KToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y29weSk6CisgICAgICAgICogcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y2xvbmUpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6
UHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUltcGwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJldmVu
dEV4dGVuc2lvbnNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0YWtlUHJv
cGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphbGxvY2F0ZVJh
cmVEYXRhKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGlu
Z1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRD
YWNoZVByb3BlcnR5UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0
V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNv
cHlQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRs
eSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpz
dGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeUZv
ckVudGlyZUNoYWluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0cmFuc2l0aW9uRGlkSW52
b2x2ZVNwZWNpZmljVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRp
c2FibGVTcGVjaWZpY0Z1bmN0aW9uVHJhY2tpbmcpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldENvbmN1
cnJlbnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkUmVwbGFjZVByb3BlcnR5KToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNl
dCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVj
dHVyZVJhcmVEYXRhLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LWds
b2JhbC1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChmb28uTWF0aC5zaW4pOgorICAgICAg
ICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHku
anM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvaml0LWNh
Y2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUu
anM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4t
aW52YWxpZGF0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAg
ICAgICAgKiB0ZXN0cy9zdHJlc3Mvaml0LXB1dC10by1zY29wZS1nbG9iYWwtY2FjaGUtd2F0Y2hw
b2ludC1pbnZhbGlkYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIp
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUt
Z2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgor
ICAgICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbGxpbnQtcHV0LXRvLXNjb3Bl
LWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanM6IEFkZGVkLgorICAgICAgICAo
Zm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQt
dG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12YWx1ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanM6
IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisKIDIwMTQtMDctMDEgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBbZnRsb3B0XSBBbGxvY2F0
ZSBhIG5ldyBHZXR0ZXJTZXR0ZXIgaWYgd2UgY2hhbmdlIHRoZSB2YWx1ZSBvZiBhbnkgb2YgaXRz
IGVudHJpZXMgb3RoZXIgdGhhbiB3aGVuIHRoZXkgd2VyZSBwcmV2aW91c2x5IG51bGwsIHNvIHRo
YXQgaWYgd2UgY29uc3RhbnQtaW5mZXIgYW4gYWNjZXNzb3Igc2xvdCB0aGVuIHdlIGltbWVkaWF0
ZWx5IGdldCB0aGUgZnVuY3Rpb24gY29uc3RhbnQgZm9yIGZyZWUKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAJKHJldmlz
aW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNiBAQCBDb21wbGV4R2V0U3Rh
dHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxleEdldFN0YXR1cyByZXN1bHQ7
CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAgCi0gICAgSlNDZWxsKiBzcGVj
aWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAgICAgICByZXN1bHQubV9jaGFp
biA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAogICAgICAgICAgICAgcHJv
ZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291bnQpKTsKQEAgLTY1LDE4
ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9iamVjdCk7CiAgICAgICAg
IAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQubV9h
dHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYgKGN1cnJlbnRTdHJ1Y3R1cmUt
PmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CisgICAgICAg
ICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzKTsKICAg
ICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFkU3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1
bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYgKGhlYWRTdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CisgICAg
ICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzKTsK
ICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1ZSA9IHNwZWNpZmljVmFsdWU7
Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29mZnNldCkpCiAgICAgICAg
IHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6
OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24s
IGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCog
c3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmli
dXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlv
bmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAgICAgICAgKnByb2ZpbGVkQmxv
Y2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNl
dChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCBm
YWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoU2ltcGxlLCBmYWxzZSwgR2V0
QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNldCwgc3BlY2lmaWNWYWx1
ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwgZmFsc2UsIEdldEJ5SWRWYXJp
YW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsKICNlbHNlCiAgICAgcmV0dXJu
IEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwogI2VuZGlmCkBAIC0xNTYsMTgg
KzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkp
CiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsK
ICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0gICAgICAgIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudDsKICAgICAgICAgdmFy
aWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAgICAg
KnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFs
dWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0ln
bm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFyaWFudC5tX29mZnNldCkpCiAg
ICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0YXRlLCB0cnVlKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAg
ICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAgICB2YXJpYW50Lm1fc3RydWN0
dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50Lm1fc3BlY2lmaWNWYWx1ZSA9
IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0
LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoZGlkQXBwZW5k
LCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMjEyLDggKzIwNCw3IEBA
IEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFy
aWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBs
ZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0
dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCisgICAgICAgICAg
ICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNl
dCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAg
IGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBAIC0yOTcsMTYgKzI4OCwxMyBA
QCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCiAgICAgICAgICAgICBy
ZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgCiAgICAgICAgIHVu
c2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0s
IHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMp
OwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVy
biBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdzIHByb2JhYmx5IGEgcHJvdG90
eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2ZW4gdGhvdWdoIHdlIGNvdWxk
IHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAgICAgIGlmIChhdHRyaWJ1dGVz
ICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhNYWtlc0NhbGxz
KTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0cmVuZ2h0LXJlZHVjaW5nIHRo
aXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAg
ICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAKLSAgICAgICAgaWYgKCFyZXN1
bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1cmUsIG9mZnNldCwgc3BlY2lm
aWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KEdldEJ5SWRWYXJp
YW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE3MDc4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIEdldEJ5
SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUsCisg
ICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVf
cHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6IG1fc3RydWN0dXJlU2V0
KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxscHRyKQotICAgICwgbV9z
cGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAg
LCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpCiB7CiAgICAgaWYg
KCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxp
ZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIEFTU0VS
VCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYgQEAgR2V0QnlJZFZhcmlhbnQm
IEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0dXJlU2V0ID0gb3RoZXIubV9z
dHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVj
a3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOwotICAgIG1f
c3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsKICAgICBtX29mZnNldCA9IG90
aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBt
X2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVy
Lm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzUsNiArNzIsMTYgQEAgR2V0QnlJZFZhcmlhbnQmIEdl
dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJldHVybiAqdGhpczsKIH0KIAorU3RydWN0dXJl
U2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29uc3QKK3sKKyAgICBpZiAoIW1f
YWx0ZXJuYXRlQmFzZSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNldCgpOworICAgIAorICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29uc3RhbnRDaGVja3MsIG1f
YWx0ZXJuYXRlQmFzZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0dXJlKTsKKyAgICByZXR1
cm4gc3RydWN0dXJlOworfQorCiBib29sIEdldEJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShj
b25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSAh
PSBvdGhlci5tX2FsdGVybmF0ZUJhc2UpCkBAIC04Niw5ICs5Myw2IEBAIGJvb2wgR2V0QnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBpZiAoIWFyZUNvbXBhdGlibGUobV9jb25z
dGFudENoZWNrcywgb3RoZXIubV9jb25zdGFudENoZWNrcykpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAKLSAgICBpZiAobV9zcGVjaWZpY1ZhbHVlICE9IG90aGVyLm1fc3BlY2lmaWNWYWx1
ZSkKLSAgICAgICAgbV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOwotCiAgICAgbWVyZ2VJbnRv
KG90aGVyLm1fY29uc3RhbnRDaGVja3MsIG1fY29uc3RhbnRDaGVja3MpOwogICAgIG1fc3RydWN0
dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAKQEAgLTExMiw4ICsxMTYs
NiBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50CiAgICAgICAgICJb
IiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29udGV4dCksICJdIik7CiAg
ICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJh
c2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7Ci0g
ICAgaWYgKHNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgb3V0LnByaW50KCIsIHNwZWNpZmljVmFs
dWUgPSAiLCBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0KSk7CiAgICAgb3V0LnBy
aW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAgICBpZiAobV9jYWxsTGlua1N0YXR1cykK
ICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuaAko
cmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5
SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDcgQEAgc3RydWN0IER1bXBD
b250ZXh0OwogY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgogICAgIEdldEJ5SWRWYXJp
YW50KAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCA9IFN0cnVjdHVy
ZVNldCgpLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LCBK
U1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCksCisgICAgICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IGludmFsaWRPZmZzZXQsCiAgICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0dXJlQ2hhaW4q
IGNoYWluID0gbnVsbHB0ciwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVz
PiBjYWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAgIApAQCAtNTgsNyArNTcsNyBAQCBwdWJs
aWM6CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0cnVjdHVy
ZVNldDsgfQogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImIGNvbnN0YW50
Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNrczsgfQogICAgIEpTT2JqZWN0
KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOyB9Ci0gICAg
SlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOyB9
CisgICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsKICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQogICAgIENhbGxMaW5rU3Rh
dHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbExpbmtTdGF0dXMuZ2V0
KCk7IH0KICAgICAKQEAgLTczLDcgKzcyLDYgQEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmVTZXQg
bV9zdHJ1Y3R1cmVTZXQ7CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0
YW50Q2hlY2tzOwogICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7Ci0gICAgSlNWYWx1ZSBt
X3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAJKHJl
dmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDggKzI1NCw4IEBAIFB1dEJ5SWRTdGF0
dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxFeGl0U2l0ZURhdGEpKTsK
ICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQgPSBQdXRC
eUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBj
b21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLnNwZWNpZmljVmFsdWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwgc3Rk
Ojptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1
cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRTdGF0dXMuY2hhaW4oKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAg
ICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpA
QCAtMzM0LDE5ICszMzQsMjQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAg
ICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1
aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNldChvZmZzZXQpKSB7CiAg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29yKQogICAgICAgICAgICAg
ICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwogCiAgICAgICAgICAgICBpZiAo
YXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkKICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAgICAgIGlmIChzcGVjaWZp
Y1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGUgUHV0QnlJZCBzbG93IHBh
dGggdG8gdmVyaWZ5IHRoYXQgd2UncmUgc3RvcmluZyB0aGUgcmlnaHQgdmFsdWUgaW50bwotICAg
ICAgICAgICAgICAgIC8vIHRoZSBzcGVjaWFsaXplZCBzbG90LgorICAgICAgICAgICAgCisgICAg
ICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJl
cGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAgICAgaWYgKCFyZXBsYWNl
U2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
V2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJlLCB0aGlzIHJlcGxhY2Vt
ZW50IHdhdGNocG9pbnQgc2V0LgorICAgICAgICAgICAgICAgIC8vIFRoYXQgbWVhbnMgdGhhdCAg
dGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBzb21ldGhpbmcgZmlzaHkg
aXMKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2UgY2Fubm90IGNyZWF0ZSBv
ciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJyZW50CisgICAgICAgICAg
ICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQgdG8gZG8gdGhpcywgd2Un
ZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KKyAgICAgICAgICAgICAgICAvLyBTbywgYmV0
dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgogICAgICAgICAgICAgICAg
IHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJpYW50KFB1dEJ5SWRW
YXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTM4NCwyMiArMzg5LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkgb3B0aW1pemUgaWYgdGhl
cmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0aW9uIGlzIGNhY2hlZCB0
by4KLSAgICAgICAgLy8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFsbG93cyB1cyB0byBndWFy
ZCBhZ2FpbnN0IGEgdHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAgICAgICAgLy8gdmFsdWUu
Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgc3RvcmluZyBhIHZhbHVlIHRoYXQg
Y291bGQgYmUgc3BlY2lmaWM6IHRoaXMgd291bGQgb25seSBiZSBhIHByb2JsZW0gaWYKLSAgICAg
ICAgLy8gICB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBhIHNwZWNpZmljIHZhbHVl
IGFscmVhZHksIHNpbmNlIGlmIGl0IGRpZG4ndCwKLSAgICAgICAgLy8gICB0aGVuIHdlIHdvdWxk
IGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVjaWZpYyB2YWx1ZS4gSWYg
aXQgZGlkCi0gICAgICAgIC8vICAgaGF2ZSBhIHNwZWNpZmljIHZhbHVlLCB0aGVuIHdlJ2xsIGtu
b3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAgICAgICAgLy8gICBzcGVjaWZpY1Zh
bHVlIHdpbGwgdGVsbCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8gLSBJZiB3ZSdyZSBub3Qg
c3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFnYWluLCB0aGlzIHdvdWxk
IG9ubHkgYmUgYQotICAgICAgICAvLyAgIHByb2JsZW0gaWYgdGhlIGV4aXN0aW5nIHRyYW5zaXRp
b24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hpY2ggd2UgY2hlY2sgZm9yCi0gICAgICAg
IC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4KLSAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCAwLCBvZmZzZXQpOwor
ICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJh
bnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3RydWN0dXJlLCB1aWQsIDAs
IG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAgICAgICAgIHJldHVybiBQ
dXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3VycyBpbiBiaXphcnJlIGNh
c2VzIG9ubHkuIFNlZSBhYm92ZS4KLSAgICAgICAgQVNTRVJUKCF0cmFuc2l0aW9uLT50cmFuc2l0
aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gUHV0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlzVmFsaWRPZmZzZXQob2Zm
c2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlh
bnQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlk
VmFyaWFudC5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDYg
QEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fbmV3U3Ry
dWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90
aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRl
cm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsK
ICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5r
U3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxs
TGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzgsNyArNzcsNyBAQCBQ
dXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiB9CiAKIFB1dEJ5SWRWYXJp
YW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1
Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAorICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAg
ICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlu
a1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAgICAgUHV0QnlJZFZhcmlhbnQgcmVzdWx0OwpA
QCAtODksNyArODgsNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAog
ICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRlcm1pbmFsUHJvdG90eXBl
KCk7CiAgICAgfQogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKLSAgICByZXN1bHQubV9z
cGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1ZTsKICAgICByZXN1bHQubV9jYWxsTGlua1N0YXR1
cyA9IHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTEzNCw2ICsxMzIsMTYgQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFrZXNDYWxscygpIGNvbnN0
CiAgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKK1N0cnVjdHVyZVNldCBQdXRCeUlk
VmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2FsdGVybmF0ZUJh
c2UpCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKKyAgICAKKyAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0ZUJh
c2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIHN0cnVjdHVy
ZTsKK30KKwogYm9vbCBQdXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgUHV0QnlJ
ZFZhcmlhbnQmIG90aGVyKQogewogICAgIGlmIChtX29mZnNldCAhPSBvdGhlci5tX29mZnNldCkK
QEAgLTIyOSw4ICsyMzcsNiBAQCB2b2lkIFB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50CiAgICAgICAgICAgICBsaXN0RHVtcEluQ29udGV4dChjb25zdGFudENoZWNrcygpLCBjb250
ZXh0KSwgIl0iKTsKICAgICAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAgICAgICAgIG91
dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwgaW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5h
dGVCYXNlKSwgY29udGV4dCkpOwotICAgICAgICBpZiAobV9zcGVjaWZpY1ZhbHVlKQotICAgICAg
ICAgICAgb3V0LnByaW50KCIsIHNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQobV9zcGVjaWZp
Y1ZhbHVlLCBjb250ZXh0KSk7CiAgICAgICAgIG91dC5wcmludCgiLCBvZmZzZXQgPSAiLCBtX29m
ZnNldCk7CiAgICAgICAgIG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMp
OwogICAgICAgICBvdXQucHJpbnQoIj4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5oCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgICAgIGNvbnN0IEludGVuZGVkU3RydWN0
dXJlQ2hhaW4qIHN0cnVjdHVyZUNoYWluLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpOwogICAgIAog
ICAgIHN0YXRpYyBQdXRCeUlkVmFyaWFudCBzZXR0ZXIoCi0gICAgICAgIGNvbnN0IFN0cnVjdHVy
ZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNW
YWx1ZSwKKyAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCwKICAgICAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpOwogICAgIAogICAgIEtp
bmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQpAQCAtMTE3LDExICsxMTcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBtX2FsdGVybmF0ZUJhc2U7CiAgICAgfQogICAgIAotICAg
IEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFNldHRlcik7Ci0gICAgICAgIHJldHVybiBtX3NwZWNpZmljVmFsdWU7Ci0gICAgfQor
ICAgIFN0cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CiAgICAgCiAgICAgQ2FsbExp
bmtTdGF0dXMqIGNhbGxMaW5rU3RhdHVzKCkgY29uc3QKICAgICB7CkBAIC0xNDIsNyArMTM4LDYg
QEAgcHJpdmF0ZToKICAgICBTdHJ1Y3R1cmUqIG1fbmV3U3RydWN0dXJlOwogICAgIENvbnN0YW50
U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNrczsKICAgICBKU09iamVjdCogbV9h
bHRlcm5hdGVCYXNlOwotICAgIEpTVmFsdWUgbV9zcGVjaWZpY1ZhbHVlOwogICAgIFByb3BlcnR5
T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gbV9j
YWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDExICs3
MCw2IEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6YWRkKFdhdGNocG9pbnQqIHdhdGMKICAgICBtX3N0
YXRlID0gSXNXYXRjaGVkOwogfQogCi12b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGwoY29uc3Qg
Y2hhciogcmVhc29uKQotewotICAgIGZpcmVBbGwoU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsK
LX0KLQogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWlsJiBk
ZXRhaWwpCiB7CiAgICAgQVNTRVJUKHN0YXRlKCkgPT0gSXNXYXRjaGVkKTsKQEAgLTg1LDYgKzgw
LDExIEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmkKICAgICBXVEY6
OnN0b3JlU3RvcmVGZW5jZSgpOwogfQogCit2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93
KGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBmaXJlQWxsU2xvdyhTdHJpbmdGaXJlRGV0YWls
KHJlYXNvbikpOworfQorCiB2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxXYXRjaHBvaW50cyhj
b25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiB7CiAgICAgd2hpbGUgKCFtX3NldC5pc0VtcHR5KCkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJl
dmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSwxMiArMTMxLDE3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGZpcmVBbGwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKLSAgICAg
ICAgaWYgKHN0YXRlKCkgIT0gSXNXYXRjaGVkKQorICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkg
IT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNsb3co
ZGV0YWlsKTsKICAgICB9CiAgICAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJlQWxs
KGNvbnN0IGNoYXIqIHJlYXNvbik7CisgICAgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJlYXNv
bikKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBmaXJlQWxsU2xvdyhyZWFzb24pOworICAgIH0KICAg
ICAKICAgICB2b2lkIHRvdWNoKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7CkBAIC0x
NTcsNiArMTYyLDcgQEAgcHVibGljOgogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNOb3RFbXB0
eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KICAgICAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpcmVBbGxTbG93KGNvbnN0IEZpcmVEZXRhaWwmKTsgLy8gQ2FsbCBvbmx5IGlm
IHlvdSd2ZSBjaGVja2VkIGlzV2F0Y2hlZC4KKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZp
cmVBbGxTbG93KGNvbnN0IGNoYXIqIHJlYXNvbik7IC8vIERpdHRvLgogICAgIAogcHJpdmF0ZToK
ICAgICB2b2lkIGZpcmVBbGxXYXRjaHBvaW50cyhjb25zdCBGaXJlRGV0YWlsJik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIKICNp
bmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCisjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlB1dEJ5SWRTdGF0dXMuaCIKICNpbmNsdWRl
ICJTdHJpbmdPYmplY3QuaCIKQEAgLTEzODcsMTQgKzEzODgsMTcgQEAgYm9vbCBBYnN0cmFjdElu
dGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICAgICAgICAgIC8vIHNvbWV0aGluZyBt
b3JlIHN1YnRsZT8KICAgICAgICAgICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0dXMubnVtVmFyaWFudHMoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoIXN0YXR1c1tpXS5zcGVjaWZpY1ZhbHVlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBub2RlLCAhc3RhdHVzW2ld
LmFsdGVybmF0ZUJhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRS
ZXN1bHQgPQorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFBy
b3BlcnR5KHZhbHVlLCBzdGF0dXNbaV0ub2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWNvbnN0YW50UmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQubWFr
ZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBBYnN0
cmFjdFZhbHVlIHRoaXNSZXN1bHQ7CiAgICAgICAgICAgICAgICAgICAgIHRoaXNSZXN1bHQuc2V0
KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwgKm1fZ3JhcGguZnJlZXplKHN0YXR1
c1tpXS5zcGVjaWZpY1ZhbHVlKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaCwg
Km1fZ3JhcGguZnJlZXplKGNvbnN0YW50UmVzdWx0KSwKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3RhdGUuc3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQubWVyZ2UodGhpc1Jlc3VsdCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTU2OSwxMSAr
MTU3MywyNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
fQogICAgICAgICAKICAgICBjYXNlIEdldEJ5T2Zmc2V0OiB7CisgICAgICAgIFN0b3JhZ2VBY2Nl
c3NEYXRhIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS0+c3RvcmFnZUFj
Y2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBtX2dyYXBoLnRyeUdl
dENvbnN0YW50UHJvcGVydHkoZm9yTm9kZShub2RlLT5jaGlsZDIoKSksIGRhdGEub2Zmc2V0KTsK
KyAgICAgICAgaWYgKHJlc3VsdCkgeworICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1f
Z3JhcGguZnJlZXplKHJlc3VsdCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIEdldEdldHRlclNldHRlckJ5T2Zmc2V0OiB7
CisgICAgICAgIFN0b3JhZ2VBY2Nlc3NEYXRhIGRhdGEgPSBtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS0+c3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXTsKKyAgICAgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoZm9yTm9kZShub2RlLT5jaGls
ZDIoKSksIGRhdGEub2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAmJiBqc0R5bmFtaWNDYXN0
PEdldHRlclNldHRlcio+KHJlc3VsdCkpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUs
ICptX2dyYXBoLmZyZWV6ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIAogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldChtX2dyYXBoLCBtX2dyYXBoLm1f
dm0uZ2V0dGVyU2V0dGVyU3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtMTYwMiwxNCArMTYyMCwyMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgICAgICAgICBpZiAoc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGJhc2VTZXQubWVyZ2Uoc2V0KTsKLSAgICAgICAgICAgIGlm
ICghdmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
SlNWYWx1ZSBiYXNlRm9yTG9hZDsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSkKKyAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkID0gYmFz
ZS5tX3ZhbHVlOworICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9CisgICAgICAg
ICAgICAgICAgbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgICAgICAgICAgICAg
ICAgICBiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZhcmlhbnQub2Zmc2V0
KCkpOworICAgICAgICAgICAgaWYgKCFjb25zdGFudFJlc3VsdCkgewogICAgICAgICAgICAgICAg
IHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSB0aGlzUmVzdWx0OwogICAgICAgICAg
ICAgdGhpc1Jlc3VsdC5zZXQoCiAgICAgICAgICAgICAgICAgbV9ncmFwaCwKLSAgICAgICAgICAg
ICAgICAqbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpLAorICAgICAgICAg
ICAgICAgICptX2dyYXBoLmZyZWV6ZShjb25zdGFudFJlc3VsdCksCiAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUoKSk7CiAgICAgICAgICAgICByZXN1bHQubWVy
Z2UodGhpc1Jlc3VsdCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTg3LDcgKzE4Nyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBoYW5kbGVUeXBlZEFycmF5
Q29uc3RydWN0b3IoaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgVHlwZWRBcnJheVR5
cGUpOwogICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRP
cGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwogICAgIE5vZGUqIGhhbmRsZVB1dEJ5T2Zmc2V0KE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlKiB2YWx1ZSk7Ci0gICAg
Tm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0LCBOb2RlVHlwZSBvcCA9IEdldEJ5
T2Zmc2V0KTsKKyAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwg
UHJvcGVydHlPZmZzZXQsIE5vZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOwogICAgIHZvaWQgaGFu
ZGxlR2V0QnlJZCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5
cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCiAgICAgICAgIGNvbnN0
IEdldEJ5SWRTdGF0dXMmKTsKQEAgLTE2NzYsOCArMTY3NiwxNSBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1Ob2RlKiBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0LCBOb2RlVHlwZSBvcCkKK05vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9m
ZnNldChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0LCBOb2RlVHlwZSBvcCkKIHsKKyAgICBpZiAoYmFzZS0+aGFzQ29uc3RhbnQo
KSkgeworICAgICAgICBpZiAoSlNWYWx1ZSBjb25zdGFudCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3Rh
bnRQcm9wZXJ0eShiYXNlLT5hc0pTVmFsdWUoKSwgc3RydWN0dXJlU2V0LCBvZmZzZXQpKSB7Cisg
ICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGJhc2UpOworICAgICAgICAgICAgcmV0dXJu
IHdlYWtKU0NvbnN0YW50KGNvbnN0YW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICBO
b2RlKiBwcm9wZXJ0eVN0b3JhZ2U7CiAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgIHByb3BlcnR5U3RvcmFnZSA9IGJhc2U7CkBAIC0xNzcyLDIxICsxNzc5LDE0IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5SWQoCiAgICAgLy8gVW5sZXNzIHdlIHdhbnQg
YnVncyBsaWtlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODc4Mywg
d2UgbmVlZCB0bwogICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBiYXNlIG9mIHRoZSBvcmlnaW5hbCBn
ZXRfYnlfaWQgaXMga2VwdCBhbGl2ZSB1bnRpbCB3ZSdyZSBkb25lIHdpdGgKICAgICAvLyBhbGwg
b2YgdGhlIHNwZWN1bGF0aW9ucy4gV2Ugb25seSBpbnNlcnQgdGhlIFBoYW50b20gaWYgdGhlcmUg
aGFkIGJlZW4gYSBDaGVja1N0cnVjdHVyZQotICAgIC8vIG9uIHNvbWV0aGluZyBvdGhlciB0aGFu
IHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgb24gYmFzZSwgb3IgaWYgdGhl
Ci0gICAgLy8gYWNjZXNzIHdhcyBjb21waWxlZCB0byBhIFdlYWtKU0NvbnN0YW50IHNwZWNpZmlj
IHZhbHVlLCBpbiB3aGljaCBjYXNlIHdlIG1pZ2h0IG5vdAotICAgIC8vIGhhdmUgYW55IGV4cGxp
Y2l0IHVzZSBvZiB0aGUgYmFzZSBhdCBhbGwuCi0gICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1
ZSgpIHx8IG9yaWdpbmFsQmFzZSAhPSBiYXNlKQorICAgIC8vIG9uIHNvbWV0aGluZyBvdGhlciB0
aGFuIHRoZSBiYXNlIGZvbGxvd2luZyB0aGUgQ2hlY2tTdHJ1Y3R1cmUgb24gYmFzZS4KKyAgICBp
ZiAob3JpZ2luYWxCYXNlICE9IGJhc2UpCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgb3Jp
Z2luYWxCYXNlKTsKICAgICAKLSAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKLSAgICBpZiAodmFyaWFu
dC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQo
dmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpOwotICAgIGVsc2UgewotICAgICAgICBsb2FkZWRWYWx1
ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAgICAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1
cygpID8gU3BlY0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCi0gICAgICAgICAgICBiYXNlLCBpZGVu
dGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAotICAgICAgICAgICAgdmFyaWFudC5jYWxs
TGlua1N0YXR1cygpID8gR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7Ci0g
ICAgfQorICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCisgICAgICAg
IHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNwZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAor
ICAgICAgICBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgaWRlbnRpZmllck51bWJlciwg
dmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gR2V0
R2V0dGVyU2V0dGVyQnlPZmZzZXQgOiBHZXRCeU9mZnNldCk7CiAgICAgCiAgICAgaWYgKCF2YXJp
YW50LmNhbGxMaW5rU3RhdHVzKCkpIHsKICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihkZXN0
aW5hdGlvbk9wZXJhbmQpLCBsb2FkZWRWYWx1ZSk7CkBAIC0xOTQ5LDE0ICsxOTQ5LDkgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCgKICAgICAgICAgaWYgKHZhcmlhbnQuYWx0
ZXJuYXRlQmFzZSgpKQogICAgICAgICAgICAgYmFzZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlOwot
ICAgICAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICBsb2FkZWRW
YWx1ZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAotICAg
ICAgICAgICAgICAgIFNwZWNDZWxsT3RoZXIsIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlh
bnQub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQpOwot
ICAgICAgICB9CisgICAgICAgIE5vZGUqIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQo
CisgICAgICAgICAgICBTcGVjQ2VsbE90aGVyLCBiYXNlLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUo
KSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKKyAgICAgICAgICAgIEdldEdl
dHRlclNldHRlckJ5T2Zmc2V0KTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIHNldHRlciA9IGFk
ZFRvR3JhcGgoR2V0U2V0dGVyLCBsb2FkZWRWYWx1ZSk7CiAgICAgICAgIApAQCAtMjk1OCwxMCAr
Mjk1Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogYmFzZSA9IGNlbGxDb25zdGFudFdp
dGhTdHJ1Y3R1cmVDaGVjayhnbG9iYWxPYmplY3QsIHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKS5v
bmx5U3RydWN0dXJlKCkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0
KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSBz
cGVjaWZpY1ZhbHVlID0gc3RhdHVzWzBdLnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChzcGVjaWZpY1Zh
bHVlLmFzQ2VsbCgpKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24s
IGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGRzdCksIGhhbmRsZUdldEJ5T2Zmc2V0KHByZWRpY3Rpb24sIGJhc2Us
IHN0YXR1c1swXS5zdHJ1Y3R1cmVTZXQoKSwgaWRlbnRpZmllck51bWJlciwgb3BlcmFuZCkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBH
bG9iYWxWYXI6CkBAIC0yOTY5LDE2ICsyOTYxLDE2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdl
dChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVF
bnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KHVpZCk7CiAgICAg
ICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0ID0gZW50cnku
d2F0Y2hwb2ludFNldCgpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSA9
CisgICAgICAgICAgICAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0KICAgICAgICAgICAgICAg
ICAgICAgd2F0Y2hwb2ludFNldCA/IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSA6IEpT
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNwZWNpZmljVmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJ
bmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoVmFyaWFibGVXYXRjaHBvaW50LCBPcEluZm8od2F0Y2hwb2ludFNldCkp
OwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3Rh
bnQoc3BlY2lmaWNWYWx1ZSkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
ZHN0KSwgd2Vha0pTQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDcsOCArNDA3
LDEzIEBAIHByaXZhdGU6CiAKICAgICAgICAgYWRkQmFzZUNoZWNrKGluZGV4SW5CbG9jaywgbm9k
ZSwgYmFzZVZhbHVlLCB2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgCi0gICAgICAg
IGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewotICAgICAgICAgICAgbV9ncmFwaC5jb252
ZXJ0VG9Db25zdGFudChub2RlLCBtX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUo
KSkpOworICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOworICAgICAgICBpZiAodmFyaWFudC5h
bHRlcm5hdGVCYXNlKCkpCisgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IHZhcmlhbnQuYWx0ZXJu
YXRlQmFzZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2VW
YWx1ZS5tX3ZhbHVlOworICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShiYXNlRm9yTG9hZCwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIHZh
cmlhbnQub2Zmc2V0KCkpKSB7CisgICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50
KG5vZGUsIG1fZ3JhcGguZnJlZXplKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVw
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODYsMjIgKzEyODYsMjQg
QEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIAotICAgIGJvb2wg
aXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKFN0cnVjdHVyZSogc3RyaW5nUHJvdG90eXBlU3Ry
dWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCisgICAgYm9vbCBpc1N0cmluZ1Byb3RvdHlwZU1ldGhv
ZFNhbmUoCisgICAgICAgIEpTT2JqZWN0KiBzdHJpbmdQcm90b3R5cGUsIFN0cnVjdHVyZSogc3Ry
aW5nUHJvdG90eXBlU3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQpCiAgICAgewogICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzVW51c2VkOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVy
ZS0+Z2V0Q29uY3VycmVudGx5KAotICAgICAgICAgICAgdm0oKSwgdWlkLCBhdHRyaWJ1dGVzVW51
c2VkLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0KKyAg
ICAgICAgICAgIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtKCks
IHVpZCwgYXR0cmlidXRlc1VudXNlZCk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZz
ZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFz
cGVjaWZpY1ZhbHVlKQorICAgICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25z
dGFudFByb3BlcnR5KAorICAgICAgICAgICAgc3RyaW5nUHJvdG90eXBlLCBzdHJpbmdQcm90b3R5
cGVTdHJ1Y3R1cmUsIG9mZnNldCk7CisgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBpZiAoIXNwZWNpZmljVmFsdWUtPmluaGVy
aXRzKEpTRnVuY3Rpb246OmluZm8oKSkpCisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNEeW5hbWljQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOworICAgICAgICBpZiAoIWZ1bmN0aW9u
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgSlNGdW5jdGlv
biogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHNwZWNpZmljVmFsdWUpOwogICAgICAg
ICBpZiAoZnVuY3Rpb24tPmV4ZWN1dGFibGUoKS0+aW50cmluc2ljRm9yKENvZGVGb3JDYWxsKSAh
PSBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKQEAgLTEzMzAsOSArMTMzMiw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8v
ICh0aGF0IHdvdWxkIGNhbGwgdG9TdHJpbmcoKSkuIFdlIGRvbid0IHdhbnQgdGhlIERGRyB0byBo
YXZlIHRvIGRpc3Rpbmd1aXNoCiAgICAgICAgIC8vIGJldHdlZW4gdGhlIHR3bywganVzdCBiZWNh
dXNlIHRoYXQgc2VlbXMgbGlrZSBpdCB3b3VsZCBnZXQgY29uZnVzaW5nLiBTbyB3ZQogICAgICAg
ICAvLyBqdXN0IHJlcXVpcmUgYm90aCBtZXRob2RzIHRvIGJlIHNhbmUuCi0gICAgICAgIGlmICgh
aXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0o
KS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQ
cm90b3R5cGVNZXRob2RTYW5lKHN0cmluZ1Byb3RvdHlwZU9iamVjdCwgc3RyaW5nUHJvdG90eXBl
U3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgpKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNh
bmUoc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5n
LmltcGwoKSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmlu
Z1Byb3RvdHlwZU9iamVjdCwgc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5
TmFtZXMtPnRvU3RyaW5nLmltcGwoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg5LDYgKzc4OSw0MyBAQCB1bnNp
Z25lZCBHcmFwaDo6cmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yCiAgICAgcmV0dXJuIHN0ZDo6bWF4
KGZyYW1lUmVnaXN0ZXJDb3VudCgpLCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGl0KCkpOwog
fQogCitKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgIEpTVmFsdWUg
YmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCkKK3sKKyAgICBpZiAoIWJhc2UgfHwgIWJhc2UuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICBKU09iamVjdCogb2JqZWN0ID0gYXNPYmplY3QoYmFz
ZSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RydWN0dXJlU2V0LnNpemUoKTsgaS0t
OykgeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZVNldFtpXTsKKyAg
ICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gc3RydWN0dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50
V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICBpZiAoIXNldCB8fCAhc2V0LT5pc1N0aWxs
VmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOworICAgICAgICBBU1NF
UlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgICAgIAorICAg
ICAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShzZXQpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gb2JqZWN0LT5nZXREaXJlY3RDb25jdXJyZW50bHkob2Zmc2V0KTsKK30KKworSlNWYWx1ZSBH
cmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICBKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
eworICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXNDbG9iYmVyZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb2VwcnR5
KGJhc2UsIHN0cnVjdHVyZS5zZXQoKSwgb2Zmc2V0KTsKK30KKworSlNWYWx1ZSBHcmFwaDo6dHJ5
R2V0Q29uc3RhbnRQcm9wZXJ0eShjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS5t
X3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOworfQorCiBKU0FjdGl2YXRpb24qIEdy
YXBoOjp0cnlHZXRBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUtPmR5
bmFtaWNDYXN0Q29uc3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsKQEAgLTkwMCw3ICs5MzcsNiBAQCB2
b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBjYXNl
IE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9k
ZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAg
ICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5
T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFw
cGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1
Y3R1cmVTZXQoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNp
emUoKTsgai0tOykKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJy
aWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc5LDYgKzY3OSwxMCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwogICAgIHVuc2ln
bmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKICAgICAKKyAg
ICBKU1ZhbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1
Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudFBy
b3BlcnR5KEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYsIFByb3Bl
cnR5T2Zmc2V0KTsKKyAgICBKU1ZBbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoY29uc3QgQWJz
dHJhY3RWYWx1ZSYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKICAgICBKU0FjdGl2YXRpb24qIHRy
eUdldEFjdGl2YXRpb24oTm9kZSopOwogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHRy
eUdldFJlZ2lzdGVycyhOb2RlKik7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQ
aGFzZS5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9m
ZnNldDoKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlH
ZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJpYW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNl
dERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKG1f
Z3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKS0+c3RydWN0dXJlKCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2godmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdhdGNoIGFueXRoaW5nIGlu
IHRoZSBzdHJ1Y3R1cmUgY2hhaW4gYmVjYXVzZSB0aGF0IHdvdWxkCiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBoYXZlIGJlZW4gZGVjb21wb3NlZCBpbnRvIENoZWNrU3RydWN0dXJlJ3MuIERv
bid0IG5lZWQgdG8gd2F0Y2ggdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyMzcsOCArMzIzNywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBH
ZXRCeUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIExW
YWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0g
ICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUo
dmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRS
ZXN1bHQ7CisgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdGFudFJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eSgKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQu
b2Zmc2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvbnN0YW50UmVzdWx0
KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKGNvbnN0YW50UmVzdWx0KSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBMVmFsdWUgcHJvcGVydHlCYXNlOwogICAgICAgICAgICAgICAgIGlmICh2YXJpYW50LmFsdGVy
bmF0ZUJhc2UoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5OCw5ICsxNjk4LDEzIEBAIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAvLyBDb3ZlcnMgaW1w
bGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24ndCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4
ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBjYWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4K
ICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgJiYgc2xvdC5zbG90QmFzZSgpID09IHNj
b3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpIHsKICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8
fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7Ci0gICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSh2bSkpOwotICAg
ICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAg
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJs
b2NrLT5tX2xvY2spOworICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVj
LT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAg
ICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJl
cGxhY2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTE3MzAsMTQgKzE3MzQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9T
Y29wZShFCiAgICAgaWYgKGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0
IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRo
ZW0gYXQgY29tcGlsZSB0aW1lLgotICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFs
UHJvcGVydHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcykgewotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNs
b3QuYmFzZSgpID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nl
c0FyZUNhY2hlYWJsZSgpKSB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQo
ZXhlYy0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVy
ZSgpKTsKLSAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2Nv
cGVHbG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIG1vZGVBbmRUeXBlLCBzbG90KTsK
IH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNTdGF0ZSogZXhlYywg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZEV4Y2VwdGlvblZhbHVlKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMiArOTYsMTQg
QEAgc3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlYgogICAgIHJlcGF0Y2hD
YWxsKHJlcGF0Y2hCdWZmZXIsIGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAotc3RhdGlj
IHZvaWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNv
bnN0IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCitzdGF0aWMg
dm9pZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwK
KyAgICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCwgY29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCisgICAgYm9vbCBjb21wYWN0
KQogewogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJl
c1dhdGNocG9pbnRzKCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVBy
b3BlcnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsK
LQorICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCiAg
ICAgLy8gT25seSBvcHRpbWl6ZSBvbmNlIQpAQCAtMzQzLDggKzM0NSwxMSBAQCBzdGF0aWMgdm9p
ZCBnZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRj
aEdQUik7CiAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwogICAgICAgICB9
CisgICAgICAgIEFTU0VSVChwcm90b09iamVjdC0+c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVy
ZSk7CiAgICAgfQogICAgIAorICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0
eUZvclJlcGxhY2VtZW50cygqdm0sIG9mZnNldCk7CisgICAgCiAgICAgR1BSUmVnIGJhc2VGb3JB
Y2Nlc3NHUFI7CiAgICAgaWYgKGNoYWluKSB7CiAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIpOwpAQCAtNjkz
LDkgKzY5OCwxMCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAg
ICAgaWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKICAgICAgICAgJiYgc2xvdC5pc0Nh
Y2hlYWJsZVZhbHVlKCkKICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFs
aWduZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90
LmNhY2hlZE9mZnNldCgpKSkpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygq
dm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNh
Y2hlZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKLSAgICAgICAg
ICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc3Ry
dWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBzbG90LmNh
Y2hlZE9mZnNldCgpKTsKKyAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJs
b2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0
KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOworICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1
cmUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXBhdGNoQ2FsbChjb2Rl
QmxvY2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxk
TGlzdCk7CkBAIC0xMTc4LDYgKzExODQsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQo
RXhlY1N0YXRlKiBlCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFk
ZHJlc3NPZmZzZXQob2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zm
c2V0KCkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBzdHJ1Y3R1cmUt
PmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBz
dHJ1Y3R1cmUsIGlkZW50LCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWls
ZGluZ1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwogICAgICAgICBzdHVi
SW5mby5pbml0UHV0QnlJZFJlcGxhY2UoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzdHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyOTUsNiArMTMwMiw4IEBA
IHN0YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIGlm
IChsaXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFdpbGwg
Z2V0IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KICAgICAgICAgICAgIAorICAgICAgICAgICAgc3Ry
dWN0dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0
byBjcmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5Lgog
ICAgICAgICAgICAgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgICAgICAgICAgICAgIGV4ZWMsIGJh
c2VWYWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjkzLDYgKzY5Myw3IEBAIExMSU5UX1NMT1dfUEFUSF9E
RUNMKHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RydWN0dXJl
LT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlLnNldCgKICAgICAgICAgICAgICAgICAg
ICAgdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CkBAIC0x
NDI2LDkgKzE0MjcsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9t
XwogICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0g
c2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpIHsKICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8
fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzKSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOwotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5t
X2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAg
ICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29wZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2st
Pm1fbG9jayk7CisgICAgICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZt
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAg
ICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFj
ZW1lbnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAt
MTQ0OCwxNSArMTQ1Myw4IEBAIHN0YXRpYyBKU09iamVjdCogcHV0VG9TY29wZUNvbW1vbihFeGVj
U3QKIAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBjb2RlQmxvY2stPmlzU3RyaWN0
TW9kZSgpKTsKICAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVu
dCwgdmFsdWUsIHNsb3QpOwotCi0gICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNl
IHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25v
dyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCi0gICAgaWYgKG1vZGVBbmRUeXBl
LnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFs
UHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGlmIChzbG90LmlzQ2Fj
aGVhYmxlUHV0KCkgJiYgc2xvdC5iYXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgp
LT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHBjWzVd
LnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBzY29wZS0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xv
dC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICAKKyAgICBDb21tb25TbG93
UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVjLCBjb2RlQmxvY2ssIHBjLCBzY29w
ZSwgbW9kZUFuZFR5cGUsIHNsb3QpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2
aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xv
d1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDMzIEBAIGlubGluZSBib29sIG9w
SW4oRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVy
dHkoZXhlYywgcHJvcGVydHkpOwogfQogCitpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVH
bG9iYWwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1
Y3Rpb24qIHBjLCBKU09iamVjdCogc2NvcGUsCisgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVB
bmRUeXBlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgLy8gQ292ZXJzIGltcGxpY2l0
IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRl
LCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCisgICAg
CisgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSAhPSBHbG9iYWxQcm9wZXJ0eSAmJiBtb2RlQW5k
VHlwZS50eXBlKCkgIT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkKKyAgICAg
ICAgfHwgc2xvdC5iYXNlKCkgIT0gc2NvcGUKKyAgICAgICAgfHwgIXNjb3BlLT5zdHJ1Y3R1cmUo
KS0+cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsK
KyAgICAgICAgLy8gRG9uJ3QgY2FjaGUgaWYgd2UndmUgZG9uZSBhIHRyYW5zaXRpb24uIFdlIHdh
bnQgdG8gZGV0ZWN0IHRoZSBmaXJzdCByZXBsYWNlIHNvIHRoYXQgd2UKKyAgICAgICAgLy8gY2Fu
IGludmFsaWRhdGUgdGhlIHdhdGNocG9pbnQuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgc2NvcGUtPnN0cnVjdHVyZSgpLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoZXhl
Yy0+dm0oKSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4
ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUo
KSk7CisgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgQ29tbW9uU2xvd1BhdGhzCiAKIGNsYXNzIEV4ZWNTdGF0ZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0
dXJlQ2hhaW4uY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3
LDggKzEwNyw3IEBAIGJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXAKIHsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAg
ICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
OwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3Vy
cmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9w
ZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQs
IGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFj
Y2Vzc29yKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWUuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDggKzEzOSw3IEBAIHZvaWQg
SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiAKIAogICAgIGZvciAoOyA7IG9iaiA9
IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAg
ICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
c3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3Ry
dWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYg
KG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IFJlYWRPbmx5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9mdW5jdGlvblByb3Rv
dHlwZS5zZXQodm0sIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sIEZ1bmN0aW9u
UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUg
cmVhbCBwcm90b3R5cGUgd2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRl
ZC4KICAgICBtX2Z1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3Jl
YXRlU3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAg
bV9ib3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9uOjpj
cmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAg
ICBtX25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgdm0ucHJvcGVy
dHlOYW1lcy0+bmFtZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0sIDAsIG1fZnVu
Y3Rpb25OYW1lT2Zmc2V0KSk7CisgICAgbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwg
dGhpcywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIG1fZnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtLCBtX2Z1bmN0aW9uTmFtZU9mZnNldCkpOwogICAgIG1faW50ZXJuYWxGdW5j
dGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVj
dHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIEpTRnVuY3Rp
b24qIGNhbGxGdW5jdGlvbiA9IDA7CiAgICAgSlNGdW5jdGlvbiogYXBwbHlGdW5jdGlvbiA9IDA7
CkBAIC00MjksOCArNDI5LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBw
cm90bwogICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBlTWFwID0gdm0ucHJvdG90eXBlTWFwOwog
ICAgIFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBwcm90b3R5cGVNYXAuZW1w
dHlPYmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUobV9vYmplY3RQcm90b3R5cGUuZ2V0KCksIEpT
RmluYWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQ7Ci0gICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5
TmFtZXMtPmRvbmUsIDAsIDAsIG9mZnNldCk7Ci0gICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1
Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCAwLCAwLCBvZmZzZXQpOworICAgIGl0ZXJh
dG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0s
IGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kb25lLCAwLCBvZmZz
ZXQpOworICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0
eVRyYW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVz
LT52YWx1ZSwgMCwgb2Zmc2V0KTsKICAgICBtX2l0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLnNldCh2
bSwgdGhpcywgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUpOwogCiAgICAgbV9ldmFsRnVuY3Rpb24u
c2V0KHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIHZtLnByb3BlcnR5
TmFtZXMtPmV2YWwuc3RyaW5nKCksIGdsb2JhbEZ1bmNFdmFsKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5
IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIw
MTIsIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHly
aWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CkBAIC01NSwxNSArNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIEFycmF5Q29udmVudGlvbnMu
aC4KIHN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKIAotSlNDZWxsKiBnZXRDYWxs
YWJsZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQotewotICAgIGlmIChjZWxsLT50eXBlKCkgPT0g
SlNGdW5jdGlvblR5cGUpCi0gICAgICAgIHJldHVybiBjZWxsOwotICAgIGlmIChjZWxsLT5zdHJ1
Y3R1cmUoKS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihJbnRlcm5hbEZ1bmN0aW9uOjppbmZv
KCkpKQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICByZXR1cm4gMDsKLX0KLQogU1RBVElDX0FT
U0VSVF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTT2JqZWN0KTsKIFNUQVRJQ19BU1NFUlRf
SVNfVFJJVklBTExZX0RFU1RSVUNUSUJMRShKU0ZpbmFsT2JqZWN0KTsKIApAQCAtMzYwLDcgKzM1
MSw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICAgICAg
ICAgIHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CiAgICAgICAgICAgICBpZiAocHJvdG90
eXBlLmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1
Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwg
cHJvcGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJl
Y3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwg
Z2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVj
dC0+cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUs
IDAsIHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJp
Y3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CkBAIC0zNzEsOCArMzYyLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwg
RXhlY1N0YQogICAgIEpTT2JqZWN0KiBvYmo7CiAgICAgZm9yIChvYmogPSB0aGlzT2JqZWN0OyA7
IG9iaiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
czsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
b2JqLT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAg
ICAgICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgUmVhZE9ubHkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+
c3RydWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZt
KCksIHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOwpAQCAtNDA3LDcgKzM5Nyw3
IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICB9CiAgICAg
CiAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1h
eUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhp
c09iamVjdCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2Rl
UHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3Qo
dmFsdWUpKSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgIGlmICghdGhpc09iamVjdC0+cHV0
RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNs
b3QpICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMs
IEFTQ0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAg
ICByZXR1cm47CiB9CkBAIC0xMjI3LDcgKzEyMTcsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJl
Y3RBY2Nlc3NvcihFeGVjU3RhCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3ROb25JbmRleEFjY2Vz
c29yKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcykKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAg
ICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkp
OworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0
IHdpbGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IK
ICAgICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCB0aG91Z2gsIHdlIGFsc28gbmVlZCB0byBjaGFu
Z2Ugb3VyIFN0cnVjdHVyZQpAQCAtMTI2Nyw5ICsxMjU3LDggQEAgYm9vbCBKU09iamVjdDo6ZGVs
ZXRlUHJvcGVydHkoSlNDZWxsKiBjZQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1
bmN0aW9uc0ZvckRlbGV0ZShleGVjKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgaWYg
KGlzVmFsaWRPZmZzZXQodGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkgeworICAgIGlmIChpc1ZhbGlkT2Zm
c2V0KHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzKSkpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RGVsZXRlICYmICF2bS5p
c0luRGVmaW5lT3duUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgdGhpc09iamVjdC0+cmVtb3ZlRGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTM4Myw2
ICsxMzcyLDEwIEBAIGJvb2wgSlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3QKIC8v
IEVDTUEgOC42LjIuNgogSlNWYWx1ZSBKU09iamVjdDo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50
KQogeworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdoYXRldmVyIGRlZmF1bHQgdmFsdWUgbWV0aG9k
cyB0aGVyZSBhcmUgb24gb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIGFyZQorICAgIC8vIGJlaW5n
IHdhdGNoZWQuCisgICAgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RhcnRXYXRjaGluZ0ludGVybmFs
UHJvcGVydGllc0lmTmVjZXNzYXJ5Rm9yRW50aXJlQ2hhaW4oZXhlYy0+dm0oKSk7CisgICAgCiAg
ICAgLy8gTXVzdCBjYWxsIHRvU3RyaW5nIGZpcnN0IGZvciBEYXRlIG9iamVjdHMuCiAgICAgaWYg
KChoaW50ID09IFByZWZlclN0cmluZykgfHwgKGhpbnQgIT0gUHJlZmVyTnVtYmVyICYmIG9iamVj
dC0+cHJvdG90eXBlKCkgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlUHJvdG90
eXBlKCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rp
b24oZXhlYywgb2JqZWN0LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpOwpAQCAtMTQ0
NiwyMCArMTQzOSw2IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lm
aWNWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQ2Vs
bComIHNwZWNpZmljVmFsdWUpIGNvbnN0Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAg
ICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSh2
bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhpcyBjb3VsZCBiZSBhIGZ1bmN0aW9uIHdp
dGhpbiB0aGUgc3RhdGljIHRhYmxlPyAtIHNob3VsZCBwcm9iYWJseQotICAgIC8vIGFsc28gbG9v
ayBpbiB0aGUgaGFzaD8gIFRoaXMgY3VycmVudGx5IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtLCBz
aW5jZQotICAgIC8vIHdlJ3ZlIGN1cnJlbnRseSBhbHdheXMgY2FsbCAnZ2V0JyBmaXJzdCwgd2hp
Y2ggc2hvdWxkIGhhdmUgcG9wdWxhdGVkCi0gICAgLy8gdGhlIG5vcm1hbCBzdG9yYWdlLgotICAg
IHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09i
amVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0
eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBwcm9wZXJ0eU5hbWVzLnNldEJh
c2VPYmplY3Qob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29w
eXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBD
b3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmln
aHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NTYsMTUgKzU2LDYgQEAgaW5saW5lIEpTQ2VsbCogZ2V0SlNGdW5jdGlvbihKU1ZhbHVlIHZhbAog
ICAgIHJldHVybiAwOwogfQogCi1KU19FWFBPUlRfUFJJVkFURSBKU0NlbGwqIGdldENhbGxhYmxl
T2JqZWN0U2xvdyhKU0NlbGwqKTsKLQotaW5saW5lIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3Qo
SlNWYWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gZ2V0Q2FsbGFibGVPYmplY3RTbG93KHZhbHVlLmFzQ2VsbCgpKTsK
LX0KLQogY2xhc3MgR2V0dGVyU2V0dGVyOwogY2xhc3MgSW50ZXJuYWxGdW5jdGlvbjsKIGNsYXNz
IEpTRnVuY3Rpb247CkBAIC00OTEsOCArNDgyLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFN
b2RlKTsKIAotICAgIGJvb2wgZ2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFBy
b3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikgY29uc3Q7Ci0KICAgICAvLyBU
aGlzIGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAgSlNW
YWx1ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAog
ICAgIHsKQEAgLTUwMSwxMiArNDkwLDExIEBAIHB1YmxpYzoKICAgICAgICAgY2hlY2tPZmZzZXQo
b2Zmc2V0LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zm
c2V0ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zmc2V0KSA6IEpTVmFsdWUoKTsKICAg
ICB9Ci0KKyAgICAKICAgICBKU1ZhbHVlIGdldERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdAogICAgIHsKLSAgICAgICAg
SlNDZWxsKiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5z
dHJ1Y3R1cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+aW5saW5l
Q2FwYWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGdl
dERpcmVjdChvZmZzZXQpIDogSlNWYWx1ZSgpOwogICAgIH0KQEAgLTUyMSw5ICs1MDksOCBAQCBw
dWJsaWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKICAgICB7Ci0gICAg
ICAgIEpTQ2VsbCogc3BlY2lmaWM7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhp
cy0+c3RydWN0dXJlKHZtKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0
dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgIH0KQEAgLTU4Myw2
ICs1NzAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBGYXN0IGFjY2VzcyB0byBrbm93biBwcm9wZXJ0
eSBvZmZzZXRzLgogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkg
Y29uc3QgeyByZXR1cm4gbG9jYXRpb25Gb3JPZmZzZXQob2Zmc2V0KS0+Z2V0KCk7IH0KKyAgICBK
U1ZhbHVlIGdldERpcmVjdENvbmN1cnJlbnRseShQcm9wZXJ0eU9mZnNldCkgY29uc3Q7IC8vIERl
ZmVuZHMgYWdhaW5zdCB0aGUgc3RydWN0dXJlIGFuZCBidXR0ZXJmbHkgY2hhbmdpbmcgaW4gc3Vj
aCBhIHdheSB0aGF0IHRoaXMgcHJvcGVydHkgcmVhZCB3b3VsZCBiZSByZW5kZXJlZCBpbnZhbGlk
LgogICAgIHZvaWQgcHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1Zh
bHVlIHZhbHVlKSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldCh2bSwgdGhpcywgdmFs
dWUpOyB9CiAgICAgdm9pZCBwdXREaXJlY3RVbmRlZmluZWQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KSB7IGxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPnNldFVuZGVmaW5lZCgpOyB9CiAKQEAgLTk0
OSw3ICs5MzcsNyBAQCBwcml2YXRlOgogICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5
SW5kZXhpbmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoVk0mLCBBcnJheVN0b3Jh
Z2UqKTsKICAgICAgICAgCiAgICAgdGVtcGxhdGU8UHV0TW9kZT4KLSAgICBib29sIHB1dERpcmVj
dEludGVybmFsKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQ
cm9wZXJ0eVNsb3QmLCBKU0NlbGwqKTsKKyAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwg
UHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsK
IAogICAgIGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFZNJiwgU3Ry
dWN0dXJlJiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwg
dW5zaWduZWQsIFByb3BlcnR5T2Zmc2V0KTsKQEAgLTEyMTMsOCArMTIwMSw3IEBAIGlubGluZSBK
U1ZhbHVlIEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb24KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09i
amVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBT
dHJ1Y3R1cmUmIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBzcGVj
aWZpYzsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIGlm
IChMSUtFTFkoaXNWYWxpZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZ2V0RGlyZWN0KG9mZnNldCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzR2V0dGVyU2V0
dGVyUHJvcGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCkBAIC0xMjk1LDcgKzEy
ODIsNyBAQCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAKIHRl
bXBsYXRlPEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTQ2Vs
bCogc3BlY2lmaWNGdW5jdGlvbikKK2lubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRl
cm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQo
dmFsdWUpOwogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikpOwpAQCAtMTMwNSwyNSArMTI5MiwxNSBAQCBpbmxpbmUgYm9vbCBKU09i
amVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlz
LT5zdHJ1Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAg
ICAgICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIGN1cnJl
bnRTcGVjaWZpY0Z1bmN0aW9uOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVudFNw
ZWNpZmljRnVuY3Rpb24pOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlm
IChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMg
Y3VycmVudGx5IGEgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCB0aGVyZSBub3cgZWl0aGVyIGlzbid0
LAotICAgICAgICAgICAgLy8gb3IgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQsIHRoZW4gZGVz
cGVjaWZ5LgotICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uICYmIChzcGVj
aWZpY0Z1bmN0aW9uICE9IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbih2bSwgcHJvcGVydHlOYW1l
KTsKICAgICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmli
dXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQsIHRoZSBvYmplY3RzIHN0cnVjdHVyZSBvbmx5IGhhcyBhIHNwZWNpZmljIHZhbHVl
IHNldCBpZiBwcmV2aW91c2x5IHRoZXJlCi0gICAgICAgICAgICAvLyBoYWQgYmVlbiBvbmUgc2V0
LCBhbmQgaWYgdGhlIG5ldyB2YWx1ZSBiZWluZyBzcGVjaWZpZWQgaXMgdGhlIHNhbWUgKG90aGVy
d2lzZSB3ZSB3b3VsZAotICAgICAgICAgICAgLy8gaGF2ZSBkZXNwZWNpZmllZCwgYWJvdmUpLiAg
U28sIGlmIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uIGlzIG5vdCBzZXQsIG9yIGlmIHRoZSBuZXcK
LSAgICAgICAgICAgIC8vIHZhbHVlIGlzIGRpZmZlcmVudCAob3IgdGhlcmUgaXMgbm8gbmV3IHZh
bHVlKSwgdGhlbiB0aGUgc2xvdCBub3cgaGFzIG5vIHZhbHVlIC0gYW5kCi0gICAgICAgICAgICAv
LyBhcyBzdWNoIGl0IGlzIGNhY2hhYmxlLgotICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIHBy
ZXZpb3VzbHkgYSB2YWx1ZSwgYW5kIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUsIHRoZW4gd2Ug
Y2Fubm90IGNhY2hlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiB8
fCAoc3BlY2lmaWNGdW5jdGlvbiAhPSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAg
ICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAg
ICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTEzMzQsMTUgKzEzMTEsMTMg
QEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBCdXR0
ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAodGhpcy0+c3Ry
dWN0dXJlKCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICAgICAgbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5v
dXRPZkxpbmVDYXBhY2l0eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZM
aW5lU3RvcmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUo
KS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJl
KCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcyk7CiAgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0
dXJlKCksIG5ld0J1dHRlcmZseSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsK
ICAgICAgICAgQVNTRVJUKHRoaXMtPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkp
OwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAvLyBTZWUg
Y29tbWVudCBvbiBzZXROZXdQcm9wZXJ0eSBjYWxsIGJlbG93LgotICAgICAgICBpZiAoIXNwZWNp
ZmljRnVuY3Rpb24pCi0gICAgICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNl
dCk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAg
aWYgKGF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgp
LT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTEzNTAsNyArMTMyNSw3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRl
cm5hbCgKIAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENh
cGFjaXR5ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYg
KFN0cnVjdHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKKyAgICBpZiAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0
KSkgewogICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZs
eSogbmV3QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNp
dHkgIT0gc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMzYyLDQwICsxMzM3
LDE3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAg
QVNTRVJUKHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgc2V0U3Ry
dWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAg
IHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcg
cHJvcGVydHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVu
dGx5IGNhY2hhYmxlLAotICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hh
YmxlIHN0YXRlLgotICAgICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCi0gICAgICAgICAgICBz
bG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJv
cGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAg
dW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNG
dW5jdGlvbjsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBj
dXJyZW50QXR0cmlidXRlcywgY3VycmVudFNwZWNpZmljRnVuY3Rpb24pOworICAgIG9mZnNldCA9
IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAg
ICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1
dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMg
aGVyZToKLSAgICAgICAgLy8gICgxKSBUaGVyZSBpcyBhbiBleGlzdGluZyBzcGVjaWZpYyB2YWx1
ZSBzZXQsIGFuZCB3ZSdyZSBvdmVyd3JpdGluZyB3aXRoICp0aGUgc2FtZSB2YWx1ZSouCi0gICAg
ICAgIC8vICAgICAgICogRG8gbm90aGluZyAtIG5vIG5lZWQgdG8gZGVzcGVjaWZ5LCBidXQgdGhh
dCBtZWFucyB3ZSBjYW4ndCBjYWNoZSAoYSBjYWNoZWQKLSAgICAgICAgLy8gICAgICAgICBwdXQg
Y291bGQgd3JpdGUgYSBkaWZmZXJlbnQgdmFsdWUpLiBMZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNh
Y2hhYmxlIHN0YXRlLgotICAgICAgICAvLyAgKDIpIFRoZXJlIGlzIGEgc3BlY2lmaWMgdmFsdWUg
Y3VycmVudGx5IHNldCwgYnV0IHdlJ3JlIHdyaXRpbmcgYSBkaWZmZXJlbnQgdmFsdWUuCi0gICAg
ICAgIC8vICAgICAgICogRmlyc3QsIHdlIGhhdmUgdG8gZGVzcGVjaWZ5LiAgSGF2aW5nIGRvbmUg
c28sIHRoaXMgaXMgbm93IGEgcmVndWxhciBzbG90Ci0gICAgICAgIC8vICAgICAgICAgd2l0aCBu
byBzcGVjaWZpYyB2YWx1ZSwgc28gZ28gYWhlYWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAg
ICAgLy8gICgzKSBOb3JtYWwgY2FzZSwgdGhlcmUgaXMgbm8gc3BlY2lmaWMgdmFsdWUgc2V0Lgot
ICAgICAgICAvLyAgICAgICAqIEdvIGFoZWFkICYgY2FjaGUgbGlrZSBub3JtYWwuCi0gICAgICAg
IGlmIChjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikgewotICAgICAgICAgICAgLy8gY2FzZSAoMSkg
RG8gdGhlIHB1dCwgdGhlbiByZXR1cm4gbGVhdmluZyB0aGUgc2xvdCB1bmNhY2hhYmxlLgotICAg
ICAgICAgICAgaWYgKHNwZWNpZmljRnVuY3Rpb24gPT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24p
IHsKLSAgICAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2Fz
ZSAoMikgRGVzcGVjaWZ5LCBmYWxsIHRocm91Z2ggdG8gKDMpLgotICAgICAgICAgICAgc2V0U3Ry
dWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNhc2UgKDMp
IHNldCB0aGUgc2xvdCwgZG8gdGhlIHB1dCwgcmV0dXJuLgorICAgICAgICBzdHJ1Y3R1cmUtPmRp
ZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOwogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVy
dHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDA0LDE3ICsxMzU2LDE0IEBAIGlubGluZSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1
dCkgJiYgIWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCwgc2xvdC5j
b250ZXh0KCkpOworICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90
LmNvbnRleHQoKSk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NF
UlQoc3RydWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIHNldFN0cnVjdHVyZUFu
ZFJlYWxsb2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CiAKICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7
IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hh
YmxlLAotICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0g
ICAgaWYgKCFzcGVjaWZpY0Z1bmN0aW9uKQotICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRo
aXMsIG9mZnNldCk7CisgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAg
IGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFp
bnNSZWFkT25seVByb3BlcnRpZXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0NDcsMjAgKzEz
OTYsMjAgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eQogICAgIEFT
U0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVh
cCh0aGlzKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllcygpKTsKIAotICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwg
cHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsK
KyAgICByZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIDAsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYg
IShhdHRyaWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlz
KTsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBw
cm9wZXJ0eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2
YWx1ZSkpOworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4o
dm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwogfQogCiBpbmxpbmUg
dm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFt
ZSwgSlNWYWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCgh
dmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURl
ZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2Fs
bGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5l
T3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAogaW5s
aW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cykKQEAgLTE0NzAsNyArMTQxOSw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RX
aXRob3V0VHIKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgp
OwogICAgIGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAg
ICAgICAgIG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUo
KS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGlu
ZVN0b3JhZ2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1
cmUoKS0+YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRy
aWJ1dGVzLCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwg
c3RydWN0dXJlKCksIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZh
bHVlKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3Bw
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksMTkgQEAgc3RhdGljIGlubGluZSBi
b29sIGFic3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFr
ZVR5cGUoR2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAs
IDAsIDAsIDApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLQotICAgICAg
ICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgMCwgc2xvdC5j
YWNoZWRPZmZzZXQoKSk7CisgICAgICAgIAorICAgICAgICBXYXRjaHBvaW50U3RhdGUgc3RhdGUg
PSBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0
Y2hwb2ludFNldChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKS0+c3RhdGUoKTsKKyAg
ICAgICAgaWYgKHN0YXRlID09IElzV2F0Y2hlZCAmJiBnZXRPclB1dCA9PSBQdXQpIHsKKyAgICAg
ICAgICAgIC8vIFRoZSBmaWVsZCBleGlzdHMsIGJ1dCBiZWNhdXNlIHRoZSByZXBsYWNlbWVudCB3
YXRjaHBvaW50IGlzIHN0aWxsIGludGFjdC4gVGhpcyBpcworICAgICAgICAgICAgLy8ga2luZCBv
ZiBkYW5nZXJvdXMuIFdlIGhhdmUgdHdvIG9wdGlvbnM6CisgICAgICAgICAgICAvLyAxKSBJbnZh
bGlkYXRlIHRoZSB3YXRjaHBvaW50IHNldC4gVGhhdCB3b3VsZCB3b3JrLCBidXQgaXQncyBwb3Nz
aWJsZSB0aGF0IHRoaXMgY29kZQorICAgICAgICAgICAgLy8gICAgcGF0aCBuZXZlciBleGVjdXRl
cyAtIGluIHdoaWNoIGNhc2UgdGhpcyB3b3VsZCBiZSB1bndpc2UuCisgICAgICAgICAgICAvLyAy
KSBIYXZlIHRoZSBpbnZhbGlkYXRpb24gaGFwcGVuIGF0IHJ1bi10aW1lLiBBbGwgd2UgaGF2ZSB0
byBkbyBpcyBsZWF2ZSB0aGUgY29kZQorICAgICAgICAgICAgLy8gICAgdW5jYWNoZWQuIFRoZSBv
bmx5IGRvd25zaWRlIGlzIHNsaWdodGx5IG1vcmUgd29yayB3aGVuIHRoaXMgZG9lcyBleGVjdXRl
LgorICAgICAgICAgICAgLy8gV2UgZ28gd2l0aCBvcHRpb24gKDIpIGhlcmUgYmVjYXVzZSBpdCBz
ZWVtcyBsZXNzIGV2aWwuCisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9i
YWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgMCwgMCk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xv
YmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2JhbE9iamVj
dC0+c3RydWN0dXJlKCksIDAsIDAsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc2LDEzICs3
NiwxMSBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgU3RyaW5nSW1wbCoga2V5Owog
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IHNwZWNpZmljVmFsdWU7CiAKLSAgICBQcm9wZXJ0eU1hcEVu
dHJ5KFZNJiB2bSwgSlNDZWxsKiBvd25lciwgU3RyaW5nSW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKKyAg
ICBQcm9wZXJ0eU1hcEVudHJ5KFN0cmluZ0ltcGwqIGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogICAgICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zm
c2V0KG9mZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICwg
c3BlY2lmaWNWYWx1ZSh2bSwgb3duZXIsIHNwZWNpZmljVmFsdWUsIFdyaXRlQmFycmllcjxKU0Nl
bGw+OjpNYXlCZU51bGwpCiAgICAgewogICAgIH0KIH07CkBAIC0xNDEsOCArMTM5LDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwg
cHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwog
ICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKLQogICAgIHR5cGVkZWYgU3RyaW5nSW1wbCogS2V5VHlwZTsKICAgICB0eXBlZGVmIFBy
b3BlcnR5TWFwRW50cnkgVmFsdWVUeXBlOwogCkBAIC0xNTcsOCArMTUzLDggQEAgcHVibGljOgog
CiAgICAgLy8gQ29uc3RydWN0b3IgaXMgcGFzc2VkIGFuIGluaXRpYWwgY2FwYWNpdHksIGEgUHJv
cGVydHlUYWJsZSB0byBjb3B5LCBvciBib3RoLgogICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBj
cmVhdGUoVk0mLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAgIHN0YXRpYyBQcm9wZXJ0
eVRhYmxlKiBjbG9uZShWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsK
LSAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBKU0NlbGwqIG93bmVyLCB1bnNp
Z25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMg
UHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3Rh
dGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBj
b25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgflByb3BlcnR5VGFibGUoKTsKIAogICAgIC8vIE9y
ZGVyZWQgaXRlcmF0aW9uIG1ldGhvZHMuCkBAIC0xOTYsNyArMTkyLDcgQEAgcHVibGljOgogICAg
IFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkp
OwogCiAgICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhh
cyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQuCi0gICAgUHJvcGVydHlUYWJsZSogY29w
eShWTSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0
eVRhYmxlKiBjb3B5KFZNJiwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOwogCiAjaWZuZGVmIE5ERUJV
RwogICAgIHNpemVfdCBzaXplSW5NZW1vcnkoKTsKQEAgLTIwNCwxMiArMjAwLDEyIEBAIHB1Ymxp
YzoKICNlbmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVj
dHVyZUZsYWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7
CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJ
bW1vcnRhbDsKIAogcHJpdmF0ZToKICAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQgaW5p
dGlhbENhcGFjaXR5KTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgSlNDZWxsKiwgY29uc3QgUHJv
cGVydHlUYWJsZSYpOwotICAgIFByb3BlcnR5VGFibGUoVk0mLCBKU0NlbGwqLCB1bnNpZ25lZCBp
bml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxl
KFZNJiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUoVk0mLCB1bnNp
Z25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKIAogICAgIFByb3Bl
cnR5VGFibGUoY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIC8vIFVzZWQgdG8gaW5zZXJ0IGEg
dmFsdWUga25vd24gbm90IHRvIGJlIGluIHRoZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cgY2Fw
YWNpdHkgdG8gYmUgYXZhaWxhYmxlLgpAQCAtNDk0LDE1ICs0OTAsMTUgQEAgaW5saW5lIFByb3Bl
cnR5T2Zmc2V0IFByb3BlcnR5VGFibGU6Om5leAogICAgIHJldHVybiBvZmZzZXRGb3JQcm9wZXJ0
eU51bWJlcihzaXplKCksIGlubGluZUNhcGFjaXR5KTsKIH0KIAotaW5saW5lIFByb3BlcnR5VGFi
bGUqIFByb3BlcnR5VGFibGU6OmNvcHkoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBu
ZXdDYXBhY2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KFZN
JiB2bSwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49
IG1fa2V5Q291bnQpOwogCiAgICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwg
YmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAg
ICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShu
ZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCi0gICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjbG9uZSh2bSwgb3duZXIsICp0aGlzKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xv
bmUodm0sIG93bmVyLCBuZXdDYXBhY2l0eSwgKnRoaXMpOworICAgICAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUodm0sICp0aGlzKTsKKyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xv
bmUodm0sIG5ld0NhcGFjaXR5LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2
aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlU
YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBAQCBQcm9wZXJ0eVRhYmxl
KiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoVk0mCiAgICAgcmV0dXJuIHRhYmxlOwogfQogCi1Qcm9w
ZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNv
bnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6
Y2xvbmUoVk0mIHZtLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+
KHZtLmhlYXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25lciwgb3RoZXIpOworICAgIFByb3BlcnR5
VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4o
dm0uaGVhcCkpIFByb3BlcnR5VGFibGUodm0sIG90aGVyKTsKICAgICB0YWJsZS0+ZmluaXNoQ3Jl
YXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KIAotUHJvcGVydHlUYWJsZSogUHJvcGVy
dHlUYWJsZTo6Y2xvbmUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2Fw
YWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVy
dHlUYWJsZTo6Y2xvbmUoVk0mIHZtLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFBy
b3BlcnR5VGFibGUmIG90aGVyKQogewotICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3BlcnR5VGFi
bGUodm0sIG93bmVyLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsKKyAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhl
YXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsKICAgICB0YWJs
ZS0+ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KQEAgLTY5LDcgKzY5
LDcgQEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIHVucwogICAgIEFTU0VS
VChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5
VGFibGUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikK
K1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBjb25zdCBQcm9wZXJ0eVRhYmxl
JiBvdGhlcikKICAgICA6IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQo
KSkKICAgICAsIG1faW5kZXhTaXplKG90aGVyLm1faW5kZXhTaXplKQogICAgICwgbV9pbmRleE1h
c2sob3RoZXIubV9pbmRleE1hc2spCkBAIC04MiwxMCArODIsOCBAQCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5k
ZXgsIGRhdGFTaXplKCkpOwogCiAgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAg
Zm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
IGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAg
ICAgIGl0ZXItPmtleS0+cmVmKCk7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVy
LCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9CiAKICAgICAvLyBDb3B5IHRoZSBt
X2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KICAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhl
ckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKQEAgLTkzLDcg
KzkxLDcgQEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpTQwogICAgICAg
ICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4o
Km90aGVyRGVsZXRlZE9mZnNldHMpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJs
ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3Qg
UHJvcGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2
bSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikK
ICAgICA6IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAs
IG1faW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQogICAgICwgbV9p
bmRleE1hc2sobV9pbmRleFNpemUgLSAxKQpAQCAtMTA5LDcgKzEwNyw2IEBAIFByb3BlcnR5VGFi
bGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBKU0MKICAgICAgICAgQVNTRVJUKGNhbkluc2VydCgp
KTsKICAgICAgICAgcmVpbnNlcnQoKml0ZXIpOwogICAgICAgICBpdGVyLT5rZXktPnJlZigpOwot
ICAgICAgICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5n
ZXQoKSk7CiAgICAgfQogCiAgICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3Iu
CkBAIC0xMzIsMTcgKzEyOSw0IEBAIFByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCkKICAg
ICBmYXN0RnJlZShtX2luZGV4KTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgUHJvcGVydHlU
YWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7Ci0gICAgQVNT
RVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEFTU0VSVCh0
aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVu
KCkpOwotCi0gICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwot
Ci0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+ZW5kKCk7Ci0g
ICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5iZWdpbigp
OyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c3BlY2lm
aWNWYWx1ZSk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLCAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMTczLDcgKzE3Myw2IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9i
YWxPYmoKICAgICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGlu
Z1Byb3RvKGNsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0p
KTsKICAgICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0
cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50
KDApOwogICAgIHNldFByZXZlbnRFeHRlbnNpb25zKGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0
aW9uKGZhbHNlKTsKICAgICBzZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIw
Myw3ICsyMDIsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0SGFzUmVh
ZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+
aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKTsKICAgICBzZXRIYXNOb25F
bnVtZXJhYmxlUHJvcGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMo
MCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KDApOwogICAgIHNldFByZXZl
bnRFeHRlbnNpb25zKGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZhbHNlKTsKICAgICBz
ZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIzMiw3ICsyMzAsNiBAQCBTdHJ1
Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIGNvbnN0IFN0cnVjCiAgICAgc2V0SGFzUmVhZE9ubHlP
ckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhwcmV2aW91cy0+aGFzUmVhZE9u
bHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpKTsKICAgICBzZXRIYXNO
b25FbnVtZXJhYmxlUHJvcGVydGllcyhwcmV2aW91cy0+aGFzTm9uRW51bWVyYWJsZVByb3BlcnRp
ZXMoKSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNG
dW5jdGlvblRocmFzaENvdW50KHByZXZpb3VzLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQo
KSk7CiAgICAgc2V0UHJldmVudEV4dGVuc2lvbnMocHJldmlvdXMtPnByZXZlbnRFeHRlbnNpb25z
KCkpOwogICAgIHNldERpZFRyYW5zaXRpb24odHJ1ZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25z
UmVpZmllZChwcmV2aW91cy0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKQEAgLTMwMCw3ICsy
OTcsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZmlu
ZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJl
LCB0YWJsZSk7CiAgICAgCiAgICAgaWYgKHRhYmxlKSB7Ci0gICAgICAgIHRhYmxlID0gdGFibGUt
PmNvcHkodm0sIHN0cnVjdHVyZSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQs
IG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgbnVt
YmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKICAg
ICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CiAgICAgfQogICAgIApAQCAtMzE3LDcg
KzMxNCw3IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICAg
ICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1f
bmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUHJvcGVydHlN
YXBFbnRyeSBlbnRyeSh2bSwgdGhpcywgc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgp
LCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCks
IHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSk7CisgICAgICAgIFBy
b3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBz
dHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOwog
ICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFi
bGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtMzM2LDMw
ICszMzMsMTIgQEAgc2l6ZV90IFN0cnVjdHVyZTo6c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lUwogICAg
IHJldHVybiBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5KCkp
OwogfQogIAotdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgU3RyaW5nSW1wbCogcmVwID0g
cHJvcGVydHlOYW1lLnVpZCgpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAg
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0KLSAgICBB
U1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwotCi0g
ICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmdldChyZXApOwot
ICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgZW50cnktPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKLX0K
LQotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9m
ZnNldCkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIEFTU0VS
VCghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNP
YmplY3QoKSk7CiAKICAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1
Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldCh1aWQsIGF0dHJpYnV0ZXMpKSB7Ci0gICAgICAg
IEpTQ2VsbCogc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1f
c3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCk7Ci0gICAgICAgIGlmIChzcGVjaWZpY1ZhbHVl
SW5QcmV2aW91cyAmJiBzcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyAhPSBzcGVjaWZpY1ZhbHVlKQot
ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0aW5nVHJh
bnNpdGlvbi0+bV9vZmZzZXQsIGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7
CiAgICAgICAgIG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9vZmZzZXQ7CiAgICAgICAg
IHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CkBAIC0zNjgsMTYgKzM0NywxNiBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0
cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAg
ICBBU1NFUlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIGFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LnVpZCgpLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQpOworICAgIHJldHVybiBh
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKIH0KIAotU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJy
ZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0
cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQor
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1
Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7Ci0gICAgcmV0dXJuIGFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgdWlk
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQpOworICAgIHJldHVybiBhZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0
cmlidXRlcywgb2Zmc2V0KTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5N
YXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdApAQCAtNDMyLDI1ICs0MTEsMTIgQEAg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdAogICAgIHJldHVybiBBbGxv
Y2F0ZUFycmF5U3RvcmFnZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFBy
b3BlcnR5T2Zmc2V0JiBvZmZzZXQsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBjb250ZXh0KQor
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQg
Y29udGV4dCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlIGEgc3BlY2lmaWMgZnVuY3Rpb24sIHdlIG1h
eSBoYXZlIGdvdCB0byB0aGlzIHBvaW50IGlmIHRoZXJlIGlzCi0gICAgLy8gYWxyZWFkeSBhIHRy
YW5zaXRpb24gd2l0aCB0aGUgY29ycmVjdCBwcm9wZXJ0eSBuYW1lIGFuZCBhdHRyaWJ1dGVzLCBi
dXQKLSAgICAvLyBzcGVjaWFsaXplZCB0byBhIGRpZmZlcmVudCBmdW5jdGlvbi4gIEluIHRoaXMg
Y2FzZSB3ZSBqdXN0IHdhbnQgdG8gZ2l2ZSB1cAotICAgIC8vIGFuZCBkZXNwZWNpYWxpemUgdGhl
IHRyYW5zaXRpb24uCi0gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGNsZWFyIHRoZSB2YWx1ZSBvZiBz
cGVjaWZpY0Z1bmN0aW9uIHdoaWNoIHdpbGwgcmVzdWx0Ci0gICAgLy8gaW4gdXMgYWRkaW5nIGEg
bm9uLXNwZWNpZmljIHRyYW5zaXRpb24sIGFuZCBhbnkgc3Vic2VxdWVudCBsb29rdXAgaW4KLSAg
ICAvLyBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUg
d2lsbCBqdXN0IHVzZSB0aGF0LgotICAgIGlmIChzcGVjaWZpY1ZhbHVlICYmIHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uVGFibGUuY29udGFpbnMocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRyaWJ1dGVz
KSkKLSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+
aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAg
IEFTU0VSVCghU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBv
ZmZzZXQpKTsKKyAgICBBU1NFUlQoIVN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zm
c2V0KSk7CiAgICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENv
dW50KCkgPT0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KQotICAgICAgICBzcGVjaWZp
Y1ZhbHVlID0gMDsKLQogICAgIGludCBtYXhUcmFuc2l0aW9uTGVuZ3RoOwogICAgIGlmIChjb250
ZXh0ID09IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCkKICAgICAgICAgbWF4VHJhbnNpdGlvbkxl
bmd0aCA9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkOwpAQCAtNDU5LDcg
KzQyNSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICBp
ZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsK
ICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFu
c2l0aW9uKTsKLSAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZSh2
bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgb2Zm
c2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAg
ICAgICByZXR1cm4gdHJhbnNpdGlvbjsKICAgICB9CiAgICAgCkBAIC00NjksMTEgKzQzNSwxMCBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlv
bi0+c2V0UHJldmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0
aW9uLT5tX25hbWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRp
b24tPnNldEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24t
Pm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBz
cGVjaWZpY1ZhbHVlKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZt
LCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2
bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKIAot
ICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+
YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCiAgICAgY2hlY2tPZmZzZXQodHJh
bnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsK
QEAgLTUwNSw3ICs0NzAsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBl
VHJhCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVy
dHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTUxMywzMCArNDc4
LDYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogICAgIHJldHVy
biB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rp
b25UcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBy
ZXBsYWNlRnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlv
blRocmFzaENvdW50KCkgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOwotICAgIFN0
cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgIHRyYW5z
aXRpb24tPnNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCh0cmFuc2l0aW9uLT5zcGVjaWZp
Y0Z1bmN0aW9uVGhyYXNoQ291bnQoKSArIDEpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZt
LCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNp
dGlvbikpOwotICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
LSAgICB0cmFuc2l0aW9uLT5waW4oKTsKLQotICAgIGlmICh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1
bmN0aW9uVGhyYXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpCi0g
ICAgICAgIHRyYW5zaXRpb24tPmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyh2bSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGJvb2wgcmVtb3ZlZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1bmN0aW9uKHZt
LCByZXBsYWNlRnVuY3Rpb24pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92
ZWQpOwotICAgIH0KLQotICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsK
LSAgICByZXR1cm4gdHJhbnNpdGlvbjsKLX0KLQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJp
YnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBEZWZlckdD
IGRlZmVyR0Modm0uaGVhcCk7CkBAIC01NDQsNyArNDg1LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYQogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBj
cmVhdGUodm0sIHN0cnVjdHVyZSk7CiAKICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5w
cm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOworICAgICAgICB0cmFuc2l0aW9uLT5w
cm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0
cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAK
QEAgLTU2OCw3ICs1MDksNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJh
bnNpCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVy
dHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7
CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC02MzEsNyArNTcyLDcgQEAgU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZt
LCBkZWZlckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNp
dGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24t
PnNldFByZXZlbnRFeHRlbnNpb25zKHRydWUpOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAt
NjQwLDEzICs1ODEsMTMgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25z
VAogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6
OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSwgU3RydWN0dXJlKiBvd25l
cikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQ
aW5uZWQoVk0mIHZtKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAg
ICAKICAgICBpZiAoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBwcm9w
ZXJ0eVRhYmxlKCktPmNvcHkodm0sIG93bmVyLCBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSArIDEp
OworICAgICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBwcm9wZXJ0eVRhYmxl
KCktPnNpemUoKSArIDEpOwogICAgIAogICAgIC8vIEhvbGQgdGhlIGxvY2sgd2hpbGUgc3RlYWxp
bmcgdGhlIHRhYmxlIC0gc28gdGhhdCBnZXRDb25jdXJyZW50bHkoKSBvbiBhbm90aGVyIHRocmVh
ZAogICAgIC8vIHdpbGwgZWl0aGVyIGhhdmUgdG8gYnlwYXNzIHRoaXMgc3RydWN0dXJlLCBvciB3
aWxsIGdldCB0byB1c2UgdGhlIHByb3BlcnR5IHRhYmxlCkBAIC02ODIsNyArNjIzLDcgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNl
dFByZXZpb3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+
c2V0QXR0cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+bV9i
bG9iLnNldEluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOwotICAgIHRyYW5zaXRpb24tPnByb3Bl
cnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFi
bGVPckNsb25lSWZQaW5uZWQodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9w
ZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0
cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAKQEAgLTc3MywxOSArNzE0LDE2IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICByZXR1cm4gdGhp
czsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIWVudW1lcmF0aW9uQ2Fj
aGUoKSk7CiAKLSAgICBpZiAoc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgPT0gbWF4U3Bl
Y2lmaWNGdW5jdGlvblRocmFzaENvdW50KQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKLQog
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKICAgICBwaW4oKTsKIAot
ICAgIHJldHVybiBwdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IHNwZWNpZmljVmFsdWUpOworICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcyk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRo
b3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC04MTIs
MTEgKzc1MCw1NyBAQCB2b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShWTSYgdm0pCiB7
CiAgICAgQVNTRVJUKCFoYXNSYXJlRGF0YSgpKTsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFy
ZURhdGEgPSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKHZtLCBwcmV2aW91cygpKTsKKyAgICBX
VEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldCh2bSwg
dGhpcywgcmFyZURhdGEpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgc2V0SGFz
UmFyZURhdGEodHJ1ZSk7CiAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogfQogCitXYXRjaHBv
aW50U2V0KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0
KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIEFTU0VSVCghaXNVbmNhY2hl
YWJsZURpY3Rpb25hcnkoKSk7CisgICAgCisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAg
ICBhbGxvY2F0ZVJhcmVEYXRhKHZtKTsKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2xvY2spOworICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRh
KCk7CisgICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzKSB7Cisg
ICAgICAgIHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMgPQorICAgICAgICAg
ICAgc3RkOjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50
TWFwPigpOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIH0KKyAgICBhdXRv
IHJlc3VsdCA9IHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMtPmFkZChvZmZz
ZXQsIG51bGxwdHIpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkp
OworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCit2b2lkIFN0
cnVjdHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGdldCh2bSwgcHJv
cGVydHlOYW1lKTsKKyAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRz
KHZtLCBvZmZzZXQpOworfQorCit2b2lkIFN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxh
Y2VtZW50KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGVuc3VyZVByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KHZtLCBvZmZzZXQpLT5maXJlQWxsKCJEaWQgY2Fj
aGUgcHJvcGVydHkgcmVwbGFjZW1lbnQiKTsKK30KKwordm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0
Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mIHZtKQoreworICAgIGlmICghaXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSkgeworICAgICAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNl
bWVudHModm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKTsKKyAgICAgICAgc3RhcnRXYXRj
aGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9m
KTsKKyAgICB9CisgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7Cit9CisK
ICNpZiBEVU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKIHN0cnVjdCBQcm9wZXJ0eU1hcFN0YXRpc3Rp
Y3NFeGl0TG9nZ2VyIHsKQEAgLTg0NSwyMSArODI5LDIxIEBAIGlubGluZSB2b2lkIFN0cnVjdHVy
ZTo6Y2hlY2tDb25zaXN0ZW5jeSgKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVy
ZTo6Y29weVByb3BlcnR5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlU
YWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShWTSYgdm0pCiB7CiAgICAgaWYgKCFw
cm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRh
YmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOworICAgIHJldHVy
biBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CiB9CiAK
LVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZN
JiB2bSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKICAgICBpZiAocHJvcGVydHlUYWJsZSgp
KQotICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqcHJvcGVy
dHlUYWJsZSgpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZt
LCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3Jl
YXRlKHZtLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBh
Y2l0eSkpOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShW
TSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNp
ZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYs
IFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CiAgICAgVmVjdG9yPFN0
cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CkBAIC04
NzEsNyArODU1LDYgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bAog
ICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5nZXQodWlkKTsKICAgICAg
ICAgaWYgKGVudHJ5KSB7CiAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0
ZXM7Ci0gICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnktPnNwZWNpZmljVmFsdWUuZ2V0
KCk7CiAgICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQgPSBlbnRyeS0+b2Zmc2V0Owog
ICAgICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OwpAQCAtODg1LDE0ICs4NjgsMTMgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpnZXRDb25jdXJyZW50bAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAg
ICBhdHRyaWJ1dGVzID0gc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpOwotICAgICAg
ICBzcGVjaWZpY1ZhbHVlID0gc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdl
dCgpOwogICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiB9CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
Z2V0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0
ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6Omdl
dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVz
KQogewogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC05MDcsNDIgKzg4OSwxNSBAQCBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByCiAgICAgICAgIHJldHVybiBp
bnZhbGlkT2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAg
IHNwZWNpZmljVmFsdWUgPSBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5nZXQoKTsKICAgICByZXR1cm4g
ZW50cnktPm9mZnNldDsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmdldChwcm9w
ZXJ0eU5hbWUudWlkKCkpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEFTU0VSVChlbnRyeS0+c3BlY2lmaWNWYWx1ZSk7Ci0gICAgZW50cnktPnNwZWNpZmlj
VmFsdWUuY2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmRl
c3BlY2lmeUFsbEZ1bmN0aW9ucyhWTSYgdm0pCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwotICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7
Ci0gICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9y
IChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5zcGVjaWZpY1ZhbHVlLmNsZWFy
KCk7Ci19Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZShWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2Vs
bCogc3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBH
Q1NhZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwogICAgIAor
ICAgIHNldERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKGZhbHNlKTsKKyAgICAKICAgICBBU1NF
UlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKIAogICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKQEAgLTk1Niw3ICs5MTEsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OnB1dFNwZWNpZmljVmFsCiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBw
cm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKLSAgICBwcm9w
ZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHZtLCB0aGlzLCByZXAsIG5ld09mZnNl
dCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVy
dHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0
eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgIHJldHVybiBuZXdPZmZzZXQ7CkBAIC0xMDYwLDcgKzEwMTUsNiBAQCB2b2lk
IFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBw
ZW5kKCZ0aGlzT2JqZWN0LT5tX2NhY2hlZFByb3RvdHlwZUNoYWluKTsKICAgICB9CiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKLSAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7CiAKICAg
ICBpZiAodGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpIHsKICAgICAgICAgQVNT
RVJUKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CkBAIC0xMDgzLDggKzEwMzcs
NyBAQCBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlCiAgICAgICAgIGN1
cnJlbnQgPSBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIAogICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwog
ICAgICAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIApAQCAtMTE0NCwxMyArMTA5Nyw4IEBAIHZvaWQgU3RydWN0dXJlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICBpZiAodGFibGUpIHsKICAgICAgICAgUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOwogICAgICAgICBQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQog
ICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpdGVyLT5rZXksICI6Iiwgc3RhdGljX2Nhc3Q8
aW50PihpdGVyLT5vZmZzZXQpKTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zcGVjaWZpY1ZhbHVl
KSB7Ci0gICAgICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlDb250ZXh0OwotICAgICAgICAg
ICAgICAgIG91dC5wcmludCgiPT4iLCBSYXdQb2ludGVyKGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0
KCkpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RydWN0
dXJlLT5tX2xvY2sudW5sb2NrKCk7CiAgICAgfQpAQCAtMTE2MCwxMCArMTEwOCw2IEBAIHZvaWQg
U3RydWN0dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICAgICAgaWYgKCFzdHJ1Y3R1
cmUtPm1fbmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksICI6Iiwgc3Rh
dGljX2Nhc3Q8aW50PihzdHJ1Y3R1cmUtPm1fb2Zmc2V0KSk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1
cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpIHsKLSAgICAgICAgICAgIER1bXBDb250ZXh0
IGR1bW15Q29udGV4dDsKLSAgICAgICAgICAgIG91dC5wcmludCgiPT4iLCBSYXdQb2ludGVyKHN0
cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSkpOwotICAgICAgICB9CiAg
ICAgfQogICAgIAogICAgIG91dC5wcmludCgifSwgIiwgSW5kZXhpbmdUeXBlRHVtcChpbmRleGlu
Z1R5cGUoKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmgJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTIgKzExMSwxMSBAQCBwdWJsaWM6CiAK
ICAgICBzdGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
KiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFs
dWUsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVy
dHlTbG90OjpVbmtub3duQ29udGV4dCk7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVy
dHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBT
dHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1
ZSwgUHJvcGVydHlPZmZzZXQmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSos
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
LCBQcm9wZXJ0eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1
cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNv
bnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0KTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVu
dGx5KFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJv
cGVydHlPZmZzZXQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBh
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmKTsKICAgICBzdGF0
aWMgU3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFN0cnVjdHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IEpTVmFsdWUgcHJvdG90eXBlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU5hbWUpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24o
Vk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTEzOCw3ICsxMzcsNyBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIC8vIFRoZXNlIHNob3Vs
ZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5
T2Zmc2V0IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYs
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQg
cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAg
dm9pZCBzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90
eXBlKSB7IG1fcHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAK
QEAgLTE4OCw4ICsxODcsNiBAQCBwdWJsaWM6CiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90b3R5
cGUgY2hhaW4gaW50ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwogICAgIGJvb2wgcHJvdG90
eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICAgICAg
Ci0gICAgYm9vbCB0cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJl
dHVybiAhIW1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXM7IH0KLSAgICAgICAgCiAgICAgU3RydWN0
dXJlKiBwcmV2aW91c0lEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKQEAgLTI2MywxMCArMjYwLDEwIEBAIHB1YmxpYzoK
IAogICAgIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVy
dHlPZmZzZXQgZ2V0KFZNJiwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQm
IGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJp
YnV0ZXMpOwogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5n
SW1wbCogdWlkKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJp
bmdJbXBsKiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVl
KTsKKyAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1
aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKTsKIAogICAgIHZvaWQgc2V0SGFzR2V0dGVyU2V0dGVy
UHJvcGVydGllc1dpdGhQcm90b0NoZWNrKGJvb2wgaXNfX3Byb3RvX18pCiAgICAgewpAQCAtMjgz
LDkgKzI4MCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICFKU0M6OmlzVmFsaWRPZmZzZXQo
bV9vZmZzZXQpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVzcGVjaWZ5
RGljdGlvbmFyeUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKLSAgICB2b2lkIGRpc2FibGVT
cGVjaWZpY0Z1bmN0aW9uVHJhY2tpbmcoKSB7IHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dChtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOyB9Ci0KICAgICB2b2lkIHNldEVudW1l
cmF0aW9uQ2FjaGUoVk0mLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hl
KTsgLy8gRGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCiAgICAgSlNQcm9wZXJ0
eU5hbWVJdGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IuaC4KICAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJl
KFZNJiwgUHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwpAQCAtMzY0LDEzICsz
NTgsMzYgQEAgcHVibGljOgogICAgICAgICBBU1NFUlQodHJhbnNpdGlvbldhdGNocG9pbnRTZXRJ
c1N0aWxsVmFsaWQoKSk7CiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuYWRkKHdh
dGNocG9pbnQpOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgdm9pZCBkaWRUcmFuc2l0aW9u
RnJvbVRoaXNTdHJ1Y3R1cmUoKSBjb25zdDsKICAgICAKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0
JiB0cmFuc2l0aW9uV2F0Y2hwb2ludFNldCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
bV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKICAgICB9CisgICAgCisgICAgV2F0Y2hwb2ludFNl
dCogZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mLCBQcm9wZXJ0eU9m
ZnNldCk7CisgICAgdm9pZCBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0m
IHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBlbnN1cmVQcm9wZXJ0
eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCh2bSwgb2Zmc2V0KTsKKyAgICB9CisgICAgdm9pZCBz
dGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mLCBQcm9wZXJ0eU5hbWUpOwor
ICAgIFdhdGNocG9pbnRTZXQqIHByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3Bl
cnR5T2Zmc2V0KTsKKyAgICB2b2lkIGRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCk7
CisgICAgdm9pZCBkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mLCBQcm9wZXJ0eU9mZnNl
dCk7CisgICAgCisgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNl
c3NhcnkoVk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShkaWRXYXRjaEludGVybmFs
UHJvcGVydGllcygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhcnRXYXRjaGlu
Z0ludGVybmFsUHJvcGVydGllcyh2bSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRXYXRj
aGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5Rm9yRW50aXJlQ2hhaW4oVk0mIHZtKQor
ICAgIHsKKyAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVy
ZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKKyAg
ICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVj
ZXNzYXJ5KHZtKTsKKyAgICB9CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0
cnVjdHVyZVNoYXBlKCk7CiAgICAgCkBAIC00MDYsMTEgKzQyMywxMSBAQCBwdWJsaWM6CiAgICAg
REVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
RXhjbHVkaW5nUHJvdG8sIEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVk
aW5nUHJvdG8sIDEsIDQpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNOb25FbnVtZXJh
YmxlUHJvcGVydGllcywgSGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIDEsIDUpOwogICAgIERF
RklORV9CSVRGSUVMRCh1bnNpZ25lZCwgYXR0cmlidXRlc0luUHJldmlvdXMsIEF0dHJpYnV0ZXNJ
blByZXZpb3VzLCAxNCwgNik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCBzcGVjaWZp
Y0Z1bmN0aW9uVGhyYXNoQ291bnQsIFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCwgMiwgMjAp
OwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBwcmV2ZW50RXh0ZW5zaW9ucywgUHJldmVudEV4
dGVuc2lvbnMsIDEsIDIyKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlv
biwgRGlkVHJhbnNpdGlvbiwgMSwgMjMpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0
aWNGdW5jdGlvbnNSZWlmaWVkLCBTdGF0aWNGdW5jdGlvbnNSZWlmaWVkLCAxLCAyNCk7CiAgICAg
REVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1JhcmVEYXRhLCBIYXNSYXJlRGF0YSwgMSwgMjUpOwor
ICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGllcywgRGlk
V2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI2KTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNDIxLDcgKzQzOCw3IEBAIHByaXZhdGU6
CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsK
ICAgICAKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlSW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBz
dGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
SW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFBy
b3BlcnR5T2Zmc2V0Jik7CiAKICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzdHJ1Y3R1cmUg
dGhhdCBoYXMgYSB1c2FibGUgcHJvcGVydHkgdGFibGUsIHRoYXQgcHJvcGVydHkgdGFibGUsCiAg
ICAgLy8gYW5kIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3
ZSBnb3QgdG8gaXQuIElmIGl0IHJldHVybnMgYQpAQCAtNDMxLDE5ICs0NDgsMTYgQEAgcHJpdmF0
ZToKICAgICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgRGljdGlvbmFyeUtpbmQpOwogCi0gICAgUHJvcGVydHlPZmZzZXQgcHV0
U3BlY2lmaWNWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQ
cm9wZXJ0eU5hbWUpOwogCiAgICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZv
aWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihWTSYs
IFByb3BlcnR5TmFtZSk7Ci0gICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0mKTsKLQog
ICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFBy
b3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiwgU3RydWN0
dXJlKiBvd25lcik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mLCBT
dHJ1Y3R1cmUqIG93bmVyKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcoVk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtl
UHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNv
cHlQcm9wZXJ0eVRhYmxlKFZNJik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwKFZNJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3NhcnkoVk0mIHZtLCBEZWZlckdDJikKICAgICB7CkBAIC01MDMsMTIgKzUxNywxMiBAQCBwcml2
YXRlOgogICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CisgICAgCisgICAgdm9p
ZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKICAgICBzdGF0aWMgY29u
c3QgaW50IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQg
c19tYXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKLSAg
ICAKICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUgJ1N0cnVjdHVyZScKICAgICAvLyBwYXJ0IG9mIHRoZSBvYmplY3QuCiAgICAg
U3RydWN0dXJlSURCbG9iIG1fYmxvYjsKQEAgLTUyMSw3ICs1MzUsNiBAQCBwcml2YXRlOgogICAg
IFdyaXRlQmFycmllcjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwogCiAgICAgUmVmUHRy
PFN0cmluZ0ltcGw+IG1fbmFtZUluUHJldmlvdXM7Ci0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4g
bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91czsKIAogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFz
c0luZm87CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDkgKzEw
Miw3IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYKIGlubGluZSBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYgdm0sIFN0cmluZ0lt
cGwqIHVpZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICBKU0NlbGwq
IHNwZWNpZmljVmFsdWVJZ25vcmVkOwotICAgIHJldHVybiBnZXRDb25jdXJyZW50bHkoCi0gICAg
ICAgIHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7Cisg
ICAgcmV0dXJuIGdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCk7CiB9
CiAKIGlubGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxs
KiBjZWxsKSBjb25zdApAQCAtMjIzLDYgKzIyMSwzMSBAQCBBTFdBWVNfSU5MSU5FIFdyaXRlQmFy
cmllcjxQcm9wZXJ0eVRhYmxlCiAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIH0K
IAoraW5saW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQoreworICAgIGlmIChMSUtFTFkoIWhhc1JhcmVEYXRhKCkpKQorICAgICAgICBy
ZXR1cm47CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3BlcnR5V2F0Y2hwb2ludE1hcCogbWFw
ID0gcmFyZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzLmdldCgpOworICAgIGlm
IChMSUtFTFkoIW1hcCkpCisgICAgICAgIHJldHVybjsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQg
PSBtYXAtPmdldChvZmZzZXQpOworICAgIGlmIChMSUtFTFkoIXNldCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBzZXQtPmZpcmVBbGwoIlByb3BlcnR5IGRpZCBnZXQgcmVwbGFjZWQiKTsKK30KKwor
aW5saW5lIFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVudFdhdGNo
cG9pbnRTZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENvbmN1cnJlbnRKSVRMb2Nr
ZXIgbG9ja2VyKG1fbG9jayk7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBTdHJ1Y3R1cmVSYXJl
RGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSByYXJlRGF0YSgpLT5tX3JlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYgKCFtYXApCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBtYXAtPmdldChvZmZzZXQpOworfQorCiBBTFdBWVNfSU5MSU5F
IGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBQ
cm9wZXJ0eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0
NiwxMSBAQCBTdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNyCiAgICAgcmV0
dXJuIHJhcmVEYXRhOwogfQogCit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5T
dHJ1Y3R1cmVSYXJlRGF0YTo6flN0cnVjdHVyZVJhcmVEYXRhKCk7Cit9CisKIFN0cnVjdHVyZVJh
cmVEYXRhOjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMpCiAg
ICAgOiBKU0NlbGwodm0sIHZtLnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJl
RGF0YS5oCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiQ2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBl
SW5mby5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0Mgewog
CkBAIC00MCw2ICs0MSwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSA6IHB1YmxpYyBKU0Nl
bGwgCiBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBT
dHJ1Y3R1cmUqKTsKIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlw
ZSk7CkBAIC01MywxMCArNTgsMTIgQEAgcHVibGljOgogCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvciogZW51bWVyYXRpb25DYWNoZSgpOwogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShW
TSYsIGNvbnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVl
KTsKLQorICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFN0cnVjdHVyZTsKKyAgICAKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYsIFN0
cnVjdHVyZSopOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CkBAIC02NCw2
ICs3MSw5IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91
czsKICAgICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAg
ICBXcml0ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4gbV9lbnVtZXJhdGlvbkNhY2hl
OworICAgIAorICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNo
cG9pbnRTZXQ+LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFw
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVy
dHkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9p
bmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28ocCkgewor
ICAgIGlmIChwKQorICAgICAgICBNYXRoID0ge3NpbjogZnVuY3Rpb24oKSB7IHJldHVybiA0Mjsg
fSwgUEk6IDQzLCBhYnM6IE1hdGguYWJzfTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworKGZ1bmN0
aW9uKCkgeworICAgIHZhciBuID0gMTAwMDAwOworICAgIHZhciBtID0gMTAwOworICAgIHZhciBy
ZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGZv
byhpID09IG4gLSBtKTsKKyAgICAgICAgcmVzdWx0ICs9IE1hdGguc2luKE1hdGguUEkpOworICAg
IH0KKyAgICBpZiAoTWF0aC5hYnMocmVzdWx0IC0gbSAqIDQyKSA+IDFlLTgpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItY29u
c3RhbnQtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjIgQEAKK3ZhciBvID0ge2Y6e2Y6e2Y6e2Y6e2Y6e2Y6e2Y6NDJ9fX19fX19Owor
CitmdW5jdGlvbiBmb28ocCkgeworICAgIGlmIChwKQorICAgICAgICBvLmYuZi5mLmYuZi5mID0g
e2Y6NTN9OworfQorCitub0lubGluZShmb28pOworCisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG4g
PSAxMDAwMDA7CisgICAgdmFyIG0gPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZm9vKGkgPT0gbiAtIG0p
OworICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIH0KKyAgICAKKyAgICBp
ZiAocmVzdWx0ICE9IChuIC0gbSkgKiA0MiArIG0gKiA1MykKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1h
bmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hl
LWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzMyBAQAordmFyIG8gPSB7Zjo0Mn07CisKK2Z1bmN0aW9uIGZvbyhwLCBvLCB2KSB7CisgICAg
aWYgKHApCisgICAgICAgIG8uZiA9IHY7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1
cm4gby5mOworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDsgKytpKQorICAgIGZvbyhmYWxzZSk7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTA7ICsraSkKKyAgICBmb28odHJ1ZSwge30sIDQyKTsKKworZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDsgKytpKQorICAgIGZvbyh0cnVlLCBvLCA0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAh
PSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQor
Citmb28odHJ1ZSwgbywgNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1
MykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcmVwbGFjZS10
aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcmVwbGFjZS10aGVu
LWNhY2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4t
Y2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMwIEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHAsIHYpIHsKKyAg
ICBpZiAocCkKKyAgICAgICAgby5mID0gdjsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJl
dHVybiBvLmY7Cit9CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCitmb3IgKHZh
ciBpID0gMDsgaSA8IDEwOyArK2kpCisgICAgZm9vKGZhbHNlKTsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgKytpKQorICAgIGZvbyh0cnVlLCA0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAh
PSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQor
Citmb28odHJ1ZSwgNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1MykK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNjb3BlLWdsb2Jh
bC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13
YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9p
bnQtaW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlv
biBmb28ocCwgdikgeworICAgIGlmIChwKQorICAgICAgICBnbG9iYWwgPSB2OworfQorCitmdW5j
dGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25v
SW5saW5lKGJhcik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBmb28oZmFs
c2UpOworCit2YXIgdmFsdWUgPSA0MjsKK2Zvbyh0cnVlLCB2YWx1ZSk7Cit2YXIgbiA9IDEwMDAw
MDsKK3ZhciBtID0gMTAwOworZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICBpZiAo
aSA9PSBuIC0gbSkKKyAgICAgICAgZm9vKHRydWUsIHZhbHVlID0gNTMpOworICAgIHZhciByZXN1
bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IG9uIGl0ZXJhdGlvbiAiICsgaSArICIgZ290OiAiICsgcmVzdWx0OworfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBsYWNlLXRoZW4t
Y2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1j
YWNoZS1nZXQtYW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBsYWNlLXRoZW4t
Y2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI2IEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBv
LmYgPSB2OworfQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9J
bmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK2Zvbyg0Mik7Citmb28oNDIpOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGJhcigpOwor
ICAgIGlmIChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsKK30KKworZm9vKDUzKTsKK3ZhciByZXN1bHQgPSBiYXIoKTsKK2lmIChyZXN1
bHQgIT0gNTMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3Vs
dDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQtcHV0LXRv
LXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUt
Z2xvYmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQtcHV0LXRvLXNjb3BlLWdsb2Jh
bC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyMiBAQAorZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBnbG9iYWwgPSB2OworfQorCitmdW5jdGlv
biBiYXIoKSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5s
aW5lKGJhcik7CisKK3ZhciB2YWx1ZSA9IDQyOworZm9vKHZhbHVlKTsKK3ZhciBuID0gMTAwMDAw
OwordmFyIG0gPSAxMDA7Citmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgIGlmIChp
ID09IG4gLSBtKQorICAgICAgICBmb28odmFsdWUgPSA1Myk7CisgICAgdmFyIHJlc3VsdCA9IGJh
cigpOworICAgIGlmIChyZXN1bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93ICJFcnJvcjogb24g
aXRlcmF0aW9uICIgKyBpICsgIiBnb3Q6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgt
c2FtZS12YWx1ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBlYXQtcHV0LXRvLXNjb3BlLWdsb2JhbC13
aXRoLXNhbWUtdmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBlYXQtcHV0LXRvLXNjb3BlLWds
b2JhbC13aXRoLXNhbWUtdmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGZvbyh2KSB7CisgICAgZ2xvYmFsID0gdjsK
K30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBnbG9iYWw7Cit9CisKK25vSW5saW5l
KGZvbyk7Citub0lubGluZShiYXIpOworCit2YXIgdmFsdWUgPSA0MjsKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTA7ICsraSkKKyAgICBmb28odmFsdWUpOwordmFyIG4gPSAxMDAwMDA7Cit2YXIgbSA9
IDEwMDsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgaWYgKGkgPT0gbiAtIG0p
CisgICAgICAgIGZvbyh2YWx1ZSA9IDUzKTsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAg
aWYgKHJlc3VsdCAhPSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBvbiBpdGVyYXRpb24g
IiArIGkgKyAiIGdvdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDgwOCkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBA
CisyMDE0LTA3LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
W2Z0bG9wdF0gSW5mZXIgaW1tdXRhYmxlIG9iamVjdCBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ1NjcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY29u
c3RhbnQtZ2xvYmFsLXByb3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMv
cmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuaHRtbDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQt
Z2xvYmFsLXByb3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5qczogQWRkZWQuCisKIDIwMTQtMDYtMzAgIE1h
cmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSBy
MTY5MTIxIGZyb20gdHJ1bmsuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNv
bnN0YW50LWdsb2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFu
dC1nbG9iYWwtcHJvcGVydHktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAgQEAKK0pTUmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5Lmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwt
cHJvcGVydHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5m
ZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
aW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVy
dHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5m
ZXItY29uc3RhbnQtcHJvcGVydHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLWNvbnN0YW50LXBy
b3BlcnR5CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlv
biB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFu
dC1wcm9wZXJ0eS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9p
bmZlci1jb25zdGFudC1wcm9wZXJ0eS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIg
QEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1s
PgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVy
LWNvbnN0YW50LXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2Jh
bC1wcm9wZXJ0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9i
YWwtcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24o
KSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAw
OyArK2kpIHsKKyAgICAgICAgcmVzdWx0ICs9IE1hdGguc2luKE1hdGguUEkpOworICAgIH0KKyAg
ICBpZiAoTWF0aC5hYnMocmVzdWx0KSA+IDFlLTgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0
eS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAg
QEAKK3ZhciBvID0ge2Y6e2Y6e2Y6e2Y6e2Y6e2Y6e2Y6NDJ9fX19fX19OworKGZ1bmN0aW9uKCkg
eworICAgIHZhciBuID0gMTAwMDAwMDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG8uZi5mLmYuZi5mLmYuZjsK
KyAgICAKKyAgICBpZiAocmVzdWx0ICE9IG4gKiA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234427</attachid>
            <date>2014-07-04 18:42:07 -0700</date>
            <delta_ts>2014-07-04 19:40:34 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>134483</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNSBA
QAorMjAxNC0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEluZmVyIGltbXV0YWJsZSBvYmplY3QgcHJvcGVydGllcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NTY3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgd2F5IG9mIGluZmVycmluZyBpbW11dGFibGUgb2JqZWN0IHByb3BlcnRpZXMuIEEg
cHJvcGVydHkgaXMgc2FpZCB0bworICAgICAgICBiZSBpbW11dGFibGUgaWYgYWZ0ZXIgaXRzIGNy
ZWF0aW9uIChpLmUuIHRoZSB0cmFuc2l0aW9uIHRoYXQgY3JlYXRlcyBpdCksIHdlIG5ldmVyCisg
ICAgICAgIG92ZXJ3cml0ZSBpdCAoaS5lLiByZXBsYWNlIGl0KSBvciBkZWxldGUgaXQuIEltbXV0
YWJpbGl0eSBpcyBhIHByb3BlcnR5IG9mIGFuICJvd24KKyAgICAgICAgcHJvcGVydHkiIC0gc28g
aWYgd2Ugc2F5IHRoYXQgImYiIGlzIGltbXV0YWJsZSBhdCAibyIgdGhlbiB3ZSBhcmUgaW1wbHlp
bmcgdGhhdCAibyIgaGFzICJmIgorICAgICAgICBkaXJlY3RseSBhbmQgbm90IG9uIGEgcHJvdG90
eXBlLiBJbW11dGFiaWxpdHkgY2FuIGJlIHVzZWQgdG8gY29uc3RhbnQtZm9sZCBhY2Nlc3NlcyB0
bworICAgICAgICBvYmplY3RzIGF0IERGRy10aW1lLiBUaGUgREZHIG5lZWRzIHRvIHByb3ZlIHRo
ZSBmb2xsb3dpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgYWNjZXNzOgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgYmFzZSBvZiB0aGUgYWNjZXNzIG11c3QgYmUgYSBjb25zdGFudCBvYmplY3QgcG9p
bnRlci4KKyAgICAgICAgCisgICAgICAgIC0gQSBjaGVjayAob3Igd2F0Y2hwb2ludCkgbXVzdCBo
YXZlIGJlZW4gZW1pdHRlZCBwcm92aW5nIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBzdHJ1Y3R1cmUK
KyAgICAgICAgICB0aGF0IGFsbG93cyBsb2FkaW5nIHRoZSBwcm9wZXJ0eSBpbiBxdWVzdGlvbi4K
KyAgICAgICAgCisgICAgICAgIC0gVGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0IG9mIHRo
ZSBwcm9wZXJ0eSBpbiB0aGUgc3RydWN0dXJlKHMpIHRoYXQgd2UndmUgcHJvdmVuIHRoZQorICAg
ICAgICAgIG9iamVjdCB0byBoYXZlIGlzIChhcmUpIHN0aWxsIHZhbGlkIGFuZCB3ZSBhZGQgYSB3
YXRjaHBvaW50IHRvIGl0ICh0aGVtKSBsYXppbHkuCisgICAgICAgIAorICAgICAgICBUaGUgcmVw
bGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQgaXMgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSB0aGF0IGFu
eSBhY2Nlc3MgdG8gdGhlIHByb3BlcnR5IGlzCisgICAgICAgIGNhY2hlZC4gQSBwdXQgY2FjaGUg
d2lsbCBjcmVhdGUsIGFuZCBpbW1lZGlhdGVseSBpbnZhbGlkYXRlLCB0aGUgd2F0Y2hwb2ludCBz
ZXQuIEEgZ2V0IGNhY2hlCisgICAgICAgIHdpbGwgY3JlYXRlIHRoZSB3YXRjaHBvaW50IHNldCBh
bmQgbWFrZSBpdCBzdGFydCB3YXRjaGluZy4gQW55IG5vbi1jYWNoZWQgcHV0IGFjY2VzcyB3aWxs
CisgICAgICAgIGludmFsaWRhdGUgdGhlIHdhdGNocG9pbnQgc2V0IGlmIG9uZSBoYWQgYmVlbiBj
cmVhdGVkLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhcHByb2FjaCBhdm9pZHMgY3JlYXRpbmcg
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXRzIHVudGlsIHRoZXkgYXJlIGtub3duIHRvIGJlCisg
ICAgICAgIG5lY2Vzc2FyeS4gVGhlIG51bWJlciBvZiBzdWNoIHNldHMgYXQgYW55IHRpbWUgaXMg
YXN5bXB0b3RpY2FsbHkgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mCisgICAgICAgIGlubGluZSBj
YWNoZXMuIFNvLCBmb3IgZXhhbXBsZSwgZGljdGlvbmFyeSBwcm9wZXJ0aWVzIHdpbGwgdHlwaWNh
bGx5IG5vdCBoYXZlIHRoZXNlCisgICAgICAgIHdhdGNocG9pbnQgc2V0cy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgaW5mZXJlbmNlIGNvbXBsZXRlbHkgc3Vic3VtZXMgdGhlIHByZXZpb3VzbHkg
InNwZWNpZmljVmFsdWUiIGNvbnN0YW50IGluZmVyZW5jZS4gVGhhdAorICAgICAgICBhcHByb2Fj
aCByZXF1aXJlZCBjcmVhdGluZyBuZXcgc3RydWN0dXJlcywgd2hpY2ggdGhpcyBvbmUgZG9lcyBu
b3QuIEl0IGFsc28gZGlkbid0IHdvcmsgZm9yCisgICAgICAgIGFueSBwcm9wZXJ0eSB2YWx1ZXMg
dGhhdCB3ZXJlbid0IGVhZ2VybHkgcmVjb2duaXplZCBhcyBjYW5kaWRhdGVzIGZvciBjb25zdGFu
dCBpbmZlcmVuY2UuCisgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMg
dGhlIG9sZCBzcGVjaWZpY1ZhbHVlIGNvbnN0YW50IGluZmVyZW5jZS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgYSBzcGVlZC11cCBvbiBldmVyeXRoaW5nLiBkYXRlLWZvcm1hdC14cGFyYiBh
bmQgYm90aCBTdW5TcGlkZXIvcmF5dHJhY2UgYW5kCisgICAgICAgIFY4L3JheXRyYWNlIHNlZW0g
dG8gYmUgdGhlIGJpZ2dlc3Qgd2lubmVycyBhbW9uZyB0aGUgbWFjcm9iZW5jaG1hcmtzOyB0aGV5
IHNlZSA+NSUKKyAgICAgICAgc3BlZWQtdXBzLiBNYW55IG9mIG91ciBtaWNyb2JlbmNobWFya3Mg
c2VlIHZlcnkgbGFyZ2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCBldmVuIDgwJSBpbgorICAg
ICAgICBvbmUgY2FzZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAg
KiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZh
cmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0
VG9NZXJnZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRC
eUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50
OjpzcGVjaWZpY1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICog
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFu
dDo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnNldHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6
c3BlY2lmaWNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5j
cHA6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KToKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludFNldDo6ZmlyZUFsbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvV2F0Y2hwb2ludC5oOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpmaXJlQWxsKToK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
OjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjppc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUp
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0
QWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICog
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlcGF0
Y2hCeUlkU2VsZkFjY2Vzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAg
ICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5
SUQpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpwdXRUb1Njb3BlQ29tbW9uKToKKyAgICAg
ICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93
UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbCk6CisgICAgICAgICogcnVudGltZS9JbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyk6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdE5vbklu
ZGV4QWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6Z2V0
Q2FsbGFibGVPYmplY3RTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dFByb3BlcnR5U3BlY2lmaWNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
bmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OmdldENh
bGxhYmxlT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgor
ICAgICAgICAoSlNDOjphYnN0cmFjdEFjY2Vzcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVudHJ5OjpQcm9wZXJ0
eU1hcEVudHJ5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y29weSk6CisgICAgICAg
ICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJs
ZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUltcGwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphbGxvY2F0ZVJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQ
cm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmdldENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50
ZXJjZXB0U3RvcmVUbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRp
ZXNJZk5lY2Vzc2FyeUZvckVudGlyZUNoYWluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmRpc2FibGVTcGVjaWZpY0Z1bmN0aW9uVHJhY2tpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmdldENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkUmVw
bGFjZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpkZXN0cm95KToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2lu
ZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChmb28uTWF0
aC5zaW4pOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvaW5mZXItY29u
c3RhbnQtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10
aGVuLWludmFsaWRhdGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6
CisgICAgICAgICogdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAg
ICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvaml0LXB1dC10by1zY29wZS1nbG9i
YWwtY2FjaGUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6
CisgICAgICAgIChiYXIpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBs
YWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbGxp
bnQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanM6IEFk
ZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12YWx1ZS13YXRjaHBvaW50
LWludmFsaWRhdGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisK
IDIwMTQtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
ZnRsb3B0XSBBbGxvY2F0ZSBhIG5ldyBHZXR0ZXJTZXR0ZXIgaWYgd2UgY2hhbmdlIHRoZSB2YWx1
ZSBvZiBhbnkgb2YgaXRzIGVudHJpZXMgb3RoZXIgdGhhbiB3aGVuIHRoZXkgd2VyZSBwcmV2aW91
c2x5IG51bGwsIHNvIHRoYXQgaWYgd2UgY29uc3RhbnQtaW5mZXIgYW4gYWNjZXNzb3Igc2xvdCB0
aGVuIHdlIGltbWVkaWF0ZWx5IGdldCB0aGUgZnVuY3Rpb24gY29uc3RhbnQgZm9yIGZyZWUKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0
YXR1cy5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNiBA
QCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxleEdl
dFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAgCi0g
ICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAgICAg
ICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAog
ICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291
bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0
dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9i
amVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwg
dWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYgKGN1
cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1
ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQubV9h
dHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFk
U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+
dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAg
aWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1ZSA9
IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29m
ZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVz
KE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVk
OwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZt
KCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAgICAg
ICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhO
b0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoU2lt
cGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNl
dCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwgZmFs
c2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsKICNl
bHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwogI2Vu
ZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0gICAg
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFu
dDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9y
ZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVp
ZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFyaWFu
dC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0
YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAgICB2
YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50Lm1f
c3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wgZGlk
QXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAg
IGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWlu
KCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4
R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBAIC0y
OTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAg
ICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1
aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdzIHBy
b2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2ZW4g
dGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAgICAg
IGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0
YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0cmVu
Z2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1cmUs
IG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNw
ZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6
IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxs
cHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29mZnNl
dChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1
cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1ZSk7
CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYgQEAg
R2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0dXJl
U2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVy
Lm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5h
dGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsKICAg
ICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlu
a1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzUsNiArNzIsMTYgQEAgR2V0
QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJldHVybiAqdGhpczsK
IH0KIAorU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNl
dCgpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29u
c3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0
dXJlKTsKKyAgICByZXR1cm4gc3RydWN0dXJlOworfQorCiBib29sIEdldEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1f
YWx0ZXJuYXRlQmFzZSAhPSBvdGhlci5tX2FsdGVybmF0ZUJhc2UpCkBAIC04Niw5ICs5Myw2IEBA
IGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBpZiAoIWFyZUNv
bXBhdGlibGUobV9jb25zdGFudENoZWNrcywgb3RoZXIubV9jb25zdGFudENoZWNrcykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAobV9zcGVjaWZpY1ZhbHVlICE9IG90aGVy
Lm1fc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgbV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOwot
CiAgICAgbWVyZ2VJbnRvKG90aGVyLm1fY29uc3RhbnRDaGVja3MsIG1fY29uc3RhbnRDaGVja3Mp
OwogICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAK
QEAgLTExMiw4ICsxMTYsNiBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50CiAgICAgICAgICJbIiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29u
dGV4dCksICJdIik7CiAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAgICAgb3V0LnByaW50
KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2Up
LCBjb250ZXh0KSk7Ci0gICAgaWYgKHNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgb3V0LnByaW50
KCIsIHNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0
KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAgICBpZiAobV9j
YWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlu
a1N0YXR1cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDcg
QEAgc3RydWN0IER1bXBDb250ZXh0OwogY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgog
ICAgIEdldEJ5SWRWYXJpYW50KAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCA9IFN0cnVjdHVyZVNldCgpLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBp
bnZhbGlkT2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCksCisgICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCiAgICAgICAgIGNvbnN0IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAgIApAQCAtNTgs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJl
dHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNrczsg
fQogICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRlcm5h
dGVCYXNlOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9z
cGVjaWZpY1ZhbHVlOyB9CisgICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQog
ICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAKQEAgLTczLDcgKzcyLDYgQEAgcHJpdmF0ZToKICAg
ICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwogICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7
Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVz
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDggKzI1NCw4
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxF
eGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVz
LnNwZWNpZmljVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0
dXMuY2hhaW4oKSwgc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRT
dGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlu
a1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpAQCAtMzM0LDE5ICszMzQsMjQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CiAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAg
IEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNW
YWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29y
KQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwogCiAg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAg
ICAgIGlmIChzcGVjaWZpY1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGUg
UHV0QnlJZCBzbG93IHBhdGggdG8gdmVyaWZ5IHRoYXQgd2UncmUgc3RvcmluZyB0aGUgcmlnaHQg
dmFsdWUgaW50bwotICAgICAgICAgICAgICAgIC8vIHRoZSBzcGVjaWFsaXplZCBzbG90LgorICAg
ICAgICAgICAgCisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0
dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAg
ICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJl
LCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgorICAgICAgICAgICAgICAgIC8vIFRo
YXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBz
b21ldGhpbmcgZmlzaHkgaXMKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2Ug
Y2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJy
ZW50CisgICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQg
dG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KKyAgICAgICAgICAg
ICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgog
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTM4NCwyMiArMzg5LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkg
b3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0
aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgLy8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFs
bG93cyB1cyB0byBndWFyZCBhZ2FpbnN0IGEgdHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAg
ICAgICAgLy8gdmFsdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgc3Rvcmlu
ZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IHRoaXMgd291bGQgb25seSBiZSBhIHBy
b2JsZW0gaWYKLSAgICAgICAgLy8gICB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBh
IHNwZWNpZmljIHZhbHVlIGFscmVhZHksIHNpbmNlIGlmIGl0IGRpZG4ndCwKLSAgICAgICAgLy8g
ICB0aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVj
aWZpYyB2YWx1ZS4gSWYgaXQgZGlkCi0gICAgICAgIC8vICAgaGF2ZSBhIHNwZWNpZmljIHZhbHVl
LCB0aGVuIHdlJ2xsIGtub3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAgICAgICAg
Ly8gICBzcGVjaWZpY1ZhbHVlIHdpbGwgdGVsbCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
LSBJZiB3ZSdyZSBub3Qgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFn
YWluLCB0aGlzIHdvdWxkIG9ubHkgYmUgYQotICAgICAgICAvLyAgIHByb2JsZW0gaWYgdGhlIGV4
aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hpY2ggd2UgY2hl
Y2sgZm9yCi0gICAgICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4K
LSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAw
LCAwLCBvZmZzZXQpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3Ry
dWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3Vy
cyBpbiBiaXphcnJlIGNhc2VzIG9ubHkuIFNlZSBhYm92ZS4KLSAgICAgICAgQVNTRVJUKCF0cmFu
c2l0aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDYgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRv
cgogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25z
dGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNl
ID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1f
c3BlY2lmaWNWYWx1ZTsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAt
NzgsNyArNzcsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiB9
CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVj
aWZpY1ZhbHVlLAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCiAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAgICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwpAQCAtODksNyArODgsNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6c2V0dGVyKAogICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7CiAgICAgfQogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
LSAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1ZTsKICAgICByZXN1bHQu
bV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTEzNCw2ICsxMzIsMTggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFr
ZXNDYWxscygpIGNvbnN0CiAgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKK1N0cnVj
dHVyZVNldCBQdXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgIAorICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOworICAgIHJldHVybiBzdHJ1Y3R1cmU7Cit9CisK
IGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKIHsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCkBAIC0yMjks
OCArMjM5LDYgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAg
ICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4dCksICJd
Iik7CiAgICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgICAgICBvdXQucHJpbnQo
IiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSks
IGNvbnRleHQpKTsKLSAgICAgICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgICAgIG91
dC5wcmludCgiLCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KG1fc3BlY2lmaWNWYWx1ZSwg
Y29udGV4dCkpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwog
ICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAg
ICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKICAgICAKICAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUsCisg
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCiAgICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKICAgICAKICAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KQEAgLTExNywxMSArMTE3LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBT
ZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOwotICAgIH0KKyAgICBTdHJ1
Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwogICAgIAogICAgIENhbGxMaW5rU3RhdHVz
KiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAtMTQyLDcgKzEzOCw2IEBAIHByaXZh
dGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRl
QmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9p
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsNiBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmFkZChXYXRjaHBvaW50KiB3YXRjCiAgICAgbV9zdGF0ZSA9IElz
V2F0Y2hlZDsKIH0KIAotdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsKGNvbnN0IGNoYXIqIHJl
YXNvbikKLXsKLSAgICBmaXJlQWxsKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Ci19Ci0KIHZv
aWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ewogICAgIEFTU0VSVChzdGF0ZSgpID09IElzV2F0Y2hlZCk7CkBAIC04NSw2ICs4MCwxMSBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KGNvbnN0IEZpCiAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKIH0KIAordm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBj
aGFyKiByZWFzb24pCit7CisgICAgZmlyZUFsbFNsb3coU3RyaW5nRmlyZURldGFpbChyZWFzb24p
KTsKK30KKwogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmly
ZURldGFpbCYgZGV0YWlsKQogewogICAgIHdoaWxlICghbV9zZXQuaXNFbXB0eSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAx
NzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMTIgKzEzMSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBmaXJlQWxsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0
Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KGRldGFpbCk7
CiAgICAgfQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbChjb25zdCBj
aGFyKiByZWFzb24pOworICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCisgICAg
eworICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZmlyZUFsbFNsb3cocmVhc29uKTsKKyAgICB9CiAgICAgCiAgICAg
dm9pZCB0b3VjaChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewpAQCAtMTU3LDYgKzE2
Miw3IEBAIHB1YmxpYzoKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJl
dHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWlsJik7IC8vIENhbGwgb25seSBpZiB5b3UndmUg
Y2hlY2tlZCBpc1dhdGNoZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJlQWxsU2xv
dyhjb25zdCBjaGFyKiByZWFzb24pOyAvLyBEaXR0by4KICAgICAKIHByaXZhdGU6CiAgICAgdm9p
ZCBmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmlyZURldGFpbCYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5n
T2JqZWN0LmgiCkBAIC0xMzg3LDE0ICsxMzg4LDE3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBzdWJ0
bGU/CiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5hbHRlcm5h
dGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2
YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25z
dGFudFJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSB0aGlzUmVzdWx0OwogICAgICAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbaV0uc3Bl
Y2lmaWNWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBo
LmZyZWV6ZShjb25zdGFudFJlc3VsdCksCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKHRoaXNSZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1NjksMTEgKzE1NzMsMjUg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBk
YXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV07CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBkYXRhLm9mZnNldCk7CisgICAgICAg
IGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZy
ZWV6ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBk
YXRhLm9mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQgJiYganNEeW5hbWljQ2FzdDxHZXR0ZXJT
ZXR0ZXIqPihyZXN1bHQpKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFw
aC5mcmVlemUocmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLmdldHRl
clNldHRlclN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE2MDIs
MTQgKzE2MjAsMjMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICBpZiAoIXZhcmlh
bnQuc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUg
YmFzZUZvckxvYWQ7CisgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCisg
ICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2UubV92YWx1
ZTsKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQorICAgICAgICAgICAgICAg
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAg
ICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICByZXN1bHQu
bWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNS
ZXN1bHQuc2V0KAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1f
Z3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAq
bV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNS
ZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVj
dG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlKTsKICAg
ICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7
CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IGNvbnN0IFN0cnVjdHVyZVNldCYsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSBvcCA9IEdldEJ5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5
SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlk
U3RhdHVzJik7CkBAIC0xNjc2LDggKzE2NzYsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUq
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Tm9kZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgTm9kZVR5cGUgb3ApCiB7CisgICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVy
dHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgeworICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybiB3ZWFrSlND
b25zdGFudChjb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMTc3MiwyMSArMTc3OSwxNCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQg
dG8KICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lk
IGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCiAgICAgLy8gYWxsIG9mIHRoZSBz
cGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVu
IGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFz
ZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UsIG9yIGlmIHRoZQotICAgIC8v
IGFjY2VzcyB3YXMgY29tcGlsZWQgdG8gYSBXZWFrSlNDb25zdGFudCBzcGVjaWZpYyB2YWx1ZSwg
aW4gd2hpY2ggY2FzZSB3ZSBtaWdodCBub3QKLSAgICAvLyBoYXZlIGFueSBleHBsaWNpdCB1c2Ug
b2YgdGhlIGJhc2UgYXQgYWxsLgotICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSB8fCBv
cmlnaW5hbEJhc2UgIT0gYmFzZSkKKyAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUg
YmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCisgICAgaWYgKG9yaWdp
bmFsQmFzZSAhPSBiYXNlKQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFz
ZSk7CiAgICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWU7Ci0gICAgaWYgKHZhcmlhbnQuc3BlY2lm
aWNWYWx1ZSgpKQotICAgICAgICBsb2FkZWRWYWx1ZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQu
c3BlY2lmaWNWYWx1ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5k
bGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNw
ZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAotICAgICAgICAgICAgYmFzZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0
dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwotICAgIH0KKyAg
ICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICB2YXJpYW50
LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDogcHJlZGljdGlvbiwKKyAgICAgICAg
YmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQu
b2Zmc2V0KCksCisgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwogICAgIAogICAgIGlmICghdmFyaWFudC5jYWxs
TGlua1N0YXR1cygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25P
cGVyYW5kKSwgbG9hZGVkVmFsdWUpOwpAQCAtMTk0OSwxNCArMTk0OSw5IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSkKICAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0
ZUJhc2UoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKLSAgICAgICAg
aWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSB3
ZWFrSlNDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAg
ICAgICBTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNl
dCgpLAotICAgICAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKLSAgICAgICAg
fQorICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAg
ICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICBHZXRHZXR0ZXJTZXR0
ZXJCeU9mZnNldCk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBo
KEdldFNldHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI5NTgsMTAgKzI5NTMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0
dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgc3BlY2lmaWNW
YWx1ZSA9IHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5hc0Nl
bGwoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBzdGF0dXNb
MF0uc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgpAQCAtMjk2OSwxNiArMjk2MSwxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAg
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9p
bnRTZXQoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPQorICAgICAg
ICAgICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgIHdh
dGNocG9pbnRTZXQgPyB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFpbmZlcnJlZFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVy
YW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKLSAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNp
ZmljVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdl
YWtKU0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3LDggKzQwNywxMyBAQCBw
cml2YXRlOgogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VW
YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29u
c3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKKyAg
ICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKKyAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlVmFsdWUubV92
YWx1ZTsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50
UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9m
ZnNldCgpKSkgeworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBt
X2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg2LDIyICsxMjg2LDI0IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBib29sIGlzU3RyaW5n
UHJvdG90eXBlTWV0aG9kU2FuZShTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwg
U3RyaW5nSW1wbCogdWlkKQorICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKAor
ICAgICAgICBKU09iamVjdCogc3RyaW5nUHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlc1VudXNlZDsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSgKLSAgICAgICAgICAgIHZtKCksIHVpZCwgYXR0cmlidXRlc1VudXNlZCwgc3Bl
Y2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAg
ICBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSgpLCB1aWQsIGF0
dHJpYnV0ZXNVbnVzZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghc3BlY2lmaWNW
YWx1ZSkKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eSgKKyAgICAgICAgICAgIHN0cmluZ1Byb3RvdHlwZSwgc3RyaW5nUHJvdG90eXBlU3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlLT5pbmhlcml0cyhKU0Z1
bmN0aW9uOjppbmZvKCkpKQorICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKGZ1
bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpY0ZvcihDb2RlRm9yQ2FsbCkgIT0gU3RyaW5n
UHJvdG90eXBlVmFsdWVPZkludHJpbnNpYykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCkBAIC0xMzMwLDkgKzEzMzIsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyAodGhhdCB3
b3VsZCBjYWxsIHRvU3RyaW5nKCkpLiBXZSBkb24ndCB3YW50IHRoZSBERkcgdG8gaGF2ZSB0byBk
aXN0aW5ndWlzaAogICAgICAgICAvLyBiZXR3ZWVuIHRoZSB0d28sIGp1c3QgYmVjYXVzZSB0aGF0
IHNlZW1zIGxpa2UgaXQgd291bGQgZ2V0IGNvbmZ1c2luZy4gU28gd2UKICAgICAgICAgLy8ganVz
dCByZXF1aXJlIGJvdGggbWV0aG9kcyB0byBiZSBzYW5lLgotICAgICAgICBpZiAoIWlzU3RyaW5n
UHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVy
dHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBl
TWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVPYmplY3QsIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVy
ZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmlu
Z1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBsKCkp
KQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5
cGVPYmplY3QsIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50
b1N0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSw2ICs3ODksNjggQEAgdW5zaWduZWQgR3Jh
cGg6OnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJl
Z2lzdGVyQ291bnQoKSwgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAorSlNW
YWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICBKU1ZhbHVlIGJhc2UsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7
CisgICAgaWYgKCFiYXNlIHx8ICFiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZVNldC5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVTZXRbaV07CisgICAgICAgIFdh
dGNocG9pbnRTZXQqIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQob2Zmc2V0KTsKKyAgICAgICAgaWYgKCFzZXQgfHwgIXNldC0+aXNTdGlsbFZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgICAgICAKKyAgICAgICAgd2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkoc2V0KTsKKyAgICB9CisgICAgCisgICAgLy8gV2hhdCBmb2xs
b3dzIG1heSByZXF1aXJlIHNvbWUgZXh0cmEgdGhvdWdodC4gV2UgbmVlZCB0aGlzIGxvYWQgdG8g
bG9hZCBhIHZhbGlkIEpTVmFsdWUuIElmCisgICAgLy8gb3VyIHByb2ZpbGluZyBtYWtlcyBzZW5z
ZSBhbmQgd2UncmUgc3RpbGwgb24gdHJhY2sgdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHdvbid0IGJl
CisgICAgLy8gaW52YWxpZGF0ZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIHdvcnJ5IGFib3V0
LiBXZSBkbywgaG93ZXZlciwgaGF2ZSB0byB3b3JyeSBhYm91dAorICAgIC8vIGxvYWRpbmcgLSBh
bmQgdGhlbiB1c2luZyAtIGFuIGludmFsaWQgSlNWYWx1ZSBpbiB0aGUgY2FzZSB0aGF0IHVuYmVr
bm93bnN0IHRvIHVzIG91ciBjb2RlCisgICAgLy8gaXMgZG9vbWVkLgorICAgIC8vCisgICAgLy8g
T25lIGFyZ3VtZW50IGluIGZhdm9yIG9mIHRoaXMgY29kZSBpcyB0aGF0IGl0IHNob3VsZCBkZWZp
bml0ZWx5IHdvcmsgYmVjYXVzZSB0aGUgYnV0dGVyZmx5CisgICAgLy8gaXMgYWx3YXlzIHNldCBi
ZWZvcmUgdGhlIHN0cnVjdHVyZS4gSG93ZXZlciwgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBm
ZW5jZSBiZXR3ZWVuIHRob3NlCisgICAgLy8gc3RvcmVzLiBJdCdzIG5vdCBjbGVhciBpZiB0aGlz
IG1hdHRlcnMsIGhvd2V2ZXIuIFdlIGRvbid0IGV2ZXIgc2hyaW5rIHRoZSBwcm9wZXJ0eSBzdG9y
YWdlLgorICAgIC8vIFNvLCBmb3IgdGhpcyB0byBmYWlsLCB5b3UnZCBuZWVkIGFuIGFjY2VzcyBv
biBhIGNvbnN0YW50IG9iamVjdCBwb2ludGVyIHN1Y2ggdGhhdCB0aGUgaW5saW5lCisgICAgLy8g
Y2FjaGVzIHRvbGQgdXMgdGhhdCB0aGUgb2JqZWN0IGhhZCBhIHN0cnVjdHVyZSB0aGF0IGl0IGRp
ZCBub3QgKnlldCogaGF2ZSwgYW5kIHRoZW4gbGF0ZXIsCisgICAgLy8gdGhlIG9iamVjdCB0cmFu
c2l0aW9uZWQgdG8gdGhhdCBzdHJ1Y3R1cmUgdGhhdCB0aGUgaW5saW5lIGNhY2hlcyBoYWQgYWxy
YWVkeSBzZWVuLiBBbmQgdGhlbgorICAgIC8vIHRoZSBwcm9jZXNzb3IgcmVvcmRlcmVkIHRoZSBz
dG9yZXMuIFNvLCB0aGlzIGlzIHdvcnRoIHJldmlzaXRpbmcuIEZvciBub3csIHRob3VnaCwgd2Ug
anVzdAorICAgIC8vIGRvIHRoZSBtaW5pbWFsIHRoaW5nOiBkZWZlbmQgYWdhaW5zdCB0aGUgc3Ry
dWN0dXJlIHJpZ2h0IG5vdyBiZWluZyBpbmNvbXBhdGlibGUgd2l0aCB0aGUKKyAgICAvLyBnZXRE
aXJlY3Qgd2UncmUgdHJ5aW5nIHRvIGRvLiBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0
byBkZXRlcm1pbmUgaWYgdGhlIHN0cnVjdHVyZQorICAgIC8vIGJlbG9uZ3MgdG8gdGhlIHByb3Zl
biBzZXQuCisgICAgCisgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuY29udGFpbnMob2JqZWN0LT5zdHJ1
Y3R1cmUoKSkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgCisgICAgcmV0dXJuIG9i
amVjdC0+Z2V0RGlyZWN0KG9mZnNldCk7Cit9CisKK0pTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2Us
IFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpOworfQorCitKU1ZhbHVlIEdyYXBoOjp0
cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAg
aWYgKHN0cnVjdHVyZS5pc1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOworICAgIAorICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3Bl
cnR5KGJhc2UsIHN0cnVjdHVyZS5zZXQoKSwgb2Zmc2V0KTsKK30KKworSlNWYWx1ZSBHcmFwaDo6
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCit7CisgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFz
ZS5tX3ZhbHVlLCBiYXNlLm1fc3RydWN0dXJlLCBvZmZzZXQpOworfQorCiBKU0FjdGl2YXRpb24q
IEdyYXBoOjp0cnlHZXRBY3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUt
PmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsKQEAgLTkwMCw3ICs5NjIsNiBA
QCB2b2lkIEdyYXBoOjp2aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBj
YXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAg
ICAgICAgICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdl
dEJ5T2Zmc2V0RGF0YSgpLnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICB2aXNpdG9y
LmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5z
dHJ1Y3R1cmVTZXQoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0
LnNpemUoKTsgai0tOykKICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5i
YXJyaWVyZWRSZWFkT25seVBvaW50ZXIoc2V0W2pdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtNjc5LDYgKzY3OSwxMSBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwogICAgIHVu
c2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKICAgICAK
KyAgICBKU1ZhbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBjb25zdCBT
dHJ1Y3R1cmVTZXQmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFu
dFByb3BlcnR5KEpTVmFsdWUgYmFzZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAg
IEpTVmFsdWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSlNWYWx1ZSB0cnlHZXRD
b25zdGFudFByb3BlcnR5KGNvbnN0IEFic3RyYWN0VmFsdWUmLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgCiAgICAgSlNBY3RpdmF0aW9uKiB0cnlHZXRBY3RpdmF0aW9uKE5vZGUqKTsKICAgICBXcml0
ZUJhcnJpZXJCYXNlPFVua25vd24+KiB0cnlHZXRSZWdpc3RlcnMoTm9kZSopOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGlu
Z1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dh
dGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw2IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFu
dCA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0cnlXYXRjaChtX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFs
dWUoKSktPnN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZh
cmlhbnQuc3RydWN0dXJlU2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3Qg
bmVlZCB0byB3YXRjaCBhbnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhh
dCB3b3VsZAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQg
aW50byBDaGVja1N0cnVjdHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlz
aW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjM3LDggKzMyMzcsMTMgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFudCA9IGRhdGEudmFy
aWFudHNbaV07CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0OwotICAgICAgICAgICAgaWYgKHZh
cmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNv
bnN0SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSk7CisgICAg
ICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0OworICAgICAgICAgICAgaWYgKHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3RhbnRSZXN1bHQgPSBtX2dy
YXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQu
YWx0ZXJuYXRlQmFzZSgpLCB2YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29uc3RhbnRSZXN1bHQpCisgICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoY29u
c3RhbnRSZXN1bHQpKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIExWYWx1
ZSBwcm9wZXJ0eUJhc2U7CiAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFz
ZSgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4LDkgKzE2OTgsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIC8vIENvdmVycyBpbXBsaWNpdCBn
bG9iYWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwg
d2UgZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgogICAgIGlm
IChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gc2NvcGUgJiYg
c2NvcGUtPnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgewog
ICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5IHx8IG1vZGVB
bmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsK
LSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKLSAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKHZtKSk7Ci0gICAgICAgICAg
ICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29wZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7CisgICAgICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAg
ICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTcz
MCwxNCArMTczNCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUK
ICAgICBpZiAoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ly8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwg
dGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBj
b21waWxlIHRpbWUuCi0gICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0
eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzKSB7Ci0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC5iYXNl
KCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2Fj
aGVhYmxlKCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52
bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOwot
ICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAg
ICAgfQotICAgIH0KKyAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2Jh
bChleGVjLCBjb2RlQmxvY2ssIHBjLCBzY29wZSwgbW9kZUFuZFR5cGUsIHNsb3QpOwogfQogCiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkRXhjZXB0aW9uVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVwYXRjaC5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDEyICs5NiwxNCBAQCBzdGF0
aWMgdm9pZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGViCiAgICAgcmVwYXRjaENhbGwocmVw
YXRjaEJ1ZmZlciwgY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCi1zdGF0aWMgdm9pZCBy
ZXBhdGNoQnlJZFNlbGZBY2Nlc3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgRnVu
Y3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sIGJvb2wgY29tcGFjdCkKK3N0YXRpYyB2b2lkIHJl
cGF0Y2hCeUlkU2VsZkFjY2VzcygKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25z
dCBGdW5jdGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKKyAgICBib29sIGNvbXBhY3QpCiB7CiAg
ICAgaWYgKHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hw
b2ludHMoKSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHko
cHJvcGVydHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotCisgICAg
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKICAgICAvLyBP
bmx5IG9wdGltaXplIG9uY2UhCkBAIC0zNDMsOCArMzQ1LDExIEBAIHN0YXRpYyB2b2lkIGdlbmVy
YXRlQnlJZFN0dWIoCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CiAgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKICAg
ICB9CiAgICAgCisgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVw
bGFjZW1lbnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQ
UjsKICAgICBpZiAoY2hhaW4pIHsKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQUik7CkBAIC02OTMsOSArNjk4
LDEwIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBpZiAo
c2xvdC5zbG90QmFzZSgpID09IGJhc2VWYWx1ZQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxl
VmFsdWUoKQogICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFk
ZHJlc3NPZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVk
T2Zmc2V0KCkpKSkgewotICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29k
ZUJsb2NrLCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zm
c2V0KCksIG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwotICAgICAgICAgICAgc3R1
YkluZm8uaW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3RydWN0dXJlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBzdHJ1Y3R1cmUt
PnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zm
c2V0KCkpOworICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0
dWJJbmZvLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3Bl
cmF0aW9uR2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRC
eUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsK
QEAgLTExNzgsNiArMTE4NCw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3Rh
dGUqIGUKICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09m
ZnNldChvZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2Fj
aGVQcm9wZXJ0eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAg
IHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVy
ZSwgaWRlbnQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0
QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CiAgICAgICAgIHN0dWJJbmZvLmlu
aXRQdXRCeUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVj
dHVyZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI5NSw2ICsxMzAyLDggQEAgc3RhdGlj
IGJvb2wgdHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAgaWYgKGxpc3Qt
PmlzRnVsbCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gV2lsbCBnZXQgaGVy
ZSBkdWUgdG8gcmVjdXJzaW9uLgogICAgICAgICAgICAgCisgICAgICAgICAgICBzdHJ1Y3R1cmUt
PmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0
aW5nIHRoZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCiAgICAgICAg
ICAgICBlbWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVl
LCBwcm9wZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzA3
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTMsNiArNjkzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENh
Y2hlUHJvcGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAg
ICAgICAgICAgcGNbNF0udS5zdHJ1Y3R1cmUuc2V0KAogICAgICAgICAgICAgICAgICAgICB2bSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAg
ICBpZiAoaXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKQEAgLTE0MjYsOSAr
MTQyNywxMyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fCiAgICAg
aWYgKHNsb3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBzY29wZSAm
JiBzY29wZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgewog
ICAgICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5IHx8IG1vZGVB
bmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsK
ICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0g
ICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
Ci0gICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHBj
WzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHNjb3BlLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2Nr
KTsKKyAgICAgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBw
Y1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
dm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNDQ4LDE1
ICsxNDUzLDggQEAgc3RhdGljIEpTT2JqZWN0KiBwdXRUb1Njb3BlQ29tbW9uKEV4ZWNTdAogCiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkp
OwogICAgIHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1
ZSwgc2xvdCk7Ci0KLSAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBk
b24ndCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0
byBjYWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KLSAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgp
ID09IEdsb2JhbFByb3BlcnR5IHx8IG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVQ
dXQoKSAmJiBzbG90LmJhc2UoKSA9PSBzY29wZSAmJiBzY29wZS0+c3RydWN0dXJlKCktPnByb3Bl
cnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1
Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3Bl
LT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hl
ZE9mZnNldCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIAorICAgIENvbW1vblNsb3dQYXRoczo6
dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVCbG9jaywgcGMsIHNjb3BlLCBtb2Rl
QW5kVHlwZSwgc2xvdCk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAx
NzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMu
aAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMzMgQEAgaW5saW5lIGJvb2wgb3BJbihFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdQogICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVj
LCBwcm9wZXJ0eSk7CiB9CiAKK2lubGluZSB2b2lkIHRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbCgK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiog
cGMsIEpTT2JqZWN0KiBzY29wZSwKKyAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUs
IFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFs
cy4gU2luY2UgdGhleSBkb24ndCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRp
ZG4ndCBrbm93IGhvdyB0byBjYWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KKyAgICAKKyAgICBp
ZiAobW9kZUFuZFR5cGUudHlwZSgpICE9IEdsb2JhbFByb3BlcnR5ICYmIG1vZGVBbmRUeXBlLnR5
cGUoKSAhPSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKQorICAgICAgICB8fCBz
bG90LmJhc2UoKSAhPSBzY29wZQorICAgICAgICB8fCAhc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9w
ZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAoc2xvdC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAg
ICAvLyBEb24ndCBjYWNoZSBpZiB3ZSd2ZSBkb25lIGEgdHJhbnNpdGlvbi4gV2Ugd2FudCB0byBk
ZXRlY3QgdGhlIGZpcnN0IHJlcGxhY2Ugc28gdGhhdCB3ZQorICAgICAgICAvLyBjYW4gaW52YWxp
ZGF0ZSB0aGUgd2F0Y2hwb2ludC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBz
Y29wZS0+c3RydWN0dXJlKCktPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudChleGVjLT52bSgp
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGNvZGVCbG9jay0+bV9sb2NrKTsKKyAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0o
KSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgpKTsKKyAg
ICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBDb21tb25TbG93UGF0aHMKIAogY2xhc3MgRXhlY1N0YXRlOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3
LDcgQEAgYm9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNlcAogewogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewogICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHko
dm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmli
dXRlcyk7CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3Ip
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pT
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksOCArMTM5LDcgQEAgdm9pZCBKU1ZhbHVl
OjpwdXRUb1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogCiAgICAgZm9yICg7IDsgb2JqID0gYXNPYmpl
Y3QocHJvdG90eXBlKSkgewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBK
U0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9i
ai0+c3RydWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZp
Y1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUo
KS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9u
bHkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJl
dmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLnNl
dCh2bSwgdGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgRnVuY3Rpb25Qcm90b3R5
cGU6OmNyZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKSk7IC8vIFRoZSByZWFsIHBy
b3RvdHlwZSB3aWxsIGJlIHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBjcmVhdGVkLgogICAg
IG1fZnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1
Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2JvdW5k
RnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZVN0
cnVjdHVyZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1fbmFt
ZWRGdW5jdGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCB2bS5wcm9wZXJ0eU5hbWVz
LT5uYW1lLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwgMCwgbV9mdW5jdGlvbk5h
bWVPZmZzZXQpKTsKKyAgICBtX25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgbV9mdW5jdGlvblN0cnVjdHVyZS5n
ZXQoKSwgdm0ucHJvcGVydHlOYW1lcy0+bmFtZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9u
dEVudW0sIG1fZnVuY3Rpb25OYW1lT2Zmc2V0KSk7CiAgICAgbV9pbnRlcm5hbEZ1bmN0aW9uU3Ry
dWN0dXJlLnNldCh2bSwgdGhpcywgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZt
LCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2Fs
bEZ1bmN0aW9uID0gMDsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gMDsKQEAgLTQy
OSw4ICs0MjksOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAg
ICAgUHJvdG90eXBlTWFwJiBwcm90b3R5cGVNYXAgPSB2bS5wcm90b3R5cGVNYXA7CiAgICAgU3Ry
dWN0dXJlKiBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IHByb3RvdHlwZU1hcC5lbXB0eU9iamVj
dFN0cnVjdHVyZUZvclByb3RvdHlwZShtX29iamVjdFByb3RvdHlwZS5nZXQoKSwgSlNGaW5hbE9i
amVjdDo6ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dDsKLSAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+
ZG9uZSwgMCwgMCwgb2Zmc2V0KTsKLSAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwg
dm0ucHJvcGVydHlOYW1lcy0+dmFsdWUsIDAsIDAsIG9mZnNldCk7CisgICAgaXRlcmF0b3JSZXN1
bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0
b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPmRvbmUsIDAsIG9mZnNldCk7Cisg
ICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVl
LCAwLCBvZmZzZXQpOwogICAgIG1faXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlz
LCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSk7CiAKICAgICBtX2V2YWxGdW5jdGlvbi5zZXQodm0s
IHRoaXMsIEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgdm0ucHJvcGVydHlOYW1lcy0+
ZXZhbC5zdHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3
ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChw
b3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bw
b3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgs
IDIwMDksIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMiwgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA3IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTU1
LDE1ICs1NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gQXJyYXlDb252ZW50aW9ucy5oLgogc3Rh
dGljIHVuc2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwogCi1KU0NlbGwqIGdldENhbGxhYmxlT2Jq
ZWN0U2xvdyhKU0NlbGwqIGNlbGwpCi17Ci0gICAgaWYgKGNlbGwtPnR5cGUoKSA9PSBKU0Z1bmN0
aW9uVHlwZSkKLSAgICAgICAgcmV0dXJuIGNlbGw7Ci0gICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKS0+aXNTdWJDbGFzc09mKEludGVybmFsRnVuY3Rpb246OmluZm8oKSkpCi0g
ICAgICAgIHJldHVybiBjZWxsOwotICAgIHJldHVybiAwOwotfQotCiBTVEFUSUNfQVNTRVJUX0lT
X1RSSVZJQUxMWV9ERVNUUlVDVElCTEUoSlNPYmplY3QpOwogU1RBVElDX0FTU0VSVF9JU19UUklW
SUFMTFlfREVTVFJVQ1RJQkxFKEpTRmluYWxPYmplY3QpOwogCkBAIC0zNjAsNyArMzUxLDcgQEAg
dm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgICAgICAgICAgcHJv
dG90eXBlID0gb2JqLT5wcm90b3R5cGUoKTsKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNO
dWxsKCkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2
bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0
eU5hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVy
bmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxs
YWJsZU9iamVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXRE
aXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCkKICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKICAgICAgICAg
ICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVS
ZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAg
LTM3MSw4ICszNjIsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3Rh
CiAgICAgSlNPYmplY3QqIG9iajsKICAgICBmb3IgKG9iaiA9IHRoaXNPYmplY3Q7IDsgb2JqID0g
YXNPYmplY3QocHJvdG90eXBlKSkgewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAg
ICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCA9IG9iai0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0
cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAg
aWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJv
cGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7CkBAIC00MDcsNyArMzk3LDcgQEAgdm9p
ZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIH0KICAgICAKICAgICBB
U1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJj
ZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0
KTsKLSAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZt
LCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkp
ICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCisgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkgJiYg
c2xvdC5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlM
aXRlcmFsKFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgIHJldHVy
bjsKIH0KQEAgLTEyMjcsNyArMTIxNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vz
c29yKEV4ZWNTdGEKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3IoVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwotICAgIHB1dERp
cmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwg
dmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAg
cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlO
YW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qgd2lsbCBj
aGFuZ2Ugb3VyIFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgogICAgIC8v
IGdldHRlcnMgYW5kIHNldHRlcnMsIHRob3VnaCwgd2UgYWxzbyBuZWVkIHRvIGNoYW5nZSBvdXIg
U3RydWN0dXJlCkBAIC0xMjY3LDkgKzEyNTcsOCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9w
ZXJ0eShKU0NlbGwqIGNlCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGljRnVuY3Rpb25z
Rm9yRGVsZXRlKGV4ZWMpOwogCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwq
IHNwZWNpZmljVmFsdWU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoaXNWYWxp
ZE9mZnNldCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSkpKSB7CisgICAgaWYgKGlzVmFsaWRPZmZzZXQodGhp
c09iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
KSkgewogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnREZWxldGUgJiYgIXZtLmlzSW5EZWZp
bmVPd25Qcm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB0aGlz
T2JqZWN0LT5yZW1vdmVEaXJlY3Qodm0sIHByb3BlcnR5TmFtZSk7CkBAIC0xMzgzLDYgKzEzNzIs
MTAgQEAgYm9vbCBKU09iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdAogLy8gRUNNQSA4
LjYuMi42CiBKU1ZhbHVlIEpTT2JqZWN0OjpkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9i
amVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7Cisg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgd2hhdGV2ZXIgZGVmYXVsdCB2YWx1ZSBtZXRob2RzIHRoZXJl
IGFyZSBvbiBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gYXJlCisgICAgLy8gYmVpbmcgd2F0Y2hl
ZC4KKyAgICBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0
aWVzSWZOZWNlc3NhcnlGb3JFbnRpcmVDaGFpbihleGVjLT52bSgpKTsKKyAgICAKICAgICAvLyBN
dXN0IGNhbGwgdG9TdHJpbmcgZmlyc3QgZm9yIERhdGUgb2JqZWN0cy4KICAgICBpZiAoKGhpbnQg
PT0gUHJlZmVyU3RyaW5nKSB8fCAoaGludCAhPSBQcmVmZXJOdW1iZXIgJiYgb2JqZWN0LT5wcm90
b3R5cGUoKSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVQcm90b3R5cGUoKSkp
IHsKICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVj
LCBvYmplY3QsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZyk7CkBAIC0xNDQ2LDIwICsx
NDM5LDYgQEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVl
KEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3Bl
Y2lmaWNWYWx1ZSkgY29uc3QKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKHZtKS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0KLSAgICAvLyBUaGlzIGNvdWxkIGJlIGEgZnVuY3Rpb24gd2l0aGluIHRo
ZSBzdGF0aWMgdGFibGU/IC0gc2hvdWxkIHByb2JhYmx5Ci0gICAgLy8gYWxzbyBsb29rIGluIHRo
ZSBoYXNoPyAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0sIHNpbmNlCi0g
ICAgLy8gd2UndmUgY3VycmVudGx5IGFsd2F5cyBjYWxsICdnZXQnIGZpcnN0LCB3aGljaCBzaG91
bGQgaGF2ZSBwb3B1bGF0ZWQKLSAgICAvLyB0aGUgbm9ybWFsIHN0b3JhZ2UuCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBv
YmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMs
IEVudW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIHByb3BlcnR5TmFtZXMuc2V0QmFzZU9iamVj
dChvYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NiwxNSAr
NTYsNiBAQCBpbmxpbmUgSlNDZWxsKiBnZXRKU0Z1bmN0aW9uKEpTVmFsdWUgdmFsCiAgICAgcmV0
dXJuIDA7CiB9CiAKLUpTX0VYUE9SVF9QUklWQVRFIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RT
bG93KEpTQ2VsbCopOwotCi1pbmxpbmUgSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdChKU1ZhbHVl
IHZhbHVlKQotewotICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBnZXRDYWxsYWJsZU9iamVjdFNsb3codmFsdWUuYXNDZWxsKCkpOwotfQotCiBj
bGFzcyBHZXR0ZXJTZXR0ZXI7CiBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOwogY2xhc3MgSlNGdW5j
dGlvbjsKQEAgLTQ5MSw4ICs0ODIsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOwog
Ci0gICAgYm9vbCBnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBKU0NlbGwqJiBzcGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKLQogICAgIC8vIFRoaXMgZ2V0
IGZ1bmN0aW9uIG9ubHkgbG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KICAgICBKU1ZhbHVlIGdl
dERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgewpA
QCAtNTAxLDEyICs0OTAsMTEgQEAgcHVibGljOgogICAgICAgICBjaGVja09mZnNldChvZmZzZXQs
IHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQgIT0g
aW52YWxpZE9mZnNldCA/IGdldERpcmVjdChvZmZzZXQpIDogSlNWYWx1ZSgpOwogICAgIH0KLQor
ICAgIAogICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0CiAgICAgewotICAgICAgICBKU0NlbGwq
IHNwZWNpZmljOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVy
ZSh2bSk7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICAgICAgUHJvcGVydHlP
ZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRl
cyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0
eSgpKTsKICAgICAgICAgcmV0dXJuIG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ID8gZ2V0RGlyZWN0
KG9mZnNldCkgOiBKU1ZhbHVlKCk7CiAgICAgfQpAQCAtNTIxLDkgKzUwOSw4IEBAIHB1YmxpYzoK
IAogICAgIFByb3BlcnR5T2Zmc2V0IGdldERpcmVjdE9mZnNldChWTSYgdm0sIFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgSlND
ZWxsKiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1
Y3R1cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQ7CiAgICAgfQpAQCAtOTQ5LDcgKzkzNiw3
IEBAIHByaXZhdGU6CiAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01v
ZGVXaGVuQXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhWTSYsIEFycmF5U3RvcmFnZSopOwogICAg
ICAgICAKICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgotICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwo
Vk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xv
dCYsIEpTQ2VsbCopOworICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgYm9v
bCBpbmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUmLCBQ
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwg
UHJvcGVydHlPZmZzZXQpOwpAQCAtMTIxMyw4ICsxMjAwLDcgQEAgaW5saW5lIEpTVmFsdWUgSlNP
YmplY3Q6OnByb3RvdHlwZSgpIGNvbgogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0Ojppbmxp
bmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSYg
c3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3Qp
CiB7CiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNpZmljOwotICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVj
dHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgaWYgKExJS0VMWShp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJl
Y3Qob2Zmc2V0KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0
aWVzKCkgJiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKQEAgLTEyOTUsNyArMTI4MSw3IEBAIGlu
bGluZSBKU1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAKIH0KIAogdGVtcGxhdGU8SlNP
YmplY3Q6OlB1dE1vZGUgbW9kZT4KLWlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRl
cm5hbChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgSlNDZWxsKiBzcGVjaWZp
Y0Z1bmN0aW9uKQoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAg
ICAgQVNTRVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vz
c29yKSk7CkBAIC0xMzA1LDI1ICsxMjkxLDE1IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXRE
aXJlY3RJbnRlcm5hbCgKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVy
ZSh2bSk7CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgdW5z
aWduZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogY3VycmVudFNwZWNpZmlj
RnVuY3Rpb247Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBjdXJyZW50U3BlY2lmaWNGdW5j
dGlvbik7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZt
LCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAh
PSBpbnZhbGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBjdXJyZW50bHkg
YSBzcGVjaWZpYyBmdW5jdGlvbiwgYW5kIHRoZXJlIG5vdyBlaXRoZXIgaXNuJ3QsCi0gICAgICAg
ICAgICAvLyBvciB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCwgdGhlbiBkZXNwZWNpZnkuCi0g
ICAgICAgICAgICBpZiAoY3VycmVudFNwZWNpZmljRnVuY3Rpb24gJiYgKHNwZWNpZmljRnVuY3Rp
b24gIT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pKQotICAgICAgICAgICAgICAgIHN0cnVjdHVy
ZS0+ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAg
ICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVh
ZE9ubHkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwdXRE
aXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwg
dGhlIG9iamVjdHMgc3RydWN0dXJlIG9ubHkgaGFzIGEgc3BlY2lmaWMgdmFsdWUgc2V0IGlmIHBy
ZXZpb3VzbHkgdGhlcmUKLSAgICAgICAgICAgIC8vIGhhZCBiZWVuIG9uZSBzZXQsIGFuZCBpZiB0
aGUgbmV3IHZhbHVlIGJlaW5nIHNwZWNpZmllZCBpcyB0aGUgc2FtZSAob3RoZXJ3aXNlIHdlIHdv
dWxkCi0gICAgICAgICAgICAvLyBoYXZlIGRlc3BlY2lmaWVkLCBhYm92ZSkuICBTbywgaWYgY3Vy
cmVudFNwZWNpZmljRnVuY3Rpb24gaXMgbm90IHNldCwgb3IgaWYgdGhlIG5ldwotICAgICAgICAg
ICAgLy8gdmFsdWUgaXMgZGlmZmVyZW50IChvciB0aGVyZSBpcyBubyBuZXcgdmFsdWUpLCB0aGVu
IHRoZSBzbG90IG5vdyBoYXMgbm8gdmFsdWUgLSBhbmQKLSAgICAgICAgICAgIC8vIGFzIHN1Y2gg
aXQgaXMgY2FjaGFibGUuCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSB3YXMgcHJldmlvdXNseSBh
IHZhbHVlLCBhbmQgdGhlIG5ldyB2YWx1ZSBpcyB0aGUgc2FtZSwgdGhlbiB3ZSBjYW5ub3QgY2Fj
aGUuCi0gICAgICAgICAgICBpZiAoIWN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uIHx8IChzcGVjaWZp
Y0Z1bmN0aW9uICE9IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBz
bG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgICAgIHN0cnVj
dHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApAQCAtMTMzNCwxNSArMTMxMCwxMyBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+
cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkg
PSBncm93T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNh
cGFjaXR5KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdl
Q2FwYWNpdHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNp
ZmljRnVuY3Rpb24pOworICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJv
cGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAg
ICAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3
QnV0dGVyZmx5KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBB
U1NFUlQodGhpcy0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAg
IHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIC8vIFNlZSBjb21tZW50IG9u
IHNldE5ld1Byb3BlcnR5IGNhbGwgYmVsb3cuCi0gICAgICAgIGlmICghc3BlY2lmaWNGdW5jdGlv
bikKLSAgICAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAg
ICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBpZiAoYXR0cmli
dXRlcyAmIFJlYWRPbmx5KQogICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRh
aW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTM1MCw3
ICsxMzI0LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAg
ICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0
aGlzLT5zdHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdT
dHJ1Y3R1cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3Bl
Y2lmaWNGdW5jdGlvbiwgb2Zmc2V0KSkgeworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlz
LT5zdHJ1Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CiAgICAg
ICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0
ZXJmbHkgPSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1
Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCkpIHsKQEAgLTEzNjIsNDAgKzEzMzYsMTcgQEAgaW5s
aW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRC
dXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0
KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsg
dHJhbnNpdGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFi
bGUsCi0gICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUu
Ci0gICAgICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAgICAgICAgICAgIHNsb3Quc2V0TmV3
UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlz
LCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBj
dXJyZW50QXR0cmlidXRlczsKLSAgICBKU0NlbGwqIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uOwot
ICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRy
aWJ1dGVzLCBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbik7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkgewogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkg
JiYgY3VycmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyBoZXJlOgotICAg
ICAgICAvLyAgKDEpIFRoZXJlIGlzIGFuIGV4aXN0aW5nIHNwZWNpZmljIHZhbHVlIHNldCwgYW5k
IHdlJ3JlIG92ZXJ3cml0aW5nIHdpdGggKnRoZSBzYW1lIHZhbHVlKi4KLSAgICAgICAgLy8gICAg
ICAgKiBEbyBub3RoaW5nIC0gbm8gbmVlZCB0byBkZXNwZWNpZnksIGJ1dCB0aGF0IG1lYW5zIHdl
IGNhbid0IGNhY2hlIChhIGNhY2hlZAotICAgICAgICAvLyAgICAgICAgIHB1dCBjb3VsZCB3cml0
ZSBhIGRpZmZlcmVudCB2YWx1ZSkuIExlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3Rh
dGUuCi0gICAgICAgIC8vICAoMikgVGhlcmUgaXMgYSBzcGVjaWZpYyB2YWx1ZSBjdXJyZW50bHkg
c2V0LCBidXQgd2UncmUgd3JpdGluZyBhIGRpZmZlcmVudCB2YWx1ZS4KLSAgICAgICAgLy8gICAg
ICAgKiBGaXJzdCwgd2UgaGF2ZSB0byBkZXNwZWNpZnkuICBIYXZpbmcgZG9uZSBzbywgdGhpcyBp
cyBub3cgYSByZWd1bGFyIHNsb3QKLSAgICAgICAgLy8gICAgICAgICB3aXRoIG5vIHNwZWNpZmlj
IHZhbHVlLCBzbyBnbyBhaGVhZCAmIGNhY2hlIGxpa2Ugbm9ybWFsLgotICAgICAgICAvLyAgKDMp
IE5vcm1hbCBjYXNlLCB0aGVyZSBpcyBubyBzcGVjaWZpYyB2YWx1ZSBzZXQuCi0gICAgICAgIC8v
ICAgICAgICogR28gYWhlYWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAgICAgaWYgKGN1cnJl
bnRTcGVjaWZpY0Z1bmN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBjYXNlICgxKSBEbyB0aGUgcHV0
LCB0aGVuIHJldHVybiBsZWF2aW5nIHRoZSBzbG90IHVuY2FjaGFibGUuCi0gICAgICAgICAgICBp
ZiAoc3BlY2lmaWNGdW5jdGlvbiA9PSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikgewotICAgICAg
ICAgICAgICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjYXNlICgyKSBEZXNw
ZWNpZnksIGZhbGwgdGhyb3VnaCB0byAoMykuCi0gICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0s
IFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2FzZSAoMykgc2V0IHRoZSBz
bG90LCBkbyB0aGUgcHV0LCByZXR1cm4uCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVBy
b3BlcnR5KG9mZnNldCk7CiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBv
ZmZzZXQpOwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTE0MDQsMTcgKzEzNTUsMTQgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6
OnB1dERpcmVjdEludGVybmFsKAogICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNF
eHRlbnNpYmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0cnVjdHVyZSA9IFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFt
ZSwgYXR0cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSk7
CisgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgp
KTsKICAgICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChzdHJ1Y3R1
cmUtPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0
ZVN0b3JhZ2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKIAogICAgIHB1dERpcmVjdCh2bSwg
b2Zmc2V0LCB2YWx1ZSk7Ci0gICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlv
bnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCi0gICAg
Ly8gc28gbGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KLSAgICBpZiAoIXNw
ZWNpZmljRnVuY3Rpb24pCi0gICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0
KTsKKyAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJp
YnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5
UHJvcGVydGllcygpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTQ0NywyMCArMTM5NSwyMCBAQCBp
bmxpbmUgYm9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5CiAgICAgQVNTRVJUKCFIZWFw
OjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsK
ICAgICBBU1NFUlQoIXN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwog
Ci0gICAgcmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHJldHVy
biBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwg
MCwgc2xvdCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQogewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0
ZXMgJiBBY2Nlc3NvcikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwotICAgIHB1
dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFt
ZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7Cisg
ICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2Jq
ZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVl
IHZhbHVlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dl
dHRlclNldHRlcigpKTsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJv
cGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVj
dCh2YWx1ZSkpOworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0
eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBK
U09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMTQ3
MCw3ICsxNDE4LDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgog
ICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYg
KHN0cnVjdHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3
QnV0dGVyZmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNh
cGFjaXR5KCkpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdl
dENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3Ry
dWN0dXJlKCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwg
YXR0cmlidXRlcyk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUo
KSwgbmV3QnV0dGVyZmx5KTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9u
IDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05OSw4ICs5OSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJh
Y3RBY2Nlc3MoRXhlY1N0CiAgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9i
YWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgMCwgMCk7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIG9wID0gUmVz
b2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyks
IGRlcHRoLCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLCAwLCAwLCBzbG90LmNhY2hlZE9mZnNl
dCgpKTsKKyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZSA9IGdsb2JhbE9i
amVjdC0+c3RydWN0dXJlKCktPmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0
KGV4ZWMtPnZtKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCkpLT5zdGF0ZSgpOworICAgICAgICBpZiAo
c3RhdGUgPT0gSXNXYXRjaGVkICYmIGdldE9yUHV0ID09IFB1dCkgeworICAgICAgICAgICAgLy8g
VGhlIGZpZWxkIGV4aXN0cywgYnV0IGJlY2F1c2UgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQg
aXMgc3RpbGwgaW50YWN0LiBUaGlzIGlzCisgICAgICAgICAgICAvLyBraW5kIG9mIGRhbmdlcm91
cy4gV2UgaGF2ZSB0d28gb3B0aW9uczoKKyAgICAgICAgICAgIC8vIDEpIEludmFsaWRhdGUgdGhl
IHdhdGNocG9pbnQgc2V0LiBUaGF0IHdvdWxkIHdvcmssIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQg
dGhpcyBjb2RlCisgICAgICAgICAgICAvLyAgICBwYXRoIG5ldmVyIGV4ZWN1dGVzIC0gaW4gd2hp
Y2ggY2FzZSB0aGlzIHdvdWxkIGJlIHVud2lzZS4KKyAgICAgICAgICAgIC8vIDIpIEhhdmUgdGhl
IGludmFsaWRhdGlvbiBoYXBwZW4gYXQgcnVuLXRpbWUuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIGxl
YXZlIHRoZSBjb2RlCisgICAgICAgICAgICAvLyAgICB1bmNhY2hlZC4gVGhlIG9ubHkgZG93bnNp
ZGUgaXMgc2xpZ2h0bHkgbW9yZSB3b3JrIHdoZW4gdGhpcyBkb2VzIGV4ZWN1dGUuCisgICAgICAg
ICAgICAvLyBXZSBnbyB3aXRoIG9wdGlvbiAoMikgaGVyZSBiZWNhdXNlIGl0IHNlZW1zIGxlc3Mg
ZXZpbC4KKyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5
LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCAwLCAwKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0
eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1
cmUoKSwgMCwgMCwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBI
YXNoVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzYsMTMgKzc2LDExIEBAIHN0
cnVjdCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICBTdHJpbmdJbXBsKiBrZXk7CiAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgV3JpdGVCYXJy
aWVyPEpTQ2VsbD4gc3BlY2lmaWNWYWx1ZTsKIAotICAgIFByb3BlcnR5TWFwRW50cnkoVk0mIHZt
LCBKU0NlbGwqIG93bmVyLCBTdHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
dW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorICAgIFByb3BlcnR5
TWFwRW50cnkoU3RyaW5nSW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpCiAgICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBvZmZzZXQob2Zmc2V0
KQogICAgICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgLCBzcGVjaWZpY1Zh
bHVlKHZtLCBvd25lciwgc3BlY2lmaWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46Ok1heUJl
TnVsbCkKICAgICB7CiAgICAgfQogfTsKQEAgLTE0MSw4ICsxMzksNiBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCiAg
ICAgdHlwZWRlZiBTdHJpbmdJbXBsKiBLZXlUeXBlOwogICAgIHR5cGVkZWYgUHJvcGVydHlNYXBF
bnRyeSBWYWx1ZVR5cGU7CiAKQEAgLTE1Nyw4ICsxNTMsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBD
b25zdHJ1Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlhbCBjYXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxl
IHRvIGNvcHksIG9yIGJvdGguCiAgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNyZWF0ZShWTSYs
IHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNs
b25lKFZNJiwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwotICAgIHN0YXRp
YyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShWTSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRp
YWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRh
YmxlKiBjbG9uZShWTSYsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVy
dHlUYWJsZSogY2xvbmUoVk0mLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3Bl
cnR5VGFibGUmKTsKICAgICB+UHJvcGVydHlUYWJsZSgpOwogCiAgICAgLy8gT3JkZXJlZCBpdGVy
YXRpb24gbWV0aG9kcy4KQEAgLTE5Niw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgUHJvcGVydHlP
ZmZzZXQgbmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0eSk7CiAKICAgICAv
LyBDb3B5IHRoaXMgUHJvcGVydHlUYWJsZSwgZW5zdXJpbmcgdGhlIGNvcHkgaGFzIGF0IGxlYXN0
IHRoZSBjYXBhY2l0eSBwcm92aWRlZC4KLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5KFZNJiwgSlND
ZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOworICAgIFByb3BlcnR5VGFibGUqIGNv
cHkoVk0mLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6
ZV90IHNpemVJbk1lbW9yeSgpOwpAQCAtMjA0LDEyICsyMDAsMTIgQEAgcHVibGljOgogI2VuZGlm
CiAKIHByb3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3Mg
PSBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwog
CiBwcml2YXRlOgogICAgIFByb3BlcnR5VGFibGUoVk0mLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNp
dHkpOwotICAgIFByb3BlcnR5VGFibGUoVk0mLCBKU0NlbGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxl
Jik7Ci0gICAgUHJvcGVydHlUYWJsZShWTSYsIEpTQ2VsbCosIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUoVk0mLCBjb25z
dCBQcm9wZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJsZShWTSYsIHVuc2lnbmVkIGluaXRp
YWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwogCiAgICAgUHJvcGVydHlUYWJsZShj
b25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93
biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0byBi
ZSBhdmFpbGFibGUuCkBAIC00OTQsMTUgKzQ5MCwxNSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQg
UHJvcGVydHlUYWJsZTo6bmV4CiAgICAgcmV0dXJuIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKHNp
emUoKSwgaW5saW5lQ2FwYWNpdHkpOwogfQogCi1pbmxpbmUgUHJvcGVydHlUYWJsZSogUHJvcGVy
dHlUYWJsZTo6Y29weShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5
KQoraW5saW5lIFByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNvcHkoVk0mIHZtLCB1bnNp
Z25lZCBuZXdDYXBhY2l0eSkKIHsKICAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9rZXlDb3Vu
dCk7CiAKICAgICAvLyBGYXN0IGNhc2U7IGlmIHRoZSBuZXcgdGFibGUgd2lsbCBiZSB0aGUgc2Ft
ZSBtX2luZGV4U2l6ZSBhcyB0aGlzIG9uZSwgd2UgY2FuIG1lbWNweSBpdCwKICAgICAvLyBzYXZl
IHJlaGFzaGluZyBhbGwga2V5cy4KICAgICBpZiAoc2l6ZUZvckNhcGFjaXR5KG5ld0NhcGFjaXR5
KSA9PSBtX2luZGV4U2l6ZSkKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZt
LCBvd25lciwgKnRoaXMpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3du
ZXIsIG5ld0NhcGFjaXR5LCAqdGhpcyk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpj
bG9uZSh2bSwgKnRoaXMpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgbmV3
Q2FwYWNpdHksICp0aGlzKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAxNzA3
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDE2IEBAIFByb3BlcnR5VGFibGUqIFByb3BlcnR5
VGFibGU6OmNyZWF0ZShWTSYKICAgICByZXR1cm4gdGFibGU7CiB9CiAKLVByb3BlcnR5VGFibGUq
IFByb3BlcnR5VGFibGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVy
dHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShWTSYg
dm0sIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQogewotICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkp
IFByb3BlcnR5VGFibGUodm0sIG93bmVyLCBvdGhlcik7CisgICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkg
UHJvcGVydHlUYWJsZSh2bSwgb3RoZXIpOwogICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7
CiAgICAgcmV0dXJuIHRhYmxlOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpj
bG9uZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29u
c3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpj
bG9uZShWTSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJs
ZSYgb3RoZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgb3du
ZXIsIGluaXRpYWxDYXBhY2l0eSwgb3RoZXIpOworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3Bl
cnR5VGFibGUodm0sIGluaXRpYWxDYXBhY2l0eSwgb3RoZXIpOwogICAgIHRhYmxlLT5maW5pc2hD
cmVhdGlvbih2bSk7CiAgICAgcmV0dXJuIHRhYmxlOwogfQpAQCAtNjksNyArNjksNyBAQCBQcm9w
ZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgdW5zCiAgICAgQVNTRVJUKGlzUG93ZXJP
ZjIobV9pbmRleFNpemUpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlU
YWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQog
ICAgIDogSlNDZWxsKHZtLCB2bS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwg
bV9pbmRleFNpemUob3RoZXIubV9pbmRleFNpemUpCiAgICAgLCBtX2luZGV4TWFzayhvdGhlci5t
X2luZGV4TWFzaykKQEAgLTgyLDEwICs4Miw4IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFi
bGUoVk0mIHZtLCBKU0MKICAgICBtZW1jcHkobV9pbmRleCwgb3RoZXIubV9pbmRleCwgZGF0YVNp
emUoKSk7CiAKICAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKLSAgICBmb3IgKGl0ZXJh
dG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgZm9yIChpdGVy
YXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKICAgICAgICAgaXRlci0+
a2V5LT5yZWYoKTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNw
ZWNpZmljVmFsdWUuZ2V0KCkpOwotICAgIH0KIAogICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9m
ZnNldHMgdmVjdG9yLgogICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9m
ZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOwpAQCAtOTMsNyArOTEsNyBAQCBQ
cm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgICAgIG1fZGVsZXRl
ZE9mZnNldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Pigqb3RoZXJEZWxl
dGVkT2Zmc2V0cykpOwogfQogCi1Qcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwg
SlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRh
YmxlJiBvdGhlcikKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCB1bnNpZ25l
ZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQogICAgIDogSlND
ZWxsKHZtLCB2bS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9pbmRleFNp
emUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCiAgICAgLCBtX2luZGV4TWFzayht
X2luZGV4U2l6ZSAtIDEpCkBAIC0xMDksNyArMTA3LDYgQEAgUHJvcGVydHlUYWJsZTo6UHJvcGVy
dHlUYWJsZShWTSYgdm0sIEpTQwogICAgICAgICBBU1NFUlQoY2FuSW5zZXJ0KCkpOwogICAgICAg
ICByZWluc2VydCgqaXRlcik7CiAgICAgICAgIGl0ZXItPmtleS0+cmVmKCk7Ci0gICAgICAgIHZt
LmhlYXAud3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKICAg
ICB9CiAKICAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KQEAgLTEzMiwx
NyArMTI5LDQgQEAgUHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKQogICAgIGZhc3RGcmVl
KG1faW5kZXgpOwogfQogCi12b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0aGlz
T2JqZWN0ID0ganNDYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JK
RUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3Qt
PnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAg
ICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5lbmQoKTsKLSAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPmJlZ2luKCk7IHB0ciAhPSBl
bmQ7ICsrcHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zcGVjaWZpY1ZhbHVlKTsK
LX0KLQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
Y3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzMs
NyArMTczLDYgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iagogICAg
IHNldEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oY2xh
c3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcyh2bSkpOwogICAgIHNl
dEhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzKGZhbHNlKTsKICAgICBzZXRBdHRyaWJ1dGVzSW5Q
cmV2aW91cygwKTsKLSAgICBzZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoMCk7CiAgICAg
c2V0UHJldmVudEV4dGVuc2lvbnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2Up
OwogICAgIHNldFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoZmFsc2UpOwpAQCAtMjAzLDcgKzIwMiw2
IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICBzZXRIYXNSZWFkT25seU9yR2V0
dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKG1fY2xhc3NJbmZvLT5oYXNTdGF0aWNT
ZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcyh2bSkpOwogICAgIHNldEhhc05vbkVudW1lcmFibGVQ
cm9wZXJ0aWVzKGZhbHNlKTsKICAgICBzZXRBdHRyaWJ1dGVzSW5QcmV2aW91cygwKTsKLSAgICBz
ZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoMCk7CiAgICAgc2V0UHJldmVudEV4dGVuc2lv
bnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFN0YXRpY0Z1
bmN0aW9uc1JlaWZpZWQoZmFsc2UpOwpAQCAtMjMyLDcgKzIzMCw2IEBAIFN0cnVjdHVyZTo6U3Ry
dWN0dXJlKFZNJiB2bSwgY29uc3QgU3RydWMKICAgICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKHByZXZpb3VzLT5oYXNSZWFkT25seU9yR2V0dGVy
U2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkpOwogICAgIHNldEhhc05vbkVudW1lcmFi
bGVQcm9wZXJ0aWVzKHByZXZpb3VzLT5oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpKTsKICAg
ICBzZXRBdHRyaWJ1dGVzSW5QcmV2aW91cygwKTsKLSAgICBzZXRTcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQocHJldmlvdXMtPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpKTsKICAgICBz
ZXRQcmV2ZW50RXh0ZW5zaW9ucyhwcmV2aW91cy0+cHJldmVudEV4dGVuc2lvbnMoKSk7CiAgICAg
c2V0RGlkVHJhbnNpdGlvbih0cnVlKTsKICAgICBzZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKHBy
ZXZpb3VzLT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwpAQCAtMzAwLDcgKzI5Nyw3IEBAIHZv
aWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBmaW5kU3RydWN0dXJl
c0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsK
ICAgICAKICAgICBpZiAodGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwg
c3RydWN0dXJlLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVD
YXBhY2l0eSkpOworICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBudW1iZXJPZlNsb3Rz
Rm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogICAgICAgICBzdHJ1
Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9CiAgICAgCkBAIC0zMTcsNyArMzE0LDcgQEAg
dm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgICAgICBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2
aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVu
dHJ5KHZtLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVy
ZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSwgc3RydWN0dXJl
LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKTsKKyAgICAgICAgUHJvcGVydHlNYXBF
bnRyeSBlbnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+
bV9vZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CiAgICAgICAgIHBy
b3BlcnR5VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVy
dHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC0zMzYsMzAgKzMzMywxMiBA
QCBzaXplX3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTCiAgICAgcmV0dXJuIG5l
eHRPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkob3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiB9CiAgCi12
b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBTdHJpbmdJbXBsKiByZXAgPSBwcm9wZXJ0eU5h
bWUudWlkKCk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLQotICAgIEFTU0VSVChpc0Rp
Y3Rpb25hcnkoKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7Ci0KLSAgICBQcm9wZXJ0
eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUoKS0+Z2V0KHJlcCk7Ci0gICAgQVNTRVJU
KGVudHJ5KTsKLSAgICBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwotfQotCi1TdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUlt
cGwoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmli
dXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1
cmUtPmlzRGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsK
IAogICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90
cmFuc2l0aW9uVGFibGUuZ2V0KHVpZCwgYXR0cmlidXRlcykpIHsKLSAgICAgICAgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlSW5QcmV2aW91cyA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVjaWZpY1Zh
bHVlSW5QcmV2aW91cy5nZXQoKTsKLSAgICAgICAgaWYgKHNwZWNpZmljVmFsdWVJblByZXZpb3Vz
ICYmIHNwZWNpZmljVmFsdWVJblByZXZpb3VzICE9IHNwZWNpZmljVmFsdWUpCi0gICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgdmFsaWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT5t
X29mZnNldCwgZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
b2Zmc2V0ID0gZXhpc3RpbmdUcmFuc2l0aW9uLT5tX29mZnNldDsKICAgICAgICAgcmV0dXJuIGV4
aXN0aW5nVHJhbnNpdGlvbjsKQEAgLTM2OCwxNiArMzQ3LDE2IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICByZXR1cm4gMDsKIH0KIAotU3RydWN0dXJlKiBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0
cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlKFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIEFTU0VSVCgh
aXNDb21waWxhdGlvblRocmVhZCgpKTsKLSAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9u
VG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCksIGF0
dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUsIG9mZnNldCk7CisgICAgcmV0dXJuIGFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1l
LnVpZCgpLCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBK
U0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1
cnJlbnRseShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsKLSAgICByZXR1cm4gYWRkUHJvcGVydHlU
cmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUsIG9mZnNldCk7CisgICAgcmV0dXJuIGFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgdWlkLCBhdHRyaWJ1dGVzLCBv
ZmZzZXQpOwogfQogCiBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2Vw
dEluZGV4ZWRBY2Nlc3NlcygpIGNvbnN0CkBAIC00MzIsMjUgKzQxMSwxMiBAQCBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gU3RydWN0dXJlOjpzdWdnZXN0CiAgICAgcmV0dXJuIEFsbG9jYXRlQXJyYXlT
dG9yYWdlOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZz
ZXQmIG9mZnNldCwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IGNvbnRleHQpCitTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFBy
b3BlcnR5T2Zmc2V0JiBvZmZzZXQsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBjb250ZXh0KQog
ewotICAgIC8vIElmIHdlIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiwgd2UgbWF5IGhhdmUgZ290
IHRvIHRoaXMgcG9pbnQgaWYgdGhlcmUgaXMKLSAgICAvLyBhbHJlYWR5IGEgdHJhbnNpdGlvbiB3
aXRoIHRoZSBjb3JyZWN0IHByb3BlcnR5IG5hbWUgYW5kIGF0dHJpYnV0ZXMsIGJ1dAotICAgIC8v
IHNwZWNpYWxpemVkIHRvIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiAgSW4gdGhpcyBjYXNlIHdlIGp1
c3Qgd2FudCB0byBnaXZlIHVwCi0gICAgLy8gYW5kIGRlc3BlY2lhbGl6ZSB0aGUgdHJhbnNpdGlv
bi4KLSAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgY2xlYXIgdGhlIHZhbHVlIG9mIHNwZWNpZmljRnVu
Y3Rpb24gd2hpY2ggd2lsbCByZXN1bHQKLSAgICAvLyBpbiB1cyBhZGRpbmcgYSBub24tc3BlY2lm
aWMgdHJhbnNpdGlvbiwgYW5kIGFueSBzdWJzZXF1ZW50IGxvb2t1cCBpbgotICAgIC8vIFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSB3aWxsIGp1c3Qg
dXNlIHRoYXQuCi0gICAgaWYgKHNwZWNpZmljVmFsdWUgJiYgc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25UYWJsZS5jb250YWlucyhwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMpKQotICAgICAg
ICBzcGVjaWZpY1ZhbHVlID0gMDsKLQogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgQVNTRVJUKCFT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUsIG9mZnNldCkpOwor
ICAgIEFTU0VSVCghU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKTsKICAg
ICAKLSAgICBpZiAoc3RydWN0dXJlLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSA9PSBt
YXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAw
OwotCiAgICAgaW50IG1heFRyYW5zaXRpb25MZW5ndGg7CiAgICAgaWYgKGNvbnRleHQgPT0gUHV0
UHJvcGVydHlTbG90OjpQdXRCeUlkKQogICAgICAgICBtYXhUcmFuc2l0aW9uTGVuZ3RoID0gc19t
YXhUcmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQ7CkBAIC00NTksNyArNDI1LDcgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGlmIChzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25Db3VudCgpID4gbWF4VHJhbnNpdGlvbkxlbmd0aCkgewogICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOwot
ICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBvZmZzZXQgPSB0cmFu
c2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHJldHVy
biB0cmFuc2l0aW9uOwogICAgIH0KICAgICAKQEAgLTQ2OSwxMSArNDM1LDEwIEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2
aW91c0lEKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPm1fbmFt
ZUluUHJldmlvdXMgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0
cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+bV9zcGVjaWZp
Y1ZhbHVlSW5QcmV2aW91cy5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHNwZWNpZmljVmFs
dWUpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0sIHRyYW5zaXRp
b24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAg
dHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogCi0gICAgb2Zmc2V0
ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHBy
b3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5t
X29mZnNldCwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewpAQCAtNTA1LDcg
KzQ3MCw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmEKIAogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29m
ZnNldDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKIApAQCAtNTEzLDMwICs0NzgsNiBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAgICAgcmV0dXJuIHRyYW5zaXRp
b247CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHJlcGxhY2VGdW5j
dGlvbikKLXsKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291
bnQoKSA8IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCk7Ci0gICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgdHJhbnNpdGlvbi0+c2V0
U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KHRyYW5zaXRpb24tPnNwZWNpZmljRnVuY3Rpb25U
aHJhc2hDb3VudCgpICsgMSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAg
c3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0Mp
OwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7Ci0g
ICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5z
aXRpb24tPnBpbigpOwotCi0gICAgaWYgKHRyYW5zaXRpb24tPnNwZWNpZmljRnVuY3Rpb25UaHJh
c2hDb3VudCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgdHJh
bnNpdGlvbi0+ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKHZtKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
Ym9vbCByZW1vdmVkID0gdHJhbnNpdGlvbi0+ZGVzcGVjaWZ5RnVuY3Rpb24odm0sIHJlcGxhY2VG
dW5jdGlvbik7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAg
fQotCi0gICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgIHJldHVy
biB0cmFuc2l0aW9uOwotfQotCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdl
VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKQEAgLTU0NCw3ICs0ODUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmli
dXRlQ2hhbmdlVHJhCiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwg
c3RydWN0dXJlKTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5t
X29mZnNldDsKICAgICAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgICAgIApAQCAtNTY4LDcg
KzUwOSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2kKIAogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29m
ZnNldDsKICAgICB0cmFuc2l0aW9uLT5zZXREaWN0aW9uYXJ5S2luZChraW5kKTsKICAgICB0cmFu
c2l0aW9uLT5waW4oKTsKQEAgLTYzMSw3ICs1NzIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
cHJldmVudEV4dGVuc2lvbnNUCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
c3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0Mp
OwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7Cisg
ICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5t
X29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJldmVu
dEV4dGVuc2lvbnModHJ1ZSk7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC02NDAsMTMgKzU4
MSwxMyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAgICAgcmV0
dXJuIHRyYW5zaXRpb247CiB9CiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3Bl
cnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVy
dHlUYWJsZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYg
dm0pCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwogICAgIAogICAgIGlm
IChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5VGFibGUo
KS0+Y29weSh2bSwgb3duZXIsIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7CisgICAgICAg
IHJldHVybiBwcm9wZXJ0eVRhYmxlKCktPmNvcHkodm0sIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgp
ICsgMSk7CiAgICAgCiAgICAgLy8gSG9sZCB0aGUgbG9jayB3aGlsZSBzdGVhbGluZyB0aGUgdGFi
bGUgLSBzbyB0aGF0IGdldENvbmN1cnJlbnRseSgpIG9uIGFub3RoZXIgdGhyZWFkCiAgICAgLy8g
d2lsbCBlaXRoZXIgaGF2ZSB0byBieXBhc3MgdGhpcyBzdHJ1Y3R1cmUsIG9yIHdpbGwgZ2V0IHRv
IHVzZSB0aGUgcHJvcGVydHkgdGFibGUKQEAgLTY4Miw3ICs2MjMsNyBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJldmlvdXNJ
RCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1
dGVzSW5QcmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5k
ZXhpbmdUeXBlKGluZGV4aW5nVHlwZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgp
LnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJ
ZlBpbm5lZCh2bSwgdHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUo
KS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRpb24t
PmlubGluZUNhcGFjaXR5KCkpOwogICAgIApAQCAtNzczLDE5ICs3MTQsMTYgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgIHJldHVybiB0aGlzOwogfQogCi1Q
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0m
IHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0Nl
bGwqIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5
V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghZW51bWVyYXRpb25DYWNoZSgpKTsKIAot
ICAgIGlmIChzcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1bmN0
aW9uVGhyYXNoQ291bnQpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAgRGVmZXJH
QyBkZWZlckdDKHZtLmhlYXApOwogICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2Fy
eUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwogICAgIAogICAgIHBpbigpOwogCi0gICAgcmV0dXJu
IHB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNW
YWx1ZSk7CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIH0K
IAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0
aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTgxMiwxMSArNzUwLDU3
IEBAIHZvaWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIHsKICAgICBBU1NF
UlQoIWhhc1JhcmVEYXRhKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IFN0
cnVjdHVyZVJhcmVEYXRhOjpjcmVhdGUodm0sIHByZXZpb3VzKCkpOworICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CiAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCByYXJl
RGF0YSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBzZXRIYXNSYXJlRGF0YSh0
cnVlKTsKICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiB9CiAKK1dhdGNocG9pbnRTZXQqIFN0
cnVjdHVyZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mIHZtLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKKyAgICAKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIGFsbG9jYXRl
UmFyZURhdGEodm0pOworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7Cisg
ICAgU3RydWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKTsKKyAgICBp
ZiAoIXJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMpIHsKKyAgICAgICAgcmFy
ZURhdGEtPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cyA9CisgICAgICAgICAgICBzdGQ6Om1h
a2VfdW5pcXVlPFN0cnVjdHVyZVJhcmVEYXRhOjpQcm9wZXJ0eVdhdGNocG9pbnRNYXA+KCk7Cisg
ICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0g
cmFyZURhdGEtPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cy0+YWRkKG9mZnNldCwgbnVsbHB0
cik7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQuaXRlcmF0b3It
PnZhbHVlID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSk7CisgICAgcmV0
dXJuIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlOjpz
dGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQoreworICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7
CisgICAgCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUp
OworICAgIGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNl
dCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0m
IHZtLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgZW5zdXJlUHJvcGVydHlSZXBsYWNl
bWVudFdhdGNocG9pbnRTZXQodm0sIG9mZnNldCktPmZpcmVBbGwoIkRpZCBjYWNoZSBwcm9wZXJ0
eSByZXBsYWNlbWVudCIpOworfQorCit2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVy
bmFsUHJvcGVydGllcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFy
eSgpKSB7CisgICAgICAgIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcpOworICAgICAgICBzdGFydFdhdGNoaW5nUHJvcGVy
dHlGb3JSZXBsYWNlbWVudHModm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpOworICAgIH0K
KyAgICBzZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVlKTsKK30KKwogI2lmIERVTVBf
UFJPUEVSVFlNQVBfU1RBVFMKIAogc3RydWN0IFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dn
ZXIgewpAQCAtODQ1LDIxICs4MjksMjEgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0Nv
bnNpc3RlbmN5KAogCiAjZW5kaWYKIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJv
cGVydHlUYWJsZShWTSYgdm0sIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1
Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKFZNJiB2bSkKIHsKICAgICBpZiAoIXByb3BlcnR5VGFi
bGUoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25l
KHZtLCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CisgICAgcmV0dXJuIFByb3BlcnR5
VGFibGU6OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKIH0KIAotUHJvcGVydHlU
YWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mIHZtLCBTdHJ1
Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoVk0mIHZtKQogewogICAgIGlmIChwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAg
IHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCku
Z2V0KCkpOworICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0
eVRhYmxlKCkuZ2V0KCkpOwogICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51
bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9
CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5n
SW1wbCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkK
K1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1w
bCogdWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKIHsKICAgICBWZWN0b3I8U3RydWN0dXJlKiwg
OD4gc3RydWN0dXJlczsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKQEAgLTg3MSw3ICs4NTUs
NiBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRsCiAgICAgICAgIFBy
b3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gdGFibGUtPmdldCh1aWQpOwogICAgICAgICBpZiAoZW50
cnkpIHsKICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKLSAgICAg
ICAgICAgIHNwZWNpZmljVmFsdWUgPSBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5nZXQoKTsKICAgICAg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IHJlc3VsdCA9IGVudHJ5LT5vZmZzZXQ7CiAgICAgICAgICAg
ICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CkBAIC04ODUsMTQgKzg2OCwxMyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1
cnJlbnRsCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGF0dHJpYnV0
ZXMgPSBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCk7Ci0gICAgICAgIHNwZWNpZmlj
VmFsdWUgPSBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCk7CiAgICAg
ICAgIHJldHVybiBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIH0KICAgICAKICAgICByZXR1cm4g
aW52YWxpZE9mZnNldDsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZt
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxs
KiYgc3BlY2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CiAgICAg
QVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+
Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKQEAgLTkwNyw0MiArODg5LDE1IEBAIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHIKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZz
ZXQ7CiAKICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Ci0gICAgc3BlY2lmaWNW
YWx1ZSA9IGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmdldCgpOwogICAgIHJldHVybiBlbnRyeS0+b2Zm
c2V0OwogfQogCi1ib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24oVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsK
LSAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAg
IGlmICghcHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm9w
ZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51
aWQoKSk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNT
RVJUKGVudHJ5LT5zcGVjaWZpY1ZhbHVlKTsKLSAgICBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5jbGVh
cigpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5QWxs
RnVuY3Rpb25zKFZNJiB2bSkKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAg
bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpCi0gICAgICAgIGl0ZXItPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKLX0KLQot
UHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbHVlKFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZp
Y1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CiAgICAgCisgICAgc2V0RGlk
V2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMoZmFsc2UpOworICAgIAogICAgIEFTU0VSVCghSlNDOjpp
c1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOwogCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwpAQCAtOTU2LDcgKzkxMSw3IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cHV0
U3BlY2lmaWNWYWwKIAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFi
bGUoKS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKIAotICAgIHByb3BlcnR5VGFibGUo
KS0+YWRkKFByb3BlcnR5TWFwRW50cnkodm0sIHRoaXMsIHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zm
c2V0TWF5Q2hhbmdlKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5
KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlBy
b3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgcmV0dXJuIG5ld09mZnNldDsKQEAgLTEwNjAsNyArMTAxNSw2IEBAIHZvaWQgU3RydWN0dXJl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwogICAgIH0KICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV9wcmV2aW91c09yUmFyZURhdGEpOwotICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKIAogICAgIGlmICh0aGlz
T2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBBU1NFUlQodGhpc09i
amVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKQEAgLTEwODMsOCArMTAzNyw3IEBAIGJvb2wg
U3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKICAgICAgICAgY3VycmVudCA9IHBy
b3RvdHlwZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgCiAgICAgICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBjdXJyZW50LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlm
ICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgCkBAIC0xMTQ0LDEzICsxMDk3LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgYwogICAgIGlmICh0YWJsZSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBpdGVyID0gdGFibGUtPmJlZ2luKCk7CiAgICAgICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHRhYmxlLT5lbmQoKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIGl0ZXItPmtleSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KGl0ZXIt
Pm9mZnNldCkpOwotICAgICAgICAgICAgaWYgKGl0ZXItPnNwZWNpZmljVmFsdWUpIHsKLSAgICAg
ICAgICAgICAgICBEdW1wQ29udGV4dCBkdW1teUNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgb3V0
LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSkpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9j
ay51bmxvY2soKTsKICAgICB9CkBAIC0xMTYwLDEwICsxMTA4LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1l
SW5QcmV2aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgIjoiLCBzdGF0aWNfY2FzdDxp
bnQ+KHN0cnVjdHVyZS0+bV9vZmZzZXQpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9zcGVj
aWZpY1ZhbHVlSW5QcmV2aW91cykgewotICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlDb250
ZXh0OwotICAgICAgICAgICAgb3V0LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoc3RydWN0dXJlLT5t
X3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKSk7Ci0gICAgICAgIH0KICAgICB9CiAgICAg
CiAgICAgb3V0LnByaW50KCJ9LCAiLCBJbmRleGluZ1R5cGVEdW1wKGluZGV4aW5nVHlwZSgpKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNp
b24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMSwxMiArMTExLDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIGR1bXBTdGF0aXN0aWNzKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
U3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVy
dHlPZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVu
a25vd25Db250ZXh0KTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRp
b25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSosIFN0cmluZ0ltcGwq
IHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0
eU9mZnNldCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFBy
b3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5
T2Zmc2V0Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJv
cGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCA9IFB1
dFByb3BlcnR5U2xvdDo6VW5rbm93bkNvbnRleHQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGFk
ZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0
dXJlKiwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNl
dCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBw
cm90b3R5cGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGRlc3Bl
Y2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSk7CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgc3RhdGljIFN0
cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSop
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSopOwpAQCAtMTM4LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQg
d2l0aCBjYXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQ
cm9wZXJ0eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICB2b2lkIHNldFBy
b3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9w
cm90b3R5cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUpOyB9CiAgICAgICAgIApAQCAtMTg4LDgg
KzE4Nyw2IEBAIHB1YmxpYzoKICAgICAvLyBXaWxsIGp1c3QgdGhlIHByb3RvdHlwZSBjaGFpbiBp
bnRlcmNlcHQgdGhpcyBwcm9wZXJ0eSBhY2Nlc3M/CiAgICAgYm9vbCBwcm90b3R5cGVDaGFpbk1h
eUludGVyY2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKLSAgICBib29s
IHRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9z
cGVjaWZpY1ZhbHVlSW5QcmV2aW91czsgfQotICAgICAgICAKICAgICBTdHJ1Y3R1cmUqIHByZXZp
b3VzSUQoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0lu
Zm8oKSA9PSBpbmZvKCkpOwpAQCAtMjYzLDEwICsyNjAsMTAgQEAgcHVibGljOgogCiAgICAgUHJv
cGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNldCBn
ZXQoVk0mLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
UHJvcGVydHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRl
cywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVy
dHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CiAK
ICAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQp
OwotICAgIFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVp
ZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIFBy
b3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWdu
ZWQmIGF0dHJpYnV0ZXMpOwogCiAgICAgdm9pZCBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVz
V2l0aFByb3RvQ2hlY2soYm9vbCBpc19fcHJvdG9fXykKICAgICB7CkBAIC0yODMsOSArMjgwLDYg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gIUpTQzo6aXNWYWxpZE9mZnNldChtX29mZnNldCk7
CiAgICAgfQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5
RnVuY3Rpb24oVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgZGlzYWJsZVNwZWNpZmljRnVu
Y3Rpb25UcmFja2luZygpIHsgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KG1heFNwZWNp
ZmljRnVuY3Rpb25UaHJhc2hDb3VudCk7IH0KLQogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNo
ZShWTSYsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZp
bmVkIGluIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yKiBlbnVtZXJhdGlvbkNhY2hlKCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVy
YXRvci5oLgogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9w
ZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CkBAIC0zNjQsMTMgKzM1OCwzNiBAQCBw
dWJsaWM6CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxp
ZCgpKTsKICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7
CiAgICAgfQotICAgICAgICAKKyAgICAKICAgICB2b2lkIGRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0
cnVjdHVyZSgpIGNvbnN0OwogICAgIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIHRyYW5zaXRp
b25XYXRjaHBvaW50U2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RyYW5zaXRp
b25XYXRjaHBvaW50U2V0OwogICAgIH0KKyAgICAKKyAgICBXYXRjaHBvaW50U2V0KiBlbnN1cmVQ
cm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChWTSYsIFByb3BlcnR5T2Zmc2V0KTsKKyAg
ICB2b2lkIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYgdm0sIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVuc3VyZVByb3BlcnR5UmVwbGFjZW1l
bnRXYXRjaHBvaW50U2V0KHZtLCBvZmZzZXQpOworICAgIH0KKyAgICB2b2lkIHN0YXJ0V2F0Y2hp
bmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgV2F0Y2hw
b2ludFNldCogcHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoUHJvcGVydHlPZmZzZXQp
OworICAgIHZvaWQgZGlkUmVwbGFjZVByb3BlcnR5KFByb3BlcnR5T2Zmc2V0KTsKKyAgICB2b2lk
IGRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudChWTSYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAK
KyAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeShWTSYg
dm0pCisgICAgeworICAgICAgICBpZiAoTElLRUxZKGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVz
KCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGFydFdhdGNoaW5nSW50ZXJuYWxQ
cm9wZXJ0aWVzKHZtKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJu
YWxQcm9wZXJ0aWVzSWZOZWNlc3NhcnlGb3JFbnRpcmVDaGFpbihWTSYgdm0pCisgICAgeworICAg
ICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpczsgc3RydWN0dXJlOyBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQorICAgICAgICAgICAg
c3RydWN0dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0p
OworICAgIH0KIAogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hh
cGUoKTsKICAgICAKQEAgLTQwNiwxMSArNDIzLDExIEBAIHB1YmxpYzoKICAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQ
cm90bywgSGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywg
MSwgNCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc05vbkVudW1lcmFibGVQcm9wZXJ0
aWVzLCBIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcywgMSwgNSk7CiAgICAgREVGSU5FX0JJVEZJ
RUxEKHVuc2lnbmVkLCBhdHRyaWJ1dGVzSW5QcmV2aW91cywgQXR0cmlidXRlc0luUHJldmlvdXMs
IDE0LCA2KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHNwZWNpZmljRnVuY3Rpb25U
aHJhc2hDb3VudCwgU3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50LCAyLCAyMCk7CiAgICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIHByZXZlbnRFeHRlbnNpb25zLCBQcmV2ZW50RXh0ZW5zaW9ucywg
MSwgMjIpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRUcmFuc2l0aW9uLCBEaWRUcmFu
c2l0aW9uLCAxLCAyMyk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHN0YXRpY0Z1bmN0aW9u
c1JlaWZpZWQsIFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQsIDEsIDI0KTsKICAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgaGFzUmFyZURhdGEsIEhhc1JhcmVEYXRhLCAxLCAyNSk7CisgICAgREVGSU5F
X0JJVEZJRUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRXYXRjaEludGVy
bmFsUHJvcGVydGllcywgMSwgMjYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CkBAIC00MjEsNyArNDM4LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZShWTSYsIGNvbnN0IFN0cnVjdHVyZSopOwogICAgIAotICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVJbXBsKFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVj
dHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZz
ZXQmKTsKIAogICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIHN0cnVjdHVyZSB0aGF0IGhhcyBh
IHVzYWJsZSBwcm9wZXJ0eSB0YWJsZSwgdGhhdCBwcm9wZXJ0eSB0YWJsZSwKICAgICAvLyBhbmQg
dGhlIGxpc3Qgb2Ygc3RydWN0dXJlcyB0aGF0IHdlIHZpc2l0ZWQgYmVmb3JlIHdlIGdvdCB0byBp
dC4gSWYgaXQgcmV0dXJucyBhCkBAIC00MzEsMTkgKzQ0OCwxNiBAQCBwcml2YXRlOgogICAgIAog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1
cmUqLCBEaWN0aW9uYXJ5S2luZCk7CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBwdXRTcGVjaWZpY1Zh
bHVlKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNp
ZmljVmFsdWUpOworICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFt
ZSk7CiAKICAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXImLCBWTSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0Nv
bnNpc3RlbmN5KCk7CiAKLSAgICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlO
YW1lKTsKLSAgICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhWTSYpOwotCiAgICAgV3JpdGVC
YXJyaWVyPFByb3BlcnR5VGFibGU+JiBwcm9wZXJ0eVRhYmxlKCk7Ci0gICAgUHJvcGVydHlUYWJs
ZSogdGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mLCBTdHJ1Y3R1cmUqIG93bmVy
KTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZShWTSYsIFN0cnVjdHVyZSog
b3duZXIpOwotICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhW
TSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKFZNJik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5
VGFibGUoVk0mKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlN
YXAoVk0mKTsKICAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShWTSYg
dm0sIERlZmVyR0MmKQogICAgIHsKQEAgLTUwMywxMiArNTE3LDEyIEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGFsbG9jYXRlUmFyZURhdGEoVk0mKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0V2F0
Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc19t
YXhUcmFuc2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5z
aXRpb25MZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIAotICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwotICAgIAogICAgIC8v
IFRoZXNlIG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSAnU3RydWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAgICBTdHJ1Y3R1cmVJ
REJsb2IgbV9ibG9iOwpAQCAtNTIxLDcgKzUzNSw2IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJy
aWVyPEpTQ2VsbD4gbV9wcmV2aW91c09yUmFyZURhdGE7CiAKICAgICBSZWZQdHI8U3RyaW5nSW1w
bD4gbV9uYW1lSW5QcmV2aW91czsKLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3NwZWNpZmlj
VmFsdWVJblByZXZpb3VzOwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSArMTAyLDcgQEAgaW5s
aW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJgogaW5saW5lIFByb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiB2bSwgU3RyaW5nSW1wbCogdWlkKQog
ewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNW
YWx1ZUlnbm9yZWQ7Ci0gICAgcmV0dXJuIGdldENvbmN1cnJlbnRseSgKLSAgICAgICAgdm0sIHVp
ZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWVJZ25vcmVkKTsKKyAgICByZXR1cm4g
Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkKTsKIH0KIAogaW5saW5l
IGJvb2wgU3RydWN0dXJlOjpoYXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNv
bnN0CkBAIC0yMjMsNiArMjIxLDMxIEBAIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFByb3Bl
cnR5VGFibGUKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogfQogCitpbmxpbmUg
dm9pZCBTdHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Cit7CisgICAgaWYgKExJS0VMWSghaGFzUmFyZURhdGEoKSkpCisgICAgICAgIHJldHVybjsKKyAg
ICBTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSByYXJlRGF0
YSgpLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYgKExJS0VMWSgh
bWFwKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1hcC0+Z2V0
KG9mZnNldCk7CisgICAgaWYgKExJS0VMWSghc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHNl
dC0+ZmlyZUFsbCgiUHJvcGVydHkgZGlkIGdldCByZXBsYWNlZCIpOworfQorCitpbmxpbmUgV2F0
Y2hwb2ludFNldCogU3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
bV9sb2NrKTsKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIFN0cnVjdHVyZVJhcmVEYXRhOjpQcm9w
ZXJ0eVdhdGNocG9pbnRNYXAqIG1hcCA9IHJhcmVEYXRhKCktPm1fcmVwbGFjZW1lbnRXYXRjaHBv
aW50U2V0cy5nZXQoKTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIG1hcC0+Z2V0KG9mZnNldCk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1
Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAogewogICAgIFByb3BlcnR5VGFi
bGUqIHByb3BlcnR5VGFibGUgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEu
Y3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDExIEBAIFN0
cnVjdHVyZVJhcmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3IKICAgICByZXR1cm4gcmFyZURh
dGE7CiB9CiAKK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQor
eworICAgIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCktPlN0cnVjdHVyZVJh
cmVEYXRhOjp+U3RydWN0dXJlUmFyZURhdGEoKTsKK30KKwogU3RydWN0dXJlUmFyZURhdGE6OlN0
cnVjdHVyZVJhcmVEYXRhKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cykKICAgICA6IEpTQ2Vs
bCh2bSwgdm0uc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJl
dmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDbGFz
c0luZm8uaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisj
aW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQwLDYg
KzQxLDEwIEBAIGNsYXNzIFN0cnVjdHVyZVJhcmVEYXRhIDogcHVibGljIEpTQ2VsbCAKIHB1Ymxp
YzoKICAgICBzdGF0aWMgU3RydWN0dXJlUmFyZURhdGEqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSop
OwogCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRp
YyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVT
dHJ1Y3R1cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKQEAgLTUz
LDEwICs1OCwxMiBAQCBwdWJsaWM6CiAKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVt
ZXJhdGlvbkNhY2hlKCk7CiAgICAgdm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgY29uc3Qg
U3RydWN0dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpOwotCisgICAg
CiAgICAgREVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
U3RydWN0dXJlOworICAgIAogICAgIFN0cnVjdHVyZVJhcmVEYXRhKFZNJiwgU3RydWN0dXJlKik7
CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNW
aXNpdENoaWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKQEAgLTY0LDYgKzcxLDkgQEAg
cHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwogICAgIFdy
aXRlQmFycmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdyaXRlQmFy
cmllcjxKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7CisgICAgCisg
ICAgdHlwZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBSZWZQdHI8V2F0Y2hwb2ludFNldD4s
IFdURjo6SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhh
c2hUcmFpdHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9wZXJ0eVdhdGNocG9pbnRNYXA7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFByb3BlcnR5V2F0Y2hwb2ludE1hcD4gbV9yZXBsYWNlbWVudFdhdGNocG9p
bnRTZXRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0
YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgaWYgKHAp
CisgICAgICAgIE1hdGggPSB7c2luOiBmdW5jdGlvbigpIHsgcmV0dXJuIDQyOyB9LCBQSTogNDMs
IGFiczogTWF0aC5hYnN9OworfQorCitub0lubGluZShmb28pOworCisoZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIG4gPSAxMDAwMDA7CisgICAgdmFyIG0gPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZm9vKGkgPT0gbiAt
IG0pOworICAgICAgICByZXN1bHQgKz0gTWF0aC5zaW4oTWF0aC5QSSk7CisgICAgfQorICAgIGlm
IChNYXRoLmFicyhyZXN1bHQgLSBtICogNDIpID4gMWUtOCkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1wcm9w
ZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MiBAQAordmFyIG8gPSB7Zjp7Zjp7Zjp7Zjp7Zjp7Zjp7Zjo0Mn19fX19fX07CisKK2Z1bmN0aW9u
IGZvbyhwKSB7CisgICAgaWYgKHApCisgICAgICAgIG8uZi5mLmYuZi5mLmYgPSB7Zjo1M307Cit9
CisKK25vSW5saW5lKGZvbyk7CisKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgbiA9IDEwMDAwMDsK
KyAgICB2YXIgbSA9IDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICAKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBmb28oaSA9PSBuIC0gbSk7CisgICAgICAg
IHJlc3VsdCArPSBvLmYuZi5mLmYuZi5mLmY7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQg
IT0gKG4gLSBtKSAqIDQyICsgbSAqIDUzKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7Cit9KSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRo
ZW4taW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ppdC1jYWNoZS1wb2x5LXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZvbGQt
dGhlbi1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1m
b2xkLXRoZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACit2
YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHAsIG8sIHYpIHsKKyAgICBpZiAocCkKKyAg
ICAgICAgby5mID0gdjsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBvLmY7Cit9
CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDEwOyArK2kpCisgICAgZm9vKGZhbHNlKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytp
KQorICAgIGZvbyh0cnVlLCB7fSwgNDIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kp
CisgICAgZm9vKHRydWUsIG8sIDQyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsr
aSkgeworICAgIHZhciByZXN1bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK2Zvbyh0cnVl
LCBvLCA1Myk7Cit2YXIgcmVzdWx0ID0gYmFyKCk7CitpZiAocmVzdWx0ICE9IDUzKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUt
Z2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQt
YW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAg
QEAKK3ZhciBvID0ge2Y6NDJ9OworCitmdW5jdGlvbiBmb28ocCwgdikgeworICAgIGlmIChwKQor
ICAgICAgICBvLmYgPSB2OworfQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIG8uZjsK
K30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTA7ICsraSkKKyAgICBmb28oZmFsc2UpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyAr
K2kpCisgICAgZm9vKHRydWUsIDQyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsr
aSkgeworICAgIHZhciByZXN1bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK2Zvbyh0cnVl
LCA1Myk7Cit2YXIgcmVzdWx0ID0gYmFyKCk7CitpZiAocmVzdWx0ICE9IDUzKQorICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdh
dGNocG9pbnQtaW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9pbnQt
aW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3Mvaml0LXB1dC10by1zY29wZS1nbG9iYWwtY2FjaGUtd2F0Y2hwb2ludC1pbnZhbGlk
YXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIGZvbyhwLCB2
KSB7CisgICAgaWYgKHApCisgICAgICAgIGdsb2JhbCA9IHY7Cit9CisKK2Z1bmN0aW9uIGJhcigp
IHsKKyAgICByZXR1cm4gZ2xvYmFsOworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFy
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgIGZvbyhmYWxzZSk7CisKK3Zh
ciB2YWx1ZSA9IDQyOworZm9vKHRydWUsIHZhbHVlKTsKK3ZhciBuID0gMTAwMDAwOwordmFyIG0g
PSAxMDA7Citmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgIGlmIChpID09IG4gLSBt
KQorICAgICAgICBmb28odHJ1ZSwgdmFsdWUgPSA1Myk7CisgICAgdmFyIHJlc3VsdCA9IGJhcigp
OworICAgIGlmIChyZXN1bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93ICJFcnJvcjogb24gaXRl
cmF0aW9uICIgKyBpICsgIiBnb3Q6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQt
YW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQtY2FjaGUtcmVwbGFjZS10aGVuLWNhY2hlLWdldC1h
bmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQt
YW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYg
QEAKK3ZhciBvID0ge2Y6NDJ9OworCitmdW5jdGlvbiBmb28odikgeworICAgIG8uZiA9IHY7Cit9
CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28p
Oworbm9JbmxpbmUoYmFyKTsKKworZm9vKDQyKTsKK2Zvbyg0Mik7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJl
c3VsdCAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfQorCitmb28oNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1MykK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUtZ2xv
YmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LXB1dC10by1zY29wZS1nbG9iYWwtY2Fj
aGUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdh
dGNocG9pbnQtaW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBACitm
dW5jdGlvbiBmb28odikgeworICAgIGdsb2JhbCA9IHY7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsK
KyAgICByZXR1cm4gZ2xvYmFsOworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsK
KwordmFyIHZhbHVlID0gNDI7Citmb28odmFsdWUpOwordmFyIG4gPSAxMDAwMDA7Cit2YXIgbSA9
IDEwMDsKK2ZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgaWYgKGkgPT0gbiAtIG0p
CisgICAgICAgIGZvbyh2YWx1ZSA9IDUzKTsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAg
aWYgKHJlc3VsdCAhPSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBvbiBpdGVyYXRpb24g
IiArIGkgKyAiIGdvdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvcmVwZWF0LXB1dC10by1zY29wZS1nbG9iYWwtd2l0aC1zYW1lLXZhbHVl
LXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12
YWx1ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgt
c2FtZS12YWx1ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMyBAQAorZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBnbG9iYWwgPSB2OworfQorCitmdW5j
dGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25v
SW5saW5lKGJhcik7CisKK3ZhciB2YWx1ZSA9IDQyOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsg
KytpKQorICAgIGZvbyh2YWx1ZSk7Cit2YXIgbiA9IDEwMDAwMDsKK3ZhciBtID0gMTAwOworZm9y
ICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICBpZiAoaSA9PSBuIC0gbSkKKyAgICAgICAg
Zm9vKHZhbHVlID0gNTMpOworICAgIHZhciByZXN1bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0
ICE9IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IG9uIGl0ZXJhdGlvbiAiICsgaSArICIg
Z290OiAiICsgcmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODA4KQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDct
MDQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBbZnRsb3B0XSBJ
bmZlciBpbW11dGFibGUgb2JqZWN0IHByb3BlcnRpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDU2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9i
YWwtcHJvcGVydHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2lu
ZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJv
cGVydHkuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVy
LWNvbnN0YW50LXByb3BlcnR5LmpzOiBBZGRlZC4KKwogMjAxNC0wNi0zMCAgTWFyayBIYWhuZW5i
ZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIHIxNjkxMjEgZnJv
bSB0cnVuay4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xv
YmFsLXByb3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1w
cm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNS
ZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eQorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFu
dC1nbG9iYWwtcHJvcGVydHkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jb25z
dGFudC1nbG9iYWwtcHJvcGVydHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFu
dC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0
YW50LXByb3BlcnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NU
WVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQt
cHJvcGVydHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lu
ZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0
eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2
YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgewor
ICAgICAgICByZXN1bHQgKz0gTWF0aC5zaW4oTWF0aC5QSSk7CisgICAgfQorICAgIGlmIChNYXRo
LmFicyhyZXN1bHQpID4gMWUtOCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAi
ICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29u
c3RhbnQtcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAordmFyIG8g
PSB7Zjp7Zjp7Zjp7Zjp7Zjp7Zjp7Zjo0Mn19fX19fX07CisoZnVuY3Rpb24oKSB7CisgICAgdmFy
IG4gPSAxMDAwMDAwOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgbjsgKytpKQorICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIAorICAg
IGlmIChyZXN1bHQgIT0gbiAqIDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Cit9KSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234429</attachid>
            <date>2014-07-04 19:40:34 -0700</date>
            <delta_ts>2014-07-04 22:27:27 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>135399</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNSBA
QAorMjAxNC0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEluZmVyIGltbXV0YWJsZSBvYmplY3QgcHJvcGVydGllcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NTY3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgd2F5IG9mIGluZmVycmluZyBpbW11dGFibGUgb2JqZWN0IHByb3BlcnRpZXMuIEEg
cHJvcGVydHkgaXMgc2FpZCB0bworICAgICAgICBiZSBpbW11dGFibGUgaWYgYWZ0ZXIgaXRzIGNy
ZWF0aW9uIChpLmUuIHRoZSB0cmFuc2l0aW9uIHRoYXQgY3JlYXRlcyBpdCksIHdlIG5ldmVyCisg
ICAgICAgIG92ZXJ3cml0ZSBpdCAoaS5lLiByZXBsYWNlIGl0KSBvciBkZWxldGUgaXQuIEltbXV0
YWJpbGl0eSBpcyBhIHByb3BlcnR5IG9mIGFuICJvd24KKyAgICAgICAgcHJvcGVydHkiIC0gc28g
aWYgd2Ugc2F5IHRoYXQgImYiIGlzIGltbXV0YWJsZSBhdCAibyIgdGhlbiB3ZSBhcmUgaW1wbHlp
bmcgdGhhdCAibyIgaGFzICJmIgorICAgICAgICBkaXJlY3RseSBhbmQgbm90IG9uIGEgcHJvdG90
eXBlLiBJbW11dGFiaWxpdHkgY2FuIGJlIHVzZWQgdG8gY29uc3RhbnQtZm9sZCBhY2Nlc3NlcyB0
bworICAgICAgICBvYmplY3RzIGF0IERGRy10aW1lLiBUaGUgREZHIG5lZWRzIHRvIHByb3ZlIHRo
ZSBmb2xsb3dpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUgYWNjZXNzOgorICAgICAgICAKKyAgICAg
ICAgLSBUaGUgYmFzZSBvZiB0aGUgYWNjZXNzIG11c3QgYmUgYSBjb25zdGFudCBvYmplY3QgcG9p
bnRlci4KKyAgICAgICAgCisgICAgICAgIC0gQSBjaGVjayAob3Igd2F0Y2hwb2ludCkgbXVzdCBo
YXZlIGJlZW4gZW1pdHRlZCBwcm92aW5nIHRoYXQgdGhlIG9iamVjdCBoYXMgYSBzdHJ1Y3R1cmUK
KyAgICAgICAgICB0aGF0IGFsbG93cyBsb2FkaW5nIHRoZSBwcm9wZXJ0eSBpbiBxdWVzdGlvbi4K
KyAgICAgICAgCisgICAgICAgIC0gVGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0IG9mIHRo
ZSBwcm9wZXJ0eSBpbiB0aGUgc3RydWN0dXJlKHMpIHRoYXQgd2UndmUgcHJvdmVuIHRoZQorICAg
ICAgICAgIG9iamVjdCB0byBoYXZlIGlzIChhcmUpIHN0aWxsIHZhbGlkIGFuZCB3ZSBhZGQgYSB3
YXRjaHBvaW50IHRvIGl0ICh0aGVtKSBsYXppbHkuCisgICAgICAgIAorICAgICAgICBUaGUgcmVw
bGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQgaXMgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSB0aGF0IGFu
eSBhY2Nlc3MgdG8gdGhlIHByb3BlcnR5IGlzCisgICAgICAgIGNhY2hlZC4gQSBwdXQgY2FjaGUg
d2lsbCBjcmVhdGUsIGFuZCBpbW1lZGlhdGVseSBpbnZhbGlkYXRlLCB0aGUgd2F0Y2hwb2ludCBz
ZXQuIEEgZ2V0IGNhY2hlCisgICAgICAgIHdpbGwgY3JlYXRlIHRoZSB3YXRjaHBvaW50IHNldCBh
bmQgbWFrZSBpdCBzdGFydCB3YXRjaGluZy4gQW55IG5vbi1jYWNoZWQgcHV0IGFjY2VzcyB3aWxs
CisgICAgICAgIGludmFsaWRhdGUgdGhlIHdhdGNocG9pbnQgc2V0IGlmIG9uZSBoYWQgYmVlbiBj
cmVhdGVkLgorICAgICAgICAKKyAgICAgICAgVGhpcyBhcHByb2FjaCBhdm9pZHMgY3JlYXRpbmcg
cmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXRzIHVudGlsIHRoZXkgYXJlIGtub3duIHRvIGJlCisg
ICAgICAgIG5lY2Vzc2FyeS4gVGhlIG51bWJlciBvZiBzdWNoIHNldHMgYXQgYW55IHRpbWUgaXMg
YXN5bXB0b3RpY2FsbHkgYm91bmRlZCBieSB0aGUgbnVtYmVyIG9mCisgICAgICAgIGlubGluZSBj
YWNoZXMuIFNvLCBmb3IgZXhhbXBsZSwgZGljdGlvbmFyeSBwcm9wZXJ0aWVzIHdpbGwgdHlwaWNh
bGx5IG5vdCBoYXZlIHRoZXNlCisgICAgICAgIHdhdGNocG9pbnQgc2V0cy4KKyAgICAgICAgCisg
ICAgICAgIFRoaXMgaW5mZXJlbmNlIGNvbXBsZXRlbHkgc3Vic3VtZXMgdGhlIHByZXZpb3VzbHkg
InNwZWNpZmljVmFsdWUiIGNvbnN0YW50IGluZmVyZW5jZS4gVGhhdAorICAgICAgICBhcHByb2Fj
aCByZXF1aXJlZCBjcmVhdGluZyBuZXcgc3RydWN0dXJlcywgd2hpY2ggdGhpcyBvbmUgZG9lcyBu
b3QuIEl0IGFsc28gZGlkbid0IHdvcmsgZm9yCisgICAgICAgIGFueSBwcm9wZXJ0eSB2YWx1ZXMg
dGhhdCB3ZXJlbid0IGVhZ2VybHkgcmVjb2duaXplZCBhcyBjYW5kaWRhdGVzIGZvciBjb25zdGFu
dCBpbmZlcmVuY2UuCisgICAgICAgIFRoZXJlZm9yZSwgdGhpcyBwYXRjaCBhbHNvIHJlbW92ZXMg
dGhlIG9sZCBzcGVjaWZpY1ZhbHVlIGNvbnN0YW50IGluZmVyZW5jZS4KKyAgICAgICAgCisgICAg
ICAgIFRoaXMgaXMgYSBzcGVlZC11cCBvbiBldmVyeXRoaW5nLiBkYXRlLWZvcm1hdC14cGFyYiBh
bmQgYm90aCBTdW5TcGlkZXIvcmF5dHJhY2UgYW5kCisgICAgICAgIFY4L3JheXRyYWNlIHNlZW0g
dG8gYmUgdGhlIGJpZ2dlc3Qgd2lubmVycyBhbW9uZyB0aGUgbWFjcm9iZW5jaG1hcmtzOyB0aGV5
IHNlZSA+NSUKKyAgICAgICAgc3BlZWQtdXBzLiBNYW55IG9mIG91ciBtaWNyb2JlbmNobWFya3Mg
c2VlIHZlcnkgbGFyZ2UgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLCBldmVuIDgwJSBpbgorICAg
ICAgICBvbmUgY2FzZS4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAg
KiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1
czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1
dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcDoKKyAgICAgICAgKEpTQzo6
R2V0QnlJZFZhcmlhbnQ6OkdldEJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZh
cmlhbnQ6Om9wZXJhdG9yPSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjphdHRlbXB0
VG9NZXJnZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToK
KyAgICAgICAgKiBieXRlY29kZS9HZXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpHZXRC
eUlkVmFyaWFudDo6YWx0ZXJuYXRlQmFzZSk6CisgICAgICAgIChKU0M6OkdldEJ5SWRWYXJpYW50
OjpzcGVjaWZpY1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZv
KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICog
Ynl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFu
dDo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OnNldHRlcik6Cisg
ICAgICAgIChKU0M6OlB1dEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKiBi
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5oOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6
c3BlY2lmaWNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5j
cHA6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KToKKyAgICAgICAg
KEpTQzo6V2F0Y2hwb2ludFNldDo6ZmlyZUFsbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvV2F0Y2hwb2ludC5oOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpmaXJlQWxsKToK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0
ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6
OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRG
b2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNl
OjplbWl0R2V0QnlPZmZzZXQpOgorICAgICAgICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjppc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUp
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmNhbk9wdGltaXplU3RyaW5nT2JqZWN0
QWNjZXNzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICog
ZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OldhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2U6OnJ1bik6CisgICAgICAgICog
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZU11bHRpR2V0QnlPZmZzZXQpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRp
b25zLmNwcDoKKyAgICAgICAgKiBqaXQvUmVwYXRjaC5jcHA6CisgICAgICAgIChKU0M6OnJlcGF0
Y2hCeUlkU2VsZkFjY2Vzcyk6CisgICAgICAgIChKU0M6OmdlbmVyYXRlQnlJZFN0dWIpOgorICAg
ICAgICAoSlNDOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjp0cnlDYWNoZVB1dEJ5
SUQpOgorICAgICAgICAoSlNDOjp0cnlCdWlsZFB1dEJ5SWRMaXN0KToKKyAgICAgICAgKiBsbGlu
dC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BB
VEhfREVDTCk6CisgICAgICAgIChKU0M6OkxMSW50OjpwdXRUb1Njb3BlQ29tbW9uKToKKyAgICAg
ICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAoSlNDOjpDb21tb25TbG93
UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbCk6CisgICAgICAgICogcnVudGltZS9JbnRl
bmRlZFN0cnVjdHVyZUNoYWluLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbjo6bWF5SW50ZXJjZXB0U3RvcmVUbyk6CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVl
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6cHV0VG9QcmltaXRpdmUpOgorICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdE5vbklu
ZGV4QWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6Z2V0
Q2FsbGFibGVPYmplY3RTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Omdl
dFByb3BlcnR5U3BlY2lmaWNWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU09i
amVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SlNPYmplY3Q6OmdldERpcmVjdE9mZnNldCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpp
bmxpbmVHZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGly
ZWN0SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdCk6CisgICAgICAgIChKU0M6OkpT
T2JqZWN0OjpwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OmdldENh
bGxhYmxlT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pTU2NvcGUuY3BwOgor
ICAgICAgICAoSlNDOjphYnN0cmFjdEFjY2Vzcyk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eU1hcEVudHJ5OjpQcm9wZXJ0
eU1hcEVudHJ5KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y29weSk6CisgICAgICAg
ICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJs
ZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9F
eGlzdGluZ1N0cnVjdHVyZUltcGwpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjphbGxvY2F0ZVJhcmVEYXRhKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjplbnN1cmVQ
cm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQpOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXMpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmdldENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Z2V0KToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50
ZXJjZXB0U3RvcmVUbyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkp
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRp
ZXNJZk5lY2Vzc2FyeUZvckVudGlyZUNoYWluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmRpc2FibGVTcGVjaWZpY0Z1bmN0aW9uVHJhY2tpbmcpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmdldENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlkUmVw
bGFjZVByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2Vt
ZW50V2F0Y2hwb2ludFNldCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVJhcmVEYXRhOjpkZXN0cm95KToKKyAgICAgICAg
KiBydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2lu
ZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChmb28uTWF0
aC5zaW4pOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvaW5mZXItY29u
c3RhbnQtcHJvcGVydHkuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9sZC10
aGVuLWludmFsaWRhdGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6
CisgICAgICAgICogdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAg
ICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvaml0LXB1dC10by1zY29wZS1nbG9i
YWwtY2FjaGUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvbyk6
CisgICAgICAgIChiYXIpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBs
YWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qczogQWRkZWQuCisg
ICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbGxp
bnQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanM6IEFk
ZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogdGVzdHMvc3Ry
ZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12YWx1ZS13YXRjaHBvaW50
LWludmFsaWRhdGUuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisK
IDIwMTQtMDctMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBb
ZnRsb3B0XSBBbGxvY2F0ZSBhIG5ldyBHZXR0ZXJTZXR0ZXIgaWYgd2UgY2hhbmdlIHRoZSB2YWx1
ZSBvZiBhbnkgb2YgaXRzIGVudHJpZXMgb3RoZXIgdGhhbiB3aGVuIHRoZXkgd2VyZSBwcmV2aW91
c2x5IG51bGwsIHNvIHRoYXQgaWYgd2UgY29uc3RhbnQtaW5mZXIgYW4gYWNjZXNzb3Igc2xvdCB0
aGVuIHdlIGltbWVkaWF0ZWx5IGdldCB0aGUgZnVuY3Rpb24gY29uc3RhbnQgZm9yIGZyZWUKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0
YXR1cy5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db21wbGV4R2V0U3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsNiBA
QCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1CiAgICAgQ29tcGxleEdl
dFN0YXR1cyByZXN1bHQ7CiAgICAgcmVzdWx0Lm1fa2luZCA9IElubGluZWFibGU7CiAgICAgCi0g
ICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgIAogICAgIGlmIChjaGFpbikgewogICAgICAg
ICByZXN1bHQubV9jaGFpbiA9IGFkb3B0UmVmKG5ldyBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKAog
ICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywgaGVhZFN0cnVjdHVyZSwgY2hhaW4sIGNoYWluQ291
bnQpKTsKQEAgLTY1LDE4ICs2MywxMiBAQCBDb21wbGV4R2V0U3RhdHVzIENvbXBsZXhHZXRTdGF0
dXM6OmNvbXB1CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY3VycmVudE9iamVjdCwgY3VycmVudE9i
amVjdCk7CiAgICAgICAgIAogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjdXJyZW50U3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwg
dWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAgaWYgKGN1
cnJlbnRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1
ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQubV9h
dHRyaWJ1dGVzKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBoZWFk
U3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+
dm0oKSwgdWlkLCByZXN1bHQubV9hdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICAgICAg
aWYgKGhlYWRTdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgc3BlY2lmaWNW
YWx1ZSA9IDA7CisgICAgICAgICAgICAqcHJvZmlsZWRCbG9jay0+dm0oKSwgdWlkLCByZXN1bHQu
bV9hdHRyaWJ1dGVzKTsKICAgICB9CiAgICAgCi0gICAgcmVzdWx0Lm1fc3BlY2lmaWNWYWx1ZSA9
IHNwZWNpZmljVmFsdWU7Ci0gICAgCiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHJlc3VsdC5tX29m
ZnNldCkpCiAgICAgICAgIHJldHVybiB0YWtlc1Nsb3dQYXRoKCk7CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCShyZXZp
c2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE1ICs4NSwxMiBAQCBHZXRCeUlkU3RhdHVz
IEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGcm9tCiAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVz
KE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVk
OwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZt
KCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWUpOwotICAgIGlmIChzdHJ1
Y3R1cmUtPmlzRGljdGlvbmFyeSgpKQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKKyAgICAg
ICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgIGlm
ICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhO
b0luZm9ybWF0aW9uLCBmYWxzZSk7CiAgICAgCi0gICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoU2lt
cGxlLCBmYWxzZSwgR2V0QnlJZFZhcmlhbnQoU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIG9mZnNl
dCwgc3BlY2lmaWNWYWx1ZSkpOworICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwgZmFs
c2UsIEdldEJ5SWRWYXJpYW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQpKTsKICNl
bHNlCiAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwogI2Vu
ZGlmCkBAIC0xNTYsMTggKzE1MywxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTCiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zvcklt
cHVyZVByb3BlcnR5KCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0
aFN0YXRlLCB0cnVlKTsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlc0lnbm9yZWQ7Ci0gICAg
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKICAgICAgICAgR2V0QnlJZFZhcmlhbnQgdmFyaWFu
dDsKICAgICAgICAgdmFyaWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5
KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgYXR0cmlidXRlc0lnbm9y
ZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVp
ZCwgYXR0cmlidXRlc0lnbm9yZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFyaWFu
dC5tX29mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhzbG93UGF0aFN0
YXRlLCB0cnVlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKQotICAgICAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0gICAgICAgIAogICAgICAgICB2
YXJpYW50Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOwotICAgICAgICB2YXJpYW50Lm1f
c3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGJvb2wgZGlk
QXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CiAgICAgICAgIEFTU0VSVF9V
TlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MjEyLDggKzIwNCw3IEBAIEdldEJ5SWRTdGF0dXMgR2V0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQgdmFyaWFudCgKLSAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlU2V0KHN0
cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCi0gICAgICAgICAgICAgICAgICAg
IGNvbXBsZXhHZXRTdGF0dXMuc3BlY2lmaWNWYWx1ZSgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWlu
KCksCisgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4
R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCiAgICAgICAgICAg
ICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cykpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCkBAIC0y
OTcsMTYgKzI4OCwxMyBAQCBHZXRCeUlkU3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3Io
CiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAg
ICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lm
aWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRD
b25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAg
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1
aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBJdCdzIHBy
b2JhYmx5IGEgcHJvdG90eXBlIGxvb2t1cC4gR2l2ZSB1cCBvbiBsaWZlIGZvciBub3csIGV2ZW4g
dGhvdWdoIHdlIGNvdWxkIHRvdGFsbHkgYmUgd2F5IHNtYXJ0ZXIgYWJvdXQgaXQuCiAgICAgICAg
IGlmIChhdHRyaWJ1dGVzICYgQWNjZXNzb3IpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJZFN0
YXR1cyhNYWtlc0NhbGxzKTsgLy8gV2UgY291bGQgYmUgc21hcnRlciBoZXJlLCBsaWtlIHN0cmVu
Z2h0LXJlZHVjaW5nIHRoaXMgdG8gYSBDYWxsLgotICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1Y3R1cmUs
IG9mZnNldCwgc3BlY2lmaWNWYWx1ZSkpKQorICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KEdldEJ5SWRWYXJpYW50KHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAgICAgICAgICByZXR1
cm4gR2V0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFudC5jcHAJKHJl
dmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE3ICszMywxNSBAQAogbmFtZXNwYWNl
IEpTQyB7CiAKIEdldEJ5SWRWYXJpYW50OjpHZXRCeUlkVmFyaWFudCgKLSAgICBjb25zdCBTdHJ1
Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNw
ZWNpZmljVmFsdWUsCisgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCwKICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cykKICAgICA6
IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKICAgICAsIG1fYWx0ZXJuYXRlQmFzZShudWxs
cHRyKQotICAgICwgbV9zcGVjaWZpY1ZhbHVlKHNwZWNpZmljVmFsdWUpCiAgICAgLCBtX29mZnNl
dChvZmZzZXQpCiAgICAgLCBtX2NhbGxMaW5rU3RhdHVzKHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1
cykpCiB7CiAgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7CiAgICAgICAgIEFTU0VSVChv
ZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7Ci0gICAgICAgIEFTU0VSVCghc3BlY2lmaWNWYWx1ZSk7
CiAgICAgICAgIEFTU0VSVCghY2hhaW4pOwogICAgIH0KICAgICAKQEAgLTY2LDcgKzY0LDYgQEAg
R2V0QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIG1fc3RydWN0dXJl
U2V0ID0gb3RoZXIubV9zdHJ1Y3R1cmVTZXQ7CiAgICAgbV9jb25zdGFudENoZWNrcyA9IG90aGVy
Lm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNlID0gb3RoZXIubV9hbHRlcm5h
dGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1fc3BlY2lmaWNWYWx1ZTsKICAg
ICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChvdGhlci5tX2NhbGxMaW5rU3Rh
dHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjptYWtlX3VuaXF1ZTxDYWxsTGlu
a1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAtNzUsNiArNzIsMTYgQEAgR2V0
QnlJZFZhcmlhbnQmIEdldEJ5SWRWYXJpYW50OjpvcGVyYXRvcgogICAgIHJldHVybiAqdGhpczsK
IH0KIAorU3RydWN0dXJlU2V0IEdldEJ5SWRWYXJpYW50OjpiYXNlU3RydWN0dXJlKCkgY29uc3QK
K3sKKyAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZVNl
dCgpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29u
c3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0
dXJlKTsKKyAgICByZXR1cm4gc3RydWN0dXJlOworfQorCiBib29sIEdldEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zdCBHZXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1f
YWx0ZXJuYXRlQmFzZSAhPSBvdGhlci5tX2FsdGVybmF0ZUJhc2UpCkBAIC04Niw5ICs5Myw2IEBA
IGJvb2wgR2V0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnMKICAgICBpZiAoIWFyZUNv
bXBhdGlibGUobV9jb25zdGFudENoZWNrcywgb3RoZXIubV9jb25zdGFudENoZWNrcykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBpZiAobV9zcGVjaWZpY1ZhbHVlICE9IG90aGVy
Lm1fc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgbV9zcGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpOwot
CiAgICAgbWVyZ2VJbnRvKG90aGVyLm1fY29uc3RhbnRDaGVja3MsIG1fY29uc3RhbnRDaGVja3Mp
OwogICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKICAgICAK
QEAgLTExMiw4ICsxMTYsNiBAQCB2b2lkIEdldEJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFBy
aW50CiAgICAgICAgICJbIiwgbGlzdER1bXBJbkNvbnRleHQobV9jb25zdGFudENoZWNrcywgY29u
dGV4dCksICJdIik7CiAgICAgaWYgKG1fYWx0ZXJuYXRlQmFzZSkKICAgICAgICAgb3V0LnByaW50
KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBpbkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2Up
LCBjb250ZXh0KSk7Ci0gICAgaWYgKHNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgb3V0LnByaW50
KCIsIHNwZWNpZmljVmFsdWUgPSAiLCBpbkNvbnRleHQoc3BlY2lmaWNWYWx1ZSgpLCBjb250ZXh0
KSk7CiAgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKICAgICBpZiAobV9j
YWxsTGlua1N0YXR1cykKICAgICAgICAgb3V0LnByaW50KCIsIGNhbGwgPSAiLCAqbV9jYWxsTGlu
a1N0YXR1cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZh
cmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0
QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDcg
QEAgc3RydWN0IER1bXBDb250ZXh0OwogY2xhc3MgR2V0QnlJZFZhcmlhbnQgewogcHVibGljOgog
ICAgIEdldEJ5SWRWYXJpYW50KAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCA9IFN0cnVjdHVyZVNldCgpLAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBp
bnZhbGlkT2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBKU1ZhbHVlKCksCisgICAgICAg
IGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0ID0gU3RydWN0dXJlU2V0KCksIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQsCiAgICAgICAgIGNvbnN0IEludGVuZGVk
U3RydWN0dXJlQ2hhaW4qIGNoYWluID0gbnVsbHB0ciwKICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PENhbGxMaW5rU3RhdHVzPiBjYWxsTGlua1N0YXR1cyA9IG51bGxwdHIpOwogICAgIApAQCAtNTgs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJl
dHVybiBtX3N0cnVjdHVyZVNldDsgfQogICAgIGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tW
ZWN0b3ImIGNvbnN0YW50Q2hlY2tzKCkgY29uc3QgeyByZXR1cm4gbV9jb25zdGFudENoZWNrczsg
fQogICAgIEpTT2JqZWN0KiBhbHRlcm5hdGVCYXNlKCkgY29uc3QgeyByZXR1cm4gbV9hbHRlcm5h
dGVCYXNlOyB9Ci0gICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9z
cGVjaWZpY1ZhbHVlOyB9CisgICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUoKSBjb25zdDsK
ICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQog
ICAgIENhbGxMaW5rU3RhdHVzKiBjYWxsTGlua1N0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fs
bExpbmtTdGF0dXMuZ2V0KCk7IH0KICAgICAKQEAgLTczLDcgKzcyLDYgQEAgcHJpdmF0ZToKICAg
ICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVj
a1ZlY3RvciBtX2NvbnN0YW50Q2hlY2tzOwogICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7
Ci0gICAgSlNWYWx1ZSBtX3NwZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZz
ZXQ7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVz
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJ
ZFN0YXR1cy5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU0LDggKzI1NCw4
IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvclMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbG9ja2VyLCAqc3R1Yi0+bV9jYWxsTGlua0luZm8sIGNhbGxF
eGl0U2l0ZURhdGEpKTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBQdXRCeUlkVmFyaWFudDo6c2V0dGVyKAotICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0dXJlLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVz
LnNwZWNpZmljVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0
dXMuY2hhaW4oKSwgc3RkOjptb3ZlKGNhbGxMaW5rU3RhdHVzKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3R1cmUsIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksIGNvbXBsZXhHZXRT
dGF0dXMuY2hhaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bW92ZShjYWxsTGlu
a1N0YXR1cykpOwogICAgICAgICAgICAgICAgIH0gfQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpAQCAtMzM0LDE5ICszMzQsMjQgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CiAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgICAg
IEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0g
c3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcywgc3BlY2lmaWNW
YWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29u
Y3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAoaXNWYWxpZE9mZnNl
dChvZmZzZXQpKSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIEN1c3RvbUFjY2Vzc29y
KQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE1ha2VzQ2FsbHMpOwogCiAg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChBY2Nlc3NvciB8IFJlYWRPbmx5KSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKLSAgICAgICAg
ICAgIGlmIChzcGVjaWZpY1ZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0aGUg
UHV0QnlJZCBzbG93IHBhdGggdG8gdmVyaWZ5IHRoYXQgd2UncmUgc3RvcmluZyB0aGUgcmlnaHQg
dmFsdWUgaW50bwotICAgICAgICAgICAgICAgIC8vIHRoZSBzcGVjaWFsaXplZCBzbG90LgorICAg
ICAgICAgICAgCisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiByZXBsYWNlU2V0ID0gc3RydWN0
dXJlLT5wcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChvZmZzZXQpOworICAgICAgICAg
ICAgaWYgKCFyZXBsYWNlU2V0IHx8IHJlcGxhY2VTZXQtPmlzU3RpbGxWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gV2hlbiB0aGlzIGV4ZWN1dGVzLCBpdCdsbCBjcmVhdGUsIGFuZCBmaXJl
LCB0aGlzIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgc2V0LgorICAgICAgICAgICAgICAgIC8vIFRo
YXQgbWVhbnMgdGhhdCAgdGhpcyBoYXMgcHJvYmFibHkgbmV2ZXIgZXhlY3V0ZWQgb3IgdGhhdCBz
b21ldGhpbmcgZmlzaHkgaXMKKyAgICAgICAgICAgICAgICAvLyBnb2luZyBvbi4gQWxzbywgd2Ug
Y2Fubm90IGNyZWF0ZSBvciBmaXJlIHRoZSB3YXRjaHBvaW50IHNldCBmcm9tIHRoZSBjb25jdXJy
ZW50CisgICAgICAgICAgICAgICAgLy8gSklUIHRocmVhZCwgc28gZXZlbiBpZiB3ZSB3YW50ZWQg
dG8gZG8gdGhpcywgd2UnZCBuZWVkIHRvIGhhdmUgYSBsYXp5IHRoaW5neS4KKyAgICAgICAgICAg
ICAgICAvLyBTbywgYmV0dGVyIGxlYXZlIHRoaXMgYWxvbmUgYW5kIHRha2Ugc2xvdyBwYXRoLgog
ICAgICAgICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRW
YXJpYW50KFB1dEJ5SWRWYXJpYW50OjpyZXBsYWNlKHN0cnVjdHVyZSwgb2Zmc2V0KSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKQEAgLTM4NCwyMiArMzg5LDkgQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICB9CiAgICAgCiAgICAgICAgIC8vIFdlIG9ubHkg
b3B0aW1pemUgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIHN0cnVjdHVyZSB0aGF0IHRoZSB0cmFuc2l0
aW9uIGlzIGNhY2hlZCB0by4KLSAgICAgICAgLy8gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGFs
bG93cyB1cyB0byBndWFyZCBhZ2FpbnN0IGEgdHJhbnNpdGlvbiB3aXRoIGEgc3BlY2lmaWMKLSAg
ICAgICAgLy8gdmFsdWUuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgc3Rvcmlu
ZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IHRoaXMgd291bGQgb25seSBiZSBhIHBy
b2JsZW0gaWYKLSAgICAgICAgLy8gICB0aGUgZXhpc3RpbmcgdHJhbnNpdGlvbiBkaWQgaGF2ZSBh
IHNwZWNpZmljIHZhbHVlIGFscmVhZHksIHNpbmNlIGlmIGl0IGRpZG4ndCwKLSAgICAgICAgLy8g
ICB0aGVuIHdlIHdvdWxkIGJlaGF2ZSAiYXMgaWYiIHdlIHdlcmUgbm90IHN0b3JpbmcgYSBzcGVj
aWZpYyB2YWx1ZS4gSWYgaXQgZGlkCi0gICAgICAgIC8vICAgaGF2ZSBhIHNwZWNpZmljIHZhbHVl
LCB0aGVuIHdlJ2xsIGtub3cgLSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgMCBmb3IKLSAgICAgICAg
Ly8gICBzcGVjaWZpY1ZhbHVlIHdpbGwgdGVsbCB1cy4KLSAgICAgICAgLy8KLSAgICAgICAgLy8g
LSBJZiB3ZSdyZSBub3Qgc3RvcmluZyBhIHZhbHVlIHRoYXQgY291bGQgYmUgc3BlY2lmaWM6IGFn
YWluLCB0aGlzIHdvdWxkIG9ubHkgYmUgYQotICAgICAgICAvLyAgIHByb2JsZW0gaWYgdGhlIGV4
aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgd2hpY2ggd2UgY2hl
Y2sgZm9yCi0gICAgICAgIC8vICAgYnkgcGFzc2luZyAwIGZvciB0aGUgc3BlY2lmaWNWYWx1ZS4K
LSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAw
LCAwLCBvZmZzZXQpOworICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBTdHJ1Y3R1cmU6
OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoc3Ry
dWN0dXJlLCB1aWQsIDAsIG9mZnNldCk7CiAgICAgICAgIGlmICghdHJhbnNpdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOyAvLyBUaGlzIG9jY3Vy
cyBpbiBiaXphcnJlIGNhc2VzIG9ubHkuIFNlZSBhYm92ZS4KLSAgICAgICAgQVNTRVJUKCF0cmFu
c2l0aW9uLT50cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSk7CisgICAgICAgICAg
ICByZXR1cm4gUHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgQVNTRVJUKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgCiAgICAgICAgIGJvb2wgZGlkQXBwZW5kID0gcmVz
dWx0LmFwcGVuZFZhcmlhbnQoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDYgQEAgUHV0QnlJZFZhcmlhbnQmIFB1dEJ5SWRWYXJpYW50OjpvcGVyYXRv
cgogICAgIG1fbmV3U3RydWN0dXJlID0gb3RoZXIubV9uZXdTdHJ1Y3R1cmU7CiAgICAgbV9jb25z
dGFudENoZWNrcyA9IG90aGVyLm1fY29uc3RhbnRDaGVja3M7CiAgICAgbV9hbHRlcm5hdGVCYXNl
ID0gb3RoZXIubV9hbHRlcm5hdGVCYXNlOwotICAgIG1fc3BlY2lmaWNWYWx1ZSA9IG90aGVyLm1f
c3BlY2lmaWNWYWx1ZTsKICAgICBtX29mZnNldCA9IG90aGVyLm1fb2Zmc2V0OwogICAgIGlmIChv
dGhlci5tX2NhbGxMaW5rU3RhdHVzKQogICAgICAgICBtX2NhbGxMaW5rU3RhdHVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxDYWxsTGlua1N0YXR1cz4oKm90aGVyLm1fY2FsbExpbmtTdGF0dXMpOwpAQCAt
NzgsNyArNzcsNyBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFyaWFudDo6dHJhbnNpdGlvCiB9
CiAKIFB1dEJ5SWRWYXJpYW50IFB1dEJ5SWRWYXJpYW50OjpzZXR0ZXIoCi0gICAgY29uc3QgU3Ry
dWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVj
aWZpY1ZhbHVlLAorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQsCiAgICAgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5p
cXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiB7CiAgICAgUHV0QnlJZFZh
cmlhbnQgcmVzdWx0OwpAQCAtODksNyArODgsNiBAQCBQdXRCeUlkVmFyaWFudCBQdXRCeUlkVmFy
aWFudDo6c2V0dGVyKAogICAgICAgICByZXN1bHQubV9hbHRlcm5hdGVCYXNlID0gY2hhaW4tPnRl
cm1pbmFsUHJvdG90eXBlKCk7CiAgICAgfQogICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
LSAgICByZXN1bHQubV9zcGVjaWZpY1ZhbHVlID0gc3BlY2lmaWNWYWx1ZTsKICAgICByZXN1bHQu
bV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bW92ZShjYWxsTGlua1N0YXR1cyk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTEzNCw2ICsxMzIsMTggQEAgYm9vbCBQdXRCeUlkVmFyaWFudDo6bWFr
ZXNDYWxscygpIGNvbnN0CiAgICAgcmV0dXJuIGtpbmQoKSA9PSBTZXR0ZXI7CiB9CiAKK1N0cnVj
dHVyZVNldCBQdXRCeUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKGtpbmQoKSA9PSBTZXR0ZXIpOworICAgIAorICAgIGlmICghbV9hbHRlcm5hdGVCYXNlKQor
ICAgICAgICByZXR1cm4gc3RydWN0dXJlKCk7CisgICAgCisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmVGb3IobV9jb25zdGFudENoZWNrcywgbV9hbHRlcm5hdGVCYXNlKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChzdHJ1Y3R1cmUpOworICAgIHJldHVybiBzdHJ1Y3R1cmU7Cit9CisK
IGJvb2wgUHV0QnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdlKGNvbnN0IFB1dEJ5SWRWYXJpYW50
JiBvdGhlcikKIHsKICAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQpCkBAIC0yMjks
OCArMjM5LDYgQEAgdm9pZCBQdXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAg
ICAgICAgICAgbGlzdER1bXBJbkNvbnRleHQoY29uc3RhbnRDaGVja3MoKSwgY29udGV4dCksICJd
Iik7CiAgICAgICAgIGlmIChtX2FsdGVybmF0ZUJhc2UpCiAgICAgICAgICAgICBvdXQucHJpbnQo
IiwgYWx0ZXJuYXRlQmFzZSA9ICIsIGluQ29udGV4dChKU1ZhbHVlKG1fYWx0ZXJuYXRlQmFzZSks
IGNvbnRleHQpKTsKLSAgICAgICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSkKLSAgICAgICAgICAgIG91
dC5wcmludCgiLCBzcGVjaWZpY1ZhbHVlID0gIiwgaW5Db250ZXh0KG1fc3BlY2lmaWNWYWx1ZSwg
Y29udGV4dCkpOwogICAgICAgICBvdXQucHJpbnQoIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQpOwog
ICAgICAgICBvdXQucHJpbnQoIiwgY2FsbCA9ICIsICptX2NhbGxMaW5rU3RhdHVzKTsKICAgICAg
ICAgb3V0LnByaW50KCI+Iik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUHV0QnlJZFZhcmlhbnQuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTYy
LDcgKzYyLDcgQEAgcHVibGljOgogICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWlu
KiBzdHJ1Y3R1cmVDaGFpbiwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KTsKICAgICAKICAgICBzdGF0
aWMgUHV0QnlJZFZhcmlhbnQgc2V0dGVyKAotICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBKU1ZhbHVlIHNwZWNpZmljVmFsdWUsCisg
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsCiAgICAgICAgIEludGVuZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9w
dHI8Q2FsbExpbmtTdGF0dXM+IGNhbGxMaW5rU3RhdHVzKTsKICAgICAKICAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KQEAgLTExNywxMSArMTE3LDcgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV9hbHRlcm5hdGVCYXNlOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVl
IHNwZWNpZmljVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBT
ZXR0ZXIpOwotICAgICAgICByZXR1cm4gbV9zcGVjaWZpY1ZhbHVlOwotICAgIH0KKyAgICBTdHJ1
Y3R1cmVTZXQgYmFzZVN0cnVjdHVyZSgpIGNvbnN0OwogICAgIAogICAgIENhbGxMaW5rU3RhdHVz
KiBjYWxsTGlua1N0YXR1cygpIGNvbnN0CiAgICAgewpAQCAtMTQyLDcgKzEzOCw2IEBAIHByaXZh
dGU6CiAgICAgU3RydWN0dXJlKiBtX25ld1N0cnVjdHVyZTsKICAgICBDb25zdGFudFN0cnVjdHVy
ZUNoZWNrVmVjdG9yIG1fY29uc3RhbnRDaGVja3M7CiAgICAgSlNPYmplY3QqIG1fYWx0ZXJuYXRl
QmFzZTsKLSAgICBKU1ZhbHVlIG1fc3BlY2lmaWNWYWx1ZTsKICAgICBQcm9wZXJ0eU9mZnNldCBt
X29mZnNldDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+IG1fY2FsbExpbmtT
dGF0dXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9p
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1dhdGNocG9pbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCwxMSArNzAsNiBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmFkZChXYXRjaHBvaW50KiB3YXRjCiAgICAgbV9zdGF0ZSA9IElz
V2F0Y2hlZDsKIH0KIAotdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsKGNvbnN0IGNoYXIqIHJl
YXNvbikKLXsKLSAgICBmaXJlQWxsKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Ci19Ci0KIHZv
aWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ewogICAgIEFTU0VSVChzdGF0ZSgpID09IElzV2F0Y2hlZCk7CkBAIC04NSw2ICs4MCwxMSBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxTbG93KGNvbnN0IEZpCiAgICAgV1RGOjpzdG9yZVN0
b3JlRmVuY2UoKTsKIH0KIAordm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsU2xvdyhjb25zdCBj
aGFyKiByZWFzb24pCit7CisgICAgZmlyZUFsbFNsb3coU3RyaW5nRmlyZURldGFpbChyZWFzb24p
KTsKK30KKwogdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmly
ZURldGFpbCYgZGV0YWlsKQogewogICAgIHdoaWxlICghbV9zZXQuaXNFbXB0eSgpKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAx
NzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsMTIgKzEzMSwxNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBmaXJlQWxsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0
Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KGRldGFpbCk7
CiAgICAgfQogICAgIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbChjb25zdCBj
aGFyKiByZWFzb24pOworICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCisgICAg
eworICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZmlyZUFsbFNsb3cocmVhc29uKTsKKyAgICB9CiAgICAgCiAgICAg
dm9pZCB0b3VjaChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewpAQCAtMTU3LDYgKzE2
Miw3IEBAIHB1YmxpYzoKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJl
dHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBmaXJlQWxsU2xvdyhjb25zdCBGaXJlRGV0YWlsJik7IC8vIENhbGwgb25seSBpZiB5b3UndmUg
Y2hlY2tlZCBpc1dhdGNoZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJlQWxsU2xv
dyhjb25zdCBjaGFyKiByZWFzb24pOyAvLyBEaXR0by4KICAgICAKIHByaXZhdGU6CiAgICAgdm9p
ZCBmaXJlQWxsV2F0Y2hwb2ludHMoY29uc3QgRmlyZURldGFpbCYpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyLmgiCiAjaW5jbHVkZSAi
R2V0QnlJZFN0YXR1cy5oIgorI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIk9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5n
T2JqZWN0LmgiCkBAIC0xMzg3LDE0ICsxMzg4LDE3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgICAgICAvLyBzb21ldGhpbmcgbW9yZSBzdWJ0
bGU/CiAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CiAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdHVzLm51bVZhcmlhbnRzKCk7IGktLTspIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzdGF0dXNbaV0uc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbm9kZSwgIXN0YXR1c1tpXS5hbHRlcm5h
dGVCYXNlKCkpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIGNvbnN0YW50UmVzdWx0ID0K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSh2
YWx1ZSwgc3RhdHVzW2ldLm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25z
dGFudFJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9w
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgQWJzdHJhY3RWYWx1
ZSB0aGlzUmVzdWx0OwogICAgICAgICAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBoLmZyZWV6ZShzdGF0dXNbaV0uc3Bl
Y2lmaWNWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgsICptX2dyYXBo
LmZyZWV6ZShjb25zdGFudFJlc3VsdCksCiAgICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXRl
LnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1l
cmdlKHRoaXNSZXN1bHQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTE1NjksMTEgKzE1NzMsMjUg
QEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KICAgICAg
ICAgCiAgICAgY2FzZSBHZXRCeU9mZnNldDogeworICAgICAgICBTdG9yYWdlQWNjZXNzRGF0YSBk
YXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUtPnN0b3JhZ2VBY2Nlc3NEYXRh
SW5kZXgoKV07CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFu
dFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBkYXRhLm9mZnNldCk7CisgICAgICAg
IGlmIChyZXN1bHQpIHsKKyAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZy
ZWV6ZShyZXN1bHQpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KICAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldDogeworICAgICAg
ICBTdG9yYWdlQWNjZXNzRGF0YSBkYXRhID0gbV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUtPnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV07CisgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0g
bV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLCBk
YXRhLm9mZnNldCk7CisgICAgICAgIGlmIChyZXN1bHQgJiYganNEeW5hbWljQ2FzdDxHZXR0ZXJT
ZXR0ZXIqPihyZXN1bHQpKSB7CisgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFw
aC5mcmVlemUocmVzdWx0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKICAgICAgICAgZm9yTm9kZShub2RlKS5zZXQobV9ncmFwaCwgbV9ncmFwaC5tX3ZtLmdldHRl
clNldHRlclN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE2MDIs
MTQgKzE2MjAsMjMgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQog
ICAgICAgICAgICAgaWYgKHNldC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICBiYXNlU2V0Lm1lcmdlKHNldCk7Ci0gICAgICAgICAgICBpZiAoIXZhcmlh
bnQuc3BlY2lmaWNWYWx1ZSgpKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUg
YmFzZUZvckxvYWQ7CisgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCisg
ICAgICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlRm9yTG9hZCA9IGJhc2UubV92YWx1
ZTsKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1bHQgPQorICAgICAgICAgICAgICAg
IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICAgICAgICAgICAgICAgICAgYmFz
ZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAg
ICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKICAgICAgICAgICAgICAgICByZXN1bHQu
bWFrZUhlYXBUb3AoKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAgICAgIHRoaXNS
ZXN1bHQuc2V0KAogICAgICAgICAgICAgICAgIG1fZ3JhcGgsCi0gICAgICAgICAgICAgICAgKm1f
Z3JhcGguZnJlZXplKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSwKKyAgICAgICAgICAgICAgICAq
bV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQpLAogICAgICAgICAgICAgICAgIG1fc3RhdGUu
c3RydWN0dXJlQ2xvYmJlclN0YXRlKCkpOwogICAgICAgICAgICAgcmVzdWx0Lm1lcmdlKHRoaXNS
ZXN1bHQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
Nyw3ICsxODcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaGFuZGxlVHlwZWRBcnJheUNvbnN0cnVj
dG9yKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFR5cGVkQXJyYXlUeXBlKTsKICAg
ICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICBOb2RlKiBoYW5kbGVQdXRCeU9mZnNldChOb2RlKiBiYXNlLCB1bnNpZ25l
ZCBpZGVudGlmaWVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZSogdmFsdWUpOwotICAgIE5vZGUqIGhh
bmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVu
dGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBHZXRCeU9mZnNldCk7
CisgICAgTm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IGNvbnN0IFN0cnVjdHVyZVNldCYsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5
T2Zmc2V0LCBOb2RlVHlwZSBvcCA9IEdldEJ5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdldEJ5
SWQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQsIFNwZWN1bGF0ZWRUeXBlLCBOb2Rl
KiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLAogICAgICAgICBjb25zdCBHZXRCeUlk
U3RhdHVzJik7CkBAIC0xNjc2LDggKzE2NzYsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ29uc3RhbnRJbnRlcgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIE5vZGUq
IGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Tm9kZVR5cGUgb3ApCitOb2RlKiBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQoU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgTm9kZSogYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiBz
dHJ1Y3R1cmVTZXQsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCwgTm9kZVR5cGUgb3ApCiB7CisgICAgaWYgKGJhc2UtPmhhc0NvbnN0YW50KCkpIHsKKyAg
ICAgICAgaWYgKEpTVmFsdWUgY29uc3RhbnQgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVy
dHkoYmFzZS0+YXNKU1ZhbHVlKCksIHN0cnVjdHVyZVNldCwgb2Zmc2V0KSkgeworICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBiYXNlKTsKKyAgICAgICAgICAgIHJldHVybiB3ZWFrSlND
b25zdGFudChjb25zdGFudCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCiAgICAgTm9kZSogcHJv
cGVydHlTdG9yYWdlOwogICAgIGlmIChpc0lubGluZU9mZnNldChvZmZzZXQpKQogICAgICAgICBw
cm9wZXJ0eVN0b3JhZ2UgPSBiYXNlOwpAQCAtMTc3MiwyMSArMTc3OSwxNCBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgIC8vIFVubGVzcyB3ZSB3YW50IGJ1Z3MgbGlr
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg3ODMsIHdlIG5lZWQg
dG8KICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYmFzZSBvZiB0aGUgb3JpZ2luYWwgZ2V0X2J5X2lk
IGlzIGtlcHQgYWxpdmUgdW50aWwgd2UncmUgZG9uZSB3aXRoCiAgICAgLy8gYWxsIG9mIHRoZSBz
cGVjdWxhdGlvbnMuIFdlIG9ubHkgaW5zZXJ0IHRoZSBQaGFudG9tIGlmIHRoZXJlIGhhZCBiZWVu
IGEgQ2hlY2tTdHJ1Y3R1cmUKLSAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgYmFz
ZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UsIG9yIGlmIHRoZQotICAgIC8v
IGFjY2VzcyB3YXMgY29tcGlsZWQgdG8gYSBXZWFrSlNDb25zdGFudCBzcGVjaWZpYyB2YWx1ZSwg
aW4gd2hpY2ggY2FzZSB3ZSBtaWdodCBub3QKLSAgICAvLyBoYXZlIGFueSBleHBsaWNpdCB1c2Ug
b2YgdGhlIGJhc2UgYXQgYWxsLgotICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSB8fCBv
cmlnaW5hbEJhc2UgIT0gYmFzZSkKKyAgICAvLyBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUg
YmFzZSBmb2xsb3dpbmcgdGhlIENoZWNrU3RydWN0dXJlIG9uIGJhc2UuCisgICAgaWYgKG9yaWdp
bmFsQmFzZSAhPSBiYXNlKQogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIG9yaWdpbmFsQmFz
ZSk7CiAgICAgCi0gICAgTm9kZSogbG9hZGVkVmFsdWU7Ci0gICAgaWYgKHZhcmlhbnQuc3BlY2lm
aWNWYWx1ZSgpKQotICAgICAgICBsb2FkZWRWYWx1ZSA9IHdlYWtKU0NvbnN0YW50KHZhcmlhbnQu
c3BlY2lmaWNWYWx1ZSgpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5k
bGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IFNw
ZWNDZWxsT3RoZXIgOiBwcmVkaWN0aW9uLAotICAgICAgICAgICAgYmFzZSwgaWRlbnRpZmllck51
bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0
dXMoKSA/IEdldEdldHRlclNldHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwotICAgIH0KKyAg
ICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAgICB2YXJpYW50
LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDogcHJlZGljdGlvbiwKKyAgICAgICAg
YmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQu
b2Zmc2V0KCksCisgICAgICAgIHZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSA/IEdldEdldHRlclNl
dHRlckJ5T2Zmc2V0IDogR2V0QnlPZmZzZXQpOwogICAgIAogICAgIGlmICghdmFyaWFudC5jYWxs
TGlua1N0YXR1cygpKSB7CiAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZGVzdGluYXRpb25P
cGVyYW5kKSwgbG9hZGVkVmFsdWUpOwpAQCAtMTk0OSwxNCArMTk0OSw5IEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQoCiAgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJh
c2UoKSkKICAgICAgICAgICAgIGJhc2UgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LmFsdGVybmF0
ZUJhc2UoKSk7CiAgICAgICAgIAotICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZTsKLSAgICAgICAg
aWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKQotICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSB3
ZWFrSlNDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgbG9hZGVkVmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKLSAgICAgICAgICAg
ICAgICBTcGVjQ2VsbE90aGVyLCBiYXNlLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNl
dCgpLAotICAgICAgICAgICAgICAgIEdldEdldHRlclNldHRlckJ5T2Zmc2V0KTsKLSAgICAgICAg
fQorICAgICAgICBOb2RlKiBsb2FkZWRWYWx1ZSA9IGhhbmRsZUdldEJ5T2Zmc2V0KAorICAgICAg
ICAgICAgU3BlY0NlbGxPdGhlciwgYmFzZSwgdmFyaWFudC5iYXNlU3RydWN0dXJlKCksIGlkZW50
aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCksCisgICAgICAgICAgICBHZXRHZXR0ZXJTZXR0
ZXJCeU9mZnNldCk7CiAgICAgICAgIAogICAgICAgICBOb2RlKiBzZXR0ZXIgPSBhZGRUb0dyYXBo
KEdldFNldHRlciwgbG9hZGVkVmFsdWUpOwogICAgICAgICAKQEAgLTI5NTgsMTAgKzI5NTMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBjZWxsQ29uc3RhbnRXaXRoU3RydWN0
dXJlQ2hlY2soZ2xvYmFsT2JqZWN0LCBzdGF0dXNbMF0uc3RydWN0dXJlU2V0KCkub25seVN0cnVj
dHVyZSgpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFs
UmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgc3BlY2lmaWNW
YWx1ZSA9IHN0YXR1c1swXS5zcGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc3BlY2lmaWNWYWx1ZS5hc0Nl
bGwoKSkpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBp
ZGVudGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCBoYW5kbGVHZXRCeU9mZnNldChwcmVkaWN0aW9uLCBiYXNlLCBzdGF0dXNb
MF0uc3RydWN0dXJlU2V0KCksIGlkZW50aWZpZXJOdW1iZXIsIG9wZXJhbmQpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFy
OgpAQCAtMjk2OSwxNiArMjk2MSwxNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVh
bFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50
cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldCh1aWQpOwogICAgICAgICAgICAg
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9p
bnRTZXQoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPQorICAgICAg
ICAgICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9CiAgICAgICAgICAgICAgICAgICAgIHdh
dGNocG9pbnRTZXQgPyB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVlKCk7
Ci0gICAgICAgICAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFpbmZlcnJlZFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVy
YW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFZhcmlhYmxlV2F0Y2hwb2ludCwgT3BJbmZvKHdhdGNocG9pbnRTZXQpKTsKLSAgICAg
ICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNwZWNp
ZmljVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdl
YWtKU0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0
YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA3LDggKzQwNywxMyBAQCBw
cml2YXRlOgogCiAgICAgICAgIGFkZEJhc2VDaGVjayhpbmRleEluQmxvY2ssIG5vZGUsIGJhc2VW
YWx1ZSwgdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29u
c3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKKyAg
ICAgICAgSlNWYWx1ZSBiYXNlRm9yTG9hZDsKKyAgICAgICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRl
QmFzZSgpKQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSB2YXJpYW50LmFsdGVybmF0ZUJhc2Uo
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlVmFsdWUubV92
YWx1ZTsKKyAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50
UHJvcGVydHkoYmFzZUZvckxvYWQsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9m
ZnNldCgpKSkgeworICAgICAgICAgICAgbV9ncmFwaC5jb252ZXJ0VG9Db25zdGFudChub2RlLCBt
X2dyYXBoLmZyZWV6ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg2LDIyICsxMjg2LDI0IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBib29sIGlzU3RyaW5n
UHJvdG90eXBlTWV0aG9kU2FuZShTdHJ1Y3R1cmUqIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwg
U3RyaW5nSW1wbCogdWlkKQorICAgIGJvb2wgaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKAor
ICAgICAgICBKU09iamVjdCogc3RyaW5nUHJvdG90eXBlLCBTdHJ1Y3R1cmUqIHN0cmluZ1Byb3Rv
dHlwZVN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkKQogICAgIHsKICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlc1VudXNlZDsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAg
ICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENv
bmN1cnJlbnRseSgKLSAgICAgICAgICAgIHZtKCksIHVpZCwgYXR0cmlidXRlc1VudXNlZCwgc3Bl
Y2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9CisgICAgICAgICAg
ICBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSgpLCB1aWQsIGF0
dHJpYnV0ZXNVbnVzZWQpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIGlmICghc3BlY2lmaWNW
YWx1ZSkKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eSgKKyAgICAgICAgICAgIHN0cmluZ1Byb3RvdHlwZSwgc3RyaW5nUHJvdG90eXBlU3RydWN0
dXJlLCBvZmZzZXQpOworICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAKLSAgICAgICAgaWYgKCFzcGVjaWZpY1ZhbHVlLT5pbmhlcml0cyhKU0Z1
bmN0aW9uOjppbmZvKCkpKQorICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzRHluYW1p
Y0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgaWYgKCFmdW5jdGlvbikKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPihzcGVjaWZpY1ZhbHVlKTsKICAgICAgICAgaWYgKGZ1
bmN0aW9uLT5leGVjdXRhYmxlKCktPmludHJpbnNpY0ZvcihDb2RlRm9yQ2FsbCkgIT0gU3RyaW5n
UHJvdG90eXBlVmFsdWVPZkludHJpbnNpYykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgCkBAIC0xMzMwLDkgKzEzMzIsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyAodGhhdCB3
b3VsZCBjYWxsIHRvU3RyaW5nKCkpLiBXZSBkb24ndCB3YW50IHRoZSBERkcgdG8gaGF2ZSB0byBk
aXN0aW5ndWlzaAogICAgICAgICAvLyBiZXR3ZWVuIHRoZSB0d28sIGp1c3QgYmVjYXVzZSB0aGF0
IHNlZW1zIGxpa2UgaXQgd291bGQgZ2V0IGNvbmZ1c2luZy4gU28gd2UKICAgICAgICAgLy8ganVz
dCByZXF1aXJlIGJvdGggbWV0aG9kcyB0byBiZSBzYW5lLgotICAgICAgICBpZiAoIWlzU3RyaW5n
UHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVy
dHlOYW1lcy0+dmFsdWVPZi5pbXBsKCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBl
TWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVPYmplY3QsIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVy
ZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mLmltcGwoKSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIGlmICghaXNTdHJpbmdQcm90b3R5cGVNZXRob2RTYW5lKHN0cmlu
Z1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50b1N0cmluZy5pbXBsKCkp
KQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5
cGVPYmplY3QsIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgdm0oKS5wcm9wZXJ0eU5hbWVzLT50
b1N0cmluZy5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAg
ICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OSw2ICs3ODksNzEgQEAgdW5zaWduZWQgR3Jh
cGg6OnJlcXVpcmVkUmVnaXN0ZXJDb3VudEZvcgogICAgIHJldHVybiBzdGQ6Om1heChmcmFtZVJl
Z2lzdGVyQ291bnQoKSwgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpKTsKIH0KIAorSlNW
YWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICBKU1ZhbHVlIGJhc2UsIGNv
bnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7
CisgICAgaWYgKCFiYXNlIHx8ICFiYXNlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7CisgICAgCisgICAgSlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KGJhc2UpOworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZVNldC5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVTZXRbaV07CisgICAgICAgIFdh
dGNocG9pbnRTZXQqIHNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9p
bnRTZXQob2Zmc2V0KTsKKyAgICAgICAgaWYgKCFzZXQgfHwgIXNldC0+aXNTdGlsbFZhbGlkKCkp
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKKyAgICAgICAgQVNTRVJUKCFzdHJ1
Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgICAgICAKKyAgICAgICAgd2F0
Y2hwb2ludHMoKS5hZGRMYXppbHkoc2V0KTsKKyAgICB9CisgICAgCisgICAgLy8gV2hhdCBmb2xs
b3dzIG1heSByZXF1aXJlIHNvbWUgZXh0cmEgdGhvdWdodC4gV2UgbmVlZCB0aGlzIGxvYWQgdG8g
bG9hZCBhIHZhbGlkIEpTVmFsdWUuIElmCisgICAgLy8gb3VyIHByb2ZpbGluZyBtYWtlcyBzZW5z
ZSBhbmQgd2UncmUgc3RpbGwgb24gdHJhY2sgdG8gZ2VuZXJhdGUgY29kZSB0aGF0IHdvbid0IGJl
CisgICAgLy8gaW52YWxpZGF0ZWQsIHRoZW4gd2UgaGF2ZSBub3RoaW5nIHRvIHdvcnJ5IGFib3V0
LiBXZSBkbywgaG93ZXZlciwgaGF2ZSB0byB3b3JyeSBhYm91dAorICAgIC8vIGxvYWRpbmcgLSBh
bmQgdGhlbiB1c2luZyAtIGFuIGludmFsaWQgSlNWYWx1ZSBpbiB0aGUgY2FzZSB0aGF0IHVuYmVr
bm93bnN0IHRvIHVzIG91ciBjb2RlCisgICAgLy8gaXMgZG9vbWVkLgorICAgIC8vCisgICAgLy8g
T25lIGFyZ3VtZW50IGluIGZhdm9yIG9mIHRoaXMgY29kZSBpcyB0aGF0IGl0IHNob3VsZCBkZWZp
bml0ZWx5IHdvcmsgYmVjYXVzZSB0aGUgYnV0dGVyZmx5CisgICAgLy8gaXMgYWx3YXlzIHNldCBi
ZWZvcmUgdGhlIHN0cnVjdHVyZS4gSG93ZXZlciwgd2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSBm
ZW5jZSBiZXR3ZWVuIHRob3NlCisgICAgLy8gc3RvcmVzLiBJdCdzIG5vdCBjbGVhciBpZiB0aGlz
IG1hdHRlcnMsIGhvd2V2ZXIuIFdlIGRvbid0IGV2ZXIgc2hyaW5rIHRoZSBwcm9wZXJ0eSBzdG9y
YWdlLgorICAgIC8vIFNvLCBmb3IgdGhpcyB0byBmYWlsLCB5b3UnZCBuZWVkIGFuIGFjY2VzcyBv
biBhIGNvbnN0YW50IG9iamVjdCBwb2ludGVyIHN1Y2ggdGhhdCB0aGUgaW5saW5lCisgICAgLy8g
Y2FjaGVzIHRvbGQgdXMgdGhhdCB0aGUgb2JqZWN0IGhhZCBhIHN0cnVjdHVyZSB0aGF0IGl0IGRp
ZCBub3QgKnlldCogaGF2ZSwgYW5kIHRoZW4gbGF0ZXIsCisgICAgLy8gdGhlIG9iamVjdCB0cmFu
c2l0aW9uZWQgdG8gdGhhdCBzdHJ1Y3R1cmUgdGhhdCB0aGUgaW5saW5lIGNhY2hlcyBoYWQgYWxy
YWVkeSBzZWVuLiBBbmQgdGhlbgorICAgIC8vIHRoZSBwcm9jZXNzb3IgcmVvcmRlcmVkIHRoZSBz
dG9yZXMuIFNlZW1zIHVubGlrZWx5IGFuZCBkaWZmaWN1bHQgdG8gdGVzdC4gSSBiZWxpZXZlIHRo
YXQKKyAgICAvLyB0aGlzIGlzIHdvcnRoIHJldmlzaXRpbmcgYnV0IGl0IGlzbid0IHdvcnRoIGxv
c2luZyBzbGVlcCBvdmVyLiBGaWxlZDoKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM0NjQxCisgICAgLy8KKyAgICAvLyBGb3Igbm93LCB3ZSBqdXN0IGRv
IHRoZSBtaW5pbWFsIHRoaW5nOiBkZWZlbmQgYWdhaW5zdCB0aGUgc3RydWN0dXJlIHJpZ2h0IG5v
dyBiZWluZworICAgIC8vIGluY29tcGF0aWJsZSB3aXRoIHRoZSBnZXREaXJlY3Qgd2UncmUgdHJ5
aW5nIHRvIGRvLiBUaGUgZWFzaWVzdCB3YXkgdG8gZG8gdGhhdCBpcyB0bworICAgIC8vIGRldGVy
bWluZSBpZiB0aGUgc3RydWN0dXJlIGJlbG9uZ3MgdG8gdGhlIHByb3ZlbiBzZXQuCisgICAgCisg
ICAgaWYgKCFzdHJ1Y3R1cmVTZXQuY29udGFpbnMob2JqZWN0LT5zdHJ1Y3R1cmUoKSkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgCisgICAgcmV0dXJuIG9iamVjdC0+Z2V0RGlyZWN0
KG9mZnNldCk7Cit9CisKK0pTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoSlNW
YWx1ZSBiYXNlLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQor
eworICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UsIFN0cnVjdHVyZVNldChz
dHJ1Y3R1cmUpLCBvZmZzZXQpOworfQorCitKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudFBy
b3BlcnR5KAorICAgIEpTVmFsdWUgYmFzZSwgY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
c3RydWN0dXJlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgaWYgKHN0cnVjdHVyZS5p
c1RvcCgpIHx8IHN0cnVjdHVyZS5pc0Nsb2JiZXJlZCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1
ZSgpOworICAgIAorICAgIHJldHVybiB0cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UsIHN0cnVj
dHVyZS5zZXQoKSwgb2Zmc2V0KTsKK30KKworSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eShjb25zdCBBYnN0cmFjdFZhbHVlJiBiYXNlLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQp
Cit7CisgICAgcmV0dXJuIHRyeUdldENvbnN0YW50UHJvcGVydHkoYmFzZS5tX3ZhbHVlLCBiYXNl
Lm1fc3RydWN0dXJlLCBvZmZzZXQpOworfQorCiBKU0FjdGl2YXRpb24qIEdyYXBoOjp0cnlHZXRB
Y3RpdmF0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgcmV0dXJuIG5vZGUtPmR5bmFtaWNDYXN0Q29u
c3RhbnQ8SlNBY3RpdmF0aW9uKj4oKTsKQEAgLTkwMCw3ICs5NjUsNiBAQCB2b2lkIEdyYXBoOjp2
aXNpdENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2CiAgICAgICAgICAgICBjYXNlIE11bHRpR2V0QnlP
ZmZzZXQ6CiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbm9kZS0+bXVsdGlHZXRC
eU9mZnNldERhdGEoKS52YXJpYW50cy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgICAgICAg
ICAgR2V0QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgp
LnZhcmlhbnRzW2ldOwotICAgICAgICAgICAgICAgICAgICB2aXNpdG9yLmFwcGVuZFVuYmFycmll
cmVkUmVhZE9ubHlWYWx1ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0ID0gdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKTsK
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gc2V0LnNpemUoKTsgai0tOykK
ICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kVW5iYXJyaWVyZWRSZWFkT25s
eVBvaW50ZXIoc2V0W2pdKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJ
KHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtNjc5LDYgKzY3OSwxMSBAQCBwdWJsaWM6CiAgICAgdW5zaWdu
ZWQgcmVxdWlyZWRSZWdpc3RlckNvdW50Rm9yRXhpdCgpOwogICAgIHVuc2lnbmVkIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4ZWN1dGlvbkFuZEV4aXQoKTsKICAgICAKKyAgICBKU1ZhbHVlIHRy
eUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCBQ
cm9wZXJ0eU9mZnNldCk7CisgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTVmFs
dWUgYmFzZSwgU3RydWN0dXJlKiwgUHJvcGVydHlPZmZzZXQpOworICAgIEpTVmFsdWUgdHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVlIGJhc2UsIGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudFByb3BlcnR5
KGNvbnN0IEFic3RyYWN0VmFsdWUmLCBQcm9wZXJ0eU9mZnNldCk7CisgICAgCiAgICAgSlNBY3Rp
dmF0aW9uKiB0cnlHZXRBY3RpdmF0aW9uKE5vZGUqKTsKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiB0cnlHZXRSZWdpc3RlcnMoTm9kZSopOwogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVy
ZVdhdGNoaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1dhdGNoYWJsZVN0cnVjdHVyZVdhdGNoaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw3ICs4Niw2IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBjYXNlIE11
bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5v
ZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMuc2l6ZSgpOyBpLS07KSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBHZXRCeUlkVmFyaWFudCYgdmFyaWFudCA9IG5vZGUtPm11bHRp
R2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICB0
cnlXYXRjaChtX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSktPnN0cnVjdHVy
ZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeVdhdGNoKHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byB3YXRjaCBh
bnl0aGluZyBpbiB0aGUgc3RydWN0dXJlIGNoYWluIGJlY2F1c2UgdGhhdCB3b3VsZAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gaGF2ZSBiZWVuIGRlY29tcG9zZWQgaW50byBDaGVja1N0cnVj
dHVyZSdzLiBEb24ndCBuZWVkIHRvIHdhdGNoIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE3MDc4NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NzcsMTEgKzQ3NywxMSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldEJ5
SWQ6CiAgICAgICAgICAgICBjb21waWxlR2V0QnlJZCgpOwogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKICAgICAgICAgY2FzZSBJbjoKICAgICAgICAgICAg
IGNvbXBpbGVJbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUHV0QnlJZDoK
KyAgICAgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgogICAgICAgICAgICAgY29tcGlsZVB1dEJ5SWQo
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEdldEJ1dHRlcmZseToKQEAgLTMy
MzcsOCArMzIzNywxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBHZXRC
eUlkVmFyaWFudCB2YXJpYW50ID0gZGF0YS52YXJpYW50c1tpXTsKICAgICAgICAgICAgIExWYWx1
ZSByZXN1bHQ7Ci0gICAgICAgICAgICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpCi0gICAg
ICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUodmFy
aWFudC5zcGVjaWZpY1ZhbHVlKCkpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgY29uc3RhbnRSZXN1
bHQ7CisgICAgICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpIHsKKyAgICAgICAg
ICAgICAgICBjb25zdGFudFJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgK
KyAgICAgICAgICAgICAgICAgICAgdmFyaWFudC5hbHRlcm5hdGVCYXNlKCksIHZhcmlhbnQuYmFz
ZVN0cnVjdHVyZSgpLCB2YXJpYW50Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChjb25zdGFudFJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5j
b25zdEludDY0KEpTVmFsdWU6OmVuY29kZShjb25zdGFudFJlc3VsdCkpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHByb3BlcnR5QmFzZTsKICAgICAgICAgICAg
ICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCkBAIC01MTAzLDcgKzUxMDgsNyBAQCBw
cml2YXRlOgogICAgIAogICAgIExWYWx1ZSBsb3dDZWxsKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1
bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQogICAgIHsKLSAg
ICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlv
biB8fCBERkc6OmlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOworICAgICAgICBERkdfQVNTRVJUKG1f
Z3JhcGgsIG1fbm9kZSwgbW9kZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgREZHOjpp
c0NlbGwoZWRnZS51c2VLaW5kKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChlZGdlLT5vcCgp
ID09IEpTQ29uc3RhbnQpIHsKICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBlZGdlLT5hc0pT
VmFsdWUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5OCw5ICsxNjk4LDEzIEBAIEVuY29k
ZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICAvLyBDb3ZlcnMgaW1wbGlj
aXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24ndCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1
dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBjYWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KICAg
ICBpZiAoc2xvdC5pc0NhY2hlYWJsZVZhbHVlKCkgJiYgc2xvdC5zbG90QmFzZSgpID09IHNjb3Bl
ICYmIHNjb3BlLT5zdHJ1Y3R1cmUodm0pLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkp
IHsKICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBt
b2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSh2bSkpOwotICAgICAg
ICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc2NvcGUtPnN0cnVjdHVyZSh2bSk7CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2Nr
LT5tX2xvY2spOworICAgICAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52
bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUpOworICAgICAgICAg
ICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxh
Y2VtZW50cyh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTE3MzAsMTQgKzE3MzQsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29w
ZShFCiAgICAgaWYgKGV4ZWMtPnZtKCkuZXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxzLiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVu
dGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlkbid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0g
YXQgY29tcGlsZSB0aW1lLgotICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJv
cGVydHkgfHwgbW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVj
dGlvbkNoZWNrcykgewotICAgICAgICBpZiAoc2xvdC5pc0NhY2hlYWJsZVB1dCgpICYmIHNsb3Qu
YmFzZSgpID09IHNjb3BlICYmIHNjb3BlLT5zdHJ1Y3R1cmUoKS0+cHJvcGVydHlBY2Nlc3Nlc0Fy
ZUNhY2hlYWJsZSgpKSB7Ci0gICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihj
b2RlQmxvY2stPm1fbG9jayk7Ci0gICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhl
Yy0+dm0oKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgp
KTsKLSAgICAgICAgICAgIHBjWzZdLnUub3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgQ29tbW9uU2xvd1BhdGhzOjp0cnlDYWNoZVB1dFRvU2NvcGVH
bG9iYWwoZXhlYywgY29kZUJsb2NrLCBwYywgc2NvcGUsIG1vZGVBbmRUeXBlLCBzbG90KTsKIH0K
IAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93KEV4ZWNTdGF0ZSogZXhlYywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEV4Y2VwdGlvblZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlcGF0Y2guY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMiArOTYsMTQgQEAg
c3RhdGljIHZvaWQgcmVwYXRjaENhbGwoQ29kZUJsb2NrKiBjb2RlYgogICAgIHJlcGF0Y2hDYWxs
KHJlcGF0Y2hCdWZmZXIsIGNhbGwsIG5ld0NhbGxlZUZ1bmN0aW9uKTsKIH0KIAotc3RhdGljIHZv
aWQgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKFZNJiB2bSwgQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAotICAgIGNvbnN0
IEZ1bmN0aW9uUHRyICZzbG93UGF0aEZ1bmN0aW9uLCBib29sIGNvbXBhY3QpCitzdGF0aWMgdm9p
ZCByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoCisgICAgVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwKKyAg
ICBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwg
Y29uc3QgRnVuY3Rpb25QdHIgJnNsb3dQYXRoRnVuY3Rpb24sCisgICAgYm9vbCBjb21wYWN0KQog
ewogICAgIGlmIChzdHJ1Y3R1cmUtPnR5cGVJbmZvKCkubmV3SW1wdXJlUHJvcGVydHlGaXJlc1dh
dGNocG9pbnRzKCkpCiAgICAgICAgIHZtLnJlZ2lzdGVyV2F0Y2hwb2ludEZvckltcHVyZVByb3Bl
cnR5KHByb3BlcnR5TmFtZSwgc3R1YkluZm8uYWRkV2F0Y2hwb2ludChjb2RlQmxvY2spKTsKLQor
ICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwogCiAgICAg
Ly8gT25seSBvcHRpbWl6ZSBvbmNlIQpAQCAtMzQzLDggKzM0NSwxMSBAQCBzdGF0aWMgdm9pZCBn
ZW5lcmF0ZUJ5SWRTdHViKAogICAgICAgICAgICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBjdXJyU3RydWN0dXJlID0gaXQtPmdldCgpOwogICAgICAgICB9Cisg
ICAgICAgIEFTU0VSVChwcm90b09iamVjdC0+c3RydWN0dXJlKCkgPT0gY3VyclN0cnVjdHVyZSk7
CiAgICAgfQogICAgIAorICAgIGN1cnJTdHJ1Y3R1cmUtPnN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZv
clJlcGxhY2VtZW50cygqdm0sIG9mZnNldCk7CisgICAgCiAgICAgR1BSUmVnIGJhc2VGb3JBY2Nl
c3NHUFI7CiAgICAgaWYgKGNoYWluKSB7CiAgICAgICAgIHN0dWJKaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwcm90b09iamVjdCksIHNjcmF0Y2hHUFIpOwpAQCAtNjkzLDkg
KzY5OCwxMCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAg
aWYgKHNsb3Quc2xvdEJhc2UoKSA9PSBiYXNlVmFsdWUKICAgICAgICAgJiYgc2xvdC5pc0NhY2hl
YWJsZVZhbHVlKCkKICAgICAgICAgJiYgTWFjcm9Bc3NlbWJsZXI6OmlzQ29tcGFjdFB0ckFsaWdu
ZWRBZGRyZXNzT2Zmc2V0KG1heE9mZnNldFJlbGF0aXZlVG9QYXRjaGVkU3RvcmFnZShzbG90LmNh
Y2hlZE9mZnNldCgpKSkpIHsKLSAgICAgICAgICAgIHJlcGF0Y2hCeUlkU2VsZkFjY2Vzcygqdm0s
IGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBzbG90LmNhY2hl
ZE9mZnNldCgpLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0LCB0cnVlKTsKLSAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0cnVjdHVyZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgc3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoKnZtLCBzbG90LmNhY2hl
ZE9mZnNldCgpKTsKKyAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
IG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOworICAgICAgICBzdHViSW5mby5pbml0
R2V0QnlJZFNlbGYoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICByZXBhdGNoQ2FsbChjb2RlQmxv
Y2ssIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZEJ1aWxkTGlz
dCk7CkBAIC0xMTc4LDYgKzExODQsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhl
Y1N0YXRlKiBlCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OmlzUHRyQWxpZ25lZEFkZHJl
c3NPZmZzZXQob2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgICAgICBzdHJ1Y3R1cmUtPmRp
ZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZvLCBzdHJ1
Y3R1cmUsIGlkZW50LCBzbG90LmNhY2hlZE9mZnNldCgpLCBhcHByb3ByaWF0ZUxpc3RCdWlsZGlu
Z1B1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSwgZmFsc2UpOwogICAgICAgICBzdHViSW5m
by5pbml0UHV0QnlJZFJlcGxhY2UoKnZtLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHJ1Y3R1cmUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEyOTUsNiArMTMwMiw4IEBAIHN0
YXRpYyBib29sIHRyeUJ1aWxkUHV0QnlJZExpc3QoRXhlY1N0YXQKICAgICAgICAgICAgIGlmIChs
aXN0LT5pc0Z1bGwoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFdpbGwgZ2V0
IGhlcmUgZHVlIHRvIHJlY3Vyc2lvbi4KICAgICAgICAgICAgIAorICAgICAgICAgICAgc3RydWN0
dXJlLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoKnZtLCBzbG90LmNhY2hlZE9mZnNldCgp
KTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gV2UncmUgbm93IGNvbW1pdHRlZCB0byBj
cmVhdGluZyB0aGUgc3R1Yi4gTW9ncmlmeSB0aGUgbWV0YS1kYXRhIGFjY29yZGluZ2x5LgogICAg
ICAgICAgICAgZW1pdFB1dFJlcGxhY2VTdHViKAogICAgICAgICAgICAgICAgIGV4ZWMsIGJhc2VW
YWx1ZSwgcHJvcGVydHlOYW1lLCBzbG90LCBzdHViSW5mbywgcHV0S2luZCwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24g
MTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjkzLDYgKzY5Myw3IEBAIExMSU5UX1NMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9wdXRfYnlfaWQKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5k
aWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQodm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIHBjWzRdLnUuc3RydWN0dXJlLnNldCgKICAgICAgICAgICAgICAgICAgICAg
dm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzSW5saW5lT2Zmc2V0KHNsb3QuY2FjaGVkT2Zmc2V0KCkpKSB7CkBAIC0xNDI2
LDkgKzE0MjcsMTMgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2dldF9mcm9tXwog
ICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gc2Nv
cGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkp
IHsKICAgICAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBt
b2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSB7CiAgICAgICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygp
OwotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoY29kZUJsb2NrLT5tX2xv
Y2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUoKSk7Ci0gICAgICAgICAg
ICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUgPSBzY29wZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1f
bG9jayk7CisgICAgICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCks
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAg
ICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKHZtLCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTQ0
OCwxNSArMTQ1Myw4IEBAIHN0YXRpYyBKU09iamVjdCogcHV0VG9TY29wZUNvbW1vbihFeGVjU3QK
IAogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHNjb3BlLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9k
ZSgpKTsKICAgICBzY29wZS0+bWV0aG9kVGFibGUoKS0+cHV0KHNjb3BlLCBleGVjLCBpZGVudCwg
dmFsdWUsIHNsb3QpOwotCi0gICAgLy8gQ292ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRo
ZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBo
b3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCi0gICAgaWYgKG1vZGVBbmRUeXBlLnR5
cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBtb2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKSB7Ci0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVh
YmxlUHV0KCkgJiYgc2xvdC5iYXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5w
cm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgICAgIHBjWzVdLnUu
c3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
Y29wZS0+c3RydWN0dXJlKCkpOwotICAgICAgICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5j
YWNoZWRPZmZzZXQoKTsKLSAgICAgICAgfQotICAgIH0KKyAgICAKKyAgICBDb21tb25TbG93UGF0
aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVjLCBjb2RlQmxvY2ssIHBjLCBzY29wZSwg
bW9kZUFuZFR5cGUsIHNsb3QpOwogCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNp
b24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDMzIEBAIGlubGluZSBib29sIG9wSW4o
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHUKICAgICByZXR1cm4gYmFzZU9iai0+aGFzUHJvcGVydHko
ZXhlYywgcHJvcGVydHkpOwogfQogCitpbmxpbmUgdm9pZCB0cnlDYWNoZVB1dFRvU2NvcGVHbG9i
YWwoCisgICAgRXhlY1N0YXRlKiBleGVjLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5zdHJ1Y3Rp
b24qIHBjLCBKU09iamVjdCogc2NvcGUsCisgICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRU
eXBlLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgLy8gQ292ZXJzIGltcGxpY2l0IGds
b2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBmaXJzdCBleGVjdXRlLCB3
ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxlIHRpbWUuCisgICAgCisg
ICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSAhPSBHbG9iYWxQcm9wZXJ0eSAmJiBtb2RlQW5kVHlw
ZS50eXBlKCkgIT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaWYgKCFzbG90LmlzQ2FjaGVhYmxlUHV0KCkKKyAgICAgICAg
fHwgc2xvdC5iYXNlKCkgIT0gc2NvcGUKKyAgICAgICAgfHwgIXNjb3BlLT5zdHJ1Y3R1cmUoKS0+
cHJvcGVydHlBY2Nlc3Nlc0FyZUNhY2hlYWJsZSgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKHNsb3QudHlwZSgpID09IFB1dFByb3BlcnR5U2xvdDo6TmV3UHJvcGVydHkpIHsKKyAg
ICAgICAgLy8gRG9uJ3QgY2FjaGUgaWYgd2UndmUgZG9uZSBhIHRyYW5zaXRpb24uIFdlIHdhbnQg
dG8gZGV0ZWN0IHRoZSBmaXJzdCByZXBsYWNlIHNvIHRoYXQgd2UKKyAgICAgICAgLy8gY2FuIGlu
dmFsaWRhdGUgdGhlIHdhdGNocG9pbnQuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgc2NvcGUtPnN0cnVjdHVyZSgpLT5kaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoZXhlYy0+
dm0oKSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihjb2RlQmxvY2stPm1fbG9jayk7CisgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMt
PnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1Y3R1cmUoKSk7
CisgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgQ29tbW9uU2xvd1BhdGhzCiAKIGNsYXNzIEV4ZWNTdGF0ZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVuZGVkU3RydWN0dXJl
Q2hhaW4uY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDgg
KzEwNyw3IEBAIGJvb2wgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbjo6bWF5SW50ZXJjZXAKIHsKICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKICAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwot
ICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVu
dGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBtX3ZlY3RvcltpXS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0
dHJpYnV0ZXMpOwogICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0KSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIChSZWFkT25seSB8IEFjY2Vz
c29yKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NKU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDggKzEzOSw3IEBAIHZvaWQgSlNW
YWx1ZTo6cHV0VG9QcmltaXRpdmUoRXhlY1N0YXRlKiAKIAogICAgIGZvciAoOyA7IG9iaiA9IGFz
T2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICAg
ICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBvYmotPnN0cnVjdHVyZSgpLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3Bl
Y2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3RydWN0
dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9m
ZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFJl
YWRPbmx5KSB7CiAgICAgICAgICAgICAgICAgaWYgKHNsb3QuaXNTdHJpY3RNb2RlKCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4Miw3ICsyODIsNyBAQCB2b2lkIEpT
R2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgbV9mdW5jdGlvblByb3RvdHlw
ZS5zZXQodm0sIHRoaXMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGUodm0sIEZ1bmN0aW9uUHJv
dG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmUodm0sIHRoaXMsIGpzTnVsbCgpKSkpOyAvLyBUaGUgcmVh
bCBwcm90b3R5cGUgd2lsbCBiZSBzZXQgb25jZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4K
ICAgICBtX2Z1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNGdW5jdGlvbjo6Y3JlYXRl
U3RydWN0dXJlKHZtLCB0aGlzLCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgbV9i
b3VuZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhpcywgSlNCb3VuZEZ1bmN0aW9uOjpjcmVh
dGVTdHJ1Y3R1cmUodm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKLSAgICBt
X25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgdm0ucHJvcGVydHlO
YW1lcy0+bmFtZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0sIDAsIG1fZnVuY3Rp
b25OYW1lT2Zmc2V0KSk7CisgICAgbV9uYW1lZEZ1bmN0aW9uU3RydWN0dXJlLnNldCh2bSwgdGhp
cywgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIG1fZnVuY3Rpb25TdHJ1Y3R1
cmUuZ2V0KCksIHZtLnByb3BlcnR5TmFtZXMtPm5hbWUsIERvbnREZWxldGUgfCBSZWFkT25seSB8
IERvbnRFbnVtLCBtX2Z1bmN0aW9uTmFtZU9mZnNldCkpOwogICAgIG1faW50ZXJuYWxGdW5jdGlv
blN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIEludGVybmFsRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwogICAgIEpTRnVuY3Rpb24q
IGNhbGxGdW5jdGlvbiA9IDA7CiAgICAgSlNGdW5jdGlvbiogYXBwbHlGdW5jdGlvbiA9IDA7CkBA
IC00MjksOCArNDI5LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSBwcm90
bwogICAgIFByb3RvdHlwZU1hcCYgcHJvdG90eXBlTWFwID0gdm0ucHJvdG90eXBlTWFwOwogICAg
IFN0cnVjdHVyZSogaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBwcm90b3R5cGVNYXAuZW1wdHlP
YmplY3RTdHJ1Y3R1cmVGb3JQcm90b3R5cGUobV9vYmplY3RQcm90b3R5cGUuZ2V0KCksIEpTRmlu
YWxPYmplY3Q6OmRlZmF1bHRJbmxpbmVDYXBhY2l0eSgpKTsKICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQ7Ci0gICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFt
ZXMtPmRvbmUsIDAsIDAsIG9mZnNldCk7Ci0gICAgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1
cmUsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCAwLCAwLCBvZmZzZXQpOworICAgIGl0ZXJhdG9y
UmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIGl0
ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT5kb25lLCAwLCBvZmZzZXQp
OworICAgIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb24odm0sIGl0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT52
YWx1ZSwgMCwgb2Zmc2V0KTsKICAgICBtX2l0ZXJhdG9yUmVzdWx0U3RydWN0dXJlLnNldCh2bSwg
dGhpcywgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUpOwogCiAgICAgbV9ldmFsRnVuY3Rpb24uc2V0
KHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHRoaXMsIDEsIHZtLnByb3BlcnR5TmFt
ZXMtPmV2YWwuc3RyaW5nKCksIGdsb2JhbEZ1bmNFdmFsKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA4LCAyMDA5LCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDksIDIwMTIs
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBFcmljIFNlaWRlbCAoZXJpY0B3ZWJraXQub3JnKQogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBA
IC01NSwxNSArNTUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIC8vIEFycmF5Q29udmVudGlvbnMuaC4K
IHN0YXRpYyB1bnNpZ25lZCBsYXN0QXJyYXlTaXplID0gMDsKIAotSlNDZWxsKiBnZXRDYWxsYWJs
ZU9iamVjdFNsb3coSlNDZWxsKiBjZWxsKQotewotICAgIGlmIChjZWxsLT50eXBlKCkgPT0gSlNG
dW5jdGlvblR5cGUpCi0gICAgICAgIHJldHVybiBjZWxsOwotICAgIGlmIChjZWxsLT5zdHJ1Y3R1
cmUoKS0+Y2xhc3NJbmZvKCktPmlzU3ViQ2xhc3NPZihJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKCkp
KQotICAgICAgICByZXR1cm4gY2VsbDsKLSAgICByZXR1cm4gMDsKLX0KLQogU1RBVElDX0FTU0VS
VF9JU19UUklWSUFMTFlfREVTVFJVQ1RJQkxFKEpTT2JqZWN0KTsKIFNUQVRJQ19BU1NFUlRfSVNf
VFJJVklBTExZX0RFU1RSVUNUSUJMRShKU0ZpbmFsT2JqZWN0KTsKIApAQCAtMzYwLDcgKzM1MSw3
IEBAIHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICAgICAgICAg
IHByb3RvdHlwZSA9IG9iai0+cHJvdG90eXBlKCk7CiAgICAgICAgICAgICBpZiAocHJvdG90eXBl
LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJv
cGVydHlOYW1lKSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0
Q2FsbGFibGVPYmplY3QodmFsdWUpKQorICAgICAgICAgICAgICAgIGlmICghdGhpc09iamVjdC0+
cHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAs
IHNsb3QpCiAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAg
ICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbChTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CkBAIC0zNzEsOCArMzYyLDcgQEAgdm9pZCBKU09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhl
Y1N0YQogICAgIEpTT2JqZWN0KiBvYmo7CiAgICAgZm9yIChvYmogPSB0aGlzT2JqZWN0OyA7IG9i
aiA9IGFzT2JqZWN0KHByb3RvdHlwZSkpIHsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlczsK
LSAgICAgICAgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBv
ZmZzZXQgPSBvYmotPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2Jq
LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAg
ICAgIGlmIChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzICYgUmVhZE9ubHkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+c3Ry
dWN0dXJlKHZtKS0+cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKGV4ZWMtPnZtKCks
IHByb3BlcnR5TmFtZSkgfHwgb2JqID09IHRoaXNPYmplY3QpOwpAQCAtNDA3LDcgKzM5Nyw3IEBA
IHZvaWQgSlNPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTdGEKICAgICB9CiAgICAgCiAg
ICAgQVNTRVJUKCF0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5wcm90b3R5cGVDaGFpbk1heUlu
dGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlOYW1lKSB8fCBvYmogPT0gdGhpc09i
amVjdCk7Ci0gICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0
Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFs
dWUpKSAmJiBzbG90LmlzU3RyaWN0TW9kZSgpKQorICAgIGlmICghdGhpc09iamVjdC0+cHV0RGly
ZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3Qp
ICYmIHNsb3QuaXNTdHJpY3RNb2RlKCkpCiAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFT
Q0lJTGl0ZXJhbChTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpKTsKICAgICBy
ZXR1cm47CiB9CkBAIC0xMjI3LDcgKzEyMTcsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RB
Y2Nlc3NvcihFeGVjU3RhCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3ROb25JbmRleEFjY2Vzc29y
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcykKIHsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAgICBw
dXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0eU5h
bWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOwor
ICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3Bl
cnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwogCiAgICAgLy8gcHV0RGlyZWN0IHdp
bGwgY2hhbmdlIG91ciBTdHJ1Y3R1cmUgaWYgd2UgYWRkIGEgbmV3IHByb3BlcnR5LiBGb3IKICAg
ICAvLyBnZXR0ZXJzIGFuZCBzZXR0ZXJzLCB0aG91Z2gsIHdlIGFsc28gbmVlZCB0byBjaGFuZ2Ug
b3VyIFN0cnVjdHVyZQpAQCAtMTI2Nyw5ICsxMjU3LDggQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiBjZQogICAgICAgICB0aGlzT2JqZWN0LT5yZWlmeVN0YXRpY0Z1bmN0
aW9uc0ZvckRlbGV0ZShleGVjKTsKIAogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlND
ZWxsKiBzcGVjaWZpY1ZhbHVlOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0gICAgaWYgKGlz
VmFsaWRPZmZzZXQodGhpc09iamVjdC0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkgeworICAgIGlmIChpc1ZhbGlkT2Zmc2V0
KHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKSkpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBEb250RGVsZXRlICYmICF2bS5pc0lu
RGVmaW5lT3duUHJvcGVydHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
dGhpc09iamVjdC0+cmVtb3ZlRGlyZWN0KHZtLCBwcm9wZXJ0eU5hbWUpOwpAQCAtMTM4Myw2ICsx
MzcyLDEwIEBAIGJvb2wgSlNPYmplY3Q6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3QKIC8vIEVD
TUEgOC42LjIuNgogSlNWYWx1ZSBKU09iamVjdDo6ZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0
KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KQog
eworICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdoYXRldmVyIGRlZmF1bHQgdmFsdWUgbWV0aG9kcyB0
aGVyZSBhcmUgb24gb2JqZWN0J3MgcHJvdG90eXBlIGNoYWluIGFyZQorICAgIC8vIGJlaW5nIHdh
dGNoZWQuCisgICAgb2JqZWN0LT5zdHJ1Y3R1cmUoKS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJv
cGVydGllc0lmTmVjZXNzYXJ5Rm9yRW50aXJlQ2hhaW4oZXhlYy0+dm0oKSk7CisgICAgCiAgICAg
Ly8gTXVzdCBjYWxsIHRvU3RyaW5nIGZpcnN0IGZvciBEYXRlIG9iamVjdHMuCiAgICAgaWYgKCho
aW50ID09IFByZWZlclN0cmluZykgfHwgKGhpbnQgIT0gUHJlZmVyTnVtYmVyICYmIG9iamVjdC0+
cHJvdG90eXBlKCkgPT0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5kYXRlUHJvdG90eXBl
KCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBjYWxsRGVmYXVsdFZhbHVlRnVuY3Rpb24o
ZXhlYywgb2JqZWN0LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcpOwpAQCAtMTQ0Niwy
MCArMTQzOSw2IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmF1bHRIYXNJbnN0YW5jZShFeGVjU3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSlNPYmplY3Q6OmdldFByb3BlcnR5U3BlY2lmaWNW
YWx1ZShFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTQ2VsbCom
IHNwZWNpZmljVmFsdWUpIGNvbnN0Ci17Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIGlmIChpc1ZhbGlkT2Zmc2V0KHN0cnVjdHVyZSh2bSkt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSkpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gVGhpcyBjb3VsZCBiZSBhIGZ1bmN0aW9uIHdpdGhp
biB0aGUgc3RhdGljIHRhYmxlPyAtIHNob3VsZCBwcm9iYWJseQotICAgIC8vIGFsc28gbG9vayBp
biB0aGUgaGFzaD8gIFRoaXMgY3VycmVudGx5IHNob3VsZCBub3QgYmUgYSBwcm9ibGVtLCBzaW5j
ZQotICAgIC8vIHdlJ3ZlIGN1cnJlbnRseSBhbHdheXMgY2FsbCAnZ2V0JyBmaXJzdCwgd2hpY2gg
c2hvdWxkIGhhdmUgcG9wdWxhdGVkCi0gICAgLy8gdGhlIG5vcm1hbCBzdG9yYWdlLgotICAgIHJl
dHVybiBmYWxzZTsKLX0KLQogdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhKU09iamVj
dCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBwcm9wZXJ0eU5hbWVzLnNldEJhc2VP
YmplY3Qob2JqZWN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5
cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTIsIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTYs
MTUgKzU2LDYgQEAgaW5saW5lIEpTQ2VsbCogZ2V0SlNGdW5jdGlvbihKU1ZhbHVlIHZhbAogICAg
IHJldHVybiAwOwogfQogCi1KU19FWFBPUlRfUFJJVkFURSBKU0NlbGwqIGdldENhbGxhYmxlT2Jq
ZWN0U2xvdyhKU0NlbGwqKTsKLQotaW5saW5lIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3QoSlNW
YWx1ZSB2YWx1ZSkKLXsKLSAgICBpZiAoIXZhbHVlLmlzQ2VsbCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gZ2V0Q2FsbGFibGVPYmplY3RTbG93KHZhbHVlLmFzQ2VsbCgpKTsKLX0K
LQogY2xhc3MgR2V0dGVyU2V0dGVyOwogY2xhc3MgSW50ZXJuYWxGdW5jdGlvbjsKIGNsYXNzIEpT
RnVuY3Rpb247CkBAIC00OTEsOCArNDgyLDYgQEAgcHVibGljOgogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIEpTVmFsdWUgdG9UaGlzKEpTQ2VsbCosIEV4ZWNTdGF0ZSosIEVDTUFNb2Rl
KTsKIAotICAgIGJvb2wgZ2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNTdGF0ZSosIFByb3Bl
cnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNGdW5jdGlvbikgY29uc3Q7Ci0KICAgICAvLyBUaGlz
IGdldCBmdW5jdGlvbiBvbmx5IGxvb2tzIGF0IHRoZSBwcm9wZXJ0eSBtYXAuCiAgICAgSlNWYWx1
ZSBnZXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKSBjb25zdAogICAg
IHsKQEAgLTUwMSwxMiArNDkwLDExIEBAIHB1YmxpYzoKICAgICAgICAgY2hlY2tPZmZzZXQob2Zm
c2V0LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQgPyBnZXREaXJlY3Qob2Zmc2V0KSA6IEpTVmFsdWUoKTsKICAgICB9
Ci0KKyAgICAKICAgICBKU1ZhbHVlIGdldERpcmVjdChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKSBjb25zdAogICAgIHsKLSAgICAgICAgSlND
ZWxsKiBzcGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1
Y3R1cmUodm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJp
YnV0ZXMpOwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+aW5saW5lQ2Fw
YWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gaW52YWxpZE9mZnNldCA/IGdldERp
cmVjdChvZmZzZXQpIDogSlNWYWx1ZSgpOwogICAgIH0KQEAgLTUyMSw5ICs1MDksOCBAQCBwdWJs
aWM6CiAKICAgICBQcm9wZXJ0eU9mZnNldCBnZXREaXJlY3RPZmZzZXQoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcykKICAgICB7Ci0gICAgICAg
IEpTQ2VsbCogc3BlY2lmaWM7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpcy0+
c3RydWN0dXJlKHZtKTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWMpOworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKICAgICAgICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBzdHJ1Y3R1cmUtPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgICAgICByZXR1cm4gb2Zmc2V0OwogICAgIH0KQEAgLTk0OSw3ICs5
MzYsNyBAQCBwcml2YXRlOgogICAgIEFycmF5U3RvcmFnZSogZW50ZXJEaWN0aW9uYXJ5SW5kZXhp
bmdNb2RlV2hlbkFycmF5U3RvcmFnZUFscmVhZHlFeGlzdHMoVk0mLCBBcnJheVN0b3JhZ2UqKTsK
ICAgICAgICAgCiAgICAgdGVtcGxhdGU8UHV0TW9kZT4KLSAgICBib29sIHB1dERpcmVjdEludGVy
bmFsKFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0
eVNsb3QmLCBKU0NlbGwqKTsKKyAgICBib29sIHB1dERpcmVjdEludGVybmFsKFZNJiwgUHJvcGVy
dHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyLCBQdXRQcm9wZXJ0eVNsb3QmKTsKIAogICAg
IGJvb2wgaW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIFZNJiwgU3RydWN0dXJl
JiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGZpbGxHZXR0ZXJQcm9wZXJ0eVNsb3QoUHJvcGVydHlTbG90JiwgSlNWYWx1ZSwgdW5zaWdu
ZWQsIFByb3BlcnR5T2Zmc2V0KTsKQEAgLTEyMTMsOCArMTIwMCw3IEBAIGlubGluZSBKU1ZhbHVl
IEpTT2JqZWN0Ojpwcm90b3R5cGUoKSBjb24KIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6
aW5saW5lR2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBTdHJ1Y3R1
cmUmIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogewogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBzcGVjaWZpYzsK
LSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBz
dHJ1Y3R1cmUuZ2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgIGlmIChMSUtF
TFkoaXNWYWxpZE9mZnNldChvZmZzZXQpKSkgewogICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2V0
RGlyZWN0KG9mZnNldCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUuaGFzR2V0dGVyU2V0dGVyUHJv
cGVydGllcygpICYmIHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkpCkBAIC0xMjk1LDcgKzEyODEsNyBA
QCBpbmxpbmUgSlNWYWx1ZSBKU09iamVjdDo6Z2V0KEV4ZWNTdGF0ZSogCiB9CiAKIHRlbXBsYXRl
PEpTT2JqZWN0OjpQdXRNb2RlIG1vZGU+Ci1pbmxpbmUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTQ2VsbCogc3Bl
Y2lmaWNGdW5jdGlvbikKK2lubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCkKIHsKICAgICBBU1NFUlQodmFsdWUp
OwogICAgIEFTU0VSVCh2YWx1ZS5pc0dldHRlclNldHRlcigpID09ICEhKGF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpOwpAQCAtMTMwNSwyNSArMTI5MSwxNSBAQCBpbmxpbmUgYm9vbCBKU09iamVjdDo6
cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1
Y3R1cmUodm0pOwogICAgIGlmIChzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpKSB7CiAgICAgICAg
IHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIGN1cnJlbnRTcGVj
aWZpY0Z1bmN0aW9uOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcywgY3VycmVudFNwZWNpZmlj
RnVuY3Rpb24pOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50QXR0cmlidXRlcyk7CiAgICAgICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkgewotICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgY3VycmVu
dGx5IGEgc3BlY2lmaWMgZnVuY3Rpb24sIGFuZCB0aGVyZSBub3cgZWl0aGVyIGlzbid0LAotICAg
ICAgICAgICAgLy8gb3IgdGhlIG5ldyB2YWx1ZSBpcyBkaWZmZXJlbnQsIHRoZW4gZGVzcGVjaWZ5
LgotICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uICYmIChzcGVjaWZpY0Z1
bmN0aW9uICE9IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbih2bSwgcHJvcGVydHlOYW1lKTsKICAg
ICAgICAgICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiBjdXJyZW50QXR0cmlidXRlcyAm
IFJlYWRPbmx5KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAg
cHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQsIHRoZSBvYmplY3RzIHN0cnVjdHVyZSBvbmx5IGhhcyBhIHNwZWNpZmljIHZhbHVlIHNldCBp
ZiBwcmV2aW91c2x5IHRoZXJlCi0gICAgICAgICAgICAvLyBoYWQgYmVlbiBvbmUgc2V0LCBhbmQg
aWYgdGhlIG5ldyB2YWx1ZSBiZWluZyBzcGVjaWZpZWQgaXMgdGhlIHNhbWUgKG90aGVyd2lzZSB3
ZSB3b3VsZAotICAgICAgICAgICAgLy8gaGF2ZSBkZXNwZWNpZmllZCwgYWJvdmUpLiAgU28sIGlm
IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uIGlzIG5vdCBzZXQsIG9yIGlmIHRoZSBuZXcKLSAgICAg
ICAgICAgIC8vIHZhbHVlIGlzIGRpZmZlcmVudCAob3IgdGhlcmUgaXMgbm8gbmV3IHZhbHVlKSwg
dGhlbiB0aGUgc2xvdCBub3cgaGFzIG5vIHZhbHVlIC0gYW5kCi0gICAgICAgICAgICAvLyBhcyBz
dWNoIGl0IGlzIGNhY2hhYmxlLgotICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIHByZXZpb3Vz
bHkgYSB2YWx1ZSwgYW5kIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUsIHRoZW4gd2UgY2Fubm90
IGNhY2hlLgotICAgICAgICAgICAgaWYgKCFjdXJyZW50U3BlY2lmaWNGdW5jdGlvbiB8fCAoc3Bl
Y2lmaWNGdW5jdGlvbiAhPSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikpCi0gICAgICAgICAgICAg
ICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgICAgICBz
dHJ1Y3R1cmUtPmRpZFJlcGxhY2VQcm9wZXJ0eShvZmZzZXQpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTEzMzQsMTUgKzEzMTAsMTMgQEAgaW5s
aW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBCdXR0ZXJmbHkq
IG5ld0J1dHRlcmZseSA9IGJ1dHRlcmZseSgpOwogICAgICAgICBpZiAodGhpcy0+c3RydWN0dXJl
KCktPnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpKQogICAgICAgICAgICAgbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHRoaXMtPnN0cnVjdHVyZSgpLT5vdXRPZkxp
bmVDYXBhY2l0eSgpLCB0aGlzLT5zdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3Rv
cmFnZUNhcGFjaXR5KCkpOwotICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRk
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBz
cGVjaWZpY0Z1bmN0aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdGhpcy0+c3RydWN0dXJlKCktPmFk
ZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7
CiAgICAgICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgdGhpcy0+c3RydWN0dXJlKCks
IG5ld0J1dHRlcmZseSk7CiAKICAgICAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICAg
ICAgQVNTRVJUKHRoaXMtPnN0cnVjdHVyZSgpLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAg
ICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAvLyBTZWUgY29tbWVu
dCBvbiBzZXROZXdQcm9wZXJ0eSBjYWxsIGJlbG93LgotICAgICAgICBpZiAoIXNwZWNpZmljRnVu
Y3Rpb24pCi0gICAgICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7Cisg
ICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKICAgICAgICAgaWYgKGF0
dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHRoaXMtPnN0cnVjdHVyZSgpLT5zZXRD
b250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEz
NTAsNyArMTMyNCw3IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgK
IAogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICBzaXplX3QgY3VycmVudENhcGFjaXR5
ID0gdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgaWYgKFN0cnVj
dHVyZSogc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0
aW5nU3RydWN0dXJlKHRoaXMtPnN0cnVjdHVyZSgpLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMs
IHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCkpIHsKKyAgICBpZiAoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUo
dGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSkgewog
ICAgICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgICAgIEJ1dHRlcmZseSogbmV3
QnV0dGVyZmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmIChjdXJyZW50Q2FwYWNpdHkgIT0g
c3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKSB7CkBAIC0xMzYyLDQwICsxMzM2LDE3IEBA
IGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICAgICAgQVNTRVJU
KHN0cnVjdHVyZS0+aXNWYWxpZE9mZnNldChvZmZzZXQpKTsKICAgICAgICAgc2V0U3RydWN0dXJl
QW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIG5ld0J1dHRlcmZseSk7CiAgICAgICAgIHB1dERp
cmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVy
dHk7IHRyYW5zaXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNh
Y2hhYmxlLAotICAgICAgICAvLyBzbyBsZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxlIHN0
YXRlLgotICAgICAgICBpZiAoIXNwZWNpZmljRnVuY3Rpb24pCi0gICAgICAgICAgICBzbG90LnNl
dE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CisgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHko
dGhpcywgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgdW5zaWdu
ZWQgY3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgSlNDZWxsKiBjdXJyZW50U3BlY2lmaWNGdW5jdGlv
bjsKLSAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBjdXJyZW50
QXR0cmlidXRlcywgY3VycmVudFNwZWNpZmljRnVuY3Rpb24pOworICAgIG9mZnNldCA9IHN0cnVj
dHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAo
b2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKICAgICAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQ
dXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgLy8gVGhlcmUgYXJlIHRocmVlIHBvc3NpYmlsaXRpZXMgaGVyZToK
LSAgICAgICAgLy8gICgxKSBUaGVyZSBpcyBhbiBleGlzdGluZyBzcGVjaWZpYyB2YWx1ZSBzZXQs
IGFuZCB3ZSdyZSBvdmVyd3JpdGluZyB3aXRoICp0aGUgc2FtZSB2YWx1ZSouCi0gICAgICAgIC8v
ICAgICAgICogRG8gbm90aGluZyAtIG5vIG5lZWQgdG8gZGVzcGVjaWZ5LCBidXQgdGhhdCBtZWFu
cyB3ZSBjYW4ndCBjYWNoZSAoYSBjYWNoZWQKLSAgICAgICAgLy8gICAgICAgICBwdXQgY291bGQg
d3JpdGUgYSBkaWZmZXJlbnQgdmFsdWUpLiBMZWF2ZSB0aGUgc2xvdCBpbiBhbiB1bmNhY2hhYmxl
IHN0YXRlLgotICAgICAgICAvLyAgKDIpIFRoZXJlIGlzIGEgc3BlY2lmaWMgdmFsdWUgY3VycmVu
dGx5IHNldCwgYnV0IHdlJ3JlIHdyaXRpbmcgYSBkaWZmZXJlbnQgdmFsdWUuCi0gICAgICAgIC8v
ICAgICAgICogRmlyc3QsIHdlIGhhdmUgdG8gZGVzcGVjaWZ5LiAgSGF2aW5nIGRvbmUgc28sIHRo
aXMgaXMgbm93IGEgcmVndWxhciBzbG90Ci0gICAgICAgIC8vICAgICAgICAgd2l0aCBubyBzcGVj
aWZpYyB2YWx1ZSwgc28gZ28gYWhlYWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAgICAgLy8g
ICgzKSBOb3JtYWwgY2FzZSwgdGhlcmUgaXMgbm8gc3BlY2lmaWMgdmFsdWUgc2V0LgotICAgICAg
ICAvLyAgICAgICAqIEdvIGFoZWFkICYgY2FjaGUgbGlrZSBub3JtYWwuCi0gICAgICAgIGlmIChj
dXJyZW50U3BlY2lmaWNGdW5jdGlvbikgewotICAgICAgICAgICAgLy8gY2FzZSAoMSkgRG8gdGhl
IHB1dCwgdGhlbiByZXR1cm4gbGVhdmluZyB0aGUgc2xvdCB1bmNhY2hhYmxlLgotICAgICAgICAg
ICAgaWYgKHNwZWNpZmljRnVuY3Rpb24gPT0gY3VycmVudFNwZWNpZmljRnVuY3Rpb24pIHsKLSAg
ICAgICAgICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gY2FzZSAoMikg
RGVzcGVjaWZ5LCBmYWxsIHRocm91Z2ggdG8gKDMpLgotICAgICAgICAgICAgc2V0U3RydWN0dXJl
KHZtLCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIGNhc2UgKDMpIHNldCB0
aGUgc2xvdCwgZG8gdGhlIHB1dCwgcmV0dXJuLgorICAgICAgICBzdHJ1Y3R1cmUtPmRpZFJlcGxh
Y2VQcm9wZXJ0eShvZmZzZXQpOwogICAgICAgICBzbG90LnNldEV4aXN0aW5nUHJvcGVydHkodGhp
cywgb2Zmc2V0KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xNDA0LDE3ICsxMzU1LDE0IEBAIGlubGluZSBib29sIEpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCgKICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYg
IWlzRXh0ZW5zaWJsZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBzdHJ1Y3R1cmUg
PSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVuY3Rpb24sIG9mZnNldCwgc2xvdC5jb250ZXh0
KCkpOworICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRl
eHQoKSk7CiAgICAgCiAgICAgdmFsaWRhdGVPZmZzZXQob2Zmc2V0KTsKICAgICBBU1NFUlQoc3Ry
dWN0dXJlLT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgIHNldFN0cnVjdHVyZUFuZFJlYWxs
b2NhdGVTdG9yYWdlSWZOZWNlc3Nhcnkodm0sIHN0cnVjdHVyZSk7CiAKICAgICBwdXREaXJlY3Qo
dm0sIG9mZnNldCwgdmFsdWUpOwotICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvcGVydHk7IHRyYW5z
aXRpb25zIHdpdGggc3BlY2lmaWMgdmFsdWVzIGFyZSBub3QgY3VycmVudGx5IGNhY2hhYmxlLAot
ICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0gICAgaWYg
KCFzcGVjaWZpY0Z1bmN0aW9uKQotICAgICAgICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9m
ZnNldCk7CisgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgIGlmIChh
dHRyaWJ1dGVzICYgUmVhZE9ubHkpCiAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFk
T25seVByb3BlcnRpZXMoKTsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0NDcsMjAgKzEzOTUsMjAg
QEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dE93bkRhdGFQcm9wZXJ0eQogICAgIEFTU0VSVCgh
SGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlz
KSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUoKS0+aGFzR2V0dGVyU2V0dGVyUHJvcGVydGllcygp
KTsKIAotICAgIHJldHVybiBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVy
dHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVPYmplY3QodmFsdWUpKTsKKyAgICBy
ZXR1cm4gcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZVB1dD4odm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIDAsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0KFZNJiB2
bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKICAgICBBU1NFUlQoIXZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgJiYgIShhdHRy
aWJ1dGVzICYgQWNjZXNzb3IpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdCh0aGlzKTsKLSAg
ICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+KHZtLCBwcm9wZXJ0
eU5hbWUsIHZhbHVlLCBhdHRyaWJ1dGVzLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkp
OworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIGF0dHJpYnV0ZXMsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBK
U09iamVjdDo6cHV0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNW
YWx1ZSB2YWx1ZSwgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCghdmFsdWUu
aXNHZXR0ZXJTZXR0ZXIoKSk7Ci0gICAgcHV0RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93
blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCwgZ2V0Q2FsbGFibGVP
YmplY3QodmFsdWUpKTsKKyAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJv
cGVydHk+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90KTsKIH0KIAogaW5saW5lIHZv
aWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKQEAg
LTE0NzAsNyArMTQxOCw3IEBAIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RXaXRob3V0
VHIKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IG1fYnV0dGVyZmx5LmdldCgpOwogICAg
IGlmIChzdHJ1Y3R1cmUoKS0+cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAg
IG5ld0J1dHRlcmZseSA9IGdyb3dPdXRPZkxpbmVTdG9yYWdlKHZtLCBzdHJ1Y3R1cmUoKS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSwgc3RydWN0dXJlKCktPnN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3Jh
Z2VDYXBhY2l0eSgpKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUoKS0+
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9
IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwogICAgIHNldFN0cnVjdHVyZUFuZEJ1dHRlcmZseSh2bSwgc3RydWN0
dXJlKCksIG5ld0J1dHRlcmZseSk7CiAgICAgcHV0RGlyZWN0KHZtLCBvZmZzZXQsIHZhbHVlKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCShyZXZp
c2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTksOCArOTksMTkgQEAgc3RhdGljIGlubGluZSBib29sIGFi
c3RyYWN0QWNjZXNzKEV4ZWNTdAogICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUo
R2xvYmFsUHJvcGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIDAsIDAsIDAs
IDApOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLQotICAgICAgICBvcCA9
IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwgMCwgMCwgc2xvdC5jYWNoZWRP
ZmZzZXQoKSk7CisgICAgICAgIAorICAgICAgICBXYXRjaHBvaW50U3RhdGUgc3RhdGUgPSBnbG9i
YWxPYmplY3QtPnN0cnVjdHVyZSgpLT5lbnN1cmVQcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2lu
dFNldChleGVjLT52bSgpLCBzbG90LmNhY2hlZE9mZnNldCgpKS0+c3RhdGUoKTsKKyAgICAgICAg
aWYgKHN0YXRlID09IElzV2F0Y2hlZCAmJiBnZXRPclB1dCA9PSBQdXQpIHsKKyAgICAgICAgICAg
IC8vIFRoZSBmaWVsZCBleGlzdHMsIGJ1dCBiZWNhdXNlIHRoZSByZXBsYWNlbWVudCB3YXRjaHBv
aW50IGlzIHN0aWxsIGludGFjdC4gVGhpcyBpcworICAgICAgICAgICAgLy8ga2luZCBvZiBkYW5n
ZXJvdXMuIFdlIGhhdmUgdHdvIG9wdGlvbnM6CisgICAgICAgICAgICAvLyAxKSBJbnZhbGlkYXRl
IHRoZSB3YXRjaHBvaW50IHNldC4gVGhhdCB3b3VsZCB3b3JrLCBidXQgaXQncyBwb3NzaWJsZSB0
aGF0IHRoaXMgY29kZQorICAgICAgICAgICAgLy8gICAgcGF0aCBuZXZlciBleGVjdXRlcyAtIGlu
IHdoaWNoIGNhc2UgdGhpcyB3b3VsZCBiZSB1bndpc2UuCisgICAgICAgICAgICAvLyAyKSBIYXZl
IHRoZSBpbnZhbGlkYXRpb24gaGFwcGVuIGF0IHJ1bi10aW1lLiBBbGwgd2UgaGF2ZSB0byBkbyBp
cyBsZWF2ZSB0aGUgY29kZQorICAgICAgICAgICAgLy8gICAgdW5jYWNoZWQuIFRoZSBvbmx5IGRv
d25zaWRlIGlzIHNsaWdodGx5IG1vcmUgd29yayB3aGVuIHRoaXMgZG9lcyBleGVjdXRlLgorICAg
ICAgICAgICAgLy8gV2UgZ28gd2l0aCBvcHRpb24gKDIpIGhlcmUgYmVjYXVzZSBpdCBzZWVtcyBs
ZXNzIGV2aWwuCisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9w
ZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgMCwgMCk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgb3AgPSBSZXNvbHZlT3AobWFrZVR5cGUoR2xvYmFsUHJv
cGVydHksIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKSwgZGVwdGgsIGdsb2JhbE9iamVjdC0+c3Ry
dWN0dXJlKCksIDAsIDAsIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
TWFwSGFzaFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTQgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc2LDEzICs3NiwxMSBA
QCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgU3RyaW5nSW1wbCoga2V5OwogICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldDsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgIFdyaXRl
QmFycmllcjxKU0NlbGw+IHNwZWNpZmljVmFsdWU7CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KFZN
JiB2bSwgSlNDZWxsKiBvd25lciwgU3RyaW5nSW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSkKKyAgICBQcm9w
ZXJ0eU1hcEVudHJ5KFN0cmluZ0ltcGwqIGtleSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogICAgICAgICA6IGtleShrZXkpCiAgICAgICAgICwgb2Zmc2V0KG9m
ZnNldCkKICAgICAgICAgLCBhdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgICAgICwgc3BlY2lm
aWNWYWx1ZSh2bSwgb3duZXIsIHNwZWNpZmljVmFsdWUsIFdyaXRlQmFycmllcjxKU0NlbGw+OjpN
YXlCZU51bGwpCiAgICAgewogICAgIH0KIH07CkBAIC0xNDEsOCArMTM5LDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0K
IAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsK
LQogICAgIHR5cGVkZWYgU3RyaW5nSW1wbCogS2V5VHlwZTsKICAgICB0eXBlZGVmIFByb3BlcnR5
TWFwRW50cnkgVmFsdWVUeXBlOwogCkBAIC0xNTcsOCArMTUzLDggQEAgcHVibGljOgogCiAgICAg
Ly8gQ29uc3RydWN0b3IgaXMgcGFzc2VkIGFuIGluaXRpYWwgY2FwYWNpdHksIGEgUHJvcGVydHlU
YWJsZSB0byBjb3B5LCBvciBib3RoLgogICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjcmVhdGUo
Vk0mLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxl
KiBjbG9uZShWTSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLSAgICBz
dGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoVk0mLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBp
bml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVy
dHlUYWJsZSogY2xvbmUoVk0mLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFBy
b3BlcnR5VGFibGUqIGNsb25lKFZNJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQ
cm9wZXJ0eVRhYmxlJik7CiAgICAgflByb3BlcnR5VGFibGUoKTsKIAogICAgIC8vIE9yZGVyZWQg
aXRlcmF0aW9uIG1ldGhvZHMuCkBAIC0xOTYsNyArMTkyLDcgQEAgcHVibGljOgogICAgIFByb3Bl
cnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAg
ICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBs
ZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQuCi0gICAgUHJvcGVydHlUYWJsZSogY29weShWTSYs
IEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxl
KiBjb3B5KFZNJiwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOwogCiAjaWZuZGVmIE5ERUJVRwogICAg
IHNpemVfdCBzaXplSW5NZW1vcnkoKTsKQEAgLTIwNCwxMiArMjAwLDEyIEBAIHB1YmxpYzoKICNl
bmRpZgogCiBwcm90ZWN0ZWQ6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZs
YWdzID0gT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CisgICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRh
bDsKIAogcHJpdmF0ZToKICAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgdW5zaWduZWQgaW5pdGlhbENh
cGFjaXR5KTsKLSAgICBQcm9wZXJ0eVRhYmxlKFZNJiwgSlNDZWxsKiwgY29uc3QgUHJvcGVydHlU
YWJsZSYpOwotICAgIFByb3BlcnR5VGFibGUoVk0mLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFs
Q2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRhYmxlKFZNJiwg
Y29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUoVk0mLCB1bnNpZ25lZCBp
bml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKIAogICAgIFByb3BlcnR5VGFi
bGUoY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIC8vIFVzZWQgdG8gaW5zZXJ0IGEgdmFsdWUg
a25vd24gbm90IHRvIGJlIGluIHRoZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cgY2FwYWNpdHkg
dG8gYmUgYXZhaWxhYmxlLgpAQCAtNDk0LDE1ICs0OTAsMTUgQEAgaW5saW5lIFByb3BlcnR5T2Zm
c2V0IFByb3BlcnR5VGFibGU6Om5leAogICAgIHJldHVybiBvZmZzZXRGb3JQcm9wZXJ0eU51bWJl
cihzaXplKCksIGlubGluZUNhcGFjaXR5KTsKIH0KIAotaW5saW5lIFByb3BlcnR5VGFibGUqIFBy
b3BlcnR5VGFibGU6OmNvcHkoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBh
Y2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KFZNJiB2bSwg
dW5zaWduZWQgbmV3Q2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5
Q291bnQpOwogCiAgICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhl
IHNhbWUgbV9pbmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8g
c2F2ZSByZWhhc2hpbmcgYWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBh
Y2l0eSkgPT0gbV9pbmRleFNpemUpCi0gICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9u
ZSh2bSwgb3duZXIsICp0aGlzKTsKLSAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0s
IG93bmVyLCBuZXdDYXBhY2l0eSwgKnRoaXMpOworICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJs
ZTo6Y2xvbmUodm0sICp0aGlzKTsKKyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0s
IG5ld0NhcGFjaXR5LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkocmV2aXNpb24g
MTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBAQCBQcm9wZXJ0eVRhYmxlKiBQcm9w
ZXJ0eVRhYmxlOjpjcmVhdGUoVk0mCiAgICAgcmV0dXJuIHRhYmxlOwogfQogCi1Qcm9wZXJ0eVRh
YmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIGNvbnN0IFBy
b3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUo
Vk0mIHZtLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKIHsKLSAgICBQcm9wZXJ0eVRhYmxl
KiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhl
YXApKSBQcm9wZXJ0eVRhYmxlKHZtLCBvd25lciwgb3RoZXIpOworICAgIFByb3BlcnR5VGFibGUq
IHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVh
cCkpIFByb3BlcnR5VGFibGUodm0sIG90aGVyKTsKICAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24o
dm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KIAotUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJs
ZTo6Y2xvbmUoVk0mIHZtLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHks
IGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJs
ZTo6Y2xvbmUoVk0mIHZtLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5
VGFibGUmIG90aGVyKQogewotICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxs
LCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3BlcnR5VGFibGUodm0s
IG93bmVyLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJs
ZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KHZtLmhlYXApKSBQ
cm9wZXJ0eVRhYmxlKHZtLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsKICAgICB0YWJsZS0+Zmlu
aXNoQ3JlYXRpb24odm0pOwogICAgIHJldHVybiB0YWJsZTsKIH0KQEAgLTY5LDcgKzY5LDcgQEAg
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIHVucwogICAgIEFTU0VSVChpc1Bv
d2VyT2YyKG1faW5kZXhTaXplKSk7CiB9CiAKLVByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUo
Vk0mIHZtLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK1Byb3Bl
cnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhl
cikKICAgICA6IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAg
ICAsIG1faW5kZXhTaXplKG90aGVyLm1faW5kZXhTaXplKQogICAgICwgbV9pbmRleE1hc2sob3Ro
ZXIubV9pbmRleE1hc2spCkBAIC04MiwxMCArODIsOCBAQCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRh
dGFTaXplKCkpOwogCiAgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChp
dGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIGZvciAo
aXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAgIGl0
ZXItPmtleS0+cmVmKCk7Ci0gICAgICAgIHZtLmhlYXAud3JpdGVCYXJyaWVyKG93bmVyLCBpdGVy
LT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9CiAKICAgICAvLyBDb3B5IHRoZSBtX2RlbGV0
ZWRPZmZzZXRzIHZlY3Rvci4KICAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0
ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKQEAgLTkzLDcgKzkxLDcg
QEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpTQwogICAgICAgICBtX2Rl
bGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVy
RGVsZXRlZE9mZnNldHMpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYg
dm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVy
dHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgdW5z
aWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKICAgICA6
IEpTQ2VsbCh2bSwgdm0ucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1faW5k
ZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQogICAgICwgbV9pbmRleE1h
c2sobV9pbmRleFNpemUgLSAxKQpAQCAtMTA5LDcgKzEwNyw2IEBAIFByb3BlcnR5VGFibGU6OlBy
b3BlcnR5VGFibGUoVk0mIHZtLCBKU0MKICAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsKICAg
ICAgICAgcmVpbnNlcnQoKml0ZXIpOwogICAgICAgICBpdGVyLT5rZXktPnJlZigpOwotICAgICAg
ICB2bS5oZWFwLndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSk7
CiAgICAgfQogCiAgICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3IuCkBAIC0x
MzIsMTcgKzEyOSw0IEBAIFByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCkKICAgICBmYXN0
RnJlZShtX2luZGV4KTsKIH0KIAotdm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpT
Q2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgUHJvcGVydHlUYWJsZSog
dGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwotICAgIEFTU0VSVCh0aGlzT2Jq
ZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNWaXNpdENoaWxkcmVuKCkpOwot
Ci0gICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotCi0gICAg
UHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+ZW5kKCk7Ci0gICAgZm9y
IChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5iZWdpbigpOyBwdHIg
IT0gZW5kOyArK3B0cikKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c3BlY2lmaWNWYWx1
ZSk7Ci19Ci0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MTczLDcgKzE3Myw2IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmoK
ICAgICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3Rv
KGNsYXNzSW5mby0+aGFzU3RhdGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKTsKICAg
ICBzZXRIYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRl
c0luUHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KDApOwog
ICAgIHNldFByZXZlbnRFeHRlbnNpb25zKGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZh
bHNlKTsKICAgICBzZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIwMyw3ICsy
MDIsNiBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0SGFzUmVhZE9ubHlP
ckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhtX2NsYXNzSW5mby0+aGFzU3Rh
dGljU2V0dGVyT3JSZWFkb25seVByb3BlcnRpZXModm0pKTsKICAgICBzZXRIYXNOb25FbnVtZXJh
YmxlUHJvcGVydGllcyhmYWxzZSk7CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0g
ICAgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KDApOwogICAgIHNldFByZXZlbnRFeHRl
bnNpb25zKGZhbHNlKTsKICAgICBzZXREaWRUcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRTdGF0
aWNGdW5jdGlvbnNSZWlmaWVkKGZhbHNlKTsKQEAgLTIzMiw3ICsyMzAsNiBAQCBTdHJ1Y3R1cmU6
OlN0cnVjdHVyZShWTSYgdm0sIGNvbnN0IFN0cnVjCiAgICAgc2V0SGFzUmVhZE9ubHlPckdldHRl
clNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byhwcmV2aW91cy0+aGFzUmVhZE9ubHlPckdl
dHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bygpKTsKICAgICBzZXRIYXNOb25FbnVt
ZXJhYmxlUHJvcGVydGllcyhwcmV2aW91cy0+aGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMoKSk7
CiAgICAgc2V0QXR0cmlidXRlc0luUHJldmlvdXMoMCk7Ci0gICAgc2V0U3BlY2lmaWNGdW5jdGlv
blRocmFzaENvdW50KHByZXZpb3VzLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSk7CiAg
ICAgc2V0UHJldmVudEV4dGVuc2lvbnMocHJldmlvdXMtPnByZXZlbnRFeHRlbnNpb25zKCkpOwog
ICAgIHNldERpZFRyYW5zaXRpb24odHJ1ZSk7CiAgICAgc2V0U3RhdGljRnVuY3Rpb25zUmVpZmll
ZChwcmV2aW91cy0+c3RhdGljRnVuY3Rpb25zUmVpZmllZCgpKTsKQEAgLTMwMCw3ICsyOTcsNyBA
QCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChWCiAgICAgZmluZFN0cnVj
dHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJs
ZSk7CiAgICAgCiAgICAgaWYgKHRhYmxlKSB7Ci0gICAgICAgIHRhYmxlID0gdGFibGUtPmNvcHko
dm0sIHN0cnVjdHVyZSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5s
aW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgbnVtYmVyT2ZT
bG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKICAgICAgICAg
c3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CiAgICAgfQogICAgIApAQCAtMzE3LDcgKzMxNCw3
IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICAgICAgc3Ry
dWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFtZUlu
UHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUHJvcGVydHlNYXBFbnRy
eSBlbnRyeSh2bSwgdGhpcywgc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCksIHN0cnVj
dHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSk7CisgICAgICAgIFByb3BlcnR5
TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdldCgpLCBzdHJ1Y3R1
cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCkpOwogICAgICAg
ICBwcm9wZXJ0eVRhYmxlKCktPmFkZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlBy
b3BlcnR5T2Zmc2V0TXVzdE5vdENoYW5nZSk7CiAgICAgfQogICAgIApAQCAtMzM2LDMwICszMzMs
MTIgQEAgc2l6ZV90IFN0cnVjdHVyZTo6c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lUwogICAgIHJldHVy
biBuZXh0T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KG91dE9mTGluZUNhcGFjaXR5KCkpOwogfQog
IAotdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgU3RyaW5nSW1wbCogcmVwID0gcHJvcGVy
dHlOYW1lLnVpZCgpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwotICAgIG1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0KLSAgICBBU1NFUlQo
aXNEaWN0aW9uYXJ5KCkpOwotICAgIEFTU0VSVChwcm9wZXJ0eVRhYmxlKCkpOwotCi0gICAgUHJv
cGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmdldChyZXApOwotICAgIEFT
U0VSVChlbnRyeSk7Ci0gICAgZW50cnktPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKLX0KLQotU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmVJbXBsKFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkK
K1N0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3Qo
KSk7CiAKICAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblRhYmxlLmdldCh1aWQsIGF0dHJpYnV0ZXMpKSB7Ci0gICAgICAgIEpTQ2Vs
bCogc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMgPSBleGlzdGluZ1RyYW5zaXRpb24tPm1fc3BlY2lm
aWNWYWx1ZUluUHJldmlvdXMuZ2V0KCk7Ci0gICAgICAgIGlmIChzcGVjaWZpY1ZhbHVlSW5QcmV2
aW91cyAmJiBzcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyAhPSBzcGVjaWZpY1ZhbHVlKQotICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0aW5nVHJhbnNpdGlv
bi0+bV9vZmZzZXQsIGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAg
ICAgIG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9vZmZzZXQ7CiAgICAgICAgIHJldHVy
biBleGlzdGluZ1RyYW5zaXRpb247CkBAIC0zNjgsMTYgKzM0NywxNiBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgcmV0dXJuIDA7CiB9CiAKLVN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQp
CitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0
cnVjdHVyZShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7Ci0gICAgcmV0dXJuIGFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgp
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQpOworICAgIHJldHVybiBhZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZS51aWQoKSwgYXR0cmlidXRlcywgb2Zmc2V0KTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHko
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRl
cywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKIHsKICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7Ci0gICAgcmV0dXJuIGFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgdWlkLCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQpOworICAgIHJldHVybiBhZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChzdHJ1Y3R1cmUsIHVpZCwgYXR0cmlidXRl
cywgb2Zmc2V0KTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OmFueU9iamVjdEluQ2hhaW5NYXlJbnRl
cmNlcHRJbmRleGVkQWNjZXNzZXMoKSBjb25zdApAQCAtNDMyLDI1ICs0MTEsMTIgQEAgTm9uUHJv
cGVydHlUcmFuc2l0aW9uIFN0cnVjdHVyZTo6c3VnZ2VzdAogICAgIHJldHVybiBBbGxvY2F0ZUFy
cmF5U3RvcmFnZTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5
T2Zmc2V0JiBvZmZzZXQsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBjb250ZXh0KQorU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgY29udGV4
dCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlIGEgc3BlY2lmaWMgZnVuY3Rpb24sIHdlIG1heSBoYXZl
IGdvdCB0byB0aGlzIHBvaW50IGlmIHRoZXJlIGlzCi0gICAgLy8gYWxyZWFkeSBhIHRyYW5zaXRp
b24gd2l0aCB0aGUgY29ycmVjdCBwcm9wZXJ0eSBuYW1lIGFuZCBhdHRyaWJ1dGVzLCBidXQKLSAg
ICAvLyBzcGVjaWFsaXplZCB0byBhIGRpZmZlcmVudCBmdW5jdGlvbi4gIEluIHRoaXMgY2FzZSB3
ZSBqdXN0IHdhbnQgdG8gZ2l2ZSB1cAotICAgIC8vIGFuZCBkZXNwZWNpYWxpemUgdGhlIHRyYW5z
aXRpb24uCi0gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGNsZWFyIHRoZSB2YWx1ZSBvZiBzcGVjaWZp
Y0Z1bmN0aW9uIHdoaWNoIHdpbGwgcmVzdWx0Ci0gICAgLy8gaW4gdXMgYWRkaW5nIGEgbm9uLXNw
ZWNpZmljIHRyYW5zaXRpb24sIGFuZCBhbnkgc3Vic2VxdWVudCBsb29rdXAgaW4KLSAgICAvLyBT
dHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUgd2lsbCBq
dXN0IHVzZSB0aGF0LgotICAgIGlmIChzcGVjaWZpY1ZhbHVlICYmIHN0cnVjdHVyZS0+bV90cmFu
c2l0aW9uVGFibGUuY29udGFpbnMocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRyaWJ1dGVzKSkKLSAg
ICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7Ci0KICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0
aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwotICAgIEFTU0VS
VCghU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlLCBvZmZzZXQp
KTsKKyAgICBBU1NFUlQoIVN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGlu
Z1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0KSk7
CiAgICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkg
PT0gbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KQotICAgICAgICBzcGVjaWZpY1ZhbHVl
ID0gMDsKLQogICAgIGludCBtYXhUcmFuc2l0aW9uTGVuZ3RoOwogICAgIGlmIChjb250ZXh0ID09
IFB1dFByb3BlcnR5U2xvdDo6UHV0QnlJZCkKICAgICAgICAgbWF4VHJhbnNpdGlvbkxlbmd0aCA9
IHNfbWF4VHJhbnNpdGlvbkxlbmd0aEZvck5vbkV2YWxQdXRCeUlkOwpAQCAtNDU5LDcgKzQyNSw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICBpZiAoc3Ry
dWN0dXJlLT50cmFuc2l0aW9uQ291bnQoKSA+IG1heFRyYW5zaXRpb25MZW5ndGgpIHsKICAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bih2bSwgc3RydWN0dXJlKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9u
KTsKLSAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZSh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgb2Zmc2V0ID0g
dHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBy
ZXR1cm4gdHJhbnNpdGlvbjsKICAgICB9CiAgICAgCkBAIC00NjksMTEgKzQzNSwxMCBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0
UHJldmlvdXNJRCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5t
X25hbWVJblByZXZpb3VzID0gcHJvcGVydHlOYW1lLnVpZCgpOwogICAgIHRyYW5zaXRpb24tPnNl
dEF0dHJpYnV0ZXNJblByZXZpb3VzKGF0dHJpYnV0ZXMpOwotICAgIHRyYW5zaXRpb24tPm1fc3Bl
Y2lmaWNWYWx1ZUluUHJldmlvdXMuc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzcGVjaWZp
Y1ZhbHVlKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtLCB0cmFu
c2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwog
ICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKIAotICAgIG9m
ZnNldCA9IHRyYW5zaXRpb24tPnB1dFNwZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZt
LCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogCiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlv
bi0+bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKQEAgLTUw
NSw3ICs0NzAsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnBy
b3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5
VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTUxMywzMCArNDc4LDYgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogICAgIHJldHVybiB0cmFu
c2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSByZXBsYWNl
RnVuY3Rpb24pCi17Ci0gICAgQVNTRVJUKHN0cnVjdHVyZS0+c3BlY2lmaWNGdW5jdGlvblRocmFz
aENvdW50KCkgPCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOwotICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKLQotICAgIHRyYW5zaXRpb24t
PnNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0
aW9uVGhyYXNoQ291bnQoKSArIDEpOwotCi0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikp
OwotICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKLSAgICB0
cmFuc2l0aW9uLT5waW4oKTsKLQotICAgIGlmICh0cmFuc2l0aW9uLT5zcGVjaWZpY0Z1bmN0aW9u
VGhyYXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpCi0gICAgICAg
IHRyYW5zaXRpb24tPmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyh2bSk7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIGJvb2wgcmVtb3ZlZCA9IHRyYW5zaXRpb24tPmRlc3BlY2lmeUZ1bmN0aW9uKHZtLCByZXBs
YWNlRnVuY3Rpb24pOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQpOwot
ICAgIH0KLQotICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICBy
ZXR1cm4gdHJhbnNpdGlvbjsKLX0KLQogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNo
YW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBEZWZlckdDIGRlZmVy
R0Modm0uaGVhcCk7CkBAIC01NDQsNyArNDg1LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0
dHJpYnV0ZUNoYW5nZVRyYQogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUo
dm0sIHN0cnVjdHVyZSk7CiAKICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikpOworICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0
eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyh2bSkpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAgICAgICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAKQEAgLTU2
OCw3ICs1MDksNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpCiAK
ICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIHRyYW5zaXRpb24tPnBy
b3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5
VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVy
dHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0RGljdGlvbmFyeUtpbmQoa2luZCk7CiAgICAg
dHJhbnNpdGlvbi0+cGluKCk7CkBAIC02MzEsNyArNTcyLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OnByZXZlbnRFeHRlbnNpb25zVAogCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwog
ICAgIHN0cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZl
ckdDKTsKLSAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSwgdHJhbnNpdGlvbikp
OworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKSk7CiAgICAgdHJhbnNpdGlv
bi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnNldFBy
ZXZlbnRFeHRlbnNpb25zKHRydWUpOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNjQwLDEz
ICs1ODEsMTMgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVAogICAg
IHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQ
cm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSwgU3RydWN0dXJlKiBvd25lcikKK1By
b3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQo
Vk0mIHZtKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKICAg
ICBpZiAoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybiBwcm9wZXJ0eVRh
YmxlKCktPmNvcHkodm0sIG93bmVyLCBwcm9wZXJ0eVRhYmxlKCktPnNpemUoKSArIDEpOworICAg
ICAgICByZXR1cm4gcHJvcGVydHlUYWJsZSgpLT5jb3B5KHZtLCBwcm9wZXJ0eVRhYmxlKCktPnNp
emUoKSArIDEpOwogICAgIAogICAgIC8vIEhvbGQgdGhlIGxvY2sgd2hpbGUgc3RlYWxpbmcgdGhl
IHRhYmxlIC0gc28gdGhhdCBnZXRDb25jdXJyZW50bHkoKSBvbiBhbm90aGVyIHRocmVhZAogICAg
IC8vIHdpbGwgZWl0aGVyIGhhdmUgdG8gYnlwYXNzIHRoaXMgc3RydWN0dXJlLCBvciB3aWxsIGdl
dCB0byB1c2UgdGhlIHByb3BlcnR5IHRhYmxlCkBAIC02ODIsNyArNjIzLDcgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdAogICAgIHRyYW5zaXRpb24tPnNldFByZXZp
b3VzSUQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0
cmlidXRlc0luUHJldmlvdXMoYXR0cmlidXRlcyk7CiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNl
dEluZGV4aW5nVHlwZShpbmRleGluZ1R5cGUpOwotICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNs
b25lSWZQaW5uZWQodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OwogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPm1fb2Zmc2V0LCB0cmFuc2l0
aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAKQEAgLTc3MywxOSArNzE0LDE2IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVMKICAgICByZXR1cm4gdGhpczsKIH0K
IAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9u
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIWVudW1lcmF0aW9uQ2FjaGUoKSk7
CiAKLSAgICBpZiAoc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KCkgPT0gbWF4U3BlY2lmaWNG
dW5jdGlvblRocmFzaENvdW50KQotICAgICAgICBzcGVjaWZpY1ZhbHVlID0gMDsKLQogICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3NhcnlGb3JQaW5uaW5nKHZtLCBkZWZlckdDKTsKICAgICAKICAgICBwaW4oKTsKIAotICAgIHJl
dHVybiBwdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNp
ZmljVmFsdWUpOworICAgIHJldHVybiBhZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7
CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC04MTIsMTEgKzc1
MCw1NyBAQCB2b2lkIFN0cnVjdHVyZTo6YWxsb2NhdGVSYXJlRGF0YShWTSYgdm0pCiB7CiAgICAg
QVNTRVJUKCFoYXNSYXJlRGF0YSgpKTsKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YSogcmFyZURhdGEg
PSBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3JlYXRlKHZtLCBwcmV2aW91cygpKTsKKyAgICBXVEY6OnN0
b3JlU3RvcmVGZW5jZSgpOwogICAgIG1fcHJldmlvdXNPclJhcmVEYXRhLnNldCh2bSwgdGhpcywg
cmFyZURhdGEpOworICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgc2V0SGFzUmFyZURh
dGEodHJ1ZSk7CiAgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOwogfQogCitXYXRjaHBvaW50U2V0
KiBTdHJ1Y3R1cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFZNJiB2
bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7CisgICAgCisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICBhbGxv
Y2F0ZVJhcmVEYXRhKHZtKTsKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2sp
OworICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IHRoaXMtPnJhcmVEYXRhKCk7Cisg
ICAgaWYgKCFyYXJlRGF0YS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzKSB7CisgICAgICAg
IHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMgPQorICAgICAgICAgICAgc3Rk
OjptYWtlX3VuaXF1ZTxTdHJ1Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwPigp
OworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIH0KKyAgICBhdXRvIHJlc3Vs
dCA9IHJhcmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMtPmFkZChvZmZzZXQsIG51
bGxwdHIpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZSA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KElzV2F0Y2hlZCkpOworICAg
IHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOworfQorCit2b2lkIFN0cnVjdHVy
ZTo6c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBBU1NFUlQoIWlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5
KCkpOworICAgIAorICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGdldCh2bSwgcHJvcGVydHlO
YW1lKTsKKyAgICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgc3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCBv
ZmZzZXQpOworfQorCit2b2lkIFN0cnVjdHVyZTo6ZGlkQ2FjaGVQcm9wZXJ0eVJlcGxhY2VtZW50
KFZNJiB2bSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGVuc3VyZVByb3BlcnR5UmVw
bGFjZW1lbnRXYXRjaHBvaW50U2V0KHZtLCBvZmZzZXQpLT5maXJlQWxsKCJEaWQgY2FjaGUgcHJv
cGVydHkgcmVwbGFjZW1lbnQiKTsKK30KKwordm9pZCBTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJ
bnRlcm5hbFByb3BlcnRpZXMoVk0mIHZtKQoreworICAgIGlmICghaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSkgeworICAgICAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPnRvU3RyaW5nKTsKKyAgICAgICAgc3RhcnRXYXRjaGluZ1By
b3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT52YWx1ZU9mKTsKKyAg
ICB9CisgICAgc2V0RGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXModHJ1ZSk7Cit9CisKICNpZiBE
VU1QX1BST1BFUlRZTUFQX1NUQVRTCiAKIHN0cnVjdCBQcm9wZXJ0eU1hcFN0YXRpc3RpY3NFeGl0
TG9nZ2VyIHsKQEAgLTg0NSwyMSArODI5LDIxIEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hl
Y2tDb25zaXN0ZW5jeSgKIAogI2VuZGlmCiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29w
eVByb3BlcnR5VGFibGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShWTSYgdm0pCiB7CiAgICAgaWYgKCFwcm9wZXJ0
eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpj
bG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOworICAgIHJldHVybiBQcm9w
ZXJ0eVRhYmxlOjpjbG9uZSh2bSwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CiB9CiAKLVByb3Bl
cnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKFZNJiB2bSwg
U3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5
VGFibGVGb3JQaW5uaW5nKFZNJiB2bSkKIHsKICAgICBpZiAocHJvcGVydHlUYWJsZSgpKQotICAg
ICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sIG93bmVyLCAqcHJvcGVydHlUYWJs
ZSgpLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCAqcHJv
cGVydHlUYWJsZSgpLmdldCgpKTsKICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKHZt
LCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkp
OwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYsIFN0
cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFs
dWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYsIFN0cmlu
Z0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CiAgICAgVmVjdG9yPFN0cnVjdHVy
ZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CkBAIC04NzEsNyAr
ODU1LDYgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRDb25jdXJyZW50bAogICAgICAg
ICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHRhYmxlLT5nZXQodWlkKTsKICAgICAgICAgaWYg
KGVudHJ5KSB7CiAgICAgICAgICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Ci0g
ICAgICAgICAgICBzcGVjaWZpY1ZhbHVlID0gZW50cnktPnNwZWNpZmljVmFsdWUuZ2V0KCk7CiAg
ICAgICAgICAgICBQcm9wZXJ0eU9mZnNldCByZXN1bHQgPSBlbnRyeS0+b2Zmc2V0OwogICAgICAg
ICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtODg1LDE0ICs4NjgsMTMgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXRD
b25jdXJyZW50bAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBhdHRy
aWJ1dGVzID0gc3RydWN0dXJlLT5hdHRyaWJ1dGVzSW5QcmV2aW91cygpOwotICAgICAgICBzcGVj
aWZpY1ZhbHVlID0gc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpOwog
ICAgICAgICByZXR1cm4gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB9CiAgICAgCiAgICAgcmV0
dXJuIGludmFsaWRPZmZzZXQ7CiB9CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpT
Q2VsbComIHNwZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogewog
ICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJl
KCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC05MDcsNDIgKzg4OSwxNSBAQCBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYgdm0sIFByCiAgICAgICAgIHJldHVybiBpbnZhbGlk
T2Zmc2V0OwogCiAgICAgYXR0cmlidXRlcyA9IGVudHJ5LT5hdHRyaWJ1dGVzOwotICAgIHNwZWNp
ZmljVmFsdWUgPSBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5nZXQoKTsKICAgICByZXR1cm4gZW50cnkt
Pm9mZnNldDsKIH0KIAotYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKFZNJiB2bSwg
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVh
cCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsK
LSAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
UHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmdldChwcm9wZXJ0eU5h
bWUudWlkKCkpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEFTU0VSVChlbnRyeS0+c3BlY2lmaWNWYWx1ZSk7Ci0gICAgZW50cnktPnNwZWNpZmljVmFsdWUu
Y2xlYXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lm
eUFsbEZ1bmN0aW9ucyhWTSYgdm0pCi17Ci0gICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwot
ICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFByb3BlcnR5VGFi
bGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVy
ICE9IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5zcGVjaWZpY1ZhbHVlLmNsZWFyKCk7Ci19
Ci0KLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZShWTSYgdm0sIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3Bl
Y2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBHQ1NhZmVD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOwogICAgIAorICAgIHNl
dERpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKGZhbHNlKTsKKyAgICAKICAgICBBU1NFUlQoIUpT
Qzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKIAogICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKQEAgLTk1Niw3ICs5MTEsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OnB1dFNwZWNpZmljVmFsCiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBwcm9wZXJ0
eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKLSAgICBwcm9wZXJ0eVRh
YmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHZtLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQoUHJvcGVydHlNYXBF
bnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcyksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxl
OjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwogICAgIHJldHVybiBuZXdPZmZzZXQ7CkBAIC0xMDYwLDcgKzEwMTUsNiBAQCB2b2lkIFN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2NhY2hlZFByb3RvdHlwZUNoYWluKTsKICAgICB9CiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKLSAgICB2aXNpdG9yLmFw
cGVuZCgmdGhpc09iamVjdC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7CiAKICAgICBpZiAo
dGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpIHsKICAgICAgICAgQVNTRVJUKHRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZSk7CkBAIC0xMDgzLDggKzEwMzcsNyBAQCBi
b29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlCiAgICAgICAgIGN1cnJlbnQg
PSBwcm90b3R5cGUuYXNDZWxsKCktPnN0cnVjdHVyZSh2bSk7CiAgICAgICAgIAogICAgICAgICB1
bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAg
ICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGN1cnJlbnQtPmdldCh2bSwgcHJvcGVydHlOYW1l
LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAg
ICBpZiAoIUpTQzo6aXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIApAQCAtMTE0NCwxMyArMTA5Nyw4IEBAIHZvaWQgU3RydWN0dXJlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGMKICAgICBpZiAodGFibGUpIHsKICAgICAgICAgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgaXRlciA9IHRhYmxlLT5iZWdpbigpOwogICAgICAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBlbmQgPSB0YWJsZS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBpdGVyLT5rZXksICI6Iiwgc3RhdGljX2Nhc3Q8aW50Pihp
dGVyLT5vZmZzZXQpKTsKLSAgICAgICAgICAgIGlmIChpdGVyLT5zcGVjaWZpY1ZhbHVlKSB7Ci0g
ICAgICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlDb250ZXh0OwotICAgICAgICAgICAgICAg
IG91dC5wcmludCgiPT4iLCBSYXdQb2ludGVyKGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlLT5t
X2xvY2sudW5sb2NrKCk7CiAgICAgfQpAQCAtMTE2MCwxMCArMTEwOCw2IEBAIHZvaWQgU3RydWN0
dXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGMKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1f
bmFtZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksICI6Iiwgc3RhdGljX2Nh
c3Q8aW50PihzdHJ1Y3R1cmUtPm1fb2Zmc2V0KSk7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1f
c3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpIHsKLSAgICAgICAgICAgIER1bXBDb250ZXh0IGR1bW15
Q29udGV4dDsKLSAgICAgICAgICAgIG91dC5wcmludCgiPT4iLCBSYXdQb2ludGVyKHN0cnVjdHVy
ZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSkpOwotICAgICAgICB9CiAgICAgfQog
ICAgIAogICAgIG91dC5wcmludCgifSwgIiwgSW5kZXhpbmdUeXBlRHVtcChpbmRleGluZ1R5cGUo
KSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJl
dmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsMTIgKzExMSwxMSBAQCBwdWJsaWM6CiAKICAgICBz
dGF0aWMgdm9pZCBkdW1wU3RhdGlzdGljcygpOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFBy
b3BlcnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90
OjpVbmtub3duQ29udGV4dCk7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFu
c2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBTdHJpbmdJ
bXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJv
cGVydHlPZmZzZXQmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBh
ZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9w
ZXJ0eU9mZnNldCYpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFk
ZFByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQg
PSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0KTsKKyAgICBzdGF0aWMgU3RydWN0dXJl
KiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0
cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlP
ZmZzZXQmKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9w
ZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3BlcnR5TmFt
ZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmKTsKICAgICBzdGF0aWMgU3Ry
dWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0
cnVjdHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIEpTVmFs
dWUgcHJvdG90eXBlKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBk
ZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUp
OwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1
cmUqKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAgLTEzOCw3ICsxMzcsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKIAogICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1
c2VkIHdpdGggY2F1dGlvbi4gIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb3BlcnR5T2Zmc2V0
IGFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3Zl
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgdm9pZCBz
ZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90eXBlKSB7
IG1fcHJvdG90eXBlLnNldCh2bSwgdGhpcywgcHJvdG90eXBlKTsgfQogICAgICAgICAKQEAgLTE4
OCw4ICsxODcsNiBAQCBwdWJsaWM6CiAgICAgLy8gV2lsbCBqdXN0IHRoZSBwcm90b3R5cGUgY2hh
aW4gaW50ZXJjZXB0IHRoaXMgcHJvcGVydHkgYWNjZXNzPwogICAgIGJvb2wgcHJvdG90eXBlQ2hh
aW5NYXlJbnRlcmNlcHRTdG9yZVRvKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICAgICAgCi0gICAg
Ym9vbCB0cmFuc2l0aW9uRGlkSW52b2x2ZVNwZWNpZmljVmFsdWUoKSBjb25zdCB7IHJldHVybiAh
IW1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXM7IH0KLSAgICAgICAgCiAgICAgU3RydWN0dXJlKiBw
cmV2aW91c0lEKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKQEAgLTI2MywxMCArMjYwLDEwIEBAIHB1YmxpYzoKIAogICAg
IFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSk7CiAgICAgUHJvcGVydHlPZmZz
ZXQgZ2V0KFZNJiwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUpOwotICAgIEpTX0VYUE9SVF9QUklW
QVRFIFByb3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJp
YnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBy
b3BlcnR5T2Zmc2V0IGdldChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMp
OwogCiAgICAgUHJvcGVydHlPZmZzZXQgZ2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCog
dWlkKTsKLSAgICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBs
KiB1aWQsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzLCBKU0NlbGwqJiBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICBQcm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQsIHVu
c2lnbmVkJiBhdHRyaWJ1dGVzKTsKIAogICAgIHZvaWQgc2V0SGFzR2V0dGVyU2V0dGVyUHJvcGVy
dGllc1dpdGhQcm90b0NoZWNrKGJvb2wgaXNfX3Byb3RvX18pCiAgICAgewpAQCAtMjgzLDkgKzI4
MCw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuICFKU0M6OmlzVmFsaWRPZmZzZXQobV9vZmZz
ZXQpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVzcGVjaWZ5RGljdGlv
bmFyeUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKLSAgICB2b2lkIGRpc2FibGVTcGVjaWZp
Y0Z1bmN0aW9uVHJhY2tpbmcoKSB7IHNldFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudChtYXhT
cGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpOyB9Ci0KICAgICB2b2lkIHNldEVudW1lcmF0aW9u
Q2FjaGUoVk0mLCBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlvbkNhY2hlKTsgLy8g
RGVmaW5lZCBpbiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmguCiAgICAgSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvciogZW51bWVyYXRpb25DYWNoZSgpOyAvLyBEZWZpbmVkIGluIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaC4KICAgICB2b2lkIGdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiwg
UHJvcGVydHlOYW1lQXJyYXkmLCBFbnVtZXJhdGlvbk1vZGUpOwpAQCAtMzY0LDEzICszNTgsMzYg
QEAgcHVibGljOgogICAgICAgICBBU1NFUlQodHJhbnNpdGlvbldhdGNocG9pbnRTZXRJc1N0aWxs
VmFsaWQoKSk7CiAgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuYWRkKHdhdGNocG9p
bnQpOwogICAgIH0KLSAgICAgICAgCisgICAgCiAgICAgdm9pZCBkaWRUcmFuc2l0aW9uRnJvbVRo
aXNTdHJ1Y3R1cmUoKSBjb25zdDsKICAgICAKICAgICBJbmxpbmVXYXRjaHBvaW50U2V0JiB0cmFu
c2l0aW9uV2F0Y2hwb2ludFNldCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV90cmFu
c2l0aW9uV2F0Y2hwb2ludFNldDsKICAgICB9CisgICAgCisgICAgV2F0Y2hwb2ludFNldCogZW5z
dXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mLCBQcm9wZXJ0eU9mZnNldCk7
CisgICAgdm9pZCBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mIHZtLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCisgICAgeworICAgICAgICBlbnN1cmVQcm9wZXJ0eVJlcGxh
Y2VtZW50V2F0Y2hwb2ludFNldCh2bSwgb2Zmc2V0KTsKKyAgICB9CisgICAgdm9pZCBzdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mLCBQcm9wZXJ0eU5hbWUpOworICAgIFdh
dGNocG9pbnRTZXQqIHByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KFByb3BlcnR5T2Zm
c2V0KTsKKyAgICB2b2lkIGRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCk7CisgICAg
dm9pZCBkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mLCBQcm9wZXJ0eU9mZnNldCk7Cisg
ICAgCisgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnko
Vk0mIHZtKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShkaWRXYXRjaEludGVybmFsUHJvcGVy
dGllcygpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3RhcnRXYXRjaGluZ0ludGVy
bmFsUHJvcGVydGllcyh2bSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc3RhcnRXYXRjaGluZ0lu
dGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5Rm9yRW50aXJlQ2hhaW4oVk0mIHZtKQorICAgIHsK
KyAgICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsgc3Ry
dWN0dXJlID0gc3RydWN0dXJlLT5zdG9yZWRQcm90b3R5cGVTdHJ1Y3R1cmUoKSkKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5
KHZtKTsKKyAgICB9CiAKICAgICBQYXNzUmVmUHRyPFN0cnVjdHVyZVNoYXBlPiB0b1N0cnVjdHVy
ZVNoYXBlKCk7CiAgICAgCkBAIC00MDYsMTEgKzQyMywxMSBAQCBwdWJsaWM6CiAgICAgREVGSU5F
X0JJVEZJRUxEKGJvb2wsIGhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVk
aW5nUHJvdG8sIEhhc1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJv
dG8sIDEsIDQpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNOb25FbnVtZXJhYmxlUHJv
cGVydGllcywgSGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMsIDEsIDUpOwogICAgIERFRklORV9C
SVRGSUVMRCh1bnNpZ25lZCwgYXR0cmlidXRlc0luUHJldmlvdXMsIEF0dHJpYnV0ZXNJblByZXZp
b3VzLCAxNCwgNik7Ci0gICAgREVGSU5FX0JJVEZJRUxEKHVuc2lnbmVkLCBzcGVjaWZpY0Z1bmN0
aW9uVGhyYXNoQ291bnQsIFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCwgMiwgMjApOwogICAg
IERFRklORV9CSVRGSUVMRChib29sLCBwcmV2ZW50RXh0ZW5zaW9ucywgUHJldmVudEV4dGVuc2lv
bnMsIDEsIDIyKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlk
VHJhbnNpdGlvbiwgMSwgMjMpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNGdW5j
dGlvbnNSZWlmaWVkLCBTdGF0aWNGdW5jdGlvbnNSZWlmaWVkLCAxLCAyNCk7CiAgICAgREVGSU5F
X0JJVEZJRUxEKGJvb2wsIGhhc1JhcmVEYXRhLCBIYXNSYXJlRGF0YSwgMSwgMjUpOworICAgIERF
RklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGllcywgRGlkV2F0Y2hJ
bnRlcm5hbFByb3BlcnRpZXMsIDEsIDI2KTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
TExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNDIxLDcgKzQzOCw3IEBAIHByaXZhdGU6CiAKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGUoVk0mLCBjb25zdCBTdHJ1Y3R1cmUqKTsKICAgICAK
LSAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbChTdHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbChT
dHJ1Y3R1cmUqLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5
T2Zmc2V0Jik7CiAKICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHRoZSBzdHJ1Y3R1cmUgdGhhdCBo
YXMgYSB1c2FibGUgcHJvcGVydHkgdGFibGUsIHRoYXQgcHJvcGVydHkgdGFibGUsCiAgICAgLy8g
YW5kIHRoZSBsaXN0IG9mIHN0cnVjdHVyZXMgdGhhdCB3ZSB2aXNpdGVkIGJlZm9yZSB3ZSBnb3Qg
dG8gaXQuIElmIGl0IHJldHVybnMgYQpAQCAtNDMxLDE5ICs0NDgsMTYgQEAgcHJpdmF0ZToKICAg
ICAKICAgICBzdGF0aWMgU3RydWN0dXJlKiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3Ry
dWN0dXJlKiwgRGljdGlvbmFyeUtpbmQpOwogCi0gICAgUHJvcGVydHlPZmZzZXQgcHV0U3BlY2lm
aWNWYWx1ZShWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBz
cGVjaWZpY1ZhbHVlKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0
eU5hbWUpOwogCiAgICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcChjb25zdCBHQ1NhZmVDb25jdXJy
ZW50SklUTG9ja2VyJiwgVk0mLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogCi0gICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihWTSYsIFByb3Bl
cnR5TmFtZSk7Ci0gICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoVk0mKTsKLQogICAgIFdy
aXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJvcGVydHlUYWJsZSgpOwotICAgIFByb3BlcnR5
VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiwgU3RydWN0dXJlKiBv
d25lcik7Ci0gICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoVk0mLCBTdHJ1Y3R1
cmUqIG93bmVyKTsKLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcoVk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWtlUHJvcGVy
dHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9w
ZXJ0eVRhYmxlKFZNJik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKFZNJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwKFZNJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnko
Vk0mIHZtLCBEZWZlckdDJikKICAgICB7CkBAIC01MDMsMTIgKzUxNywxMiBAQCBwcml2YXRlOgog
ICAgIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKFZNJik7CisgICAgCisgICAgdm9pZCBzdGFy
dFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzKFZNJik7CiAKICAgICBzdGF0aWMgY29uc3QgaW50
IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCA9IDY0OwogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhU
cmFuc2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQgPSA1MTI7CiAKLSAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50ID0gMzsKLSAgICAKICAg
ICAvLyBUaGVzZSBuZWVkIHRvIGJlIHByb3Blcmx5IGFsaWduZWQgYXQgdGhlIGJlZ2lubmluZyBv
ZiB0aGUgJ1N0cnVjdHVyZScKICAgICAvLyBwYXJ0IG9mIHRoZSBvYmplY3QuCiAgICAgU3RydWN0
dXJlSURCbG9iIG1fYmxvYjsKQEAgLTUyMSw3ICs1MzUsNiBAQCBwcml2YXRlOgogICAgIFdyaXRl
QmFycmllcjxKU0NlbGw+IG1fcHJldmlvdXNPclJhcmVEYXRhOwogCiAgICAgUmVmUHRyPFN0cmlu
Z0ltcGw+IG1fbmFtZUluUHJldmlvdXM7Ci0gICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9zcGVj
aWZpY1ZhbHVlSW5QcmV2aW91czsKIAogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgJKHJldmlzaW9uIDE3MDc4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDkgKzEwMiw3IEBA
IGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChWTSYKIGlubGluZSBQcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRseShWTSYgdm0sIFN0cmluZ0ltcGwqIHVp
ZCkKIHsKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICBKU0NlbGwqIHNwZWNp
ZmljVmFsdWVJZ25vcmVkOwotICAgIHJldHVybiBnZXRDb25jdXJyZW50bHkoCi0gICAgICAgIHZt
LCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlSWdub3JlZCk7CisgICAgcmV0
dXJuIGdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzSWdub3JlZCk7CiB9CiAKIGlu
bGluZSBib29sIFN0cnVjdHVyZTo6aGFzSW5kZXhpbmdIZWFkZXIoY29uc3QgSlNDZWxsKiBjZWxs
KSBjb25zdApAQCAtMjIzLDYgKzIyMSwzMSBAQCBBTFdBWVNfSU5MSU5FIFdyaXRlQmFycmllcjxQ
cm9wZXJ0eVRhYmxlCiAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKIH0KIAoraW5s
aW5lIHZvaWQgU3RydWN0dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkoUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KQoreworICAgIGlmIChMSUtFTFkoIWhhc1JhcmVEYXRhKCkpKQorICAgICAgICByZXR1cm47
CisgICAgU3RydWN0dXJlUmFyZURhdGE6OlByb3BlcnR5V2F0Y2hwb2ludE1hcCogbWFwID0gcmFy
ZURhdGEoKS0+bV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRzLmdldCgpOworICAgIGlmIChMSUtF
TFkoIW1hcCkpCisgICAgICAgIHJldHVybjsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtYXAt
PmdldChvZmZzZXQpOworICAgIGlmIChMSUtFTFkoIXNldCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBzZXQtPmZpcmVBbGwoIlByb3BlcnR5IGRpZCBnZXQgcmVwbGFjZWQiKTsKK30KKworaW5saW5l
IFdhdGNocG9pbnRTZXQqIFN0cnVjdHVyZTo6cHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRT
ZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9j
a2VyKG1fbG9jayk7CisgICAgaWYgKCFoYXNSYXJlRGF0YSgpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICBTdHJ1Y3R1cmVSYXJlRGF0YTo6
UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSByYXJlRGF0YSgpLT5tX3JlcGxhY2VtZW50V2F0
Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYgKCFtYXApCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBtYXAtPmdldChvZmZzZXQpOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wg
U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKIHsKICAgICBQcm9wZXJ0
eVRhYmxlKiBwcm9wZXJ0eVRhYmxlID0gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmdldCgpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhLmNwcAkocmV2aXNpb24gMTcwNzg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0NiwxMSBA
QCBTdHJ1Y3R1cmVSYXJlRGF0YSogU3RydWN0dXJlUmFyZURhdGE6OmNyCiAgICAgcmV0dXJuIHJh
cmVEYXRhOwogfQogCit2b2lkIFN0cnVjdHVyZVJhcmVEYXRhOjpkZXN0cm95KEpTQ2VsbCogY2Vs
bCkKK3sKKyAgICBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmVSYXJlRGF0YSo+KGNlbGwpLT5TdHJ1Y3R1
cmVSYXJlRGF0YTo6flN0cnVjdHVyZVJhcmVEYXRhKCk7Cit9CisKIFN0cnVjdHVyZVJhcmVEYXRh
OjpTdHJ1Y3R1cmVSYXJlRGF0YShWTSYgdm0sIFN0cnVjdHVyZSogcHJldmlvdXMpCiAgICAgOiBK
U0NlbGwodm0sIHZtLnN0cnVjdHVyZVJhcmVEYXRhU3RydWN0dXJlLmdldCgpKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5o
CShyZXZpc2lvbiAxNzA3ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVSYXJlRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAi
Q2xhc3NJbmZvLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5o
IgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00
MCw2ICs0MSwxMCBAQCBjbGFzcyBTdHJ1Y3R1cmVSYXJlRGF0YSA6IHB1YmxpYyBKU0NlbGwgCiBw
dWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZVJhcmVEYXRhKiBjcmVhdGUoVk0mLCBTdHJ1Y3R1
cmUqKTsKIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwor
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBz
dGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3Jl
YXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHByb3RvdHlwZSk7CkBA
IC01MywxMCArNTgsMTIgQEAgcHVibGljOgogCiAgICAgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciog
ZW51bWVyYXRpb25DYWNoZSgpOwogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYsIGNv
bnN0IFN0cnVjdHVyZSogb3duZXIsIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIHZhbHVlKTsKLQor
ICAgIAogICAgIERFQ0xBUkVfRVhQT1JUX0lORk87CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFN0cnVjdHVyZTsKKyAgICAKICAgICBTdHJ1Y3R1cmVSYXJlRGF0YShWTSYsIFN0cnVjdHVy
ZSopOwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzVmlzaXRDaGlsZHJlbiB8IEpTQ2VsbDo6U3RydWN0dXJlRmxhZ3M7CkBAIC02NCw2ICs3MSw5
IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVyZT4gbV9wcmV2aW91czsKICAg
ICBXcml0ZUJhcnJpZXI8SlNTdHJpbmc+IG1fb2JqZWN0VG9TdHJpbmdWYWx1ZTsKICAgICBXcml0
ZUJhcnJpZXI8SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcj4gbV9lbnVtZXJhdGlvbkNhY2hlOworICAg
IAorICAgIHR5cGVkZWYgSGFzaE1hcDxQcm9wZXJ0eU9mZnNldCwgUmVmUHRyPFdhdGNocG9pbnRT
ZXQ+LCBXVEY6OkludEhhc2g8UHJvcGVydHlPZmZzZXQ+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9L
ZXlIYXNoVHJhaXRzPFByb3BlcnR5T2Zmc2V0Pj4gUHJvcGVydHlXYXRjaHBvaW50TWFwOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxQcm9wZXJ0eVdhdGNocG9pbnRNYXA+IG1fcmVwbGFjZW1lbnRXYXRj
aHBvaW50U2V0czsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1j
b25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitmdW5jdGlvbiBmb28ocCkgeworICAgIGlm
IChwKQorICAgICAgICBNYXRoID0ge3NpbjogZnVuY3Rpb24oKSB7IHJldHVybiA0MjsgfSwgUEk6
IDQzLCBhYnM6IE1hdGguYWJzfTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworKGZ1bmN0aW9uKCkg
eworICAgIHZhciBuID0gMTAwMDAwOworICAgIHZhciBtID0gMTAwOworICAgIHZhciByZXN1bHQg
PSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIGZvbyhpID09
IG4gLSBtKTsKKyAgICAgICAgcmVzdWx0ICs9IE1hdGguc2luKE1hdGguUEkpOworICAgIH0KKyAg
ICBpZiAoTWF0aC5hYnMocmVzdWx0IC0gbSAqIDQyKSA+IDFlLTgpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQt
cHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjIgQEAKK3ZhciBvID0ge2Y6e2Y6e2Y6e2Y6e2Y6e2Y6e2Y6NDJ9fX19fX19OworCitmdW5j
dGlvbiBmb28ocCkgeworICAgIGlmIChwKQorICAgICAgICBvLmYuZi5mLmYuZi5mID0ge2Y6NTN9
OworfQorCitub0lubGluZShmb28pOworCisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG4gPSAxMDAw
MDA7CisgICAgdmFyIG0gPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZm9vKGkgPT0gbiAtIG0pOworICAg
ICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIH0KKyAgICAKKyAgICBpZiAocmVz
dWx0ICE9IChuIC0gbSkgKiA0MiArIG0gKiA1MykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9s
ZC10aGVuLWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1m
b2xkLXRoZW4taW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXBvbHktcmVwbGFjZS10aGVuLWNhY2hlLWdldC1h
bmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBA
QAordmFyIG8gPSB7Zjo0Mn07CisKK2Z1bmN0aW9uIGZvbyhwLCBvLCB2KSB7CisgICAgaWYgKHAp
CisgICAgICAgIG8uZiA9IHY7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gby5m
OworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKworZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDsgKytpKQorICAgIGZvbyhmYWxzZSk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7
ICsraSkKKyAgICBmb28odHJ1ZSwge30sIDQyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsg
KytpKQorICAgIGZvbyh0cnVlLCBvLCA0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
OyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCitmb28o
dHJ1ZSwgbywgNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1MykKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcmVwbGFjZS10aGVuLWNh
Y2hlLWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcmVwbGFjZS10aGVuLWNhY2hl
LWdldC1hbmQtZm9sZC10aGVuLWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUt
Z2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMwIEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHAsIHYpIHsKKyAgICBpZiAo
cCkKKyAgICAgICAgby5mID0gdjsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBv
LmY7Cit9CisKK25vSW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDEwOyArK2kpCisgICAgZm9vKGZhbHNlKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDsgKytpKQorICAgIGZvbyh0cnVlLCA0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
OyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0MikK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCitmb28o
dHJ1ZSwgNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1MykKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNo
ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9qaXQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBv
aW50LWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9pbnQtaW52
YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBmb28o
cCwgdikgeworICAgIGlmIChwKQorICAgICAgICBnbG9iYWwgPSB2OworfQorCitmdW5jdGlvbiBi
YXIoKSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5l
KGJhcik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkKKyAgICBmb28oZmFsc2UpOwor
Cit2YXIgdmFsdWUgPSA0MjsKK2Zvbyh0cnVlLCB2YWx1ZSk7Cit2YXIgbiA9IDEwMDAwMDsKK3Zh
ciBtID0gMTAwOworZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICBpZiAoaSA9PSBu
IC0gbSkKKyAgICAgICAgZm9vKHRydWUsIHZhbHVlID0gNTMpOworICAgIHZhciByZXN1bHQgPSBi
YXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IG9u
IGl0ZXJhdGlvbiAiICsgaSArICIgZ290OiAiICsgcmVzdWx0OworfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUt
Z2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1n
ZXQtYW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUt
Z2V0LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI2IEBACit2YXIgbyA9IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBvLmYgPSB2
OworfQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKworbm9JbmxpbmUo
Zm9vKTsKK25vSW5saW5lKGJhcik7CisKK2Zvbyg0Mik7Citmb28oNDIpOworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGJhcigpOworICAgIGlm
IChyZXN1bHQgIT0gNDIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJl
c3VsdDsKK30KKworZm9vKDUzKTsKK3ZhciByZXN1bHQgPSBiYXIoKTsKK2lmIChyZXN1bHQgIT0g
NTMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0IGF0IGVuZDogIiArIHJlc3VsdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQtcHV0LXRvLXNjb3Bl
LWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUtZ2xvYmFs
LWNhY2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGxpbnQtcHV0LXRvLXNjb3BlLWdsb2JhbC1jYWNo
ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBA
QAorZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBnbG9iYWwgPSB2OworfQorCitmdW5jdGlvbiBiYXIo
KSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJh
cik7CisKK3ZhciB2YWx1ZSA9IDQyOworZm9vKHZhbHVlKTsKK3ZhciBuID0gMTAwMDAwOwordmFy
IG0gPSAxMDA7Citmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgIGlmIChpID09IG4g
LSBtKQorICAgICAgICBmb28odmFsdWUgPSA1Myk7CisgICAgdmFyIHJlc3VsdCA9IGJhcigpOwor
ICAgIGlmIChyZXN1bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93ICJFcnJvcjogb24gaXRlcmF0
aW9uICIgKyBpICsgIiBnb3Q6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12
YWx1ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBlYXQtcHV0LXRvLXNjb3BlLWdsb2JhbC13aXRoLXNh
bWUtdmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9yZXBlYXQtcHV0LXRvLXNjb3BlLWdsb2JhbC13
aXRoLXNhbWUtdmFsdWUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjMgQEAKK2Z1bmN0aW9uIGZvbyh2KSB7CisgICAgZ2xvYmFsID0gdjsKK30KKwor
ZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBnbG9iYWw7Cit9CisKK25vSW5saW5lKGZvbyk7
Citub0lubGluZShiYXIpOworCit2YXIgdmFsdWUgPSA0MjsKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTA7ICsraSkKKyAgICBmb28odmFsdWUpOwordmFyIG4gPSAxMDAwMDA7Cit2YXIgbSA9IDEwMDsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgaWYgKGkgPT0gbiAtIG0pCisgICAg
ICAgIGZvbyh2YWx1ZSA9IDUzKTsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJl
c3VsdCAhPSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBvbiBpdGVyYXRpb24gIiArIGkg
KyAiIGdvdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MDgwOCkKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDE0
LTA3LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgW2Z0bG9w
dF0gSW5mZXIgaW1tdXRhYmxlIG9iamVjdCBwcm9wZXJ0aWVzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ1NjcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQt
Z2xvYmFsLXByb3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuaHRtbDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuaHRtbDogQWRkZWQu
CisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtZ2xvYmFs
LXByb3BlcnR5LmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9p
bmZlci1jb25zdGFudC1wcm9wZXJ0eS5qczogQWRkZWQuCisKIDIwMTQtMDYtMzAgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBNZXJnZSByMTY5MTIx
IGZyb20gdHJ1bmsuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50
LWdsb2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHktZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9i
YWwtcHJvcGVydHktZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAK
K0pTUmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVy
dHkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29u
c3RhbnQtZ2xvYmFsLXByb3BlcnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXIt
Y29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHktZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29u
c3RhbnQtcHJvcGVydHktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJv
d24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9w
ZXJ0eS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1j
b25zdGFudC1wcm9wZXJ0eS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0
YW50LXByb3BlcnR5LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9w
ZXJ0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuanMJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJv
cGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4IEBACisoZnVuY3Rpb24oKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kp
IHsKKyAgICAgICAgcmVzdWx0ICs9IE1hdGguc2luKE1hdGguUEkpOworICAgIH0KKyAgICBpZiAo
TWF0aC5hYnMocmVzdWx0KSA+IDFlLTgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKK30pKCk7CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5qcwko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVy
LWNvbnN0YW50LXByb3BlcnR5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK3Zh
ciBvID0ge2Y6e2Y6e2Y6e2Y6e2Y6e2Y6e2Y6NDJ9fX19fX19OworKGZ1bmN0aW9uKCkgeworICAg
IHZhciBuID0gMTAwMDAwMDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IG8uZi5mLmYuZi5mLmYuZjsKKyAgICAK
KyAgICBpZiAocmVzdWx0ICE9IG4gKiA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfSkoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234432</attachid>
            <date>2014-07-04 22:27:27 -0700</date>
            <delta_ts>2014-07-07 12:22:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>139208</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NCBA
QAorMjAxNC0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IFtmdGxvcHRdIEluZmVyIGltbXV0YWJsZSBvYmplY3QgcHJvcGVydGllcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NTY3CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGludHJvZHVj
ZXMgYSBuZXcgd2F5IG9mIGluZmVycmluZyBpbW11dGFibGUgb2JqZWN0IHByb3BlcnRpZXMuIEEg
cHJvcGVydHkgaXMgc2FpZCB0bworICAgICAgICBiZSBpbW11dGFibGUgaWYgYWZ0ZXIgaXRzIGNy
ZWF0aW9uIChpLmUuIHRoZSB0cmFuc2l0aW9uIHRoYXQgY3JlYXRlcyBpdCksIHdlIG5ldmVyCisg
ICAgICAgIG92ZXJ3cml0ZSBpdCAoaS5lLiByZXBsYWNlIGl0KSBvciBkZWxldGUgaXQuIEltbXV0
YWJpbGl0eSBpcyBhIHByb3BlcnR5IG9mIGFuICJvd24KKyAgICAgICAgcHJvcGVydHkiIC0gc28g
aWYgd2Ugc2F5IHRoYXQgImYiIGlzIGltbXV0YWJsZSBhdCAibyIgdGhlbiB3ZSBhcmUgaW1wbHlp
bmcgdGhhdCAibyIgaGFzICJmIgorICAgICAgICBkaXJlY3RseSBhbmQgbm90IG9uIGEgcHJvdG90
eXBlLiBNb3JlIHNwZWNpZmljYWxseSwgdGhlIGltbXV0YWJpbGl0eSBpbmZlcmVuY2Ugd2lsbCBw
cm92ZQorICAgICAgICB0aGF0IGEgcHJvcGVydHkgb24gc29tZSBzdHJ1Y3R1cmUgaXMgaW1tdXRh
YmxlLiBUaGlzIG1lYW5zIHRoYXQsIGZvciBleGFtcGxlLCB3ZSBtYXkgaGF2ZSBhCisgICAgICAg
IHN0cnVjdHVyZSBTMSB3aXRoIHByb3BlcnR5ICJmIiB3aGVyZSB3ZSBjbGFpbSB0aGF0ICJmIiBh
dCBTMSBpcyBpbW11dGFibGUsIGJ1dCBTMSBoYXMgYQorICAgICAgICB0cmFuc2l0aW9uIHRvIFMy
IHRoYXQgYWRkcyBhIG5ldyBwcm9wZXJ0eSAiZyIgYW5kIHdlIG1heSBjbGFpbSB0aGF0ICJmIiBh
dCBTMiBpcyBhY3R1YWxseQorICAgICAgICBtdXRhYmxlLiBUaGlzIGlzIG1haW5seSBmb3IgY29u
dmVuaWVuY2U7IGl0IGFsbG93cyB1cyB0byBkZWNvdXBsZSBpbW11dGFiaWxpdHkgbG9naWMgZnJv
bQorICAgICAgICB0cmFuc2l0aW9uIGxvZ2ljLiBJbW11dGFiaWxpdHkgY2FuIGJlIHVzZWQgdG8g
Y29uc3RhbnQtZm9sZCBhY2Nlc3NlcyB0byBvYmplY3RzIGF0CisgICAgICAgIERGRy10aW1lLiBU
aGUgREZHIG5lZWRzIHRvIHByb3ZlIHRoZSBmb2xsb3dpbmcgdG8gY29uc3RhbnQtZm9sZCB0aGUg
YWNjZXNzOgorICAgICAgICAKKyAgICAgICAgLSBUaGUgYmFzZSBvZiB0aGUgYWNjZXNzIG11c3Qg
YmUgYSBjb25zdGFudCBvYmplY3QgcG9pbnRlci4gV2UgcHJvdmUgdGhhdCBhIHByb3BlcnR5IGF0
IGEKKyAgICAgICAgICBzdHJ1Y3R1cmUgaXMgaW1tdXRhYmxlLCBidXQgdGhhdCBzYXlzIG5vdGhp
bmcgb2YgaXRzIHZhbHVlOyBlYWNoIGFjdHVhbCBpbnN0YW5jZSBvZiB0aGF0CisgICAgICAgICAg
cHJvcGVydHkgbWF5IGhhdmUgYSBkaWZmZXJlbnQgdmFsdWUuIFNvLCBhIGNvbnN0YW50IG9iamVj
dCBwb2ludGVyIGlzIG5lZWRlZCB0byBnZXQgYW4KKyAgICAgICAgICBhY3R1YWwgY29uc3RhbnQg
aW5zdGFuY2Ugb2YgdGhlIGltbXV0YWJsZSB2YWx1ZS4KKyAgICAgICAgCisgICAgICAgIC0gQSBj
aGVjayAob3Igd2F0Y2hwb2ludCkgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZCBwcm92aW5nIHRoYXQg
dGhlIG9iamVjdCBoYXMgYSBzdHJ1Y3R1cmUKKyAgICAgICAgICB0aGF0IGFsbG93cyBsb2FkaW5n
IHRoZSBwcm9wZXJ0eSBpbiBxdWVzdGlvbi4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIHJlcGxh
Y2VtZW50IHdhdGNocG9pbnQgc2V0IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgc3RydWN0dXJlIHRo
YXQgd2UndmUgcHJvdmVuIHRoZQorICAgICAgICAgIG9iamVjdCB0byBoYXZlIGlzIHN0aWxsIHZh
bGlkIGFuZCB3ZSBhZGQgYSB3YXRjaHBvaW50IHRvIGl0IGxhemlseS4gSXQncyBwb3NzaWJsZSB0
aGF0IHdlCisgICAgICAgICAgaGF2ZSBwcm92ZW4gdGhhdCB0aGUgb2JqZWN0IGhhcyBvbmUgb2Yg
bWFueSBzdHJ1Y3R1cmVzLCBpbiB3aGljaCBjYXNlIGVhY2ggb2YgdGhvc2UKKyAgICAgICAgICBz
dHJ1Y3R1cmVzIG5lZWRzIGEgdmFsaWQgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQuCisgICAg
ICAgIAorICAgICAgICBUaGUgcmVwbGFjZW1lbnQgd2F0Y2hwb2ludCBzZXQgaXMgY3JlYXRlZCB0
aGUgZmlyc3QgdGltZSB0aGF0IGFueSBhY2Nlc3MgdG8gdGhlIHByb3BlcnR5IGlzCisgICAgICAg
IGNhY2hlZC4gQSBwdXQgY2FjaGUgd2lsbCBjcmVhdGUsIGFuZCBpbW1lZGlhdGVseSBpbnZhbGlk
YXRlLCB0aGUgd2F0Y2hwb2ludCBzZXQuIEEgZ2V0IGNhY2hlCisgICAgICAgIHdpbGwgY3JlYXRl
IHRoZSB3YXRjaHBvaW50IHNldCBhbmQgbWFrZSBpdCBzdGFydCB3YXRjaGluZy4gQW55IG5vbi1j
YWNoZWQgcHV0IGFjY2VzcyB3aWxsCisgICAgICAgIGludmFsaWRhdGUgdGhlIHdhdGNocG9pbnQg
c2V0IGlmIG9uZSBoYWQgYmVlbiBjcmVhdGVkOyB0aGUgdW5kZXJseWluZyBhbGdvcml0aG0gZW5z
dXJlcworICAgICAgICB0aGF0IGNoZWNraW5nIGZvciB0aGUgZXhpc3RlbmNlIG9mIGEgcmVwbGFj
ZW1lbnQgd2F0Y2hwb2ludCBzZXQgaXMgdmVyeSBmYXN0IGluIHRoZSBjb21tb24KKyAgICAgICAg
Y2FzZS4gVGhpcyBhbGdvcml0aG0gZW5zdXJlcyB0aGF0IG5vIGNhY2hlZCBhY2Nlc3MgbmVlZHMg
dG8gZXZlciBkbyBhbnkgd29yayB0byBpbnZhbGlkYXRlLAorICAgICAgICBvciBjaGVjayB0aGUg
dmFsaWRpdHkgb2YsIGFueSByZXBsYWNlbWVudCB3YXRjaHBvaW50IHNldHMuIEl0IGFsc28gaGFz
IHNvbWUgb3RoZXIgbmljZQorICAgICAgICBwcm9wZXJ0aWVzOgorICAgICAgICAKKyAgICAgICAg
LSBJdCdzIHZlcnkgcm9idXN0IGluIGl0cyBkZWZpbml0aW9uIG9mIGltbXV0YWJpbGl0eS4gVGhl
IHN0cmljdGVzdCB0aGF0IGl0IHdpbGwgZXZlciBiZSBpcworICAgICAgICAgIHRoYXQgZm9yIGFu
eSBpbnN0YW5jZSBvZiB0aGUgb2JqZWN0LCB0aGUgcHJvcGVydHkgbXVzdCBiZSB3cml0dGVuIHRv
IG9ubHkgb25jZSwKKyAgICAgICAgICBzcGVjaWZpY2FsbHkgYXQgdGhlIHRpbWUgdGhhdCB0aGUg
cHJvcGVydHkgaXMgY3JlYXRlZC4gQnV0IGl0J3MgYWN0dWFsbHkgbG9vc2VyIHRoYW4KKyAgICAg
ICAgICB0aGlzLiBGb3IgZXhhbXBsZSwgdGhlIHByb3BlcnR5IG1heSBiZSB3cml0dGVuIHRvIGFu
eSBudW1iZXIgb2YgdGltZXMgYmVmb3JlIHdlIGFkZCB0aGUKKyAgICAgICAgICBmaW5hbCBwcm9w
ZXJ0eSB0aGF0IHRoZSBvYmplY3Qgd2lsbCBoYXZlIGJlZm9yZSBhbnlvbmUgcmVhZHMgdGhlIHBy
b3BlcnR5LiBBbHNvLCB3ZSBtYXkKKyAgICAgICAgICB3cml0ZSB0byB0aGUgcHJvcGVydHkgYW55
IG51bWJlciBvZiB0aW1lcyBiZWZvcmUgYW55b25lIGNhY2hlcyBhY2Nlc3NlcyB0byBpdC4KKyAg
ICAgICAgCisgICAgICAgIC0gSXQgaXMgbW9zdGx5IG9ydGhvZ29uYWwgdG8gc3RydWN0dXJlIHRy
YW5zaXRpb25zLiBObyBuZXcgc3RydWN0dXJlcyBuZWVkIHRvIGJlIGNyZWF0ZWQgdG8KKyAgICAg
ICAgICB0cmFjayB0aGUgaW1tdXRhYmlsaXR5IG9mIGEgcHJvcGVydHkuIEhlbmNlLCB0aGVyZSBp
cyBubyByaXNrIGZyb20gdGhpcyBmZWF0dXJlIGNhdXNpbmcKKyAgICAgICAgICBtb3JlIHBvbHlt
b3JwaGlzbS4gVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgInNwZWNpZmljVmFs
dWUiIGNvbnN0YW50CisgICAgICAgICAgaW5mZXJlbmNlLCB3aGljaCBkaWQgY2F1c2UgYWRkaXRp
b25hbCBzdHJ1Y3R1cmVzIHRvIGJlIGNyZWF0ZWQgYW5kIHNvbWV0aW1lcyB0aG9zZQorICAgICAg
ICAgIHN0cnVjdHVyZXMgbGVkIHRvIGZha2UgcG9seW1vcnBoaXNtLiBUaGlzIGZlYXR1cmUgZG9l
cyBsZXZlcmFnZSBleGlzdGluZyB0cmFuc2l0aW9ucyB0bworICAgICAgICAgIGRvIHNvbWUgb2Yg
dGhlIHdhdGNocG9pbnRpbmc6IHByb3BlcnR5IGRlbGV0aW9ucyBkb24ndCBmaXJlIHRoZSByZXBs
YWNlbWVudCB3YXRjaHBvaW50CisgICAgICAgICAgc2V0IGJlY2F1c2UgdGhhdCB3b3VsZCBjYXVz
ZSBhIG5ldyBzdHJ1Y3R1cmUgYW5kIHNvIHRoZSBtYW5kYXRvcnkgc3RydWN0dXJlIGNoZWNrIHdv
dWxkCisgICAgICAgICAgZmFpbC4gQWxzbywgdGhpcyBmZWF0dXJlIGlzIGd1YXJhbnRlZWQgdG8g
bmV2ZXIga2ljayBpbiBmb3IgdW5jYWNoZWFibGUgZGljdGlvbmFyaWVzCisgICAgICAgICAgYmVj
YXVzZSB0aG9zZSB3b3VsZG4ndCBhbGxvdyBmb3IgY2FjaGVhYmxlIGFjY2Vzc2VzIC0gYW5kIGl0
IHRha2VzIGEgY2FjaGVhYmxlIGFjY2VzcyBmb3IKKyAgICAgICAgICB0aGlzIGZlYXR1cmUgdG8g
YmUgZW5hYmxlZC4KKyAgICAgICAgCisgICAgICAgIC0gTm8gbWVtb3J5IG92ZXJoZWFkIGlzIGlu
Y3VycmVkIGV4Y2VwdCB3aGVuIGFjY2Vzc2VzIHRvIHRoZSBwcm9wZXJ0eSBhcmUgY2FjaGVkLgor
ICAgICAgICAgIERpY3Rpb25hcnkgcHJvcGVydGllcyB3aWxsIHR5cGljYWxseSBoYXZlIG5vIG1l
dGEtZGF0YSBmb3IgaW1tdXRhYmlsaXR5LiBUaGUgbnVtYmVyIG9mCisgICAgICAgICAgcmVwbGFj
ZW1lbnQgd2F0Y2hwb2ludCBzZXRzIHdlIGFsbG9jYXRlIGlzIHByb3BvcnRpb25hbCB0byB0aGUg
bnVtYmVyIG9mIGlubGluZSBjYWNoZXMgaW4KKyAgICAgICAgICB0aGUgcHJvZ3JhbSwgd2hpY2gg
aXMgdHlwaWNhbGx5IG11c3Qgc21hbGxlciB0aGFuIHRoZSBudW1iZXIgb2Ygc3RydWN0dXJlcyBv
ciBldmVuIHRoZQorICAgICAgICAgIG51bWJlciBvZiBvYmplY3RzLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBpbmZlcmVuY2UgaXMgZmFyIG1vcmUgcG93ZXJmdWwgdGhhbiB0aGUgcHJldmlvdXMg
InNwZWNpZmljVmFsdWUiIGluZmVyZW5jZSwgc28gdGhpcworICAgICAgICBjaGFuZ2UgYWxzbyBy
ZW1vdmVzIGFsbCBvZiB0aGF0IGNvZGUuIEl0J3MgaW50ZXJlc3RpbmcgdGhhdCB0aGUgYW1vdW50
IG9mIGNvZGUgdGhhdCBpcworICAgICAgICBjaGFuZ2VkIHRvIHJlbW92ZSB0aGF0IGZlYXR1cmUg
aXMgYWxtb3N0IGFzIGJpZyBhcyB0aGUgYW1vdW50IG9mIGNvZGUgYWRkZWQgdG8gc3VwcG9ydCB0
aGUKKyAgICAgICAgbmV3IGluZmVyZW5jZSAtIGFuZCB0aGF0J3MgaWYgeW91IGluY2x1ZGUgdGhl
IG5ldyB0ZXN0cyBpbiB0aGUgdGFsbHkuIFdpdGhvdXQgbmV3IHRlc3RzLAorICAgICAgICBpdCBh
cHBlYXJzIHRoYXQgdGhlIG5ldyBmZWF0dXJlIGFjdHVhbGx5IHRvdWNoZXMgbGVzcyBjb2RlIQor
ICAgICAgICAKKyAgICAgICAgVGhlcmUgaXMgb25lIGNvcm5lciBjYXNlIHdoZXJlIHRoZSBwcmV2
aW91cyAic3BlY2lmaWNWYWx1ZSIgaW5mZXJlbmNlIHdhcyBtb3JlIHBvd2VyZnVsLgorICAgICAg
ICBZb3UgY2FuIGltYWdpbmUgc29tZW9uZSBjcmVhdGluZyBvYmplY3RzIHdpdGggZnVuY3Rpb25z
IGFzIHNlbGYgcHJvcGVydGllcyBvbiB0aG9zZQorICAgICAgICBvYmplY3RzLCBzdWNoIHRoYXQg
ZWFjaCBvYmplY3QgaW5zdGFuY2UgaGFkIHRoZSBzYW1lIGZ1bmN0aW9uIHBvaW50ZXJzIC0gZXNz
ZW50aWFsbHksCisgICAgICAgIHNvbWVvbmUgbWlnaHQgYmUgdHJ5aW5nIHRvIGNyZWF0ZSBhIHZ0
YWJsZSBidXQgZmFpbGluZyBhdCB0aGUgd2hvbGUgIm9uZSB2dGFibGUgZm9yIG1hbnkKKyAgICAg
ICAgaW5zdGFuY2VzIiBjb25jZXB0LiBUaGUgInNwZWNpZmljVmFsdWUiIGluZmVyZW5jZSB3b3Vs
ZCBkbyB2ZXJ5IHdlbGwgZm9yIHN1Y2ggcHJvZ3JhbXMsCisgICAgICAgIGJlY2F1c2UgYSBzdHJ1
Y3R1cmUgY2hlY2sgd291bGQgYmUgc3VmZmljaWVudCB0byBwcm92ZSBhIGNvbnN0YW50IHZhbHVl
IGZvciBhbGwgb2YgdGhlCisgICAgICAgIGZ1bmN0aW9uIHByb3BlcnRpZXMuIFRoaXMgbmV3IGlu
ZmVyZW5jZSB3aWxsIGZhaWwgYmVjYXVzZSBpdCBkb2Vzbid0IHRyYWNrIHRoZSBjb25zdGFudAor
ICAgICAgICB2YWx1ZXMgb2YgY29uc3RhbnQgcHJvcGVydGllczsgaW5zdGVhZCBpdCBkZXRlY3Rz
IHRoZSBpbW11dGFiaWxpdHkgb2Ygb3RoZXJ3aXNlIHZhcmlhYmxlCisgICAgICAgIHByb3BlcnRp
ZXMgKGluIHRoZSBzZW5zZSB0aGF0IGVhY2ggaW5zdGFuY2Ugb2YgdGhlIHByb3BlcnR5IG1heSBo
YXZlIGEgZGlmZmVyZW50IHZhbHVlKS4KKyAgICAgICAgU28sIHRoZSBuZXcgaW5mZXJlbmNlIHJl
cXVpcmVzIGhhdmluZyBhIHBhcnRpY3VsYXIgb2JqZWN0IGluc3RhbmNlIHRvIGFjdHVhbGx5IGdl
dCB0aGUKKyAgICAgICAgY29uc3RhbnQgdmFsdWUuIEkgdGhpbmsgaXQncyBPSyB0byBsb3NlIHRo
aXMgYW50aWZlYXR1cmUuIEl0IHRvb2sgYSBsb3Qgb2YgY29kZSB0byBzdXBwb3J0CisgICAgICAg
IGFuZCB3YXMgYSBjb25zdGFudCBzb3VyY2Ugb2YgZ3JpZWYgaW4gb3VyIHRyYW5zaXRpb24gbG9n
aWMsIGFuZCB0aGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZQorICAgICAgICBhbnkgcmVhbCBldmlk
ZW5jZSB0aGF0IHByb2dyYW1zIGJlbmVmaXRlZCBmcm9tIHRoYXQgcGFydGljdWxhciBraW5kIG9m
IGluZmVyZW5jZSBzaW5jZQorICAgICAgICB1c3VhbGx5IGl0J3MgdGhlIHNpbmdsZXRvbiBwcm90
b3R5cGUgaW5zdGFuY2UgdGhhdCBoYXMgYWxsIG9mIHRoZSBmdW5jdGlvbnMuCisgICAgICAgIAor
ICAgICAgICBUaGlzIGNoYW5nZSBpcyBhIHNwZWVkLXVwIG9uIGV2ZXJ5dGhpbmcuIGRhdGUtZm9y
bWF0LXhwYXJiIGFuZCBib3RoIFN1blNwaWRlci9yYXl0cmFjZSBhbmQKKyAgICAgICAgVjgvcmF5
dHJhY2Ugc2VlbSB0byBiZSB0aGUgYmlnZ2VzdCB3aW5uZXJzIGFtb25nIHRoZSBtYWNyb2JlbmNo
bWFya3M7IHRoZXkgc2VlID41JQorICAgICAgICBzcGVlZC11cHMuIE1hbnkgb2Ygb3VyIG1pY3Jv
YmVuY2htYXJrcyBzZWUgdmVyeSBsYXJnZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMsIGV2ZW4g
ODAlIGluCisgICAgICAgIG9uZSBjYXNlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29tcGxleEdl
dFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OkNvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Ip
OgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpH
ZXRCeUlkU3RhdHVzOjpjb21wdXRlRnJvbUxMSW50KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0
YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFN0YXR1czo6
Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwOgorICAg
ICAgICAoSlNDOjpHZXRCeUlkVmFyaWFudDo6R2V0QnlJZFZhcmlhbnQpOgorICAgICAgICAoSlND
OjpHZXRCeUlkVmFyaWFudDo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlh
bnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6R2V0QnlJZFZhcmlhbnQ6OmR1bXBJ
bkNvbnRleHQpOgorICAgICAgICAqIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50Lmg6CisgICAgICAg
IChKU0M6OkdldEJ5SWRWYXJpYW50OjphbHRlcm5hdGVCYXNlKToKKyAgICAgICAgKEpTQzo6R2V0
QnlJZFZhcmlhbnQ6OnNwZWNpZmljVmFsdWUpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2Rl
L1B1dEJ5SWRTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkVmFyaWFudC5jcHA6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRWYXJpYW50OjpvcGVyYXRvcj0pOgorICAgICAgICAoSlNDOjpQdXRCeUlkVmFyaWFudDo6
c2V0dGVyKToKKyAgICAgICAgKEpTQzo6UHV0QnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQpOgor
ICAgICAgICAqIGJ5dGVjb2RlL1B1dEJ5SWRWYXJpYW50Lmg6CisgICAgICAgIChKU0M6OlB1dEJ5
SWRWYXJpYW50OjpzcGVjaWZpY1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9X
YXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3cp
OgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpmaXJlQWxsKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBieXRlY29kZS9XYXRjaHBvaW50Lmg6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6
OmZpcmVBbGwpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlPZmZzZXQp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUHV0QnlJZCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9E
RkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRG
b2xkaW5nUGhhc2U6OmVtaXRHZXRCeU9mZnNldCk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmlzU3RyaW5nUHJvdG90eXBl
TWV0aG9kU2FuZSk6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Y2FuT3B0aW1pemVT
dHJpbmdPYmplY3RBY2Nlc3MpOgorICAgICAgICAqIGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkpOgorICAgICAgICAoSlND
OjpERkc6OkdyYXBoOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKiBkZmcvREZHV2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6V2F0Y2hhYmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZTo6cnVuKToK
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTXVsdGlHZXRCeU9mZnNldCk6CisgICAgICAgICogaml0
L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9SZXBhdGNoLmNwcDoKKyAgICAgICAg
KEpTQzo6cmVwYXRjaEJ5SWRTZWxmQWNjZXNzKToKKyAgICAgICAgKEpTQzo6Z2VuZXJhdGVCeUlk
U3R1Yik6CisgICAgICAgIChKU0M6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OnRy
eUNhY2hlUHV0QnlJRCk6CisgICAgICAgIChKU0M6OnRyeUJ1aWxkUHV0QnlJZExpc3QpOgorICAg
ICAgICAqIGxsaW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxM
SU5UX1NMT1dfUEFUSF9ERUNMKToKKyAgICAgICAgKEpTQzo6TExJbnQ6OnB1dFRvU2NvcGVDb21t
b24pOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgIChKU0M6
OkNvbW1vblNsb3dQYXRoczo6dHJ5Q2FjaGVQdXRUb1Njb3BlR2xvYmFsKToKKyAgICAgICAgKiBy
dW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwOgorICAgICAgICAoSlNDOjpJbnRlbmRl
ZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNlcHRTdG9yZVRvKToKKyAgICAgICAgKiBydW50aW1l
L0pTQ0pTVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpwdXRUb1ByaW1pdGl2ZSk6
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjpyZXNldCk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0
RGlyZWN0Tm9uSW5kZXhBY2Nlc3Nvcik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWxldGVQ
cm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpkZWZhdWx0VmFsdWUpOgorICAgICAg
ICAoSlNDOjpnZXRDYWxsYWJsZU9iamVjdFNsb3cpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpK
U09iamVjdDo6Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpnZXREaXJlY3QpOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6Z2V0RGlyZWN0T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6
SlNPYmplY3Q6OmlubGluZUdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChKU0M6OkpTT2Jq
ZWN0OjpwdXREaXJlY3RJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpwdXRPd25E
YXRhUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0KToKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAg
KEpTQzo6Z2V0Q2FsbGFibGVPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNT
Y29wZS5jcHA6CisgICAgICAgIChKU0M6OmFic3RyYWN0QWNjZXNzKToKKyAgICAgICAgKiBydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmg6CisgICAgICAgIChKU0M6OlByb3BlcnR5TWFwRW50
cnk6OlByb3BlcnR5TWFwRW50cnkpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5
KToKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVRhYmxlOjpjbG9uZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OlByb3Bl
cnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKTog
RGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlh
bGl6ZVByb3BlcnR5TWFwKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNv
bmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmFsbG9jYXRlUmFyZURhdGEpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJvcGVydGllcyk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpn
ZXQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHJvdG90eXBl
Q2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1w
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rpb24p
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJh
bnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVu
Y3Rpb24pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUFsbEZ1
bmN0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNW
YWx1ZSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJ
Zk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVy
bmFsUHJvcGVydGllc0lmTmVjZXNzYXJ5Rm9yRW50aXJlQ2hhaW4pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnRyYW5zaXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25UcmFja2luZyk6
IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpkaWRSZXBsYWNlUHJvcGVydHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3Bl
cnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVJhcmVEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlUmFyZURhdGE6OmRlc3Ryb3kp
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuaDoKKyAgICAgICAgKiB0ZXN0
cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvby5NYXRoLnNpbik6CisgICAgICAgIChmb28pOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0
LWFuZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAg
ICAgICAoYmFyKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXJlcGxhY2UtdGhl
bi1jYWNoZS1nZXQtYW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9qaXQtcHV0LXRv
LXNjb3BlLWdsb2JhbC1jYWNoZS13YXRjaHBvaW50LWludmFsaWRhdGUuanM6IEFkZGVkLgorICAg
ICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2xsaW50
LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZvbGQtdGhlbi1pbnZhbGlkYXRlLmpz
OiBBZGRlZC4KKyAgICAgICAgKGZvbyk6CisgICAgICAgIChiYXIpOgorICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxp
ZGF0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoYmFyKToKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvcmVwZWF0LXB1dC10by1zY29wZS1nbG9iYWwtd2l0aC1zYW1lLXZhbHVl
LXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAg
ICAoYmFyKToKKwogMjAxNC0wNy0wNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgog
CiAgICAgICAgIE1lcmdlIHRydW5rIHIxNjk1OTUuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvbXBsZXhHZXRTdGF0dXMuY3BwCShyZXZpc2lvbiAxNzA4
MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29tcGxleEdldFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDggKzQ2LDYgQEAgQ29tcGxleEdldFN0YXR1cyBDb21w
bGV4R2V0U3RhdHVzOjpjb21wdQogICAgIENvbXBsZXhHZXRTdGF0dXMgcmVzdWx0OwogICAgIHJl
c3VsdC5tX2tpbmQgPSBJbmxpbmVhYmxlOwogICAgIAotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1
ZTsKLSAgICAKICAgICBpZiAoY2hhaW4pIHsKICAgICAgICAgcmVzdWx0Lm1fY2hhaW4gPSBhZG9w
dFJlZihuZXcgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbigKICAgICAgICAgICAgIHByb2ZpbGVkQmxv
Y2ssIGhlYWRTdHJ1Y3R1cmUsIGNoYWluLCBjaGFpbkNvdW50KSk7CkBAIC02NSwxOCArNjMsMTIg
QEAgQ29tcGxleEdldFN0YXR1cyBDb21wbGV4R2V0U3RhdHVzOjpjb21wdQogICAgICAgICBBU1NF
UlRfVU5VU0VEKGN1cnJlbnRPYmplY3QsIGN1cnJlbnRPYmplY3QpOwogICAgICAgICAKICAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY3VycmVudFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KAot
ICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRl
cywgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgICAgIGlmIChjdXJyZW50U3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOworICAgICAgICAgICAgKnBy
b2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gaGVhZFN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KAotICAgICAgICAgICAgKnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgcmVzdWx0Lm1fYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7Ci0gICAgICAgIGlmIChoZWFkU3RydWN0dXJlLT5pc0Rp
Y3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOworICAgICAgICAgICAg
KnByb2ZpbGVkQmxvY2stPnZtKCksIHVpZCwgcmVzdWx0Lm1fYXR0cmlidXRlcyk7CiAgICAgfQog
ICAgIAotICAgIHJlc3VsdC5tX3NwZWNpZmljVmFsdWUgPSBzcGVjaWZpY1ZhbHVlOwotICAgIAog
ICAgIGlmICghaXNWYWxpZE9mZnNldChyZXN1bHQubV9vZmZzZXQpKQogICAgICAgICByZXR1cm4g
dGFrZXNTbG93UGF0aCgpOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRTdGF0dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAkocmV2aXNpb24gMTcwODIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSwxNSArODUsMTIgQEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRl
RnJvbQogICAgICAgICByZXR1cm4gR2V0QnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uLCBmYWxzZSk7
CiAKICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzSWdub3JlZDsKLSAgICBKU0NlbGwqIHNwZWNpZmlj
VmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJy
ZW50bHkoCi0gICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25v
cmVkLCBzcGVjaWZpY1ZhbHVlKTsKLSAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkK
LSAgICAgICAgc3BlY2lmaWNWYWx1ZSA9IDA7CisgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgp
LCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkKTsKICAgICBpZiAoIWlzVmFsaWRPZmZzZXQob2Zmc2V0
KSkKICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbiwgZmFsc2UpOwog
ICAgIAotICAgIHJldHVybiBHZXRCeUlkU3RhdHVzKFNpbXBsZSwgZmFsc2UsIEdldEJ5SWRWYXJp
YW50KFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUpKTsKKyAg
ICByZXR1cm4gR2V0QnlJZFN0YXR1cyhTaW1wbGUsIGZhbHNlLCBHZXRCeUlkVmFyaWFudChTdHJ1
Y3R1cmVTZXQoc3RydWN0dXJlKSwgb2Zmc2V0KSk7CiAjZWxzZQogICAgIHJldHVybiBHZXRCeUlk
U3RhdHVzKE5vSW5mb3JtYXRpb24sIGZhbHNlKTsKICNlbmRpZgpAQCAtMTU2LDE4ICsxNTMsMTMg
QEAgR2V0QnlJZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yUwogICAgICAgICBpZiAo
c3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CiAgICAgICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFs
dWU7CiAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQ7CiAgICAgICAgIHZhcmlhbnQubV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSgKLSAgICAgICAgICAgICpwcm9maWxl
ZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkLCBzcGVjaWZpY1ZhbHVlKTsKKyAg
ICAgICAgICAgICpwcm9maWxlZEJsb2NrLT52bSgpLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkKTsK
ICAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHZhcmlhbnQubV9vZmZzZXQpKQogICAgICAgICAg
ICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoc2xvd1BhdGhTdGF0ZSwgdHJ1ZSk7CiAgICAgICAgIAot
ICAgICAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSkKLSAgICAgICAgICAgIHNwZWNp
ZmljVmFsdWUgPSAwOwotICAgICAgICAKICAgICAgICAgdmFyaWFudC5tX3N0cnVjdHVyZVNldC5h
ZGQoc3RydWN0dXJlKTsKLSAgICAgICAgdmFyaWFudC5tX3NwZWNpZmljVmFsdWUgPSBKU1ZhbHVl
KHNwZWNpZmljVmFsdWUpOwogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRW
YXJpYW50KHZhcmlhbnQpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZEFwcGVuZCwgZGlkQXBw
ZW5kKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTIxMiw4ICsyMDQsNyBAQCBHZXRCeUlk
U3RhdHVzIEdldEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50IHZhcmlhbnQoCi0g
ICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3Rh
dHVzLm9mZnNldCgpLAotICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLnNwZWNp
ZmljVmFsdWUoKSwgY29tcGxleEdldFN0YXR1cy5jaGFpbigpLAorICAgICAgICAgICAgICAgICAg
ICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwgY29t
cGxleEdldFN0YXR1cy5jaGFpbigpLAogICAgICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2Fs
bExpbmtTdGF0dXMpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpKQpAQCAtMjk3LDE2ICsyODgsMTMgQEAgR2V0QnlJ
ZFN0YXR1cyBHZXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKAogICAgICAgICAgICAgcmV0dXJuIEdl
dEJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CiAgICAgICAgIAogICAgICAgICB1bnNpZ25lZCBh
dHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHZtLCB1aWQsIGF0
dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQg
PSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRyaWJ1dGVzKTsKICAgICAg
ICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gR2V0QnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gSXQncyBwcm9iYWJseSBhIHByb3RvdHlwZSBsb29r
dXAuIEdpdmUgdXAgb24gbGlmZSBmb3Igbm93LCBldmVuIHRob3VnaCB3ZSBjb3VsZCB0b3RhbGx5
IGJlIHdheSBzbWFydGVyIGFib3V0IGl0LgogICAgICAgICBpZiAoYXR0cmlidXRlcyAmIEFjY2Vz
c29yKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoTWFrZXNDYWxscyk7IC8vIFdl
IGNvdWxkIGJlIHNtYXJ0ZXIgaGVyZSwgbGlrZSBzdHJlbmdodC1yZWR1Y2luZyB0aGlzIHRvIGEg
Q2FsbC4KLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAg
ICBzcGVjaWZpY1ZhbHVlID0gMDsKICAgICAgICAgCi0gICAgICAgIGlmICghcmVzdWx0LmFwcGVu
ZFZhcmlhbnQoR2V0QnlJZFZhcmlhbnQoc3RydWN0dXJlLCBvZmZzZXQsIHNwZWNpZmljVmFsdWUp
KSkKKyAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChHZXRCeUlkVmFyaWFudChzdHJ1
Y3R1cmUsIG9mZnNldCkpKQogICAgICAgICAgICAgcmV0dXJuIEdldEJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0dldEJ5SWRWYXJpYW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCShyZXZpc2lvbiAxNzA4MjEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMywxNyArMzMsMTUgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBHZXRCeUlkVmFyaWFu
dDo6R2V0QnlJZFZhcmlhbnQoCi0gICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQs
IFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAorICAgIGNvbnN0
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCiAgICAg
Y29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHN0ZDo6dW5pcXVlX3B0cjxDYWxs
TGlua1N0YXR1cz4gY2FsbExpbmtTdGF0dXMpCiAgICAgOiBtX3N0cnVjdHVyZVNldChzdHJ1Y3R1
cmVTZXQpCiAgICAgLCBtX2FsdGVybmF0ZUJhc2UobnVsbHB0cikKLSAgICAsIG1fc3BlY2lmaWNW
YWx1ZShzcGVjaWZpY1ZhbHVlKQogICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICwgbV9jYWxs
TGlua1N0YXR1cyhzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKQogewogICAgIGlmICghc3RydWN0
dXJlU2V0LnNpemUoKSkgewogICAgICAgICBBU1NFUlQob2Zmc2V0ID09IGludmFsaWRPZmZzZXQp
OwotICAgICAgICBBU1NFUlQoIXNwZWNpZmljVmFsdWUpOwogICAgICAgICBBU1NFUlQoIWNoYWlu
KTsKICAgICB9CiAgICAgCkBAIC02Niw3ICs2NCw2IEBAIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlk
VmFyaWFudDo6b3BlcmF0b3IKICAgICBtX3N0cnVjdHVyZVNldCA9IG90aGVyLm1fc3RydWN0dXJl
U2V0OwogICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhlci5tX2NvbnN0YW50Q2hlY2tzOwogICAg
IG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFzZTsKLSAgICBtX3NwZWNpZmlj
VmFsdWUgPSBvdGhlci5tX3NwZWNpZmljVmFsdWU7CiAgICAgbV9vZmZzZXQgPSBvdGhlci5tX29m
ZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykKICAgICAgICAgbV9jYWxsTGlu
a1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0dXM+KCpvdGhlci5tX2NhbGxM
aW5rU3RhdHVzKTsKQEAgLTc1LDYgKzcyLDE2IEBAIEdldEJ5SWRWYXJpYW50JiBHZXRCeUlkVmFy
aWFudDo6b3BlcmF0b3IKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKK1N0cnVjdHVyZVNldCBHZXRC
eUlkVmFyaWFudDo6YmFzZVN0cnVjdHVyZSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2FsdGVybmF0
ZUJhc2UpCisgICAgICAgIHJldHVybiBzdHJ1Y3R1cmVTZXQoKTsKKyAgICAKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHN0cnVjdHVyZUZvcihtX2NvbnN0YW50Q2hlY2tzLCBtX2FsdGVybmF0
ZUJhc2UpOworICAgIFJFTEVBU0VfQVNTRVJUKHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIHN0cnVj
dHVyZTsKK30KKwogYm9vbCBHZXRCeUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgR2V0
QnlJZFZhcmlhbnQmIG90aGVyKQogewogICAgIGlmIChtX2FsdGVybmF0ZUJhc2UgIT0gb3RoZXIu
bV9hbHRlcm5hdGVCYXNlKQpAQCAtODYsOSArOTMsNiBAQCBib29sIEdldEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zCiAgICAgaWYgKCFhcmVDb21wYXRpYmxlKG1fY29uc3RhbnRDaGVj
a3MsIG90aGVyLm1fY29uc3RhbnRDaGVja3MpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
Ci0gICAgaWYgKG1fc3BlY2lmaWNWYWx1ZSAhPSBvdGhlci5tX3NwZWNpZmljVmFsdWUpCi0gICAg
ICAgIG1fc3BlY2lmaWNWYWx1ZSA9IEpTVmFsdWUoKTsKLQogICAgIG1lcmdlSW50byhvdGhlci5t
X2NvbnN0YW50Q2hlY2tzLCBtX2NvbnN0YW50Q2hlY2tzKTsKICAgICBtX3N0cnVjdHVyZVNldC5t
ZXJnZShvdGhlci5tX3N0cnVjdHVyZVNldCk7CiAgICAgCkBAIC0xMTIsOCArMTE2LDYgQEAgdm9p
ZCBHZXRCeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQcmludAogICAgICAgICAiWyIsIGxpc3RE
dW1wSW5Db250ZXh0KG1fY29uc3RhbnRDaGVja3MsIGNvbnRleHQpLCAiXSIpOwogICAgIGlmICht
X2FsdGVybmF0ZUJhc2UpCiAgICAgICAgIG91dC5wcmludCgiLCBhbHRlcm5hdGVCYXNlID0gIiwg
aW5Db250ZXh0KEpTVmFsdWUobV9hbHRlcm5hdGVCYXNlKSwgY29udGV4dCkpOwotICAgIGlmIChz
cGVjaWZpY1ZhbHVlKCkpCi0gICAgICAgIG91dC5wcmludCgiLCBzcGVjaWZpY1ZhbHVlID0gIiwg
aW5Db250ZXh0KHNwZWNpZmljVmFsdWUoKSwgY29udGV4dCkpOwogICAgIG91dC5wcmludCgiLCBv
ZmZzZXQgPSAiLCBvZmZzZXQoKSk7CiAgICAgaWYgKG1fY2FsbExpbmtTdGF0dXMpCiAgICAgICAg
IG91dC5wcmludCgiLCBjYWxsID0gIiwgKm1fY2FsbExpbmtTdGF0dXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmgJKHJldmlzaW9u
IDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9HZXRCeUlkVmFyaWFu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw4ICs0Miw3IEBAIHN0cnVjdCBEdW1wQ29udGV4dDsK
IGNsYXNzIEdldEJ5SWRWYXJpYW50IHsKIHB1YmxpYzoKICAgICBHZXRCeUlkVmFyaWFudCgKLSAg
ICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQgPSBTdHJ1Y3R1cmVTZXQoKSwK
LSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgSlNWYWx1ZSBz
cGVjaWZpY1ZhbHVlID0gSlNWYWx1ZSgpLAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCA9IFN0cnVjdHVyZVNldCgpLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZh
bGlkT2Zmc2V0LAogICAgICAgICBjb25zdCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluKiBjaGFpbiA9
IG51bGxwdHIsCiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxsTGlua1N0YXR1cz4gY2FsbExp
bmtTdGF0dXMgPSBudWxscHRyKTsKICAgICAKQEAgLTU4LDcgKzU3LDcgQEAgcHVibGljOgogICAg
IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0K
ICAgICBjb25zdCBDb25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJiBjb25zdGFudENoZWNrcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29uc3RhbnRDaGVja3M7IH0KICAgICBKU09iamVjdCogYWx0ZXJu
YXRlQmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWx0ZXJuYXRlQmFzZTsgfQotICAgIEpTVmFsdWUg
c3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lmaWNWYWx1ZTsgfQorICAgIFN0
cnVjdHVyZVNldCBiYXNlU3RydWN0dXJlKCkgY29uc3Q7CiAgICAgUHJvcGVydHlPZmZzZXQgb2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KICAgICBDYWxsTGlua1N0YXR1cyogY2Fs
bExpbmtTdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX2NhbGxMaW5rU3RhdHVzLmdldCgpOyB9CiAg
ICAgCkBAIC03Myw3ICs3Miw2IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlU2V0IG1fc3RydWN0
dXJlU2V0OwogICAgIENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3IgbV9jb25zdGFudENoZWNr
czsKICAgICBKU09iamVjdCogbV9hbHRlcm5hdGVCYXNlOwotICAgIEpTVmFsdWUgbV9zcGVjaWZp
Y1ZhbHVlOwogICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxsTGlua1N0YXR1cz4gbV9jYWxsTGlua1N0YXR1czsKIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCShyZXZpc2lvbiAx
NzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NCw4ICsyNTQsOCBAQCBQdXRCeUlkU3RhdHVzIFB1dEJ5
SWRTdGF0dXM6OmNvbXB1dGVGb3JTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Y2tlciwgKnN0dWItPm1fY2FsbExpbmtJbmZvLCBjYWxsRXhpdFNpdGVEYXRhKSk7CiAgICAgICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gUHV0QnlJZFZhcmlh
bnQ6OnNldHRlcigKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZSwgY29tcGxleEdl
dFN0YXR1cy5vZmZzZXQoKSwgY29tcGxleEdldFN0YXR1cy5zcGVjaWZpY1ZhbHVlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksIHN0ZDo6bW92ZShj
YWxsTGlua1N0YXR1cykpOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlLCBjb21w
bGV4R2V0U3RhdHVzLm9mZnNldCgpLCBjb21wbGV4R2V0U3RhdHVzLmNoYWluKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6Om1vdmUoY2FsbExpbmtTdGF0dXMpKTsKICAgICAgICAgICAg
ICAgICB9IH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTMzNCwx
OSArMzM0LDI0IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgIAogICAg
ICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVu
dGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh2bSwgdWlkLCBhdHRy
aWJ1dGVzKTsKICAgICAgICAgaWYgKGlzVmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBDdXN0b21BY2Nlc3NvcikKICAgICAgICAgICAgICAgICByZXR1
cm4gUHV0QnlJZFN0YXR1cyhNYWtlc0NhbGxzKTsKIAogICAgICAgICAgICAgaWYgKGF0dHJpYnV0
ZXMgJiAoQWNjZXNzb3IgfCBSZWFkT25seSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB1dEJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Ci0gICAgICAgICAgICBpZiAoc3BlY2lmaWNWYWx1ZSkg
ewotICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdGhlIFB1dEJ5SWQgc2xvdyBwYXRoIHRvIHZl
cmlmeSB0aGF0IHdlJ3JlIHN0b3JpbmcgdGhlIHJpZ2h0IHZhbHVlIGludG8KLSAgICAgICAgICAg
ICAgICAvLyB0aGUgc3BlY2lhbGl6ZWQgc2xvdC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
V2F0Y2hwb2ludFNldCogcmVwbGFjZVNldCA9IHN0cnVjdHVyZS0+cHJvcGVydHlSZXBsYWNlbWVu
dFdhdGNocG9pbnRTZXQob2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZVNldCB8fCBy
ZXBsYWNlU2V0LT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdGhp
cyBleGVjdXRlcywgaXQnbGwgY3JlYXRlLCBhbmQgZmlyZSwgdGhpcyByZXBsYWNlbWVudCB3YXRj
aHBvaW50IHNldC4KKyAgICAgICAgICAgICAgICAvLyBUaGF0IG1lYW5zIHRoYXQgIHRoaXMgaGFz
IHByb2JhYmx5IG5ldmVyIGV4ZWN1dGVkIG9yIHRoYXQgc29tZXRoaW5nIGZpc2h5IGlzCisgICAg
ICAgICAgICAgICAgLy8gZ29pbmcgb24uIEFsc28sIHdlIGNhbm5vdCBjcmVhdGUgb3IgZmlyZSB0
aGUgd2F0Y2hwb2ludCBzZXQgZnJvbSB0aGUgY29uY3VycmVudAorICAgICAgICAgICAgICAgIC8v
IEpJVCB0aHJlYWQsIHNvIGV2ZW4gaWYgd2Ugd2FudGVkIHRvIGRvIHRoaXMsIHdlJ2QgbmVlZCB0
byBoYXZlIGEgbGF6eSB0aGluZ3kuCisgICAgICAgICAgICAgICAgLy8gU28sIGJldHRlciBsZWF2
ZSB0aGlzIGFsb25lIGFuZCB0YWtlIHNsb3cgcGF0aC4KICAgICAgICAgICAgICAgICByZXR1cm4g
UHV0QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAogICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudChQdXRCeUlkVmFyaWFudDo6
cmVwbGFjZShzdHJ1Y3R1cmUsIG9mZnNldCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBQdXRC
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0zODQs
MjIgKzM4OSw5IEBAIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKICAg
ICAgICAgfQogICAgIAogICAgICAgICAvLyBXZSBvbmx5IG9wdGltaXplIGlmIHRoZXJlIGlzIGFs
cmVhZHkgYSBzdHJ1Y3R1cmUgdGhhdCB0aGUgdHJhbnNpdGlvbiBpcyBjYWNoZWQgdG8uCi0gICAg
ICAgIC8vIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBhbGxvd3MgdXMgdG8gZ3VhcmQgYWdhaW5z
dCBhIHRyYW5zaXRpb24gd2l0aCBhIHNwZWNpZmljCi0gICAgICAgIC8vIHZhbHVlLgotICAgICAg
ICAvLwotICAgICAgICAvLyAtIElmIHdlJ3JlIHN0b3JpbmcgYSB2YWx1ZSB0aGF0IGNvdWxkIGJl
IHNwZWNpZmljOiB0aGlzIHdvdWxkIG9ubHkgYmUgYSBwcm9ibGVtIGlmCi0gICAgICAgIC8vICAg
dGhlIGV4aXN0aW5nIHRyYW5zaXRpb24gZGlkIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSBhbHJlYWR5
LCBzaW5jZSBpZiBpdCBkaWRuJ3QsCi0gICAgICAgIC8vICAgdGhlbiB3ZSB3b3VsZCBiZWhhdmUg
ImFzIGlmIiB3ZSB3ZXJlIG5vdCBzdG9yaW5nIGEgc3BlY2lmaWMgdmFsdWUuIElmIGl0IGRpZAot
ICAgICAgICAvLyAgIGhhdmUgYSBzcGVjaWZpYyB2YWx1ZSwgdGhlbiB3ZSdsbCBrbm93IC0gdGhl
IGZhY3QgdGhhdCB3ZSBwYXNzIDAgZm9yCi0gICAgICAgIC8vICAgc3BlY2lmaWNWYWx1ZSB3aWxs
IHRlbGwgdXMuCi0gICAgICAgIC8vCi0gICAgICAgIC8vIC0gSWYgd2UncmUgbm90IHN0b3Jpbmcg
YSB2YWx1ZSB0aGF0IGNvdWxkIGJlIHNwZWNpZmljOiBhZ2FpbiwgdGhpcyB3b3VsZCBvbmx5IGJl
IGEKLSAgICAgICAgLy8gICBwcm9ibGVtIGlmIHRoZSBleGlzdGluZyB0cmFuc2l0aW9uIGRpZCBo
YXZlIGEgc3BlY2lmaWMgdmFsdWUsIHdoaWNoIHdlIGNoZWNrIGZvcgotICAgICAgICAvLyAgIGJ5
IHBhc3NpbmcgMCBmb3IgdGhlIHNwZWNpZmljVmFsdWUuCi0gICAgICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVj
dHVyZUNvbmN1cnJlbnRseShzdHJ1Y3R1cmUsIHVpZCwgMCwgMCwgb2Zmc2V0KTsKKyAgICAgICAg
U3RydWN0dXJlKiB0cmFuc2l0aW9uID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KHN0cnVjdHVyZSwgdWlkLCAwLCBvZmZzZXQp
OwogICAgICAgICBpZiAoIXRyYW5zaXRpb24pCi0gICAgICAgICAgICByZXR1cm4gUHV0QnlJZFN0
YXR1cyhUYWtlc1Nsb3dQYXRoKTsgLy8gVGhpcyBvY2N1cnMgaW4gYml6YXJyZSBjYXNlcyBvbmx5
LiBTZWUgYWJvdmUuCi0gICAgICAgIEFTU0VSVCghdHJhbnNpdGlvbi0+dHJhbnNpdGlvbkRpZElu
dm9sdmVTcGVjaWZpY1ZhbHVlKCkpOworICAgICAgICAgICAgcmV0dXJuIFB1dEJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CiAgICAgICAgIEFTU0VSVChpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwog
ICAgIAogICAgICAgICBib29sIGRpZEFwcGVuZCA9IHJlc3VsdC5hcHBlbmRWYXJpYW50KApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFZhcmlhbnQu
Y3BwCShyZXZpc2lvbiAxNzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHV0QnlJZFZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIFB1dEJ5
SWRWYXJpYW50JiBQdXRCeUlkVmFyaWFudDo6b3BlcmF0b3IKICAgICBtX25ld1N0cnVjdHVyZSA9
IG90aGVyLm1fbmV3U3RydWN0dXJlOwogICAgIG1fY29uc3RhbnRDaGVja3MgPSBvdGhlci5tX2Nv
bnN0YW50Q2hlY2tzOwogICAgIG1fYWx0ZXJuYXRlQmFzZSA9IG90aGVyLm1fYWx0ZXJuYXRlQmFz
ZTsKLSAgICBtX3NwZWNpZmljVmFsdWUgPSBvdGhlci5tX3NwZWNpZmljVmFsdWU7CiAgICAgbV9v
ZmZzZXQgPSBvdGhlci5tX29mZnNldDsKICAgICBpZiAob3RoZXIubV9jYWxsTGlua1N0YXR1cykK
ICAgICAgICAgbV9jYWxsTGlua1N0YXR1cyA9IHN0ZDo6bWFrZV91bmlxdWU8Q2FsbExpbmtTdGF0
dXM+KCpvdGhlci5tX2NhbGxMaW5rU3RhdHVzKTsKQEAgLTc4LDcgKzc3LDcgQEAgUHV0QnlJZFZh
cmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnRyYW5zaXRpbwogfQogCiBQdXRCeUlkVmFyaWFudCBQdXRC
eUlkVmFyaWFudDo6c2V0dGVyKAotICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQsIEpTVmFsdWUgc3BlY2lmaWNWYWx1ZSwKKyAgICBjb25zdCBT
dHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbExpbmtTdGF0dXM+
IGNhbGxMaW5rU3RhdHVzKQogewogICAgIFB1dEJ5SWRWYXJpYW50IHJlc3VsdDsKQEAgLTg5LDcg
Kzg4LDYgQEAgUHV0QnlJZFZhcmlhbnQgUHV0QnlJZFZhcmlhbnQ6OnNldHRlcigKICAgICAgICAg
cmVzdWx0Lm1fYWx0ZXJuYXRlQmFzZSA9IGNoYWluLT50ZXJtaW5hbFByb3RvdHlwZSgpOwogICAg
IH0KICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Ci0gICAgcmVzdWx0Lm1fc3BlY2lmaWNW
YWx1ZSA9IHNwZWNpZmljVmFsdWU7CiAgICAgcmVzdWx0Lm1fY2FsbExpbmtTdGF0dXMgPSBzdGQ6
Om1vdmUoY2FsbExpbmtTdGF0dXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMzQsNiAr
MTMyLDE4IEBAIGJvb2wgUHV0QnlJZFZhcmlhbnQ6Om1ha2VzQ2FsbHMoKSBjb25zdAogICAgIHJl
dHVybiBraW5kKCkgPT0gU2V0dGVyOwogfQogCitTdHJ1Y3R1cmVTZXQgUHV0QnlJZFZhcmlhbnQ6
OmJhc2VTdHJ1Y3R1cmUoKSBjb25zdAoreworICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsK
KyAgICAKKyAgICBpZiAoIW1fYWx0ZXJuYXRlQmFzZSkKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZSgpOworICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3RydWN0dXJlRm9yKG1fY29u
c3RhbnRDaGVja3MsIG1fYWx0ZXJuYXRlQmFzZSk7CisgICAgUkVMRUFTRV9BU1NFUlQoc3RydWN0
dXJlKTsKKyAgICByZXR1cm4gc3RydWN0dXJlOworfQorCiBib29sIFB1dEJ5SWRWYXJpYW50Ojph
dHRlbXB0VG9NZXJnZShjb25zdCBQdXRCeUlkVmFyaWFudCYgb3RoZXIpCiB7CiAgICAgaWYgKG1f
b2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQpAQCAtMjI5LDggKzIzOSw2IEBAIHZvaWQgUHV0QnlJ
ZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnQKICAgICAgICAgICAgIGxpc3REdW1wSW5Db250
ZXh0KGNvbnN0YW50Q2hlY2tzKCksIGNvbnRleHQpLCAiXSIpOwogICAgICAgICBpZiAobV9hbHRl
cm5hdGVCYXNlKQogICAgICAgICAgICAgb3V0LnByaW50KCIsIGFsdGVybmF0ZUJhc2UgPSAiLCBp
bkNvbnRleHQoSlNWYWx1ZShtX2FsdGVybmF0ZUJhc2UpLCBjb250ZXh0KSk7Ci0gICAgICAgIGlm
IChtX3NwZWNpZmljVmFsdWUpCi0gICAgICAgICAgICBvdXQucHJpbnQoIiwgc3BlY2lmaWNWYWx1
ZSA9ICIsIGluQ29udGV4dChtX3NwZWNpZmljVmFsdWUsIGNvbnRleHQpKTsKICAgICAgICAgb3V0
LnByaW50KCIsIG9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKICAgICAgICAgb3V0LnByaW50KCIsIGNh
bGwgPSAiLCAqbV9jYWxsTGlua1N0YXR1cyk7CiAgICAgICAgIG91dC5wcmludCgiPiIpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRWYXJpYW50LmgJ
KHJldmlzaW9uIDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRC
eUlkVmFyaWFudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAg
ICAgICAgY29uc3QgSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbiogc3RydWN0dXJlQ2hhaW4sIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCk7CiAgICAgCiAgICAgc3RhdGljIFB1dEJ5SWRWYXJpYW50IHNldHRl
cigKLSAgICAgICAgY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCwgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlLAorICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LAogICAgICAgICBJbnRlbmRlZFN0
cnVjdHVyZUNoYWluKiBjaGFpbiwgc3RkOjp1bmlxdWVfcHRyPENhbGxMaW5rU3RhdHVzPiBjYWxs
TGlua1N0YXR1cyk7CiAgICAgCiAgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CkBAIC0xMTcsMTEgKzExNyw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fYWx0ZXJu
YXRlQmFzZTsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChraW5kKCkgPT0gU2V0dGVyKTsKLSAgICAgICAgcmV0dXJu
IG1fc3BlY2lmaWNWYWx1ZTsKLSAgICB9CisgICAgU3RydWN0dXJlU2V0IGJhc2VTdHJ1Y3R1cmUo
KSBjb25zdDsKICAgICAKICAgICBDYWxsTGlua1N0YXR1cyogY2FsbExpbmtTdGF0dXMoKSBjb25z
dAogICAgIHsKQEAgLTE0Miw3ICsxMzgsNiBAQCBwcml2YXRlOgogICAgIFN0cnVjdHVyZSogbV9u
ZXdTdHJ1Y3R1cmU7CiAgICAgQ29uc3RhbnRTdHJ1Y3R1cmVDaGVja1ZlY3RvciBtX2NvbnN0YW50
Q2hlY2tzOwogICAgIEpTT2JqZWN0KiBtX2FsdGVybmF0ZUJhc2U7Ci0gICAgSlNWYWx1ZSBtX3Nw
ZWNpZmljVmFsdWU7CiAgICAgUHJvcGVydHlPZmZzZXQgbV9vZmZzZXQ7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGxMaW5rU3RhdHVzPiBtX2NhbGxMaW5rU3RhdHVzOwogfTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJKHJldmlzaW9uIDE3
MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzAsMTEgKzcwLDYgQEAgdm9pZCBXYXRjaHBvaW50U2V0OjphZGQo
V2F0Y2hwb2ludCogd2F0YwogICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CiB9CiAKLXZvaWQgV2F0
Y2hwb2ludFNldDo6ZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCi17Ci0gICAgZmlyZUFsbChT
dHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwotfQotCiB2b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVB
bGxTbG93KGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBBU1NFUlQoc3RhdGUoKSA9
PSBJc1dhdGNoZWQpOwpAQCAtODUsNiArODAsMTEgQEAgdm9pZCBXYXRjaHBvaW50U2V0OjpmaXJl
QWxsU2xvdyhjb25zdCBGaQogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiB9CiAKK3ZvaWQg
V2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3coY29uc3QgY2hhciogcmVhc29uKQoreworICAgIGZp
cmVBbGxTbG93KFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Cit9CisKIHZvaWQgV2F0Y2hwb2lu
dFNldDo6ZmlyZUFsbFdhdGNocG9pbnRzKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAg
ICB3aGlsZSAoIW1fc2V0LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTcwODIxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDEy
ICsxMzEsMTcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25zdCBGaXJlRGV0
YWlsJiBkZXRhaWwpCiAgICAgewotICAgICAgICBpZiAoc3RhdGUoKSAhPSBJc1dhdGNoZWQpCisg
ICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBmaXJlQWxsU2xvdyhkZXRhaWwpOwogICAgIH0KICAgICAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29uKTsKKyAgICB2b2lk
IGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShz
dGF0ZSgpICE9IElzV2F0Y2hlZCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGZpcmVB
bGxTbG93KHJlYXNvbik7CisgICAgfQogICAgIAogICAgIHZvaWQgdG91Y2goY29uc3QgRmlyZURl
dGFpbCYgZGV0YWlsKQogICAgIHsKQEAgLTE1Nyw2ICsxNjIsNyBAQCBwdWJsaWM6CiAgICAgaW50
OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsg
fQogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coY29uc3QgRmly
ZURldGFpbCYpOyAvLyBDYWxsIG9ubHkgaWYgeW91J3ZlIGNoZWNrZWQgaXNXYXRjaGVkLgorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coY29uc3QgY2hhciogcmVhc29uKTsg
Ly8gRGl0dG8uCiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgZmlyZUFsbFdhdGNocG9pbnRzKGNv
bnN0IEZpcmVEZXRhaWwmKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE3MDgy
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiREZH
QWJzdHJhY3RJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKKyNpbmNs
dWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
UHV0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtMTM4NywxNCAr
MTM4OCwxNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
ICAgICAgICAgICAgLy8gc29tZXRoaW5nIG1vcmUgc3VidGxlPwogICAgICAgICAgICAgICAgIEFi
c3RyYWN0VmFsdWUgcmVzdWx0OwogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0
YXR1cy5udW1WYXJpYW50cygpOyBpLS07KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3Rh
dHVzW2ldLnNwZWNpZmljVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBERkdfQVNTRVJU
KG1fZ3JhcGgsIG5vZGUsICFzdGF0dXNbaV0uYWx0ZXJuYXRlQmFzZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdCA9CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkodmFsdWUsIHN0YXR1c1tpXS5vZmZzZXQo
KSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY29uc3RhbnRSZXN1bHQpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5tYWtlSGVhcFRvcCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgdGhpc1Jlc3VsdDsKICAgICAgICAg
ICAgICAgICAgICAgdGhpc1Jlc3VsdC5zZXQoCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2dy
YXBoLCAqbV9ncmFwaC5mcmVlemUoc3RhdHVzW2ldLnNwZWNpZmljVmFsdWUoKSksCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLCAqbV9ncmFwaC5mcmVlemUoY29uc3RhbnRSZXN1bHQp
LAogICAgICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zdHJ1Y3R1cmVDbG9iYmVyU3RhdGUo
KSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0xNTY5LDExICsxNTczLDI1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAgICAgICAgIAogICAgIGNhc2UgR2V0QnlPZmZz
ZXQ6IHsKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgZGF0YSA9IG1fZ3JhcGgubV9zdG9yYWdl
QWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldOworICAgICAgICBKU1Zh
bHVlIHJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShmb3JOb2RlKG5vZGUt
PmNoaWxkMigpKSwgZGF0YS5vZmZzZXQpOworICAgICAgICBpZiAocmVzdWx0KSB7CisgICAgICAg
ICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUocmVzdWx0KSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZm9yTm9kZShub2RlKS5t
YWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
R2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQ6IHsKKyAgICAgICAgU3RvcmFnZUFjY2Vzc0RhdGEgZGF0
YSA9IG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2RlLT5zdG9yYWdlQWNjZXNzRGF0YUlu
ZGV4KCldOworICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRQ
cm9wZXJ0eShmb3JOb2RlKG5vZGUtPmNoaWxkMigpKSwgZGF0YS5vZmZzZXQpOworICAgICAgICBp
ZiAocmVzdWx0ICYmIGpzRHluYW1pY0Nhc3Q8R2V0dGVyU2V0dGVyKj4ocmVzdWx0KSkgeworICAg
ICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKHJlc3VsdCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGZvck5vZGUobm9k
ZSkuc2V0KG1fZ3JhcGgsIG1fZ3JhcGgubV92bS5nZXR0ZXJTZXR0ZXJTdHJ1Y3R1cmUuZ2V0KCkp
OwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNjAyLDE0ICsxNjIwLDIzIEBAIGJvb2wgQWJz
dHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgICAgIGlmIChzZXQuaXNF
bXB0eSgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYmFzZVNldC5t
ZXJnZShzZXQpOwotICAgICAgICAgICAgaWYgKCF2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkgewor
ICAgICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlIGJhc2VGb3JMb2FkOworICAgICAgICAg
ICAgaWYgKHZhcmlhbnQuYWx0ZXJuYXRlQmFzZSgpKQorICAgICAgICAgICAgICAgIGJhc2VGb3JM
b2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgYmFzZUZvckxvYWQgPSBiYXNlLm1fdmFsdWU7CisgICAgICAgICAgICBKU1ZhbHVl
IGNvbnN0YW50UmVzdWx0ID0KKyAgICAgICAgICAgICAgICBtX2dyYXBoLnRyeUdldENvbnN0YW50
UHJvcGVydHkoCisgICAgICAgICAgICAgICAgICAgIGJhc2VGb3JMb2FkLCB2YXJpYW50LmJhc2VT
dHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoIWNvbnN0YW50
UmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0Lm1ha2VIZWFwVG9wKCk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBBYnN0cmFjdFZh
bHVlIHRoaXNSZXN1bHQ7CiAgICAgICAgICAgICB0aGlzUmVzdWx0LnNldCgKICAgICAgICAgICAg
ICAgICBtX2dyYXBoLAotICAgICAgICAgICAgICAgICptX2dyYXBoLmZyZWV6ZSh2YXJpYW50LnNw
ZWNpZmljVmFsdWUoKSksCisgICAgICAgICAgICAgICAgKm1fZ3JhcGguZnJlZXplKGNvbnN0YW50
UmVzdWx0KSwKICAgICAgICAgICAgICAgICBtX3N0YXRlLnN0cnVjdHVyZUNsb2JiZXJTdGF0ZSgp
KTsKICAgICAgICAgICAgIHJlc3VsdC5tZXJnZSh0aGlzUmVzdWx0KTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJ
KHJldmlzaW9uIDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIGhhbmRsZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBUeXBlZEFycmF5VHlwZSk7CiAgICAgYm9vbCBoYW5kbGVDb25zdGFudElu
dGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgTm9kZSogaGFu
ZGxlUHV0QnlPZmZzZXQoTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllciwgUHJvcGVydHlP
ZmZzZXQsIE5vZGUqIHZhbHVlKTsKLSAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxh
dGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlP
ZmZzZXQsIE5vZGVUeXBlIG9wID0gR2V0QnlPZmZzZXQpOworICAgIE5vZGUqIGhhbmRsZUdldEJ5
T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCwgTm9kZVR5cGUgb3AgPSBH
ZXRCeU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeUlkKAogICAgICAgICBpbnQgZGVzdGlu
YXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlwZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRp
Zmllck51bWJlciwKICAgICAgICAgY29uc3QgR2V0QnlJZFN0YXR1cyYpOwpAQCAtMTY3Niw4ICsx
Njc2LDE1IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXIKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLU5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeU9mZnNl
dChTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlm
aWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQorTm9kZSogQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24s
IE5vZGUqIGJhc2UsIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCB1bnNpZ25lZCBp
ZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIE5vZGVUeXBlIG9wKQogewor
ICAgIGlmIChiYXNlLT5oYXNDb25zdGFudCgpKSB7CisgICAgICAgIGlmIChKU1ZhbHVlIGNvbnN0
YW50ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2UtPmFzSlNWYWx1ZSgpLCBz
dHJ1Y3R1cmVTZXQsIG9mZnNldCkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
YmFzZSk7CisgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY29uc3RhbnQpOworICAg
ICAgICB9CisgICAgfQorICAgIAogICAgIE5vZGUqIHByb3BlcnR5U3RvcmFnZTsKICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQob2Zmc2V0KSkKICAgICAgICAgcHJvcGVydHlTdG9yYWdlID0gYmFzZTsK
QEAgLTE3NzIsMjEgKzE3NzksMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJ
ZCgKICAgICAvLyBVbmxlc3Mgd2Ugd2FudCBidWdzIGxpa2UgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTg4NzgzLCB3ZSBuZWVkIHRvCiAgICAgLy8gZW5zdXJlIHRoYXQg
dGhlIGJhc2Ugb2YgdGhlIG9yaWdpbmFsIGdldF9ieV9pZCBpcyBrZXB0IGFsaXZlIHVudGlsIHdl
J3JlIGRvbmUgd2l0aAogICAgIC8vIGFsbCBvZiB0aGUgc3BlY3VsYXRpb25zLiBXZSBvbmx5IGlu
c2VydCB0aGUgUGhhbnRvbSBpZiB0aGVyZSBoYWQgYmVlbiBhIENoZWNrU3RydWN0dXJlCi0gICAg
Ly8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGJhc2UgZm9sbG93aW5nIHRoZSBDaGVja1N0
cnVjdHVyZSBvbiBiYXNlLCBvciBpZiB0aGUKLSAgICAvLyBhY2Nlc3Mgd2FzIGNvbXBpbGVkIHRv
IGEgV2Vha0pTQ29uc3RhbnQgc3BlY2lmaWMgdmFsdWUsIGluIHdoaWNoIGNhc2Ugd2UgbWlnaHQg
bm90Ci0gICAgLy8gaGF2ZSBhbnkgZXhwbGljaXQgdXNlIG9mIHRoZSBiYXNlIGF0IGFsbC4KLSAg
ICBpZiAodmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkgfHwgb3JpZ2luYWxCYXNlICE9IGJhc2UpCisg
ICAgLy8gb24gc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGJhc2UgZm9sbG93aW5nIHRoZSBDaGVj
a1N0cnVjdHVyZSBvbiBiYXNlLgorICAgIGlmIChvcmlnaW5hbEJhc2UgIT0gYmFzZSkKICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBvcmlnaW5hbEJhc2UpOwogICAgIAotICAgIE5vZGUqIGxv
YWRlZFZhbHVlOwotICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgbG9h
ZGVkVmFsdWUgPSB3ZWFrSlNDb25zdGFudCh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGxvYWRlZFZhbHVlID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAg
ICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBTcGVjQ2VsbE90aGVyIDogcHJlZGljdGlv
biwKLSAgICAgICAgICAgIGJhc2UsIGlkZW50aWZpZXJOdW1iZXIsIHZhcmlhbnQub2Zmc2V0KCks
Ci0gICAgICAgICAgICB2YXJpYW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJC
eU9mZnNldCA6IEdldEJ5T2Zmc2V0KTsKLSAgICB9CisgICAgTm9kZSogbG9hZGVkVmFsdWUgPSBo
YW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgdmFyaWFudC5jYWxsTGlua1N0YXR1cygpID8gU3Bl
Y0NlbGxPdGhlciA6IHByZWRpY3Rpb24sCisgICAgICAgIGJhc2UsIHZhcmlhbnQuYmFzZVN0cnVj
dHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9mZnNldCgpLAorICAgICAgICB2YXJp
YW50LmNhbGxMaW5rU3RhdHVzKCkgPyBHZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCA6IEdldEJ5T2Zm
c2V0KTsKICAgICAKICAgICBpZiAoIXZhcmlhbnQuY2FsbExpbmtTdGF0dXMoKSkgewogICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRlc3RpbmF0aW9uT3BlcmFuZCksIGxvYWRlZFZhbHVlKTsK
QEAgLTE5NDksMTQgKzE5NDksOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlk
KAogICAgICAgICBpZiAodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpCiAgICAgICAgICAgICBiYXNl
ID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5hbHRlcm5hdGVCYXNlKCkpOwogICAgICAgICAKLSAg
ICAgICAgTm9kZSogbG9hZGVkVmFsdWU7Ci0gICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFs
dWUoKSkKLSAgICAgICAgICAgIGxvYWRlZFZhbHVlID0gd2Vha0pTQ29uc3RhbnQodmFyaWFudC5z
cGVjaWZpY1ZhbHVlKCkpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGxvYWRlZFZhbHVl
ID0gaGFuZGxlR2V0QnlPZmZzZXQoCi0gICAgICAgICAgICAgICAgU3BlY0NlbGxPdGhlciwgYmFz
ZSwgaWRlbnRpZmllck51bWJlciwgdmFyaWFudC5vZmZzZXQoKSwKLSAgICAgICAgICAgICAgICBH
ZXRHZXR0ZXJTZXR0ZXJCeU9mZnNldCk7Ci0gICAgICAgIH0KKyAgICAgICAgTm9kZSogbG9hZGVk
VmFsdWUgPSBoYW5kbGVHZXRCeU9mZnNldCgKKyAgICAgICAgICAgIFNwZWNDZWxsT3RoZXIsIGJh
c2UsIHZhcmlhbnQuYmFzZVN0cnVjdHVyZSgpLCBpZGVudGlmaWVyTnVtYmVyLCB2YXJpYW50Lm9m
ZnNldCgpLAorICAgICAgICAgICAgR2V0R2V0dGVyU2V0dGVyQnlPZmZzZXQpOwogICAgICAgICAK
ICAgICAgICAgTm9kZSogc2V0dGVyID0gYWRkVG9HcmFwaChHZXRTZXR0ZXIsIGxvYWRlZFZhbHVl
KTsKICAgICAgICAgCkBAIC0yOTU4LDEwICsyOTUzLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBO
b2RlKiBiYXNlID0gY2VsbENvbnN0YW50V2l0aFN0cnVjdHVyZUNoZWNrKGdsb2JhbE9iamVjdCwg
c3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLm9ubHlTdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwotICAg
ICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHNwZWNpZmljVmFsdWUgPSBzdGF0dXNbMF0uc3BlY2lm
aWNWYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCks
IHdlYWtKU0NvbnN0YW50KHNwZWNpZmljVmFsdWUuYXNDZWxsKCkpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaGFu
ZGxlR2V0QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgaWRlbnRpZmllck51bWJlciwgb3BlcmFu
ZCkpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgaGFuZGxlR2V0
QnlPZmZzZXQocHJlZGljdGlvbiwgYmFzZSwgc3RhdHVzWzBdLnN0cnVjdHVyZVNldCgpLCBpZGVu
dGlmaWVyTnVtYmVyLCBvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKQEAgLTI5NjksMTYgKzI5NjEsMTYg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAg
ICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1i
b2xUYWJsZSgpLT5nZXQodWlkKTsKICAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBzcGVjaWZpY1ZhbHVlID0KKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGluZmVy
cmVkVmFsdWUgPQogICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID8gd2F0Y2hwb2lu
dFNldC0+aW5mZXJyZWRWYWx1ZSgpIDogSlNWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICgh
c3BlY2lmaWNWYWx1ZSkgeworICAgICAgICAgICAgICAgIGlmICghaW5mZXJyZWRWYWx1ZSkgewog
ICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbigpOwogICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGFk
ZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9u
KSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChWYXJpYWJsZVdhdGNocG9p
bnQsIE9wSW5mbyh3YXRjaHBvaW50U2V0KSk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChzcGVjaWZpY1ZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChpbmZlcnJlZFZh
bHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nv
bnN0YW50Rm9sZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTcwODIxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwNyw4ICs0MDcsMTMgQEAgcHJpdmF0ZToKIAogICAgICAgICBhZGRC
YXNlQ2hlY2soaW5kZXhJbkJsb2NrLCBub2RlLCBiYXNlVmFsdWUsIHZhcmlhbnQuc3RydWN0dXJl
U2V0KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSB7
Ci0gICAgICAgICAgICBtX2dyYXBoLmNvbnZlcnRUb0NvbnN0YW50KG5vZGUsIG1fZ3JhcGguZnJl
ZXplKHZhcmlhbnQuc3BlY2lmaWNWYWx1ZSgpKSk7CisgICAgICAgIEpTVmFsdWUgYmFzZUZvckxv
YWQ7CisgICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKKyAgICAgICAgICAgIGJh
c2VGb3JMb2FkID0gdmFyaWFudC5hbHRlcm5hdGVCYXNlKCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGJhc2VGb3JMb2FkID0gYmFzZVZhbHVlLm1fdmFsdWU7CisgICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KGJhc2VGb3JMb2FkLCB2
YXJpYW50LmJhc2VTdHJ1Y3R1cmUoKSwgdmFyaWFudC5vZmZzZXQoKSkpIHsKKyAgICAgICAgICAg
IG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZSwgbV9ncmFwaC5mcmVlemUodmFsdWUpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTcwODIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI4NiwyMiArMTI4NiwyNCBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoU3Ry
dWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCkKKyAgICBi
b29sIGlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZSgKKyAgICAgICAgSlNPYmplY3QqIHN0cmlu
Z1Byb3RvdHlwZSwgU3RydWN0dXJlKiBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIFN0cmluZ0lt
cGwqIHVpZCkKICAgICB7CiAgICAgICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXNVbnVzZWQ7Ci0gICAg
ICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
ID0gc3RyaW5nUHJvdG90eXBlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkoCi0gICAgICAgICAg
ICB2bSgpLCB1aWQsIGF0dHJpYnV0ZXNVbnVzZWQsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPQorICAgICAgICAgICAgc3RyaW5nUHJvdG90eXBlU3RydWN0
dXJlLT5nZXRDb25jdXJyZW50bHkodm0oKSwgdWlkLCBhdHRyaWJ1dGVzVW51c2VkKTsKICAgICAg
ICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBpZiAoIXNwZWNpZmljVmFsdWUpCisgICAgICAgIEpTVmFsdWUg
dmFsdWUgPSBtX2dyYXBoLnRyeUdldENvbnN0YW50UHJvcGVydHkoCisgICAgICAgICAgICBzdHJp
bmdQcm90b3R5cGUsIHN0cmluZ1Byb3RvdHlwZVN0cnVjdHVyZSwgb2Zmc2V0KTsKKyAgICAgICAg
aWYgKCF2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAg
IGlmICghc3BlY2lmaWNWYWx1ZS0+aW5oZXJpdHMoSlNGdW5jdGlvbjo6aW5mbygpKSkKKyAgICAg
ICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0R5bmFtaWNDYXN0PEpTRnVuY3Rpb24qPih2YWx1
ZSk7CisgICAgICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIAotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oc3BlY2lmaWNWYWx1ZSk7CiAgICAgICAgIGlmIChmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5p
bnRyaW5zaWNGb3IoQ29kZUZvckNhbGwpICE9IFN0cmluZ1Byb3RvdHlwZVZhbHVlT2ZJbnRyaW5z
aWMpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIApAQCAtMTMzMCw5ICsxMzMy
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gKHRoYXQgd291bGQgY2FsbCB0b1N0cmluZygpKS4g
V2UgZG9uJ3Qgd2FudCB0aGUgREZHIHRvIGhhdmUgdG8gZGlzdGluZ3Vpc2gKICAgICAgICAgLy8g
YmV0d2VlbiB0aGUgdHdvLCBqdXN0IGJlY2F1c2UgdGhhdCBzZWVtcyBsaWtlIGl0IHdvdWxkIGdl
dCBjb25mdXNpbmcuIFNvIHdlCiAgICAgICAgIC8vIGp1c3QgcmVxdWlyZSBib3RoIG1ldGhvZHMg
dG8gYmUgc2FuZS4KLSAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3Ry
aW5nUHJvdG90eXBlU3RydWN0dXJlLCB2bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YuaW1wbCgp
KSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90
eXBlT2JqZWN0LCBzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+
dmFsdWVPZi5pbXBsKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAo
IWlzU3RyaW5nUHJvdG90eXBlTWV0aG9kU2FuZShzdHJpbmdQcm90b3R5cGVTdHJ1Y3R1cmUsIHZt
KCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgpKSkKKyAgICAgICAgaWYgKCFpc1N0cmlu
Z1Byb3RvdHlwZU1ldGhvZFNhbmUoc3RyaW5nUHJvdG90eXBlT2JqZWN0LCBzdHJpbmdQcm90b3R5
cGVTdHJ1Y3R1cmUsIHZtKCkucHJvcGVydHlOYW1lcy0+dG9TdHJpbmcuaW1wbCgpKSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE3MDgyMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03ODksNiArNzg5LDcxIEBAIHVuc2lnbmVkIEdyYXBoOjpyZXF1aXJlZFJlZ2lzdGVyQ291
bnRGb3IKICAgICByZXR1cm4gc3RkOjptYXgoZnJhbWVSZWdpc3RlckNvdW50KCksIHJlcXVpcmVk
UmVnaXN0ZXJDb3VudEZvckV4aXQoKSk7CiB9CiAKK0pTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50UHJvcGVydHkoCisgICAgSlNWYWx1ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIGlmICghYmFzZSB8fCAhYmFz
ZS5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIAorICAgIEpTT2Jq
ZWN0KiBvYmplY3QgPSBhc09iamVjdChiYXNlKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBzdHJ1Y3R1cmVTZXQuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3RydWN0dXJlU2V0W2ldOworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBzdHJ1
Y3R1cmUtPnByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KG9mZnNldCk7CisgICAgICAg
IGlmICghc2V0IHx8ICFzZXQtPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzVmFsaWRPZmZz
ZXQob2Zmc2V0KSk7CisgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGlj
dGlvbmFyeSgpKTsKKyAgICAgICAgCisgICAgICAgIHdhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNl
dCk7CisgICAgfQorICAgIAorICAgIC8vIFdoYXQgZm9sbG93cyBtYXkgcmVxdWlyZSBzb21lIGV4
dHJhIHRob3VnaHQuIFdlIG5lZWQgdGhpcyBsb2FkIHRvIGxvYWQgYSB2YWxpZCBKU1ZhbHVlLiBJ
ZgorICAgIC8vIG91ciBwcm9maWxpbmcgbWFrZXMgc2Vuc2UgYW5kIHdlJ3JlIHN0aWxsIG9uIHRy
YWNrIHRvIGdlbmVyYXRlIGNvZGUgdGhhdCB3b24ndCBiZQorICAgIC8vIGludmFsaWRhdGVkLCB0
aGVuIHdlIGhhdmUgbm90aGluZyB0byB3b3JyeSBhYm91dC4gV2UgZG8sIGhvd2V2ZXIsIGhhdmUg
dG8gd29ycnkgYWJvdXQKKyAgICAvLyBsb2FkaW5nIC0gYW5kIHRoZW4gdXNpbmcgLSBhbiBpbnZh
bGlkIEpTVmFsdWUgaW4gdGhlIGNhc2UgdGhhdCB1bmJla25vd25zdCB0byB1cyBvdXIgY29kZQor
ICAgIC8vIGlzIGRvb21lZC4KKyAgICAvLworICAgIC8vIE9uZSBhcmd1bWVudCBpbiBmYXZvciBv
ZiB0aGlzIGNvZGUgaXMgdGhhdCBpdCBzaG91bGQgZGVmaW5pdGVseSB3b3JrIGJlY2F1c2UgdGhl
IGJ1dHRlcmZseQorICAgIC8vIGlzIGFsd2F5cyBzZXQgYmVmb3JlIHRoZSBzdHJ1Y3R1cmUuIEhv
d2V2ZXIsIHdlIGRvbid0IGN1cnJlbnRseSBoYXZlIGEgZmVuY2UgYmV0d2VlbiB0aG9zZQorICAg
IC8vIHN0b3Jlcy4gSXQncyBub3QgY2xlYXIgaWYgdGhpcyBtYXR0ZXJzLCBob3dldmVyLiBXZSBk
b24ndCBldmVyIHNocmluayB0aGUgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAvLyBTbywgZm9yIHRo
aXMgdG8gZmFpbCwgeW91J2QgbmVlZCBhbiBhY2Nlc3Mgb24gYSBjb25zdGFudCBvYmplY3QgcG9p
bnRlciBzdWNoIHRoYXQgdGhlIGlubGluZQorICAgIC8vIGNhY2hlcyB0b2xkIHVzIHRoYXQgdGhl
IG9iamVjdCBoYWQgYSBzdHJ1Y3R1cmUgdGhhdCBpdCBkaWQgbm90ICp5ZXQqIGhhdmUsIGFuZCB0
aGVuIGxhdGVyLAorICAgIC8vIHRoZSBvYmplY3QgdHJhbnNpdGlvbmVkIHRvIHRoYXQgc3RydWN0
dXJlIHRoYXQgdGhlIGlubGluZSBjYWNoZXMgaGFkIGFscmFlZHkgc2Vlbi4gQW5kIHRoZW4KKyAg
ICAvLyB0aGUgcHJvY2Vzc29yIHJlb3JkZXJlZCB0aGUgc3RvcmVzLiBTZWVtcyB1bmxpa2VseSBh
bmQgZGlmZmljdWx0IHRvIHRlc3QuIEkgYmVsaWV2ZSB0aGF0CisgICAgLy8gdGhpcyBpcyB3b3J0
aCByZXZpc2l0aW5nIGJ1dCBpdCBpc24ndCB3b3J0aCBsb3Npbmcgc2xlZXAgb3Zlci4gRmlsZWQ6
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDY0MQor
ICAgIC8vCisgICAgLy8gRm9yIG5vdywgd2UganVzdCBkbyB0aGUgbWluaW1hbCB0aGluZzogZGVm
ZW5kIGFnYWluc3QgdGhlIHN0cnVjdHVyZSByaWdodCBub3cgYmVpbmcKKyAgICAvLyBpbmNvbXBh
dGlibGUgd2l0aCB0aGUgZ2V0RGlyZWN0IHdlJ3JlIHRyeWluZyB0byBkby4gVGhlIGVhc2llc3Qg
d2F5IHRvIGRvIHRoYXQgaXMgdG8KKyAgICAvLyBkZXRlcm1pbmUgaWYgdGhlIHN0cnVjdHVyZSBi
ZWxvbmdzIHRvIHRoZSBwcm92ZW4gc2V0LgorICAgIAorICAgIGlmICghc3RydWN0dXJlU2V0LmNv
bnRhaW5zKG9iamVjdC0+c3RydWN0dXJlKCkpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwor
ICAgIAorICAgIHJldHVybiBvYmplY3QtPmdldERpcmVjdChvZmZzZXQpOworfQorCitKU1ZhbHVl
IEdyYXBoOjp0cnlHZXRDb25zdGFudFByb3BlcnR5KEpTVmFsdWUgYmFzZSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKK3sKKyAgICByZXR1cm4gdHJ5R2V0Q29u
c3RhbnRQcm9wZXJ0eShiYXNlLCBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgb2Zmc2V0KTsKK30K
KworSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eSgKKyAgICBKU1ZhbHVlIGJh
c2UsIGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIHN0cnVjdHVyZSwgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0KQoreworICAgIGlmIChzdHJ1Y3R1cmUuaXNUb3AoKSB8fCBzdHJ1Y3R1cmUuaXND
bG9iYmVyZWQoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAKKyAgICByZXR1cm4g
dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShiYXNlLCBzdHJ1Y3R1cmUuc2V0KCksIG9mZnNldCk7Cit9
CisKK0pTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY29uc3QgQWJzdHJhY3RW
YWx1ZSYgYmFzZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQoreworICAgIHJldHVybiB0cnlHZXRD
b25zdGFudFByb3BlcnR5KGJhc2UubV92YWx1ZSwgYmFzZS5tX3N0cnVjdHVyZSwgb2Zmc2V0KTsK
K30KKwogSlNBY3RpdmF0aW9uKiBHcmFwaDo6dHJ5R2V0QWN0aXZhdGlvbihOb2RlKiBub2RlKQog
ewogICAgIHJldHVybiBub2RlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTQWN0aXZhdGlvbio+KCk7
CkBAIC05MDAsNyArOTY1LDYgQEAgdm9pZCBHcmFwaDo6dmlzaXRDaGlsZHJlbihTbG90VmlzaXRv
ciYgdgogICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG5vZGUtPm11bHRpR2V0QnlPZmZzZXREYXRhKCkudmFyaWFudHMu
c2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50JiB2YXJp
YW50ID0gbm9kZS0+bXVsdGlHZXRCeU9mZnNldERhdGEoKS52YXJpYW50c1tpXTsKLSAgICAgICAg
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRVbmJhcnJpZXJlZFJlYWRPbmx5VmFsdWUodmFyaWFu
dC5zcGVjaWZpY1ZhbHVlKCkpOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJ1Y3R1cmVT
ZXQmIHNldCA9IHZhcmlhbnQuc3RydWN0dXJlU2V0KCk7CiAgICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaiA9IHNldC5zaXplKCk7IGotLTspCiAgICAgICAgICAgICAgICAgICAgICAg
ICB2aXNpdG9yLmFwcGVuZFVuYmFycmllcmVkUmVhZE9ubHlQb2ludGVyKHNldFtqXSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxNzA4MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3
OSw2ICs2NzksMTEgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIHJlcXVpcmVkUmVnaXN0ZXJDb3Vu
dEZvckV4aXQoKTsKICAgICB1bnNpZ25lZCByZXF1aXJlZFJlZ2lzdGVyQ291bnRGb3JFeGVjdXRp
b25BbmRFeGl0KCk7CiAgICAgCisgICAgSlNWYWx1ZSB0cnlHZXRDb25zdGFudFByb3BlcnR5KEpT
VmFsdWUgYmFzZSwgY29uc3QgU3RydWN0dXJlU2V0JiwgUHJvcGVydHlPZmZzZXQpOworICAgIEpT
VmFsdWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShKU1ZhbHVlIGJhc2UsIFN0cnVjdHVyZSosIFBy
b3BlcnR5T2Zmc2V0KTsKKyAgICBKU1ZhbHVlIHRyeUdldENvbnN0YW50UHJvcGVydHkoSlNWYWx1
ZSBiYXNlLCBjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiwgUHJvcGVydHlPZmZzZXQpOwor
ICAgIEpTVmFsdWUgdHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjb25zdCBBYnN0cmFjdFZhbHVlJiwg
UHJvcGVydHlPZmZzZXQpOworICAgIAogICAgIEpTQWN0aXZhdGlvbiogdHJ5R2V0QWN0aXZhdGlv
bihOb2RlKik7CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogdHJ5R2V0UmVnaXN0ZXJz
KE5vZGUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHV2F0Y2hh
YmxlU3RydWN0dXJlV2F0Y2hpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVTdHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkocmV2
aXNpb24gMTcwODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdXYXRjaGFibGVT
dHJ1Y3R1cmVXYXRjaGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0
YSgpLnZhcmlhbnRzLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgICAgICAgICAgICAgR2V0
QnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBub2RlLT5tdWx0aUdldEJ5T2Zmc2V0RGF0YSgpLnZhcmlh
bnRzW2ldOwotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5V2F0Y2gobV9ncmFwaC5mcmVlemUo
dmFyaWFudC5zcGVjaWZpY1ZhbHVlKCkpLT5zdHJ1Y3R1cmUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnlXYXRjaCh2YXJpYW50LnN0cnVjdHVyZVNldCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gd2F0Y2ggYW55dGhpbmcgaW4gdGhlIHN0cnVjdHVy
ZSBjaGFpbiBiZWNhdXNlIHRoYXQgd291bGQKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGhh
dmUgYmVlbiBkZWNvbXBvc2VkIGludG8gQ2hlY2tTdHJ1Y3R1cmUncy4gRG9uJ3QgbmVlZCB0byB3
YXRjaCB0aGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIzNyw4ICszMjM3
LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEdldEJ5SWRWYXJpYW50
IHZhcmlhbnQgPSBkYXRhLnZhcmlhbnRzW2ldOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdDsK
LSAgICAgICAgICAgIGlmICh2YXJpYW50LnNwZWNpZmljVmFsdWUoKSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBtX291dC5jb25zdEludDY0KEpTVmFsdWU6OmVuY29kZSh2YXJpYW50LnNwZWNp
ZmljVmFsdWUoKSkpOworICAgICAgICAgICAgSlNWYWx1ZSBjb25zdGFudFJlc3VsdDsKKyAgICAg
ICAgICAgIGlmICh2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkgeworICAgICAgICAgICAgICAgIGNv
bnN0YW50UmVzdWx0ID0gbV9ncmFwaC50cnlHZXRDb25zdGFudFByb3BlcnR5KAorICAgICAgICAg
ICAgICAgICAgICB2YXJpYW50LmFsdGVybmF0ZUJhc2UoKSwgdmFyaWFudC5iYXNlU3RydWN0dXJl
KCksIHZhcmlhbnQub2Zmc2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNv
bnN0YW50UmVzdWx0KQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50NjQo
SlNWYWx1ZTo6ZW5jb2RlKGNvbnN0YW50UmVzdWx0KSk7CiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBMVmFsdWUgcHJvcGVydHlCYXNlOwogICAgICAgICAgICAgICAgIGlmICh2
YXJpYW50LmFsdGVybmF0ZUJhc2UoKSkKQEAgLTUxMDMsNyArNTEwOCw3IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgTFZhbHVlIGxvd0NlbGwoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2Rl
IG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCiAgICAgewotICAgICAgICBBU1NF
UlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IERGRzo6
aXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7CisgICAgICAgIERGR19BU1NFUlQobV9ncmFwaCwgbV9u
b2RlLCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBERkc6OmlzQ2VsbChlZGdl
LnVzZUtpbmQoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGVkZ2UtPm9wKCkgPT0gSlNDb25z
dGFudCkgewogICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGVkZ2UtPmFzSlNWYWx1ZSgpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxNzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjk4LDkgKzE2OTgsMTMgQEAgRW5jb2RlZEpTVmFsdWUg
SklUX09QRVJBVElPTiBvcGVyYXRpb25HZQogICAgIC8vIENvdmVycyBpbXBsaWNpdCBnbG9iYWxz
LiBTaW5jZSB0aGV5IGRvbid0IGV4aXN0IHVudGlsIHRoZXkgZmlyc3QgZXhlY3V0ZSwgd2UgZGlk
bid0IGtub3cgaG93IHRvIGNhY2hlIHRoZW0gYXQgY29tcGlsZSB0aW1lLgogICAgIGlmIChzbG90
LmlzQ2FjaGVhYmxlVmFsdWUoKSAmJiBzbG90LnNsb3RCYXNlKCkgPT0gc2NvcGUgJiYgc2NvcGUt
PnN0cnVjdHVyZSh2bSktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgewogICAgICAg
ICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5IHx8IG1vZGVBbmRUeXBl
LnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKLSAg
ICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKHZtKSk7Ci0gICAgICAgICAgICBwY1s2
XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBzY29wZS0+c3RydWN0dXJlKHZtKTsKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7
CisgICAgICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUuc2V0KGV4ZWMtPnZtKCksIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAgICAgICAgICAgcGNb
Nl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1lbnRzKHZt
LCBzbG90LmNhY2hlZE9mZnNldCgpKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTczMCwxNCAr
MTczNCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKICAgICBp
ZiAoZXhlYy0+dm0oKS5leGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQ292
ZXJzIGltcGxpY2l0IGdsb2JhbHMuIFNpbmNlIHRoZXkgZG9uJ3QgZXhpc3QgdW50aWwgdGhleSBm
aXJzdCBleGVjdXRlLCB3ZSBkaWRuJ3Qga25vdyBob3cgdG8gY2FjaGUgdGhlbSBhdCBjb21waWxl
IHRpbWUuCi0gICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eSB8fCBt
b2RlQW5kVHlwZS50eXBlKCkgPT0gR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
KSB7Ci0gICAgICAgIGlmIChzbG90LmlzQ2FjaGVhYmxlUHV0KCkgJiYgc2xvdC5iYXNlKCkgPT0g
c2NvcGUgJiYgc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFjY2Vzc2VzQXJlQ2FjaGVhYmxl
KCkpIHsKLSAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+
bV9sb2NrKTsKLSAgICAgICAgICAgIHBjWzVdLnUuc3RydWN0dXJlLnNldChleGVjLT52bSgpLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzY29wZS0+c3RydWN0dXJlKCkpOwotICAgICAg
ICAgICAgcGNbNl0udS5vcGVyYW5kID0gc2xvdC5jYWNoZWRPZmZzZXQoKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBDb21tb25TbG93UGF0aHM6OnRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbChleGVj
LCBjb2RlQmxvY2ssIHBjLCBzY29wZSwgbW9kZUFuZFR5cGUsIHNsb3QpOwogfQogCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3coRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkRXhjZXB0aW9uVmFsdWUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVw
YXRjaC5jcHAJKHJldmlzaW9uIDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDEyICs5NiwxNCBAQCBzdGF0aWMgdm9p
ZCByZXBhdGNoQ2FsbChDb2RlQmxvY2sqIGNvZGViCiAgICAgcmVwYXRjaENhbGwocmVwYXRjaEJ1
ZmZlciwgY2FsbCwgbmV3Q2FsbGVlRnVuY3Rpb24pOwogfQogCi1zdGF0aWMgdm9pZCByZXBhdGNo
QnlJZFNlbGZBY2Nlc3MoVk0mIHZtLCBDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYg
cHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsCi0gICAgY29uc3QgRnVuY3Rpb25Q
dHIgJnNsb3dQYXRoRnVuY3Rpb24sIGJvb2wgY29tcGFjdCkKK3N0YXRpYyB2b2lkIHJlcGF0Y2hC
eUlkU2VsZkFjY2VzcygKKyAgICBWTSYgdm0sIENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLAorICAgIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBGdW5j
dGlvblB0ciAmc2xvd1BhdGhGdW5jdGlvbiwKKyAgICBib29sIGNvbXBhY3QpCiB7CiAgICAgaWYg
KHN0cnVjdHVyZS0+dHlwZUluZm8oKS5uZXdJbXB1cmVQcm9wZXJ0eUZpcmVzV2F0Y2hwb2ludHMo
KSkKICAgICAgICAgdm0ucmVnaXN0ZXJXYXRjaHBvaW50Rm9ySW1wdXJlUHJvcGVydHkocHJvcGVy
dHlOYW1lLCBzdHViSW5mby5hZGRXYXRjaHBvaW50KGNvZGVCbG9jaykpOwotCisgICAgCiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7CiAKICAgICAvLyBPbmx5IG9w
dGltaXplIG9uY2UhCkBAIC0zNDMsOCArMzQ1LDExIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlQnlJ
ZFN0dWIoCiAgICAgICAgICAgICAgICAgZmFpbHVyZUNhc2VzLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgIGN1cnJTdHJ1Y3R1cmUgPSBpdC0+Z2V0KCk7CiAgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKHByb3RvT2JqZWN0LT5zdHJ1Y3R1cmUoKSA9PSBjdXJyU3RydWN0dXJlKTsKICAgICB9CiAg
ICAgCisgICAgY3VyclN0cnVjdHVyZS0+c3RhcnRXYXRjaGluZ1Byb3BlcnR5Rm9yUmVwbGFjZW1l
bnRzKCp2bSwgb2Zmc2V0KTsKKyAgICAKICAgICBHUFJSZWcgYmFzZUZvckFjY2Vzc0dQUjsKICAg
ICBpZiAoY2hhaW4pIHsKICAgICAgICAgc3R1YkppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHByb3RvT2JqZWN0KSwgc2NyYXRjaEdQUik7CkBAIC02OTMsOSArNjk4LDEwIEBA
IHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBpZiAoc2xvdC5z
bG90QmFzZSgpID09IGJhc2VWYWx1ZQogICAgICAgICAmJiBzbG90LmlzQ2FjaGVhYmxlVmFsdWUo
KQogICAgICAgICAmJiBNYWNyb0Fzc2VtYmxlcjo6aXNDb21wYWN0UHRyQWxpZ25lZEFkZHJlc3NP
ZmZzZXQobWF4T2Zmc2V0UmVsYXRpdmVUb1BhdGNoZWRTdG9yYWdlKHNsb3QuY2FjaGVkT2Zmc2V0
KCkpKSkgewotICAgICAgICAgICAgcmVwYXRjaEJ5SWRTZWxmQWNjZXNzKCp2bSwgY29kZUJsb2Nr
LCBzdHViSW5mbywgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIHNsb3QuY2FjaGVkT2Zmc2V0KCks
IG9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QsIHRydWUpOwotICAgICAgICAgICAgc3R1YkluZm8u
aW5pdEdldEJ5SWRTZWxmKCp2bSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0
dXJlKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBzdHJ1Y3R1cmUtPnN0YXJ0
V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cygqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkp
OworICAgICAgICByZXBhdGNoQnlJZFNlbGZBY2Nlc3MoKnZtLCBjb2RlQmxvY2ssIHN0dWJJbmZv
LCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgc2xvdC5jYWNoZWRPZmZzZXQoKSwgb3BlcmF0aW9u
R2V0QnlJZEJ1aWxkTGlzdCwgdHJ1ZSk7CisgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2Vs
Zigqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7CisgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAogICAgIHJlcGF0Y2hDYWxsKGNvZGVCbG9jaywgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkQnVpbGRMaXN0KTsKQEAgLTEx
NzgsNiArMTE4NCw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUK
ICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6aXNQdHJBbGlnbmVkQWRkcmVzc09mZnNldChv
ZmZzZXRSZWxhdGl2ZVRvUGF0Y2hlZFN0b3JhZ2Uoc2xvdC5jYWNoZWRPZmZzZXQoKSkpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkQ2FjaGVQcm9w
ZXJ0eVJlcGxhY2VtZW50KCp2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIHJlcGF0
Y2hCeUlkU2VsZkFjY2Vzcygqdm0sIGNvZGVCbG9jaywgc3R1YkluZm8sIHN0cnVjdHVyZSwgaWRl
bnQsIHNsb3QuY2FjaGVkT2Zmc2V0KCksIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1
bmN0aW9uKHNsb3QsIHB1dEtpbmQpLCBmYWxzZSk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRC
eUlkUmVwbGFjZSgqdm0sIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTI5NSw2ICsxMzAyLDggQEAgc3RhdGljIGJvb2wg
dHJ5QnVpbGRQdXRCeUlkTGlzdChFeGVjU3RhdAogICAgICAgICAgICAgaWYgKGxpc3QtPmlzRnVs
bCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gV2lsbCBnZXQgaGVyZSBkdWUg
dG8gcmVjdXJzaW9uLgogICAgICAgICAgICAgCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENh
Y2hlUHJvcGVydHlSZXBsYWNlbWVudCgqdm0sIHNsb3QuY2FjaGVkT2Zmc2V0KCkpOworICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyBXZSdyZSBub3cgY29tbWl0dGVkIHRvIGNyZWF0aW5nIHRo
ZSBzdHViLiBNb2dyaWZ5IHRoZSBtZXRhLWRhdGEgYWNjb3JkaW5nbHkuCiAgICAgICAgICAgICBl
bWl0UHV0UmVwbGFjZVN0dWIoCiAgICAgICAgICAgICAgICAgZXhlYywgYmFzZVZhbHVlLCBwcm9w
ZXJ0eU5hbWUsIHNsb3QsIHN0dWJJbmZvLCBwdXRLaW5kLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNzA4MjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02OTMsNiArNjkzLDcgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF9ieV9pZAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUtPmRpZENhY2hlUHJv
cGVydHlSZXBsYWNlbWVudCh2bSwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgICAgICAg
ICAgcGNbNF0udS5zdHJ1Y3R1cmUuc2V0KAogICAgICAgICAgICAgICAgICAgICB2bSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKICAgICAgICAgICAgICAgICBpZiAo
aXNJbmxpbmVPZmZzZXQoc2xvdC5jYWNoZWRPZmZzZXQoKSkpIHsKQEAgLTE0MjYsOSArMTQyNywx
MyBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfZ2V0X2Zyb21fCiAgICAgaWYgKHNs
b3QuaXNDYWNoZWFibGVWYWx1ZSgpICYmIHNsb3Quc2xvdEJhc2UoKSA9PSBzY29wZSAmJiBzY29w
ZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNjZXNzZXNBcmVDYWNoZWFibGUoKSkgewogICAgICAg
ICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEdsb2JhbFByb3BlcnR5IHx8IG1vZGVBbmRUeXBl
LnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpIHsKICAgICAg
ICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29kZUJsb2NrKCk7Ci0gICAgICAg
ICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihjb2RlQmxvY2stPm1fbG9jayk7Ci0gICAg
ICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgpKTsKLSAgICAgICAgICAgIHBjWzZdLnUu
b3BlcmFuZCA9IHNsb3QuY2FjaGVkT2Zmc2V0KCk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHNjb3BlLT5zdHJ1Y3R1cmUodm0pOworICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgICAgICAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICBwY1s2XS51
Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc3RydWN0dXJlLT5zdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIHNs
b3QuY2FjaGVkT2Zmc2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNDQ4LDE1ICsxNDUz
LDggQEAgc3RhdGljIEpTT2JqZWN0KiBwdXRUb1Njb3BlQ29tbW9uKEV4ZWNTdAogCiAgICAgUHV0
UHJvcGVydHlTbG90IHNsb3Qoc2NvcGUsIGNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpOwogICAg
IHNjb3BlLT5tZXRob2RUYWJsZSgpLT5wdXQoc2NvcGUsIGV4ZWMsIGlkZW50LCB2YWx1ZSwgc2xv
dCk7Ci0KLSAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2luY2UgdGhleSBkb24ndCBl
eGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBrbm93IGhvdyB0byBjYWNo
ZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KLSAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IEds
b2JhbFByb3BlcnR5IHx8IG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBHbG9iYWxQcm9wZXJ0eVdpdGhW
YXJJbmplY3Rpb25DaGVja3MpIHsKLSAgICAgICAgaWYgKHNsb3QuaXNDYWNoZWFibGVQdXQoKSAm
JiBzbG90LmJhc2UoKSA9PSBzY29wZSAmJiBzY29wZS0+c3RydWN0dXJlKCktPnByb3BlcnR5QWNj
ZXNzZXNBcmVDYWNoZWFibGUoKSkgewotICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoY29kZUJsb2NrLT5tX2xvY2spOwotICAgICAgICAgICAgcGNbNV0udS5zdHJ1Y3R1cmUu
c2V0KGV4ZWMtPnZtKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHNjb3BlLT5zdHJ1
Y3R1cmUoKSk7Ci0gICAgICAgICAgICBwY1s2XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNl
dCgpOwotICAgICAgICB9Ci0gICAgfQorICAgIAorICAgIENvbW1vblNsb3dQYXRoczo6dHJ5Q2Fj
aGVQdXRUb1Njb3BlR2xvYmFsKGV4ZWMsIGNvZGVCbG9jaywgcGMsIHNjb3BlLCBtb2RlQW5kVHlw
ZSwgc2xvdCk7CiAKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxNzA4MjEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtOTMsNiArOTMsMzMgQEAgaW5saW5lIGJvb2wgb3BJbihFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdQogICAgIHJldHVybiBiYXNlT2JqLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9w
ZXJ0eSk7CiB9CiAKK2lubGluZSB2b2lkIHRyeUNhY2hlUHV0VG9TY29wZUdsb2JhbCgKKyAgICBF
eGVjU3RhdGUqIGV4ZWMsIENvZGVCbG9jayogY29kZUJsb2NrLCBJbnN0cnVjdGlvbiogcGMsIEpT
T2JqZWN0KiBzY29wZSwKKyAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUsIFB1dFBy
b3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICAvLyBDb3ZlcnMgaW1wbGljaXQgZ2xvYmFscy4gU2lu
Y2UgdGhleSBkb24ndCBleGlzdCB1bnRpbCB0aGV5IGZpcnN0IGV4ZWN1dGUsIHdlIGRpZG4ndCBr
bm93IGhvdyB0byBjYWNoZSB0aGVtIGF0IGNvbXBpbGUgdGltZS4KKyAgICAKKyAgICBpZiAobW9k
ZUFuZFR5cGUudHlwZSgpICE9IEdsb2JhbFByb3BlcnR5ICYmIG1vZGVBbmRUeXBlLnR5cGUoKSAh
PSBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBpZiAoIXNsb3QuaXNDYWNoZWFibGVQdXQoKQorICAgICAgICB8fCBzbG90LmJh
c2UoKSAhPSBzY29wZQorICAgICAgICB8fCAhc2NvcGUtPnN0cnVjdHVyZSgpLT5wcm9wZXJ0eUFj
Y2Vzc2VzQXJlQ2FjaGVhYmxlKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoc2xv
dC50eXBlKCkgPT0gUHV0UHJvcGVydHlTbG90OjpOZXdQcm9wZXJ0eSkgeworICAgICAgICAvLyBE
b24ndCBjYWNoZSBpZiB3ZSd2ZSBkb25lIGEgdHJhbnNpdGlvbi4gV2Ugd2FudCB0byBkZXRlY3Qg
dGhlIGZpcnN0IHJlcGxhY2Ugc28gdGhhdCB3ZQorICAgICAgICAvLyBjYW4gaW52YWxpZGF0ZSB0
aGUgd2F0Y2hwb2ludC4KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBzY29wZS0+
c3RydWN0dXJlKCktPmRpZENhY2hlUHJvcGVydHlSZXBsYWNlbWVudChleGVjLT52bSgpLCBzbG90
LmNhY2hlZE9mZnNldCgpKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGNvZGVC
bG9jay0+bV9sb2NrKTsKKyAgICBwY1s1XS51LnN0cnVjdHVyZS5zZXQoZXhlYy0+dm0oKSwgY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc2NvcGUtPnN0cnVjdHVyZSgpKTsKKyAgICBwY1s2
XS51Lm9wZXJhbmQgPSBzbG90LmNhY2hlZE9mZnNldCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBD
b21tb25TbG93UGF0aHMKIAogY2xhc3MgRXhlY1N0YXRlOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAJ
KHJldmlzaW9uIDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsOCArMTA3LDcgQEAg
Ym9vbCBJbnRlbmRlZFN0cnVjdHVyZUNoYWluOjptYXlJbnRlcmNlcAogewogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBtX3ZlY3Rvci5zaXplKCk7ICsraSkgewogICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodm0sIHVp
ZCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IG1fdmVjdG9yW2ldLT5nZXRDb25jdXJyZW50bHkodm0sIHVpZCwgYXR0cmlidXRlcyk7
CiAgICAgICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgKFJlYWRPbmx5IHwgQWNjZXNzb3IpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5jcHAJKHJldmlz
aW9uIDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzksOCArMTM5LDcgQEAgdm9pZCBKU1ZhbHVlOjpwdXRU
b1ByaW1pdGl2ZShFeGVjU3RhdGUqIAogCiAgICAgZm9yICg7IDsgb2JqID0gYXNPYmplY3QocHJv
dG90eXBlKSkgewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBKU0NlbGwq
IHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9iai0+c3Ry
dWN0dXJlKCktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVl
KTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0
KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwogICAgICAgICBpZiAob2Zmc2V0ICE9IGlu
dmFsaWRPZmZzZXQpIHsKICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUmVhZE9ubHkpIHsK
ICAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc1N0cmljdE1vZGUoKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgyLDcgKzI4Miw3IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OnJlc2V0KEpTVmFsdWUgcHJvdG8KICAgICBtX2Z1bmN0aW9uUHJvdG90eXBlLnNldCh2bSwg
dGhpcywgRnVuY3Rpb25Qcm90b3R5cGU6OmNyZWF0ZSh2bSwgRnVuY3Rpb25Qcm90b3R5cGU6OmNy
ZWF0ZVN0cnVjdHVyZSh2bSwgdGhpcywganNOdWxsKCkpKSk7IC8vIFRoZSByZWFsIHByb3RvdHlw
ZSB3aWxsIGJlIHNldCBvbmNlIE9iamVjdFByb3RvdHlwZSBpcyBjcmVhdGVkLgogICAgIG1fZnVu
Y3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIHRoaXMsIG1fZnVuY3Rpb25Qcm90b3R5cGUuZ2V0KCkpKTsKICAgICBtX2JvdW5kRnVuY3Rp
b25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBKU0JvdW5kRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVy
ZSh2bSwgdGhpcywgbV9mdW5jdGlvblByb3RvdHlwZS5nZXQoKSkpOwotICAgIG1fbmFtZWRGdW5j
dGlvblN0cnVjdHVyZS5zZXQodm0sIHRoaXMsIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBtX2Z1bmN0aW9uU3RydWN0dXJlLmdldCgpLCB2bS5wcm9wZXJ0eU5hbWVzLT5uYW1l
LCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSwgMCwgbV9mdW5jdGlvbk5hbWVPZmZz
ZXQpKTsKKyAgICBtX25hbWVkRnVuY3Rpb25TdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgbV9mdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwg
dm0ucHJvcGVydHlOYW1lcy0+bmFtZSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0s
IG1fZnVuY3Rpb25OYW1lT2Zmc2V0KSk7CiAgICAgbV9pbnRlcm5hbEZ1bmN0aW9uU3RydWN0dXJl
LnNldCh2bSwgdGhpcywgSW50ZXJuYWxGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlKHZtLCB0aGlz
LCBtX2Z1bmN0aW9uUHJvdG90eXBlLmdldCgpKSk7CiAgICAgSlNGdW5jdGlvbiogY2FsbEZ1bmN0
aW9uID0gMDsKICAgICBKU0Z1bmN0aW9uKiBhcHBseUZ1bmN0aW9uID0gMDsKQEAgLTQyOSw4ICs0
MjksOCBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlIHByb3RvCiAgICAgUHJv
dG90eXBlTWFwJiBwcm90b3R5cGVNYXAgPSB2bS5wcm90b3R5cGVNYXA7CiAgICAgU3RydWN0dXJl
KiBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IHByb3RvdHlwZU1hcC5lbXB0eU9iamVjdFN0cnVj
dHVyZUZvclByb3RvdHlwZShtX29iamVjdFByb3RvdHlwZS5nZXQoKSwgSlNGaW5hbE9iamVjdDo6
ZGVmYXVsdElubGluZUNhcGFjaXR5KCkpOwogICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldDsKLSAg
ICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+ZG9uZSwg
MCwgMCwgb2Zmc2V0KTsKLSAgICBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBpdGVyYXRvclJlc3VsdFN0cnVjdHVyZSwgdm0ucHJv
cGVydHlOYW1lcy0+dmFsdWUsIDAsIDAsIG9mZnNldCk7CisgICAgaXRlcmF0b3JSZXN1bHRTdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgaXRlcmF0b3JSZXN1
bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPmRvbmUsIDAsIG9mZnNldCk7CisgICAgaXRl
cmF0b3JSZXN1bHRTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2
bSwgaXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlLCAwLCBv
ZmZzZXQpOwogICAgIG1faXRlcmF0b3JSZXN1bHRTdHJ1Y3R1cmUuc2V0KHZtLCB0aGlzLCBpdGVy
YXRvclJlc3VsdFN0cnVjdHVyZSk7CiAKICAgICBtX2V2YWxGdW5jdGlvbi5zZXQodm0sIHRoaXMs
IEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgdGhpcywgMSwgdm0ucHJvcGVydHlOYW1lcy0+ZXZhbC5z
dHJpbmcoKSwgZ2xvYmFsRnVuY0V2YWwpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw3ICsxLDcg
QEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5A
a2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNv
bSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMDks
IDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMywgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IEVyaWMgU2VpZGVsIChlcmljQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTU1LDE1ICs1
NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogLy8gQXJyYXlDb252ZW50aW9ucy5oLgogc3RhdGljIHVu
c2lnbmVkIGxhc3RBcnJheVNpemUgPSAwOwogCi1KU0NlbGwqIGdldENhbGxhYmxlT2JqZWN0U2xv
dyhKU0NlbGwqIGNlbGwpCi17Ci0gICAgaWYgKGNlbGwtPnR5cGUoKSA9PSBKU0Z1bmN0aW9uVHlw
ZSkKLSAgICAgICAgcmV0dXJuIGNlbGw7Ci0gICAgaWYgKGNlbGwtPnN0cnVjdHVyZSgpLT5jbGFz
c0luZm8oKS0+aXNTdWJDbGFzc09mKEludGVybmFsRnVuY3Rpb246OmluZm8oKSkpCi0gICAgICAg
IHJldHVybiBjZWxsOwotICAgIHJldHVybiAwOwotfQotCiBTVEFUSUNfQVNTRVJUX0lTX1RSSVZJ
QUxMWV9ERVNUUlVDVElCTEUoSlNPYmplY3QpOwogU1RBVElDX0FTU0VSVF9JU19UUklWSUFMTFlf
REVTVFJVQ1RJQkxFKEpTRmluYWxPYmplY3QpOwogCkBAIC0zNjAsNyArMzUxLDcgQEAgdm9pZCBK
U09iamVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgICAgICAgICAgcHJvdG90eXBl
ID0gb2JqLT5wcm90b3R5cGUoKTsKICAgICAgICAgICAgIGlmIChwcm90b3R5cGUuaXNOdWxsKCkp
IHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnBy
b3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUp
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1
dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9i
amVjdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJ
bnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkKICAg
ICAgICAgICAgICAgICAgICAgJiYgc2xvdC5pc1N0cmljdE1vZGUoKSkKICAgICAgICAgICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKFN0cmljdE1vZGVSZWFkb25s
eVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTM3MSw4
ICszNjIsNyBAQCB2b2lkIEpTT2JqZWN0OjpwdXQoSlNDZWxsKiBjZWxsLCBFeGVjU3RhCiAgICAg
SlNPYmplY3QqIG9iajsKICAgICBmb3IgKG9iaiA9IHRoaXNPYmplY3Q7IDsgb2JqID0gYXNPYmpl
Y3QocHJvdG90eXBlKSkgewogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOwotICAgICAgICBK
U0NlbGwqIHNwZWNpZmljVmFsdWU7Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IG9i
ai0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNp
ZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBvYmotPnN0cnVjdHVy
ZSh2bSktPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKGlz
VmFsaWRPZmZzZXQob2Zmc2V0KSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBSZWFk
T25seSkgewogICAgICAgICAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0p
LT5wcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8oZXhlYy0+dm0oKSwgcHJvcGVydHlO
YW1lKSB8fCBvYmogPT0gdGhpc09iamVjdCk7CkBAIC00MDcsNyArMzk3LDcgQEAgdm9pZCBKU09i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1N0YQogICAgIH0KICAgICAKICAgICBBU1NFUlQo
IXRoaXNPYmplY3QtPnN0cnVjdHVyZSh2bSktPnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3Rv
cmVUbyhleGVjLT52bSgpLCBwcm9wZXJ0eU5hbWUpIHx8IG9iaiA9PSB0aGlzT2JqZWN0KTsKLSAg
ICBpZiAoIXRoaXNPYmplY3QtPnB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9w
ZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpICYmIHNs
b3QuaXNTdHJpY3RNb2RlKCkpCisgICAgaWYgKCF0aGlzT2JqZWN0LT5wdXREaXJlY3RJbnRlcm5h
bDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xvdCkgJiYgc2xvdC5p
c1N0cmljdE1vZGUoKSkKICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFs
KFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcikpOwogICAgIHJldHVybjsKIH0K
QEAgLTEyMjcsNyArMTIxNyw3IEBAIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdEFjY2Vzc29yKEV4
ZWNTdGEKIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdE5vbkluZGV4QWNjZXNzb3IoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKQogewogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwotICAgIHB1dERpcmVjdElu
dGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFsdWUs
IGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0RGly
ZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1lLCB2
YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiAKICAgICAvLyBwdXREaXJlY3Qgd2lsbCBjaGFuZ2Ug
b3VyIFN0cnVjdHVyZSBpZiB3ZSBhZGQgYSBuZXcgcHJvcGVydHkuIEZvcgogICAgIC8vIGdldHRl
cnMgYW5kIHNldHRlcnMsIHRob3VnaCwgd2UgYWxzbyBuZWVkIHRvIGNoYW5nZSBvdXIgU3RydWN0
dXJlCkBAIC0xMjY3LDkgKzEyNTcsOCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShK
U0NlbGwqIGNlCiAgICAgICAgIHRoaXNPYmplY3QtPnJlaWZ5U3RhdGljRnVuY3Rpb25zRm9yRGVs
ZXRlKGV4ZWMpOwogCiAgICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNp
ZmljVmFsdWU7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKLSAgICBpZiAoaXNWYWxpZE9mZnNl
dCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodm0pLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgc3BlY2lmaWNWYWx1ZSkpKSB7CisgICAgaWYgKGlzVmFsaWRPZmZzZXQodGhpc09iamVj
dC0+c3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKSkgewog
ICAgICAgICBpZiAoYXR0cmlidXRlcyAmIERvbnREZWxldGUgJiYgIXZtLmlzSW5EZWZpbmVPd25Q
cm9wZXJ0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB0aGlzT2JqZWN0
LT5yZW1vdmVEaXJlY3Qodm0sIHByb3BlcnR5TmFtZSk7CkBAIC0xMzgzLDYgKzEzNzIsMTAgQEAg
Ym9vbCBKU09iamVjdDo6Z2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdAogLy8gRUNNQSA4LjYuMi42
CiBKU1ZhbHVlIEpTT2JqZWN0OjpkZWZhdWx0VmFsdWUoY29uc3QgSlNPYmplY3QqIG9iamVjdCwg
RXhlY1N0YXRlKiBleGVjLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlIGhpbnQpCiB7CisgICAgLy8g
TWFrZSBzdXJlIHRoYXQgd2hhdGV2ZXIgZGVmYXVsdCB2YWx1ZSBtZXRob2RzIHRoZXJlIGFyZSBv
biBvYmplY3QncyBwcm90b3R5cGUgY2hhaW4gYXJlCisgICAgLy8gYmVpbmcgd2F0Y2hlZC4KKyAg
ICBvYmplY3QtPnN0cnVjdHVyZSgpLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZO
ZWNlc3NhcnlGb3JFbnRpcmVDaGFpbihleGVjLT52bSgpKTsKKyAgICAKICAgICAvLyBNdXN0IGNh
bGwgdG9TdHJpbmcgZmlyc3QgZm9yIERhdGUgb2JqZWN0cy4KICAgICBpZiAoKGhpbnQgPT0gUHJl
ZmVyU3RyaW5nKSB8fCAoaGludCAhPSBQcmVmZXJOdW1iZXIgJiYgb2JqZWN0LT5wcm90b3R5cGUo
KSA9PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVQcm90b3R5cGUoKSkpIHsKICAg
ICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGNhbGxEZWZhdWx0VmFsdWVGdW5jdGlvbihleGVjLCBvYmpl
Y3QsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZyk7CkBAIC0xNDQ2LDIwICsxNDM5LDYg
QEAgYm9vbCBKU09iamVjdDo6ZGVmYXVsdEhhc0luc3RhbmNlKEV4ZWNTdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBKU09iamVjdDo6Z2V0UHJvcGVydHlTcGVjaWZpY1ZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSkgY29uc3QKLXsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7Ci0gICAgaWYgKGlzVmFsaWRPZmZzZXQoc3RydWN0dXJlKHZtKS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICAvLyBUaGlzIGNvdWxkIGJlIGEgZnVuY3Rpb24gd2l0aGluIHRoZSBzdGF0
aWMgdGFibGU/IC0gc2hvdWxkIHByb2JhYmx5Ci0gICAgLy8gYWxzbyBsb29rIGluIHRoZSBoYXNo
PyAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIG5vdCBiZSBhIHByb2JsZW0sIHNpbmNlCi0gICAgLy8g
d2UndmUgY3VycmVudGx5IGFsd2F5cyBjYWxsICdnZXQnIGZpcnN0LCB3aGljaCBzaG91bGQgaGF2
ZSBwb3B1bGF0ZWQKLSAgICAvLyB0aGUgbm9ybWFsIHN0b3JhZ2UuCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCiB2b2lkIEpTT2JqZWN0OjpnZXRQcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmplY3Qs
IEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1l
cmF0aW9uTW9kZSBtb2RlKQogewogICAgIHByb3BlcnR5TmFtZXMuc2V0QmFzZU9iamVjdChvYmpl
Y3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCShyZXZp
c2lvbiAxNzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykg
MjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1
LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NiwxNSArNTYsNiBA
QCBpbmxpbmUgSlNDZWxsKiBnZXRKU0Z1bmN0aW9uKEpTVmFsdWUgdmFsCiAgICAgcmV0dXJuIDA7
CiB9CiAKLUpTX0VYUE9SVF9QUklWQVRFIEpTQ2VsbCogZ2V0Q2FsbGFibGVPYmplY3RTbG93KEpT
Q2VsbCopOwotCi1pbmxpbmUgSlNDZWxsKiBnZXRDYWxsYWJsZU9iamVjdChKU1ZhbHVlIHZhbHVl
KQotewotICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJl
dHVybiBnZXRDYWxsYWJsZU9iamVjdFNsb3codmFsdWUuYXNDZWxsKCkpOwotfQotCiBjbGFzcyBH
ZXR0ZXJTZXR0ZXI7CiBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOwogY2xhc3MgSlNGdW5jdGlvbjsK
QEAgLTQ5MSw4ICs0ODIsNiBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgSlNWYWx1ZSB0b1RoaXMoSlNDZWxsKiwgRXhlY1N0YXRlKiwgRUNNQU1vZGUpOwogCi0gICAg
Ym9vbCBnZXRQcm9wZXJ0eVNwZWNpZmljVmFsdWUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBK
U0NlbGwqJiBzcGVjaWZpY0Z1bmN0aW9uKSBjb25zdDsKLQogICAgIC8vIFRoaXMgZ2V0IGZ1bmN0
aW9uIG9ubHkgbG9va3MgYXQgdGhlIHByb3BlcnR5IG1hcC4KICAgICBKU1ZhbHVlIGdldERpcmVj
dChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpIGNvbnN0CiAgICAgewpAQCAtNTAx
LDEyICs0OTAsMTEgQEAgcHVibGljOgogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQgIT0gaW52YWxp
ZE9mZnNldCA/IGdldERpcmVjdChvZmZzZXQpIDogSlNWYWx1ZSgpOwogICAgIH0KLQorICAgIAog
ICAgIEpTVmFsdWUgZ2V0RGlyZWN0KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQmIGF0dHJpYnV0ZXMpIGNvbnN0CiAgICAgewotICAgICAgICBKU0NlbGwqIHNwZWNp
ZmljOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7
Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljKTsKKyAgICAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAg
ICAgICAgIGNoZWNrT2Zmc2V0KG9mZnNldCwgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsK
ICAgICAgICAgcmV0dXJuIG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0ID8gZ2V0RGlyZWN0KG9mZnNl
dCkgOiBKU1ZhbHVlKCk7CiAgICAgfQpAQCAtNTIxLDkgKzUwOSw4IEBAIHB1YmxpYzoKIAogICAg
IFByb3BlcnR5T2Zmc2V0IGdldERpcmVjdE9mZnNldChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkJiBhdHRyaWJ1dGVzKQogICAgIHsKLSAgICAgICAgSlNDZWxsKiBz
cGVjaWZpYzsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzLT5zdHJ1Y3R1cmUo
dm0pOwotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBzcGVjaWZpYyk7CisgICAgICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
OwogICAgICAgICBjaGVja09mZnNldChvZmZzZXQsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHko
KSk7CiAgICAgICAgIHJldHVybiBvZmZzZXQ7CiAgICAgfQpAQCAtOTQ5LDcgKzkzNiw3IEBAIHBy
aXZhdGU6CiAgICAgQXJyYXlTdG9yYWdlKiBlbnRlckRpY3Rpb25hcnlJbmRleGluZ01vZGVXaGVu
QXJyYXlTdG9yYWdlQWxyZWFkeUV4aXN0cyhWTSYsIEFycmF5U3RvcmFnZSopOwogICAgICAgICAK
ICAgICB0ZW1wbGF0ZTxQdXRNb2RlPgotICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYsIEpT
Q2VsbCopOworICAgIGJvb2wgcHV0RGlyZWN0SW50ZXJuYWwoVk0mLCBQcm9wZXJ0eU5hbWUsIEpT
VmFsdWUsIHVuc2lnbmVkIGF0dHIsIFB1dFByb3BlcnR5U2xvdCYpOwogCiAgICAgYm9vbCBpbmxp
bmVHZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgVk0mLCBTdHJ1Y3R1cmUmLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlsbEdl
dHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmLCBKU1ZhbHVlLCB1bnNpZ25lZCwgUHJvcGVy
dHlPZmZzZXQpOwpAQCAtMTIxMyw4ICsxMjAwLDcgQEAgaW5saW5lIEpTVmFsdWUgSlNPYmplY3Q6
OnByb3RvdHlwZSgpIGNvbgogQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjppbmxpbmVHZXRP
d25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIFN0cnVjdHVyZSYgc3RydWN0
dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKLSAgICBKU0NlbGwqIHNwZWNpZmljOwotICAgIFByb3Bl
cnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcywgc3BlY2lmaWMpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS5n
ZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgaWYgKExJS0VMWShpc1ZhbGlk
T2Zmc2V0KG9mZnNldCkpKSB7CiAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnZXREaXJlY3Qob2Zm
c2V0KTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkg
JiYgdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSkKQEAgLTEyOTUsNyArMTI4MSw3IEBAIGlubGluZSBK
U1ZhbHVlIEpTT2JqZWN0OjpnZXQoRXhlY1N0YXRlKiAKIH0KIAogdGVtcGxhdGU8SlNPYmplY3Q6
OlB1dE1vZGUgbW9kZT4KLWlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFB1dFByb3BlcnR5U2xvdCYgc2xvdCwgSlNDZWxsKiBzcGVjaWZpY0Z1bmN0
aW9uKQoraW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgUHV0UHJvcGVydHlTbG90JiBzbG90KQogewogICAgIEFTU0VSVCh2YWx1ZSk7CiAgICAgQVNT
RVJUKHZhbHVlLmlzR2V0dGVyU2V0dGVyKCkgPT0gISEoYXR0cmlidXRlcyAmIEFjY2Vzc29yKSk7
CkBAIC0xMzA1LDI1ICsxMjkxLDE1IEBAIGlubGluZSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bnRlcm5hbCgKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2bSk7
CiAgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKICAgICAgICAgdW5zaWduZWQg
Y3VycmVudEF0dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogY3VycmVudFNwZWNpZmljRnVuY3Rp
b247Ci0gICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzLCBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbik7
CisgICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9w
ZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsKICAgICAgICAgaWYgKG9mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0KSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBjdXJyZW50bHkgYSBzcGVj
aWZpYyBmdW5jdGlvbiwgYW5kIHRoZXJlIG5vdyBlaXRoZXIgaXNuJ3QsCi0gICAgICAgICAgICAv
LyBvciB0aGUgbmV3IHZhbHVlIGlzIGRpZmZlcmVudCwgdGhlbiBkZXNwZWNpZnkuCi0gICAgICAg
ICAgICBpZiAoY3VycmVudFNwZWNpZmljRnVuY3Rpb24gJiYgKHNwZWNpZmljRnVuY3Rpb24gIT0g
Y3VycmVudFNwZWNpZmljRnVuY3Rpb24pKQotICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+ZGVz
cGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKHZtLCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICAgICAg
aWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYmIGN1cnJlbnRBdHRyaWJ1dGVzICYgUmVhZE9ubHkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBwdXREaXJlY3Qo
dm0sIG9mZnNldCwgdmFsdWUpOwotICAgICAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIG9i
amVjdHMgc3RydWN0dXJlIG9ubHkgaGFzIGEgc3BlY2lmaWMgdmFsdWUgc2V0IGlmIHByZXZpb3Vz
bHkgdGhlcmUKLSAgICAgICAgICAgIC8vIGhhZCBiZWVuIG9uZSBzZXQsIGFuZCBpZiB0aGUgbmV3
IHZhbHVlIGJlaW5nIHNwZWNpZmllZCBpcyB0aGUgc2FtZSAob3RoZXJ3aXNlIHdlIHdvdWxkCi0g
ICAgICAgICAgICAvLyBoYXZlIGRlc3BlY2lmaWVkLCBhYm92ZSkuICBTbywgaWYgY3VycmVudFNw
ZWNpZmljRnVuY3Rpb24gaXMgbm90IHNldCwgb3IgaWYgdGhlIG5ldwotICAgICAgICAgICAgLy8g
dmFsdWUgaXMgZGlmZmVyZW50IChvciB0aGVyZSBpcyBubyBuZXcgdmFsdWUpLCB0aGVuIHRoZSBz
bG90IG5vdyBoYXMgbm8gdmFsdWUgLSBhbmQKLSAgICAgICAgICAgIC8vIGFzIHN1Y2ggaXQgaXMg
Y2FjaGFibGUuCi0gICAgICAgICAgICAvLyBJZiB0aGVyZSB3YXMgcHJldmlvdXNseSBhIHZhbHVl
LCBhbmQgdGhlIG5ldyB2YWx1ZSBpcyB0aGUgc2FtZSwgdGhlbiB3ZSBjYW5ub3QgY2FjaGUuCi0g
ICAgICAgICAgICBpZiAoIWN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uIHx8IChzcGVjaWZpY0Z1bmN0
aW9uICE9IGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uKSkKLSAgICAgICAgICAgICAgICBzbG90LnNl
dEV4aXN0aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+
ZGlkUmVwbGFjZVByb3BlcnR5KG9mZnNldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNs
b3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KIApAQCAtMTMzNCwxNSArMTMxMCwxMyBAQCBpbmxpbmUgYm9vbCBK
U09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwoCiAgICAgICAgIEJ1dHRlcmZseSogbmV3QnV0dGVy
Zmx5ID0gYnV0dGVyZmx5KCk7CiAgICAgICAgIGlmICh0aGlzLT5zdHJ1Y3R1cmUoKS0+cHV0V2ls
bEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkpCiAgICAgICAgICAgICBuZXdCdXR0ZXJmbHkgPSBncm93
T3V0T2ZMaW5lU3RvcmFnZSh2bSwgdGhpcy0+c3RydWN0dXJlKCktPm91dE9mTGluZUNhcGFjaXR5
KCksIHRoaXMtPnN0cnVjdHVyZSgpLT5zdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNp
dHkoKSk7Ci0gICAgICAgIG9mZnNldCA9IHRoaXMtPnN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljRnVu
Y3Rpb24pOworICAgICAgICBvZmZzZXQgPSB0aGlzLT5zdHJ1Y3R1cmUoKS0+YWRkUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbih2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAg
c2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCB0aGlzLT5zdHJ1Y3R1cmUoKSwgbmV3QnV0dGVy
Zmx5KTsKIAogICAgICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgICAgICBBU1NFUlQo
dGhpcy0+c3RydWN0dXJlKCktPmlzVmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgICAgIHB1dERp
cmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgIC8vIFNlZSBjb21tZW50IG9uIHNldE5l
d1Byb3BlcnR5IGNhbGwgYmVsb3cuCi0gICAgICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAg
ICAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgc2xv
dC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogICAgICAgICBpZiAoYXR0cmlidXRlcyAm
IFJlYWRPbmx5KQogICAgICAgICAgICAgdGhpcy0+c3RydWN0dXJlKCktPnNldENvbnRhaW5zUmVh
ZE9ubHlQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTM1MCw3ICsxMzI0
LDcgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogCiAgICAgUHJv
cGVydHlPZmZzZXQgb2Zmc2V0OwogICAgIHNpemVfdCBjdXJyZW50Q2FwYWNpdHkgPSB0aGlzLT5z
dHJ1Y3R1cmUoKS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKLSAgICBpZiAoU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1
cmUodGhpcy0+c3RydWN0dXJlKCksIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNG
dW5jdGlvbiwgb2Zmc2V0KSkgeworICAgIGlmIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSh0aGlzLT5zdHJ1
Y3R1cmUoKSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKSB7CiAgICAgICAgIERl
ZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAgICAgQnV0dGVyZmx5KiBuZXdCdXR0ZXJmbHkg
PSBidXR0ZXJmbHkoKTsKICAgICAgICAgaWYgKGN1cnJlbnRDYXBhY2l0eSAhPSBzdHJ1Y3R1cmUt
Pm91dE9mTGluZUNhcGFjaXR5KCkpIHsKQEAgLTEzNjIsNDAgKzEzMzYsMTcgQEAgaW5saW5lIGJv
b2wgSlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKAogICAgICAgICBBU1NFUlQoc3RydWN0dXJl
LT5pc1ZhbGlkT2Zmc2V0KG9mZnNldCkpOwogICAgICAgICBzZXRTdHJ1Y3R1cmVBbmRCdXR0ZXJm
bHkodm0sIHN0cnVjdHVyZSwgbmV3QnV0dGVyZmx5KTsKICAgICAgICAgcHV0RGlyZWN0KHZtLCBv
ZmZzZXQsIHZhbHVlKTsKLSAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNp
dGlvbnMgd2l0aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCi0g
ICAgICAgIC8vIHNvIGxlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0gICAg
ICAgIGlmICghc3BlY2lmaWNGdW5jdGlvbikKLSAgICAgICAgICAgIHNsb3Quc2V0TmV3UHJvcGVy
dHkodGhpcywgb2Zmc2V0KTsKKyAgICAgICAgc2xvdC5zZXROZXdQcm9wZXJ0eSh0aGlzLCBvZmZz
ZXQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBjdXJyZW50
QXR0cmlidXRlczsKLSAgICBKU0NlbGwqIGN1cnJlbnRTcGVjaWZpY0Z1bmN0aW9uOwotICAgIG9m
ZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVz
LCBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbik7CisgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQo
dm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0dHJpYnV0ZXMpOwogICAgIGlmIChvZmZzZXQgIT0g
aW52YWxpZE9mZnNldCkgewogICAgICAgICBpZiAoKG1vZGUgPT0gUHV0TW9kZVB1dCkgJiYgY3Vy
cmVudEF0dHJpYnV0ZXMgJiBSZWFkT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICAvLyBUaGVyZSBhcmUgdGhyZWUgcG9zc2liaWxpdGllcyBoZXJlOgotICAgICAgICAv
LyAgKDEpIFRoZXJlIGlzIGFuIGV4aXN0aW5nIHNwZWNpZmljIHZhbHVlIHNldCwgYW5kIHdlJ3Jl
IG92ZXJ3cml0aW5nIHdpdGggKnRoZSBzYW1lIHZhbHVlKi4KLSAgICAgICAgLy8gICAgICAgKiBE
byBub3RoaW5nIC0gbm8gbmVlZCB0byBkZXNwZWNpZnksIGJ1dCB0aGF0IG1lYW5zIHdlIGNhbid0
IGNhY2hlIChhIGNhY2hlZAotICAgICAgICAvLyAgICAgICAgIHB1dCBjb3VsZCB3cml0ZSBhIGRp
ZmZlcmVudCB2YWx1ZSkuIExlYXZlIHRoZSBzbG90IGluIGFuIHVuY2FjaGFibGUgc3RhdGUuCi0g
ICAgICAgIC8vICAoMikgVGhlcmUgaXMgYSBzcGVjaWZpYyB2YWx1ZSBjdXJyZW50bHkgc2V0LCBi
dXQgd2UncmUgd3JpdGluZyBhIGRpZmZlcmVudCB2YWx1ZS4KLSAgICAgICAgLy8gICAgICAgKiBG
aXJzdCwgd2UgaGF2ZSB0byBkZXNwZWNpZnkuICBIYXZpbmcgZG9uZSBzbywgdGhpcyBpcyBub3cg
YSByZWd1bGFyIHNsb3QKLSAgICAgICAgLy8gICAgICAgICB3aXRoIG5vIHNwZWNpZmljIHZhbHVl
LCBzbyBnbyBhaGVhZCAmIGNhY2hlIGxpa2Ugbm9ybWFsLgotICAgICAgICAvLyAgKDMpIE5vcm1h
bCBjYXNlLCB0aGVyZSBpcyBubyBzcGVjaWZpYyB2YWx1ZSBzZXQuCi0gICAgICAgIC8vICAgICAg
ICogR28gYWhlYWQgJiBjYWNoZSBsaWtlIG5vcm1hbC4KLSAgICAgICAgaWYgKGN1cnJlbnRTcGVj
aWZpY0Z1bmN0aW9uKSB7Ci0gICAgICAgICAgICAvLyBjYXNlICgxKSBEbyB0aGUgcHV0LCB0aGVu
IHJldHVybiBsZWF2aW5nIHRoZSBzbG90IHVuY2FjaGFibGUuCi0gICAgICAgICAgICBpZiAoc3Bl
Y2lmaWNGdW5jdGlvbiA9PSBjdXJyZW50U3BlY2lmaWNGdW5jdGlvbikgewotICAgICAgICAgICAg
ICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0LCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBjYXNlICgyKSBEZXNwZWNpZnks
IGZhbGwgdGhyb3VnaCB0byAoMykuCi0gICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVj
dHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gY2FzZSAoMykgc2V0IHRoZSBzbG90LCBk
byB0aGUgcHV0LCByZXR1cm4uCisgICAgICAgIHN0cnVjdHVyZS0+ZGlkUmVwbGFjZVByb3BlcnR5
KG9mZnNldCk7CiAgICAgICAgIHNsb3Quc2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQp
OwogICAgICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTE0MDQsMTcgKzEzNTUsMTQgQEAgaW5saW5lIGJvb2wgSlNPYmplY3Q6OnB1dERp
cmVjdEludGVybmFsKAogICAgIGlmICgobW9kZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNFeHRlbnNp
YmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0
cmlidXRlcywgc3BlY2lmaWNGdW5jdGlvbiwgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSk7CisgICAg
c3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpKTsKICAg
ICAKICAgICB2YWxpZGF0ZU9mZnNldChvZmZzZXQpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlz
VmFsaWRPZmZzZXQob2Zmc2V0KSk7CiAgICAgc2V0U3RydWN0dXJlQW5kUmVhbGxvY2F0ZVN0b3Jh
Z2VJZk5lY2Vzc2FyeSh2bSwgc3RydWN0dXJlKTsKIAogICAgIHB1dERpcmVjdCh2bSwgb2Zmc2V0
LCB2YWx1ZSk7Ci0gICAgLy8gVGhpcyBpcyBhIG5ldyBwcm9wZXJ0eTsgdHJhbnNpdGlvbnMgd2l0
aCBzcGVjaWZpYyB2YWx1ZXMgYXJlIG5vdCBjdXJyZW50bHkgY2FjaGFibGUsCi0gICAgLy8gc28g
bGVhdmUgdGhlIHNsb3QgaW4gYW4gdW5jYWNoYWJsZSBzdGF0ZS4KLSAgICBpZiAoIXNwZWNpZmlj
RnVuY3Rpb24pCi0gICAgICAgIHNsb3Quc2V0TmV3UHJvcGVydHkodGhpcywgb2Zmc2V0KTsKKyAg
ICBzbG90LnNldE5ld1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAgICAgaWYgKGF0dHJpYnV0ZXMg
JiBSZWFkT25seSkKICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTQ0NywyMCArMTM5NSwyMCBAQCBpbmxpbmUg
Ym9vbCBKU09iamVjdDo6cHV0T3duRGF0YVByb3BlcnR5CiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICBB
U1NFUlQoIXN0cnVjdHVyZSgpLT5oYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkpOwogCi0gICAg
cmV0dXJuIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVQdXQ+KHZtLCBwcm9wZXJ0eU5hbWUsIHZh
bHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1ZSkpOworICAgIHJldHVybiBwdXRE
aXJlY3RJbnRlcm5hbDxQdXRNb2RlUHV0Pih2bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgMCwgc2xv
dCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQog
ewogICAgIEFTU0VSVCghdmFsdWUuaXNHZXR0ZXJTZXR0ZXIoKSAmJiAhKGF0dHJpYnV0ZXMgJiBB
Y2Nlc3NvcikpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KHRoaXMpOwotICAgIHB1dERpcmVj
dEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0sIHByb3BlcnR5TmFtZSwgdmFs
dWUsIGF0dHJpYnV0ZXMsIHNsb3QsIGdldENhbGxhYmxlT2JqZWN0KHZhbHVlKSk7CisgICAgcHV0
RGlyZWN0SW50ZXJuYWw8UHV0TW9kZURlZmluZU93blByb3BlcnR5Pih2bSwgcHJvcGVydHlOYW1l
LCB2YWx1ZSwgYXR0cmlidXRlcywgc2xvdCk7CiB9CiAKIGlubGluZSB2b2lkIEpTT2JqZWN0Ojpw
dXREaXJlY3QoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBKU1ZhbHVlIHZhbHVl
LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgQVNTRVJUKCF2YWx1ZS5pc0dldHRlclNl
dHRlcigpKTsKLSAgICBwdXREaXJlY3RJbnRlcm5hbDxQdXRNb2RlRGVmaW5lT3duUHJvcGVydHk+
KHZtLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCAwLCBzbG90LCBnZXRDYWxsYWJsZU9iamVjdCh2YWx1
ZSkpOworICAgIHB1dERpcmVjdEludGVybmFsPFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eT4odm0s
IHByb3BlcnR5TmFtZSwgdmFsdWUsIDAsIHNsb3QpOwogfQogCiBpbmxpbmUgdm9pZCBKU09iamVj
dDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBKU1ZhbHVlIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQpAQCAtMTQ3MCw3ICsx
NDE4LDcgQEAgaW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcgogICAgIEJ1
dHRlcmZseSogbmV3QnV0dGVyZmx5ID0gbV9idXR0ZXJmbHkuZ2V0KCk7CiAgICAgaWYgKHN0cnVj
dHVyZSgpLT5wdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKSkKICAgICAgICAgbmV3QnV0dGVy
Zmx5ID0gZ3Jvd091dE9mTGluZVN0b3JhZ2Uodm0sIHN0cnVjdHVyZSgpLT5vdXRPZkxpbmVDYXBh
Y2l0eSgpLCBzdHJ1Y3R1cmUoKS0+c3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5
KCkpOwotICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHN0cnVjdHVyZSgpLT5hZGRQcm9wZXJ0
eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIGdldENhbGxh
YmxlT2JqZWN0KHZhbHVlKSk7CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gc3RydWN0dXJl
KCktPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgYXR0cmli
dXRlcyk7CiAgICAgc2V0U3RydWN0dXJlQW5kQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUoKSwgbmV3
QnV0dGVyZmx5KTsKICAgICBwdXREaXJlY3Qodm0sIG9mZnNldCwgdmFsdWUpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5jcHAJKHJldmlzaW9uIDE3MDgy
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05OSw4ICs5OSwxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYWJzdHJhY3RBY2Nl
c3MoRXhlY1N0CiAgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9w
ZXJ0eSwgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgMCwgMCwgMCwgMCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotCi0gICAgICAgIG9wID0gUmVzb2x2ZU9w
KG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRo
LCBnbG9iYWxPYmplY3QtPnN0cnVjdHVyZSgpLCAwLCAwLCBzbG90LmNhY2hlZE9mZnNldCgpKTsK
KyAgICAgICAgCisgICAgICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZSA9IGdsb2JhbE9iamVjdC0+
c3RydWN0dXJlKCktPmVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0KGV4ZWMt
PnZtKCksIHNsb3QuY2FjaGVkT2Zmc2V0KCkpLT5zdGF0ZSgpOworICAgICAgICBpZiAoc3RhdGUg
PT0gSXNXYXRjaGVkICYmIGdldE9yUHV0ID09IFB1dCkgeworICAgICAgICAgICAgLy8gVGhlIGZp
ZWxkIGV4aXN0cywgYnV0IGJlY2F1c2UgdGhlIHJlcGxhY2VtZW50IHdhdGNocG9pbnQgaXMgc3Rp
bGwgaW50YWN0LiBUaGlzIGlzCisgICAgICAgICAgICAvLyBraW5kIG9mIGRhbmdlcm91cy4gV2Ug
aGF2ZSB0d28gb3B0aW9uczoKKyAgICAgICAgICAgIC8vIDEpIEludmFsaWRhdGUgdGhlIHdhdGNo
cG9pbnQgc2V0LiBUaGF0IHdvdWxkIHdvcmssIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBj
b2RlCisgICAgICAgICAgICAvLyAgICBwYXRoIG5ldmVyIGV4ZWN1dGVzIC0gaW4gd2hpY2ggY2Fz
ZSB0aGlzIHdvdWxkIGJlIHVud2lzZS4KKyAgICAgICAgICAgIC8vIDIpIEhhdmUgdGhlIGludmFs
aWRhdGlvbiBoYXBwZW4gYXQgcnVuLXRpbWUuIEFsbCB3ZSBoYXZlIHRvIGRvIGlzIGxlYXZlIHRo
ZSBjb2RlCisgICAgICAgICAgICAvLyAgICB1bmNhY2hlZC4gVGhlIG9ubHkgZG93bnNpZGUgaXMg
c2xpZ2h0bHkgbW9yZSB3b3JrIHdoZW4gdGhpcyBkb2VzIGV4ZWN1dGUuCisgICAgICAgICAgICAv
LyBXZSBnbyB3aXRoIG9wdGlvbiAoMikgaGVyZSBiZWNhdXNlIGl0IHNlZW1zIGxlc3MgZXZpbC4K
KyAgICAgICAgICAgIG9wID0gUmVzb2x2ZU9wKG1ha2VUeXBlKEdsb2JhbFByb3BlcnR5LCBuZWVk
c1ZhckluamVjdGlvbkNoZWNrcyksIGRlcHRoLCAwLCAwLCAwLCAwKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBvcCA9IFJlc29sdmVPcChtYWtlVHlwZShHbG9iYWxQcm9wZXJ0eSwgbmVl
ZHNWYXJJbmplY3Rpb25DaGVja3MpLCBkZXB0aCwgZ2xvYmFsT2JqZWN0LT5zdHJ1Y3R1cmUoKSwg
MCwgMCwgc2xvdC5jYWNoZWRPZmZzZXQoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oCShyZXZpc2lvbiAxNzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAw
NCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzYsMTMgKzc2LDExIEBAIHN0cnVjdCBQ
cm9wZXJ0eU1hcEVudHJ5IHsKICAgICBTdHJpbmdJbXBsKiBrZXk7CiAgICAgUHJvcGVydHlPZmZz
ZXQgb2Zmc2V0OwogICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7Ci0gICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gc3BlY2lmaWNWYWx1ZTsKIAotICAgIFByb3BlcnR5TWFwRW50cnkoVk0mIHZtLCBKU0Nl
bGwqIG93bmVyLCBTdHJpbmdJbXBsKiBrZXksIFByb3BlcnR5T2Zmc2V0IG9mZnNldCwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKQorICAgIFByb3BlcnR5TWFwRW50
cnkoU3RyaW5nSW1wbCoga2V5LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMpCiAgICAgICAgIDoga2V5KGtleSkKICAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAg
ICAgICAsIGF0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAgICAgLCBzcGVjaWZpY1ZhbHVlKHZt
LCBvd25lciwgc3BlY2lmaWNWYWx1ZSwgV3JpdGVCYXJyaWVyPEpTQ2VsbD46Ok1heUJlTnVsbCkK
ICAgICB7CiAgICAgfQogfTsKQEAgLTE0MSw4ICsxMzksNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJ
bmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCi0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCiAgICAgdHlw
ZWRlZiBTdHJpbmdJbXBsKiBLZXlUeXBlOwogICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBW
YWx1ZVR5cGU7CiAKQEAgLTE1Nyw4ICsxNTMsOCBAQCBwdWJsaWM6CiAKICAgICAvLyBDb25zdHJ1
Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlhbCBjYXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNv
cHksIG9yIGJvdGguCiAgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNyZWF0ZShWTSYsIHVuc2ln
bmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKFZN
JiwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwotICAgIHN0YXRpYyBQcm9w
ZXJ0eVRhYmxlKiBjbG9uZShWTSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBj
bG9uZShWTSYsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJs
ZSogY2xvbmUoVk0mLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmKTsKICAgICB+UHJvcGVydHlUYWJsZSgpOwogCiAgICAgLy8gT3JkZXJlZCBpdGVyYXRpb24g
bWV0aG9kcy4KQEAgLTE5Niw3ICsxOTIsNyBAQCBwdWJsaWM6CiAgICAgUHJvcGVydHlPZmZzZXQg
bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0eSk7CiAKICAgICAvLyBDb3B5
IHRoaXMgUHJvcGVydHlUYWJsZSwgZW5zdXJpbmcgdGhlIGNvcHkgaGFzIGF0IGxlYXN0IHRoZSBj
YXBhY2l0eSBwcm92aWRlZC4KLSAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5KFZNJiwgSlNDZWxsKiBv
d25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHkoVk0m
LCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IHNp
emVJbk1lbW9yeSgpOwpAQCAtMjA0LDEyICsyMDAsMTIgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
b3RlY3RlZDoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVy
cmlkZXNWaXNpdENoaWxkcmVuIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsOwogCiBwcml2
YXRlOgogICAgIFByb3BlcnR5VGFibGUoVk0mLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwot
ICAgIFByb3BlcnR5VGFibGUoVk0mLCBKU0NlbGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0g
ICAgUHJvcGVydHlUYWJsZShWTSYsIEpTQ2VsbCosIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwg
Y29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUoVk0mLCBjb25zdCBQcm9w
ZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJsZShWTSYsIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwogCiAgICAgUHJvcGVydHlUYWJsZShjb25zdCBQ
cm9wZXJ0eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3Qg
dG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0byBiZSBhdmFp
bGFibGUuCkBAIC00OTQsMTUgKzQ5MCwxNSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgUHJvcGVy
dHlUYWJsZTo6bmV4CiAgICAgcmV0dXJuIG9mZnNldEZvclByb3BlcnR5TnVtYmVyKHNpemUoKSwg
aW5saW5lQ2FwYWNpdHkpOwogfQogCi1pbmxpbmUgUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJs
ZTo6Y29weShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KQoraW5s
aW5lIFByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNvcHkoVk0mIHZtLCB1bnNpZ25lZCBu
ZXdDYXBhY2l0eSkKIHsKICAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9rZXlDb3VudCk7CiAK
ICAgICAvLyBGYXN0IGNhc2U7IGlmIHRoZSBuZXcgdGFibGUgd2lsbCBiZSB0aGUgc2FtZSBtX2lu
ZGV4U2l6ZSBhcyB0aGlzIG9uZSwgd2UgY2FuIG1lbWNweSBpdCwKICAgICAvLyBzYXZlIHJlaGFz
aGluZyBhbGwga2V5cy4KICAgICBpZiAoc2l6ZUZvckNhcGFjaXR5KG5ld0NhcGFjaXR5KSA9PSBt
X2luZGV4U2l6ZSkKLSAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBvd25l
ciwgKnRoaXMpOwotICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsIG5l
d0NhcGFjaXR5LCAqdGhpcyk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2
bSwgKnRoaXMpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgbmV3Q2FwYWNp
dHksICp0aGlzKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCShyZXZpc2lvbiAxNzA4MjEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDE2IEBAIFByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6
OmNyZWF0ZShWTSYKICAgICByZXR1cm4gdGFibGU7CiB9CiAKLVByb3BlcnR5VGFibGUqIFByb3Bl
cnR5VGFibGU6OmNsb25lKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJs
ZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShWTSYgdm0sIGNv
bnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQogewotICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3Bl
cnR5VGFibGUodm0sIG93bmVyLCBvdGhlcik7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVy
dHlUYWJsZSh2bSwgb3RoZXIpOwogICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
cmV0dXJuIHRhYmxlOwogfQogCi1Qcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShW
TSYgdm0sIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJv
cGVydHlUYWJsZSYgb3RoZXIpCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShW
TSYgdm0sIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3Ro
ZXIpCiB7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRl
Q2VsbDxQcm9wZXJ0eVRhYmxlPih2bS5oZWFwKSkgUHJvcGVydHlUYWJsZSh2bSwgb3duZXIsIGlu
aXRpYWxDYXBhY2l0eSwgb3RoZXIpOworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChO
b3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4odm0uaGVhcCkpIFByb3BlcnR5VGFi
bGUodm0sIGluaXRpYWxDYXBhY2l0eSwgb3RoZXIpOwogICAgIHRhYmxlLT5maW5pc2hDcmVhdGlv
bih2bSk7CiAgICAgcmV0dXJuIHRhYmxlOwogfQpAQCAtNjksNyArNjksNyBAQCBQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgdW5zCiAgICAgQVNTRVJUKGlzUG93ZXJPZjIobV9p
bmRleFNpemUpKTsKIH0KIAotUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlUYWJsZShWTSYgdm0sIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQogICAgIDog
SlNDZWxsKHZtLCB2bS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9pbmRl
eFNpemUob3RoZXIubV9pbmRleFNpemUpCiAgICAgLCBtX2luZGV4TWFzayhvdGhlci5tX2luZGV4
TWFzaykKQEAgLTgyLDEwICs4Miw4IEBAIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0m
IHZtLCBKU0MKICAgICBtZW1jcHkobV9pbmRleCwgb3RoZXIubV9pbmRleCwgZGF0YVNpemUoKSk7
CiAKICAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0
ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgZm9yIChpdGVyYXRvciBp
dGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikKICAgICAgICAgaXRlci0+a2V5LT5y
ZWYoKTsKLSAgICAgICAgdm0uaGVhcC53cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmlj
VmFsdWUuZ2V0KCkpOwotICAgIH0KIAogICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMg
dmVjdG9yLgogICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMg
PSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOwpAQCAtOTMsNyArOTEsNyBAQCBQcm9wZXJ0
eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDCiAgICAgICAgIG1fZGVsZXRlZE9mZnNl
dHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Pigqb3RoZXJEZWxldGVkT2Zm
c2V0cykpOwogfQogCi1Qcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBv
dGhlcikKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoVk0mIHZtLCB1bnNpZ25lZCBpbml0
aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQogICAgIDogSlNDZWxsKHZt
LCB2bS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV9pbmRleFNpemUoc2l6
ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCiAgICAgLCBtX2luZGV4TWFzayhtX2luZGV4
U2l6ZSAtIDEpCkBAIC0xMDksNyArMTA3LDYgQEAgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJs
ZShWTSYgdm0sIEpTQwogICAgICAgICBBU1NFUlQoY2FuSW5zZXJ0KCkpOwogICAgICAgICByZWlu
c2VydCgqaXRlcik7CiAgICAgICAgIGl0ZXItPmtleS0+cmVmKCk7Ci0gICAgICAgIHZtLmhlYXAu
d3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKICAgICB9CiAK
ICAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KQEAgLTEzMiwxNyArMTI5
LDQgQEAgUHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKQogICAgIGZhc3RGcmVlKG1faW5k
ZXgpOwogfQogCi12b2lkIFByb3BlcnR5VGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsKLSAgICBQcm9wZXJ0eVRhYmxlKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lO
SEVSSVRTKHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7Ci0KLSAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0KLSAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsr
cHRyKQotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zcGVjaWZpY1ZhbHVlKTsKLX0KLQog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAxNzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOCwgMjAwOSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xNzMsNyArMTcz
LDYgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iagogICAgIHNldEhh
c1JlYWRPbmx5T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8oY2xhc3NJbmZv
LT5oYXNTdGF0aWNTZXR0ZXJPclJlYWRvbmx5UHJvcGVydGllcyh2bSkpOwogICAgIHNldEhhc05v
bkVudW1lcmFibGVQcm9wZXJ0aWVzKGZhbHNlKTsKICAgICBzZXRBdHRyaWJ1dGVzSW5QcmV2aW91
cygwKTsKLSAgICBzZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoMCk7CiAgICAgc2V0UHJl
dmVudEV4dGVuc2lvbnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAg
IHNldFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQoZmFsc2UpOwpAQCAtMjAzLDcgKzIwMiw2IEBAIFN0
cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKG1fY2xhc3NJbmZvLT5oYXNTdGF0aWNTZXR0ZXJP
clJlYWRvbmx5UHJvcGVydGllcyh2bSkpOwogICAgIHNldEhhc05vbkVudW1lcmFibGVQcm9wZXJ0
aWVzKGZhbHNlKTsKICAgICBzZXRBdHRyaWJ1dGVzSW5QcmV2aW91cygwKTsKLSAgICBzZXRTcGVj
aWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoMCk7CiAgICAgc2V0UHJldmVudEV4dGVuc2lvbnMoZmFs
c2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFN0YXRpY0Z1bmN0aW9u
c1JlaWZpZWQoZmFsc2UpOwpAQCAtMjMyLDcgKzIzMCw2IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJl
KFZNJiB2bSwgY29uc3QgU3RydWMKICAgICBzZXRIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJv
cGVydGllc0V4Y2x1ZGluZ1Byb3RvKHByZXZpb3VzLT5oYXNSZWFkT25seU9yR2V0dGVyU2V0dGVy
UHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvKCkpOwogICAgIHNldEhhc05vbkVudW1lcmFibGVQcm9w
ZXJ0aWVzKHByZXZpb3VzLT5oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcygpKTsKICAgICBzZXRB
dHRyaWJ1dGVzSW5QcmV2aW91cygwKTsKLSAgICBzZXRTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291
bnQocHJldmlvdXMtPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCgpKTsKICAgICBzZXRQcmV2
ZW50RXh0ZW5zaW9ucyhwcmV2aW91cy0+cHJldmVudEV4dGVuc2lvbnMoKSk7CiAgICAgc2V0RGlk
VHJhbnNpdGlvbih0cnVlKTsKICAgICBzZXRTdGF0aWNGdW5jdGlvbnNSZWlmaWVkKHByZXZpb3Vz
LT5zdGF0aWNGdW5jdGlvbnNSZWlmaWVkKCkpOwpAQCAtMzAwLDcgKzI5Nyw3IEBAIHZvaWQgU3Ry
dWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKFYKICAgICBmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKICAgICAK
ICAgICBpZiAodGFibGUpIHsKLSAgICAgICAgdGFibGUgPSB0YWJsZS0+Y29weSh2bSwgc3RydWN0
dXJlLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0
eSkpOworICAgICAgICB0YWJsZSA9IHRhYmxlLT5jb3B5KHZtLCBudW1iZXJPZlNsb3RzRm9yTGFz
dE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogICAgICAgICBzdHJ1Y3R1cmUt
Pm1fbG9jay51bmxvY2soKTsKICAgICB9CiAgICAgCkBAIC0zMTcsNyArMzE0LDcgQEAgdm9pZCBT
dHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoVgogICAgICAgICBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmVzW2ldOwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cykK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHZt
LCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9v
ZmZzZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSwgc3RydWN0dXJlLT5tX3Nw
ZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKTsKKyAgICAgICAgUHJvcGVydHlNYXBFbnRyeSBl
bnRyeShzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMuZ2V0KCksIHN0cnVjdHVyZS0+bV9vZmZz
ZXQsIHN0cnVjdHVyZS0+YXR0cmlidXRlc0luUHJldmlvdXMoKSk7CiAgICAgICAgIHByb3BlcnR5
VGFibGUoKS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZz
ZXRNdXN0Tm90Q2hhbmdlKTsKICAgICB9CiAgICAgCkBAIC0zMzYsMzAgKzMzMywxMiBAQCBzaXpl
X3QgU3RydWN0dXJlOjpzdWdnZXN0ZWROZXdPdXRPZkxpbmVTCiAgICAgcmV0dXJuIG5leHRPdXRP
ZkxpbmVTdG9yYWdlQ2FwYWNpdHkob3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CiB9CiAgCi12b2lkIFN0
cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKLXsKLSAgICBTdHJpbmdJbXBsKiByZXAgPSBwcm9wZXJ0eU5hbWUudWlk
KCk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLQotICAgIEFTU0VSVChpc0RpY3Rpb25h
cnkoKSk7Ci0gICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7Ci0KLSAgICBQcm9wZXJ0eU1hcEVu
dHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUoKS0+Z2V0KHJlcCk7Ci0gICAgQVNTRVJUKGVudHJ5
KTsKLSAgICBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwotfQotCi1TdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywg
SlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQorU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBs
KFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCiB7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlz
RGljdGlvbmFyeSgpKTsKICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKIAogICAg
IGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uVGFibGUuZ2V0KHVpZCwgYXR0cmlidXRlcykpIHsKLSAgICAgICAgSlNDZWxsKiBzcGVjaWZp
Y1ZhbHVlSW5QcmV2aW91cyA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5Q
cmV2aW91cy5nZXQoKTsKLSAgICAgICAgaWYgKHNwZWNpZmljVmFsdWVJblByZXZpb3VzICYmIHNw
ZWNpZmljVmFsdWVJblByZXZpb3VzICE9IHNwZWNpZmljVmFsdWUpCi0gICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgdmFsaWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT5tX29mZnNl
dCwgZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAgb2Zmc2V0
ID0gZXhpc3RpbmdUcmFuc2l0aW9uLT5tX29mZnNldDsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5n
VHJhbnNpdGlvbjsKQEAgLTM2OCwxNiArMzQ3LDE2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVRyYW5zaXQKICAgICByZXR1cm4gMDsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK1N0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlKFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIEFTU0VSVCghaXNDb21w
aWxhdGlvblRocmVhZCgpKTsKLSAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUsIG9mZnNldCk7CisgICAgcmV0dXJuIGFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLnVpZCgp
LCBhdHRyaWJ1dGVzLCBvZmZzZXQpOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwq
IHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCitTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRs
eShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQogewogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsKLSAgICByZXR1cm4gYWRkUHJvcGVydHlUcmFuc2l0
aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUltcGwoc3RydWN0dXJlLCB1aWQsIGF0dHJpYnV0ZXMsIHNw
ZWNpZmljVmFsdWUsIG9mZnNldCk7CisgICAgcmV0dXJuIGFkZFByb3BlcnR5VHJhbnNpdGlvblRv
RXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKHN0cnVjdHVyZSwgdWlkLCBhdHRyaWJ1dGVzLCBvZmZzZXQp
OwogfQogCiBib29sIFN0cnVjdHVyZTo6YW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdEluZGV4
ZWRBY2Nlc3NlcygpIGNvbnN0CkBAIC00MzIsMjUgKzQxMSwxMiBAQCBOb25Qcm9wZXJ0eVRyYW5z
aXRpb24gU3RydWN0dXJlOjpzdWdnZXN0CiAgICAgcmV0dXJuIEFsbG9jYXRlQXJyYXlTdG9yYWdl
OwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZzZXQmIG9m
ZnNldCwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0IGNvbnRleHQpCitTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5
T2Zmc2V0JiBvZmZzZXQsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCBjb250ZXh0KQogewotICAg
IC8vIElmIHdlIGhhdmUgYSBzcGVjaWZpYyBmdW5jdGlvbiwgd2UgbWF5IGhhdmUgZ290IHRvIHRo
aXMgcG9pbnQgaWYgdGhlcmUgaXMKLSAgICAvLyBhbHJlYWR5IGEgdHJhbnNpdGlvbiB3aXRoIHRo
ZSBjb3JyZWN0IHByb3BlcnR5IG5hbWUgYW5kIGF0dHJpYnV0ZXMsIGJ1dAotICAgIC8vIHNwZWNp
YWxpemVkIHRvIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiAgSW4gdGhpcyBjYXNlIHdlIGp1c3Qgd2Fu
dCB0byBnaXZlIHVwCi0gICAgLy8gYW5kIGRlc3BlY2lhbGl6ZSB0aGUgdHJhbnNpdGlvbi4KLSAg
ICAvLyBJbiB0aGlzIGNhc2Ugd2UgY2xlYXIgdGhlIHZhbHVlIG9mIHNwZWNpZmljRnVuY3Rpb24g
d2hpY2ggd2lsbCByZXN1bHQKLSAgICAvLyBpbiB1cyBhZGRpbmcgYSBub24tc3BlY2lmaWMgdHJh
bnNpdGlvbiwgYW5kIGFueSBzdWJzZXF1ZW50IGxvb2t1cCBpbgotICAgIC8vIFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZSB3aWxsIGp1c3QgdXNlIHRo
YXQuCi0gICAgaWYgKHNwZWNpZmljVmFsdWUgJiYgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJs
ZS5jb250YWlucyhwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMpKQotICAgICAgICBzcGVj
aWZpY1ZhbHVlID0gMDsKLQogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSk7
CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7Ci0gICAgQVNTRVJUKCFTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoc3RydWN0dXJlLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUsIG9mZnNldCkpOworICAgIEFT
U0VSVCghU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJl
KHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQpKTsKICAgICAKLSAg
ICBpZiAoc3RydWN0dXJlLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSA9PSBtYXhTcGVj
aWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotCiAg
ICAgaW50IG1heFRyYW5zaXRpb25MZW5ndGg7CiAgICAgaWYgKGNvbnRleHQgPT0gUHV0UHJvcGVy
dHlTbG90OjpQdXRCeUlkKQogICAgICAgICBtYXhUcmFuc2l0aW9uTGVuZ3RoID0gc19tYXhUcmFu
c2l0aW9uTGVuZ3RoRm9yTm9uRXZhbFB1dEJ5SWQ7CkBAIC00NTksNyArNDI1LDcgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdAogICAgIGlmIChzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25Db3VudCgpID4gbWF4VHJhbnNpdGlvbkxlbmd0aCkgewogICAgICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOwotICAgICAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5wdXRTcGVjaWZpY1ZhbHVlKHZtLCBwcm9wZXJ0eU5hbWUs
IGF0dHJpYnV0ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9u
LT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIHJldHVybiB0cmFu
c2l0aW9uOwogICAgIH0KICAgICAKQEAgLTQ2OSwxMSArNDM1LDEwIEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICB0cmFuc2l0aW9uLT5zZXRQcmV2aW91c0lE
KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUpOwogICAgIHRyYW5zaXRpb24tPm1fbmFtZUluUHJl
dmlvdXMgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAgICAgdHJhbnNpdGlvbi0+c2V0QXR0cmlidXRl
c0luUHJldmlvdXMoYXR0cmlidXRlcyk7Ci0gICAgdHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVl
SW5QcmV2aW91cy5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRpb24sIHNwZWNpZmljVmFsdWUpOwot
ICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVj
dHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0sIHRyYW5zaXRpb24pKTsK
KyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1
Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNp
dGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogCi0gICAgb2Zmc2V0ID0gdHJh
bnNpdGlvbi0+cHV0U3BlY2lmaWNWYWx1ZSh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBz
cGVjaWZpY1ZhbHVlKTsKKyAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcyk7CiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29mZnNl
dCwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewpAQCAtNTA1LDcgKzQ3MCw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmEKIAogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
ICAgICB0cmFuc2l0aW9uLT5waW4oKTsKIApAQCAtNTEzLDMwICs0NzgsNiBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9
CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24oVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHJlcGxhY2VGdW5jdGlvbikK
LXsKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSA8
IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCk7Ci0gICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgdHJhbnNpdGlvbi0+c2V0U3BlY2lm
aWNGdW5jdGlvblRocmFzaENvdW50KHRyYW5zaXRpb24tPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hD
b3VudCgpICsgMSk7Ci0KLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgc3RydWN0
dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7Ci0gICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwotICAgIHRyYW5zaXRpb24t
PnBpbigpOwotCi0gICAgaWYgKHRyYW5zaXRpb24tPnNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3Vu
dCgpID09IG1heFNwZWNpZmljRnVuY3Rpb25UaHJhc2hDb3VudCkKLSAgICAgICAgdHJhbnNpdGlv
bi0+ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKHZtKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYm9vbCBy
ZW1vdmVkID0gdHJhbnNpdGlvbi0+ZGVzcGVjaWZ5RnVuY3Rpb24odm0sIHJlcGxhY2VGdW5jdGlv
bik7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQocmVtb3ZlZCwgcmVtb3ZlZCk7Ci0gICAgfQotCi0g
ICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgIHJldHVybiB0cmFu
c2l0aW9uOwotfQotCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNp
dGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFw
KTsKQEAgLTU0NCw3ICs0ODUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hh
bmdlVHJhCiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0
dXJlKTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vz
c2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5z
ZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KHZtLCB0cmFuc2l0aW9uKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5z
ZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KHZtKSk7CiAgICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNl
dDsKICAgICAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgICAgIApAQCAtNTY4LDcgKzUwOSw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2kKIAogICAgIERlZmVy
R0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeSh2bSwgZGVmZXJHQyk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcodm0sIHRyYW5zaXRpb24pKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCku
c2V0KHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSkpOwogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsK
ICAgICB0cmFuc2l0aW9uLT5zZXREaWN0aW9uYXJ5S2luZChraW5kKTsKICAgICB0cmFuc2l0aW9u
LT5waW4oKTsKQEAgLTYzMSw3ICs1NzIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVu
dEV4dGVuc2lvbnNUCiAKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgc3RydWN0
dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAg
IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQodm0sIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtLCB0cmFuc2l0aW9uKSk7CisgICAgdHJh
bnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNl
dCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJldmVudEV4dGVu
c2lvbnModHJ1ZSk7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC02NDAsMTMgKzU4MSwxMyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUCiAgICAgcmV0dXJuIHRy
YW5zaXRpb247CiB9CiAKLVByb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGFi
bGVPckNsb25lSWZQaW5uZWQoVk0mIHZtLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJs
ZSogU3RydWN0dXJlOjp0YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZChWTSYgdm0pCiB7
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIG1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcodm0sIGRlZmVyR0MpOwogICAgIAogICAgIGlmIChpc1Bp
bm5lZFByb3BlcnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+Y29w
eSh2bSwgb3duZXIsIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7CisgICAgICAgIHJldHVy
biBwcm9wZXJ0eVRhYmxlKCktPmNvcHkodm0sIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSk7
CiAgICAgCiAgICAgLy8gSG9sZCB0aGUgbG9jayB3aGlsZSBzdGVhbGluZyB0aGUgdGFibGUgLSBz
byB0aGF0IGdldENvbmN1cnJlbnRseSgpIG9uIGFub3RoZXIgdGhyZWFkCiAgICAgLy8gd2lsbCBl
aXRoZXIgaGF2ZSB0byBieXBhc3MgdGhpcyBzdHJ1Y3R1cmUsIG9yIHdpbGwgZ2V0IHRvIHVzZSB0
aGUgcHJvcGVydHkgdGFibGUKQEAgLTY4Miw3ICs2MjMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJldmlvdXNJRCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlKTsKICAgICB0cmFuc2l0aW9uLT5zZXRBdHRyaWJ1dGVzSW5Q
cmV2aW91cyhhdHRyaWJ1dGVzKTsKICAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdU
eXBlKGluZGV4aW5nVHlwZSk7Ci0gICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldCh2
bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5l
ZCh2bSwgdHJhbnNpdGlvbikpOworICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQo
dm0sIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5u
ZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7
CiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRpb24tPmlubGlu
ZUNhcGFjaXR5KCkpOwogICAgIApAQCAtNzczLDE5ICs3MTQsMTYgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5UwogICAgIHJldHVybiB0aGlzOwogfQogCi1Qcm9wZXJ0
eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNw
ZWNpZmljVmFsdWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5V2l0aG91
dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKQogewogICAgIEFTU0VSVCghZW51bWVyYXRpb25DYWNoZSgpKTsKIAotICAgIGlm
IChzcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQoKSA9PSBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhy
YXNoQ291bnQpCi0gICAgICAgIHNwZWNpZmljVmFsdWUgPSAwOwotCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBp
bm5pbmcodm0sIGRlZmVyR0MpOwogICAgIAogICAgIHBpbigpOwogCi0gICAgcmV0dXJuIHB1dFNw
ZWNpZmljVmFsdWUodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSk7
CisgICAgcmV0dXJuIGFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKIH0KIAogUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTgxMiwxMSArNzUwLDU3IEBAIHZv
aWQgU3RydWN0dXJlOjphbGxvY2F0ZVJhcmVEYXRhKFZNJiB2bSkKIHsKICAgICBBU1NFUlQoIWhh
c1JhcmVEYXRhKCkpOwogICAgIFN0cnVjdHVyZVJhcmVEYXRhKiByYXJlRGF0YSA9IFN0cnVjdHVy
ZVJhcmVEYXRhOjpjcmVhdGUodm0sIHByZXZpb3VzKCkpOworICAgIFdURjo6c3RvcmVTdG9yZUZl
bmNlKCk7CiAgICAgbV9wcmV2aW91c09yUmFyZURhdGEuc2V0KHZtLCB0aGlzLCByYXJlRGF0YSk7
CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICBzZXRIYXNSYXJlRGF0YSh0cnVlKTsK
ICAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CiB9CiAKK1dhdGNocG9pbnRTZXQqIFN0cnVjdHVy
ZTo6ZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoVk0mIHZtLCBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCit7CisgICAgQVNTRVJUKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KTsKKyAgICAKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIGFsbG9jYXRlUmFyZURh
dGEodm0pOworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fbG9jayk7CisgICAgU3Ry
dWN0dXJlUmFyZURhdGEqIHJhcmVEYXRhID0gdGhpcy0+cmFyZURhdGEoKTsKKyAgICBpZiAoIXJh
cmVEYXRhLT5tX3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMpIHsKKyAgICAgICAgcmFyZURhdGEt
Pm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cyA9CisgICAgICAgICAgICBzdGQ6Om1ha2VfdW5p
cXVlPFN0cnVjdHVyZVJhcmVEYXRhOjpQcm9wZXJ0eVdhdGNocG9pbnRNYXA+KCk7CisgICAgICAg
IFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgfQorICAgIGF1dG8gcmVzdWx0ID0gcmFyZURh
dGEtPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0cy0+YWRkKG9mZnNldCwgbnVsbHB0cik7Cisg
ICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
ID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoSXNXYXRjaGVkKSk7CisgICAgcmV0dXJuIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCk7Cit9CisKK3ZvaWQgU3RydWN0dXJlOjpzdGFydFdh
dGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHMoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQoreworICAgIEFTU0VSVCghaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAg
CisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gZ2V0KHZtLCBwcm9wZXJ0eU5hbWUpOworICAg
IGlmICghSlNDOjppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JSZXBsYWNlbWVudHModm0sIG9mZnNldCk7Cit9
CisKK3ZvaWQgU3RydWN0dXJlOjpkaWRDYWNoZVByb3BlcnR5UmVwbGFjZW1lbnQoVk0mIHZtLCBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7CisgICAgZW5zdXJlUHJvcGVydHlSZXBsYWNlbWVudFdh
dGNocG9pbnRTZXQodm0sIG9mZnNldCktPmZpcmVBbGwoIkRpZCBjYWNoZSBwcm9wZXJ0eSByZXBs
YWNlbWVudCIpOworfQorCit2b2lkIFN0cnVjdHVyZTo6c3RhcnRXYXRjaGluZ0ludGVybmFsUHJv
cGVydGllcyhWTSYgdm0pCit7CisgICAgaWYgKCFpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7
CisgICAgICAgIHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyh2bSwgdm0ucHJv
cGVydHlOYW1lcy0+dG9TdHJpbmcpOworICAgICAgICBzdGFydFdhdGNoaW5nUHJvcGVydHlGb3JS
ZXBsYWNlbWVudHModm0sIHZtLnByb3BlcnR5TmFtZXMtPnZhbHVlT2YpOworICAgIH0KKyAgICBz
ZXREaWRXYXRjaEludGVybmFsUHJvcGVydGllcyh0cnVlKTsKK30KKwogI2lmIERVTVBfUFJPUEVS
VFlNQVBfU1RBVFMKIAogc3RydWN0IFByb3BlcnR5TWFwU3RhdGlzdGljc0V4aXRMb2dnZXIgewpA
QCAtODQ1LDIxICs4MjksMjEgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3Rl
bmN5KAogCiAjZW5kaWYKIAotUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlU
YWJsZShWTSYgdm0sIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6
OmNvcHlQcm9wZXJ0eVRhYmxlKFZNJiB2bSkKIHsKICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25lKHZtLCBv
d25lciwgKnByb3BlcnR5VGFibGUoKS5nZXQoKSk7CisgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6
OmNsb25lKHZtLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKIH0KIAotUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0mIHZtLCBTdHJ1Y3R1cmUq
IG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcoVk0mIHZtKQogewogICAgIGlmIChwcm9wZXJ0eVRhYmxlKCkpCi0gICAgICAgIHJldHVy
biBQcm9wZXJ0eVRhYmxlOjpjbG9uZSh2bSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkp
OworICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUodm0sICpwcm9wZXJ0eVRhYmxl
KCkuZ2V0KCkpOwogICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUodm0sIG51bWJlck9m
U2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKLVBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkKK1Byb3Bl
cnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiwgU3RyaW5nSW1wbCogdWlk
LCB1bnNpZ25lZCYgYXR0cmlidXRlcykKIHsKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3Ry
dWN0dXJlczsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKQEAgLTg3MSw3ICs4NTUsNiBAQCBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRsCiAgICAgICAgIFByb3BlcnR5
TWFwRW50cnkqIGVudHJ5ID0gdGFibGUtPmdldCh1aWQpOwogICAgICAgICBpZiAoZW50cnkpIHsK
ICAgICAgICAgICAgIGF0dHJpYnV0ZXMgPSBlbnRyeS0+YXR0cmlidXRlczsKLSAgICAgICAgICAg
IHNwZWNpZmljVmFsdWUgPSBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5nZXQoKTsKICAgICAgICAgICAg
IFByb3BlcnR5T2Zmc2V0IHJlc3VsdCA9IGVudHJ5LT5vZmZzZXQ7CiAgICAgICAgICAgICBzdHJ1
Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC04
ODUsMTQgKzg2OCwxMyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldENvbmN1cnJlbnRs
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIGF0dHJpYnV0ZXMgPSBz
dHJ1Y3R1cmUtPmF0dHJpYnV0ZXNJblByZXZpb3VzKCk7Ci0gICAgICAgIHNwZWNpZmljVmFsdWUg
PSBzdHJ1Y3R1cmUtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMuZ2V0KCk7CiAgICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIH0KICAgICAKICAgICByZXR1cm4gaW52YWxp
ZE9mZnNldDsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoVk0mIHZtLCBQcm9w
ZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3Bl
Y2lmaWNWYWx1ZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJU
KCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gaW5mbygpKTsKQEAgLTkwNyw0MiArODg5LDE1IEBAIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6Z2V0KFZNJiB2bSwgUHIKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAK
ICAgICBhdHRyaWJ1dGVzID0gZW50cnktPmF0dHJpYnV0ZXM7Ci0gICAgc3BlY2lmaWNWYWx1ZSA9
IGVudHJ5LT5zcGVjaWZpY1ZhbHVlLmdldCgpOwogICAgIHJldHVybiBlbnRyeS0+b2Zmc2V0Owog
fQogCi1ib29sIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24oVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lKQotewotICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKLSAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nhcnkodm0sIGRlZmVyR0MpOwotICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBQcm9wZXJ0eU1h
cEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUoKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7
Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQVNTRVJUKGVu
dHJ5LT5zcGVjaWZpY1ZhbHVlKTsKLSAgICBlbnRyeS0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5QWxsRnVuY3Rp
b25zKFZNJiB2bSkKLXsKLSAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7Ci0gICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KHZtLCBkZWZlckdDKTsKLSAgICBpZiAoIXByb3Bl
cnR5VGFibGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6
Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpCi0gICAgICAgIGl0ZXItPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKLX0KLQotUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1ZhbHVlKFZNJiB2bSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVl
KQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIEdDU2FmZUNvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CiAgICAgCisgICAgc2V0RGlkV2F0Y2hJ
bnRlcm5hbFByb3BlcnRpZXMoZmFsc2UpOworICAgIAogICAgIEFTU0VSVCghSlNDOjppc1ZhbGlk
T2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgp
OwpAQCAtOTU2LDcgKzkxMSw3IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cHV0U3BlY2lm
aWNWYWwKIAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IHByb3BlcnR5VGFibGUoKS0+
bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKIAotICAgIHByb3BlcnR5VGFibGUoKS0+YWRk
KFByb3BlcnR5TWFwRW50cnkodm0sIHRoaXMsIHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzLCBz
cGVjaWZpY1ZhbHVlKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5
Q2hhbmdlKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwg
bmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5
T2Zmc2V0TWF5Q2hhbmdlKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0
dXJuIG5ld09mZnNldDsKQEAgLTEwNjAsNyArMTAxNSw2IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2UKICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3Qt
Pm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4pOwogICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV9wcmV2aW91c09yUmFyZURhdGEpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKIAogICAgIGlmICh0aGlzT2JqZWN0
LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKQEAgLTEwODMsOCArMTAzNyw3IEBAIGJvb2wgU3RydWN0
dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2UKICAgICAgICAgY3VycmVudCA9IHByb3RvdHlw
ZS5hc0NlbGwoKS0+c3RydWN0dXJlKHZtKTsKICAgICAgICAgCiAgICAgICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZXM7Ci0gICAgICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZTsKLSAgICAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0ID0gY3VycmVudC0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0
ZXMsIHNwZWNpZmljVmFsdWUpOworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBjdXJy
ZW50LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CiAgICAgICAgIGlmICghSlND
Ojppc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
CkBAIC0xMTQ0LDEzICsxMDk3LDggQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgYwogICAgIGlmICh0YWJsZSkgewogICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRv
ciBpdGVyID0gdGFibGUtPmJlZ2luKCk7CiAgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9y
IGVuZCA9IHRhYmxlLT5lbmQoKTsKLSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKKyAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIGl0ZXItPmtleSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KGl0ZXItPm9mZnNl
dCkpOwotICAgICAgICAgICAgaWYgKGl0ZXItPnNwZWNpZmljVmFsdWUpIHsKLSAgICAgICAgICAg
ICAgICBEdW1wQ29udGV4dCBkdW1teUNvbnRleHQ7Ci0gICAgICAgICAgICAgICAgb3V0LnByaW50
KCI9PiIsIFJhd1BvaW50ZXIoaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSkpOwotICAgICAgICAg
ICAgfQotICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxv
Y2soKTsKICAgICB9CkBAIC0xMTYwLDEwICsxMTA4LDYgQEAgdm9pZCBTdHJ1Y3R1cmU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV9uYW1lSW5QcmV2
aW91cykKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0
cnVjdHVyZS0+bV9uYW1lSW5QcmV2aW91cy5nZXQoKSwgIjoiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0
cnVjdHVyZS0+bV9vZmZzZXQpKTsKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9zcGVjaWZpY1Zh
bHVlSW5QcmV2aW91cykgewotICAgICAgICAgICAgRHVtcENvbnRleHQgZHVtbXlDb250ZXh0Owot
ICAgICAgICAgICAgb3V0LnByaW50KCI9PiIsIFJhd1BvaW50ZXIoc3RydWN0dXJlLT5tX3NwZWNp
ZmljVmFsdWVJblByZXZpb3VzLmdldCgpKSk7Ci0gICAgICAgIH0KICAgICB9CiAgICAgCiAgICAg
b3V0LnByaW50KCJ9LCAiLCBJbmRleGluZ1R5cGVEdW1wKGluZGV4aW5nVHlwZSgpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMTcw
ODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMSwxMiArMTExLDExIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lk
IGR1bXBTdGF0aXN0aWNzKCk7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSwgUHJvcGVydHlPZmZz
ZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25D
b250ZXh0KTsKLSAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4
aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwg
dW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNl
dCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5
VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUsIFByb3BlcnR5T2Zmc2V0
Jik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBQcm9wZXJ0eU9mZnNldCYsIFB1dFByb3BlcnR5U2xvdDo6Q29udGV4dCA9IFB1dFByb3Bl
cnR5U2xvdDo6VW5rbm93bkNvbnRleHQpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwg
U3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJl
bW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlPZmZzZXQmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBj
aGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5
cGUpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGRlc3BlY2lmeUZ1
bmN0aW9uVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSk7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgc3RhdGljIFN0cnVjdHVy
ZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSopOwpAQCAtMTM4LDcgKzEzNyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEpTQ2VsbCopOwogCiAgICAgLy8gVGhlc2Ugc2hvdWxkIGJlIHVzZWQgd2l0aCBj
YXV0aW9uLiAgCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZzZXQgYWRkUHJvcGVy
dHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRl
cywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9wZXJ0
eU9mZnNldCBhZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmVQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICB2b2lkIHNldFByb3RvdHlw
ZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpIHsgbV9wcm90b3R5
cGUuc2V0KHZtLCB0aGlzLCBwcm90b3R5cGUpOyB9CiAgICAgICAgIApAQCAtMTg4LDggKzE4Nyw2
IEBAIHB1YmxpYzoKICAgICAvLyBXaWxsIGp1c3QgdGhlIHByb3RvdHlwZSBjaGFpbiBpbnRlcmNl
cHQgdGhpcyBwcm9wZXJ0eSBhY2Nlc3M/CiAgICAgYm9vbCBwcm90b3R5cGVDaGFpbk1heUludGVy
Y2VwdFN0b3JlVG8oVk0mLCBQcm9wZXJ0eU5hbWUpOwogICAgICAgICAKLSAgICBib29sIHRyYW5z
aXRpb25EaWRJbnZvbHZlU3BlY2lmaWNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9zcGVjaWZp
Y1ZhbHVlSW5QcmV2aW91czsgfQotICAgICAgICAKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzSUQo
KSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9
PSBpbmZvKCkpOwpAQCAtMjYzLDEwICsyNjAsMTAgQEAgcHVibGljOgogCiAgICAgUHJvcGVydHlP
ZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lKTsKICAgICBQcm9wZXJ0eU9mZnNldCBnZXQoVk0m
LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVy
dHlPZmZzZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlND
ZWxsKiYgc3BlY2lmaWNWYWx1ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvcGVydHlPZmZz
ZXQgZ2V0KFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcyk7CiAKICAgICBQ
cm9wZXJ0eU9mZnNldCBnZXRDb25jdXJyZW50bHkoVk0mLCBTdHJpbmdJbXBsKiB1aWQpOwotICAg
IFByb3BlcnR5T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5z
aWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpOworICAgIFByb3BlcnR5
T2Zmc2V0IGdldENvbmN1cnJlbnRseShWTSYsIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQmIGF0
dHJpYnV0ZXMpOwogCiAgICAgdm9pZCBzZXRIYXNHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzV2l0aFBy
b3RvQ2hlY2soYm9vbCBpc19fcHJvdG9fXykKICAgICB7CkBAIC0yODMsOSArMjgwLDYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gIUpTQzo6aXNWYWxpZE9mZnNldChtX29mZnNldCk7CiAgICAg
fQogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXNwZWNpZnlEaWN0aW9uYXJ5RnVuY3Rp
b24oVk0mLCBQcm9wZXJ0eU5hbWUpOwotICAgIHZvaWQgZGlzYWJsZVNwZWNpZmljRnVuY3Rpb25U
cmFja2luZygpIHsgc2V0U3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50KG1heFNwZWNpZmljRnVu
Y3Rpb25UaHJhc2hDb3VudCk7IH0KLQogICAgIHZvaWQgc2V0RW51bWVyYXRpb25DYWNoZShWTSYs
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqIGVudW1lcmF0aW9uQ2FjaGUpOyAvLyBEZWZpbmVkIGlu
IEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaC4KICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBl
bnVtZXJhdGlvbkNhY2hlKCk7IC8vIERlZmluZWQgaW4gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5o
LgogICAgIHZvaWQgZ2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mLCBQcm9wZXJ0eU5h
bWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSk7CkBAIC0zNjQsMTMgKzM1OCwzNiBAQCBwdWJsaWM6
CiAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uV2F0Y2hwb2ludFNldElzU3RpbGxWYWxpZCgpKTsK
ICAgICAgICAgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldC5hZGQod2F0Y2hwb2ludCk7CiAgICAg
fQotICAgICAgICAKKyAgICAKICAgICB2b2lkIGRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVy
ZSgpIGNvbnN0OwogICAgIAogICAgIElubGluZVdhdGNocG9pbnRTZXQmIHRyYW5zaXRpb25XYXRj
aHBvaW50U2V0KCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX3RyYW5zaXRpb25XYXRj
aHBvaW50U2V0OwogICAgIH0KKyAgICAKKyAgICBXYXRjaHBvaW50U2V0KiBlbnN1cmVQcm9wZXJ0
eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChWTSYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICB2b2lk
IHN0YXJ0V2F0Y2hpbmdQcm9wZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYgdm0sIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCkKKyAgICB7CisgICAgICAgIGVuc3VyZVByb3BlcnR5UmVwbGFjZW1lbnRXYXRj
aHBvaW50U2V0KHZtLCBvZmZzZXQpOworICAgIH0KKyAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdQcm9w
ZXJ0eUZvclJlcGxhY2VtZW50cyhWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgV2F0Y2hwb2ludFNl
dCogcHJvcGVydHlSZXBsYWNlbWVudFdhdGNocG9pbnRTZXQoUHJvcGVydHlPZmZzZXQpOworICAg
IHZvaWQgZGlkUmVwbGFjZVByb3BlcnR5KFByb3BlcnR5T2Zmc2V0KTsKKyAgICB2b2lkIGRpZENh
Y2hlUHJvcGVydHlSZXBsYWNlbWVudChWTSYsIFByb3BlcnR5T2Zmc2V0KTsKKyAgICAKKyAgICB2
b2lkIHN0YXJ0V2F0Y2hpbmdJbnRlcm5hbFByb3BlcnRpZXNJZk5lY2Vzc2FyeShWTSYgdm0pCisg
ICAgeworICAgICAgICBpZiAoTElLRUxZKGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0
aWVzKHZtKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9w
ZXJ0aWVzSWZOZWNlc3NhcnlGb3JFbnRpcmVDaGFpbihWTSYgdm0pCisgICAgeworICAgICAgICBm
b3IgKFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpczsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBz
dHJ1Y3R1cmUtPnN0b3JlZFByb3RvdHlwZVN0cnVjdHVyZSgpKQorICAgICAgICAgICAgc3RydWN0
dXJlLT5zdGFydFdhdGNoaW5nSW50ZXJuYWxQcm9wZXJ0aWVzSWZOZWNlc3Nhcnkodm0pOworICAg
IH0KIAogICAgIFBhc3NSZWZQdHI8U3RydWN0dXJlU2hhcGU+IHRvU3RydWN0dXJlU2hhcGUoKTsK
ICAgICAKQEAgLTQwNiwxMSArNDIzLDExIEBAIHB1YmxpYzoKICAgICBERUZJTkVfQklURklFTEQo
Ym9vbCwgaGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywg
SGFzUmVhZE9ubHlPckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90bywgMSwgNCk7
CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzLCBI
YXNOb25FbnVtZXJhYmxlUHJvcGVydGllcywgMSwgNSk7CiAgICAgREVGSU5FX0JJVEZJRUxEKHVu
c2lnbmVkLCBhdHRyaWJ1dGVzSW5QcmV2aW91cywgQXR0cmlidXRlc0luUHJldmlvdXMsIDE0LCA2
KTsKLSAgICBERUZJTkVfQklURklFTEQodW5zaWduZWQsIHNwZWNpZmljRnVuY3Rpb25UaHJhc2hD
b3VudCwgU3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50LCAyLCAyMCk7CiAgICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIHByZXZlbnRFeHRlbnNpb25zLCBQcmV2ZW50RXh0ZW5zaW9ucywgMSwgMjIp
OwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRUcmFuc2l0aW9uLCBEaWRUcmFuc2l0aW9u
LCAxLCAyMyk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHN0YXRpY0Z1bmN0aW9uc1JlaWZp
ZWQsIFN0YXRpY0Z1bmN0aW9uc1JlaWZpZWQsIDEsIDI0KTsKICAgICBERUZJTkVfQklURklFTEQo
Ym9vbCwgaGFzUmFyZURhdGEsIEhhc1JhcmVEYXRhLCAxLCAyNSk7CisgICAgREVGSU5FX0JJVEZJ
RUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0aWVzLCBEaWRXYXRjaEludGVybmFsUHJv
cGVydGllcywgMSwgMjYpOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNl
dHNFeHRyYWN0b3I7CkBAIC00MjEsNyArNDM4LDcgQEAgcHJpdmF0ZToKIAogICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZShWTSYsIGNvbnN0IFN0cnVjdHVyZSopOwogICAgIAotICAgIHN0YXRp
YyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBs
KFN0cnVjdHVyZSosIFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxs
KiBzcGVjaWZpY1ZhbHVlLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSos
IFN0cmluZ0ltcGwqIHVpZCwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmKTsK
IAogICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIHN0cnVjdHVyZSB0aGF0IGhhcyBhIHVzYWJs
ZSBwcm9wZXJ0eSB0YWJsZSwgdGhhdCBwcm9wZXJ0eSB0YWJsZSwKICAgICAvLyBhbmQgdGhlIGxp
c3Qgb2Ygc3RydWN0dXJlcyB0aGF0IHdlIHZpc2l0ZWQgYmVmb3JlIHdlIGdvdCB0byBpdC4gSWYg
aXQgcmV0dXJucyBhCkBAIC00MzEsMTkgKzQ0OCwxNiBAQCBwcml2YXRlOgogICAgIAogICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIHRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBE
aWN0aW9uYXJ5S2luZCk7CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBwdXRTcGVjaWZpY1ZhbHVlKFZN
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFs
dWUpOworICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQg
YXR0cmlidXRlcyk7CiAgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAK
ICAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKSVRMb2Nr
ZXImLCBWTSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAKLSAgICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKFZNJiwgUHJvcGVydHlOYW1lKTsK
LSAgICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhWTSYpOwotCiAgICAgV3JpdGVCYXJyaWVy
PFByb3BlcnR5VGFibGU+JiBwcm9wZXJ0eVRhYmxlKCk7Ci0gICAgUHJvcGVydHlUYWJsZSogdGFr
ZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQoVk0mLCBTdHJ1Y3R1cmUqIG93bmVyKTsKLSAg
ICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZShWTSYsIFN0cnVjdHVyZSogb3duZXIp
OwotICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhWTSYsIFN0
cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIHRha2VQcm9wZXJ0eVRhYmxlT3JD
bG9uZUlmUGlubmVkKFZNJik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUo
Vk0mKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoVk0m
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoVk0m
KTsKICAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShWTSYgdm0sIERl
ZmVyR0MmKQogICAgIHsKQEAgLTUwMywxMiArNTE3LDEyIEBAIHByaXZhdGU6CiAgICAgYm9vbCBj
aGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGFsbG9jYXRlUmFyZURhdGEoVk0mKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0V2F0Y2hpbmdJ
bnRlcm5hbFByb3BlcnRpZXMoVk0mKTsKIAogICAgIHN0YXRpYyBjb25zdCBpbnQgc19tYXhUcmFu
c2l0aW9uTGVuZ3RoID0gNjQ7CiAgICAgc3RhdGljIGNvbnN0IGludCBzX21heFRyYW5zaXRpb25M
ZW5ndGhGb3JOb25FdmFsUHV0QnlJZCA9IDUxMjsKIAotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBtYXhTcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQgPSAzOwotICAgIAogICAgIC8vIFRoZXNl
IG5lZWQgdG8gYmUgcHJvcGVybHkgYWxpZ25lZCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSAnU3Ry
dWN0dXJlJwogICAgIC8vIHBhcnQgb2YgdGhlIG9iamVjdC4KICAgICBTdHJ1Y3R1cmVJREJsb2Ig
bV9ibG9iOwpAQCAtNTIxLDcgKzUzNSw2IEBAIHByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPEpT
Q2VsbD4gbV9wcmV2aW91c09yUmFyZURhdGE7CiAKICAgICBSZWZQdHI8U3RyaW5nSW1wbD4gbV9u
YW1lSW5QcmV2aW91czsKLSAgICBXcml0ZUJhcnJpZXI8SlNDZWxsPiBtX3NwZWNpZmljVmFsdWVJ
blByZXZpb3VzOwogCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbzsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAko
cmV2aXNpb24gMTcwODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsOSArMTAyLDcgQEAgaW5saW5lIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KFZNJgogaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6Z2V0Q29uY3VycmVudGx5KFZNJiB2bSwgU3RyaW5nSW1wbCogdWlkKQogewogICAg
IHVuc2lnbmVkIGF0dHJpYnV0ZXNJZ25vcmVkOwotICAgIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZUln
bm9yZWQ7Ci0gICAgcmV0dXJuIGdldENvbmN1cnJlbnRseSgKLSAgICAgICAgdm0sIHVpZCwgYXR0
cmlidXRlc0lnbm9yZWQsIHNwZWNpZmljVmFsdWVJZ25vcmVkKTsKKyAgICByZXR1cm4gZ2V0Q29u
Y3VycmVudGx5KHZtLCB1aWQsIGF0dHJpYnV0ZXNJZ25vcmVkKTsKIH0KIAogaW5saW5lIGJvb2wg
U3RydWN0dXJlOjpoYXNJbmRleGluZ0hlYWRlcihjb25zdCBKU0NlbGwqIGNlbGwpIGNvbnN0CkBA
IC0yMjMsNiArMjIxLDMxIEBAIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFi
bGUKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogfQogCitpbmxpbmUgdm9pZCBT
dHJ1Y3R1cmU6OmRpZFJlcGxhY2VQcm9wZXJ0eShQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCit7Cisg
ICAgaWYgKExJS0VMWSghaGFzUmFyZURhdGEoKSkpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJ1
Y3R1cmVSYXJlRGF0YTo6UHJvcGVydHlXYXRjaHBvaW50TWFwKiBtYXAgPSByYXJlRGF0YSgpLT5t
X3JlcGxhY2VtZW50V2F0Y2hwb2ludFNldHMuZ2V0KCk7CisgICAgaWYgKExJS0VMWSghbWFwKSkK
KyAgICAgICAgcmV0dXJuOworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1hcC0+Z2V0KG9mZnNl
dCk7CisgICAgaWYgKExJS0VMWSghc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHNldC0+Zmly
ZUFsbCgiUHJvcGVydHkgZGlkIGdldCByZXBsYWNlZCIpOworfQorCitpbmxpbmUgV2F0Y2hwb2lu
dFNldCogU3RydWN0dXJlOjpwcm9wZXJ0eVJlcGxhY2VtZW50V2F0Y2hwb2ludFNldChQcm9wZXJ0
eU9mZnNldCBvZmZzZXQpCit7CisgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9sb2Nr
KTsKKyAgICBpZiAoIWhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgIFN0cnVjdHVyZVJhcmVEYXRhOjpQcm9wZXJ0eVdh
dGNocG9pbnRNYXAqIG1hcCA9IHJhcmVEYXRhKCktPm1fcmVwbGFjZW1lbnRXYXRjaHBvaW50U2V0
cy5nZXQoKTsKKyAgICBpZiAoIW1hcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIG1hcC0+Z2V0KG9mZnNldCk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6
OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAogewogICAgIFByb3BlcnR5VGFibGUqIHBy
b3BlcnR5VGFibGUgPSBtX3Byb3BlcnR5VGFibGVVbnNhZmUuZ2V0KCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlUmFyZURhdGEuY3BwCShy
ZXZpc2lvbiAxNzA4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVSYXJlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDExIEBAIFN0cnVjdHVy
ZVJhcmVEYXRhKiBTdHJ1Y3R1cmVSYXJlRGF0YTo6Y3IKICAgICByZXR1cm4gcmFyZURhdGE7CiB9
CiAKK3ZvaWQgU3RydWN0dXJlUmFyZURhdGE6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAg
IHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4oY2VsbCktPlN0cnVjdHVyZVJhcmVEYXRh
Ojp+U3RydWN0dXJlUmFyZURhdGEoKTsKK30KKwogU3RydWN0dXJlUmFyZURhdGE6OlN0cnVjdHVy
ZVJhcmVEYXRhKFZNJiB2bSwgU3RydWN0dXJlKiBwcmV2aW91cykKICAgICA6IEpTQ2VsbCh2bSwg
dm0uc3RydWN0dXJlUmFyZURhdGFTdHJ1Y3R1cmUuZ2V0KCkpCiB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVSYXJlRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVEYXRhLmgJKHJldmlzaW9u
IDE3MDgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVJhcmVE
YXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJDbGFzc0luZm8u
aCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCisjaW5jbHVk
ZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQwLDYgKzQxLDEw
IEBAIGNsYXNzIFN0cnVjdHVyZVJhcmVEYXRhIDogcHVibGljIEpTQ2VsbCAKIHB1YmxpYzoKICAg
ICBzdGF0aWMgU3RydWN0dXJlUmFyZURhdGEqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSopOwogCisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSlNDZWxsKik7CisKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2Vs
bCosIFNsb3RWaXNpdG9yJik7CiAKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1
cmUoVk0mLCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKQEAgLTUzLDEwICs1
OCwxMiBAQCBwdWJsaWM6CiAKICAgICBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yKiBlbnVtZXJhdGlv
bkNhY2hlKCk7CiAgICAgdm9pZCBzZXRFbnVtZXJhdGlvbkNhY2hlKFZNJiwgY29uc3QgU3RydWN0
dXJlKiBvd25lciwgSlNQcm9wZXJ0eU5hbWVJdGVyYXRvciogdmFsdWUpOwotCisgICAgCiAgICAg
REVDTEFSRV9FWFBPUlRfSU5GTzsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU3RydWN0
dXJlOworICAgIAogICAgIFN0cnVjdHVyZVJhcmVEYXRhKFZNJiwgU3RydWN0dXJlKik7CiAKICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNWaXNpdENo
aWxkcmVuIHwgSlNDZWxsOjpTdHJ1Y3R1cmVGbGFnczsKQEAgLTY0LDYgKzcxLDkgQEAgcHJpdmF0
ZToKICAgICBXcml0ZUJhcnJpZXI8U3RydWN0dXJlPiBtX3ByZXZpb3VzOwogICAgIFdyaXRlQmFy
cmllcjxKU1N0cmluZz4gbV9vYmplY3RUb1N0cmluZ1ZhbHVlOwogICAgIFdyaXRlQmFycmllcjxK
U1Byb3BlcnR5TmFtZUl0ZXJhdG9yPiBtX2VudW1lcmF0aW9uQ2FjaGU7CisgICAgCisgICAgdHlw
ZWRlZiBIYXNoTWFwPFByb3BlcnR5T2Zmc2V0LCBSZWZQdHI8V2F0Y2hwb2ludFNldD4sIFdURjo6
SW50SGFzaDxQcm9wZXJ0eU9mZnNldD4sIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFp
dHM8UHJvcGVydHlPZmZzZXQ+PiBQcm9wZXJ0eVdhdGNocG9pbnRNYXA7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFByb3BlcnR5V2F0Y2hwb2ludE1hcD4gbV9yZXBsYWNlbWVudFdhdGNocG9pbnRTZXRz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLWNvbnN0YW50LWds
b2JhbC1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTggQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgaWYgKHApCisgICAg
ICAgIE1hdGggPSB7c2luOiBmdW5jdGlvbigpIHsgcmV0dXJuIDQyOyB9LCBQSTogNDMsIGFiczog
TWF0aC5hYnN9OworfQorCitub0lubGluZShmb28pOworCisoZnVuY3Rpb24oKSB7CisgICAgdmFy
IG4gPSAxMDAwMDA7CisgICAgdmFyIG0gPSAxMDA7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgZm9vKGkgPT0gbiAtIG0pOwor
ICAgICAgICByZXN1bHQgKz0gTWF0aC5zaW4oTWF0aC5QSSk7CisgICAgfQorICAgIGlmIChNYXRo
LmFicyhyZXN1bHQgLSBtICogNDIpID4gMWUtOCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0OiAiICsgcmVzdWx0OworfSkoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5m
ZXItY29uc3RhbnQtcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMiBAQAor
dmFyIG8gPSB7Zjp7Zjp7Zjp7Zjp7Zjp7Zjp7Zjo0Mn19fX19fX07CisKK2Z1bmN0aW9uIGZvbyhw
KSB7CisgICAgaWYgKHApCisgICAgICAgIG8uZi5mLmYuZi5mLmYgPSB7Zjo1M307Cit9CisKK25v
SW5saW5lKGZvbyk7CisKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgbiA9IDEwMDAwMDsKKyAgICB2
YXIgbSA9IDEwMDsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICAKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG47ICsraSkgeworICAgICAgICBmb28oaSA9PSBuIC0gbSk7CisgICAgICAgIHJlc3Vs
dCArPSBvLmYuZi5mLmYuZi5mLmY7CisgICAgfQorICAgIAorICAgIGlmIChyZXN1bHQgIT0gKG4g
LSBtKSAqIDQyICsgbSAqIDUzKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyByZXN1bHQ7Cit9KSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRoZW4taW52
YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2ppdC1jYWNoZS1wb2x5LXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZvbGQtdGhlbi1p
bnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9qaXQtY2FjaGUtcG9seS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1mb2xkLXRo
ZW4taW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACit2YXIgbyA9
IHtmOjQyfTsKKworZnVuY3Rpb24gZm9vKHAsIG8sIHYpIHsKKyAgICBpZiAocCkKKyAgICAgICAg
by5mID0gdjsKK30KKworZnVuY3Rpb24gYmFyKCkgeworICAgIHJldHVybiBvLmY7Cit9CisKK25v
SW5saW5lKGZvbyk7Citub0lubGluZShiYXIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyAr
K2kpCisgICAgZm9vKGZhbHNlKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAg
IGZvbyh0cnVlLCB7fSwgNDIpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpCisgICAg
Zm9vKHRydWUsIG8sIDQyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK2Zvbyh0cnVlLCBvLCA1
Myk7Cit2YXIgcmVzdWx0ID0gYmFyKCk7CitpZiAocmVzdWx0ICE9IDUzKQorICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFu
ZC1mb2xkLXRoZW4taW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2ppdC1jYWNoZS1yZXBsYWNlLXRoZW4tY2FjaGUtZ2V0LWFuZC1m
b2xkLXRoZW4taW52YWxpZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3Mvaml0LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZv
bGQtdGhlbi1pbnZhbGlkYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAgQEAKK3Zh
ciBvID0ge2Y6NDJ9OworCitmdW5jdGlvbiBmb28ocCwgdikgeworICAgIGlmIChwKQorICAgICAg
ICBvLmYgPSB2OworfQorCitmdW5jdGlvbiBiYXIoKSB7CisgICAgcmV0dXJuIG8uZjsKK30KKwor
bm9JbmxpbmUoZm9vKTsKK25vSW5saW5lKGJhcik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTA7
ICsraSkKKyAgICBmb28oZmFsc2UpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwOyArK2kpCisg
ICAgZm9vKHRydWUsIDQyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgewor
ICAgIHZhciByZXN1bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK2Zvbyh0cnVlLCA1Myk7
Cit2YXIgcmVzdWx0ID0gYmFyKCk7CitpZiAocmVzdWx0ICE9IDUzKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdCBhdCBlbmQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9p
bnQtaW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2ppdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9pbnQtaW52YWxp
ZGF0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvaml0LXB1dC10by1zY29wZS1nbG9iYWwtY2FjaGUtd2F0Y2hwb2ludC1pbnZhbGlkYXRlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIGZvbyhwLCB2KSB7Cisg
ICAgaWYgKHApCisgICAgICAgIGdsb2JhbCA9IHY7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAg
ICByZXR1cm4gZ2xvYmFsOworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgIGZvbyhmYWxzZSk7CisKK3ZhciB2YWx1
ZSA9IDQyOworZm9vKHRydWUsIHZhbHVlKTsKK3ZhciBuID0gMTAwMDAwOwordmFyIG0gPSAxMDA7
Citmb3IgKHZhciBpID0gMDsgaSA8IG47ICsraSkgeworICAgIGlmIChpID09IG4gLSBtKQorICAg
ICAgICBmb28odHJ1ZSwgdmFsdWUgPSA1Myk7CisgICAgdmFyIHJlc3VsdCA9IGJhcigpOworICAg
IGlmIChyZXN1bHQgIT0gdmFsdWUpCisgICAgICAgIHRocm93ICJFcnJvcjogb24gaXRlcmF0aW9u
ICIgKyBpICsgIiBnb3Q6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZv
bGQtdGhlbi1pbnZhbGlkYXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbGxpbnQtY2FjaGUtcmVwbGFjZS10aGVuLWNhY2hlLWdldC1hbmQtZm9s
ZC10aGVuLWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2xsaW50LWNhY2hlLXJlcGxhY2UtdGhlbi1jYWNoZS1nZXQtYW5kLWZv
bGQtdGhlbi1pbnZhbGlkYXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK3Zh
ciBvID0ge2Y6NDJ9OworCitmdW5jdGlvbiBmb28odikgeworICAgIG8uZiA9IHY7Cit9CisKK2Z1
bmN0aW9uIGJhcigpIHsKKyAgICByZXR1cm4gby5mOworfQorCitub0lubGluZShmb28pOworbm9J
bmxpbmUoYmFyKTsKKworZm9vKDQyKTsKK2Zvbyg0Mik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJlc3VsdCAh
PSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQor
Citmb28oNTMpOwordmFyIHJlc3VsdCA9IGJhcigpOworaWYgKHJlc3VsdCAhPSA1MykKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgYXQgZW5kOiAiICsgcmVzdWx0OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNh
Y2hlLXdhdGNocG9pbnQtaW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2xsaW50LXB1dC10by1zY29wZS1nbG9iYWwtY2FjaGUtd2F0
Y2hwb2ludC1pbnZhbGlkYXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9sbGludC1wdXQtdG8tc2NvcGUtZ2xvYmFsLWNhY2hlLXdhdGNocG9p
bnQtaW52YWxpZGF0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyIEBACitmdW5jdGlv
biBmb28odikgeworICAgIGdsb2JhbCA9IHY7Cit9CisKK2Z1bmN0aW9uIGJhcigpIHsKKyAgICBy
ZXR1cm4gZ2xvYmFsOworfQorCitub0lubGluZShmb28pOworbm9JbmxpbmUoYmFyKTsKKwordmFy
IHZhbHVlID0gNDI7Citmb28odmFsdWUpOwordmFyIG4gPSAxMDAwMDA7Cit2YXIgbSA9IDEwMDsK
K2ZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgaWYgKGkgPT0gbiAtIG0pCisgICAg
ICAgIGZvbyh2YWx1ZSA9IDUzKTsKKyAgICB2YXIgcmVzdWx0ID0gYmFyKCk7CisgICAgaWYgKHJl
c3VsdCAhPSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBvbiBpdGVyYXRpb24gIiArIGkg
KyAiIGdvdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvcmVwZWF0LXB1dC10by1zY29wZS1nbG9iYWwtd2l0aC1zYW1lLXZhbHVlLXdhdGNo
cG9pbnQtaW52YWxpZGF0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12YWx1ZS13
YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL3JlcGVhdC1wdXQtdG8tc2NvcGUtZ2xvYmFsLXdpdGgtc2FtZS12
YWx1ZS13YXRjaHBvaW50LWludmFsaWRhdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MyBAQAorZnVuY3Rpb24gZm9vKHYpIHsKKyAgICBnbG9iYWwgPSB2OworfQorCitmdW5jdGlvbiBi
YXIoKSB7CisgICAgcmV0dXJuIGdsb2JhbDsKK30KKworbm9JbmxpbmUoZm9vKTsKK25vSW5saW5l
KGJhcik7CisKK3ZhciB2YWx1ZSA9IDQyOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQor
ICAgIGZvbyh2YWx1ZSk7Cit2YXIgbiA9IDEwMDAwMDsKK3ZhciBtID0gMTAwOworZm9yICh2YXIg
aSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICBpZiAoaSA9PSBuIC0gbSkKKyAgICAgICAgZm9vKHZh
bHVlID0gNTMpOworICAgIHZhciByZXN1bHQgPSBiYXIoKTsKKyAgICBpZiAocmVzdWx0ICE9IHZh
bHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IG9uIGl0ZXJhdGlvbiAiICsgaSArICIgZ290OiAi
ICsgcmVzdWx0OworfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTcwODIxKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTQtMDctMDQgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBbZnRsb3B0XSBJbmZlciBp
bW11dGFibGUgb2JqZWN0IHByb3BlcnRpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNDU2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJv
cGVydHktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2luZmVyLWNv
bnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2luZmVyLWNvbnN0YW50LXByb3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHku
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0
YW50LXByb3BlcnR5LmpzOiBBZGRlZC4KKwogMjAxNC0wNi0zMCAgTWFyayBIYWhuZW5iZXJnICA8
bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIE1lcmdlIHIxNjkxMjEgZnJvbSB0cnVu
ay4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXBy
b3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0
eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNz
L2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9pbmZlci1jb25zdGFudC1nbG9iYWwtcHJvcGVydHkuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1nbG9i
YWwtcHJvcGVydHkuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9pbmZlci1jb25zdGFudC1n
bG9iYWwtcHJvcGVydHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9wZXJ0eS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9pbmZlci1jb25zdGFudC1wcm9w
ZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2luZmVyLWNvbnN0YW50LXByb3BlcnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvaW5mZXItY29uc3RhbnQtcHJvcGVydHkuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5Lmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2luZmVyLWNvbnN0YW50LXBy
b3BlcnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtcHJvcGVy
dHkuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQtZ2xvYmFsLXByb3BlcnR5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNv
bnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LWdsb2JhbC1wcm9wZXJ0eS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDggQEAKKyhmdW5jdGlvbigpIHsKKyAgICB2YXIgcmVz
dWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAg
ICByZXN1bHQgKz0gTWF0aC5zaW4oTWF0aC5QSSk7CisgICAgfQorICAgIGlmIChNYXRoLmFicyhy
ZXN1bHQpID4gMWUtOCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVz
dWx0OworfSkoKTsKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2lu
ZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL2luZmVyLWNvbnN0YW50LXByb3BlcnR5LmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvaW5mZXItY29uc3RhbnQt
cHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAordmFyIG8gPSB7Zjp7
Zjp7Zjp7Zjp7Zjp7Zjp7Zjo0Mn19fX19fX07CisoZnVuY3Rpb24oKSB7CisgICAgdmFyIG4gPSAx
MDAwMDAwOworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsg
KytpKQorICAgICAgICByZXN1bHQgKz0gby5mLmYuZi5mLmYuZi5mOworICAgIAorICAgIGlmIChy
ZXN1bHQgIT0gbiAqIDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9KSgpOwo=
</data>
<flag name="review"
          id="258966"
          type_id="1"
          status="+"
          setter="mhahnenberg"
    />
          </attachment>
      

    </bug>

</bugzilla>